]> git.sur5r.net Git - cc65/commitdiff
Merge pull request #122 from groessler/a5200
authorOliver Schmidt <ol.sc@web.de>
Fri, 30 May 2014 20:52:51 +0000 (22:52 +0200)
committerOliver Schmidt <ol.sc@web.de>
Fri, 30 May 2014 20:52:51 +0000 (22:52 +0200)
new target: Atari 5200 console

45 files changed:
README.md
asminc/atari.inc
asminc/atari5200.inc [new file with mode: 0644]
asminc/atari_antic.inc [new file with mode: 0644]
asminc/atari_gtia.inc [new file with mode: 0644]
asminc/atari_pokey.inc [new file with mode: 0644]
cfg/atari5200.cfg [new file with mode: 0644]
doc/atari5200.sgml [new file with mode: 0644]
doc/ca65.sgml
doc/cc65.sgml
doc/index.sgml
include/atari5200.h [new file with mode: 0644]
include/time.h
libsrc/Makefile
libsrc/atari/chline.s
libsrc/atari/cvline.s
libsrc/atari5200/cartentry.s [new file with mode: 0644]
libsrc/atari5200/cartname.s [new file with mode: 0644]
libsrc/atari5200/cartyear.s [new file with mode: 0644]
libsrc/atari5200/cclear.s [new file with mode: 0644]
libsrc/atari5200/chline.s [new file with mode: 0644]
libsrc/atari5200/clock.s [new file with mode: 0644]
libsrc/atari5200/clrscr.s [new file with mode: 0644]
libsrc/atari5200/conioscreen.s [new file with mode: 0644]
libsrc/atari5200/cputc.s [new file with mode: 0644]
libsrc/atari5200/crt0.s [new file with mode: 0644]
libsrc/atari5200/ctype.s [new file with mode: 0644]
libsrc/atari5200/cvline.s [new file with mode: 0644]
libsrc/atari5200/get_tv.s [new file with mode: 0644]
libsrc/atari5200/gotox.s [new file with mode: 0644]
libsrc/atari5200/gotoxy.s [new file with mode: 0644]
libsrc/atari5200/gotoy.s [new file with mode: 0644]
libsrc/atari5200/irq.s [new file with mode: 0644]
libsrc/atari5200/joy/atr5200std.s [new file with mode: 0644]
libsrc/atari5200/joy_stat_stddrv.s [new file with mode: 0644]
libsrc/atari5200/libref.s [new file with mode: 0644]
libsrc/atari5200/mul20.s [new file with mode: 0644]
libsrc/atari5200/randomize.s [new file with mode: 0644]
libsrc/atari5200/setcursor.s [new file with mode: 0644]
libsrc/atari5200/sysuname.s [new file with mode: 0644]
libsrc/atari5200/y2k.inc [new file with mode: 0644]
src/ca65/main.c
src/cc65/main.c
src/common/target.c
src/common/target.h

index 39e4ef54c060db13ff0b7b469575a9430903619b..c36f14c448cb926fcbc52f2035b147356c0ed378 100644 (file)
--- a/README.md
+++ b/README.md
@@ -21,6 +21,7 @@ including
   - newer PET machines (not 2001).
 - the Apple ][+ and successors.
 - the Atari 8 bit machines.
+- the Atari 5200 console.
 - GEOS for the C64 and C128.
 - the Nintendo Entertainment System (NES).
 - the Supervision console.
index 7b647fd0a29c802cf17d545cd2fc16d9c41f59f1..3cce030467de324d298a17c025e3df16a184ec46 100644 (file)
@@ -762,7 +762,15 @@ DOS     = $0700
 
 CARTCS  = $BFFA         ;##rev2## 2-byte cartridge coldstart address
 CART    = $BFFC         ;##rev2## 1-byte cartridge present indicator
+                        ;0=Cart Exists
 CARTFG  = $BFFD         ;##rev2## 1-byte cartridge flags
+                        ;D7  0=Not a Diagnostic Cart
+                        ;    1=Is a Diagnostic cart and control is 
+                        ;      given to cart before any OS is init.
+                        ;D2  0=Init but Do not Start Cart
+                        ;    1=Init and Start Cart
+                        ;D0  0=Do not boot disk
+                        ;    1=Boot Disk
 CARTAD  = $BFFE         ;##rev2## 2-byte cartridge start vector
 
 ;-------------------------------------------------------------------------
@@ -770,83 +778,7 @@ CARTAD  = $BFFE         ;##rev2## 2-byte cartridge start vector
 ;-------------------------------------------------------------------------
 
 GTIA    = $D000         ;CTIA/GTIA area
-
-; Read/Write Addresses
-
-CONSOL  = $D01F         ;console switches and speaker control
-
-; Read Addresses
-
-M0PF    = $D000         ;missile 0 and playfield collision
-M1PF    = $D001         ;missile 1 and playfield collision
-M2PF    = $D002         ;missile 2 and playfield collision
-M3PF    = $D003         ;missile 3 and playfield collision
-
-P0PF    = $D004         ;player 0 and playfield collision
-P1PF    = $D005         ;player 1 and playfield collision
-P2PF    = $D006         ;player 2 and playfield collision
-P3PF    = $D007         ;player 3 and playfield collision
-
-M0PL    = $D008         ;missile 0 and player collision
-M1PL    = $D009         ;missile 1 and player collision
-M2PL    = $D00A         ;missile 2 and player collision
-M3PL    = $D00B         ;missile 3 and player collision
-
-P0PL    = $D00C         ;player 0 and player collision
-P1PL    = $D00D         ;player 1 and player collision
-P2PL    = $D00E         ;player 2 and player collision
-P3PL    = $D00F         ;player 3 and player collision
-
-TRIG0   = $D010         ;joystick trigger 0
-TRIG1   = $D011         ;joystick trigger 1
-
-TRIG2   = $D012         ;cartridge interlock
-TRIG3   = $D013         ;ACMI module interlock
-
-PAL     = $D014         ;##rev2## PAL/NTSC indicator
-
-; Write Addresses
-
-HPOSP0  = $D000         ;player 0 horizontal position
-HPOSP1  = $D001         ;player 1 horizontal position
-HPOSP2  = $D002         ;player 2 horizontal position
-HPOSP3  = $D003         ;player 3 horizontal position
-
-HPOSM0  = $D004         ;missile 0 horizontal position
-HPOSM1  = $D005         ;missile 1 horizontal position
-HPOSM2  = $D006         ;missile 2 horizontal position
-HPOSM3  = $D007         ;missile 3 horizontal position
-
-SIZEP0  = $D008         ;player 0 size
-SIZEP1  = $D009         ;player 1 size
-SIZEP2  = $D00A         ;player 2 size
-SIZEP3  = $D00B         ;player 3 size
-
-SIZEM   = $D00C         ;missile sizes
-
-GRAFP0  = $D00D         ;player 0 graphics
-GRAFP1  = $D00E         ;player 1 graphics
-GRAFP2  = $D00F         ;player 2 graphics
-GRAFP3  = $D010         ;player 3 graphics
-
-GRAFM   = $D011         ;missile graphics
-
-COLPM0  = $D012         ;player-missile 0 color/luminance
-COLPM1  = $D013         ;player-missile 1 color/luminance
-COLPM2  = $D014         ;player-missile 2 color/luminance
-COLPM3  = $D015         ;player-missile 3 color/luminance
-
-COLPF0  = $D016         ;playfield 0 color/luminance
-COLPF1  = $D017         ;playfield 1 color/luminance
-COLPF2  = $D018         ;playfield 2 color/luminance
-COLPF3  = $D019         ;playfield 3 color/luminance
-
-COLBK   = $D01A         ;background color/luminance
-
-PRIOR   = $D01B         ;priority select
-VDELAY  = $D01C         ;vertical delay
-GRACTL  = $D01D         ;graphic control
-HITCLR  = $D01E         ;collision clear
+.include "atari_gtia.inc"
 
 ;-------------------------------------------------------------------------
 ; PBI Address Equates
@@ -862,6 +794,20 @@ PDVI    = $D1FF         ;##rev2## parallel device IRQ status
 
 PDVS    = $D1FF         ;##rev2## parallel device select
 
+;-------------------------------------------------------------------------
+; POKEY Address Equates
+;-------------------------------------------------------------------------
+
+POKEY     = $D200         ;POKEY area
+.include  "atari_pokey.inc"
+
+;-------------------------------------------------------------------------
+; ANTIC Address Equates
+;-------------------------------------------------------------------------
+
+ANTIC     = $D400         ;ANTIC area
+.include  "atari_antic.inc"
+
 ; PBI RAM Address Equates
 
 PBIRAM  = $D600         ;##rev2## parallel bus interface RAM area
@@ -874,52 +820,6 @@ PDIRQV  = $D808         ;##rev2## parallel device IRQ vector
 PDID2   = $D80B         ;##rev2## parallel device ID 2
 PDVV    = $D80D         ;##rev2## parallel device vector table
 
-;-------------------------------------------------------------------------
-; POKEY Address Equates
-;-------------------------------------------------------------------------
-
-POKEY   = $D200         ;POKEY area
-
-; Read Addresses
-
-POT0    = $D200         ;potentiometer 0
-POT1    = $D201         ;potentiometer 1
-POT2    = $D202         ;potentiometer 2
-POT3    = $D203         ;potentiometer 3
-POT4    = $D204         ;potentiometer 4
-POT5    = $D205         ;potentiometer 5
-POT6    = $D206         ;potentiometer 6
-POT7    = $D207         ;potentiometer 7
-
-ALLPOT  = $D208         ;potentiometer port status
-KBCODE  = $D209         ;keyboard code
-RANDOM  = $D20A         ;random number generator
-SERIN   = $D20D         ;serial port input
-IRQST   = $D20E         ;IRQ interrupt status
-SKSTAT  = $D20F         ;serial port and keyboard status
-
-; Write Addresses
-
-AUDF1   = $D200         ;channel 1 audio frequency
-AUDC1   = $D201         ;channel 1 audio control
-
-AUDF2   = $D202         ;channel 2 audio frequency
-AUDC2   = $D203         ;channel 2 audio control
-
-AUDF3   = $D204         ;channel 3 audio frequency
-AUDC3   = $D205         ;channel 3 audio control
-
-AUDF4   = $D206         ;channel 4 audio frequency
-AUDC4   = $D207         ;channel 4 audio control
-
-AUDCTL  = $D208         ;audio control
-STIMER  = $D209         ;start timers
-SKRES   = $D20A         ;reset SKSTAT status
-POTGO   = $D20B         ;start potentiometer scan sequence
-SEROUT  = $D20D         ;serial port output
-IRQEN   = $D20E         ;IRQ interrupt enable
-SKCTL   = $D20F         ;serial port and keyboard control
-
 ;-------------------------------------------------------------------------
 ; PIA Address Equates
 ;-------------------------------------------------------------------------
@@ -932,33 +832,6 @@ PORTB   = $D301         ;port B direction register or memory management
 PACTL   = $D302         ;port A control
 PBCTL   = $D303         ;port B control
 
-;-------------------------------------------------------------------------
-; ANTIC Address Equates
-;-------------------------------------------------------------------------
-
-ANTIC   = $D400         ;ANTIC area
-
-; Read Addresses
-
-VCOUNT  = $D40B         ;vertical line counter
-PENH    = $D40C         ;light pen horizontal position
-PENV    = $D40D         ;light pen vertical position
-NMIST   = $D40F         ;NMI interrupt status
-
-; Write Addresses
-
-DMACTL  = $D400         ;DMA control
-CHACTL  = $D401         ;character control
-DLISTL  = $D402         ;low display list address
-DLISTH  = $D403         ;high display list address
-HSCROL  = $D404         ;horizontal scroll
-VSCROL  = $D405         ;vertical scroll
-PMBASE  = $D407         ;player-missile base address
-CHBASE  = $D409         ;character base address
-WSYNC   = $D40A         ;wait for HBLANK synchronization
-NMIEN   = $D40E         ;NMI enable
-NMIRES  = $D40F         ;NMI interrupt reset
-
 ;-------------------------------------------------------------------------
 ; Floating Point Package Address Equates
 ;-------------------------------------------------------------------------
@@ -1131,74 +1004,6 @@ MYDOS        = 3
 XDOS         = 4
 NODOS        = 255
 
-;-------------------------------------------------------------------------
-; Antic opcodes
-;-------------------------------------------------------------------------
-
-; usage example:
-;
-; ScreenDL:
-; .byte DL_BLK8
-; .byte DL_BLK8
-; .byte DL_CHR40x8x1 + DL_LMS + DL_DLI
-; .word ScreenAlignment
-; .byte DL_BLK1 + DL_DLI
-; .byte DL_MAP320x1x1 + DL_LMS
-; .word Screen
-;
-; .repeat 99
-; .byte DL_MAP320x1x1
-; .endrepeat
-; .byte DL_MAP320x1x1 + DL_LMS
-; .word Screen + 40 * 100       ; 100 lines a 40 byte, 'Screen' has to be aligned correctly!
-; .repeat 92
-; .byte DL_MAP320x1x1
-; .endrepeat
-;
-; .byte DL_JVB
-
-; absolute instructions (non mode lines)
-
-DL_JMP  = 1
-DL_JVB  = 65
-
-DL_BLK1  = 0
-DL_BLK2  = 16
-DL_BLK3  = 32
-DL_BLK4  = 48
-DL_BLK5  = 64
-DL_BLK6  = 80
-DL_BLK7  = 96
-DL_BLK8  = 112
-
-; absolute instructions (mode lines)
-
-DL_CHR40x8x1  = 2               ; monochrome, 40 character & 8 scanlines per mode line (GR. 0)
-DL_CHR40x10x1 = 3               ; monochrome, 40 character & 10 scanlines per mode line
-DL_CHR40x8x4  = 4               ; colour, 40 character & 8 scanlines per mode line (GR. 12)
-DL_CHR40x16x4 = 5               ; colour, 40 character & 16 scanlines per mode line (GR. 13)
-DL_CHR20x8x2  = 6               ; colour (duochrome per character), 20 character & 8 scanlines per mode line (GR. 1)
-DL_CHR20x16x2 = 7               ; colour (duochrome per character), 20 character & 16 scanlines per mode line (GR. 2)
-
-DL_MAP40x8x4  = 8               ; colour, 40 pixel & 8 scanlines per mode line (GR. 3)
-DL_MAP80x4x2  = 9               ; 'duochrome', 80 pixel & 4 scanlines per mode line (GR.4) 
-DL_MAP80x4x4  = 10              ; colour, 80 pixel & 4 scanlines per mode line (GR.5) 
-DL_MAP160x2x2 = 11              ; 'duochrome', 160 pixel & 2 scanlines per mode line (GR.6) 
-DL_MAP160x1x2 = 12              ; 'duochrome', 160 pixel & 1 scanline per mode line (GR.14) 
-DL_MAP160x2x4 = 13              ; 4 colours, 160 pixel & 2 scanlines per mode line (GR.7) 
-DL_MAP160x1x4 = 14              ; 4 colours, 160 pixel & 1 scanline per mode line (GR.15) 
-DL_MAP320x1x1 = 15              ; monochrome, 320 pixel & 1 scanline per mode line (GR.8) 
-
-; modifiers on mode lines...
-
-DL_HSCROL = 16
-DL_VSCROL = 32
-DL_LMS    = 64
-
-; general modifier...
-
-DL_DLI    = 128
-
 ;-------------------------------------------------------------------------
 ; End of atari.inc
 ;-------------------------------------------------------------------------
diff --git a/asminc/atari5200.inc b/asminc/atari5200.inc
new file mode 100644 (file)
index 0000000..b67c9a8
--- /dev/null
@@ -0,0 +1,116 @@
+;-------------------------------------------------------------------------
+; Atari 5200 System Equates
+; by Christian Groessler <chris@groessler.org>
+; taken from EQUATES.INC from Atari Inc.
+;-------------------------------------------------------------------------
+
+;-------------------------------------------------------------------------
+; ATASCII CHARACTER DEFS
+;-------------------------------------------------------------------------
+ATEOL   = $9B           ;END-OF-LINE, used by CONIO
+
+
+;-------------------------------------------------------------------------
+; Zero Page
+;-------------------------------------------------------------------------
+
+POKMSK  =  $00   ;Mask for Pokey IRQ enable
+RTCLOK  =  $01   ;60 hz. clock
+JUMP    =  $01   
+CRITIC  =  $03   ;Critical section
+ATRACT  =  $04   ;Attract Mode 
+
+SDLSTL  =  $05   ;DLISTL Shadow
+SDLSTH  =  $06   ;DLISTH  "
+SDMCTL  =  $07   ;DMACTL  "
+
+PCOLR0  =  $08   ;COLPM0 Shadow
+PCOLR1  =  $09   ;COLPM1  "
+PCOLR2  =  $0A   ;COLPM2  "
+PCOLR3  =  $0B   ;COLPM3  "
+
+COLOR0  =  $0C   ;COLPF0 Shadow
+COLOR1  =  $0D   ;COLPF1  "
+COLOR2  =  $0E   ;COLPF2  "
+COLOR3  =  $0F   ;COLPF3  "
+COLOR4  =  $10   ;COLBK   "
+
+PADDL0  =  $11   ;POT0 Shadow
+PADDL1  =  $12   ;POT1  "
+PADDL2  =  $13   ;POT2  "
+PADDL3  =  $14   ;POT3  "
+PADDL4  =  $15   ;POT4  "
+PADDL5  =  $16   ;POT5  "
+PADDL6  =  $17   ;POT6  "
+PADDL7  =  $18   ;POT7  "
+
+; cc65 runtime zero page variables
+
+ROWCRS_5200     =       $19
+COLCRS_5200     =       $1A
+SAVMSC          =       $1B             ; pointer to screen memory (conio)
+
+;-------------------------------------------------------------------------
+; Page #2
+;-------------------------------------------------------------------------
+
+;Interrupt Vectors
+                 
+VIMIRQ  =  $0200   ;Immediate IRQ    
+                      ;Preset $FC03 (SYSIRQ)
+VVBLKI  =  $0202   ;Vblank immediate
+                      ;Preset $FCB8 (SYSVBL)
+VVBLKD  =  $0204   ;Vblank deferred
+                      ;Preset $FCB2 (XITVBL)
+VDSLST  =  $0206   ;Display List 
+                      ;Preset $FEA1 (OSDLI)
+VKYBDI  =  $0208   ;Keyboard immediate
+                      ;Preset $FD02 (SYSKBD)
+VKYBDF  =  $020A   ;Deferred Keyboard
+                      ;Preset $FCB2 (XITVBL)
+VTRIGR  =  $020C   ;Soft Trigger   
+VBRKOP  =  $020E   ;BRK Opcode
+VSERIN  =  $0210   ;Serial in Ready
+VSEROR  =  $0212   ;Serial Out Ready
+VSEROC  =  $0214   ;Serial Output complete
+VTIMR1  =  $0216   ;Pokey Timer 1
+VTIMR2  =  $0218   ;Pokey Timer 2
+VTIMR4  =  $021A   ;Pokey Timer 4
+
+
+
+;-------------------------------------------------------------------------
+; CTIA/GTIA Address Equates
+;-------------------------------------------------------------------------
+
+GTIA    = $C000         ;CTIA/GTIA area
+.include "atari_gtia.inc"
+
+;-------------------------------------------------------------------------
+; ANTIC Address Equates
+;-------------------------------------------------------------------------
+
+ANTIC     = $D400         ;ANTIC area
+.include  "atari_antic.inc"
+
+;-------------------------------------------------------------------------
+; POKEY Address Equates
+;-------------------------------------------------------------------------
+
+POKEY     = $E800         ;POKEY area
+.include  "atari_pokey.inc"
+
+
+;-------------------------------------------------------------------------
+; Cartridge Parameters
+;-------------------------------------------------------------------------
+
+CARTNM  =  $BFE8   ;Cartridge Name Area
+COPYD   =  $BFFC   ;Copyright Decade in Cart
+COPYR   =  $BFFD   ;Copyright Year in Cart
+                      ; $FF=Diagnostic Cart
+GOCART  =  $BFFE   ;Cartridge Start Vector
+
+
+CHRORG  =  $F800   ;Character Generator Base
diff --git a/asminc/atari_antic.inc b/asminc/atari_antic.inc
new file mode 100644 (file)
index 0000000..1eb4c87
--- /dev/null
@@ -0,0 +1,93 @@
+;-------------------------------------------------------------------------
+; ANTIC Address Equates
+;-------------------------------------------------------------------------
+
+; Read Addresses
+
+VCOUNT  = ANTIC + $0B         ;vertical line counter
+PENH    = ANTIC + $0C         ;light pen horizontal position
+PENV    = ANTIC + $0D         ;light pen vertical position
+NMIST   = ANTIC + $0F         ;NMI interrupt status
+
+; Write Addresses
+
+DMACTL  = ANTIC + $00         ;DMA control
+CHACTL  = ANTIC + $01         ;character control
+DLISTL  = ANTIC + $02         ;low display list address
+DLISTH  = ANTIC + $03         ;high display list address
+HSCROL  = ANTIC + $04         ;horizontal scroll
+VSCROL  = ANTIC + $05         ;vertical scroll
+PMBASE  = ANTIC + $07         ;player-missile base address
+CHBASE  = ANTIC + $09         ;character base address
+WSYNC   = ANTIC + $0A         ;wait for HBLANK synchronization
+NMIEN   = ANTIC + $0E         ;NMI enable
+NMIRES  = ANTIC + $0F         ;NMI interrupt reset
+
+
+;-------------------------------------------------------------------------
+; Antic opcodes
+;-------------------------------------------------------------------------
+
+; usage example:
+;
+; ScreenDL:
+; .byte DL_BLK8
+; .byte DL_BLK8
+; .byte DL_CHR40x8x1 + DL_LMS + DL_DLI
+; .word ScreenAlignment
+; .byte DL_BLK1 + DL_DLI
+; .byte DL_MAP320x1x1 + DL_LMS
+; .word Screen
+;
+; .repeat 99
+; .byte DL_MAP320x1x1
+; .endrepeat
+; .byte DL_MAP320x1x1 + DL_LMS
+; .word Screen + 40 * 100       ; 100 lines a 40 byte, 'Screen' has to be aligned correctly!
+; .repeat 92
+; .byte DL_MAP320x1x1
+; .endrepeat
+;
+; .byte DL_JVB
+
+; absolute instructions (non mode lines)
+
+DL_JMP  = 1
+DL_JVB  = 65
+
+DL_BLK1  = 0
+DL_BLK2  = 16
+DL_BLK3  = 32
+DL_BLK4  = 48
+DL_BLK5  = 64
+DL_BLK6  = 80
+DL_BLK7  = 96
+DL_BLK8  = 112
+
+; absolute instructions (mode lines)
+
+DL_CHR40x8x1  = 2               ; monochrome, 40 character & 8 scanlines per mode line (GR. 0)
+DL_CHR40x10x1 = 3               ; monochrome, 40 character & 10 scanlines per mode line
+DL_CHR40x8x4  = 4               ; colour, 40 character & 8 scanlines per mode line (GR. 12)
+DL_CHR40x16x4 = 5               ; colour, 40 character & 16 scanlines per mode line (GR. 13)
+DL_CHR20x8x2  = 6               ; colour (duochrome per character), 20 character & 8 scanlines per mode line (GR. 1)
+DL_CHR20x16x2 = 7               ; colour (duochrome per character), 20 character & 16 scanlines per mode line (GR. 2)
+
+DL_MAP40x8x4  = 8               ; colour, 40 pixel & 8 scanlines per mode line (GR. 3)
+DL_MAP80x4x2  = 9               ; 'duochrome', 80 pixel & 4 scanlines per mode line (GR.4) 
+DL_MAP80x4x4  = 10              ; colour, 80 pixel & 4 scanlines per mode line (GR.5) 
+DL_MAP160x2x2 = 11              ; 'duochrome', 160 pixel & 2 scanlines per mode line (GR.6) 
+DL_MAP160x1x2 = 12              ; 'duochrome', 160 pixel & 1 scanline per mode line (GR.14) 
+DL_MAP160x2x4 = 13              ; 4 colours, 160 pixel & 2 scanlines per mode line (GR.7) 
+DL_MAP160x1x4 = 14              ; 4 colours, 160 pixel & 1 scanline per mode line (GR.15) 
+DL_MAP320x1x1 = 15              ; monochrome, 320 pixel & 1 scanline per mode line (GR.8) 
+
+; modifiers on mode lines...
+
+DL_HSCROL = 16
+DL_VSCROL = 32
+DL_LMS    = 64
+
+; general modifier...
+
+DL_DLI    = 128
diff --git a/asminc/atari_gtia.inc b/asminc/atari_gtia.inc
new file mode 100644 (file)
index 0000000..f505832
--- /dev/null
@@ -0,0 +1,81 @@
+;-------------------------------------------------------------------------
+; CTIA/GTIA Address Equates
+;-------------------------------------------------------------------------
+
+; Read/Write Addresses
+
+CONSOL  = GTIA + $1F         ;console switches and speaker control
+
+; Read Addresses
+
+M0PF    = GTIA + $00         ;missile 0 and playfield collision
+M1PF    = GTIA + $01         ;missile 1 and playfield collision
+M2PF    = GTIA + $02         ;missile 2 and playfield collision
+M3PF    = GTIA + $03         ;missile 3 and playfield collision
+
+P0PF    = GTIA + $04         ;player 0 and playfield collision
+P1PF    = GTIA + $05         ;player 1 and playfield collision
+P2PF    = GTIA + $06         ;player 2 and playfield collision
+P3PF    = GTIA + $07         ;player 3 and playfield collision
+
+M0PL    = GTIA + $08         ;missile 0 and player collision
+M1PL    = GTIA + $09         ;missile 1 and player collision
+M2PL    = GTIA + $0A         ;missile 2 and player collision
+M3PL    = GTIA + $0B         ;missile 3 and player collision
+
+P0PL    = GTIA + $0C         ;player 0 and player collision
+P1PL    = GTIA + $0D         ;player 1 and player collision
+P2PL    = GTIA + $0E         ;player 2 and player collision
+P3PL    = GTIA + $0F         ;player 3 and player collision
+
+TRIG0   = GTIA + $10         ;joystick trigger 0
+TRIG1   = GTIA + $11         ;joystick trigger 1
+
+TRIG2   = GTIA + $12         ;cartridge interlock
+TRIG3   = GTIA + $13         ;ACMI module interlock
+
+PAL     = GTIA + $14         ;##rev2## PAL/NTSC indicator
+
+; Write Addresses
+
+HPOSP0  = GTIA + $00         ;player 0 horizontal position
+HPOSP1  = GTIA + $01         ;player 1 horizontal position
+HPOSP2  = GTIA + $02         ;player 2 horizontal position
+HPOSP3  = GTIA + $03         ;player 3 horizontal position
+
+HPOSM0  = GTIA + $04         ;missile 0 horizontal position
+HPOSM1  = GTIA + $05         ;missile 1 horizontal position
+HPOSM2  = GTIA + $06         ;missile 2 horizontal position
+HPOSM3  = GTIA + $07         ;missile 3 horizontal position
+
+SIZEP0  = GTIA + $08         ;player 0 size
+SIZEP1  = GTIA + $09         ;player 1 size
+SIZEP2  = GTIA + $0A         ;player 2 size
+SIZEP3  = GTIA + $0B         ;player 3 size
+
+SIZEM   = GTIA + $0C         ;missile sizes
+
+GRAFP0  = GTIA + $0D         ;player 0 graphics
+GRAFP1  = GTIA + $0E         ;player 1 graphics
+GRAFP2  = GTIA + $0F         ;player 2 graphics
+GRAFP3  = GTIA + $10         ;player 3 graphics
+
+GRAFM   = GTIA + $11         ;missile graphics
+
+COLPM0  = GTIA + $12         ;player-missile 0 color/luminance
+COLPM1  = GTIA + $13         ;player-missile 1 color/luminance
+COLPM2  = GTIA + $14         ;player-missile 2 color/luminance
+COLPM3  = GTIA + $15         ;player-missile 3 color/luminance
+
+COLPF0  = GTIA + $16         ;playfield 0 color/luminance
+COLPF1  = GTIA + $17         ;playfield 1 color/luminance
+COLPF2  = GTIA + $18         ;playfield 2 color/luminance
+COLPF3  = GTIA + $19         ;playfield 3 color/luminance
+
+COLBK   = GTIA + $1A         ;background color/luminance
+
+PRIOR   = GTIA + $1B         ;priority select
+VDELAY  = GTIA + $1C         ;vertical delay
+GRACTL  = GTIA + $1D         ;graphic control
+HITCLR  = GTIA + $1E         ;collision clear
+
diff --git a/asminc/atari_pokey.inc b/asminc/atari_pokey.inc
new file mode 100644 (file)
index 0000000..99d192f
--- /dev/null
@@ -0,0 +1,44 @@
+;-------------------------------------------------------------------------
+; POKEY Address Equates
+;-------------------------------------------------------------------------
+
+; Read Addresses
+
+POT0    = POKEY + $00         ;potentiometer 0
+POT1    = POKEY + $01         ;potentiometer 1
+POT2    = POKEY + $02         ;potentiometer 2
+POT3    = POKEY + $03         ;potentiometer 3
+POT4    = POKEY + $04         ;potentiometer 4
+POT5    = POKEY + $05         ;potentiometer 5
+POT6    = POKEY + $06         ;potentiometer 6
+POT7    = POKEY + $07         ;potentiometer 7
+
+ALLPOT  = POKEY + $08         ;potentiometer port status
+KBCODE  = POKEY + $09         ;keyboard code
+RANDOM  = POKEY + $0A         ;random number generator
+SERIN   = POKEY + $0D         ;serial port input
+IRQST   = POKEY + $0E         ;IRQ interrupt status
+SKSTAT  = POKEY + $0F         ;serial port and keyboard status
+
+; Write Addresses
+
+AUDF1   = POKEY + $00         ;channel 1 audio frequency
+AUDC1   = POKEY + $01         ;channel 1 audio control
+
+AUDF2   = POKEY + $02         ;channel 2 audio frequency
+AUDC2   = POKEY + $03         ;channel 2 audio control
+
+AUDF3   = POKEY + $04         ;channel 3 audio frequency
+AUDC3   = POKEY + $05         ;channel 3 audio control
+
+AUDF4   = POKEY + $06         ;channel 4 audio frequency
+AUDC4   = POKEY + $07         ;channel 4 audio control
+
+AUDCTL  = POKEY + $08         ;audio control
+STIMER  = POKEY + $09         ;start timers
+SKRES   = POKEY + $0A         ;reset SKSTAT status
+POTGO   = POKEY + $0B         ;start potentiometer scan sequence
+SEROUT  = POKEY + $0D         ;serial port output
+IRQEN   = POKEY + $0E         ;IRQ interrupt enable
+SKCTL   = POKEY + $0F         ;serial port and keyboard control
+
diff --git a/cfg/atari5200.cfg b/cfg/atari5200.cfg
new file mode 100644 (file)
index 0000000..4a90303
--- /dev/null
@@ -0,0 +1,43 @@
+SYMBOLS {
+    __CARTSIZE__:        type = weak,   value = $4000;   # possible values: $4000 and $8000
+    __CART_ENTRY__:      type = import;
+    __STACKSIZE__:       type = weak,   value = $0400;   # 4 pages stack
+    __RESERVED_MEMORY__: type = export, value = $01E0;   # space for 20x24 screen buffer (default display list is in ROM)
+}
+MEMORY {
+    ZP:        file = "", start = $001D,                size = $00E3,                                               define = yes;
+    RAM:       file = "", start = $021C,                size = $4000 - __STACKSIZE__ - __RESERVED_MEMORY__ - $021C, define = yes;
+    ROM:       file = %O, start = $C000 - __CARTSIZE__, size = __CARTSIZE__ - $18,                                  define = yes, fill = yes, fillval = $FF;
+    CARTNAME:  file = %O, start = $BFE8,                size = $0014                                                              fill = yes, fillval = $40;
+    CARTYEAR:  file = %O, start = $BFFC,                size = $0002                                                              fill = yes, fillval = $59;
+    CARTENTRY: file = %O, start = $BFFE,                size = $0002;
+}
+SEGMENTS {
+    STARTUP:   load = ROM,            type = ro,  define = yes, optional = yes;
+    LOWCODE:   load = ROM,            type = ro,  define = yes, optional = yes;
+    INIT:      load = ROM,            type = ro,                optional = yes;
+    CODE:      load = ROM,            type = ro,  define = yes;
+    RODATA:    load = ROM,            type = ro,                optional = yes;
+    DATA:      load = ROM, run = RAM, type = rw,  define = yes, optional = yes;
+    BSS:       load = RAM,            type = bss, define = yes, optional = yes;
+    CARTNAME:  load = CARTNAME,       type = ro,  define = yes;
+    CARTYEAR:  load = CARTYEAR,       type = ro,  define = yes;
+    CARTENTRY: load = CARTENTRY,      type = ro,  define = yes;
+    ZEROPAGE:  load = ZP,             type = zp,                optional = yes;
+    EXTZP:     load = ZP,             type = zp,                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/doc/atari5200.sgml b/doc/atari5200.sgml
new file mode 100644 (file)
index 0000000..a19641f
--- /dev/null
@@ -0,0 +1,199 @@
+<!doctype linuxdoc system>
+
+<article>
+
+<title>Atari 5200 specific information for cc65
+<author>
+<url url="mailto:chris@groessler.org" name="Christian Groessler"><newline>
+<date>2014-05-27
+
+<abstract>
+An overview over the Atari 5200 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 5200 runtime system as it comes
+with the cc65 C compiler. It describes the memory layout, Atari 5200 specific header
+files, available drivers, and any pitfalls specific to that platform.
+
+Please note that Atari 5200 specific functions are just mentioned here, they are
+described in detail in the separate <url url="funcref.html" name="function
+reference">. Even functions marked as "platform dependent" may be available on
+more than one platform. Please see the function reference for more
+information.
+
+
+<sect>Binary format<p>
+
+The standard binary output format generated by the linker for the Atari 5200 target
+is a cartridge image. It is of course
+possible to change this behaviour by using a modified startup file and linker
+config.
+
+<sect>Memory layout<p>
+
+cc65 generated programs with the default setup use the RAM space from &dollar;021C to
+&dollar;3FFF. If you want to reserve memory for the display list and screen buffer
+you should define the __RESERVED_MEMORY__ linker variable. The number
+of bytes specified by __RESERVED_MEMORY__ are lowering the top of
+memory, therefore the available
+RAM memory for the program is &dollar;021C to &dollar;3FFF-__RESERVED_MEMORY__.
+The default linker config file sets __RESERVED_MEMORY__ to &dollar;1E0
+to reserve space for an optional CONIO text screen.
+
+Special locations:
+
+<descrip>
+  <tag/Text screen/
+  The text screen is only enabled if any of the CONIO output functions
+  is used in the program. Its size is 20x24 characters (Antic mode 6,
+  BASIC mode 1). The text screen is located at &dollar;3E00. The
+  address of the screen memory is available at runtime in the variable
+  SAVMSC (&dollar;001B).<p>
+  If the program doesn't use any CONIO output functions it needs to setup its own
+  display list.
+
+  <tag/Stack/
+  The C runtime stack is located at &dollar;3FFF-__RESERVED_MEMORY__ and growing downwards.
+
+  <tag/Heap/
+  The C heap is located at the end of the program and grows towards the C
+  runtime stack.
+
+</descrip><p>
+
+
+
+<sect>Platform specific header files<p>
+
+Programs containing Atari 5200 specific code may use the <tt/atari5200.h/ header file.
+
+
+<sect1>Atari 5200 specific functions<p>
+
+<itemize>
+<item>TBD.
+</itemize>
+
+
+
+<sect1>Hardware access<p>
+
+The following pseudo variables declared in the <tt/atari5200.h/ header
+file do allow access to hardware located in the address space. Some
+variables are structures, accessing the struct fields will access the
+chip registers.
+
+<descrip>
+
+  <tag><tt/GTIA_READ/ and <tt/GTIA_WRITE/</tag>
+  The <tt/GTIA_READ/ structure allows read access to the GTIA. The
+  <tt/GTIA_WRITE/ structure allows write access to the GTIA.
+  See the <tt/_gtia.h/ header file located in the include directory
+  for the declaration of the structure.
+
+  <tag><tt/POKEY_READ/ and <tt/POKEY_WRITE/</tag>
+  The <tt/POKEY_READ/ structure allows read access to the POKEY. The
+  <tt/POKEY_WRITE/ structure allows write access to the POKEY.
+  See the <tt/_pokey.h/ header file located in the include directory
+  for the declaration of the structure.
+
+  <tag><tt/ANTIC/</tag>
+  The <tt/ANTIC/ structure allows read access to the ANTIC.
+  See the <tt/_antic.h/ header file located in the include directory
+  for the declaration of the structure.
+
+</descrip><p>
+
+
+<sect>Loadable drivers<p>
+
+All drivers must be statically linked because no disk I/O is available.
+The names in the parentheses denote the symbols to be used for static linking of the drivers.
+
+
+<sect1>Graphics drivers<p>
+
+No graphics drivers are currently available for the Atari 5200.
+
+
+<sect1>Extended memory drivers<p>
+
+No extended memory drivers are available for the Atari 5200.
+
+
+<sect1>Joystick drivers<p>
+
+<descrip>
+
+  <tag><tt/atr5200std.joy (atr5200std_joy)/</tag>
+  A joystick driver for the standard Atari 5200 joystick is
+  available. Depending on the version of the 5200 console, two or four joysticks can be attached.
+
+</descrip><p>
+
+
+<sect1>Mouse drivers<p>
+
+No mouse drivers are available for the Atari 5200.
+
+
+<sect1>RS232 device drivers<p>
+
+No serial drivers are available for the Atari 5200.
+
+
+
+<sect>Limitations<p>
+
+<sect1>Disk I/O<p>
+
+Disk I/O is not supported by the <tt/atari5200/ target. This means that
+you cannot use any of the following functions (and a few others):
+
+<itemize>
+<item>fclose
+<item>fopen
+<item>fread
+<item>fprintf
+<item>fputc
+<item>fscanf
+<item>fwrite
+<item>...
+</itemize>
+
+
+
+<sect>Other hints<p>
+
+
+
+<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>
index 543370fd14997f871c81375a6a404aa202abb8c9..b222b4aac5e5e692d6311c5d3bb871fdd4cf6019 100644 (file)
@@ -4396,6 +4396,7 @@ compiler, depending on the target system selected:
 <itemize>
 <item><tt/__APPLE2__/ - Target system is <tt/apple2/ or <tt/apple2enh/
 <item><tt/__APPLE2ENH__/ - Target system is <tt/apple2enh/
+<item><tt/__ATARI5200__/ - Target system is <tt/atari5200/
 <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/
index 275a731684899b15c9ae57391e7b5f9c856867c3..a6b4a07eebbb701c4b206f6d713faff1e8dbdd09 100644 (file)
@@ -709,6 +709,10 @@ The compiler defines several macros at startup:
 
   This macro is defined if the target is the enhanced Apple //e (-t apple2enh).
 
+  <tag><tt>__ATARI5200__</tt></tag>
+
+  This macro is defined if the target is the Atari 5200 game console.
+
   <tag><tt>__ATARI__</tt></tag>
 
   This macro is defined if the target is the Atari 400/800 (-t atari) or the Atari 800XL/130XE (-t atarixl).
index f9eed769d6cfe7ea2f13e8cc6f99046f05fe765e..c773448651f13bb627551950247a060a0e4cc86e 100644 (file)
   <tag><htmlurl url="atari.html" name="atari.html"></tag>
   Topics specific to the Atari 8-bit machines.
 
+  <tag><htmlurl url="atari5200.html" name="atari5200.html"></tag>
+  Topics specific to the Atari 5200 Game Console.
+
   <tag><htmlurl url="atmos.html" name="atmos.html"></tag>
   Topics specific to the Oric Atmos.
 
diff --git a/include/atari5200.h b/include/atari5200.h
new file mode 100644 (file)
index 0000000..7790952
--- /dev/null
@@ -0,0 +1,102 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                               atari5200.h                                 */
+/*                                                                           */
+/*                   Atari 5200 system specific definitions                  */
+/*                                                                           */
+/*                                                                           */
+/*                                                                           */
+/* (C) 2014      Christian Groessler <chris@groessler.org>                   */
+/*                                                                           */
+/*                                                                           */
+/* 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.                                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+
+
+#ifndef _ATARI5200_H
+#define _ATARI5200_H
+
+
+
+/* Check for errors */
+#if !defined(__ATARI5200__)
+#  error This module may only be used when compiling for the Atari 5200!
+#endif
+
+
+/* make GTIA color value */
+#define _gtia_mkcolor(hue,lum) (((hue) << 4) | ((lum) << 1))
+
+/* luminance values go from 0 (black) to 7 (white) */
+
+/* hue values */
+#define HUE_GREY        0
+#define HUE_GOLD        1
+#define HUE_GOLDORANGE  2
+#define HUE_REDORANGE   3
+#define HUE_ORANGE      4
+#define HUE_MAGENTA     5
+#define HUE_PURPLE      6
+#define HUE_BLUE        7
+#define HUE_BLUE2       8
+#define HUE_CYAN        9
+#define HUE_BLUEGREEN   10
+#define HUE_BLUEGREEN2  11
+#define HUE_GREEN       12
+#define HUE_YELLOWGREEN 13
+#define HUE_YELLOW      14
+#define HUE_YELLOWRED   15
+
+/* Color defines, similar to c64 colors (untested) */
+#define COLOR_BLACK             _gtia_mkcolor(HUE_GREY,0)
+#define COLOR_WHITE             _gtia_mkcolor(HUE_GREY,7)
+#define COLOR_RED               _gtia_mkcolor(HUE_REDORANGE,1)
+#define COLOR_CYAN              _gtia_mkcolor(HUE_CYAN,3)
+#define COLOR_VIOLET            _gtia_mkcolor(HUE_PURPLE,4)
+#define COLOR_GREEN             _gtia_mkcolor(HUE_GREEN,2)
+#define COLOR_BLUE              _gtia_mkcolor(HUE_BLUE,2)
+#define COLOR_YELLOW            _gtia_mkcolor(HUE_YELLOW,7)
+#define COLOR_ORANGE            _gtia_mkcolor(HUE_ORANGE,5)
+#define COLOR_BROWN             _gtia_mkcolor(HUE_YELLOW,2)
+#define COLOR_LIGHTRED          _gtia_mkcolor(HUE_REDORANGE,6)
+#define COLOR_GRAY1             _gtia_mkcolor(HUE_GREY,2)
+#define COLOR_GRAY2             _gtia_mkcolor(HUE_GREY,3)
+#define COLOR_LIGHTGREEN        _gtia_mkcolor(HUE_GREEN,6)
+#define COLOR_LIGHTBLUE         _gtia_mkcolor(HUE_BLUE,6)
+#define COLOR_GRAY3             _gtia_mkcolor(HUE_GREY,5)
+
+/* get_tv return values */
+#define AT_NTSC     0
+#define AT_PAL      1
+
+/* Define hardware */
+#include <_gtia.h>
+#define GTIA_READ  (*(struct __gtia_read*)0xC000)
+#define GTIA_WRITE (*(struct __gtia_write*)0xC000)
+
+#include <_pokey.h>
+#define POKEY_READ  (*(struct __pokey_read*)0xE800)
+#define POKEY_WRITE (*(struct __pokey_write*)0xE800)
+
+#include <_antic.h>
+#define ANTIC (*(struct __antic*)0xD400)
+
+/* End of atari5200.h */
+#endif /* #ifndef _ATARI5200_H */
index 507d7e29a34828f37ef18926980a602efe593076..3566cb7b5f2a62db5dc31761663479db0a0a9907 100644 (file)
@@ -81,6 +81,9 @@ extern struct _timezone {
 unsigned _clocks_per_sec (void);
 #  define CLK_TCK               _clocks_per_sec()
 #  define CLOCKS_PER_SEC        _clocks_per_sec()
+#elif defined(__ATARI5200__)
+#  define CLK_TCK               60      /* POSIX */
+#  define CLOCKS_PER_SEC        60      /* ANSI */
 #elif defined(__ATMOS__)
 #  define CLK_TCK               100     /* POSIX */
 #  define CLOCKS_PER_SEC        100     /* ANSI */
index f7afd498f25ecdc137760d39bc32db748d919f1a..75e5c36817d5be5d36c9821dfb6b3d4b2637b0f1 100644 (file)
@@ -18,6 +18,7 @@ TARGETS = apple2    \
           apple2enh \
           atari     \
           atarixl   \
+          atari5200 \
           atmos     \
           $(CBMS)   \
           $(GEOS)   \
index 46eb0f35d94e90d7ac12d13a9f0a595fa2b5fd6f..b6ebba936aa170827902d898aa7784e8e6f95e1c 100644 (file)
@@ -9,6 +9,12 @@
         .import         popa, _gotoxy, cputdirect, setcursor
         .importzp       tmp1
 
+.ifndef __ATARI5200__
+CHRCODE =       $12+64
+.else
+CHRCODE =       14
+.endif
+
 _chlinexy:
         pha                     ; Save the length
         jsr     popa            ; Get y
@@ -19,12 +25,8 @@ _chline:
         cmp     #0              ; Is the length zero?
         beq     L9              ; Jump if done
         sta     tmp1
-L1:     lda     #$12+64         ; Horizontal line, screen code
+L1:     lda     #CHRCODE        ; Horizontal line, screen code
         jsr     cputdirect      ; Direct output
         dec     tmp1
         bne     L1
 L9:     jmp     setcursor
-
-
-
-
index 608da23deafb68adbdd8cbe481b86cd1b2e838c3..5b1c3fd094cf05b79a7fa6283448713575d869a6 100644 (file)
         .import         popa, _gotoxy, putchar, setcursor
         .importzp       tmp1
 
+.ifndef __ATARI5200__
+CHRCODE =       $7C             ; Vertical bar
+.else
+CHRCODE =       1               ; exclamation mark
+.endif
+
 _cvlinexy:
         pha                     ; Save the length
         jsr     popa            ; Get y
@@ -22,7 +28,7 @@ _cvline:
         sta     tmp1
 L1:     lda     COLCRS
         pha
-        lda     #$7C            ; Vertical bar
+        lda     #CHRCODE        ; Vertical bar
         jsr     putchar         ; Write, no cursor advance
         pla
         sta     COLCRS
@@ -30,6 +36,3 @@ L1:     lda     COLCRS
         dec     tmp1
         bne     L1
 L9:     jmp     setcursor
-
-
-
diff --git a/libsrc/atari5200/cartentry.s b/libsrc/atari5200/cartentry.s
new file mode 100644 (file)
index 0000000..431843a
--- /dev/null
@@ -0,0 +1,13 @@
+; Cartridge entry point
+;
+; Christian Groessler, 01-Mar-2014
+
+.export         __CART_ENTRY__: absolute = 1
+.import         __CARTSIZE__, start
+.forceimport    __CART_YEAR__, __CART_NAME__
+
+.segment        "CARTENTRY"
+
+                .word   start       ; entry point
+
+.assert         (__CARTSIZE__ = $4000 || __CARTSIZE__ = $8000), error, "Cartridge size must either be $4000 or $8000"
diff --git a/libsrc/atari5200/cartname.s b/libsrc/atari5200/cartname.s
new file mode 100644 (file)
index 0000000..c6a7018
--- /dev/null
@@ -0,0 +1,13 @@
+; default cartridge name
+;
+; Christian Groessler, 01-Mar-2014
+
+.include        "atari.mac"
+
+.export         __CART_NAME__: absolute = 1
+
+.segment        "CARTNAME"
+
+                scrcode "   cc"
+                .byte   '6' + 32, '5' + 32      ; use playfield 1
+                scrcode " compiled"
diff --git a/libsrc/atari5200/cartyear.s b/libsrc/atari5200/cartyear.s
new file mode 100644 (file)
index 0000000..4efb24f
--- /dev/null
@@ -0,0 +1,9 @@
+; Cartridge copyright year
+;
+; Christian Groessler, 01-Mar-2014
+
+.export         __CART_YEAR__: absolute = 1
+
+.segment        "CARTYEAR"
+
+                .byte   '9' + 32,'8' + 32       ; "98", but using playfield 1
diff --git a/libsrc/atari5200/cclear.s b/libsrc/atari5200/cclear.s
new file mode 100644 (file)
index 0000000..4bdc8dd
--- /dev/null
@@ -0,0 +1 @@
+.include "../atari/cclear.s"
diff --git a/libsrc/atari5200/chline.s b/libsrc/atari5200/chline.s
new file mode 100644 (file)
index 0000000..d5872f1
--- /dev/null
@@ -0,0 +1 @@
+.include "../atari/chline.s"
diff --git a/libsrc/atari5200/clock.s b/libsrc/atari5200/clock.s
new file mode 100644 (file)
index 0000000..f2ef85b
--- /dev/null
@@ -0,0 +1,26 @@
+;
+; from Atari computer version by Christian Groessler, 2014
+;
+; clock_t clock (void);
+; unsigned _clocks_per_sec (void);
+;
+
+        .export         _clock
+        .importzp       sreg
+
+        .include        "atari5200.inc"
+
+
+.proc   _clock
+
+        ldx     #5              ; Synchronize with Antic, so the interrupt won't change RTCLOK
+        stx     WSYNC           ; while we're reading it. The synchronization is done same as
+@L1:    dex                     ; in SETVBLV function in Atari OS.
+        bne     @L1
+        stx     sreg+1          ; Byte 3 is always zero
+        stx     sreg            ; Byte 2 is always zero, too
+        lda     RTCLOK+1
+        ldx     RTCLOK
+        rts
+
+.endproc
diff --git a/libsrc/atari5200/clrscr.s b/libsrc/atari5200/clrscr.s
new file mode 100644 (file)
index 0000000..041f34a
--- /dev/null
@@ -0,0 +1,34 @@
+;
+; Christian Groessler, May-2014
+;
+; void clrscr (void);
+;
+
+        .export         _clrscr
+        .include        "atari5200.inc"
+        .importzp       ptr1
+
+SCRSIZE =       480             ; 20x24: size of default conio atari5200 screen
+
+_clrscr:lda     SAVMSC          ; screen memory
+        sta     ptr1
+        lda     SAVMSC+1
+        clc
+        adc     #>(SCRSIZE-1)
+        sta     ptr1+1
+        lda     #0              ; screen code of space char
+        ldy     #<(SCRSIZE-1)
+        ldx     #>(SCRSIZE-1)
+_clr1:  sta     (ptr1),y
+        dey
+        bne     _clr1
+        sta     (ptr1),y
+        dex
+        bmi     done
+        dec     ptr1+1
+        dey
+        jmp     _clr1
+
+done:   sta     COLCRS_5200
+        sta     ROWCRS_5200
+        rts
diff --git a/libsrc/atari5200/conioscreen.s b/libsrc/atari5200/conioscreen.s
new file mode 100644 (file)
index 0000000..412dd58
--- /dev/null
@@ -0,0 +1,83 @@
+; setup default CONIO screen (20x24, Antic mode 6, BASIC mode 1)
+;
+; 28-May-2014, Christian Groessler <chris@groessler.org>
+
+                .include "atari5200.inc"
+
+SCREEN_BUF_SIZE =       20 * 24
+SCREEN_BUF      =       $4000 - SCREEN_BUF_SIZE
+
+                .code
+                .export screen_setup_20x24
+
+screen_setup_20x24:
+
+                ; initialize SAVMSC
+                lda     #<SCREEN_BUF
+                sta     SAVMSC
+                lda     #>SCREEN_BUF
+                sta     SAVMSC+1
+
+                ; initialize cursor position
+                lda     #0
+                sta     COLCRS_5200
+                sta     ROWCRS_5200
+
+                ; clear screen buffer
+                ldy     #<(SCREEN_BUF_SIZE-1)
+                ldx     #>(SCREEN_BUF_SIZE-1)
+clrscr:         sta     (SAVMSC),y
+                dey
+                cpy     #$FF
+                bne     clrscr
+                dex
+                cpx     #$FF
+                bne     clrscr
+
+                ; set default colors
+
+                lda     #40
+                sta     COLOR0
+                lda     #202
+                sta     COLOR1
+                lda     #148
+                sta     COLOR2
+                lda     #70
+                sta     COLOR3
+                lda     #0
+                sta     COLOR4
+
+                ; set display list
+
+                lda     #<dlist
+                sta     SDLSTL
+                lda     #>dlist
+                sta     SDLSTH
+
+                rts
+
+
+                .segment "RODATA"
+
+; display list for 20x24 text mode
+
+dlist:          .repeat 3
+                .byte   DL_BLK8
+                .endrepeat
+                
+                .byte   DL_CHR20x8x2 | DL_LMS
+                .word   SCREEN_BUF
+
+                .repeat 23
+                .byte   DL_CHR20x8x2
+                .endrepeat
+
+                .byte  DL_JVB
+                .word   dlist
+
+; end of display list
+
+.assert ((* >> 10) = (dlist >> 10)), error, "Display list crosses 1K boundary"
+
+
+                .end
diff --git a/libsrc/atari5200/cputc.s b/libsrc/atari5200/cputc.s
new file mode 100644 (file)
index 0000000..4bee0fb
--- /dev/null
@@ -0,0 +1,94 @@
+;
+; adapted from Atari version
+; Christian Groessler, 2014
+;
+; void cputcxy (unsigned char x, unsigned char y, char c);
+; void cputc (char c);
+;
+
+        .include        "atari5200.inc"
+
+        .export         _cputcxy, _cputc
+        .export         plot, cputdirect, putchar
+        .import         popa, _gotoxy, mul20
+        .importzp       ptr4
+        .import         setcursor
+
+        .constructor    screen_setup, 26
+        .import         screen_setup_20x24
+screen_setup    = screen_setup_20x24
+
+
+_cputcxy:
+        pha                     ; Save C
+        jsr     popa            ; Get Y
+        jsr     _gotoxy         ; Set cursor, drop x
+        pla                     ; Restore C
+
+_cputc:
+        cmp     #$0D            ; CR
+        bne     L4
+        lda     #0
+        sta     COLCRS_5200
+        beq     plot            ; return
+
+L4:     cmp     #$0A            ; LF
+        beq     newline
+        cmp     #ATEOL          ; Atari-EOL?
+        beq     newline
+
+        tay
+        rol     a
+        rol     a
+        rol     a
+        rol     a
+        and     #3
+        tax
+        tya
+        and     #$9f
+        ora     ataint,x
+
+cputdirect:                     ; accepts screen code
+        jsr     putchar
+
+; advance cursor
+        inc     COLCRS_5200
+        lda     COLCRS_5200
+        cmp     #20
+        bcc     plot
+        lda     #0
+        sta     COLCRS_5200
+
+        .export newline
+newline:
+        inc     ROWCRS_5200
+        lda     ROWCRS_5200
+        cmp     #24
+        bne     plot
+        lda     #0
+        sta     ROWCRS_5200
+plot:   jsr     setcursor
+        ldy     COLCRS_5200
+        ldx     ROWCRS_5200
+        rts
+
+putchar:
+        pha                     ; save char
+
+        lda     ROWCRS_5200
+        jsr     mul20           ; destroys tmp4
+        clc
+        adc     SAVMSC          ; add start of screen memory
+        sta     ptr4
+        txa
+        adc     SAVMSC+1
+        sta     ptr4+1
+        pla                     ; get char again
+
+        ldy     COLCRS_5200
+        sta     (ptr4),y
+        jmp     setcursor
+
+        .rodata
+ataint: .byte   64,0,32,96
+
diff --git a/libsrc/atari5200/crt0.s b/libsrc/atari5200/crt0.s
new file mode 100644 (file)
index 0000000..a62d697
--- /dev/null
@@ -0,0 +1,48 @@
+;
+; Startup code for cc65 (Atari5200 version)
+;
+; Christian Groessler (chris@groessler.org), 2014
+;
+
+        .export         _exit, start
+        .export         __STARTUP__ : absolute = 1      ; Mark as startup
+        .import         __RAM_START__, __RAM_SIZE__
+        .import         __RESERVED_MEMORY__
+
+        .import         initlib, donelib, callmain
+        .import         zerobss, copydata
+
+        .include        "zeropage.inc"
+        .include        "atari5200.inc"
+
+start:
+
+; Clear the BSS data
+
+        jsr     zerobss
+
+; initialize data
+        jsr     copydata
+
+; setup the stack
+
+        lda     #<(__RAM_START__ + __RAM_SIZE__ - __RESERVED_MEMORY__)
+        sta     sp
+        lda     #>(__RAM_START__ + __RAM_SIZE__ - __RESERVED_MEMORY__)
+        sta     sp+1            ; Set argument stack ptr
+
+; Call module constructors
+
+        jsr     initlib
+
+; Push arguments and call main()
+
+        jsr     callmain
+
+; Call module destructors. This is also the _exit entry.
+
+_exit:  jsr     donelib         ; Run module destructors
+
+; A 5200 program isn't supposed to exit.
+
+halt:   jmp halt
diff --git a/libsrc/atari5200/ctype.s b/libsrc/atari5200/ctype.s
new file mode 100644 (file)
index 0000000..432f462
--- /dev/null
@@ -0,0 +1,5 @@
+; Character specification table.
+;
+; same as for "atari" target
+
+.include "../atari/ctype.s"
diff --git a/libsrc/atari5200/cvline.s b/libsrc/atari5200/cvline.s
new file mode 100644 (file)
index 0000000..d987bcb
--- /dev/null
@@ -0,0 +1 @@
+.include "../atari/cvline.s"
diff --git a/libsrc/atari5200/get_tv.s b/libsrc/atari5200/get_tv.s
new file mode 100644 (file)
index 0000000..99cac3c
--- /dev/null
@@ -0,0 +1,20 @@
+;
+; Christian Groessler, 2014
+;
+; unsigned char get_tv (void);
+; /* Return the video mode the machine is using */
+;
+
+        .include        "get_tv.inc"
+
+
+;--------------------------------------------------------------------------
+; _get_tv
+
+.proc   _get_tv
+
+        lda     #<TV::NTSC
+        ldx     #>TV::NTSC
+        rts
+
+.endproc
diff --git a/libsrc/atari5200/gotox.s b/libsrc/atari5200/gotox.s
new file mode 100644 (file)
index 0000000..99f7cfd
--- /dev/null
@@ -0,0 +1,13 @@
+;
+; Christian Groessler, 13-Mar-2014
+;
+; void gotox (unsigned char x);
+;
+
+        .include        "atari5200.inc"
+        .export         _gotox
+        .import         setcursor
+
+_gotox:
+        sta     COLCRS_5200     ; Set X
+        jmp     setcursor
diff --git a/libsrc/atari5200/gotoxy.s b/libsrc/atari5200/gotoxy.s
new file mode 100644 (file)
index 0000000..a4b7c61
--- /dev/null
@@ -0,0 +1,17 @@
+;
+; Christian Groessler, 13-Mar-2014
+;
+; void gotoxy (unsigned char x, unsigned char y);
+;
+
+        .include "atari5200.inc"
+
+        .export         _gotoxy
+        .import         popa
+        .import         setcursor
+
+_gotoxy:                        ; Set the cursor position
+        sta     ROWCRS_5200     ; Set Y
+        jsr     popa            ; Get X
+        sta     COLCRS_5200     ; Set X
+        jmp     setcursor
diff --git a/libsrc/atari5200/gotoy.s b/libsrc/atari5200/gotoy.s
new file mode 100644 (file)
index 0000000..fcdd05e
--- /dev/null
@@ -0,0 +1,13 @@
+;
+; Christian Groessler, 13-Mar-2014
+;
+; void gotoy (unsigned char y);
+;
+
+        .include        "atari5200.inc"
+        .export         _gotoy
+        .import         setcursor
+
+_gotoy:
+        sta     ROWCRS_5200     ; Set Y
+        jmp     setcursor
diff --git a/libsrc/atari5200/irq.s b/libsrc/atari5200/irq.s
new file mode 100644 (file)
index 0000000..720113f
--- /dev/null
@@ -0,0 +1,59 @@
+;
+; IRQ handling (ATARI 5200 version)
+;
+
+        .export         initirq, doneirq
+        .import         callirq
+
+        .include        "atari5200.inc"
+
+; ------------------------------------------------------------------------
+
+.segment        "INIT"
+
+initirq:
+        lda     VVBLKD
+        ldx     VVBLKD+1
+        sta     IRQInd+1
+        stx     IRQInd+2
+        ldy     #<IRQStub
+        ldx     #>IRQStub
+        jmp     SETVBV
+
+; ------------------------------------------------------------------------
+
+.code
+
+doneirq:
+        ldy     IRQInd+1
+        ldx     IRQInd+2
+        ;jmp     SETVBV
+        ; fall thru
+
+; ------------------------------------------------------------------------
+; Set deferred vertical blank interrupt
+; logic copied from Atari computer ROM
+
+SETVBV: txa
+        ldx     #5
+        sta     WSYNC                   ; waste 20 CPU cycles
+@1:     dex                             ; to allow VBLANK to happen
+        bne     @1                      ; if this is line "7C"
+        sta     VVBLKD+1
+        sty     VVBLKD
+        rts
+
+; ------------------------------------------------------------------------
+
+.segment        "LOWCODE"
+
+IRQStub:
+        cld                             ; Just to be sure
+        jsr     callirq                 ; Call the functions
+        jmp     IRQInd                  ; Jump to the saved IRQ vector
+
+; ------------------------------------------------------------------------
+
+.data
+
+IRQInd: jmp     $0000
diff --git a/libsrc/atari5200/joy/atr5200std.s b/libsrc/atari5200/joy/atr5200std.s
new file mode 100644 (file)
index 0000000..890e1ff
--- /dev/null
@@ -0,0 +1,130 @@
+;
+; Standard joystick driver for the Atari 5200.
+;
+; Christian Groessler, 2014-05-28
+;
+
+        .include        "zeropage.inc"
+
+        .include        "joy-kernel.inc"
+        .include        "joy-error.inc"
+        .include        "atari5200.inc"
+
+
+; ------------------------------------------------------------------------
+; Header. Includes jump table
+
+.segment        "HEADER"
+
+; Driver signature
+
+        .byte   $6A, $6F, $79           ; "joy"
+        .byte   JOY_API_VERSION         ; Driver API version number
+
+; Library reference
+
+        .addr   $0000
+
+; Button state masks (8 values)
+
+        .byte   $01             ; JOY_UP
+        .byte   $02             ; JOY_DOWN
+        .byte   $04             ; JOY_LEFT
+        .byte   $08             ; JOY_RIGHT
+        .byte   $10             ; JOY_FIRE
+        .byte   $20             ; JOY_FIRE2
+        .byte   $00             ; Future expansion
+        .byte   $00             ; Future expansion
+
+; Jump table.
+
+        .addr   INSTALL
+        .addr   UNINSTALL
+        .addr   COUNT
+        .addr   READJOY
+        .addr   0               ; IRQ entry not used
+
+.code
+
+; ------------------------------------------------------------------------
+; INSTALL routine. Is called after the driver is loaded into memory. If
+; possible, check if the hardware is present and determine the amount of
+; memory available.
+; Must return an JOY_ERR_xx code in a/x.
+;
+
+INSTALL:
+        lda     #JOY_ERR_OK
+        ldx     #0
+;       rts                     ; Run into UNINSTALL instead
+
+; ------------------------------------------------------------------------
+; UNINSTALL routine. Is called before the driver is removed from memory.
+; Can do cleanup or whatever. Must not return anything.
+;
+
+UNINSTALL:
+        rts
+
+
+; ------------------------------------------------------------------------
+; COUNT: Return the total number of available joysticks in a/x.
+;
+
+COUNT:
+        lda     $FD32           ; check ROM version
+        cmp     #$E8
+        bne     @2port
+        lda     #4
+        .byte   $2C             ; bit opcode, eats the next 2 bytes
+@2port: lda     #2
+        ldx     #0
+        rts
+
+; ------------------------------------------------------------------------
+; READ: Read a particular joystick passed in A.
+;
+
+CENTER  =       228 / 2
+SENSIVITY       = 16
+
+READJOY:
+        and     #3              ; put joystick number in range, just in case
+        tay
+        asl     a
+        tax                     ; Joystick number * 2 (0-6) into X, index into ZP shadow registers
+
+        lda     #0              ; Initialize return value
+        cmp     TRIG0,y
+        bne     @notrg
+        lda     #$10            ; JOY_FIRE
+
+; Read joystick
+
+@notrg: ldy     PADDL0,x        ; get horizontal position
+        cpy     #CENTER-SENSIVITY
+        bcs     @chkleft
+
+        ora     #4              ; JOY_LEFT
+        bne     @updown
+
+@chkleft:
+        cpy     #CENTER+SENSIVITY
+        bcc     @updown
+
+        ora     #8              ; JOY_RIGHT
+
+@updown:ldy     PADDL0+1,x      ; get vertical position
+        cpy     #CENTER-SENSIVITY
+        bcs     @chkdown
+
+        ora     #1              ; JOY_UP
+        bne     @done
+
+@chkdown:
+        cpy     #CENTER+SENSIVITY
+        bcc     @done
+
+        ora     #2              ; JOY_DOWN
+
+@done:  rts
diff --git a/libsrc/atari5200/joy_stat_stddrv.s b/libsrc/atari5200/joy_stat_stddrv.s
new file mode 100644 (file)
index 0000000..9924eab
--- /dev/null
@@ -0,0 +1,12 @@
+;
+; Address of the static standard joystick driver
+;
+; Christian Groessler, 2014-05-12
+;
+; const void joy_static_stddrv[];
+;
+
+        .export _joy_static_stddrv
+        .import _atr5200std_joy
+
+_joy_static_stddrv := _atr5200std_joy
diff --git a/libsrc/atari5200/libref.s b/libsrc/atari5200/libref.s
new file mode 100644 (file)
index 0000000..8a5fbe4
--- /dev/null
@@ -0,0 +1,8 @@
+;
+; Christian Groessler, 2014-05-12
+;
+
+        .export         joy_libref
+        .import         _exit
+
+joy_libref      := _exit
diff --git a/libsrc/atari5200/mul20.s b/libsrc/atari5200/mul20.s
new file mode 100644 (file)
index 0000000..fc67b34
--- /dev/null
@@ -0,0 +1,33 @@
+;
+; Christian Groessler, April 2014
+;
+; mul20
+; multiplies A by 20 and returns result in AX
+; uses tmp4
+
+        .importzp       tmp4
+        .export         mul20,loc_tmp
+
+.proc   mul20
+
+        ldx     #0
+        stx     tmp4
+        sta     loc_tmp
+        asl     a
+        rol     tmp4
+        asl     a
+        rol     tmp4            ; val * 4
+        adc     loc_tmp
+        bcc     L1
+        inc     tmp4            ; val * 5
+L1:     asl     a
+        rol     tmp4            ; val * 10
+        asl     a
+        rol     tmp4            ; val * 20
+        ldx     tmp4
+        rts
+
+.endproc
+
+        .bss
+loc_tmp:.res    1
diff --git a/libsrc/atari5200/randomize.s b/libsrc/atari5200/randomize.s
new file mode 100644 (file)
index 0000000..ef46282
--- /dev/null
@@ -0,0 +1,17 @@
+;
+; Christian Groessler, 01-Mar-2014
+;
+; void _randomize (void);
+; /* Initialize the random number generator */
+;
+
+        .export         __randomize
+        .import         _srand
+
+        .include        "atari5200.inc"
+
+__randomize:              
+        ldx     VCOUNT          ; Use vertical line counter as high byte
+        lda     RTCLOK+1        ; Use clock as low byte
+        jmp     _srand          ; Initialize generator
+
diff --git a/libsrc/atari5200/setcursor.s b/libsrc/atari5200/setcursor.s
new file mode 100644 (file)
index 0000000..4cf8eba
--- /dev/null
@@ -0,0 +1,11 @@
+; Dummy version, there is no visible cursor in the default CONIO screen
+;
+; 28-May-2014, Christian Groessler <chris@groessler.org>
+
+        .export setcursor
+
+.proc   setcursor
+
+        rts
+
+.endproc
diff --git a/libsrc/atari5200/sysuname.s b/libsrc/atari5200/sysuname.s
new file mode 100644 (file)
index 0000000..7fd9281
--- /dev/null
@@ -0,0 +1,39 @@
+;
+; Ullrich von Bassewitz, 2003-08-12
+;
+; unsigned char __fastcall__ _sysuname (struct utsname* buf);
+;
+
+        .export         __sysuname, utsdata
+
+        .import         utscopy
+
+        __sysuname = utscopy
+
+;--------------------------------------------------------------------------
+; Data. We define a fixed utsname struct here and just copy it.
+
+.rodata
+
+utsdata:
+        ; sysname
+        .asciiz         "cc65"
+
+        ; nodename
+        .asciiz         ""
+
+        ; release
+        .byte           ((.VERSION >> 8) & $0F) + '0'
+        .byte           '.'
+        .byte           ((.VERSION >> 4) & $0F) + '0'
+        .byte           $00
+
+        ; version
+        .byte           (.VERSION & $0F) + '0'
+        .byte           $00
+
+        ; machine
+        .asciiz         "Atari5200"
+
+
+
diff --git a/libsrc/atari5200/y2k.inc b/libsrc/atari5200/y2k.inc
new file mode 100644 (file)
index 0000000..a44d027
--- /dev/null
@@ -0,0 +1,41 @@
+;-----------------------------------------------------------
+; Y2K FIX by Alan Davis, Dennis Debro, and Ronen Habot
+;-----------------------------------------------------------
+Y2K     LDY     #$00            ; Copy BIOS opening screen to RAM
+        LDA     #$FD
+        STA     TEMPH
+        LDA     #$58            ; Assume 2 port system
+        LDX     $FD32
+        CPX     #$E8            ; Is this a 4 port?
+        BNE     Y2K0            ; Jump if not
+        LDA     #$42            ; Yes, 4 port system
+Y2K0    STA     TEMPL           
+Y2K1    LDA     (TEMPL),Y       
+        STA     $0600,Y
+        INY     
+        BNE     Y2K1
+        LDY     #$50
+        INC     TEMPH
+Y2K2    LDA     (TEMPL),Y       
+        STA     $0700,Y
+        DEY     
+        BPL     Y2K2
+        LDA     #$D4            ; Point to copyright string
+        STA     $0724
+        LDA     #$BF
+        STA     $0725
+        LDX     #$0B            ; Store NOP's @ end
+        LDA     #$EA
+Y2K3    STA     $0732,X         
+        DEX     
+        BPL     Y2K3
+        LDA     #$60            ; Store RTS opcode @ end
+        STA     $0750
+        JSR     $0600           ; Show title screen
+        LDY     #$00            ; Clear RAM from $0600-$3FFF
+        STY     $80
+        LDA     #$06
+        STA     $81
+        JSR     CLRRAM
+        RTS     
+
index 6d146f6e6ad5e6777ef6855e7e8caf7aee19eeef..a0f45ac34378a3f16c74e7826db5149d821e95ab 100644 (file)
@@ -205,6 +205,10 @@ static void SetSys (const char* Sys)
             AbEnd ("Cannot use `module' as a target for the assembler");
             break;
 
+        case TGT_ATARI5200:
+            NewSymbol ("__ATARI5200__", 1);
+            break;
+
         case TGT_ATARI:
             NewSymbol ("__ATARI__", 1);
             break;
index 8fca514cf2eedda09d29d60ff130c6d2251e7785..546c7f27e1339df98e4fa2852c823d024120f471 100644 (file)
@@ -160,6 +160,10 @@ static void SetSys (const char* Sys)
             AbEnd ("Cannot use `module' as a target for the compiler");
             break;
 
+        case TGT_ATARI5200:
+            DefineNumericMacro ("__ATARI5200__", 1);
+            break;
+
         case TGT_ATARI:
             DefineNumericMacro ("__ATARI__", 1);
             break;
index ae575f2add2960db3af86c5711483ce927de4174..803a8894c310d173ed5af08e48c0c46cf40e03ac 100644 (file)
@@ -125,6 +125,7 @@ static const TargetEntry TargetMap[] = {
     {   "apple2",       TGT_APPLE2      },
     {   "apple2enh",    TGT_APPLE2ENH   },
     {   "atari",        TGT_ATARI       },
+    {   "atari5200",    TGT_ATARI5200   },
     {   "atarixl",      TGT_ATARIXL     },
     {   "atmos",        TGT_ATMOS       },
     {   "bbc",          TGT_BBC         },
@@ -157,6 +158,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 },
+    { "atari5200",      CPU_6502,       BINFMT_BINARY,      CTAtari },
     { "atarixl",        CPU_6502,       BINFMT_BINARY,      CTAtari },
     { "vic20",          CPU_6502,       BINFMT_BINARY,      CTPET   },
     { "c16",            CPU_6502,       BINFMT_BINARY,      CTPET   },
index 6384bf19edfa4d07f5d02b62f6ab26f90c328eae..e824ad3c6d3b1beb4f6431c811c6d6b92cdac355 100644 (file)
@@ -55,6 +55,7 @@ typedef enum {
     TGT_NONE,
     TGT_MODULE,
     TGT_ATARI,
+    TGT_ATARI5200,
     TGT_ATARIXL,
     TGT_VIC20,
     TGT_C16,