]> git.sur5r.net Git - cc65/commitdiff
Merge pull request #606 from pfusik/ldec
authorOliver Schmidt <ol.sc@web.de>
Sat, 10 Mar 2018 11:28:46 +0000 (11:28 +0000)
committerGitHub <noreply@github.com>
Sat, 10 Mar 2018 11:28:46 +0000 (11:28 +0000)
Optimize deceaxy

27 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/c128.sgml
doc/c64.sgml
doc/intro.sgml
libsrc/apple2/exehdr.s
libsrc/c128/emd/c128-reu.s
libsrc/c64/emd/c64-reu.s
libsrc/c64/joy/c64-hitjoy.s
libsrc/runtime/incaxy.s
libsrc/runtime/incsp2.s
libsrc/runtime/jmpvec.s
libsrc/runtime/mulax3.s
libsrc/runtime/mulax5.s
samples/Makefile
src/common/version.c
testcode/lib/joy-test.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 460621be0a63e2ca5e8ce9015a2a691437fab3f8..f133d8d4c6c15b190957ea5c982a6b3458e0ea95 100644 (file)
@@ -221,10 +221,8 @@ missing on VDC, and are translated to the two colors missing from the VIC palett
   Will test the hardware for the available RAM.
 
   <tag><tt/c128-reu.emd (c128_reu_emd)/</tag>
-  A driver for the CBM REUs. The driver will determine from the connected REU
-  if it supports 128KB of RAM or more. In the latter case, 256KB are assumed,
-  but since there are no range checks, the application can use more memory if
-  it has better knowledge about the hardware than the driver.
+  A driver for the CBM REUs. The driver will test the connected REU to find
+  out how much RAM is present.
 
   <tag><tt/c128-vdc.emd (c128_vdc_emd)/</tag>
   A driver for the VDC memory of the C128, written and contributed by Maciej
index 9ab9b96c36b746f1bcea82bb6ccfbb306cb6c30b..7cca1aa0959d9a4a16aa6260b47280df5fca5ac3 100644 (file)
@@ -300,10 +300,8 @@ Note that the graphics drivers are incompatible with the
   Will test the hardware for the available RAM.
 
   <tag><tt/c64-reu.emd (c64_reu_emd)/</tag>
-  A driver for the CBM REUs. The driver will determine from the connected REU
-  if it supports 128KB of RAM or more. In the latter case, 256KB are assumed,
-  but since there are no range checks, the application can use more memory if
-  it has better knowledge about the hardware than the driver.
+  A driver for the CBM REUs. The driver will test the connected REU to find
+  out how much RAM is present.
 
   <tag><tt/c64-vdc.emd (c64_vdc_emd)/</tag>
   A driver for the VDC memory of the C128. Written and contributed by Maciej
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 a858c591eefba3ce35c7438c9e11e30fb956df38..3ded00d67bbd82d17c006a1a516ea0b26389a433 100644 (file)
@@ -55,6 +55,8 @@ REU_TRIGGER     = $FF00                 ; REU command trigger
 OP_COPYFROM     = $ED
 OP_COPYTO       = $EC
 
+OP_COPYFROM_ALOAD = $B1
+OP_COPYTO_ALOAD   = $B0
 
 ; ------------------------------------------------------------------------
 ; Data.
@@ -92,17 +94,56 @@ INSTALL:
         cmp     REU_REUADDR             ; Check for presence of REU
         bne     nodevice
 
-        ldy     #>(128*4)               ; Assume 128KB
-        lda     REU_STATUS
-        and     #$10                    ; Check size bit
-        beq     @L1
-        ldy     #>(256*4)               ; 256KB when size bit is set
-@L1:    sty     pagecount+1
-
+; determine the size
+        php
+        sei
         ldy     #$FF
