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,
 
 ;
 ; 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__