]> git.sur5r.net Git - cc65/commitdiff
Switched Apple II output format to AppleSingle. V2.17
authorOliver Schmidt <ol.sc@web.de>
Wed, 7 Mar 2018 22:04:33 +0000 (23:04 +0100)
committerOliver Schmidt <ol.sc@web.de>
Wed, 7 Mar 2018 22:05:21 +0000 (23:05 +0100)
Although the primary target OS for the Apple II for sure isn't DOS 3.3 but ProDOS 8 the Apple II binary files contained a DOS 3.3 4-byte header. Recently I was made aware of the AppleSingle file format. That format is a much better way to transport Apple II meta data from the cc65 toolchain to the ProDOS 8 file system. Therefore I asked AppleCommander to support the AppleSingle file format. Now that there's an AppleCommander BETA with AppleSingle support it's the right time for this change.

I bumped version to 2.17 because of this from the perspective of Apple II users of course incompatible change.

16 files changed:
cfg/apple2-asm.cfg
cfg/apple2-hgr.cfg
cfg/apple2-overlay.cfg
cfg/apple2-system.cfg
cfg/apple2.cfg
cfg/apple2enh-asm.cfg
cfg/apple2enh-hgr.cfg
cfg/apple2enh-overlay.cfg
cfg/apple2enh-system.cfg
cfg/apple2enh.cfg
doc/apple2.sgml
doc/apple2enh.sgml
doc/intro.sgml
libsrc/apple2/exehdr.s
samples/Makefile
src/common/version.c

index 8e5abefc5466f25d067d0759c9913cb053692480..76bca1b865420170916ca11a350bda571c7a0e50 100644 (file)
@@ -3,9 +3,12 @@
 FEATURES {
     STARTADDRESS: default = $0803;
 }
+SYMBOLS {
+    __FILETYPE__: type = weak, value = $0006; # ProDOS file type
+}
 MEMORY {
     ZP:     file = "",               start = $0000,         size = $00FF;
-    HEADER: file = %O,               start = %S - 4,        size = $0004;
+    HEADER: file = %O,               start = %S - $003A,    size = $003A;
     MAIN:   file = %O, define = yes, start = %S,            size = $C000 - %S;
     BSS:    file = "",               start = __MAIN_LAST__, size = $C000 - __MAIN_LAST__;
 }