-        sty     curpage
-        sty     curpage+1               ; Invalidate the current page
-        txa                             ; X = A = EM_ERR_OK
+loop:
+        sty     window
+        jsr     reu_size_check_common
+        ldx     #OP_COPYTO_ALOAD
+        stx     REU_COMMAND
+        dey
+        cpy     #$FF
+        bne     loop
+        iny
+size_loop:
+        jsr     reu_size_check_common
+        ldx     #OP_COPYFROM_ALOAD
+        stx     REU_COMMAND
+        cpy     window
+        bne     size_found
+        iny
+        bne     size_loop
+size_found:
+        plp
+        ldx     #$00
+        cpy     #$00                    ; too many pages, shave off 2
+        bne     pagecount_ok
+        dex
+        dex
+        dey
+pagecount_ok:
+        stx     pagecount
+        sty     pagecount+1
+        lda     #<EM_ERR_OK
+        ldx     #>EM_ERR_OK
+        rts
+
+; common REU setup for size check
+reu_size_check_common:
+        sty     REU_REUADDR+2
+        ldx     #<window
+        stx     REU_C64ADDR
+        ldx     #>window
+        stx     REU_C64ADDR+1
+        ldx     #$00
+        stx     REU_REUADDR
+        stx     REU_REUADDR+1
+        stx     REU_COUNT+1
+        stx     REU_CONTROL
+        inx
+        stx     REU_COUNT
         rts
 
 ; No REU found
index 0779505be9be5cdbde0348f89c25244f7d4b2bdc..bf7bb4fb0cb6f02d732bb7553d4d2401e116b571 100644 (file)
@@ -55,6 +55,9 @@ REU_TRIGGER     = $FF00                 ; REU command trigger
 OP_COPYFROM     = $ED
 OP_COPYTO       = $EC
 
+OP_COPYFROM_ALOAD = $B1
+OP_COPYTO_ALOAD   = $B0
+
 
 ; ------------------------------------------------------------------------
 ; Data.
@@ -92,19 +95,59 @@ INSTALL:
         cmp     REU_REUADDR             ; Check for presence of REU
         bne     nodevice
 
-        ldy     #>(128*4)               ; Assume 128KB
-        lda     REU_STATUS
-        and     #$10                    ; Check size bit
-        beq     @L1
-        ldy     #>(256*4)               ; 256KB when size bit is set
-@L1:    sty     pagecount+1
-
+; determine the size
+        php
+        sei
         ldy     #$FF
-        sty     curpage
-        sty     curpage+1               ; Invalidate the current page
-        txa                             ; X = A = EM_ERR_OK
+loop:
+        sty     window
+        jsr     reu_size_check_common
+        ldx     #OP_COPYTO_ALOAD
+        stx     REU_COMMAND
+        dey
+        cpy     #$FF
+        bne     loop
+        iny
+size_loop:
+        jsr     reu_size_check_common
+        ldx     #OP_COPYFROM_ALOAD
+        stx     REU_COMMAND
+        cpy     window
+        bne     size_found
+        iny
+        bne     size_loop
+size_found:
+        plp
+        ldx     #$00
+        cpy     #$00                    ; too many pages, shave off 2
+        bne     pagecount_ok
+        dex
+        dex
+        dey
+pagecount_ok:
+        stx     pagecount
+        sty     pagecount+1
+        lda     #<EM_ERR_OK
+        ldx     #>EM_ERR_OK
         rts
 
+; common REU setup for size check
+reu_size_check_common:
+        sty     REU_REUADDR+2
+        ldx     #<window
+        stx     REU_C64ADDR
+        ldx     #>window
+        stx     REU_C64ADDR+1
+        ldx     #$00
+        stx     REU_REUADDR
+        stx     REU_REUADDR+1
+        stx     REU_COUNT+1
+        stx     REU_CONTROL
+        inx
+        stx     REU_COUNT
+        rts
+
+
 ; No REU found
 
 nodevice:
index 9f6c0b4dd5204d6fd966dd0ebe39c3237b8e80f8..3b4a0b9092cde9fbebac4b8c8bda830e7aedab56 100644 (file)
@@ -73,13 +73,22 @@ UNINSTALL:
         rts
 
 ; ------------------------------------------------------------------------
