; by the screen memory afterwards.
;
; inputs:
-; __SAVEAREA_LOAD__ - load address of the program
+; __STARTADDRESS__ - load address of the program
; outputs:
; lodadr - (high byte only) value to
; write into RAMTOP
cmp tmp
beq scrmemok
+; if lodadr is at an exact 4K boundary, it's still ok
+
+ lda lodadr+1
+ and #$0f
+ beq scrmemok
+
; 4K boundary will be crossed, use this 4K boundary address as lodadr
al4k: lda lodadr+1
and #$f0
- tax
- dex
- stx lodadr+1
+ sta lodadr+1
bne scrmemtst
; not reached
-
-lodadr: .word __SAVEAREA_LOAD__ & $FF00 ; our program's load address, rounded down to page boundary
+.ifdef DEBUG
+.byte "XLMEMCHK:>"
+.endif
+lodadr: .word __STARTADDRESS__ & $FF00 ; our program's load address, rounded down to page boundary
tstadr: .res 2
lowadr: .res 2
tmp: .res 1
sbc #>DLSZ
sta lowadr+1
+.if 0 ; this cannot happen
; check if a 1K boundary is crossed
lda tstadr+1
and #$fc
cmp tmp
bne al4k ; 1K boundary will be crossed, decrease lodadr
+.endif
; address of display list is ok
; decrease lowadr by two