29.12.2022, 10:45
Code:
was ich noch nicht verstanden habe, ist die Sache mit
.function
wenn ich .function nutzen möchte, also, dass der code nicht
wie bei .macro immer eingesetzt wird, und damit das eigentliche
Assembler-Listing im Speicher immer größer werden läßt, dann kann
ich keine opcodes - menomics schreiben, und es stehen mir nur die
Script-Sachen zur Verfügung.
Wenn ich nun .macro verwende, dann wird der Code immer angehangen
und die .function Funktionalität geht verloren.
Wie kann man dann also Unterprogramme schreiben ?
- phne .function, und mit bsr und jmp Sachen hüpfen ?
irgendwie strange. ich habe das ganze kick zeug hier gesaugt:
http://theweb.dk/KickAssembler/Main.html#frontpage
// -----------------------------------------------------
// (c) 2022 by Jens Kallup - paule32
// all rights reserved.
//
// only for education, and non-profit useage !!!
// -----------------------------------------------------
:BasicUpstart2(main)
.const video_border = $d020
.pc = $810 "Data"
.pc = * "Code"
// -------------------------------------------------------
// Error variable placeholders.
// -------------------------------------------------------
.var ERR_RANGE_CHECK = "range error: color #0 .. #15 !"
// -------------------------------------------------------
// This function set the border of the screen display ...
// Valid color arg: #0 .. #15. possible:
//
// #00 - black | #01 - white
// #02 - red | #03 - cyan
// #04 - purple | #05 - green
// #06 - blue | #07 - yellow
// #08 - orange | #09 - brown
// #10 - light red | #11 - dark gray
// #12 - gray | #13 - light green
// #14 - light blue | #15 - light gray
// -------------------------------------------------------
.function SetBorderColor(color) {
.if (color<$0) .error ERR_RANGE_CHECK
.if (color>$f) .error ERR_RANGE_CHECK
lda #color
sta video_border
.return 0
}
// ---------------------------------------------------------
// Entry point to the program:
// ---------------------------------------------------------
main:
.if (SetBorderColor(1)>0)
lda #01 // load 'A' into accumulator
sta $0400 // store accumulator value ('A') to screen
rts // return to BASIC