-; IRQ entry point. Is called from the C layer as a subroutine in the
-; interrupt. The routine MUST return carry set if the interrupt has been
-; 'handled' - which means that the interrupt source is gone. Otherwise it
-; MUST return carry clear.
+; COUNT: Return the total number of available joysticks in a/x.
+;
 
-IRQ:    ; cia 2 setup
+COUNT:  lda     #<JOY_COUNT
+        ldx     #>JOY_COUNT
+        rts
 
+; ------------------------------------------------------------------------
+; READ: Read a particular joystick passed in A.
+;
+
+readadapter:
+
+        sei
+
+        ; cia 2 setup
         ldy     #$00            ; port b direction
         sty     $dd03           ; => input
 
@@ -143,32 +152,24 @@ IRQ:    ; cia 2 setup
         sta     temp4
 
 fire:
-        ; Default Value: $40/64 on PAL
-        ;                    $42/66 on NTSC
+        ; FIXME: to be really 100% correct this should restore the correct timer
+        ;        values for the respective machine (PAL: $4025, NTSC: $4295)
+        ;        however, this should hardly be a problem in a real world program
+
         lda     #$41
         sta     $dc05
-        ; Default Value: $25/37 on PAL
-        ;                    $95/149 on NTSC
         lda     #0
         sta     $dc04
 
-        ; We do never "handle" the interrupt, we use it just as a timer.
-        clc
-        rts
-
-; ------------------------------------------------------------------------
-; COUNT: Return the total number of available joysticks in a/x.
-;
-
-COUNT:  lda     #<JOY_COUNT
-        ldx     #>JOY_COUNT
+        cli
         rts
 
-; ------------------------------------------------------------------------
-; READ: Read a particular joystick passed in A.
-;
+READ:
+        pha
+        jsr readadapter
+        pla
 
-READ:   tax            ; Joystick number into X
+        tax            ; Joystick number into X
         bne joy2
 
 ; Read joystick 1
@@ -214,4 +215,3 @@ joy4:   lda     temp4
         eor     #$1F
         ldx     #0
         rts
-
index 0ee7d879f04f4a13923a07d48daea1d58e15f64d..faeacf7090f5960ac30c65473145dd4af52c6fd9 100644 (file)
@@ -1,7 +1,7 @@
 ;
 ; Ullrich von Bassewitz, 05.08.1998
 ;
-; CC65 runtime: Increment ax by valie in y
+; CC65 runtime: Increment ax by value in y
 ;
 
         .export         incaxy, incax4
index 067154b86f16ce0b99df7df1c065fa69cf02a34b..0ed0ffcdfa83982b46cf50c5e372f082aed1bad1 100644 (file)
@@ -2,7 +2,7 @@
 ; Ullrich von Bassewitz, 25.10.2000
 ;
 ; CC65 runtime: Increment the stackpointer by 2. For performance reasons,
-;               this modules does also contain the popax function.
+;               this module also contains the popax function.
 
         .export         popax, incsp2
         .importzp       sp
index ed77a07891d2996c8b28b8f66d862b2a854b6929..29a18b1db2e79e1abd6de90633a2525b4c970fda 100644 (file)
@@ -1,7 +1,7 @@
 ;
 ; Ullrich von Bassewitz, 2002-12-26
 ;
-; CC65 runtime: Jump vector that resides in the data segment so it's address 
+; CC65 runtime: Jump vector that resides in the data segment so its address
 ; may be patched at runtime.
 ;
 
index c35b05dcc2bd24c6fe46e02326d445fd0049617f..472bc60ec5da17826a3669906aa930ba91fac259 100644 (file)
@@ -1,7 +1,7 @@
 ;
 ; Ullrich von Bassewitz, 04.10.2001
 ;
-; CC65 runtime: Multiply the primary register
+; CC65 runtime: Multiply the primary register by 3
 ;
 
         .export         mulax3
index 9af599806160f8a592c7ab9c24c125b9e9fd67b9..7e5ed11d9c0e1aa0029192c210cc8a197939c421 100644 (file)
@@ -1,7 +1,7 @@
 ;
 ; Ullrich von Bassewitz, 04.10.2001
 ;