index b11dd12bc47a6ab82791b3ea49abadf98eb51778..3ccf7b6f39f7894543eb33aa4541e0185b9dbafb 100644 (file)
@@ -5,6 +5,7 @@ FEATURES {
 }
 SYMBOLS {
     __EXEHDR__:    type = import;
+    __FILETYPE__:  type = weak, value = $0006; # ProDOS file type
     __STACKSIZE__: type = weak, value = $0800; # 2k stack
     __HIMEM__:     type = weak, value = $9600; # Presumed RAM end
     __LCADDR__:    type = weak, value = $D400; # Behind quit code
@@ -12,7 +13,7 @@ SYMBOLS {
 }
 MEMORY {
     ZP:     file = "", define = yes, start = $0080,        size = $001A;
-    HEADER: file = %O,               start = %S - 4,       size = $0004;
+    HEADER: file = %O,               start = %S - $003A,   size = $003A;
     MAIN:   file = %O, define = yes, start = %S,           size = __HIMEM__ - %S;
     BSS:    file = "",               start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
     LC:     file = "", define = yes, start = __LCADDR__,   size = __LCSIZE__;
index d5476d264b5b5710f10eecc89d6b9209b125be28..a0b7678c16a0af622d52e94b6a615195c425b00c 100644 (file)
@@ -1,10 +1,10 @@
 # Configuration for overlay programs (overlays located below main program)
 
-# The overlay files don't include the 4 byte DOS 3.3 header so use AppleCommander like this:
-# java -jar ac.jar -cc65 mydisk.dsk myprog   bin < myprog
-# java -jar ac.jar -p    mydisk.dsk myprog.1 bin < myprog.1
-# java -jar ac.jar -p    mydisk.dsk myprog.2 bin < myprog.2
-# java -jar ac.jar -p    mydisk.dsk myprog.3 bin < myprog.3
+# The overlay files are raw binary files so use AppleCommander like this:
+# java -jar ac.jar -as mydisk.dsk myprog       < myprog
+# java -jar ac.jar -p  mydisk.dsk myprog.1 bin < myprog.1
+# java -jar ac.jar -p  mydisk.dsk myprog.2 bin < myprog.2
+# java -jar ac.jar -p  mydisk.dsk myprog.3 bin < myprog.3
 # ...
 
 FEATURES {
@@ -12,6 +12,7 @@ FEATURES {
 }
 SYMBOLS {
     __EXEHDR__:      type = import;
+    __FILETYPE__:    type = weak, value = $0006; # ProDOS file type
     __STACKSIZE__:   type = weak, value = $0800; # 2k stack
     __HIMEM__:       type = weak, value = $9600; # Presumed RAM end
     __LCADDR__:      type = weak, value = $D400; # Behind quit code
@@ -20,7 +21,7 @@ SYMBOLS {
 }
 MEMORY {
     ZP:     file = "", define = yes, start = $0080,                size = $001A;
-    HEADER: file = %O,               start = %S - 4,               size = $0004;
+    HEADER: file = %O,               start = %S - $003A,           size = $003A;
     MAIN:   file = %O, define = yes, start = %S + __OVERLAYSIZE__, size = __HIMEM__ - __OVERLAYSIZE__ - %S;
     BSS:    file = "",               start = __ONCE_RUN__,         size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
     LC:     file = "", define = yes, start = __LCADDR__,           size = __LCSIZE__;
index f4684d9c2f9e70bbff86970e317e6b62bac7a21d..0170feb93ab16dd34cee77af42c7ea4493c21f09 100644 (file)
@@ -1,18 +1,22 @@
-# Configuration for ProDOS 8 system programs (without the header)
+# Configuration for ProDOS 8 system programs (allowing for 3KB in LC)
 
 SYMBOLS {
+    __EXEHDR__:    type = import;
+    __FILETYPE__:  type = weak, value = $00FF; # ProDOS file type
     __STACKSIZE__: type = weak, value = $0800; # 2k stack
     __LCADDR__:    type = weak, value = $D400; # Behind quit code
     __LCSIZE__:    type = weak, value = $0C00; # Rest of bank two
 }
 MEMORY {
-    ZP:   file = "", define = yes, start = $0080,        size = $001A;
-    MAIN: file = %O,               start = $2000,        size = $BF00 - $2000;
-    BSS:  file = "",               start = __ONCE_RUN__, size = $BF00 - __STACKSIZE__ - __ONCE_RUN__;
-    LC:   file = "", define = yes, start = __LCADDR__,   size = __LCSIZE__;
+    ZP:     file = "", define = yes, start = $0080,         size = $001A;
+    HEADER: file = %O,               start = $2000 - $003A, size = $003A;
+    MAIN:   file = %O, define = yes, start = $2000,         size = $BF00 - $2000;
+    BSS:    file = "",               start = __ONCE_RUN__,  size = $BF00 - __STACKSIZE__ - __ONCE_RUN__;
+    LC:     file = "", define = yes, start = __LCADDR__,    size = __LCSIZE__;
 }
 SEGMENTS {
     ZEROPAGE: load = ZP,             type = zp;
+    EXEHDR:   load = HEADER,         type = ro,  optional = yes;
     STARTUP:  load = MAIN,           type = ro;
     LOWCODE:  load = MAIN,           type = ro,  optional = yes;
     CODE:     load = MAIN,           type = ro;
index bbe45839db59e05964ca0fd416fb3c8e59865242..a6809cf89c23f74bc5bff9029e691029670a4b85 100644 (file)
@@ -5,6 +5,7 @@ FEATURES {
 }
 SYMBOLS {
     __EXEHDR__:    type = import;
+    __FILETYPE__:  type = weak, value = $0006; # ProDOS file type
     __STACKSIZE__: type = weak, value = $0800; # 2k stack
     __HIMEM__:     type = weak, value = $9600; # Presumed RAM end
     __LCADDR__:    type = weak, value = $D400; # Behind quit code
@@ -12,7 +13,7 @@ SYMBOLS {
 }
 MEMORY {
     ZP:     file = "", define = yes, start = $0080,        size = $001A;
-    HEADER: file = %O,               start = %S - 4,       size = $0004;
+    HEADER: file = %O,               start = %S - $003A,   size = $003A;
     MAIN:   file = %O, define = yes, start = %S,           size = __HIMEM__ - %S;
     BSS:    file = "",               start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
     LC:     file = "", define = yes, start = __LCADDR__,   size = __LCSIZE__;
index 8e5abefc5466f25d067d0759c9913cb053692480..76bca1b865420170916ca11a350bda571c7a0e50 100644 (file)
@@ -3,9 +3,12 @@
 FEATURES {
     STARTADDRESS: default = $0803;
 }
+SYMBOLS {
+    __FILETYPE__: type = weak, value = $0006; # ProDOS file type
+}
 MEMORY {
     ZP:     file = "",               start = $0000,         size = $00FF;
-    HEADER: file = %O,               start = %S - 4,        size = $0004;
+    HEADER: file = %O,               start = %S - $003A,    size = $003A;
     MAIN:   file = %O, define = yes, start = %S,            size = $C000 - %S;
     BSS:    file = "",               start = __MAIN_LAST__, size = $C000 - __MAIN_LAST__;
 }
index b11dd12bc47a6ab82791b3ea49abadf98eb51778..3ccf7b6f39f7894543eb33aa4541e0185b9dbafb 100644 (file)
@@ -5,6 +5,7 @@ FEATURES {
 }
 SYMBOLS {
     __EXEHDR__:    type = import;
+    __FILETYPE__:  type = weak, value = $0006; # ProDOS file type
     __STACKSIZE__: type = weak, value = $0800; # 2k stack
     __HIMEM__:     type = weak, value = $9600; # Presumed RAM end
     __LCADDR__:    type = weak, value = $D400; # Behind quit code
@@ -12,7 +13,7 @@ SYMBOLS {
 }
 MEMORY {
     ZP:     file = "", define = yes, start = $0080,        size = $001A;
-    HEADER: file = %O,               start = %S - 4,       size = $0004;
+    HEADER: file = %O,               start = %S - $003A,   size = $003A;
     MAIN:   file = %O, define = yes, start = %S,           size = __HIMEM__ - %S;
     BSS:    file = "",               start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
     LC:     file = "", define = yes, start = __LCADDR__,   size = __LCSIZE__;
index d5476d264b5b5710f10eecc89d6b9209b125be28..a0b7678c16a0af622d52e94b6a615195c425b00c 100644 (file)
@@ -1,10 +1,10 @@
 # Configuration for overlay programs (overlays located below main program)
 
-# The overlay files don't include the 4 byte DOS 3.3 header so use AppleCommander like this:
-# java -jar ac.jar -cc65 mydisk.dsk myprog   bin < myprog
-# java -jar ac.jar -p    mydisk.dsk myprog.1 bin < myprog.1
-# java -jar ac.jar -p    mydisk.dsk myprog.2 bin < myprog.2
-# java -jar ac.jar -p    mydisk.dsk myprog.3 bin < myprog.3
+# The overlay files are raw binary files so use AppleCommander like this:
+# java -jar ac.jar -as mydisk.dsk myprog       < myprog
+# java -jar ac.jar -p  mydisk.dsk myprog.1 bin < myprog.1
+# java -jar ac.jar -p  mydisk.dsk myprog.2 bin < myprog.2
+# java -jar ac.jar -p  mydisk.dsk myprog.3 bin < myprog.3
 # ...
 
 FEATURES {
@@ -12,6 +12,7 @@ FEATURES {
 }
 SYMBOLS {
     __EXEHDR__:      type = import;
+    __FILETYPE__:    type = weak, value = $0006; # ProDOS file type
     __STACKSIZE__:   type = weak, value = $0800; # 2k stack
     __HIMEM__:       type = weak, value = $9600; # Presumed RAM end
     __LCADDR__:      type = weak, value = $D400; # Behind quit code
@@ -20,7 +21,7 @@ SYMBOLS {
 }
 MEMORY {
     ZP:     file = "", define = yes, start = $0080,                size = $001A;
-    HEADER: file = %O,               start = %S - 4,               size = $0004;
+    HEADER: file = %O,               start = %S - $003A,           size = $003A;
     MAIN:   file = %O, define = yes, start = %S + __OVERLAYSIZE__, size = __HIMEM__ - __OVERLAYSIZE__ - %S;
     BSS:    file = "",               start = __ONCE_RUN__,         size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
     LC:     file = "", define = yes, start = __LCADDR__,           size = __LCSIZE__;
index f4684d9c2f9e70bbff86970e317e6b62bac7a21d..0170feb93ab16dd34cee77af42c7ea4493c21f09 100644 (file)
@@ -1,18 +1,22 @@
-# Configuration for ProDOS 8 system programs (without the header)
+# Configuration for ProDOS 8 system programs (allowing for 3KB in LC)
 
 SYMBOLS {
+    __EXEHDR__:    type = import;
+    __FILETYPE__:  type = weak, value = $00FF; # ProDOS file type
     __STACKSIZE__: type = weak, value = $0800; # 2k stack
     __LCADDR__:    type = weak, value = $D400; # Behind quit code
     __LCSIZE__:    type = weak, value = $0C00; # Rest of bank two
 }
 MEMORY {
-    ZP:   file = "", define = yes, start = $0080,        size = $001A;
-    MAIN: file = %O,               start = $2000,        size = $BF00 - $2000;
-    BSS:  file = "",               start = __ONCE_RUN__, size = $BF00 - __STACKSIZE__ - __ONCE_RUN__;
-    LC:   file = "", define = yes, start = __LCADDR__,   size = __LCSIZE__;
+    ZP:     file = "", define = yes, start = $0080,         size = $001A;
+    HEADER: file = %O,               start = $2000 - $003A, size = $003A;
+    MAIN:   file = %O, define = yes, start = $2000,         size = $BF00 - $2000;
+    BSS:    file = "",               start = __ONCE_RUN__,  size = $BF00 - __STACKSIZE__ - __ONCE_RUN__;
+    LC:     file = "", define = yes, start = __LCADDR__,    size = __LCSIZE__;
 }
 SEGMENTS {
     ZEROPAGE: load = ZP,             type = zp;
+    EXEHDR:   load = HEADER,         type = ro,  optional = yes;
     STARTUP:  load = MAIN,           type = ro;
     LOWCODE:  load = MAIN,           type = ro,  optional = yes;
     CODE:     load = MAIN,           type = ro;
index bbe45839db59e05964ca0fd416fb3c8e59865242..a6809cf89c23f74bc5bff9029e691029670a4b85 100644 (file)
@@ -5,6 +5,7 @@ FEATURES {
 }
 SYMBOLS {
     __EXEHDR__:    type = import;
+    __FILETYPE__:  type = weak, value = $0006; # ProDOS file type
     __STACKSIZE__: type = weak, value = $0800; # 2k stack
     __HIMEM__:     type = weak, value = $9600; # Presumed RAM end
     __LCADDR__:    type = weak, value = $D400; # Behind quit code
@@ -12,7 +13,7 @@ SYMBOLS {
 }
 MEMORY {
     ZP:     file = "", define = yes, start = $0080,        size = $001A;
-    HEADER: file = %O,               start = %S - 4,       size = $0004;
+    HEADER: file = %O,               start = %S - $003A,   size = $003A;
     MAIN:   file = %O, define = yes, start = %S,           size = __HIMEM__ - %S;
     BSS:    file = "",               start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
     LC:     file = "", define = yes, start = __LCADDR__,   size = __LCSIZE__;
index 43651c7fae6e20aadc3af84f2e4b81193cd07bb5..eef0eed3d58262010d67c5d81656513312393052 100644 (file)
@@ -34,20 +34,14 @@ more information.
 <sect>Binary format<p>
 
 The standard binary file format generated by the linker for the
-Apple&nbsp;&rsqb;&lsqb; target is a binary program with a 4 byte DOS 3.3 header
-containing the load address and load length. The default load address is
-&dollar;803.
+Apple&nbsp;&rsqb;&lsqb; target is an <url name="AppleSingle" 
+url="http://kaiser-edv.de/documents/AppleSingle_AppleDouble.pdf"> file.
+The default load address is &dollar;803.
 
-<bf/AppleCommander 1.3.5/ or later (available at <url
-url="https://applecommander.github.io/">) includes the option <tt/-cc65/
-that allows to put binary files with a DOS 3.3 header onto disk images
-containing DOS 3.3 as well as ProDOS 8.
-
-For ProDOS 8 system programs the load address is fixed to &dollar;2000 so there
-is no need for a header. Thus the linker configuration
-<ref id="apple-sys-cfg" name="apple2-system.cfg"> for those programs
-omits the DOS 3.3 header. The right AppleCommander option to put system files
-without a header on a ProDOS 8 disk image is <tt/-p/.
+<bf/AppleCommander 1.4.0/ or later (available at <url
+url="https://applecommander.github.io/">) includes the option <tt/-as/ that
+allows to put AppleSingle files onto disk images containing DOS 3.3 as well
+as ProDOS 8.
 
 
 <sect>Memory layout<p>
@@ -121,9 +115,8 @@ Parameters:
   <tag><tt/STARTADDRESS:/ Program start address</tag>
   Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address.
 
-  <tag><tt/__EXEHDR__:/ Executable file header</tag>
-  Default: DOS 3.3 header (address and length). Use <tt/-D __EXEHDR__=0/ to omit
-  the header.
+  <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
+  Default: Yes. Use <tt/-D __EXEHDR__=0/ to omit the AppleSingle header.
 
   <tag><tt/__STACKSIZE__:/ C runtime stack size</tag>
   Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different
@@ -153,6 +146,9 @@ Parameters:
 
 <descrip>
 
+  <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
+  Default: Yes. Use <tt/-D __EXEHDR__=0/ to omit the AppleSingle header.
+
   <tag><tt/__STACKSIZE__:/ C runtime stack size</tag>
   Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different
   stack size.
@@ -180,9 +176,8 @@ Parameters:
   <tag><tt/STARTADDRESS:/ Program start address</tag>
   Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address.
 
-  <tag><tt/__EXEHDR__:/ Executable file header</tag>
-  Default: DOS 3.3 header (address and length). Use <tt/-D __EXEHDR__=0/ to omit
-  the header.
+  <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
+  Default: Yes. Use <tt/-D __EXEHDR__=0/ to omit the AppleSingle header.
 
   <tag><tt/__STACKSIZE__:/ C runtime stack size</tag>
   Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different
@@ -206,7 +201,7 @@ Parameters:
 <sect1><tt/apple2-overlay.cfg/<p>
 
 Configuration for an overlay program with up to nine overlays. The overlay files
-don't include the DOS 3.3 header. See <tt>samples/overlaydemo.c</tt> for more
+don't include the AppleSingle header. See <tt>samples/overlaydemo.c</tt> for more
 information on overlays.
 
 Parameters:
@@ -216,9 +211,8 @@ Parameters:
   <tag><tt/STARTADDRESS:/ Program start address</tag>
   Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address.
 
-  <tag><tt/__EXEHDR__:/ Executable file header</tag>
-  Default: DOS 3.3 header (address and length). Use <tt/-D __EXEHDR__=0/ to omit
-  the header.
+  <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
+  Default: Yes. Use <tt/-D __EXEHDR__=0/ to omit the AppleSingle header.
 
   <tag><tt/__STACKSIZE__:/ C runtime stack size</tag>
   Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different
@@ -254,9 +248,8 @@ Parameters:
   <tag><tt/STARTADDRESS:/ Program start address</tag>
   Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address.
 
-  <tag><tt/__EXEHDR__:/ Executable file header</tag>
-  Default: No header. Use <tt/-u __EXEHDR__ apple2.lib/ to add a DOS 3.3 header
-  (address and length).
+  <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
+  Default: No. Use <tt/-u __EXEHDR__ apple2.lib/ to add the AppleSingle header.
 
 </descrip><p>
 
@@ -281,7 +274,8 @@ program (i.e. quits to the ProDOS dispatcher).
 
 Using LOADER.SYSTEM is as simple as copying it to the ProDOS 8 directory of the
 program to load under name &lt;program&gt;.SYSTEM as a system program. For
-example the program <tt/MYPROG/ is loaded by <tt/MYPROG.SYSTEM/.
+example the program <tt/MYPROG/ is loaded by <tt/MYPROG.SYSTEM/. The right
+AppleCommander option to put LOADER.SYSTEM on a ProDOS 8 disk image is <tt/-p/.
 
 
 <sect1>Heap<p>
index 3f335d028c120dbfcd57e70e423d5570d3bb9436..b40523aba55ffef94be7e66851bbf0c267574456 100644 (file)
@@ -34,20 +34,14 @@ more information.
 <sect>Binary format<p>
 
 The standard binary file format generated by the linker for the
-enhanced&nbsp;Apple&nbsp;//e target is a binary program with a 4 byte DOS 3.3 header
-containing the load address and load length. The default load address is
-&dollar;803.
+enhanced&nbsp;Apple&nbsp;//e target is an <url name="AppleSingle" 
+url="http://kaiser-edv.de/documents/AppleSingle_AppleDouble.pdf"> file.
+The default load address is &dollar;803.
 
-<bf/AppleCommander 1.3.5/ or later (available at <url
-url="https://applecommander.github.io/">) includes the option <tt/-cc65/
-that allows to put binary files with a DOS 3.3 header onto disk images
-containing DOS 3.3 as well as ProDOS 8.
-
-For ProDOS 8 system programs the load address is fixed to &dollar;2000 so there
-is no need for a header. Thus the linker configuration
-<ref id="apple-sys-cfg" name="apple2enh-system.cfg"> for those programs
-omits the DOS 3.3 header. The right AppleCommander option to put system files
-without a header on a ProDOS 8 disk image is <tt/-p/.
+<bf/AppleCommander 1.4.0/ or later (available at <url
+url="https://applecommander.github.io/">) includes the option <tt/-as/ that
+allows to put AppleSingle files onto disk images containing DOS 3.3 as well
+as ProDOS 8.
 
 
 <sect>Memory layout<p>
@@ -121,9 +115,8 @@ Parameters:
   <tag><tt/STARTADDRESS:/ Program start address</tag>
   Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address.
 
-  <tag><tt/__EXEHDR__:/ Executable file header</tag>
-  Default: DOS 3.3 header (address and length). Use <tt/-D __EXEHDR__=0/ to omit
-  the header.
+  <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
+  Default: Yes. Use <tt/-D __EXEHDR__=0/ to omit the AppleSingle header.
 
   <tag><tt/__STACKSIZE__:/ C runtime stack size</tag>
   Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different
@@ -153,6 +146,9 @@ Parameters:
 
 <descrip>
 
+  <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
+  Default: Yes. Use <tt/-D __EXEHDR__=0/ to omit the AppleSingle header.
+
   <tag><tt/__STACKSIZE__:/ C runtime stack size</tag>
   Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different
   stack size.
@@ -180,9 +176,8 @@ Parameters:
   <tag><tt/STARTADDRESS:/ Program start address</tag>
   Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address.
 
-  <tag><tt/__EXEHDR__:/ Executable file header</tag>
-  Default: DOS 3.3 header (address and length). Use <tt/-D __EXEHDR__=0/ to omit
-  the header.
+  <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
+  Default: Yes. Use <tt/-D __EXEHDR__=0/ to omit the AppleSingle header.
 
   <tag><tt/__STACKSIZE__:/ C runtime stack size</tag>
   Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different
@@ -206,7 +201,7 @@ Parameters:
 <sect1><tt/apple2enh-overlay.cfg/<p>
 
 Configuration for an overlay program with up to nine overlays. The overlay files
-don't include the DOS 3.3 header. See <tt>samples/overlaydemo.c</tt> for more
+don't include the AppleSingle header. See <tt>samples/overlaydemo.c</tt> for more
 information on overlays.
 
 Parameters:
@@ -216,9 +211,8 @@ Parameters:
   <tag><tt/STARTADDRESS:/ Program start address</tag>
   Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address.
 
-  <tag><tt/__EXEHDR__:/ Executable file header</tag>
-  Default: DOS 3.3 header (address and length). Use <tt/-D __EXEHDR__=0/ to omit
-  the header.
+  <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
+  Default: Yes. Use <tt/-D __EXEHDR__=0/ to omit the AppleSingle header.
 
   <tag><tt/__STACKSIZE__:/ C runtime stack size</tag>
   Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different
@@ -254,9 +248,8 @@ Parameters:
   <tag><tt/STARTADDRESS:/ Program start address</tag>
   Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address.
 
-  <tag><tt/__EXEHDR__:/ Executable file header</tag>
-  Default: No header. Use <tt/-u __EXEHDR__ apple2enh.lib/ to add a DOS 3.3 header
-  (address and length).
+  <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
+  Default: No. Use <tt/-u __EXEHDR__ apple2enh.lib/ to add the AppleSingle header.
 
 </descrip><p>
 
@@ -281,7 +274,8 @@ program (i.e. quits to the ProDOS dispatcher).
 
 Using LOADER.SYSTEM is as simple as copying it to the ProDOS 8 directory of the
 program to load under name &lt;program&gt;.SYSTEM as a system program. For
-example the program <tt/MYPROG/ is loaded by <tt/MYPROG.SYSTEM/.
+example the program <tt/MYPROG/ is loaded by <tt/MYPROG.SYSTEM/. The right
+AppleCommander option to put LOADER.SYSTEM on a ProDOS 8 disk image is <tt/-p/.
 
 
 <sect1>Heap<p>
index bb8965c60c5b0f84483159ce0e045c035cc4d5d7..47516e671c9a97ddd2ab590694172981da9eb72a 100644 (file)
@@ -246,13 +246,13 @@ varies in its start and exit conditions.
 
 <sect2>AppleWin<p>
 Available at <url
-url="http://applewin.berlios.de/">:
+url="https://github.com/AppleWin/AppleWin">:
 
 Emulates Apple&nbsp;&rsqb;&lsqb;/enhanced&nbsp;Apple&nbsp;//e computers, with
 sound, video, joysticks, serial port, and disk images. Includes monitor. Only
 for Windows. The package comes with a DOS 3.3 disk (called "master.dsk") image;
-however, you will need <bf/AppleCommander 1.3.5/ or later (available at <url
-url="http://applecommander.sourceforge.net/">).
+however, you will need <bf/AppleCommander 1.4.0/ or later (available at <url
+url="https://applecommander.github.io/">).
 
 Compile the tutorial with
 
@@ -270,14 +270,13 @@ the <tt/master.dsk/ which comes with <bf/AppleWin/, and rename it to
 <tt/cc65.dsk/, then use <bf/AppleCommander/:
 
 <tscreen><verb>
-java -jar ac.jar -cc65 cc65.dsk test B < hello
+java -jar ac.jar -as cc65.dsk test < hello
 </verb></tscreen>
 
 Note that a convention in the Apple world is that "hello" is the file which is
 run automatically upon booting a DOS disk, sort of like the "autoexec.bat" of
-the MSDOS/Windows world.  We've avoided that in the example, however.  Also,
-the <tt/B/ parameter must be in caps., and "test" is the name of the program as
-it will appear on the Apple disk.
+the MSDOS/Windows world.  We've avoided that in the example, however by using
+"test" as the name of the program as it will appear on the Apple disk.
 
 Start the emulator, click on the <bf/Disk 1/ icon, and point to <bf/cc65.dsk/;
 then, click the big Apple logo, to boot the system.  Then, type this on the
index 778eee9039ac76b70e3b6afa2d840dcee7d6769f..72ea390e91af5ada33f7a47dc48094e37600d01f 100644 (file)
@@ -1,16 +1,40 @@
 ;
 ; Oliver Schmidt, 2012-06-10
 ;
-; This module supplies a 4 byte DOS 3.3 header
-; containing the load address and load length.
+; This module supplies an AppleSingle version 2 file header + entry with
+; ID 11 according to https://tools.ietf.org/rfc/rfc1740.txt Appendix A.
 ;
 
         .export         __EXEHDR__ : absolute = 1       ; Linker referenced
+        .import         __FILETYPE__                    ; Linker generated
         .import         __MAIN_START__, __MAIN_LAST__   ; Linker generated
 
+; ------------------------------------------------------------------------
+
+; Data Fork
+ID01_LENGTH = __MAIN_LAST__ - __MAIN_START__
+ID01_OFFSET = ID01 - START
+
+; ProDOS File Info
+ID11_LENGTH = ID01 - ID11
+ID11_OFFSET = ID11 - START
+
 ; ------------------------------------------------------------------------
 
         .segment        "EXEHDR"
 
-        .addr           __MAIN_START__                  ; Load address
-        .word           __MAIN_LAST__ - __MAIN_START__  ; Load length
+START:  .byte           $00, $05, $16, $00                  ; Magic number
+        .byte           $00, $02, $00, $00                  ; Version number
+        .res            16                                  ; Filler
+        .byte           0, 2                                ; Number of entries
+        .byte           0, 0, 0, 1                          ; Entry ID 1 - Data Fork
+        .byte           0, 0, >ID01_OFFSET, <ID01_OFFSET    ; Offset
+        .byte           0, 0, >ID01_LENGTH, <ID01_LENGTH    ; Length
+        .byte           0, 0, 0, 11                         ; Entry ID 11 - ProDOS File Info
+        .byte           0, 0, >ID11_OFFSET, <ID11_OFFSET    ; Offset
+        .byte           0, 0, >ID11_LENGTH, <ID11_LENGTH    ; Length
+ID11:   .byte           0, %11000011                        ; Access - Destroy, Rename, Write, Read
+        .byte           >__FILETYPE__, <__FILETYPE__        ; File Type
+        .byte           0, 0                                ; Auxiliary Type high
+        .byte           >__MAIN_START__, <__MAIN_START__    ; Auxiliary Type low
+ID01:
index 2bcfa08c367687d823c645b487fc27ebc1d13d86..6a6d93bc1feaa46dc9c79ddf7afa0a3e98087275 100644 (file)
@@ -188,15 +188,15 @@ samples.d64: samples
        $(foreach file,$(EMD) $(MOU) $(TGI),$(D64_WRITE_recipe))
 
 # --------------------------------------------------------------------------
-# Rule to make an Apple II disk with all samples. Needs the Apple Commander
-# program available at http://applecommander.sourceforge.net/ and a template
-# disk named 'prodos.dsk'.
+# Rule to make an Apple II disk with all samples. Needs the AppleCommander
+# program available at https://applecommander.github.io/ and a template disk
+# named 'prodos.dsk'.
 
 define DSK_WRITE_BIN_recipe
 
 $(if $(findstring BF00,$(LDFLAGS_$(notdir $(file))_$(SYS))), \
   java -jar $(AC) -p $@ $(notdir $(file)).system sys <$(TARGET_PATH)/$(SYS)/util/loader.system)
-java -jar $(AC) -cc65 $@ $(notdir $(file)) bin <$(file)
+java -jar $(AC) -as $@ $(notdir $(file)) <$(file)
 
 endef # DSK_WRITE_BIN_recipe
 
index bf0a6bf7163bd4ca9ca9d6a1f1c71a7734080abf..1f1e8093ef56bacbd43905f2b8d5fbe9522103b0 100644 (file)
@@ -47,7 +47,7 @@
 
 
 #define VER_MAJOR       2U
-#define VER_MINOR       16U
+#define VER_MINOR       17U