]> git.sur5r.net Git - cc65/commitdiff
* Moved the BASIC stub that calls the compiled program into it's own segment
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 9 Dec 2009 12:42:24 +0000 (12:42 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 9 Dec 2009 12:42:24 +0000 (12:42 +0000)
  named EXEHDR.
* Renamed BASICHDR to EXEHDR for the PET-II machines.
* Moved the call to CHRCH in front of the code that saves the zero page, since
  open files are sometimes remembered in the zero page, so we need to close
  them before we grab a copy.

git-svn-id: svn://svn.cc65.org/cc65/trunk@4507 b7a2c559-68d2-44c3-8de9-860c34a00d81

17 files changed:
libsrc/c128/crt0.s
libsrc/c16/crt0.s
libsrc/c64/crt0.s
libsrc/cbm510/crt0.s
libsrc/cbm610/crt0.s
libsrc/pet/crt0.s
libsrc/plus4/crt0.s
libsrc/vic20/crt0.s
src/ld65/cfg/c128.cfg
src/ld65/cfg/c16.cfg
src/ld65/cfg/c64.cfg
src/ld65/cfg/cbm510.cfg
src/ld65/cfg/cbm610.cfg
src/ld65/cfg/pet.cfg
src/ld65/cfg/plus4.cfg
src/ld65/cfg/vic20-32k.cfg
src/ld65/cfg/vic20.cfg

index a9fd8e6d156330e5c2f642685c050e35898b2531..d940e121c2c86242664487f0e8e88a28a7bc0f56 100644 (file)
 ; ------------------------------------------------------------------------
 ; Constants
 
-IRQInd         = $2FD  ; JMP $0000 - used as indirect IRQ vector
+IRQInd         = $2FD  ; JMP $0000 - used as indirect IRQ vector
 
 ; ------------------------------------------------------------------------
-; Place the startup code in a special segment to cope with the quirks of
-; c128 banking.
-
-.segment               "STARTUP"
-
 ; BASIC header with a SYS call
 
-       .org    $1BFF
+.segment               "EXEHDR"
+
         .word   Head            ; Load address
 Head:   .word   @Next
         .word   .version        ; Line number
@@ -39,14 +35,17 @@ Head:   .word   @Next
         .byte   <(((Start /    1) .mod 10) + $30)
         .byte   $00             ; End of BASIC line
 @Next:  .word   0               ; BASIC end marker
-       .reloc
 
 ; ------------------------------------------------------------------------
-; Actual code
+; Startup code
+
+.segment               "STARTUP"
+
+Start:
 
 ; Close open files
 
-Start:         jsr     CLRCH
+        jsr    CLRCH
 
 ; Switch to the second charset
 
index 9ac67f8f3725476c678d5419ca8c007b9c1eb204..18d6f7b09d25e3762645545cefa54a94804e24a1 100644 (file)
 
 
 ; ------------------------------------------------------------------------
-; Place the startup code in a special segment.
-
-.segment               "STARTUP"
-
 ; BASIC header with a SYS call
 
+.segment               "EXEHDR"
+
         .word   Head            ; Load address
 Head:   .word   @Next
         .word   .version        ; Line number
@@ -35,18 +33,24 @@ Head:   .word   @Next
 @Next:  .word   0               ; BASIC end marker
 
 ; ------------------------------------------------------------------------
-; Actual code
+; Startup code
 
-Start:  ldx    #zpspace-1
-L1:    lda     sp,x
-       sta     zpsave,x        ; save the zero page locations we need
-       dex
-               bpl     L1
+.segment               "STARTUP"
+
+Start:
 
 ; Close open files
 
        jsr     CLRCH
 
+; Save the zero page locations we need
+
+        ldx    #zpspace-1
+L1:    lda     sp,x
+       sta     zpsave,x
+       dex
+               bpl     L1
+
 ; Switch to second charset
 
        lda     #14
index 9f434ecbed32bd77e1bf917550615cdad1a1e06a..1a35423b574e9b90df6f090aa3a706826cdad070 100644 (file)
 
 
 ; ------------------------------------------------------------------------
-; Place the startup code in a special segment.
-
-.segment               "STARTUP"
-
 ; BASIC header with a SYS call
 
+.segment               "EXEHDR"
+
         .word   Head            ; Load address
 Head:   .word   @Next
         .word   .version        ; Line number
@@ -34,18 +32,24 @@ Head:   .word   @Next
 @Next:  .word   0               ; BASIC end marker
 
 ; ------------------------------------------------------------------------
-; Actual code
+; Startup code
 
-Start:  ldx            #zpspace-1
-L1:    lda     sp,x
-       sta     zpsave,x        ; Save the zero page locations we need
-       dex
-               bpl     L1
+.segment               "STARTUP"
+
+Start:
 
 ; Close open files
 
        jsr     CLRCH
 
+; Save the zero page locations we need
+
+        ldx            #zpspace-1
+L1:    lda     sp,x
+               sta     zpsave,x
+       dex
+               bpl     L1
+
 ; Switch to second charset
 
        lda     #14
index ef2cb8c6295a8256597c2016d1e5dc6c2bc03e1b..fc8acee74cb4119a45859fad2ffc36d12fafebab 100644 (file)
@@ -46,7 +46,7 @@
 ; that is overwritten later.
 ;
 
-.segment        "BASICHDR"
+.segment        "EXEHDR"
 
         .byte          $03,$00,$11,$00,$0a,$00,$81,$20,$49,$b2,$30,$20,$a4,$20,$34,$00
        .byte   $19,$00,$14,$00,$87,$20,$4a,$00,$27,$00,$1e,$00,$97,$20,$32,$35
index 5b6bb8b3cb8ff32e4e3840b2a60481924db9a64c..c63bdfdb5a89c7f8cebd12c19cd86047f5ff03e7 100644 (file)
@@ -45,7 +45,7 @@
 ; that is overwritten later.
 ;
 
-.segment        "BASICHDR"
+.segment        "EXEHDR"
 
         .byte  $03,$00,$11,$00,$0a,$00,$81,$20,$49,$b2,$30,$20,$a4,$20,$34,$00
        .byte   $19,$00,$14,$00,$87,$20,$4a,$00,$27,$00,$1e,$00,$97,$20,$32,$35
index 135147d368de4ae43c84d6303065628011be745a..496ef3b9953e2d47665d93f1aa4846c4a856379b 100644 (file)
        .include        "../cbm/cbm.inc"
 
 ; ------------------------------------------------------------------------
-; Place the startup code in a special segment.
-
-.segment               "STARTUP"
-
 ; BASIC header with a SYS call
 
+.segment               "EXEHDR"
+
         .word   Head            ; Load address
 Head:   .word   @Next
         .word   .version        ; Line number
@@ -33,18 +31,24 @@ Head:   .word   @Next
 @Next:  .word   0               ; BASIC end marker
 
 ; ------------------------------------------------------------------------
-; Actual code
+; Startup code
 
-Start:  ldx    #zpspace-1
-L1:    lda     sp,x
-       sta     zpsave,x        ; Save the zero page locations we need
-       dex
-               bpl     L1
+.segment               "STARTUP"
+
+Start:
 
 ; Close open files
 
        jsr     CLRCH
 
+; Save the zero page locations we need
+
+        ldx    #zpspace-1
+L1:    lda     sp,x
+               sta     zpsave,x
+       dex
+               bpl     L1
+
 ; Switch to second charset. The routine that is called by BSOUT to switch the
 ; character set will use FNLEN as temporary storage - YUCK! Since the
 ; initmainargs routine, which parses the command line for arguments needs this
index e5e2fd7bfaf17eab2071455d7ff43c2e0d1c382b..41176214ef9d66fefc7a6d2aa08fcb0035c3cff6 100644 (file)
 IRQInd                 = $500  ; JMP $0000 - used as indirect IRQ vector
 
 ; ------------------------------------------------------------------------
-; Place the startup code in a special segment to cope with the quirks of
-; plus/4 banking.
+; BASIC header with a SYS call
 
-.segment               "STARTUP"
+.segment               "EXEHDR"
 
         .word   Head            ; Load address
 Head:   .word   @Next
@@ -37,22 +36,28 @@ Head:   .word   @Next
 @Next:  .word   0               ; BASIC end marker
 
 ; ------------------------------------------------------------------------
-; Actual code
+; Startup code
+
+.segment               "STARTUP"
+
+Start:
 
-Start:  sei                     ; No interrupts since we're banking out the ROM
+; Close open files
+
+       jsr     $FFCC           ; CLRCH
+
+; Save the zero page locations we need
+
+        sei                     ; No interrupts since we're banking out the ROM
         sta     ENABLE_RAM
                ldx     #zpspace-1
 L1:    lda     sp,x
-       sta     zpsave,x        ; save the zero page locations we need
+       sta     zpsave,x
        dex
                bpl     L1
         sta     ENABLE_ROM
         cli
 
-; Close open files
-
-       jsr     $FFCC           ; CLRCH
-
 ; Switch to second charset
 
        lda     #14
index 559f22dff3180b81c8bd95d9ef6e02279f6f41c8..1f39ab17e07dc25569497fed23c34f60d9824007 100644 (file)
        .include        "vic20.inc"
 
 ; ------------------------------------------------------------------------
-; Place the startup code in a special segment.
-
-.segment               "STARTUP"
-
 ; BASIC header with a SYS call
 
+.segment               "EXEHDR"
+
         .word   Head            ; Load address
 Head:   .word   @Next
         .word   .version        ; Line number
@@ -33,18 +31,24 @@ Head:   .word   @Next
 @Next:  .word   0               ; BASIC end marker
 
 ; ------------------------------------------------------------------------
-; Actual code
+; Startup code
 
-Start:  ldx            #zpspace-1
-L1:    lda     sp,x
-       sta     zpsave,x        ; Save the zero page locations we need
-       dex
-               bpl     L1
+.segment               "STARTUP"
+
+Start:
 
 ; Close open files
 
        jsr     CLRCH
 
+; Save the zero page locations we need
+
+        ldx            #zpspace-1
+L1:    lda     sp,x
+       sta     zpsave,x
+       dex
+               bpl     L1
+
 ; Switch to second charset
 
        lda     #14
index 155288713a7d93d07f8c6245959f76f878131f26..019e8ea7b288482ca0b8043837386afbebc05dda 100644 (file)
@@ -1,8 +1,9 @@
 MEMORY {
     ZP:  start = $0002, size = $001A, type = rw, define = yes;
-    RAM: start = $1Bff, size = $A401, file = %O, define = yes;
+    RAM: start = $1BFF, size = $A401, file = %O, define = yes;
 }
 SEGMENTS {
+    EXEHDR:   load = RAM, type = ro;
     STARTUP:  load = RAM, type = ro;
     LOWCODE:  load = RAM, type = ro,               optional = yes;
     INIT:     load = RAM, type = ro, define = yes, optional = yes;
index 0117d34e19c498a4e03fbe8001859ba1486b4703..cb01599e51ad0a7f2c2aa954282059653ce3019c 100644 (file)
@@ -3,6 +3,7 @@ MEMORY {
     RAM: start = $0FFF, size = $7001, file = %O;
 }
 SEGMENTS {
+    EXEHDR:   load = RAM, type = ro;
     STARTUP:  load = RAM, type = ro;
     LOWCODE:  load = RAM, type = ro,               optional = yes;
     INIT:     load = RAM, type = ro, define = yes, optional = yes;
index 425f2a8bce0ae178f195052708d531a6564fa770..91809c1ffe829ee4a67390f9a6a0485790fd1cfe 100644 (file)
@@ -3,6 +3,7 @@ MEMORY {
     RAM: start = $07FF, size = $C801, file = %O, define = yes;
 }
 SEGMENTS {
+    EXEHDR:   load = RAM, type = ro;
     STARTUP:  load = RAM, type = ro;
     LOWCODE:  load = RAM, type = ro,               optional = yes;
     INIT:     load = RAM, type = ro, define = yes, optional = yes;
index 5bbd75540f9a0fe720e6eeee75ecfb981354948f..9c9d373f2ae7e8e51b2e16edc77ec2385623b0fa 100644 (file)
@@ -1,5 +1,5 @@
 MEMORY {
-    BASICHDR: start = $0001, size = $0050, fill = yes, fillval = 0, type = rw, file = %O;
+    HEADER:   start = $0001, size = $0050, fill = yes, fillval = 0, type = rw, file = %O;
     ZP:       start = $0051, size = $00AD, fill = yes, fillval = 0, type = rw, file = %O, define = yes;
     STARTUP:  start = $00FE, size = $0102, fill = yes, fillval = 0, file = %O;
     PAGE2:    start = $0200, size = $0100, fill = yes, fillval = 0, file = %O;
@@ -9,7 +9,7 @@ MEMORY {
     VIDRAM:   start = $F000, size = $0400, define = yes, file = "";
 }
 SEGMENTS {
-    BASICHDR: load = BASICHDR, type = rw;
+    EXEHDR:   load = HEADER,   type = rw;
     STARTUP:  load = STARTUP,  type = rw;
     PAGE2:    load = PAGE2,    type = rw;
     PAGE3:    load = PAGE3,    type = rw;
index 5626452a59d00f225ad0aff50c3641d877e4cda3..79dd77580ca62d304c61a589897e9d652988ea1b 100644 (file)
@@ -1,13 +1,13 @@
 MEMORY {
-    BASICHDR: start = $0001, size = $0050, type = rw, fill = yes, fillval = 0, file = %O;
+    HEADER:   start = $0001, size = $0050, type = rw, fill = yes, fillval = 0, file = %O;
     ZP:       start = $0051, size = $00AD, type = rw, define = yes, fill = yes, fillval = 0, file = %O;
     STARTUP:  start = $00FE, size = $0102, fill = yes, fillval = 0, file = %O;
     PAGE2:    start = $0200, size = $0100, fill = yes, fillval = 0, file = %O;
     PAGE3:    start = $0300, size = $0100, fill = yes, fillval = 0, file = %O;
     RAM:      start = $0400, size = $FAAE, file = %O;
-}
+}                              
 SEGMENTS {
-    BASICHDR: load = BASICHDR, type = rw;
+    EXEHDR:   load = HEADER,   type = rw;
     STARTUP:  load = STARTUP,  type = rw;
     PAGE2:    load = PAGE2,    type = rw;
     PAGE3:    load = PAGE3,    type = rw;
index 5385b3c98524974dd1eea8b953f6409d9141668a..f95eb42c3e9fc941998383fce74a44c1cc33d5be 100644 (file)
@@ -3,6 +3,7 @@ MEMORY {
     RAM: start = $03FF, size = $7BFF, file = %O;
 }
 SEGMENTS {
+    EXEHDR:   load = RAM, type = ro;
     STARTUP:  load = RAM, type = ro;
     LOWCODE:  load = RAM, type = ro,               optional = yes;
     INIT:     load = RAM, type = ro, define = yes, optional = yes;
index 6c45a63b163311010c7bb081fc02ec21879103e8..2b5a31457c7fa2d67e4ed599e274d4329b2ac90c 100644 (file)
@@ -3,6 +3,7 @@ MEMORY {
     RAM: start = $0FFF, size = $ED01, file = %O;
 }
 SEGMENTS {
+    EXEHDR:   load = RAM, type = ro;
     STARTUP:  load = RAM, type = ro;
     LOWCODE:  load = RAM, type = ro,               optional = yes;
     INIT:     load = RAM, type = ro, define = yes, optional = yes;
index 38152ea8f554f335cf261cd6dddd001aec9ac0bf..aa333c4dc0f51444df9a0a623d24f008c672bc2f 100644 (file)
@@ -5,6 +5,7 @@ MEMORY {
     RAM: start = $11FF, size = $6E01, define = yes, file = %O;
 }
 SEGMENTS {
+    EXEHDR:   load = RAM, type = ro;
     STARTUP:  load = RAM, type = ro;
     LOWCODE:  load = RAM, type = ro,               optional = yes;
     INIT:     load = RAM, type = ro, define = yes, optional = yes;
index 11686f12467329388d501cce137d273df6a3b42f..6ab066aa34d36de716bc0e4d2325ae053afa01cb 100644 (file)
@@ -3,6 +3,7 @@ MEMORY {
     RAM: start = $0FFF, size = $0E01, define = yes, file = %O;
 }
 SEGMENTS {
+    EXEHDR:   load = RAM, type = ro;
     STARTUP:  load = RAM, type = ro;
     LOWCODE:  load = RAM, type = ro,               optional = yes;
     INIT:     load = RAM, type = ro, define = yes, optional = yes;