diff --git a/asminc/stdio.inc b/asminc/stdio.inc index fc75238cf..835a204b1 100644 --- a/asminc/stdio.inc +++ b/asminc/stdio.inc @@ -43,7 +43,7 @@ BUFSIZ = 256 EOF = -1 .if .defined(__APPLE2__) .or .defined(__APPLE2ENH__) FILENAME_MAX = 64+1 -.elseif .defined(__ATARI__) +.elseif .defined(__ATARI__) .or .defined(__ATARIXL__) FILENAME_MAX = 12+1 .elseif .defined(__LUNIX__) FILENAME_MAX = 80+1 diff --git a/cfg/atarixl-overlay.cfg b/cfg/atarixl-overlay.cfg new file mode 100644 index 000000000..02becd29b --- /dev/null +++ b/cfg/atarixl-overlay.cfg @@ -0,0 +1,61 @@ +FEATURES { + STARTADDRESS: default = $2E00; +} +SYMBOLS { + __STACKSIZE__: type = weak, value = $0800; # 2k stack + __OVERLAYSIZE__: type = weak, value = $1000; # 4k overlay + __RESERVED_MEMORY__: type = weak, value = $0000; +} +MEMORY { + ZP: file = "", define = yes, start = $0082, size = $007E; + HEADER: file = %O, start = $0000, size = $0006; + RAM: file = %O, start = %S + __OVERLAYSIZE__, size = $BC20 - __STACKSIZE__ - __OVERLAYSIZE__ - %S; + TRAILER: file = %O, start = $0000, size = $0006; + OVL1: file = "%O.1", start = %S, size = __OVERLAYSIZE__; + OVL2: file = "%O.2", start = %S, size = __OVERLAYSIZE__; + OVL3: file = "%O.3", start = %S, size = __OVERLAYSIZE__; + OVL4: file = "%O.4", start = %S, size = __OVERLAYSIZE__; + OVL5: file = "%O.5", start = %S, size = __OVERLAYSIZE__; + OVL6: file = "%O.6", start = %S, size = __OVERLAYSIZE__; + OVL7: file = "%O.7", start = %S, size = __OVERLAYSIZE__; + OVL8: file = "%O.8", start = %S, size = __OVERLAYSIZE__; + OVL9: file = "%O.9", start = %S, size = __OVERLAYSIZE__; +} +SEGMENTS { + EXEHDR: load = HEADER, type = ro; + STARTUP: load = RAM, type = ro, define = yes; + LOWCODE: load = RAM, type = ro, define = yes, optional = yes; + INIT: load = RAM, type = ro, optional = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro; + DATA: load = RAM, type = rw; + ZPSAVE: load = RAM, type = bss, define = yes; + BSS: load = RAM, type = bss, define = yes; + ZEROPAGE: load = ZP, type = zp; + EXTZP: load = ZP, type = zp, optional = yes; + AUTOSTRT: load = TRAILER, type = ro; + OVERLAY1: load = OVL1, type = ro, define = yes, optional = yes; + OVERLAY2: load = OVL2, type = ro, define = yes, optional = yes; + OVERLAY3: load = OVL3, type = ro, define = yes, optional = yes; + OVERLAY4: load = OVL4, type = ro, define = yes, optional = yes; + OVERLAY5: load = OVL5, type = ro, define = yes, optional = yes; + OVERLAY6: load = OVL6, type = ro, define = yes, optional = yes; + OVERLAY7: load = OVL7, type = ro, define = yes, optional = yes; + OVERLAY8: load = OVL8, type = ro, define = yes, optional = yes; + OVERLAY9: load = OVL9, type = ro, define = yes, optional = yes; +} +FEATURES { + CONDES: type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__, + segment = INIT; + 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/atarixl.cfg b/cfg/atarixl.cfg new file mode 100644 index 000000000..975d16213 --- /dev/null +++ b/cfg/atarixl.cfg @@ -0,0 +1,42 @@ +FEATURES { + STARTADDRESS: default = $2E00; +} +SYMBOLS { + __STACKSIZE__: type = weak, value = $0800; # 2k stack + __RESERVED_MEMORY__: type = weak, value = $0000; +} +MEMORY { + ZP: file = "", define = yes, start = $0082, size = $007E; + HEADER: file = %O, start = $0000, size = $0006; + RAM: file = %O, start = %S, size = $BC20 - __STACKSIZE__ - %S; + TRAILER: file = %O, start = $0000, size = $0006; +} +SEGMENTS { + EXEHDR: load = HEADER, type = ro; + STARTUP: load = RAM, type = ro, define = yes; + LOWCODE: load = RAM, type = ro, define = yes, optional = yes; + INIT: load = RAM, type = ro, optional = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro; + DATA: load = RAM, type = rw; + ZPSAVE: load = RAM, type = bss, define = yes; + BSS: load = RAM, type = bss, define = yes; + ZEROPAGE: load = ZP, type = zp; + EXTZP: load = ZP, type = zp, optional = yes; + AUTOSTRT: load = TRAILER, type = ro; +} +FEATURES { + CONDES: type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__, + segment = INIT; + 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/include/atari.h b/include/atari.h index b6714e715..3c0898c2f 100644 --- a/include/atari.h +++ b/include/atari.h @@ -38,7 +38,7 @@ /* Check for errors */ -#if !defined(__ATARI__) +#if !defined(__ATARI__) && !defined(__ATARIXL__) # error This module may only be used when compiling for the Atari! #endif diff --git a/include/conio.h b/include/conio.h index ab446ad42..693e40035 100644 --- a/include/conio.h +++ b/include/conio.h @@ -63,7 +63,7 @@ # include #elif defined(__APPLE2ENH__) # include -#elif defined(__ATARI__) +#elif defined(__ATARI__) || defined(__ATARIXL__) # include #elif defined(__ATMOS__) # include diff --git a/include/dirent.h b/include/dirent.h index 993036a1b..d1d786419 100644 --- a/include/dirent.h +++ b/include/dirent.h @@ -78,7 +78,7 @@ struct dirent { #define _DE_ISLBL(t) (0) #define _DE_ISLNK(t) (0) -#elif defined(__ATARI__) +#elif defined(__ATARI__) || defined(__ATARIXL__) struct dirent { char d_name[13]; /* 8.3 + trailing 0 */ diff --git a/include/stdio.h b/include/stdio.h index 6f2f9c3f8..b2c4fa67a 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -71,7 +71,7 @@ extern FILE* stderr; /* Standard defines that are platform dependent */ #if defined(__APPLE2__) || defined(__APPLE2ENH__) # define FILENAME_MAX (64+1) -#elif defined(__ATARI__) +#elif defined(__ATARI__) || defined(__ATARIXL__) # define FILENAME_MAX (12+1) #elif defined(__LUNIX__) # define FILENAME_MAX (80+1) diff --git a/include/time.h b/include/time.h index 507d7e29a..7ac69165b 100644 --- a/include/time.h +++ b/include/time.h @@ -76,7 +76,7 @@ extern struct _timezone { -#if defined(__ATARI__) +#if defined(__ATARI__) || defined(__ATARIXL__) /* The clock depends on the video standard, so read it at runtime */ unsigned _clocks_per_sec (void); # define CLK_TCK _clocks_per_sec() diff --git a/libsrc/Makefile b/libsrc/Makefile index a91cc73f4..5cdc1f659 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -13,6 +13,7 @@ GEOS = geos-apple \ TARGETS = apple2 \ apple2enh \ atari \ + atarixl \ atmos \ $(CBMS) \ $(GEOS) \ @@ -93,9 +94,13 @@ GEOSDIRS = common \ system ifeq ($(TARGET),apple2enh) + SRCDIR = apple2 OBJPFX = a2 DRVPFX = a2e - SRCDIR = apple2 +else ifeq ($(TARGET),atarixl) + SRCDIR = atari + OBJPFX = atr + DRVPFX = atrx else ifeq ($(TARGET),sim65c02) SRCDIR = sim6502 else diff --git a/libsrc/dbg/dbg.c b/libsrc/dbg/dbg.c index 3d7b8dd91..68453be6f 100644 --- a/libsrc/dbg/dbg.c +++ b/libsrc/dbg/dbg.c @@ -93,7 +93,7 @@ static char GetKeyUpdate (void); # define MAX_X 80 # define MAX_Y 25 # define DUMP_BYTES 16 -#elif defined(__APPLE2__) || defined(__APPLE2ENH__) || defined(__ATARI__) +#elif defined(__APPLE2__) || defined(__APPLE2ENH__) || defined(__ATARI__) || defined(__ATARIXL__) # define MAX_X 40 # define MAX_Y 24 # define DUMP_BYTES 8 diff --git a/src/ca65/main.c b/src/ca65/main.c index b3e855e98..1f98e46ae 100644 --- a/src/ca65/main.c +++ b/src/ca65/main.c @@ -208,6 +208,10 @@ static void SetSys (const char* Sys) NewSymbol ("__ATARI__", 1); break; + case TGT_ATARIXL: + NewSymbol ("__ATARIXL__", 1); + break; + case TGT_C16: CBMSystem ("__C16__"); break; diff --git a/src/cc65/main.c b/src/cc65/main.c index a9d94ba9d..6d9472143 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -164,6 +164,10 @@ static void SetSys (const char* Sys) DefineNumericMacro ("__ATARI__", 1); break; + case TGT_ATARIXL: + DefineNumericMacro ("__ATARIXL__", 1); + break; + case TGT_C16: cbmsys ("__C16__"); break; diff --git a/src/common/target.c b/src/common/target.c index c4d1d1dde..a4287ee56 100644 --- a/src/common/target.c +++ b/src/common/target.c @@ -125,6 +125,7 @@ static const TargetEntry TargetMap[] = { { "apple2", TGT_APPLE2 }, { "apple2enh", TGT_APPLE2ENH }, { "atari", TGT_ATARI }, + { "atarixl", TGT_ATARIXL }, { "atmos", TGT_ATMOS }, { "bbc", TGT_BBC }, { "c128", TGT_C128 }, @@ -156,6 +157,7 @@ static const TargetProperties PropertyTable[TGT_COUNT] = { { "none", CPU_6502, BINFMT_BINARY, CTNone }, { "module", CPU_6502, BINFMT_O65, CTNone }, { "atari", CPU_6502, BINFMT_BINARY, CTAtari }, + { "atarixl", CPU_6502, BINFMT_BINARY, CTAtari }, { "vic20", CPU_6502, BINFMT_BINARY, CTPET }, { "c16", CPU_6502, BINFMT_BINARY, CTPET }, { "c64", CPU_6502, BINFMT_BINARY, CTPET }, diff --git a/src/common/target.h b/src/common/target.h index 4b5eec385..e1675ad65 100644 --- a/src/common/target.h +++ b/src/common/target.h @@ -55,6 +55,7 @@ typedef enum { TGT_NONE, TGT_MODULE, TGT_ATARI, + TGT_ATARIXL, TGT_VIC20, TGT_C16, TGT_C64, diff --git a/testcode/lib/clock.c b/testcode/lib/clock.c index 7991058cd..a4d046d52 100644 --- a/testcode/lib/clock.c +++ b/testcode/lib/clock.c @@ -16,11 +16,8 @@ int main(void) printf("clocks per second: %d\n", CLOCKS_PER_SEC); printf("current clock: %ld\n", clock()); -#ifdef __ATARI__ - /* Atari DOS 2.x clears the screen after program termination, so wait... */ printf("hit to exit..."); cgetc(); -#endif printf("\n"); return(0); } diff --git a/testcode/lib/div-test.c b/testcode/lib/div-test.c index ce290ad38..2d5c2541e 100644 --- a/testcode/lib/div-test.c +++ b/testcode/lib/div-test.c @@ -31,10 +31,8 @@ int main(void) { test(-40, -3); if (t) printf("\nThe div() function made a wrong result!\n"); -#ifdef __ATARI__ - /* Atari DOS 2 clears the screen after program-termination, so wait. */ + printf("\nTap a key, to exit. "); getchar(); -#endif return (int)t; } diff --git a/testcode/lib/ft.c b/testcode/lib/ft.c index efbab3627..586bace45 100644 --- a/testcode/lib/ft.c +++ b/testcode/lib/ft.c @@ -24,7 +24,8 @@ extern int getsp(void); /* is provided in getsp.s */ -#ifdef __ATARI__ /* Atari's fd indirection table */ +/* Atari's fd indirection table */ +#if defined(__ATARI__) || defined(__ATARIXL__) extern char __fd_index[]; struct fd_t { char usage; @@ -33,7 +34,7 @@ struct fd_t { char flag; }; extern struct fd_t __fd_table[]; -#endif /* #ifdef __ATARI__ */ +#endif int main(int argc,char **argv) { @@ -73,7 +74,7 @@ int main(int argc,char **argv) return(0); } printf("open success -- handle = $%x, sp = %d\n",fd,csp); -#ifdef __ATARI__ +#if defined(__ATARI__) || defined(__ATARIXL__) printf("fd_index:\n "); for (i=0; i<12; i++) printf("%02X ",__fd_index[i]); printf("\nfd_table:\n"); @@ -83,7 +84,7 @@ int main(int argc,char **argv) __fd_table[i].iocb, __fd_table[i].dev); } -#endif /* #ifdef __ATARI__ */ +#endif lr = read(fd,buf,16); /* read first 16 bytes */ csp = getsp(); if (lr == -1) { diff --git a/testcode/lib/mul-test.c b/testcode/lib/mul-test.c index 1ce626894..5df713072 100644 --- a/testcode/lib/mul-test.c +++ b/testcode/lib/mul-test.c @@ -18,7 +18,7 @@ static const unsigned char small_bar[8] = { ' ', 0xa5, 0xb4, 0xb5, 0xa1, 0xb6, 0xaa, 0xa7 }; -#elif defined(__ATARI__) +#elif defined(__ATARI__) || defined(__ATARIXL__) #endif /* Screen co-ordinates for the progress meter */ @@ -39,7 +39,7 @@ static void ProgressMeter (unsigned Val) revers (revers_bar[Val]); cputc (small_bar[Val]); -#elif defined(__ATARI__) +#elif defined(__ATARI__) || defined(__ATARIXL__) #endif revers (0); @@ -162,12 +162,8 @@ Done: " %u.%03u seconds.\n", Days, Hours, Minu, Sec, Milli); #endif -#ifdef __ATARI__ - if (_dos_type != SPARTADOS && _dos_type != OSADOS) { - cprintf ("\rTap a key, to exit. "); - cgetc(); - } -#endif + cprintf ("\rTap a key, to exit. "); + cgetc(); return 0; } diff --git a/testcode/lib/strnicmp-test.c b/testcode/lib/strnicmp-test.c index 45c2ce270..b2d942a97 100644 --- a/testcode/lib/strnicmp-test.c +++ b/testcode/lib/strnicmp-test.c @@ -1,10 +1,7 @@ #include #include #include -#ifdef __ATARI__ -#include #include -#endif static int do_test(const char *s1, const char *s2, size_t n) { @@ -70,11 +67,6 @@ int main(void) else printf("OK (%d)\n", ret); -#ifdef __ATARI__ - if (_dos_type != 1) { - cgetc(); - } -#endif - + cgetc(); return 0; }