.pc =$0801 "Basic Starter" :BasicUpstart($0820) .pc=$0810 "Constants" multicol: .byte $00 bgcol: .byte $06 sprcol: .byte $0e sprmcol1: .byte $00 sprmcol2: .byte $00 .pc = $0820 "Code" sei lda multicol sta $d01c lda bgcol sta $d020 sta $d021 lda sprmcol1 sta $d025 lda sprmcol2 sta $d026 lda sprcol ldx #$07 !loop: sta $d027,x dex bpl !loop- ldx #$00 lda #$20 !loop: sta $0400,x sta $0500,x sta $0600,x sta $0700,x inx bne !loop- lda #$ff sta $d015 lda #$80 sta $d010 ldx #$07 ldy #$00 lda #$18+44 !loop: sta $d000,y clc adc #29 iny iny dex bpl !loop- jsr generatefont lda #$35 sta $01 mainloop: lda #$2f sta ycoord lda #$80 sta spridx yloop: lda ycoord !wait: cmp $d012 bne !wait- clc adc #4 ldx #$07 ldy #$00 !loop: sta $d001,y iny iny dex bpl !loop- ldx #$00 ldy spridx !loop: tya sta $07f8,x iny inx cpx #8 bne !loop- clc lda spridx adc #8 sta spridx lda ycoord adc #25 sta ycoord cmp #$2f+8*25 bne yloop jmp mainloop ycoord: .byte 0 spridx: .byte 0 .pc=$0900 "Font generation code" generatefont: rts
Correct, no specific state of anything is to be assumed! I'll make an alternate, secret viewer, that loads somewhere completely else in memory and abuses stack and registers etc. before calling the $0900 code, and if your sprites don't look the same way then, it will be disqualified! :)
My only question then is how do we know what memory is safe to use as working space?