mirror of
https://github.com/cc65/cc65.git
synced 2024-09-27 04:54:54 +00:00
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:
parent
03c60efec9
commit
8e75906737
@ -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__;
|
||||||
}
|
}
|
||||||
|
@ -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__;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# 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
|
||||||
@ -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__;
|
||||||
|
@ -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;
|
||||||
|
MAIN: file = %O, define = yes, start = $2000, size = $BF00 - $2000;
|
||||||
BSS: file = "", start = __ONCE_RUN__, size = $BF00 - __STACKSIZE__ - __ONCE_RUN__;
|
BSS: file = "", start = __ONCE_RUN__, size = $BF00 - __STACKSIZE__ - __ONCE_RUN__;
|
||||||
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
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;
|
||||||
|
@ -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__;
|
||||||
|
@ -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__;
|
||||||
}
|
}
|
||||||
|
@ -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__;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# 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
|
||||||
@ -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__;
|
||||||
|
@ -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;
|
||||||
|
MAIN: file = %O, define = yes, start = $2000, size = $BF00 - $2000;
|
||||||
BSS: file = "", start = __ONCE_RUN__, size = $BF00 - __STACKSIZE__ - __ONCE_RUN__;
|
BSS: file = "", start = __ONCE_RUN__, size = $BF00 - __STACKSIZE__ - __ONCE_RUN__;
|
||||||
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
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;
|
||||||
|
@ -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__;
|
||||||
|
@ -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 ][ target is a binary program with a 4 byte DOS 3.3 header
|
Apple ][ 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.
|
||||||
$803.
|
The default load address is $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 $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: $803. Use <tt/-S <addr>/ to set a different start address.
|
Default: $803. Use <tt/-S <addr>/ 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: $800. Use <tt/-D __STACKSIZE__=<size>/ to set a different
|
Default: $800. Use <tt/-D __STACKSIZE__=<size>/ 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: $800. Use <tt/-D __STACKSIZE__=<size>/ to set a different
|
Default: $800. Use <tt/-D __STACKSIZE__=<size>/ 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: $803. Use <tt/-S <addr>/ to set a different start address.
|
Default: $803. Use <tt/-S <addr>/ 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: $800. Use <tt/-D __STACKSIZE__=<size>/ to set a different
|
Default: $800. Use <tt/-D __STACKSIZE__=<size>/ 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: $803. Use <tt/-S <addr>/ to set a different start address.
|
Default: $803. Use <tt/-S <addr>/ 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: $800. Use <tt/-D __STACKSIZE__=<size>/ to set a different
|
Default: $800. Use <tt/-D __STACKSIZE__=<size>/ to set a different
|
||||||
@ -254,9 +248,8 @@ Parameters:
|
|||||||
<tag><tt/STARTADDRESS:/ Program start address</tag>
|
<tag><tt/STARTADDRESS:/ Program start address</tag>
|
||||||
Default: $803. Use <tt/-S <addr>/ to set a different start address.
|
Default: $803. Use <tt/-S <addr>/ 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 <program>.SYSTEM as a system program. For
|
program to load under name <program>.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>
|
||||||
|
@ -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 Apple //e target is a binary program with a 4 byte DOS 3.3 header
|
enhanced Apple //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.
|
||||||
$803.
|
The default load address is $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 $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: $803. Use <tt/-S <addr>/ to set a different start address.
|
Default: $803. Use <tt/-S <addr>/ 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: $800. Use <tt/-D __STACKSIZE__=<size>/ to set a different
|
Default: $800. Use <tt/-D __STACKSIZE__=<size>/ 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: $800. Use <tt/-D __STACKSIZE__=<size>/ to set a different
|
Default: $800. Use <tt/-D __STACKSIZE__=<size>/ 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: $803. Use <tt/-S <addr>/ to set a different start address.
|
Default: $803. Use <tt/-S <addr>/ 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: $800. Use <tt/-D __STACKSIZE__=<size>/ to set a different
|
Default: $800. Use <tt/-D __STACKSIZE__=<size>/ 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: $803. Use <tt/-S <addr>/ to set a different start address.
|
Default: $803. Use <tt/-S <addr>/ 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: $800. Use <tt/-D __STACKSIZE__=<size>/ to set a different
|
Default: $800. Use <tt/-D __STACKSIZE__=<size>/ to set a different
|
||||||
@ -254,9 +248,8 @@ Parameters:
|
|||||||
<tag><tt/STARTADDRESS:/ Program start address</tag>
|
<tag><tt/STARTADDRESS:/ Program start address</tag>
|
||||||
Default: $803. Use <tt/-S <addr>/ to set a different start address.
|
Default: $803. Use <tt/-S <addr>/ 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 <program>.SYSTEM as a system program. For
|
program to load under name <program>.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>
|
||||||
|
@ -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 ][/enhanced Apple //e computers, with
|
Emulates Apple ][/enhanced Apple //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
|
||||||
|
@ -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:
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#define VER_MAJOR 2U
|
#define VER_MAJOR 2U
|
||||||
#define VER_MINOR 16U
|
#define VER_MINOR 17U
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user