]> git.sur5r.net Git - cc65/commitdiff
cleanups; split 'header' and 'init' part into two source files
authorChristian Groessler <chris@groessler.org>
Fri, 21 Feb 2014 21:43:44 +0000 (22:43 +0100)
committerChristian Groessler <chris@groessler.org>
Fri, 21 Feb 2014 21:43:44 +0000 (22:43 +0100)
cfg/atari-cassette.cfg
libsrc/atari/cashdr.s
libsrc/atari/casinit.s [new file with mode: 0644]

index e69abfb4ee307b9bc869a857bfa953a3e83df49a..1099bf91c24348a84447c3e1350078802b28d675 100644 (file)
@@ -1,41 +1,27 @@
 FEATURES {
-    STARTADDRESS: default = $1000;
+    STARTADDRESS: default = $0700;
 }
 SYMBOLS {
-_cas_init: type = import;
-    __STACKSIZE__:       type = weak, value = $0800; # 2k stack
+    __STACKSIZE__:       type = weak,   value = $0800; # 2k stack
+    __RESERVED_MEMORY__: type = weak,   value = $0000;
     __STARTADDRESS__:    type = export, value = %S;
-    __RESERVED_MEMORY__: type = weak, value = $0000;
+    _cas_hdr:            type = import;
 }
 MEMORY {
     ZP:            file = "", define = yes, start = $0082, size = $007E;
-
-# file header, just $FFFF
-#    HEADER:        file = "",               start = $0000, size = $0002;
-
-#     CASHDR: file = %O, start = $3FD, size = 128, fill = yes;
-#     CASHDR: file = %O, start = $0, size = 6;
-# "main program" load chunk
-#    MAINHDR:       file = "",               start = $0000, size = $0004;
     RAM:           file = %O, define = yes, start = %S,    size = $BC20 - __STACKSIZE__ - __RESERVED_MEMORY__ - %S;
-#    TRAILER:       file = "",               start = $0000, size = $0006;
 }
 SEGMENTS {
-#    EXEHDR:    load = HEADER,     type = ro;
-#    MAINHDR:   load = MAINHDR,    type = ro;
-#     CASHDR:   load = CASHDR, type = ro;
-     CASHDR:   load = RAM, type = ro;
-     CASINIT:  load = RAM, type = ro;
-    STARTUP:   load = RAM,        type = ro,  define = yes;
-    LOWCODE:   load = RAM,        type = ro,  define = yes, optional = yes;
-    INIT:      load = RAM,        type = ro,                optional = yes;
-    CODE:      load = RAM,        type = ro,  define = yes;
-    RODATA:    load = RAM,        type = ro;
-    DATA:      load = RAM,        type = rw;
-    BSS:       load = RAM,        type = bss, define = yes;
-    ZEROPAGE:  load = ZP,         type = zp;
-    EXTZP:     load = ZP,         type = zp,                optional = yes;
-#    AUTOSTRT:  load = TRAILER,    type = ro;
+    CASHDR:    load = RAM, type = ro;
+    STARTUP:   load = RAM, type = ro,  define = yes, optional = yes;
+    LOWCODE:   load = RAM, type = ro,  define = yes, optional = yes;
+    INIT:      load = RAM, type = ro,                optional = yes;
+    CODE:      load = RAM, type = ro,  define = yes;
+    RODATA:    load = RAM, type = ro,                optional = yes;
+    DATA:      load = RAM, type = rw,                optional = yes;
+    BSS:       load = RAM, type = bss, define = yes, optional = yes;
+    ZEROPAGE:  load = ZP,  type = zp,                optional = yes;
+    EXTZP:     load = ZP,  type = zp,                optional = yes;
 }
 FEATURES {
     CONDES: type    = constructor,
index 8d3d0868a9722226913edb7216732363fe822f9d..99aefe68f9458eb3554ad97f38937160ecfdfc6a 100644 (file)
@@ -1,40 +1,37 @@
 ;
 ; Cassette boot file header
 ;
-; Christian Groessler, chris@groessler.org, 2013
+; Christian Groessler, chris@groessler.org, 2014
 ;
 
-.ifndef __ATARIXL__
+;DEBUG   = 1
 
-       .include "atari.inc"
+.ifndef __ATARIXL__
 
-       .import __BSS_RUN__, __STARTADDRESS__, start
-       .export _cas_init
+        .include "atari.inc"
 
-.segment        "CASHDR"
+        .import __BSS_RUN__, __STARTADDRESS__, _cas_init
+        .export _cas_hdr
 
-       .byte   0       ; ignored
-       .byte   <((__BSS_RUN__ - __STARTADDRESS__ + 127 + 6) / 128)
-       .word   __STARTADDRESS__
-       .word   _cas_init
+.assert ((__BSS_RUN__ - __STARTADDRESS__ + 127) / 128) < $101, error, "File to big to load from cassette"
 
-.segment       "CASINIT"
 
-       lda     #33
-       ldy     #80
-       sta     (SAVMSC),y
-       clc
-       rts
+; for a description of the cassette header, see De Re Atari, appendix C
 
-_cas_init:
-       lda     #34
-       ldy     #81
-       sta     (SAVMSC),y
-
-       lda     #<start
-       sta     DOSVEC
-       lda     #>start
-       sta     DOSVEC+1
-       rts
+.segment        "CASHDR"
 
-.endif ; .ifdef __ATARIXL__
+_cas_hdr:
+        .byte   0                       ; ignored
+        .byte   <((__BSS_RUN__ - __STARTADDRESS__ + 127) / 128)         ; # of 128-byte records to read
+        .word   __STARTADDRESS__        ; load address
+        .word   _cas_init               ; init address
+
+.ifdef  DEBUG
+        lda     #33
+        ldy     #80
+        sta     (SAVMSC),y
+.endif
+        clc
+        rts
+
+.endif  ; .ifdef __ATARIXL__
diff --git a/libsrc/atari/casinit.s b/libsrc/atari/casinit.s
new file mode 100644 (file)
index 0000000..c91989a
--- /dev/null
@@ -0,0 +1,31 @@
+;
+; Cassette boot file init routine
+;
+; Christian Groessler, chris@groessler.org, 2014
+;
+
+;DEBUG   = 1
+
+.ifndef __ATARIXL__
+
+        .include "atari.inc"
+
+        .import start
+        .export _cas_init
+
+.segment        "INIT"
+
+_cas_init:
+.ifdef  DEBUG
+        lda     #34
+        ldy     #81
+        sta     (SAVMSC),y
+.endif
+
+        lda     #<start
+        sta     DOSVEC
+        lda     #>start
+        sta     DOSVEC+1
+        rts
+
+.endif  ; .ifdef __ATARIXL__