mirror of
https://github.com/cc65/cc65.git
synced 2025-02-24 09:29:07 +00:00
Merge pull request #122 from groessler/a5200
new target: Atari 5200 console
This commit is contained in:
commit
99f0a56f63
@ -21,6 +21,7 @@ including
|
|||||||
- newer PET machines (not 2001).
|
- newer PET machines (not 2001).
|
||||||
- the Apple ][+ and successors.
|
- the Apple ][+ and successors.
|
||||||
- the Atari 8 bit machines.
|
- the Atari 8 bit machines.
|
||||||
|
- the Atari 5200 console.
|
||||||
- GEOS for the C64 and C128.
|
- GEOS for the C64 and C128.
|
||||||
- the Nintendo Entertainment System (NES).
|
- the Nintendo Entertainment System (NES).
|
||||||
- the Supervision console.
|
- the Supervision console.
|
||||||
|
241
asminc/atari.inc
241
asminc/atari.inc
@ -762,7 +762,15 @@ DOS = $0700
|
|||||||
|
|
||||||
CARTCS = $BFFA ;##rev2## 2-byte cartridge coldstart address
|
CARTCS = $BFFA ;##rev2## 2-byte cartridge coldstart address
|
||||||
CART = $BFFC ;##rev2## 1-byte cartridge present indicator
|
CART = $BFFC ;##rev2## 1-byte cartridge present indicator
|
||||||
|
;0=Cart Exists
|
||||||
CARTFG = $BFFD ;##rev2## 1-byte cartridge flags
|
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
|
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
|
GTIA = $D000 ;CTIA/GTIA area
|
||||||
|
.include "atari_gtia.inc"
|
||||||
; 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
|
|
||||||
|
|
||||||
;-------------------------------------------------------------------------
|
;-------------------------------------------------------------------------
|
||||||
; PBI Address Equates
|
; PBI Address Equates
|
||||||
@ -862,6 +794,20 @@ PDVI = $D1FF ;##rev2## parallel device IRQ status
|
|||||||
|
|
||||||
PDVS = $D1FF ;##rev2## parallel device select
|
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
|
; PBI RAM Address Equates
|
||||||
|
|
||||||
PBIRAM = $D600 ;##rev2## parallel bus interface RAM area
|
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
|
PDID2 = $D80B ;##rev2## parallel device ID 2
|
||||||
PDVV = $D80D ;##rev2## parallel device vector table
|
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
|
; PIA Address Equates
|
||||||
;-------------------------------------------------------------------------
|
;-------------------------------------------------------------------------
|
||||||
@ -932,33 +832,6 @@ PORTB = $D301 ;port B direction register or memory management
|
|||||||
PACTL = $D302 ;port A control
|
PACTL = $D302 ;port A control
|
||||||
PBCTL = $D303 ;port B 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
|
; Floating Point Package Address Equates
|
||||||
;-------------------------------------------------------------------------
|
;-------------------------------------------------------------------------
|
||||||
@ -1131,74 +1004,6 @@ MYDOS = 3
|
|||||||
XDOS = 4
|
XDOS = 4
|
||||||
NODOS = 255
|
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
|
; End of atari.inc
|
||||||
;-------------------------------------------------------------------------
|
;-------------------------------------------------------------------------
|
||||||
|
116
asminc/atari5200.inc
Normal file
116
asminc/atari5200.inc
Normal file
@ -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
|
93
asminc/atari_antic.inc
Normal file
93
asminc/atari_antic.inc
Normal file
@ -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
|
81
asminc/atari_gtia.inc
Normal file
81
asminc/atari_gtia.inc
Normal file
@ -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
|
||||||
|
|
44
asminc/atari_pokey.inc
Normal file
44
asminc/atari_pokey.inc
Normal file
@ -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
|
||||||
|
|
43
cfg/atari5200.cfg
Normal file
43
cfg/atari5200.cfg
Normal file
@ -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__;
|
||||||
|
}
|
199
doc/atari5200.sgml
Normal file
199
doc/atari5200.sgml
Normal file
@ -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 $021C to
|
||||||
|
$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 $021C to $3FFF-__RESERVED_MEMORY__.
|
||||||
|
The default linker config file sets __RESERVED_MEMORY__ to $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 $3E00. The
|
||||||
|
address of the screen memory is available at runtime in the variable
|
||||||
|
SAVMSC ($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 $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>
|
@ -4396,6 +4396,7 @@ compiler, depending on the target system selected:
|
|||||||
<itemize>
|
<itemize>
|
||||||
<item><tt/__APPLE2__/ - Target system is <tt/apple2/ or <tt/apple2enh/
|
<item><tt/__APPLE2__/ - Target system is <tt/apple2/ or <tt/apple2enh/
|
||||||
<item><tt/__APPLE2ENH__/ - Target system is <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/__ATARI__/ - Target system is <tt/atari/ or <tt/atarixl/
|
||||||
<item><tt/__ATARIXL__/ - Target system is <tt/atarixl/
|
<item><tt/__ATARIXL__/ - Target system is <tt/atarixl/
|
||||||
<item><tt/__ATMOS__/ - Target system is <tt/atmos/
|
<item><tt/__ATMOS__/ - Target system is <tt/atmos/
|
||||||
|
@ -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).
|
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>
|
<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).
|
This macro is defined if the target is the Atari 400/800 (-t atari) or the Atari 800XL/130XE (-t atarixl).
|
||||||
|
@ -107,6 +107,9 @@
|
|||||||
<tag><htmlurl url="atari.html" name="atari.html"></tag>
|
<tag><htmlurl url="atari.html" name="atari.html"></tag>
|
||||||
Topics specific to the Atari 8-bit machines.
|
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>
|
<tag><htmlurl url="atmos.html" name="atmos.html"></tag>
|
||||||
Topics specific to the Oric Atmos.
|
Topics specific to the Oric Atmos.
|
||||||
|
|
||||||
|
102
include/atari5200.h
Normal file
102
include/atari5200.h
Normal file
@ -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 */
|
@ -81,6 +81,9 @@ extern struct _timezone {
|
|||||||
unsigned _clocks_per_sec (void);
|
unsigned _clocks_per_sec (void);
|
||||||
# define CLK_TCK _clocks_per_sec()
|
# define CLK_TCK _clocks_per_sec()
|
||||||
# define CLOCKS_PER_SEC _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__)
|
#elif defined(__ATMOS__)
|
||||||
# define CLK_TCK 100 /* POSIX */
|
# define CLK_TCK 100 /* POSIX */
|
||||||
# define CLOCKS_PER_SEC 100 /* ANSI */
|
# define CLOCKS_PER_SEC 100 /* ANSI */
|
||||||
|
@ -18,6 +18,7 @@ TARGETS = apple2 \
|
|||||||
apple2enh \
|
apple2enh \
|
||||||
atari \
|
atari \
|
||||||
atarixl \
|
atarixl \
|
||||||
|
atari5200 \
|
||||||
atmos \
|
atmos \
|
||||||
$(CBMS) \
|
$(CBMS) \
|
||||||
$(GEOS) \
|
$(GEOS) \
|
||||||
|
@ -9,6 +9,12 @@
|
|||||||
.import popa, _gotoxy, cputdirect, setcursor
|
.import popa, _gotoxy, cputdirect, setcursor
|
||||||
.importzp tmp1
|
.importzp tmp1
|
||||||
|
|
||||||
|
.ifndef __ATARI5200__
|
||||||
|
CHRCODE = $12+64
|
||||||
|
.else
|
||||||
|
CHRCODE = 14
|
||||||
|
.endif
|
||||||
|
|
||||||
_chlinexy:
|
_chlinexy:
|
||||||
pha ; Save the length
|
pha ; Save the length
|
||||||
jsr popa ; Get y
|
jsr popa ; Get y
|
||||||
@ -19,12 +25,8 @@ _chline:
|
|||||||
cmp #0 ; Is the length zero?
|
cmp #0 ; Is the length zero?
|
||||||
beq L9 ; Jump if done
|
beq L9 ; Jump if done
|
||||||
sta tmp1
|
sta tmp1
|
||||||
L1: lda #$12+64 ; Horizontal line, screen code
|
L1: lda #CHRCODE ; Horizontal line, screen code
|
||||||
jsr cputdirect ; Direct output
|
jsr cputdirect ; Direct output
|
||||||
dec tmp1
|
dec tmp1
|
||||||
bne L1
|
bne L1
|
||||||
L9: jmp setcursor
|
L9: jmp setcursor
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,6 +10,12 @@
|
|||||||
.import popa, _gotoxy, putchar, setcursor
|
.import popa, _gotoxy, putchar, setcursor
|
||||||
.importzp tmp1
|
.importzp tmp1
|
||||||
|
|
||||||
|
.ifndef __ATARI5200__
|
||||||
|
CHRCODE = $7C ; Vertical bar
|
||||||
|
.else
|
||||||
|
CHRCODE = 1 ; exclamation mark
|
||||||
|
.endif
|
||||||
|
|
||||||
_cvlinexy:
|
_cvlinexy:
|
||||||
pha ; Save the length
|
pha ; Save the length
|
||||||
jsr popa ; Get y
|
jsr popa ; Get y
|
||||||
@ -22,7 +28,7 @@ _cvline:
|
|||||||
sta tmp1
|
sta tmp1
|
||||||
L1: lda COLCRS
|
L1: lda COLCRS
|
||||||
pha
|
pha
|
||||||
lda #$7C ; Vertical bar
|
lda #CHRCODE ; Vertical bar
|
||||||
jsr putchar ; Write, no cursor advance
|
jsr putchar ; Write, no cursor advance
|
||||||
pla
|
pla
|
||||||
sta COLCRS
|
sta COLCRS
|
||||||
@ -30,6 +36,3 @@ L1: lda COLCRS
|
|||||||
dec tmp1
|
dec tmp1
|
||||||
bne L1
|
bne L1
|
||||||
L9: jmp setcursor
|
L9: jmp setcursor
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
13
libsrc/atari5200/cartentry.s
Normal file
13
libsrc/atari5200/cartentry.s
Normal file
@ -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"
|
13
libsrc/atari5200/cartname.s
Normal file
13
libsrc/atari5200/cartname.s
Normal file
@ -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"
|
9
libsrc/atari5200/cartyear.s
Normal file
9
libsrc/atari5200/cartyear.s
Normal file
@ -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
|
1
libsrc/atari5200/cclear.s
Normal file
1
libsrc/atari5200/cclear.s
Normal file
@ -0,0 +1 @@
|
|||||||
|
.include "../atari/cclear.s"
|
1
libsrc/atari5200/chline.s
Normal file
1
libsrc/atari5200/chline.s
Normal file
@ -0,0 +1 @@
|
|||||||
|
.include "../atari/chline.s"
|
26
libsrc/atari5200/clock.s
Normal file
26
libsrc/atari5200/clock.s
Normal file
@ -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
|
34
libsrc/atari5200/clrscr.s
Normal file
34
libsrc/atari5200/clrscr.s
Normal file
@ -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
|
83
libsrc/atari5200/conioscreen.s
Normal file
83
libsrc/atari5200/conioscreen.s
Normal file
@ -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
|
94
libsrc/atari5200/cputc.s
Normal file
94
libsrc/atari5200/cputc.s
Normal file
@ -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
|
||||||
|
|
48
libsrc/atari5200/crt0.s
Normal file
48
libsrc/atari5200/crt0.s
Normal file
@ -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
|
5
libsrc/atari5200/ctype.s
Normal file
5
libsrc/atari5200/ctype.s
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
; Character specification table.
|
||||||
|
;
|
||||||
|
; same as for "atari" target
|
||||||
|
|
||||||
|
.include "../atari/ctype.s"
|
1
libsrc/atari5200/cvline.s
Normal file
1
libsrc/atari5200/cvline.s
Normal file
@ -0,0 +1 @@
|
|||||||
|
.include "../atari/cvline.s"
|
20
libsrc/atari5200/get_tv.s
Normal file
20
libsrc/atari5200/get_tv.s
Normal file
@ -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
|
13
libsrc/atari5200/gotox.s
Normal file
13
libsrc/atari5200/gotox.s
Normal file
@ -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
|
17
libsrc/atari5200/gotoxy.s
Normal file
17
libsrc/atari5200/gotoxy.s
Normal file
@ -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
|
13
libsrc/atari5200/gotoy.s
Normal file
13
libsrc/atari5200/gotoy.s
Normal file
@ -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
|
59
libsrc/atari5200/irq.s
Normal file
59
libsrc/atari5200/irq.s
Normal file
@ -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
|
130
libsrc/atari5200/joy/atr5200std.s
Normal file
130
libsrc/atari5200/joy/atr5200std.s
Normal file
@ -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
|
12
libsrc/atari5200/joy_stat_stddrv.s
Normal file
12
libsrc/atari5200/joy_stat_stddrv.s
Normal file
@ -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
|
8
libsrc/atari5200/libref.s
Normal file
8
libsrc/atari5200/libref.s
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
;
|
||||||
|
; Christian Groessler, 2014-05-12
|
||||||
|
;
|
||||||
|
|
||||||
|
.export joy_libref
|
||||||
|
.import _exit
|
||||||
|
|
||||||
|
joy_libref := _exit
|
33
libsrc/atari5200/mul20.s
Normal file
33
libsrc/atari5200/mul20.s
Normal file
@ -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
|
17
libsrc/atari5200/randomize.s
Normal file
17
libsrc/atari5200/randomize.s
Normal file
@ -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
|
||||||
|
|
11
libsrc/atari5200/setcursor.s
Normal file
11
libsrc/atari5200/setcursor.s
Normal file
@ -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
|
39
libsrc/atari5200/sysuname.s
Normal file
39
libsrc/atari5200/sysuname.s
Normal file
@ -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"
|
||||||
|
|
||||||
|
|
||||||
|
|
41
libsrc/atari5200/y2k.inc
Normal file
41
libsrc/atari5200/y2k.inc
Normal file
@ -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
|
||||||
|
|
@ -205,6 +205,10 @@ static void SetSys (const char* Sys)
|
|||||||
AbEnd ("Cannot use `module' as a target for the assembler");
|
AbEnd ("Cannot use `module' as a target for the assembler");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TGT_ATARI5200:
|
||||||
|
NewSymbol ("__ATARI5200__", 1);
|
||||||
|
break;
|
||||||
|
|
||||||
case TGT_ATARI:
|
case TGT_ATARI:
|
||||||
NewSymbol ("__ATARI__", 1);
|
NewSymbol ("__ATARI__", 1);
|
||||||
break;
|
break;
|
||||||
|
@ -160,6 +160,10 @@ static void SetSys (const char* Sys)
|
|||||||
AbEnd ("Cannot use `module' as a target for the compiler");
|
AbEnd ("Cannot use `module' as a target for the compiler");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TGT_ATARI5200:
|
||||||
|
DefineNumericMacro ("__ATARI5200__", 1);
|
||||||
|
break;
|
||||||
|
|
||||||
case TGT_ATARI:
|
case TGT_ATARI:
|
||||||
DefineNumericMacro ("__ATARI__", 1);
|
DefineNumericMacro ("__ATARI__", 1);
|
||||||
break;
|
break;
|
||||||
|
@ -125,6 +125,7 @@ static const TargetEntry TargetMap[] = {
|
|||||||
{ "apple2", TGT_APPLE2 },
|
{ "apple2", TGT_APPLE2 },
|
||||||
{ "apple2enh", TGT_APPLE2ENH },
|
{ "apple2enh", TGT_APPLE2ENH },
|
||||||
{ "atari", TGT_ATARI },
|
{ "atari", TGT_ATARI },
|
||||||
|
{ "atari5200", TGT_ATARI5200 },
|
||||||
{ "atarixl", TGT_ATARIXL },
|
{ "atarixl", TGT_ATARIXL },
|
||||||
{ "atmos", TGT_ATMOS },
|
{ "atmos", TGT_ATMOS },
|
||||||
{ "bbc", TGT_BBC },
|
{ "bbc", TGT_BBC },
|
||||||
@ -157,6 +158,7 @@ static const TargetProperties PropertyTable[TGT_COUNT] = {
|
|||||||
{ "none", CPU_6502, BINFMT_BINARY, CTNone },
|
{ "none", CPU_6502, BINFMT_BINARY, CTNone },
|
||||||
{ "module", CPU_6502, BINFMT_O65, CTNone },
|
{ "module", CPU_6502, BINFMT_O65, CTNone },
|
||||||
{ "atari", CPU_6502, BINFMT_BINARY, CTAtari },
|
{ "atari", CPU_6502, BINFMT_BINARY, CTAtari },
|
||||||
|
{ "atari5200", CPU_6502, BINFMT_BINARY, CTAtari },
|
||||||
{ "atarixl", CPU_6502, BINFMT_BINARY, CTAtari },
|
{ "atarixl", CPU_6502, BINFMT_BINARY, CTAtari },
|
||||||
{ "vic20", CPU_6502, BINFMT_BINARY, CTPET },
|
{ "vic20", CPU_6502, BINFMT_BINARY, CTPET },
|
||||||
{ "c16", CPU_6502, BINFMT_BINARY, CTPET },
|
{ "c16", CPU_6502, BINFMT_BINARY, CTPET },
|
||||||
|
@ -55,6 +55,7 @@ typedef enum {
|
|||||||
TGT_NONE,
|
TGT_NONE,
|
||||||
TGT_MODULE,
|
TGT_MODULE,
|
||||||
TGT_ATARI,
|
TGT_ATARI,
|
||||||
|
TGT_ATARI5200,
|
||||||
TGT_ATARIXL,
|
TGT_ATARIXL,
|
||||||
TGT_VIC20,
|
TGT_VIC20,
|
||||||
TGT_C16,
|
TGT_C16,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user