diff --git a/cfg/apple2-hgr.cfg b/cfg/apple2-hgr.cfg new file mode 100644 index 000000000..540578b25 --- /dev/null +++ b/cfg/apple2-hgr.cfg @@ -0,0 +1,52 @@ +# Configuration for programs including a hires screen (with 6KB LOWCODE) + +FEATURES { + STARTADDRESS: default = $0803; +} +SYMBOLS { + __EXEHDR__: type = import; + __STACKSIZE__: type = weak, value = $0800; # 2k stack + __HIMEM__: type = weak, value = $9600; # Presumed RAM end + __LCADDR__: type = weak, value = $D400; # Behind quit code + __LCSIZE__: type = weak, value = $0C00; # Rest of bank two + __MAIN_START__: type = export, value = %S; + __MAIN_LAST__: type = export, value = __HIGH_LAST__; +} +MEMORY { + ZP: file = "", define = yes, start = $0080, size = $001A; + HEADER: file = %O, start = %S - 4, size = $0004; + LOW: file = %O, fill = yes, start = %S, size = $2000 - %S; + HGR: file = %O, fill = yes, start = $2000, size = $2000; + HIGH: file = %O, define = yes, start = $4000, size = __HIMEM__ - $4000; + BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__; + LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp; + EXEHDR: load = HEADER, type = ro; + STARTUP: load = LOW, type = ro; + LOWCODE: load = LOW, type = ro, optional = yes; + HGR: load = HGR, type = rw, optional = yes; + CODE: load = HIGH, type = ro; + RODATA: load = HIGH, type = ro; + DATA: load = HIGH, type = rw; + INIT: load = HIGH, type = rw; + ONCE: load = HIGH, type = ro, define = yes; + LC: load = HIGH, run = LC, type = ro, optional = yes; + BSS: load = BSS, type = bss, define = yes; +} +FEATURES { + CONDES: type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__, + segment = ONCE; + CONDES: type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__, + segment = RODATA; + CONDES: type = interruptor, + label = __INTERRUPTOR_TABLE__, + count = __INTERRUPTOR_COUNT__, + segment = RODATA, + import = __CALLIRQ__; +} diff --git a/cfg/apple2enh-hgr.cfg b/cfg/apple2enh-hgr.cfg new file mode 100644 index 000000000..540578b25 --- /dev/null +++ b/cfg/apple2enh-hgr.cfg @@ -0,0 +1,52 @@ +# Configuration for programs including a hires screen (with 6KB LOWCODE) + +FEATURES { + STARTADDRESS: default = $0803; +} +SYMBOLS { + __EXEHDR__: type = import; + __STACKSIZE__: type = weak, value = $0800; # 2k stack + __HIMEM__: type = weak, value = $9600; # Presumed RAM end + __LCADDR__: type = weak, value = $D400; # Behind quit code + __LCSIZE__: type = weak, value = $0C00; # Rest of bank two + __MAIN_START__: type = export, value = %S; + __MAIN_LAST__: type = export, value = __HIGH_LAST__; +} +MEMORY { + ZP: file = "", define = yes, start = $0080, size = $001A; + HEADER: file = %O, start = %S - 4, size = $0004; + LOW: file = %O, fill = yes, start = %S, size = $2000 - %S; + HGR: file = %O, fill = yes, start = $2000, size = $2000; + HIGH: file = %O, define = yes, start = $4000, size = __HIMEM__ - $4000; + BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__; + LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp; + EXEHDR: load = HEADER, type = ro; + STARTUP: load = LOW, type = ro; + LOWCODE: load = LOW, type = ro, optional = yes; + HGR: load = HGR, type = rw, optional = yes; + CODE: load = HIGH, type = ro; + RODATA: load = HIGH, type = ro; + DATA: load = HIGH, type = rw; + INIT: load = HIGH, type = rw; + ONCE: load = HIGH, type = ro, define = yes; + LC: load = HIGH, run = LC, type = ro, optional = yes; + BSS: load = BSS, type = bss, define = yes; +} +FEATURES { + CONDES: type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__, + segment = ONCE; + CONDES: type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__, + segment = RODATA; + CONDES: type = interruptor, + label = __INTERRUPTOR_TABLE__, + count = __INTERRUPTOR_COUNT__, + segment = RODATA, + import = __CALLIRQ__; +} diff --git a/testcode/lib/apple2/hgrtest.c b/testcode/lib/apple2/hgrtest.c new file mode 100644 index 000000000..7323cbb73 --- /dev/null +++ b/testcode/lib/apple2/hgrtest.c @@ -0,0 +1,26 @@ +// cl65 -t apple2 -C apple2-hgr.cfg hgrtest.c werner.s + +#include +#include + +#pragma code-name (push, "LOWCODE") + +void say (const char* text) +{ + tgi_setcolor (TGI_COLOR_BLACK); + tgi_outtextxy (41, 33, text); +} + +#pragma code-name (pop) + +void main (void) +{ + tgi_install (a2_hi_tgi); + tgi_init (); + cgetc (); + + say ("Hi Dude !"); + cgetc (); + + tgi_uninstall (); +} diff --git a/testcode/lib/apple2/werner.pic b/testcode/lib/apple2/werner.pic new file mode 100644 index 000000000..2405e2409 Binary files /dev/null and b/testcode/lib/apple2/werner.pic differ diff --git a/testcode/lib/apple2/werner.s b/testcode/lib/apple2/werner.s new file mode 100644 index 000000000..6456ade13 --- /dev/null +++ b/testcode/lib/apple2/werner.s @@ -0,0 +1,2 @@ +.segment "HGR" +.incbin "werner.pic"