mirror of
https://github.com/cc65/cc65.git
synced 2024-12-27 15:29:46 +00:00
first changes for atari5200 target
This commit is contained in:
parent
9c95306a69
commit
c8f7f2f161
93
asminc/_antic.inc
Normal file
93
asminc/_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/_gtia.inc
Normal file
81
asminc/_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/_pokey.inc
Normal file
44
asminc/_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
|
||||
|
241
asminc/atari.inc
241
asminc/atari.inc
@ -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 "_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 "_pokey.inc"
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
; ANTIC Address Equates
|
||||
;-------------------------------------------------------------------------
|
||||
|
||||
ANTIC = $D400 ;ANTIC area
|
||||
.include "_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
|
||||
;-------------------------------------------------------------------------
|
||||
|
100
asminc/atari5200.inc
Normal file
100
asminc/atari5200.inc
Normal file
@ -0,0 +1,100 @@
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
; 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 "
|
||||
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
; 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 "_gtia.inc"
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
; ANTIC Address Equates
|
||||
;-------------------------------------------------------------------------
|
||||
|
||||
ANTIC = $D400 ;ANTIC area
|
||||
.include "_antic.inc"
|
||||
|
||||
;-------------------------------------------------------------------------
|
||||
; POKEY Address Equates
|
||||
;-------------------------------------------------------------------------
|
||||
|
||||
POKEY = $E800 ;POKEY area
|
||||
.include "_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
|
||||
|
59
asminc/atari5200.mac
Normal file
59
asminc/atari5200.mac
Normal file
@ -0,0 +1,59 @@
|
||||
; Convert characters to screen codes
|
||||
|
||||
; Helper macro that converts and outputs one character
|
||||
.macro _scrcode char
|
||||
.if (char >= 0) .and (char <= 31)
|
||||
.byte (char + 64)
|
||||
.elseif (char >= 32) .and (char <= 95)
|
||||
.byte (char + 32)
|
||||
.elseif (char >= 96) .and (char <= 127)
|
||||
.byte char
|
||||
.elseif (char >= 128) .and (char <= 159)
|
||||
.byte (char + 64)
|
||||
.elseif (char >= 160) .and (char <= 223)
|
||||
.byte (char - 32)
|
||||
.elseif (char >= 224) .and (char <= 255)
|
||||
.byte char
|
||||
.else
|
||||
.error "scrcode: Character constant out of range"
|
||||
.endif
|
||||
.endmacro
|
||||
|
||||
.macro scrcode arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
|
||||
|
||||
; Bail out if next argument is empty
|
||||
.if .blank (arg1)
|
||||
.exitmacro
|
||||
.endif
|
||||
|
||||
; Check for a string
|
||||
.if .match ({arg1}, "")
|
||||
|
||||
; Walk over all string chars
|
||||
.repeat .strlen (arg1), i
|
||||
_scrcode {.strat (arg1, i)}
|
||||
.endrepeat
|
||||
|
||||
; Check for a number
|
||||
.elseif .match (.left (1, {arg1}), 0)
|
||||
|
||||
; Just output the number
|
||||
_scrcode arg1
|
||||
|
||||
; Check for a character
|
||||
.elseif .match (.left (1, {arg1}), 'a')
|
||||
|
||||
; Just output the character
|
||||
_scrcode arg1
|
||||
|
||||
; Anything else is an error
|
||||
.else
|
||||
|
||||
.error "scrcode: invalid argument type"
|
||||
|
||||
.endif
|
||||
|
||||
; Call the macro recursively with the remaining args
|
||||
scrcode arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
|
||||
.endmacro
|
||||
|
42
cfg/atari5200.cfg
Normal file
42
cfg/atari5200.cfg
Normal file
@ -0,0 +1,42 @@
|
||||
SYMBOLS {
|
||||
__CARTSIZE__: type = weak, value = $4000; # possible values: $4000 and $8000
|
||||
__CART_ENTRY__: type = import;
|
||||
__STACKSIZE__: type = weak, value = $0300; # 3 pages stack
|
||||
}
|
||||
MEMORY {
|
||||
ZP: file = "", start = $0019, size = $00E7, define = yes;
|
||||
RAM: file = "", start = $021C, size = $4000 - __STACKSIZE__ - $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__;
|
||||
}
|
@ -12,6 +12,7 @@ GEOS = geos-apple \
|
||||
|
||||
TARGETS = apple2 \
|
||||
apple2enh \
|
||||
atari5200 \
|
||||
atari \
|
||||
atarixl \
|
||||
atmos \
|
||||
|
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"
|
11
libsrc/atari5200/cartname.s
Normal file
11
libsrc/atari5200/cartname.s
Normal file
@ -0,0 +1,11 @@
|
||||
; default cartridge name
|
||||
;
|
||||
; Christian Groessler, 01-Mar-2014
|
||||
|
||||
.include "atari5200.mac"
|
||||
|
||||
.export __CART_NAME__: absolute = 1
|
||||
|
||||
.segment "CARTNAME"
|
||||
|
||||
scrcode " cc65 compiled"
|
12
libsrc/atari5200/cartyear.s
Normal file
12
libsrc/atari5200/cartyear.s
Normal file
@ -0,0 +1,12 @@
|
||||
; Cartridge copyright year
|
||||
;
|
||||
; Christian Groessler, 01-Mar-2014
|
||||
|
||||
.include "atari5200.mac"
|
||||
|
||||
.export __CART_YEAR__: absolute = 1
|
||||
|
||||
.segment "CARTYEAR"
|
||||
|
||||
scrcode "98"
|
||||
|
55
libsrc/atari5200/crt0.s
Normal file
55
libsrc/atari5200/crt0.s
Normal file
@ -0,0 +1,55 @@
|
||||
;
|
||||
; Startup code for cc65 (Atari5200 version)
|
||||
;
|
||||
; by 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"
|
||||
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; Place the startup code in a special segment.
|
||||
|
||||
.segment "STARTUP"
|
||||
|
||||
start:
|
||||
|
||||
; Clear the BSS data
|
||||
|
||||
jsr zerobss
|
||||
|
||||
; initialize data
|
||||
jsr copydata
|
||||
|
||||
; setup the stack
|
||||
|
||||
lda #<(__RAM_START__ + __RAM_SIZE__)
|
||||
sta sp
|
||||
lda #>(__RAM_START__ + __RAM_SIZE__)
|
||||
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
|
||||
|
||||
; Reset the NES
|
||||
|
||||
jmp start
|
||||
|
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"
|
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
|
||||
|
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");
|
||||
break;
|
||||
|
||||
case TGT_ATARI5200:
|
||||
NewSymbol ("__ATARI5200__", 1);
|
||||
break;
|
||||
|
||||
case TGT_ATARI:
|
||||
NewSymbol ("__ATARI__", 1);
|
||||
break;
|
||||
|
@ -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;
|
||||
|
@ -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 },
|
||||
|
@ -55,6 +55,7 @@ typedef enum {
|
||||
TGT_NONE,
|
||||
TGT_MODULE,
|
||||
TGT_ATARI,
|
||||
TGT_ATARI5200,
|
||||
TGT_ATARIXL,
|
||||
TGT_VIC20,
|
||||
TGT_C16,
|
||||
|
Loading…
Reference in New Issue
Block a user