]> git.sur5r.net Git - cc65/commitdiff
cleanups and add more comments
authorChristian Groessler <chris@groessler.org>
Thu, 20 Jun 2013 22:01:07 +0000 (00:01 +0200)
committerChristian Groessler <chris@groessler.org>
Thu, 20 Jun 2013 22:01:07 +0000 (00:01 +0200)
libsrc/atari/shadow_ram_prepare.s
libsrc/atari/system_check.s
libsrc/atari/xlmemchk.inc

index 81b05ece3eb5b7d5f712cf6e11ffe26f7e065f27..079443ae6b46f7301425d58af01827f7a3e92537 100644 (file)
@@ -107,15 +107,15 @@ sramprep:
        ora     #2
        sta     PORTB
 
-.include "xlmemchk.inc"
+       .include "xlmemchk.inc" ; calculate lowest address used and new value for RAMTOP
 
-       ldx     tstadr2
+       ldx     lowadr
        stx     MEMTOP
        stx     APPMHI
-       lda     tstadr2+1
+       lda     lowadr+1
        sta     MEMTOP+1
        sta     APPMHI+1
-       lda     lowadr+1
+       lda     lodadr+1
        sta     RAMTOP
 
 
index bb0fe483e3045396300511de3b3719f455c03aec..ee74809220ce2b5749517fac0fed9178f7642e5c 100644 (file)
@@ -92,13 +92,13 @@ fail:       jsr     delay
 
 
 sys_ok:
-.include "xlmemchk.inc"
+       .include "xlmemchk.inc"         ; calculate lowest address we will use when we move the screen buffer down
 
        sec
        lda     MEMLO
-       sbc     tstadr2
+       sbc     lowadr
        lda     MEMLO+1
-       sbc     tstadr2+1
+       sbc     lowadr+1
        bcc     memlo_ok
 
 ; load address was too low
index a4207aaec1d9f2b4118bcef6174947d23655249f..9cc6b612c354b77dfa0c53e967be0cd6cd94dd01 100644 (file)
@@ -1,12 +1,21 @@
-; ... change system memory variables bla
-
-
-       jmp     cont
-
-lowadr:        .word   __SAVEAREA_LOAD__ & $FF00               ; our load address, rounded down to page boundary
-tstadr:        .res    2
-tstadr2:.res   2
-tmp:   .res    1
+;
+; Christian Groessler, Jun-2013
+;
+; This routine is used in preparation to move the screen memory
+; in front of the program.
+;
+; It calculates the value to put into RAMTOP for a subsequent
+; "GRAPHICS 0" call, and the lowest address which will be used
+; by the screen memory afterwards.
+; 
+; inputs:
+;      __SAVEAREA_LOAD__       -       load address of the program
+; outputs:
+;      lodadr                  -       (high byte only) value to
+;                                      write into RAMTOP
+;      lowadr                  -       lowest address occupied by
+;                                      screen data
+;
 
 
 ; When setting a display mode, the ROM takes the RAMTOP value
@@ -16,27 +25,35 @@ tmp:        .res    1
 ; This will become the new display list address.
 ; Screen memory cannot cross 4K boundaries and a display list
 ; cannot cross a 1K boundary.
+;
 ; Work out a sane value for RAMTOP to prevent boundary crossing.
 ; RAMTOP is only one byte, it counts in memory pages.
+;
+; The ROM doesn't do this boundary checking, since it doesn't
+; expect RAMTOP to have (rather) arbitrary values. For a
+; "GRAPHICS 0" call and RAMTOP representing the possible physically
+; available memory, boundary crossing cannot happen.
 
-cont:
 
-_SCRBUFSZ =    (40 * 24)               ; size of mode 0 screen buffer
-_DLSZ  =       32                      ; size of mode 0 display list
+SCRBUFSZ =     (40 * 24)               ; size of mode 0 screen buffer
+DLSZ   =       32                      ; size of mode 0 display list
+
+
+scrmemtst:
 
 ; subtract screen memory size from our load address
 
-       lda     lowadr
+       lda     lodadr
        sec
-       sbc     #<_SCRBUFSZ
+       sbc     #<SCRBUFSZ
        sta     tstadr
-       lda     lowadr+1
-       sbc     #>_SCRBUFSZ
+       lda     lodadr+1
+       sbc     #>SCRBUFSZ
        sta     tstadr+1
 
 ; check if a 4K boundary is crossed
 
-       lda     lowadr+1
+       lda     lodadr+1
        and     #$f0
        sta     tmp
        lda     tstadr+1
@@ -44,48 +61,51 @@ _DLSZ       =       32                      ; size of mode 0 display list
        cmp     tmp
        beq     scrmemok
 
-; 4K boundary will be crossed, take 4K boundary address as lowadr
+; 4K boundary will be crossed, use this 4K boundary address as lodadr
 
-al4k:  lda     lowadr+1
+al4k:  lda     lodadr+1
        and     #$f0
        tax
        dex
-       stx     lowadr+1
-       bne     cont
+       stx     lodadr+1
+       bne     scrmemtst
+; not reached
+
+
+lodadr:        .word   __SAVEAREA_LOAD__ & $FF00               ; our program's load address, rounded down to page boundary
+tstadr:        .res    2
+lowadr:        .res    2
+tmp:   .res    1
+
 
 ; subtract display list size from calculated screen address
 
 scrmemok:
        lda     tstadr
        sec
-       sbc     #<_DLSZ
-       sta     tstadr2
+       sbc     #<DLSZ
+       sta     lowadr
        lda     tstadr+1
-       sbc     #>_DLSZ
-       sta     tstadr2+1
+       sbc     #>DLSZ
+       sta     lowadr+1
 
 ; check if a 1K boundary is crossed
 
        lda     tstadr+1
        and     #$fc
        sta     tmp
-       lda     tstadr2+1
+       lda     lowadr+1
        and     #$fc
        cmp     tmp
-       bne     al4k            ; 1K boundary will be crossed, decrease lowadr
+       bne     al4k            ; 1K boundary will be crossed, decrease lodadr
 
 ; address of display list is ok
+; decrease lowadr by two
 
-dlok:
-
-; decrease tstadr2 by two
-
-       lda     tstadr2
+       lda     lowadr
        sec
        sbc     #2
-       sta     tstadr2
+       sta     lowadr
        bcs     dec_cont
-       lda     tstadr2+1
-       sbc     #0
-       sta     tstadr2+1
+       dec     lowadr+1
 dec_cont: