diff --git a/README.md b/README.md index 93b91aa80..009fca78b 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ including - the Atari 8-bit machines. - the Atari 2600 console. - the Atari 5200 console. +- the Atari 7800 console. - GEOS for the C64, C128 and Apple //e. - the Bit Corporation Gamate console. - the NEC PC-Engine (aka TurboGrafx-16) console. diff --git a/asminc/atari7800.inc b/asminc/atari7800.inc new file mode 100644 index 000000000..a7625aa8a --- /dev/null +++ b/asminc/atari7800.inc @@ -0,0 +1,8 @@ +; Atari 7800 TIA & RIOT read / write registers +; +; Karri Kaksonen (karri@sipo.fi), 2022 + +; TIA, RIOT & MARIA registers mapping +.include "atari7800_tia.inc" +.include "atari7800_riot.inc" +.include "atari7800_maria.inc" diff --git a/asminc/atari7800_maria.inc b/asminc/atari7800_maria.inc new file mode 100644 index 000000000..39624d21d --- /dev/null +++ b/asminc/atari7800_maria.inc @@ -0,0 +1,39 @@ +; Atari 7800 MARIA read / write registers +; + +; Read registers +BKGRND := $20 +P0C1 := $21 +P0C2 := $22 +P0C3 := $23 +MWSYNC := $24 +P1C1 := $25 +P1C2 := $26 +P1C3 := $27 +MSTAT := $28 +P2C1 := $29 +P2C2 := $2A +P2C3 := $2B +DPPH := $2C +P3C1 := $2D +P3C2 := $2E +P3C3 := $2F +DPPL := $30 +P4C1 := $31 +P4C2 := $32 +P4C3 := $33 +CHBASE := $34 +P5C1 := $35 +P5C2 := $36 +P5C3 := $37 +OFFSET := $38 +P6C1 := $39 +P6C2 := $3A +P6C3 := $3B +CTRL := $3C +P7C1 := $3D +P7C2 := $3E +P7C3 := $3F + +; Write registers + diff --git a/asminc/atari7800_riot.inc b/asminc/atari7800_riot.inc new file mode 100644 index 000000000..780e34df3 --- /dev/null +++ b/asminc/atari7800_riot.inc @@ -0,0 +1,20 @@ +; Atari 7800 RIOT read / write registers +; +; Source: DASM - vcs.h +; Details available in: Stella Programmer's Guide by Steve Wright +; +; Florent Flament (contact@florentflament.com), 2017 + +; Read registers +SWCHA := $0280 +CTLSWA := $0281 +SWCHB := $0282 +CTLSWB := $0283 +INTIM := $0284 +TIMINT := $0285 + +; Write registers +TIM1T := $0294 +TIM8T := $0295 +TIM64T := $0296 +T1024T := $0297 diff --git a/asminc/atari7800_tia.inc b/asminc/atari7800_tia.inc new file mode 100644 index 000000000..f4439e421 --- /dev/null +++ b/asminc/atari7800_tia.inc @@ -0,0 +1,69 @@ +; Atari 7800 TIA read / write registers +; +; Source: DASM - vcs.h +; Details available in: Stella Programmer's Guide by Steve Wright +; +; Florent Flament (contact@florentflament.com), 2017 + +; Read registers +VSYNC := $00 +VBLANK := $01 +WSYNC := $02 +RSYNC := $03 +NUSIZ0 := $04 +NUSIZ1 := $05 +COLUP0 := $06 +COLUP1 := $07 +COLUPF := $08 +COLUBK := $09 +CTRLPF := $0A +REFP0 := $0B +REFP1 := $0C +PF0 := $0D +PF1 := $0E +PF2 := $0F +RESP0 := $10 +RESP1 := $11 +RESM0 := $12 +RESM1 := $13 +RESBL := $14 +AUDC0 := $15 +AUDC1 := $16 +AUDF0 := $17 +AUDF1 := $18 +AUDV0 := $19 +AUDV1 := $1A +GRP0 := $1B +GRP1 := $1C +ENAM0 := $1D +ENAM1 := $1E +ENABL := $1F +HMP0 := $20 +HMP1 := $21 +HMM0 := $22 +HMM1 := $23 +HMBL := $24 +VDELP0 := $25 +VDELP1 := $26 +VDELBL := $27 +RESMP0 := $28 +RESMP1 := $29 +HMOVE := $2A +HMCLR := $2B +CXCLR := $2C + +; Write registers +CXM0P := $00 +CXM1P := $01 +CXP0FB := $02 +CXP1FB := $03 +CXM0FB := $04 +CXM1FB := $05 +CXBLPF := $06 +CXPPMM := $07 +INPT0 := $08 +INPT1 := $09 +INPT2 := $0A +INPT3 := $0B +INPT4 := $0C +INPT5 := $0D diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg new file mode 100644 index 000000000..562dd3857 --- /dev/null +++ b/cfg/atari7800.cfg @@ -0,0 +1,67 @@ +# Atari VCS 7800 linker configuration file for cc65 +# In order to add the a78 header to the build you can add +# "--force-import __EXEHDR__" to the command line + +SYMBOLS { + __STACKSIZE__: type = weak, value = $0600; # C stack + __CARTSIZE__: type = weak, value = $8000; + __VEC_BOTTOM__: value = $fffa, type = export; + __VEC_SIZE__: value = $6, type = export; + __ENCRYPT_BOTTOM__: value = $ff7a, type = export; + __ENCRYPT_SIZE__: value = $80, type = export; + __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; + __INIT_SIZE__: value = 69, type = export; + __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; + __MEMORY_BOTTOM__: value = $10000 - __CARTSIZE__, type = weak; + __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; +} + +MEMORY { + ZP: file = "", define = yes, start = $0040, size = $00C0, type = rw; + SP: file = "", define = yes, start = $0140, size = $00C0, type = rw; + RAM1: file = "", define = yes, start = $1800, size = $0840, type = rw; + RAM2: file = "", define = yes, start = $2100, size = $0040, type = rw; + RAM3: file = "", define = yes, start = $2200, size = $0600, type = rw; + # For emulators you also need a header file + HEADER: file = %O, start = $0000, size = 128; + # "Normal" cartridge rom. Multiple banks arent supported + # by this script. You may change the rom size, but keep + # two things in mind: + # - start must be a multiple of $1000 + # - ROM must end at $ff79 + ROM: file = %O, define = yes, start = __MEMORY_BOTTOM__, size = __FREE_ROM_SIZE__, type = ro, fill = yes, fillval = $ff; + ROMS: file = %O, define = yes, start = __MEMORY_INIT__, size = __INIT_SIZE__, type = ro, fill = yes, fillval = $ff; + # Encryption stuff + ROME: file = %O, start = __ENCRYPT_BOTTOM__, size = __ENCRYPT_SIZE__, type = ro, fill = yes, fillval = $ff; + # Interrupt vectors + ROMV: file = %O, start = __VEC_BOTTOM__, size = __VEC_SIZE__, type = ro, fill = yes, fillval = $ff; +} + +SEGMENTS { + ZEROPAGE: load = ZP, type = zp; + EXEHDR: load = HEADER, type = ro, optional = yes; + STARTUP: load = ROMS, type = ro, define = yes; + ONCE: load = ROMS, type = ro, define = yes; + CODE: load = ROM, type = ro, define = yes; + RODATA: load = ROM, type = ro, define = yes, align = 256; + DATA: load = ROM, run = RAM1, type = rw, define = yes; + BSS: load = RAM1, type = bss, define = yes; + VECTORS: load = ROMV, type = ro, define = yes; + ENCRYPTION: load = ROME, type = ro 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/doc/atari7800.sgml b/doc/atari7800.sgml new file mode 100644 index 000000000..b6551614c --- /dev/null +++ b/doc/atari7800.sgml @@ -0,0 +1,157 @@ + + +
+Atari 7800 specific information for cc65 +<author> +<url url="mailto:karri@sipo.fi" name="Karri Kaksonen"><newline> + +<abstract> +An overview over the Atari 7800 runtime system as it is implemented +for the cc65 C compiler. +</abstract> + +<!-- Table of contents --> +<toc> + +<!-- Begin the document --> + +<sect>Overview<p> + +This file contains an overview of the Atari 7800 runtime system as it +comes with the cc65 C compiler. It describes the memory layout, Atari +7800 specific header files and any pitfalls specific to that platform. + +<sect>Binary format<p> + +The default binary output format generated by the linker for the Atari +7800 target is a 48K cartridge image. + +<sect>A78 header<p> + +There is lots of different cart hardware available for the atari7800. +Some carts have ROM, RAM, sound hardware, non-volatile high score chips. +In order to know what kind of hardware the cart build requires there is +a header file of 128 bytes in front of the binary. + +The default build creates a cart file for a 48K rom cart without any +extra features like the pokey audio chip or extra RAM. + +In order to make cc65 more user friendly the build will add the a78 +header automatically. This allows you to run the binary on emulators +and flash carts on the real console. + +<sect>Encryption<p> + +In order to boot the game in a mode that supports atari7800 functions +the cart must be encrypted after the linking phase. +There is a program called sign7800 that can be used to sign the cart. +The encryption is not required for running the cart on emulators. +You can also run atari2600 games without encryption. + +<sect>Memory layout<p> + +cc65 generated programs with the default setup can use RAM from +from $1800 to $203f. +The 4k RAM is then mapped to zero page area. +$2040 to $20ff is visible as zero page. +After that we have a vero small RAM area that is unused. +$2100 to $213f. +Then we mirror a second block from the RAM to become the hardware stack. +This would be from $2140 to $21ff. + +The C-stack starts at $2800 and it can grow down to $2200. + +size of the system stack can be customized by defining the +__STACKSIZE__ linker variable. + +Special locations: + +<descrip> + <tag/Stack/ The C runtime stack is located at $2800 - + __STACKSIZE__ and growing downwards. + + <tag/Heap/ The C heap is located at $2200 and grows upwards. + +</descrip><p> + +<sect>Start-up condition<p> + +When powered-up, the Atari 7800 TIA registers contain random +values. During the initialization phase, the start-up code needs to +initialize the TIA registers to sound values (or else the console has +an unpredictable behavior). In this implementation, zeros are written +to all of TIA registers during the start-up phase. + +Note that RIOT registers (mostly timers) are left uninitialized, as +they don't have any consequence on the console behavior. + +<sect>Platform specific header files<p> + +Programs containing Atari 7800 specific code may use the +<tt/atari7800.h/ header file. + +The following pseudo variables declared in the <tt/atari7800.h/ header +file allow access to the Atari 7800 TIA, MARIA & RIOT chips registers. + +<descrip> + + <tag><tt/TIA/</tag> The <tt/TIA/ structure allows read/write access + to the Atari 7800 TIA chip registers. See the <tt/_tia.h/ header + file located in the include directory for the declaration of the + structure. Also refer to the Stella Programmer's Guide by Steve + Wright for a detailed description of the chip and its registers. + + <tag><tt/RIOT/</tag> The <tt/RIOT/ structure allows read/write + access to the Atari 7800 RIOT chip registers. See the + <tt/_riot.h/ header file located in the include directory for the + declaration of the structure. Also refer to the Stella Programmer's + Guide by Steve Wright for a detailed description of the chip and its + registers. + + <tag><tt/MARIA/</tag> The <tt/MARIA/ structure allows read/write + access to the Atari 7800 MARIA chip registers. See the + <tt/_maria.h/ header file located in the include directory for the + declaration of the structure. + +</descrip><p> + + +<sect>Loadable drivers<p> + +There are no drivers for the Atari 7800. + + +<sect>Limitations<p> + +TBD + + +<sect>Other hints<p> + +One may write a custom linker configuration file to tune the memory +layout of a program. See the <tt/atari7800.cfg/ file in the cfg +directory as a starting point. + + +<sect>License<p> + +This software is provided 'as-is', without any expressed or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +<enum> +<item> The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +<item> Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. +<item> This notice may not be removed or altered from any source + distribution. +</enum> + +</article> diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 8797f2c60..c0ebe3688 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -4763,6 +4763,7 @@ compiler, depending on the target system selected: <item><tt/__APPLE2ENH__/ - Target system is <tt/apple2enh/ <item><tt/__ATARI2600__/ - Target system is <tt/atari2600/ <item><tt/__ATARI5200__/ - Target system is <tt/atari5200/ +<item><tt/__ATARI7800__/ - Target system is <tt/atari7800/ <item><tt/__ATARI__/ - Target system is <tt/atari/ or <tt/atarixl/ <item><tt/__ATARIXL__/ - Target system is <tt/atarixl/ <item><tt/__ATMOS__/ - Target system is <tt/atmos/ diff --git a/doc/index.sgml b/doc/index.sgml index 3bb085bf6..bb3ad5357 100644 --- a/doc/index.sgml +++ b/doc/index.sgml @@ -124,6 +124,9 @@ <tag><htmlurl url="atari5200.html" name="atari5200.html"></tag> Topics specific to the Atari 5200 Game Console. + <tag><htmlurl url="atari7800.html" name="atari7800.html"></tag> + Topics specific to the Atari 7800 Game Console. + <tag><htmlurl url="atmos.html" name="atmos.html"></tag> Topics specific to the Oric Atmos. diff --git a/doc/ld65.sgml b/doc/ld65.sgml index 87c2cae51..307caeaa4 100644 --- a/doc/ld65.sgml +++ b/doc/ld65.sgml @@ -166,6 +166,7 @@ Here is a description of all of the command-line options: <item>apple2 <item>apple2enh <item>atari2600 + <item>atari7800 <item>atari <item>atarixl <item>atmos diff --git a/include/_maria.h b/include/_maria.h new file mode 100644 index 000000000..461119fda --- /dev/null +++ b/include/_maria.h @@ -0,0 +1,63 @@ +/*****************************************************************************/ +/* */ +/* _maria.h */ +/* */ +/* Atari 7800, Maria chip register hardware structures */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + +/* + * MARIA registers + */ +struct __maria { + unsigned char bkgrnd; + unsigned char p0c1; + unsigned char p0c2; + unsigned char p0c3; + unsigned char wsync; + unsigned char p1c1; + unsigned char p1c2; + unsigned char p1c3; + unsigned char mstat; + unsigned char p2c1; + unsigned char p2c2; + unsigned char p2c3; + unsigned char dpph; + unsigned char p3c1; + unsigned char p3c2; + unsigned char p3c3; + unsigned char dppl; + unsigned char p4c1; + unsigned char p4c2; + unsigned char p4c3; + unsigned char chbase; + unsigned char p5c1; + unsigned char p5c2; + unsigned char p5c3; + unsigned char offset; + unsigned char p6c1; + unsigned char p6c2; + unsigned char p6c3; + unsigned char ctrl; + unsigned char p7c1; + unsigned char p7c2; + unsigned char p7c3; +}; diff --git a/include/atari7800.h b/include/atari7800.h new file mode 100644 index 000000000..4fdaacfcc --- /dev/null +++ b/include/atari7800.h @@ -0,0 +1,65 @@ +/*****************************************************************************/ +/* */ +/* Atari VCS 7800 TIA & RIOT registers addresses */ +/* */ +/* Karri Kaksonen (karri@sipo.fi), 2022 */ +/* */ +/* */ +/*****************************************************************************/ + + + +#ifndef _ATARI7800_H +#define _ATARI7800_H + +/* Check for errors */ +#if !defined(__ATARI7800__) +# error This module may only be used when compiling for the Atari 7800! +#endif + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* Color defines */ +#define COLOR_BLACK 0x00 +#define COLOR_GREY 0x01 +#define COLOR_LIGHTGREY 0x02 +#define COLOR_WHITE 0x03 + +/* TGI color defines (default palette) */ +#define TGI_COLOR_BLACK COLOR_BLACK +#define TGI_COLOR_GREY COLOR_GREY +#define TGI_COLOR_LIGHTGREY COLOR_LIGHTGREY +#define TGI_COLOR_WHITE COLOR_WHITE + +/* Masks for joy_read */ +#define JOY_RIGHT_MASK 0x80 +#define JOY_LEFT_MASK 0x40 +#define JOY_DOWN_MASK 0x20 +#define JOY_UP_MASK 0x10 +#define JOY_BTN_1_MASK 0x01 +#define JOY_BTN_2_MASK 0x02 + +#define JOY_BTN_A_MASK JOY_BTN_1_MASK +#define JOY_BTN_B_MASK JOY_BTN_2_MASK + +#define JOY_BTN_A(v) ((v) & JOY_BTN_A_MASK) +#define JOY_BTN_B(v) ((v) & JOY_BTN_B_MASK) + +/* No support for dynamically loadable drivers */ +#define DYN_DRV 0 + +#include <_tia.h> +#define TIA (*(struct __tia*)0x0000) + +#include <_riot.h> +#define RIOT (*(struct __riot*)0x0280) + +#include <_maria.h> +#define MARIA (*(struct __maria*)0x0020) + +/* End of atari7800.h */ +#endif diff --git a/include/target.h b/include/target.h index af401ec35..7663a39dd 100644 --- a/include/target.h +++ b/include/target.h @@ -43,6 +43,8 @@ # include <atari2600.h> #elif defined(__ATARI5200__) # include <atari5200.h> +#elif defined(__ATARI7800__) +# include <atari7800.h> #elif defined(__ATMOS__) # include <atmos.h> #elif defined(__CBM__) diff --git a/libsrc/Makefile b/libsrc/Makefile index 60946b59f..177314bdf 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -21,6 +21,7 @@ TARGETS = apple2 \ atarixl \ atari2600 \ atari5200 \ + atari7800 \ atmos \ creativision \ $(CBMS) \ diff --git a/libsrc/atari7800/crt0.s b/libsrc/atari7800/crt0.s new file mode 100644 index 000000000..3d53abfa8 --- /dev/null +++ b/libsrc/atari7800/crt0.s @@ -0,0 +1,71 @@ + .export _zonecounter + .export __STARTUP__ : absolute = 1 + .export _exit + .import __ROM_START__ + .import __RAM3_START__, __RAM3_SIZE__ + .import initlib, donelib + .import zerobss, copydata + .import push0, _main + .include "zeropage.inc" + +INPTCTRL = $01 +OFFSET = $38 +CTRL = $3c + + .segment "STARTUP" +start: + ; Startup sequence recommended by Atari. + ; See the 7800 standards document. + sei ; Initialize 6502 + cld + lda #$07 ; Lock machine in 7800 mode + sta INPTCTRL + lda #$7f ; DMA off + sta CTRL + ldx #0 ; OFFSET must always be 0 + stx OFFSET + stx INPTCTRL ; Make sure joysticks don't freeze + dex ; Stack pointer = $ff + txs + + ; Set up parameter stack + lda #<(__RAM3_START__ + __RAM3_SIZE__) + sta sp + lda #>(__RAM3_START__ + __RAM3_SIZE__) + sta sp+1 + + jsr copydata + jsr zerobss + jsr initlib + + ; Call main program (pass empty command line) + jsr push0 ; argc + jsr push0 ; argv + ldy #4 ; Argument size + jsr _main + +_exit: + jsr donelib + jmp start + +NMIHandler: + inc _zonecounter + rti + +IRQHandler: + rti + + .segment "DATA" +_zonecounter: + .byte 0 + + .segment "ENCRYPTION" + .res 126, $ff ; Reserved for encryption +Lfff8: .byte $ff ; Region verification (always $ff) +Lfff9: .byte $f7 ; Use last 4096 bytes only for encryption +;;;Lfff9: .byte <(((__ROM_START__/4096)<<4) | 7) + + .segment "VECTORS" + .word NMIHandler + .word start + .word IRQHandler diff --git a/libsrc/atari7800/ctype.s b/libsrc/atari7800/ctype.s new file mode 100644 index 000000000..1301965eb --- /dev/null +++ b/libsrc/atari7800/ctype.s @@ -0,0 +1,5 @@ +; Character specification table. +; +; uses the "common" definition + + .include "ctype_common.inc" diff --git a/libsrc/atari7800/exehdr.s b/libsrc/atari7800/exehdr.s new file mode 100644 index 000000000..618164cd4 --- /dev/null +++ b/libsrc/atari7800/exehdr.s @@ -0,0 +1,46 @@ +; +; Karri Kaksonen, 2022 +; +; This header contains data for emulators +; + .export __EXEHDR__: absolute = 1 + .import __CARTSIZE__ +; ------------------------------------------------------------------------ +; EXE header + .segment "EXEHDR" + .byte 3 ; version + .byte 'A','T','A','R','I','7','8','0','0',' ',' ',' ',' ',' ',' ',' ' + .byte 'G','a','m','e',' ','n','a','m','e',0,0,0,0,0,0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,>__CARTSIZE__,0 ; Set the cart size in the cfg file + ; bit 0 - pokey at 4000 + ; bit 1 - supergame bank switched + ; bit 2 - supergame ram at $4000 + ; bit 3 - rom at $4000 + ; bit 4 - bank 6 at $4000 + ; bit 5 - supergame banked ram + ; bit 6 - pokey at $450 + ; bit 7 - mirror ram at $4000 + ; bit 8 - activision banking + ; bit 9 - absolute banking + ; bit 10 - pokey at $440 + ; bit 11 - ym2151 at $461/462 + ; bit 12 - souper + ; bit 13-15 - Special + ; 0 = Normal cart + .byte 0,0 ; 0 = Normal cart + .byte 1 ; 1 = Joystick, 2 = lightgun + .byte 0 ; No joystick 2 + .byte 0 ; bit0 = 0:NTSC,1:PAL bit1 = 0:component,1:composite + .byte 0 ; Save data peripheral - 1 byte (version 2) + ; 0 = None / unknown (default) + ; 1 = High Score Cart (HSC) + ; 2 = SaveKey + + .byte 0 ; 63 Expansion module + ; 0 = No expansion module (default on all currently released games) + ; 1 = Expansion module required + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0,0,0,0,0 + .byte 'A','C','T','U','A','L',' ','C','A','R','T',' ','D','A','T','A',' ','S','T','A','R','T','S',' ','H','E','R','E' diff --git a/src/ca65/main.c b/src/ca65/main.c index 0eaf4ba6b..b1ef3a3db 100644 --- a/src/ca65/main.c +++ b/src/ca65/main.c @@ -212,6 +212,10 @@ static void SetSys (const char* Sys) NewSymbol ("__ATARI5200__", 1); break; + case TGT_ATARI7800: + NewSymbol ("__ATARI7800__", 1); + break; + case TGT_ATARI: NewSymbol ("__ATARI__", 1); break; diff --git a/src/cc65/main.c b/src/cc65/main.c index 74d4fd146..c08616efa 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -173,6 +173,10 @@ static void SetSys (const char* Sys) DefineNumericMacro ("__ATARI5200__", 1); break; + case TGT_ATARI7800: + DefineNumericMacro ("__ATARI7800__", 1); + break; + case TGT_ATARI: DefineNumericMacro ("__ATARI__", 1); break; diff --git a/src/common/target.c b/src/common/target.c index a35bf67a8..4a851034a 100644 --- a/src/common/target.c +++ b/src/common/target.c @@ -147,6 +147,7 @@ static const TargetEntry TargetMap[] = { { "atari", TGT_ATARI }, { "atari2600", TGT_ATARI2600 }, { "atari5200", TGT_ATARI5200 }, + { "atari7800", TGT_ATARI7800 }, { "atarixl", TGT_ATARIXL }, { "atmos", TGT_ATMOS }, { "bbc", TGT_BBC }, @@ -188,6 +189,7 @@ static const TargetProperties PropertyTable[TGT_COUNT] = { { "atari", CPU_6502, BINFMT_BINARY, CTAtari }, { "atari2600", CPU_6502, BINFMT_BINARY, CTNone }, { "atari5200", CPU_6502, BINFMT_BINARY, CTAtari }, + { "atari7800", CPU_6502, BINFMT_BINARY, CTNone }, { "atarixl", CPU_6502, BINFMT_BINARY, CTAtari }, { "vic20", CPU_6502, BINFMT_BINARY, CTPET }, { "c16", CPU_6502, BINFMT_BINARY, CTPET }, diff --git a/src/common/target.h b/src/common/target.h index 7f85713cf..7087048e2 100644 --- a/src/common/target.h +++ b/src/common/target.h @@ -57,6 +57,7 @@ typedef enum { TGT_ATARI, TGT_ATARI2600, TGT_ATARI5200, + TGT_ATARI7800, TGT_ATARIXL, TGT_VIC20, TGT_C16, diff --git a/targettest/Makefile b/targettest/Makefile index 806f6b445..0450bfd4e 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -673,6 +673,9 @@ EXELIST_atari2600 = \ EXELIST_atari5200 = \ minimal +EXELIST_atari7800 = \ + minimal + EXELIST_gamate = \ minimal @@ -728,6 +731,7 @@ TARGETS := \ atarixl \ atari2600 \ atari5200 \ + atari7800 \ atmos \ bbc \ c128 \