]> git.sur5r.net Git - cc65/commitdiff
Introduced target 'atarixl'.
authorOliver Schmidt <ol.sc@web.de>
Tue, 28 May 2013 19:56:37 +0000 (21:56 +0200)
committerOliver Schmidt <ol.sc@web.de>
Tue, 28 May 2013 19:56:37 +0000 (21:56 +0200)
The target 'atarixl' is to be used for Atari XL (and better) machines.
It will disable the OS ROM and enable the Shadow RAM available on
those machine.

Note: This commit is only the inital step towards for this goal that just
replicates the target 'atari' as a starting point!

19 files changed:
asminc/stdio.inc
cfg/atarixl-overlay.cfg [new file with mode: 0644]
cfg/atarixl.cfg [new file with mode: 0644]
include/atari.h
include/conio.h
include/dirent.h
include/stdio.h
include/time.h
libsrc/Makefile
libsrc/dbg/dbg.c
src/ca65/main.c
src/cc65/main.c
src/common/target.c
src/common/target.h
testcode/lib/clock.c
testcode/lib/div-test.c
testcode/lib/ft.c
testcode/lib/mul-test.c
testcode/lib/strnicmp-test.c

index fc75238cff5500f0689aa3f11d6060a3e0c82c36..835a204b1121425e513755d7f7f935f7cd66c60e 100644 (file)
@@ -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 (file)
index 0000000..02becd2
--- /dev/null
@@ -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 (file)
index 0000000..975d162
--- /dev/null
@@ -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__;
+}
index b6714e715aa81b7e341157cc5a06144a5a52d81b..3c0898c2f8839a02b1cafce549d7a5ff67fcbf81 100644 (file)
@@ -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
 
index ab446ad4211845f1a2a8238bed4ed90b23d228ea..693e400350183dea95b04cfac58a50b47f0f193c 100644 (file)
@@ -63,7 +63,7 @@
 #  include <apple2.h>
 #elif defined(__APPLE2ENH__)
 #  include <apple2enh.h>
-#elif defined(__ATARI__)
+#elif defined(__ATARI__) || defined(__ATARIXL__)
 #  include <atari.h>
 #elif defined(__ATMOS__)
 #  include <atmos.h>
index 993036a1bb4c2135a4080bf1d1d333d67e1e51d6..d1d7864195fd452ac14ad7976953baa91378abf1 100644 (file)
@@ -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 */
index 6f2f9c3f818cdc9ff93591a5eec8b1b5eaabbdaa..b2c4fa67a16af2039229b4fb18bae5e21a81938c 100644 (file)
@@ -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)
index 507d7e29a34828f37ef18926980a602efe593076..7ac69165bb825bd183742348f5a9a3d10bcc4afe 100644 (file)
@@ -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()
index a91cc73f4d781b4e09f9fe37d5a52daba139c861..5cdc1f6591d318797ffe9bbc062be973a9f8ae63 100644 (file)
@@ -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
index 3d7b8dd9172ca24e2f414db3cd8f822d5aa6046d..68453be6fab829800109a5e9396b0a7bd35da32b 100644 (file)
@@ -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
index b3e855e98872679b8a2c2c98f613aa01f5a6d52b..1f98e46aebcd3f2583da43760777d55900040537 100644 (file)
@@ -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;
index a9d94ba9dcf517cc6b784286033c8d76bbba1bae..6d9472143bf07167563b9a42557828276c58547f 100644 (file)
@@ -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;
index c4d1d1dde3248a41d1a1483c4c49d235e4d7f9fb..a4287ee5699a473827e5ffd08af89fd74f4e2f90 100644 (file)
@@ -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   },
index 4b5eec385838772e69028e80a5ae283a4ae54f11..e1675ad651c08e1f61fdcdec4530e1e8b7d4580d 100644 (file)
@@ -55,6 +55,7 @@ typedef enum {
     TGT_NONE,
     TGT_MODULE,
     TGT_ATARI,
+    TGT_ATARIXL,
     TGT_VIC20,
     TGT_C16,
     TGT_C64,
index 7991058cd0725d5b54e23cac497263a23ed98856..a4d046d52d4cce09d425d5718e1282afa3deea67 100644 (file)
@@ -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 <return> to exit...");
   cgetc();
-#endif
   printf("\n");
   return(0);
 }
index ce290ad38ed419435507a6a9b94bce7d95aa59e4..2d5c2541e26f539681bfe3d7f349d47126f578f1 100644 (file)
@@ -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;
         }
index efbab3627aa8858acbe49f6eaaef45b8491d57b2..586bace451d877ba7bbefa2849b322b1e7691e0f 100644 (file)
@@ -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) {
index 1ce6268947026462b9284ca9804114ede860d46d..5df7130729e5ef8930fa7ed124501ffc6e35ed9f 100644 (file)
@@ -18,7 +18,7 @@ static const unsigned char small_bar[8] = {
     ' ', 0xa5, 0xb4, 0xb5, 0xa1, 0xb6, 0xaa, 0xa7\r
 };\r
 \r
-#elif defined(__ATARI__)\r
+#elif defined(__ATARI__) || defined(__ATARIXL__)\r
 #endif\r
 \r
 /* Screen co-ordinates for the progress meter */\r
@@ -39,7 +39,7 @@ static void ProgressMeter (unsigned Val)
     revers (revers_bar[Val]);\r
     cputc (small_bar[Val]);\r
 \r
-#elif defined(__ATARI__)\r
+#elif defined(__ATARI__) || defined(__ATARIXL__)\r
 #endif\r
 \r
     revers (0);\r
@@ -162,12 +162,8 @@ Done:
              " %u.%03u seconds.\n", Days, Hours, Minu, Sec, Milli);\r
 #endif\r
 \r
-#ifdef __ATARI__\r
-    if (_dos_type != SPARTADOS && _dos_type != OSADOS) {\r
-        cprintf ("\rTap a key, to exit. ");\r
-        cgetc();\r
-    }\r
-#endif\r
+    cprintf ("\rTap a key, to exit. ");\r
+    cgetc();\r
     return 0;\r
 }\r
 \r
index 45c2ce27066f6a88437239624b6d6e23ca537eaf..b2d942a97ebe7ae29b3774833645d8e72a5f2a0d 100644 (file)
@@ -1,10 +1,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
-#ifdef __ATARI__
-#include <atari.h>
 #include <conio.h>
-#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;
 }