]> git.sur5r.net Git - cc65/commitdiff
More banking fixes
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 26 Oct 2001 13:48:49 +0000 (13:48 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 26 Oct 2001 13:48:49 +0000 (13:48 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1090 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/c128/crt0.s

index 25ec5e6c38933acb0525076a71c2d3c75bbba92a..4db5e618c288b4bcd74b4e355cf2f47b3a19201e 100644 (file)
@@ -70,28 +70,32 @@ Head:   .word   @Next
 ; ------------------------------------------------------------------------
 ; Actual code
 
-               ldx     #zpspace-1
-L1:    lda     sp,x
-       sta     zpsave,x        ; save the zero page locations we need
-       dex
-               bpl     L1
-
 ; Close open files
 
        jsr     CLRCH
 
-; Switch to second charset
+; Switch to the second charset
 
        lda     #14
        jsr     BSOUT
 
-; Get the current MMU setting and save it. Set new memory config.
+; Before doing anything else, we have to setup our banking configuration.
+; Otherwise just the lowest 16K are actually RAM. Writing through the ROM
+; to the underlying RAM works, but it is bad style.
 
        lda     MMU_CR          ; Get current memory configuration...
                pha                     ; ...and save it for later
                lda     #CC65_MMU_CFG   ; Bank0 with kernal ROM
        sta     MMU_CR
 
+; Save the zero page locations we need
+
+               ldx     #zpspace-1
+L1:    lda     sp,x
+       sta     zpsave,x
+       dex
+               bpl     L1
+
 ; Clear the BSS data
 
        jsr     zerobss
@@ -102,7 +106,7 @@ L1: lda     sp,x
        sta     mmusave
 
                tsx
-               stx     spsave          ; save system stk ptr
+               stx     spsave          ; Save the system stack pointer
 
        lda     #<(__RAM_START__ + __RAM_SIZE__)
        sta     sp
@@ -159,12 +163,10 @@ NoIRQ2: jsr       donelib
 
        jsr     doneconio
 
-; Reset stack and the MMU
+; Reset the stack
 
        ldx     spsave
        txs
-               lda     mmusave
-       sta     MMU_CR
 
 ; Copy back the zero page stuff
 
@@ -174,7 +176,12 @@ L2:        lda     zpsave,x
        dex
        bpl     L2
 
-; Done
+; Reset the memory configuration
+
+               lda     mmusave
+       sta     MMU_CR
+
+; Done, restore kernal vectors in an attempt to cleanup
 
        jmp     RESTOR
 
@@ -192,10 +199,10 @@ L2:       lda     zpsave,x
 ; they have to go here.
 
 IRQStub:
-       cld                             ; Just to be sure
-       lda     MMU_CR                  ; Get old register value
-       pha                             ; And save on stack
-       lda     #CC65_MMU_CFG           ; Bank 0 with kernal ROM
+       cld                             ; Just to be sure
+       lda     MMU_CR                  ; Get old register value
+       pha                             ; And save on stack
+       lda     #CC65_MMU_CFG           ; Bank 0 with kernal ROM
        sta     MMU_CR
        ldy     #<(__IRQFUNC_COUNT__*2)
                lda     #<__IRQFUNC_TABLE__