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 {
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__;
}

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

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

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

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

View 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__;
}

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

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

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

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

View 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>

View 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>

View 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

View 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:

View 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

View File

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