-; CC65 runtime: Multiply the primary register
+; CC65 runtime: Multiply the primary register by 5
 ;
 
         .export         mulax5
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
 
 
 
index fdd83bb4e2944f9de98c6c12dd61f7cf9a7885be..3d584bf9d36e32093507ed5eebe4086b1a563e7c 100644 (file)
@@ -5,7 +5,6 @@
 #include <conio.h>
 #include <joystick.h>
 
-
 #ifdef JOYSTICK_DRIVER
 
 /* A statically linked driver was named on the compiler's command line.
 */
 #  undef DYN_DRV
 #  define DYN_DRV       0
+
+/*
+** link existing drivers like this:
+**
+** cl65 -DJOYSTICK_DRIVER=c64_hitjoy_joy -o joy-test.prg joy-test.c
+**
+** for testing a new driver you will have to uncomment the define below, and
+** link your driver like this:
+**
+** co65 ../../target/c64/drv/joy/c64-hitjoy.joy -o hitjoy.s --code-label _hitjoy
+** cl65 -DJOYSTICK_DRIVER=hitjoy -o joy-test.prg joy-test.c hitjoy.s
+**
+*/
+
+/* extern char JOYSTICK_DRIVER; */
+
 #else
 
 /* Use a dynamically loaded driver, by default. */
@@ -27,13 +42,17 @@ int main (void)
     unsigned char j;
     unsigned char count;
     unsigned char i;
+    unsigned char Res;
+    unsigned char ch, kb;
+
+    clrscr ();
 
 #if DYN_DRV
-    unsigned char Res = joy_load_driver (joy_stddrv);
+    Res = joy_load_driver (joy_stddrv);
 #elif defined(JOYSTICK_DRIVER)
-    unsigned char Res = joy_install (&JOYSTICK_DRIVER);
+    Res = joy_install (&JOYSTICK_DRIVER);
 #else
-    unsigned char Res = joy_install (&joy_static_stddrv);
+    Res = joy_install (&joy_static_stddrv);
 #endif
 
     if (Res != JOY_ERR_OK) {
@@ -44,7 +63,6 @@ int main (void)
         exit (EXIT_FAILURE);
     }
 
-    clrscr ();
     count = joy_count ();
 #if defined(__ATARI5200__) || defined(__CREATIVISION__)
     cprintf ("JOYSTICKS: %d", count);
@@ -56,23 +74,31 @@ int main (void)
             gotoxy (0, i+1);
             j = joy_read (i);
 #if defined(__ATARI5200__) || defined(__CREATIVISION__)
-            cprintf ("%1d:%-3s%-3s%-3s%-3s%-3s%-3s",
+            cprintf ("%1d:%-3s%-3s%-3s%-3s%-3s %02x",
                      i,
                      JOY_UP(j)?    " U " : " - ",
                      JOY_DOWN(j)?  " D " : " - ",
                      JOY_LEFT(j)?  " L " : " - ",
                      JOY_RIGHT(j)? " R " : " - ",
-                     JOY_BTN_1(j)? " 1 " : " - ");
+                     JOY_BTN_1(j)? " 1 " : " - ", j);
 #else
-            cprintf ("%2d: %-6s%-6s%-6s%-6s%-6s%-6s",
+            cprintf ("%2d: %-6s%-6s%-6s%-6s%-6s %02x",
                      i,
                      JOY_UP(j)?    "  up  " : " ---- ",
                      JOY_DOWN(j)?  " down " : " ---- ",
                      JOY_LEFT(j)?  " left " : " ---- ",
                      JOY_RIGHT(j)? "right " : " ---- ",
-                     JOY_BTN_1(j)? "button" : " ---- ");
+                     JOY_BTN_1(j)? "button" : " ---- ", j);
 #endif
         }
+
+        /* show pressed key, so we can verify keyboard is working */
+        kb = kbhit ();
+        ch = kb ? cgetc () : ' ';
+        gotoxy (1, i+2);
+        revers (kb);
+        cprintf ("kbd: %c", ch);
+        revers (0);
     }
     return 0;
 }