Switched Apple II output format to AppleSingle.

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.
This commit is contained in:
Oliver Schmidt 2018-03-07 23:04:33 +01:00
parent 03c60efec9
commit 8e75906737
16 changed files with 129 additions and 98 deletions

View File

@ -3,9 +3,12 @@
FEATURES { FEATURES {
STARTADDRESS: default = $0803; STARTADDRESS: default = $0803;
} }
SYMBOLS {
__FILETYPE__: type = weak, value = $0006; # ProDOS file type
}
MEMORY { MEMORY {
ZP: file = "", start = $0000, size = $00FF; 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; MAIN: file = %O, define = yes, start = %S, size = $C000 - %S;
BSS: file = "", start = __MAIN_LAST__, size = $C000 - __MAIN_LAST__; BSS: file = "", start = __MAIN_LAST__, size = $C000 - __MAIN_LAST__;
} }

View File

@ -5,6 +5,7 @@ FEATURES {
} }
SYMBOLS { SYMBOLS {
__EXEHDR__: type = import; __EXEHDR__: type = import;
__FILETYPE__: type = weak, value = $0006; # ProDOS file type
__STACKSIZE__: type = weak, value = $0800; # 2k stack __STACKSIZE__: type = weak, value = $0800; # 2k stack
__HIMEM__: type = weak, value = $9600; # Presumed RAM end __HIMEM__: type = weak, value = $9600; # Presumed RAM end
__LCADDR__: type = weak, value = $D400; # Behind quit code __LCADDR__: type = weak, value = $D400; # Behind quit code
@ -12,7 +13,7 @@ SYMBOLS {
} }
MEMORY { MEMORY {
ZP: file = "", define = yes, start = $0080, size = $001A; 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; MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S;
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__; BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;

View File

@ -1,10 +1,10 @@
# Configuration for overlay programs (overlays located below main program) # 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: # The overlay files are raw binary files so use AppleCommander like this:
# java -jar ac.jar -cc65 mydisk.dsk myprog bin < myprog # 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.1 bin < myprog.1
# java -jar ac.jar -p mydisk.dsk myprog.2 bin < myprog.2 # java -jar ac.jar -p mydisk.dsk myprog.2 bin < myprog.2
# java -jar ac.jar -p mydisk.dsk myprog.3 bin < myprog.3 # java -jar ac.jar -p mydisk.dsk myprog.3 bin < myprog.3
# ... # ...
FEATURES { FEATURES {
@ -12,6 +12,7 @@ FEATURES {
} }
SYMBOLS { SYMBOLS {
__EXEHDR__: type = import; __EXEHDR__: type = import;
__FILETYPE__: type = weak, value = $0006; # ProDOS file type
__STACKSIZE__: type = weak, value = $0800; # 2k stack __STACKSIZE__: type = weak, value = $0800; # 2k stack
__HIMEM__: type = weak, value = $9600; # Presumed RAM end __HIMEM__: type = weak, value = $9600; # Presumed RAM end
__LCADDR__: type = weak, value = $D400; # Behind quit code __LCADDR__: type = weak, value = $D400; # Behind quit code
@ -20,7 +21,7 @@ SYMBOLS {
} }
MEMORY { MEMORY {
ZP: file = "", define = yes, start = $0080, size = $001A; 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; MAIN: file = %O, define = yes, start = %S + __OVERLAYSIZE__, size = __HIMEM__ - __OVERLAYSIZE__ - %S;
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__; BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;

View 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 { SYMBOLS {
__EXEHDR__: type = import;
__FILETYPE__: type = weak, value = $00FF; # ProDOS file type
__STACKSIZE__: type = weak, value = $0800; # 2k stack __STACKSIZE__: type = weak, value = $0800; # 2k stack
__LCADDR__: type = weak, value = $D400; # Behind quit code __LCADDR__: type = weak, value = $D400; # Behind quit code
__LCSIZE__: type = weak, value = $0C00; # Rest of bank two __LCSIZE__: type = weak, value = $0C00; # Rest of bank two
} }
MEMORY { MEMORY {
ZP: file = "", define = yes, start = $0080, size = $001A; ZP: file = "", define = yes, start = $0080, size = $001A;
MAIN: file = %O, start = $2000, size = $BF00 - $2000; HEADER: file = %O, start = $2000 - $003A, size = $003A;
BSS: file = "", start = __ONCE_RUN__, size = $BF00 - __STACKSIZE__ - __ONCE_RUN__; MAIN: file = %O, define = yes, start = $2000, size = $BF00 - $2000;
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; BSS: file = "", start = __ONCE_RUN__, size = $BF00 - __STACKSIZE__ - __ONCE_RUN__;
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
} }
SEGMENTS { SEGMENTS {
ZEROPAGE: load = ZP, type = zp; ZEROPAGE: load = ZP, type = zp;
EXEHDR: load = HEADER, type = ro, optional = yes;
STARTUP: load = MAIN, type = ro; STARTUP: load = MAIN, type = ro;
LOWCODE: load = MAIN, type = ro, optional = yes; LOWCODE: load = MAIN, type = ro, optional = yes;
CODE: load = MAIN, type = ro; CODE: load = MAIN, type = ro;

View File

@ -5,6 +5,7 @@ FEATURES {
} }
SYMBOLS { SYMBOLS {
__EXEHDR__: type = import; __EXEHDR__: type = import;
__FILETYPE__: type = weak, value = $0006; # ProDOS file type
__STACKSIZE__: type = weak, value = $0800; # 2k stack __STACKSIZE__: type = weak, value = $0800; # 2k stack
__HIMEM__: type = weak, value = $9600; # Presumed RAM end __HIMEM__: type = weak, value = $9600; # Presumed RAM end
__LCADDR__: type = weak, value = $D400; # Behind quit code __LCADDR__: type = weak, value = $D400; # Behind quit code
@ -12,7 +13,7 @@ SYMBOLS {
} }
MEMORY { MEMORY {
ZP: file = "", define = yes, start = $0080, size = $001A; 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; MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S;
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__; BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;

View File

@ -3,9 +3,12 @@
FEATURES { FEATURES {
STARTADDRESS: default = $0803; STARTADDRESS: default = $0803;
} }
SYMBOLS {
__FILETYPE__: type = weak, value = $0006; # ProDOS file type
}
MEMORY { MEMORY {
ZP: file = "", start = $0000, size = $00FF; 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; MAIN: file = %O, define = yes, start = %S, size = $C000 - %S;
BSS: file = "", start = __MAIN_LAST__, size = $C000 - __MAIN_LAST__; BSS: file = "", start = __MAIN_LAST__, size = $C000 - __MAIN_LAST__;
} }

View File

@ -5,6 +5,7 @@ FEATURES {
} }
SYMBOLS { SYMBOLS {
__EXEHDR__: type = import; __EXEHDR__: type = import;
__FILETYPE__: type = weak, value = $0006; # ProDOS file type
__STACKSIZE__: type = weak, value = $0800; # 2k stack __STACKSIZE__: type = weak, value = $0800; # 2k stack
__HIMEM__: type = weak, value = $9600; # Presumed RAM end __HIMEM__: type = weak, value = $9600; # Presumed RAM end
__LCADDR__: type = weak, value = $D400; # Behind quit code __LCADDR__: type = weak, value = $D400; # Behind quit code
@ -12,7 +13,7 @@ SYMBOLS {
} }
MEMORY { MEMORY {
ZP: file = "", define = yes, start = $0080, size = $001A; 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; MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S;
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__; BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;

View File

@ -1,10 +1,10 @@
# Configuration for overlay programs (overlays located below main program) # 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: # The overlay files are raw binary files so use AppleCommander like this:
# java -jar ac.jar -cc65 mydisk.dsk myprog bin < myprog # 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.1 bin < myprog.1
# java -jar ac.jar -p mydisk.dsk myprog.2 bin < myprog.2 # java -jar ac.jar -p mydisk.dsk myprog.2 bin < myprog.2
# java -jar ac.jar -p mydisk.dsk myprog.3 bin < myprog.3 # java -jar ac.jar -p mydisk.dsk myprog.3 bin < myprog.3
# ... # ...
FEATURES { FEATURES {
@ -12,6 +12,7 @@ FEATURES {
} }
SYMBOLS { SYMBOLS {
__EXEHDR__: type = import; __EXEHDR__: type = import;
__FILETYPE__: type = weak, value = $0006; # ProDOS file type
__STACKSIZE__: type = weak, value = $0800; # 2k stack __STACKSIZE__: type = weak, value = $0800; # 2k stack
__HIMEM__: type = weak, value = $9600; # Presumed RAM end __HIMEM__: type = weak, value = $9600; # Presumed RAM end
__LCADDR__: type = weak, value = $D400; # Behind quit code __LCADDR__: type = weak, value = $D400; # Behind quit code
@ -20,7 +21,7 @@ SYMBOLS {
} }
MEMORY { MEMORY {
ZP: file = "", define = yes, start = $0080, size = $001A; 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; MAIN: file = %O, define = yes, start = %S + __OVERLAYSIZE__, size = __HIMEM__ - __OVERLAYSIZE__ - %S;
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__; BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;

View 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 { SYMBOLS {
__EXEHDR__: type = import;
__FILETYPE__: type = weak, value = $00FF; # ProDOS file type
__STACKSIZE__: type = weak, value = $0800; # 2k stack __STACKSIZE__: type = weak, value = $0800; # 2k stack
__LCADDR__: type = weak, value = $D400; # Behind quit code __LCADDR__: type = weak, value = $D400; # Behind quit code
__LCSIZE__: type = weak, value = $0C00; # Rest of bank two __LCSIZE__: type = weak, value = $0C00; # Rest of bank two
} }
MEMORY { MEMORY {
ZP: file = "", define = yes, start = $0080, size = $001A; ZP: file = "", define = yes, start = $0080, size = $001A;
MAIN: file = %O, start = $2000, size = $BF00 - $2000; HEADER: file = %O, start = $2000 - $003A, size = $003A;
BSS: file = "", start = __ONCE_RUN__, size = $BF00 - __STACKSIZE__ - __ONCE_RUN__; MAIN: file = %O, define = yes, start = $2000, size = $BF00 - $2000;
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; BSS: file = "", start = __ONCE_RUN__, size = $BF00 - __STACKSIZE__ - __ONCE_RUN__;
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
} }
SEGMENTS { SEGMENTS {
ZEROPAGE: load = ZP, type = zp; ZEROPAGE: load = ZP, type = zp;
EXEHDR: load = HEADER, type = ro, optional = yes;
STARTUP: load = MAIN, type = ro; STARTUP: load = MAIN, type = ro;
LOWCODE: load = MAIN, type = ro, optional = yes; LOWCODE: load = MAIN, type = ro, optional = yes;
CODE: load = MAIN, type = ro; CODE: load = MAIN, type = ro;

View File

@ -5,6 +5,7 @@ FEATURES {
} }
SYMBOLS { SYMBOLS {
__EXEHDR__: type = import; __EXEHDR__: type = import;
__FILETYPE__: type = weak, value = $0006; # ProDOS file type
__STACKSIZE__: type = weak, value = $0800; # 2k stack __STACKSIZE__: type = weak, value = $0800; # 2k stack
__HIMEM__: type = weak, value = $9600; # Presumed RAM end __HIMEM__: type = weak, value = $9600; # Presumed RAM end
__LCADDR__: type = weak, value = $D400; # Behind quit code __LCADDR__: type = weak, value = $D400; # Behind quit code
@ -12,7 +13,7 @@ SYMBOLS {
} }
MEMORY { MEMORY {
ZP: file = "", define = yes, start = $0080, size = $001A; 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; MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S;
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__; BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;

View File

@ -34,20 +34,14 @@ more information.
<sect>Binary format<p> <sect>Binary format<p>
The standard binary file format generated by the linker for the 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 Apple&nbsp;&rsqb;&lsqb; target is an <url name="AppleSingle"
containing the load address and load length. The default load address is url="http://kaiser-edv.de/documents/AppleSingle_AppleDouble.pdf"> file.
&dollar;803. The default load address is &dollar;803.
<bf/AppleCommander 1.3.5/ or later (available at <url <bf/AppleCommander 1.4.0/ or later (available at <url
url="https://applecommander.github.io/">) includes the option <tt/-cc65/ url="https://applecommander.github.io/">) includes the option <tt/-as/ that
that allows to put binary files with a DOS 3.3 header onto disk images allows to put AppleSingle files onto disk images containing DOS 3.3 as well
containing DOS 3.3 as well as ProDOS 8. 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/.
<sect>Memory layout<p> <sect>Memory layout<p>
@ -121,9 +115,8 @@ Parameters:
<tag><tt/STARTADDRESS:/ Program start address</tag> <tag><tt/STARTADDRESS:/ Program start address</tag>
Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address. Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address.
<tag><tt/__EXEHDR__:/ Executable file header</tag> <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
Default: DOS 3.3 header (address and length). Use <tt/-D __EXEHDR__=0/ to omit Default: Yes. Use <tt/-D __EXEHDR__=0/ to omit the AppleSingle header.
the header.
<tag><tt/__STACKSIZE__:/ C runtime stack size</tag> <tag><tt/__STACKSIZE__:/ C runtime stack size</tag>
Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different
@ -153,6 +146,9 @@ Parameters:
<descrip> <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> <tag><tt/__STACKSIZE__:/ C runtime stack size</tag>
Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different
stack size. stack size.
@ -180,9 +176,8 @@ Parameters:
<tag><tt/STARTADDRESS:/ Program start address</tag> <tag><tt/STARTADDRESS:/ Program start address</tag>
Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address. Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address.
<tag><tt/__EXEHDR__:/ Executable file header</tag> <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
Default: DOS 3.3 header (address and length). Use <tt/-D __EXEHDR__=0/ to omit Default: Yes. Use <tt/-D __EXEHDR__=0/ to omit the AppleSingle header.
the header.
<tag><tt/__STACKSIZE__:/ C runtime stack size</tag> <tag><tt/__STACKSIZE__:/ C runtime stack size</tag>
Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different 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> <sect1><tt/apple2-overlay.cfg/<p>
Configuration for an overlay program with up to nine overlays. The overlay files 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. information on overlays.
Parameters: Parameters:
@ -216,9 +211,8 @@ Parameters:
<tag><tt/STARTADDRESS:/ Program start address</tag> <tag><tt/STARTADDRESS:/ Program start address</tag>
Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address. Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address.
<tag><tt/__EXEHDR__:/ Executable file header</tag> <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
Default: DOS 3.3 header (address and length). Use <tt/-D __EXEHDR__=0/ to omit Default: Yes. Use <tt/-D __EXEHDR__=0/ to omit the AppleSingle header.
the header.
<tag><tt/__STACKSIZE__:/ C runtime stack size</tag> <tag><tt/__STACKSIZE__:/ C runtime stack size</tag>
Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different 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> <tag><tt/STARTADDRESS:/ Program start address</tag>
Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address. Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address.
<tag><tt/__EXEHDR__:/ Executable file header</tag> <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
Default: No header. Use <tt/-u __EXEHDR__ apple2.lib/ to add a DOS 3.3 header Default: No. Use <tt/-u __EXEHDR__ apple2.lib/ to add the AppleSingle header.
(address and length).
</descrip><p> </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 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 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> <sect1>Heap<p>

View File

@ -34,20 +34,14 @@ more information.
<sect>Binary format<p> <sect>Binary format<p>
The standard binary file format generated by the linker for the 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 enhanced&nbsp;Apple&nbsp;//e target is an <url name="AppleSingle"
containing the load address and load length. The default load address is url="http://kaiser-edv.de/documents/AppleSingle_AppleDouble.pdf"> file.
&dollar;803. The default load address is &dollar;803.
<bf/AppleCommander 1.3.5/ or later (available at <url <bf/AppleCommander 1.4.0/ or later (available at <url
url="https://applecommander.github.io/">) includes the option <tt/-cc65/ url="https://applecommander.github.io/">) includes the option <tt/-as/ that
that allows to put binary files with a DOS 3.3 header onto disk images allows to put AppleSingle files onto disk images containing DOS 3.3 as well
containing DOS 3.3 as well as ProDOS 8. 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/.
<sect>Memory layout<p> <sect>Memory layout<p>
@ -121,9 +115,8 @@ Parameters:
<tag><tt/STARTADDRESS:/ Program start address</tag> <tag><tt/STARTADDRESS:/ Program start address</tag>
Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address. Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address.
<tag><tt/__EXEHDR__:/ Executable file header</tag> <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
Default: DOS 3.3 header (address and length). Use <tt/-D __EXEHDR__=0/ to omit Default: Yes. Use <tt/-D __EXEHDR__=0/ to omit the AppleSingle header.
the header.
<tag><tt/__STACKSIZE__:/ C runtime stack size</tag> <tag><tt/__STACKSIZE__:/ C runtime stack size</tag>
Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different
@ -153,6 +146,9 @@ Parameters:
<descrip> <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> <tag><tt/__STACKSIZE__:/ C runtime stack size</tag>
Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different
stack size. stack size.
@ -180,9 +176,8 @@ Parameters:
<tag><tt/STARTADDRESS:/ Program start address</tag> <tag><tt/STARTADDRESS:/ Program start address</tag>
Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address. Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address.
<tag><tt/__EXEHDR__:/ Executable file header</tag> <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
Default: DOS 3.3 header (address and length). Use <tt/-D __EXEHDR__=0/ to omit Default: Yes. Use <tt/-D __EXEHDR__=0/ to omit the AppleSingle header.
the header.
<tag><tt/__STACKSIZE__:/ C runtime stack size</tag> <tag><tt/__STACKSIZE__:/ C runtime stack size</tag>
Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different 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> <sect1><tt/apple2enh-overlay.cfg/<p>
Configuration for an overlay program with up to nine overlays. The overlay files 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. information on overlays.
Parameters: Parameters:
@ -216,9 +211,8 @@ Parameters:
<tag><tt/STARTADDRESS:/ Program start address</tag> <tag><tt/STARTADDRESS:/ Program start address</tag>
Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address. Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address.
<tag><tt/__EXEHDR__:/ Executable file header</tag> <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
Default: DOS 3.3 header (address and length). Use <tt/-D __EXEHDR__=0/ to omit Default: Yes. Use <tt/-D __EXEHDR__=0/ to omit the AppleSingle header.
the header.
<tag><tt/__STACKSIZE__:/ C runtime stack size</tag> <tag><tt/__STACKSIZE__:/ C runtime stack size</tag>
Default: &dollar;800. Use <tt/-D __STACKSIZE__=&lt;size&gt;/ to set a different 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> <tag><tt/STARTADDRESS:/ Program start address</tag>
Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address. Default: &dollar;803. Use <tt/-S &lt;addr&gt;/ to set a different start address.
<tag><tt/__EXEHDR__:/ Executable file header</tag> <tag><tt/__EXEHDR__:/ AppleSingle executable file header</tag>
Default: No header. Use <tt/-u __EXEHDR__ apple2enh.lib/ to add a DOS 3.3 header Default: No. Use <tt/-u __EXEHDR__ apple2enh.lib/ to add the AppleSingle header.
(address and length).
</descrip><p> </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 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 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> <sect1>Heap<p>

View File

@ -246,13 +246,13 @@ varies in its start and exit conditions.
<sect2>AppleWin<p> <sect2>AppleWin<p>
Available at <url 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 Emulates Apple&nbsp;&rsqb;&lsqb;/enhanced&nbsp;Apple&nbsp;//e computers, with
sound, video, joysticks, serial port, and disk images. Includes monitor. Only 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; 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 however, you will need <bf/AppleCommander 1.4.0/ or later (available at <url
url="http://applecommander.sourceforge.net/">). url="https://applecommander.github.io/">).
Compile the tutorial with 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/: <tt/cc65.dsk/, then use <bf/AppleCommander/:
<tscreen><verb> <tscreen><verb>
java -jar ac.jar -cc65 cc65.dsk test B < hello java -jar ac.jar -as cc65.dsk test < hello
</verb></tscreen> </verb></tscreen>
Note that a convention in the Apple world is that "hello" is the file which is 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 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 MSDOS/Windows world. We've avoided that in the example, however by using
the <tt/B/ parameter must be in caps., and "test" is the name of the program as "test" as the name of the program as it will appear on the Apple disk.
it will appear on the Apple disk.
Start the emulator, click on the <bf/Disk 1/ icon, and point to <bf/cc65.dsk/; 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 then, click the big Apple logo, to boot the system. Then, type this on the

View File

@ -1,16 +1,40 @@
; ;
; Oliver Schmidt, 2012-06-10 ; Oliver Schmidt, 2012-06-10
; ;
; This module supplies a 4 byte DOS 3.3 header ; This module supplies an AppleSingle version 2 file header + entry with
; containing the load address and load length. ; ID 11 according to https://tools.ietf.org/rfc/rfc1740.txt Appendix A.
; ;
.export __EXEHDR__ : absolute = 1 ; Linker referenced .export __EXEHDR__ : absolute = 1 ; Linker referenced
.import __FILETYPE__ ; Linker generated
.import __MAIN_START__, __MAIN_LAST__ ; 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" .segment "EXEHDR"
.addr __MAIN_START__ ; Load address START: .byte $00, $05, $16, $00 ; Magic number
.word __MAIN_LAST__ - __MAIN_START__ ; Load length .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:

View File

@ -188,15 +188,15 @@ samples.d64: samples
$(foreach file,$(EMD) $(MOU) $(TGI),$(D64_WRITE_recipe)) $(foreach file,$(EMD) $(MOU) $(TGI),$(D64_WRITE_recipe))
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
# Rule to make an Apple II disk with all samples. Needs the Apple Commander # Rule to make an Apple II disk with all samples. Needs the AppleCommander
# program available at http://applecommander.sourceforge.net/ and a template # program available at https://applecommander.github.io/ and a template disk
# disk named 'prodos.dsk'. # named 'prodos.dsk'.
define DSK_WRITE_BIN_recipe define DSK_WRITE_BIN_recipe
$(if $(findstring BF00,$(LDFLAGS_$(notdir $(file))_$(SYS))), \ $(if $(findstring BF00,$(LDFLAGS_$(notdir $(file))_$(SYS))), \
java -jar $(AC) -p $@ $(notdir $(file)).system sys <$(TARGET_PATH)/$(SYS)/util/loader.system) 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 endef # DSK_WRITE_BIN_recipe

View File

@ -47,7 +47,7 @@
#define VER_MAJOR 2U #define VER_MAJOR 2U
#define VER_MINOR 16U #define VER_MINOR 17U