Merge pull request #1 from pkali/develop

Develop
This commit is contained in:
2024-12-10 15:41:49 -05:00
committed by GitHub
29 changed files with 4264 additions and 530 deletions
+4
View File
@@ -0,0 +1,4 @@
*.bak
*.lab
*.lst
BIN
View File
Binary file not shown.
+141 -3
View File
@@ -1,8 +1,146 @@
# Avery Breakout
A very break out game proto
A very break out game. Name is a homage to Mr. Avery Lee, also known as [phaeron](https://forums.atariage.com/profile/16457-phaeron/)
Thank you Avery for everything you are doing for this small community.
I have shown engine protos before, but it was not a real game, just a few bouncing balls.
[Pecus](https://github.com/Pecusx) for the rescue! In a couple of evenings we were able to transform it into a (hopefully) playable game.
Music and SFX by Alex, his first RMT attempt :)
Font by [DamienG](https://damieng.com/typography/zx-origins/mild-west/)
Second place in the game compo in PSA 2020 virtual SARS-2 demo party.
The `backup` folder contains easier to play hi-res, b-w version.
Looking for art input to transform it to a full smallish silly game.
## 2024-12-07
We teamed with Pecus and Alex and made a game out of the "tech demo". There are points, game over screen and possibility to add your own levels.
If there is no DOS, you can play the single built-in level.
With DOS, the game tries to load `LEVELnnn.DAT` file, starting from `LEVEL001.DAT` from the current directory.
The levels can be edited on Atari with the enclosed `ED.COM` editor or a PC (end line characters can be LF, CRFL or ATASCII EOL).
### Level file format:
line 1: number of balls to be hit for the level to succeed
line 2: `1` means single pixel width of the pattern, `2` double pixel width
the following lines define the level. Any character is a pixel, space is a space, EOL is the end of line.
The game displays 46 lines of pixels, but your levels should generally be shorter to make it playable.
Important! Any error in the level definition causes the game to return to level 000, so if you make a mistake in `LEVEL004.DAT`,
the files `LEVEL005.DAT` and `LEVEL006.DAT` will never be displayed.
Experiment!
## 2020-05-13
Second place in the game compo in PSA 2020 virtual SARS-2 demo party.
### TPS Report:
## 2012-02-16
Fork to the colour version. (averybreakout.asm) Graphics mode tests.
## build 023: 2010-06-26
+ idle ball delay loop shortened to 75 loops for a smoother experience
T027: when ball is down out of the screen and the racquette is over it, it bounces.
Need to add a check for it! (no bounces when out of the screen)
## build 022: 2010-06-24
T022: when balls disappear, their traces should disappear, too, even when a new ball is NOT created
now the dead pixels disappear only when a new ball is created.
It has been done by expanding the bottom area, so the balls are going down.
Screen had to been cut 10 lines. Not a big deal.
T024: detect the ending
Detected (gameIsNotOver label).
## build 021: 2010-06-21
+ apparently the slowest part of the engine is eXistenZcheck - rewrite as a simple stack!
as usual, it was not as simple as thought previously... But works now!
Will be easier to clear traces of the dead balls now.
## build 020: 2010-06-02
+ when the racquette is max to the right it does not bounce balls!
+ still problems with racquet
solved - pos+size was >$ff
+ very fast balls get through the left-right side borders
solved by a better usage of "maxSpeed"
## build 019: 2010-05-27
+ alive balls are somewhere in the outer space - check where and fix
where: YposTableH -- 00 -- 08 most 01, XposTableH - FF, FE, 00, 01
basicaly these are places where a ball should never be!
One fix let other "outer-space" related buggies die, too.
The problem was that bouncing ball got behind the border and started to bounce
there and forth outside the screen. Fix - bring it back on the playfield.
+ balls are created somewhere outside the screen
+ when balls disappear, their traces should disappear, too (now 1 pixel stays on screen)
+ high dX balls were sticking to Vborders. Fixed by increasing the margin
## build 018: 2010-05-26
+ 1 pixel out of the deleted bunch stays forever (erase/store sequence was invalid)
build 017: 2010-05-25
+ too few high dX balls
x low-priority: rewrite memorytables to use lda (zpage,x) addressing (cool:)
Turned out not to be such a low-priority job as wrong sequence of writes
to memorytables make one pixel staying on the screen. Rewrite to simplify!
Turned out that indirect X addressing is not good for it and this is closed.
## build 016: 2010-05-24
Forgot about documenting updates...
Basically the game is close to the end, but number of small issues emerged.
+ racquette is too slow (and it was such a work to make it 1-px smooth...)
## build 006: 2010-05-12
Collision detection
Ough... turned out to be way more difficult than expected, but now collisions are detected and balls are bouncing!
## build 005: 2010-05-10
Snake like plot memory! Lots and lots of pixels, less balls (64 is the max...)
## build 004: 2010-05-09
Multiple ballz
## build 003: 2010-05-08
Feeling bouncy
simple boundary bounces work nicely.
Unfrtunately number of draws per frame dropped to circa 70.
I guess 64 will be an achievement for 2 frames.
## build 002: 2010-05-06
MADS rewrite :-]
;bare plots get circa 320 pixels per frame. I will go for 128 pix max now
## build 001: 2010-05-04
First try:
Strip scorch sources to get clean gr.8 screen.
(and PLOT)
Basic idea: http://wonderfl.net/c/tNGi/fullscreen
### TODO: (old)
T021: balls are ferking stick to the right part of the screen...
T023: find and set few nice starting points and speeds to be rotated (remove not really sexy random start)
T025: do nice game over (when not clear)
T026: do nice "ALL CLEAR" screen
T028: (idea) spinning the ball - when ball bounces the racquette when it is moving, dX adds or subs
View File
BIN
View File
Binary file not shown.
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
Binary file not shown.
+42
View File
@@ -0,0 +1,42 @@
;* --------BEGIN--------
;Settings for music
;* C:\Users\pawel\Dropbox\programming\tetryx\artwork\stripped.rmt
FEAT_SFX equ 1
FEAT_GLOBALVOLUMEFADE equ 0 ;RMTGLOBALVOLUMEFADE variable
FEAT_NOSTARTINGSONGLINE equ 0
FEAT_INSTRSPEED equ 1
FEAT_CONSTANTSPEED equ 0 ;(2 times)
FEAT_COMMAND1 equ 1 ;(25 times)
FEAT_COMMAND2 equ 0 ;(0 times)
FEAT_COMMAND3 equ 0 ;(0 times)
FEAT_COMMAND4 equ 0 ;(0 times)
FEAT_COMMAND5 equ 0 ;(0 times)
FEAT_COMMAND6 equ 0 ;(0 times)
FEAT_COMMAND7SETNOTE equ 0 ;(0 times)
FEAT_COMMAND7VOLUMEONLY equ 0 ;(0 times)
FEAT_PORTAMENTO equ 0 ;(0 times)
FEAT_FILTER equ 0 ;(0 times)
FEAT_FILTERG0L equ 0 ;(0 times)
FEAT_FILTERG1L equ 0 ;(0 times)
FEAT_FILTERG0R equ 0 ;(0 times)
FEAT_FILTERG1R equ 0 ;(0 times)
FEAT_BASS16 equ 0 ;(0 times)
FEAT_BASS16G1L equ 0 ;(0 times)
FEAT_BASS16G3L equ 0 ;(0 times)
FEAT_BASS16G1R equ 0 ;(0 times)
FEAT_BASS16G3R equ 0 ;(0 times)
FEAT_VOLUMEONLYG0L equ 0 ;(0 times)
FEAT_VOLUMEONLYG2L equ 0 ;(0 times)
FEAT_VOLUMEONLYG3L equ 0 ;(0 times)
FEAT_VOLUMEONLYG0R equ 0 ;(0 times)
FEAT_VOLUMEONLYG2R equ 0 ;(0 times)
FEAT_VOLUMEONLYG3R equ 0 ;(0 times)
FEAT_TABLETYPE equ 0 ;(0 times)
FEAT_TABLEMODE equ 0 ;(0 times)
FEAT_TABLEGO equ 0 ;(0 times)
FEAT_AUDCTLMANUALSET equ 0 ;(0 times)
FEAT_VOLUMEMIN equ 0 ;(0 times)
FEAT_EFFECTVIBRATO equ 0 ;(0 times)
FEAT_EFFECTFSHIFT equ 1 ;(1 times)
STEREOMODE equ 0
;* --------END--------
+1356
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
+1255 -430
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
Binary file not shown.
-97
View File
@@ -1,97 +0,0 @@
TODO
T021: balls are ferking stick to the right part of the screen...
T023: find and set few nice starting points and speeds to be rotated (remove not really sexy random start)
T025: do nice game over (when not clear)
T026: do nice "ALL CLEAR" screen
T028: (idea) spinning the ball - when ball bounces the racquette when it is moving, dX adds or subs
Changes:
2012-02-16
Fork to the colour version. (averybreakout.asm) Graphics mode tests.
build 023: 2010-06-26
+ idle ball delay loop shortened to 75 loops for a smoother experience
T027: when ball is down out of the screen and the racquette is over it, it bounces.
Need to add a check for it! (no bounces when out of the screen)
build 022: 2010-06-24
T022: when balls disappear, their traces should disappear, too, even when a new ball is NOT created
now the dead pixels disappear only when a new ball is created.
It has been done by expanding the bottom area, so the balls are going down.
Screen had to been cut 10 lines. Not a big deal.
T024: detect the ending
Detected (gameIsNotOver label).
build 021: 2010-06-21
+ apparently the slowest part of the engine is eXistenZcheck - rewrite as a simple stack!
as usual, it was not as simple as thought previously... But works now!
Will be easier to clear traces of the dead balls now.
build 020: 2010-06-02
+ when the racquette is max to the right it does not bounce balls!
+ still problems with racquet
solved - pos+size was >$ff
+ very fast balls get through the left-right side borders
solved by a better usage of "maxSpeed"
build 019: 2010-05-27
+ alive balls are somewhere in the outer space - check where and fix
where: YposTableH -- 00 -- 08 most 01, XposTableH - FF, FE, 00, 01
basicaly these are places where a ball should never be!
One fix let other "outer-space" related buggies die, too.
The problem was that bouncing ball got behind the border and started to bounce
there and forth outside the screen. Fix - bring it back on the playfield.
+ balls are created somewhere outside the screen
+ when balls disappear, their traces should disappear, too (now 1 pixel stays on screen)
+ high dX balls were sticking to Vborders. Fixed by increasing the margin
build 018: 2010-05-26
+ 1 pixel out of the deleted bunch stays forever (erase/store sequence was invalid)
build 017: 2010-05-25
+ too few high dX balls
x low-priority: rewrite memorytables to use lda (zpage,x) addressing (cool:)
Turned out not to be such a low-priority job as wrong sequence of writes
to memorytables make one pixel staying on the screen. Rewrite to simplify!
Turned out that indirect X addressing is not good for it and this is closed.
build 016: 2010-05-24
Forgot about documenting updates...
Basically the game is close to the end, but number of small issues emerged.
+ racquette is too slow (and it was such a work to make it 1-px smooth...)
build 006: 2010-05-12
Collision detection
Ough... turned out to be way more difficult than expected, but now collisions are detected and balls are bouncing!
build 005: 2010-05-10
Snake like plot memory! Lots and lots of pixels, less balls (64 is the max...)
build 004: 2010-05-09
Multiple ballz
build 003: 2010-05-08
Feeling bouncy
simple boundary bounces work nicely.
Unfrtunately number of draws per frame dropped to circa 70.
I guess 64 will be an achievement for 2 frames.
build 002: 2010-05-06
MADS rewrite :-]
;bare plots get circa 320 pixels per frame. I will go for 128 pix max now
build 001: 2010-05-04
First try:
Strip scorch sources to get clean gr.8 screen.
(and PLOT)
Basic idea: http://wonderfl.net/c/tNGi/fullscreen
+1
View File
@@ -0,0 +1 @@
2002 #################################### #################################### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ########################## ########################## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #################################### ####################################
+1
View File
@@ -0,0 +1 @@
3002 ########### ## ########### ########## #### ########## ######### ###### ######### ######## ######## ######## ####### ########## ####### ###### ############ ###### ##### ############## ##### #### ################ #### ### ################## ### ## #################### ## # ###################### # ######################## ######################## # ###################### # ## #################### ## ### ################## ### #### ################ #### ##### ############## ##### ###### ############ ###### ####### ########## ####### ######## ######## ######## ######### ###### ######### ########## #### ########## ########### ## ###########
+1
View File
@@ -0,0 +1 @@
1002 ######## ######## ########## ########## ############ ############ ###### ## #### ###### ## #### ###### ## #### ###### ## #### ###### ## #### ###### ## #### ################## ################## ## ########## ## ## ########## ## #### ###### #### #### ###### #### #### #### #### #### ############## ############## ########## ##########
+24
View File
@@ -0,0 +1,24 @@
80
1
#### #### ####
#### #### ####
#### #### ####
#### #### ####
#### #### ####
#### #### ####
#### #### ####
### #### ###
### #### ###
#### #### ####
#### #### ####
#### #### ####
#### #### ####
#### #### ####
#### #### ####
#### #### ####
##### #### #####
###### #### ######
###### #### ######
##### #### #####
#### #### ####
+18
View File
@@ -0,0 +1,18 @@
100
1
######
############
##############
####### #
###### #######
###### #####
###### ##
######
###### ##
###### #####
###### #######
###### #
##############
############
######
+18
View File
@@ -0,0 +1,18 @@
111
1
####### # # # # # # # # # ####### # #
# # # # # ## # # # # # # # # #
# # # # # # # # # # # # # # # #
# ####### # # # # # ### # # # # #
# # # ####### # # # # # # # # # #
# # # # # # ## # # # # # # #
# # # # # # # # # # ####### #####
# # # ####### ###### # #
# # # # # # # # #
# # # # # # # # #
# # # # ##### ###### #
####### # # # # # #
# # # # # # # #
# # # ####### # # #
+161
View File
@@ -0,0 +1,161 @@
;-------------------------------------
.MACRO ROLW
ROL :1
ROL :1+1
.ENDM
;-------------------------------------
.MACRO ASLW
ASL :1
ROL :1+1
.ENDM
;-------------------------------------
.MACRO RORW
ROR :1+1
ROR :1
.ENDM
;-------------------------------------
.MACRO LSRW
LSR :1+1
ROR :1
.ENDM
;-------------------------------------
.MACRO VMAIN
; VMAIN #WORD,interrupt.vector
; interrupt.vector:
; 0 - VIMIRQ
; 1 - TIMCNT1
; 2 - TIMCNT2
; 3 - TIMCNT3
; 4 - TIMCNT4
; 5 - TIMCNT5
; 6 - VVBLKI
; 7 - VVBLKD
; 8 - TIMVEC1
; 9 - TIMVEC2
; Initialises Vertical Blank Interrupts
; (works only with system interrupts ON)
;----------
; on 5200 it sets up deferred VBL ONLY for now
sei
lda #$00 ;Disable all interruptes
sta nmien
sta irqen
@ lda vcount
bne @-
mwa #:1 VVBLKD
mva #$40 nmien
;Enable IRQ interrupts
sta pokmsk
sta irqen
cli
.ENDM
;-------------------------------------
.MACRO VDLI
; VDLI #WORD
; Initialises Display List Interrupts
mwa #:1 VDSLST
mva #$C0 NMIEN
.ENDM
;-------------------------------------
.MACRO halt
?stop
lda RANDOM
and #$05
sta COLBAK
jmp ?stop
.ENDM
;-------------------------------------
.MACRO KEY
; KEY
; waits for releasing and pressing "any key"
.ENDM
;-------------------------------------
.MACRO WAIT
; WAIT
; waits one frame (1/50 s(PAL) or 1/60s(NTSC))
?ze LDA VCOUNT
cmp #16 ; if line<16 then wait for line>15 (long VBI protection)
bcc ?ze
sbc #10 ; last lines correction
?wa cmp VCOUNT
bcc ?wa
?wf cmp VCOUNT
bcs ?wf
.ENDM
;-------------------------------------
.macro waitRTC
lda RTCLOK+1
?wa cmp RTCLOK+1
beq ?wa
.endm
;-------------------------------------
.macro negw
; negate the given word (0-a)
;-------------------------------------
sec
lda #$00
sbc :1
sta :1
lda #$00
sbc :1+1
sta :1+1
.endm
;-------------------------------------
.macro randomize
;usage: randomize floor ceiling
;returns (in A) a random .byte between "floor" and "ceiling"
.if :2 < :1
.error "floor higher than ceiling"
.endif
?rand
lda random
cmp #:2+1-:1 ;ceiling
bcs ?rand
.if %1>0 ; if floor = 0 - no add offset
adc #:1
.endif
.endm
;-------------------------------------
.macro phx
txa
pha
.endm
;-------------------------------------
.macro phy
tya
pha
.endm
;-------------------------------------
.macro plx
pla
tax
.endm
;-------------------------------------
.macro ply
pla
tay
.endm
;-------------------------------------
.macro txy
txa
tay
.endm
;-------------------------------------
.macro tyx
tya
tax
.endm
;-------------------------------------
.macro pause
;waits :1 number (byte) of frames
ldx #:1
?PAUSELOOP
wait
dex
bne ?PAUSELOOP
.ENDM
+272
View File
@@ -0,0 +1,272 @@
;****************************************************************************
;* ATARI 5200 CONSOLE *
;* SYSTEM EQUATES *
;****************************************************************************
; based on https://web.archive.org/web/20200831200348/http://www.atarimuseum.com/videogames/consoles/5200/conv_to_5200.html
;
; OS VARIABLES FOR 5200
;
; PAGE 0
POKMSK = $00 ;pokmsk at $00 on Atari 5200 instead of $10 on Atari XL
RTCLOK = $01 ;Actually $01/$02
CRITIC = $03
ATRACT = $04 ;attact at $04 on Atari 5200 instead of $4D on Atari XL
DLPTRS = $05 ;DLPTRS at $05/$06 on Atari 5200 instead of $230 on Atari XL
DMACTLS = $07 ;DMACTLS at $07 on Atari 5200 instead of $22f on Atari XL
SSKCTL = skctl ;There is no shadow on Atari 5200
PCOLR0 EQU $08 ;P0 COLOR
PCOLR1 EQU $09 ;P1 COLOR
PCOLR2 EQU $0a ;P2 COLOR
PCOLR3 EQU $0b ;P3 COLOR
COLOR0 EQU $0c ;COLOR 0
COLOR1 EQU $0d
COLOR2 EQU $0e
COLOR3 EQU $0f
COLOR4 EQU $10
COLBAKS EQU COLOR4
PADDL0 EQU $11
PADDL1 EQU $12
PADDL2 EQU $13
PADDL3 EQU $14
PADDL4 EQU $15
PADDL5 EQU $16
PADDL6 EQU $17
PADDL7 EQU $18
STICK0 = $19 ;There is no stick0 but we will make the analog stick look like a digital one and store it here
STRIG0 = $1a ;There is no strig0 but we will make this the shadow of the TRIG0 ($c010) of GTIA
chbas = $1b ;There is no CHBAS but we will make this the shadow of the CHBASE
CONSOL = $1c ;There are no console keys on Atari 5200, so we replace console h/w reads with a new shadow based on the keypad keys
consol_reset = $07;The constant value representing that no consol key is pressed
kbcode = $1d ;There is no keyboard on the Atari 5200, so replace kbcode h/w reads with a byte variable read based on the keypad keys
; PAGE 2
VIMIRQ EQU $0200 ;IMMED IRQ VECTOR
VVBLKI EQU $0202 ;IMM VBLK NMI VECTOR
VVBLKD EQU $0204 ;DEF VBLK NMI VECTOR
VDSLST EQU $0206 ;DSP LIST NMI VECTOR
VKEYBD EQU $0208 ;POKEY KB IRQ VECTOR
VKEYCNT EQU $020A ;Keypad routine continuation vector
BRKKY EQU $023C ;BREAK KEY VECTOR
VBREAK EQU $020E ;BRK INST IRQ VECTOR
VSERIN EQU $0210 ;POKEY INPUT RDY IRQ
VSEROR EQU $0212 ;POKEY OUTPUT RDY
VSEROC EQU $0214 ;POKEY OUTPUT DONE
VTIMR1 EQU $0216 ;POKEY TIMER 1 IRQ
VTIMR2 EQU $0218 ;POKEY TIMER 2 IRQ
VTIMR4 EQU $021A ;POKEY TIMER 4 IRQ
ROM_SETTINGS = $bfe8 ; game ROM info start (24 bytes total, 20b title, 2b year, 2b start vector)
; HARDWARE REGISTERS
; ---------------------------------------------------------------------------
POKEY EQU $EB00
; ---------------------------------------------------------------------------
;
; READ
;
POT0 EQU POKEY+$00
POT1 EQU POKEY+$01
POT2 EQU POKEY+$02
POT3 EQU POKEY+$03
POT4 EQU POKEY+$04
POT5 EQU POKEY+$05
POT6 EQU POKEY+$06
POT7 EQU POKEY+$07
ALLPOT EQU POKEY+$08
KBCODE_5200 EQU POKEY+$09
RANDOM EQU POKEY+$0a
POTGO EQU POKEY+$0b
SERIN EQU POKEY+$0d
IRQST EQU POKEY+$0e
SKSTAT EQU POKEY+$0f
;
; WRITE
;
AUDF1 EQU POKEY+$00
AUDC1 EQU POKEY+$01
AUDF2 EQU POKEY+$02
AUDC2 EQU POKEY+$03
AUDF3 EQU POKEY+$04
AUDC3 EQU POKEY+$05
AUDF4 EQU POKEY+$06
AUDC4 EQU POKEY+$07
AUDCTL EQU POKEY+$08
STIMER EQU POKEY+$09
SKRES EQU POKEY+$0a
SEROUT EQU POKEY+$0d
IRQEN EQU POKEY+$0e
SKCTL EQU POKEY+$0f
;
;
;
; ---------------------------------------------------------------------------
GTIA EQU $C000
; ---------------------------------------------------------------------------
;
; WRITE
;
HPOSP0 EQU GTIA+$00
HPOSP1 EQU GTIA+$01
HPOSP2 EQU GTIA+$02
HPOSP3 EQU GTIA+$03
HPOSM0 EQU GTIA+$04
HPOSM1 EQU GTIA+$05
HPOSM2 EQU GTIA+$06
HPOSM3 EQU GTIA+$07
SIZEP0 EQU GTIA+$08
SIZEP1 EQU GTIA+$09
SIZEP2 EQU GTIA+$0a
SIZEP3 EQU GTIA+$0b
SIZEM EQU GTIA+$0c
GRAFP0 EQU GTIA+$0d
GRAFP1 EQU GTIA+$0e
GRAFP2 EQU GTIA+$0f
GRAFP3 EQU GTIA+$10
GRAFM EQU GTIA+$11
COLPM0 EQU GTIA+$12
COLPM1 EQU GTIA+$13
COLPM2 EQU GTIA+$14
COLPM3 EQU GTIA+$15
COLPF0 EQU GTIA+$16
COLPF1 EQU GTIA+$17
COLPF2 EQU GTIA+$18
COLPF3 EQU GTIA+$19
COLBAK EQU GTIA+$1a
PRIOR EQU GTIA+$1b
GPRIOR = PRIOR ; no PRIOR shadow (GPRIOR)
VDELAY EQU GTIA+$1c
GRACTL EQU GTIA+$1d
HITCLR EQU GTIA+$1e
CONSOL5200 EQU GTIA+$1f ; no CONSOL in 5200
;
; READ
;
M0PF EQU GTIA+$00
M1PF EQU GTIA+$01
M2PF EQU GTIA+$02
M3PF EQU GTIA+$03
P0PF EQU GTIA+$04
P1PF EQU GTIA+$05
P2PF EQU GTIA+$06
P3PF EQU GTIA+$07
M0PL EQU GTIA+$08
M1PL EQU GTIA+$09
M2PL EQU GTIA+$0a
M3PL EQU GTIA+$0b
P0PL EQU GTIA+$0c
P1PL EQU GTIA+$0d
P2PL EQU GTIA+$0e
P3PL EQU GTIA+$0f
TRIG0 EQU GTIA+$10
TRIG1 EQU GTIA+$11
TRIG2 EQU GTIA+$12
TRIG3 EQU GTIA+$13
PAL EQU GTIA+$14
;
;
; ---------------------------------------------------------------------------
ANTIC EQU $D400
; ---------------------------------------------------------------------------
;
DMACTL EQU ANTIC+$00
CHACTL EQU ANTIC+$01
DLPTR EQU ANTIC+$02
;DLISTH EQU ANTIC+$03
HSCROL EQU ANTIC+$04
VSCROL EQU ANTIC+$05
PMBASE EQU ANTIC+$07
CHBASE EQU ANTIC+$09
WSYNC EQU ANTIC+$0a
VCOUNT EQU ANTIC+$0b
PENH EQU ANTIC+$0c
PENV EQU ANTIC+$0d
NMIEN EQU ANTIC+$0e
NMIRES EQU ANTIC+$0f
NMIST EQU ANTIC+$0f
;
; ---------------------------------------------------------------------------
; Atari ANTIC chip display list equates
; ---------------------------------------------------------------------------
;
JUMP EQU $01 ; display list jump instruction (3 byte)
JVB EQU $41 ; display list jump and wait for vblank instruction (3)
;
SCH EQU $10 ; display list horizontal scrolling
SCV EQU $20 ; display list vertical scrolling
LMS EQU $40 ; display list load memory scan instruction (3 byte)
DLII EQU $80 ; display list interrupt instruction
;
SKIP1 EQU $00 ; display list skip 1 scan line instruction
SKIP2 EQU $10 ; display list skip 2 scan lines instruction
SKIP3 EQU $20 ; display list skip 3 scan lines instruction
SKIP4 EQU $30 ; display list skip 4 scan lines instruction
SKIP5 EQU $40 ; display list skip 5 scan lines instruction
SKIP6 EQU $50 ; display list skip 6 scan lines instruction
SKIP7 EQU $60 ; display list skip 7 scan lines instruction
SKIP8 EQU $70 ; display list skip 8 scan lines instruction
;
MODE2 EQU $02 ; display list mode 2
MODE4 EQU $04 ; display list mode 4
MODE8 EQU $08 ; display list mode 8
MODEE EQU $0E ; display list mode E
MODEF EQU $0F ; display list mode F
; ---------------------------------------------------------------------------
; ENUMS
; ---------------------------------------------------------------------------
.enum @dmactl
blank = %00
narrow = %01
standard= %10
wide = %11
missiles= %100
players = %1000
lineX1 = %10000
lineX2 = %00000
dma = %100000
.ende
scr48 = @dmactl(wide|dma|players|missiles|lineX1)
scr40 = @dmactl(standard|dma|players|missiles|lineX1)
scr32 = @dmactl(narrow|dma|players|missiles|lineX1)
.enum @pmcntl
missiles= %1
players = %10
trigs = %100
.ende
.enum @gtictl
prior0 = %0
prior1 = %1
prior2 = %10
prior4 = %100
prior8 = %1000
ply5 = %10000 ; Fifth Player Enable
mlc = %100000 ; Multiple Color Player Enable
mode9 = %01000000
mode10 = %10000000
mode11 = %11000000
.ende
/*
; commented out to be replaced by the application specific A800 --> 5200 keypad translation
.enum @kbcode
_0
_1
_2
_3
_4
_5
_6
_7
_8
_9
_asterisk = $0a
_hash = $0b
_start = $0c
_pause = $0d
_reset = $0e
.ende
*/
+738
View File
@@ -0,0 +1,738 @@
;****************************************************************************
;* ATARI PERSONAL COMPUTER *
;* SYSTEM EQUATES *
;****************************************************************************
;
; OPERATING SYSTEM EQUATE FILE
;
; MODULE ORIGIN TABLE
;
; VECTOR TABLE
;
; HANDLER ENTRY POINTS ARE CALL-
; ED OUT IN THE FOLLOWING VECTOR
; TABLE. THESE ARE THE ADDRESSES
; MINUS ONE.
;
; EXAMPLE FOR EDITOR
;
; E400 OPEN
; 2 CLOSE
; 4 GET
; 6 PUT
; 8 STATUS
; A SPECIAL
; C JUMP TO POWER ON INIT
; F NOT USED
;
EDITRV EQU $E400 ;EDITOR
SCRENV EQU $E410 ;TV SCREEN
KEYBDV EQU $E420 ;KEYBOARD
PRINTV EQU $E430 ;PRINTER
CASETV EQU $E440 ;CASSETTE
;
; JUMP VECTOR TABLE
;
; THE FOLLOWING IS A TABLE OF
; JUMP INSTRUCTIONS TO VARIOUS
; ENTRY POINTS IN THE OPERATING
; SYSTEM
;
DISKIV EQU $E450 ;DISK INITIALIZATION
DSKINV EQU $E453 ;DISK INTERFACE
CIOV EQU $E456 ;CENTRAL I/O ROUTINE
SIOV EQU $E459 ;SERIAL I/O ROUTINE
SETVBV EQU $E45C ;SET SYSTEM TIMERS
SYSVBV EQU $E45F ;VBLANK CALCULATIONS
XITVBV EQU $E462 ;EXIT VBLANK
SIOINV EQU $E465 ;SIO INITIALIZATION
SENDEV EQU $E468 ;SEND ENABLE ROUTINE
INTINV EQU $E46B ;INTRPT HANDLER INIT
CIOINV EQU $E46E ;CIO INITIALIZATION
BLKBDV EQU $E471 ;BLACKBOARD MODE
WARMSV EQU $E474 ;WARM START VECTOR
COLDSV EQU $E477 ;COLD START VECTOR
RBLOKV EQU $E47A ;CASSETTE READ BLOCK
CSOPIV EQU $E47D ;CASSETTE INPUT OPEN
;
; VECTORS ADDED FOR 800XL
;
PUPDIV EQU $E480 ;POWER UP DISPLAY
SLFTSV EQU $E483 ;SELF TEST PROGRAM
PHENTV EQU $E486 ;UPLOADED HANDLER ENTER
PHULNV EQU $E489 ;UPLOADED HANDLER UNLINK
PHINIV EQU $E48C ;UPLOADED HANDLER INIT
;
; OPERATING SYSTEM EQUATES
;
; COMMAND CODES FOR IOCBS
;
_OPEN EQU $03 ;OPEN FOR I/O
GETREC EQU $05 ;GET RECORD (TEXT)
GETCHR EQU $07 ;GET CHARACTER(S)
PUTREC EQU $09 ;PUT RECORD (TEXT)
PUTCHR EQU $0B ;PUT CHARACTER(S)
_CLOSE EQU $0C ;CLOSE DEVICE
STATIS EQU $0D ;STATUS REQUEST
SPECIL EQU $0E ;SPECIAL ENTRY COMMAND
;
; SPECIAL ENTRY COMMANDS
;
DRAWLN EQU $11 ;DRAW LINE
FILLIN EQU $12 ;FILL
RENAME EQU $20 ;RENAME DISK FILE
DELETE EQU $21 ;DELETE DISK FILE
FORMAT EQU $22 ;FORMAT DISK
LOCKFL EQU $23 ;LOCK FILE
UNLOCK EQU $24 ;UNLOCK FILE
POINT EQU $25 ;POINT SECTOR
NOTE EQU $26 ;NOTE SECTOR
IOCFRE EQU $FF ;IOCB "FREE"
;
; AUX1 EQUATES
; () INDICATES WHICH DEVICES
;
APPEND EQU $01 ;WR APPEND(D)-SCN RD(E)
DIRECT EQU $02 ;OPEN DIRECTORY(D)
OPNIN EQU $04 ;OPEN FOR INPUT(ALL)
OPNOT EQU $08 ;OPEN FOR OUTPUT(ALL)
OPNINO EQU $0C ;OPEN INPUT&OUTPUT(ALL)
MXDMOD EQU $10 ;OPEN MIXED MODE(E,S)
INSCLR EQU $20 ;OPEN W/O CLEAR(E,S)
;
; DEVICE NAMES
;
SCREDT EQU 'E' ;SCREEN EDITOR (R/W)
KBD EQU 'K' ;KEYBOARD (R ONLY)
DISPLY EQU 'S' ;SCREEN DISPLAY (R/W)
PRINTR EQU 'P' ;PRINTER (W ONLY)
CASSET EQU 'C' ;CASSETTE (R/W)
RS232 EQU 'R' ;MODEM (R/W)
DISK EQU 'D' ;DISK (R/W)
;
;
;
; OPERATING SYSTEM STATUS CODES
;
SUCCES EQU $01 ;SUCCESSFUL OPERATION
BRKABT EQU $80 ;BREAK KEY ABORT
PRVOPN EQU $81 ;IOCB ALREADY OPEN
NONDEV EQU $82 ;NON-EXISTANT DEVICE
WRONLY EQU $83 ;IOCB OPEN FOR W ONLY
NVALID EQU $84 ;INVALID COMMAND
NOTOPN EQU $85 ;DEVICE/FILE NOT OPEN
BADIOC EQU $86 ;INVALID IOCB #
RDONLY EQU $87 ;IOCB OPEN FOR R ONLY
EOFERR EQU $88 ;END OF FILE
TRNRCD EQU $89 ;TRUNCATED RECORD
TIMOUT EQU $8A ;PERIPHERAL TIMEOUT
DNACK EQU $8B ;DEVICE NO ACKNOWLEDGE
FRMERR EQU $8C ;SERIAL BUS FRAME ERR
CRSROR EQU $8D ;CURSOR OVERRANGE
OVRRUN EQU $8E ;SERIAL DATA OVERRUN
CHKERR EQU $8F ;SERIAL CHECKSUM ERR
DERRER EQU $90 ;PERIPHRAL DEVICE ERR
BADMOD EQU $91 ;BAD SCREEN MODE #
FNCNOT EQU $92 ;NONEXISTANT FUNCTION
SCRMEM EQU $93 ;SCREEN MEM TOO SMALL
FILENF EQU $AA ;FILE NOT FOUND
;
; PAGE ZERO RAM ASSIGNMENTS
;
LNFLG EQU $00 ;LINBUG RAM
NGFLAG EQU $01 ;POWER-UP SELF-TEST FLAG
;
; THESE LOCATIONS NOT CLEARED
;
CASINI EQU $02 ;CASSETTE INIT LOC
RAMLO EQU $04 ;RAM POINTER MEM TST
TRAMSZ EQU $06 ;TEMP REG RAM SIZE
TSTDAT EQU $07 ;RAM TEST DATA REG
;
;CLEARED ON COLDSTART ONLY
;
WARMST EQU $08 ;WARM START FLAG
BOOTQ EQU $09 ;SUCCESSFUL BOOT FLG
DOSVEC EQU $0A ;DOS START VECTOR
DOSINI EQU $0C ;DOS INIT ADDRESS
APPMHI EQU $0E ;APPL MEM HI LIMIT
;
;CLEARED ON COLD OR WARM START
;
POKMSK EQU $10 ;MASK POKEY IRQ
BRKKEY EQU $11 ;BREAK KEY FLAG
RTCLOK EQU $12 ;REAL TIME CLOCK
BUFADR EQU $15 ;INDIRECT BUFF ADDR
ICCOMT EQU $17 ;COMMAND FOR VECTOR
DSKFMS EQU $18 ;FMS POINTER
DSKUTL EQU $1A ;DISK UTILITIES PTR
ABUFPT EQU $1C ;RESERVED
ICHIDZ EQU $20 ;HANDLER INDEX #
ICDNOZ EQU $21 ;DEVICE NUMBER
ICCOMZ EQU $22 ;COMMAND CODE
ICSTAZ EQU $23 ;STATUS RETURN
ICBALZ EQU $24 ;BUFFER ADDRESS
ICBAHZ EQU $25
ICPTLZ EQU $26 ;PUT BYTE ROUTINE-1
ICPTHZ EQU $27
ICBLLZ EQU $28 ;BUFFER LENGTH
ICBLHZ EQU $29
ICAX1Z EQU $2A ;AUXILIARY BYTES
ICAX2Z EQU $2B
ICSPRZ EQU $2C ;SPARE BYTES
ICIDNO EQU $2E ;IOCB # X 16
CIOCHR EQU $2F ;CIO CHARACTER BYTE
STATUS EQU $30 ;INTERNAL STATUS
CHKSUM EQU $31 ;CHECKSUM
BUFRLO EQU $32 ;DATA BUFFER LO BYTE
BUFRHI EQU $33 ;DATA BUFFER HI BYTE
BFENLO EQU $34 ;NEXT BYTE PAST DATA
BFENHI EQU $35 ;BUFFER (HI & LO)
LTEMP EQU $36 ;LOADER TEMP
BUFRFL EQU $38 ;DATA BUFFR FULL FLG
RECVDN EQU $39 ;RECIEVE DONE FLAG
XMTDON EQU $3A ;XMIT DONE FLAG
CHKSNT EQU $3B ;CHECKSUM SENT FLAG
NOCKSM EQU $3C ;NO CHKSUM SENT FLAG
;BPTR EQU $3D ;CASSETTE DATA INDEX
FTYPE EQU $3E ;INTERRECORD GAP TYPE
FEOF EQU $3F ;END OF FILE FLAG
FREQ EQU $40 ;BEEP COUNT
SOUNDR EQU $41 ;NOISY I/O FLAG
CRITIC EQU $42 ;CRITICAL MODE
FMSZPG EQU $43 ;FMS ZERO PAGE
ZCHAIN EQU $4A ;HANDLER LOADER TEMP
DSTAT EQU $4C ;DISPLAY STATUS
ATRACT EQU $4D ;ATTRACT FLAG
DRKMSK EQU $4E ;DARK ATTRACT MASK
COLRSH EQU $4F ;COLOR SHIFTER
TMPCHR EQU $50 ;TEMP STORAGE
HOLD1 EQU $51 ;TEMP STORAGE
LMARGN EQU $52 ;LEFT MARGIN (1)
RMARGN EQU $53 ;RIGHT MARGIN (38)
ROWCRS EQU $54 ;CURSOR COUNTERS
COLCRS EQU $55
DINDEX EQU $57 ;DISPLAY MODE #
SAVMSC EQU $58 ;SCREEN MEM ADDR
OLDROW EQU $5A ;DRAW START POSIT
OLDCOL EQU $5B
OLDCHR EQU $5D ;DATA UNDER CURSOR
OLDADR EQU $5E ;CURSOR MEM ADDR
FKDEF EQU $60 ;FUNC KEY DEFEAT POINTER
PALNTS EQU $62 ;PAL/NTSC FLAG
LOGCOL EQU $63 ;COL IN LOGICAL LINE
ADRESS EQU $64 ;TEMP STORAGE
MLTEMP EQU $66 ;TEMP STORAGE
SAVADR EQU $68 ;TEMP STORAGE
RAMTOP EQU $6A ;AVAILABLE RAM PAGES
BUFCNT EQU $6B ;BUFFER COUNT
BUFSTR EQU $6C ;EDITOR GETCH POINTR
BITMSK EQU $6E ;BIT MASK
SHFAMT EQU $6F ;PIXEL JUSTIFICATION
ROWAC EQU $70 ;ROW ACCUMULATOR
COLAC EQU $72 ;COLUMN ACCUMULATOR
ENDPT EQU $74 ;LINE LENGTH
DELTAR EQU $76 ;DELTA ROW
DELTAC EQU $77 ;DELTA COLUMN
KEYDEF EQU $79 ;KEY DEFEAT POINTER
SWPFLG EQU $7B ;SPLIT SCN CURS CNTL
HOLDCH EQU $7C ;KB CHAR TEMP HOLD
INSDAT EQU $7D ;TEMP STORAGE
COUNTR EQU $7E ;DRAW ITERATION CNT
;
; 80-FF ARE RESERVED FOR USER
;
; NOTE: SEE FLOATING POINT
; SUBROUTINE AREA FOR ZERO
; PAGE CELLS
;
; PAGE 1 - HARDWARE STACK
;
; PAGE TWO RAM ASSIGNMENTS
;
VDSLST EQU $0200 ;DSP LIST NMI VECTOR
VPRCED EQU $0202 ;PROCEED IRQ VECTOR
VINTER EQU $0204 ;INTERUPT IRQ VECTOR
VBREAK EQU $0206 ;BRK INST IRQ VECTOR
VKEYBD EQU $0208 ;POKEY KB IRQ VECTOR
VSERIN EQU $020A ;POKEY INPUT RDY IRQ
VSEROR EQU $020C ;POKEY OUTPUT RDY
VSEROC EQU $020E ;POKEY OUTPUT DONE
VTIMR1 EQU $0210 ;POKEY TIMER 1 IRQ
VTIMR2 EQU $0212 ;POKEY TIMER 2 IRQ
VTIMR4 EQU $0214 ;POKEY TIMER 4 IRQ
VIMIRQ EQU $0216 ;IMMED IRQ VECTOR
CDTMV1 EQU $0218 ;COUNT DOWN TIMER 1
CDTMV2 EQU $021A ;COUNT DOWN TIMER 2
CDTMV3 EQU $021C ;COUNT DOWN TIMER 3
CDTMV4 EQU $021E ;COUNT DOWN TIMER 4
CDTMV5 EQU $0220 ;COUNT DOWN TIMER 5
VVBLKI EQU $0222 ;IMM VBLK NMI VECTOR
VVBLKD EQU $0224 ;DEF VBLK NMI VECTOR
CDTMA1 EQU $0226 ;CDTMV1 JSR ADDRESS
CDTMA2 EQU $0228 ;CDTMV2 JSR ADDRESS
CDTMF3 EQU $022A ;CDTMV3 FLAG
SRTIMR EQU $022B ;SOFTWARE REPEAT TMR
CDTMF4 EQU $022C ;CDTMV4 FLAG
INTEMP EQU $022D ;IAN'S TEMP
CDTMF5 EQU $022E ;CDTMV5 FLAG
DMACTLS EQU $022F ;SAVE DMACTL REG
DLPTRS EQU $0230 ;SAVE DISP LIST LO
;SDLSTH EQU $0231 ;SAVE DISP LIST HI
SSKCTL EQU $0232 ;SKCTL REGISTER RAM
LCOUNT EQU $0233 ;LOADER TEMP
LPENH EQU $0234 ;LIGHT PEN HORIZONTAL
LPENV EQU $0235 ;LIGHT PEN VERTICAL
BRKKY EQU $0236 ;BREAK KEY VECTOR
RELADR EQU $0238 ;LOADER REL ADDR
CDEVIC EQU $023A ;COMMAND BUFFER-DEV
CCOMND EQU $023B ;COMMAND BUFFER-CMND
CAUX1 EQU $023C ;COMMAND BUFFER AUX1
CAUX2 EQU $023D ;COMMAND BUFFER AUX2
;TEMP EQU $023E ;TEMPORARY RAM CELL
ERRFLG EQU $023F ;DEVICE ERROR FLAG
DFLAGS EQU $0240 ;DISK FLAGS(SECTOR1)
DBSECT EQU $0241 ;# DISK BOOT SECTORS
BOOTAD EQU $0242 ;DISK BOOT ADDRESS
COLDST EQU $0244 ;COLDSTART FLAG 1=CS
RECLEN EQU $0245 ;LOADER LENGTH
DSKTIM EQU $0246 ;DISK TIME OUT REG
VSFLAG EQU $026C ;FINE SCROLL TEMP
KEYDIS EQU $026D ;KEY DISABLE FLAG
FINE EQU $026E ;FINE SCROLL ENABLE(A1200)
GPRIOR EQU $026F ;GLOBAL PRIORITY
PADDL0 EQU $0270 ;POT 0 RAM CELL
PADDL1 EQU $0271
PADDL2 EQU $0272
PADDL3 EQU $0273
STICK0 EQU $0278 ;JOYSTICK 0 RAM CELL
STICK1 EQU $0279
PTRIG0 EQU $027C ;PADDLE TRIGGER 0
PTRIG1 EQU $027D
PTRIG2 EQU $027E
PTRIG3 EQU $027F
STRIG0 EQU $0284 ;JOYSTICK TRIGGER 0
STRIG1 EQU $0285
HIBYTE EQU $0288 ;LOADER
WMODE EQU $0289 ;CASSETTE R/W MODE
BLIM EQU $028A ;CASSETTE RECORD SIZE
IMASK EQU $028B
JVECK EQU $028C ;JUMP VECTOR
NEWADR EQU $028E ;LOADER NEW ADDRESS
TXTROW EQU $0290 ;TEXT ROWCRS
TXTCOL EQU $0291 ;TEXT COLCRS
TINDEX EQU $0293 ;TEXT INDEX
TXTMSC EQU $0294 ;TEXT WINDOW MEM ADD
TXTOLD EQU $0296 ;TEXT OLDROW & COL
CRETRY EQU $029C ;# COMMAND RETRIES
HOLD3 EQU $029D
SUBTMP EQU $029E
HOLD2 EQU $029F
DMASK EQU $02A0 ;PIXEL LOCATION MASK
TMPLBT EQU $02A1
ESCFLG EQU $02A2 ;ESCAPE FLAG
TABMAP EQU $02A3 ;TAB STOP MAP
LOGMAP EQU $02B2 ;LINE START BIT MAP
INVFLG EQU $02B6 ;INVERSE VIDEO FLAG
FILFLG EQU $02B7 ;FILL FLAG FOR DRAW
TMPROW EQU $02B8
TMPCOL EQU $02B9
SCRFLG EQU $02BB ;SET IF SCROLLING
HOLD4 EQU $02BC ;TEMP USED BY DRAW
DRETRY EQU $02BD ;# OF DEVICE RETRIES
SHFLOK EQU $02BE ;SHIFT/CTL LOCK FLAG
BOTSCR EQU $02BF ;BOTTOM OF SCREEN
PCOLR0 EQU $02C0 ;P0 COLOR
PCOLR1 EQU $02C1 ;P1 COLOR
PCOLR2 EQU $02C2 ;P2 COLOR
PCOLR3 EQU $02C3 ;P3 COLOR
COLOR0 EQU $02C4 ;COLOR 0
COLOR1 EQU $02C5
COLOR2 EQU $02C6
COLOR3 EQU $02C7
COLOR4 EQU $02C8
COLBAKS EQU COLOR4
RUNADR EQU $02C9 ;LOADER
HIUSED EQU $02CB ;LOADER
ZHIUSE EQU $02CD ;LOADER
GBYTEA EQU $02CF ;LOADER
LOADAD EQU $02D1 ;LOADER
ZLOADA EQU $02D3 ;LOADER
DSCTLN EQU $02D5 ;DISK SECTOR LENGTH
ACMISR EQU $02D7 ;RESERVED
KRPDEL EQU $02D9 ;KEY REPEAT DELAY
KEYREP EQU $02DA ;KEY REPEAT RATE(VBLANKS)
NOCLIK EQU $02DB ;CLICK ENABLE/DISABLE
HELPFG EQU $02DC ;HELP KEY FLAG
DMASAV EQU $02DD ;DMA SAVE STATE
PBPNT EQU $02DE ;PRINT BUFFER POINTER
PBUFSZ EQU $02DF ;PRINT BUFFER SIZE
DOSRUN EQU $02E0 ;DOS RUN/INIT ADDRESSES
RAMSIZ EQU $02E4 ;RAM SIZE-HIGH BYTE
MEMTOP EQU $02E5 ;TOP OF AVAIL MEMORY
MEMLO EQU $02E7 ;BOTTOM OF AVAIL MEM
HNDLOD EQU $02E9 ;POLL FLAG (1200)
DVSTAT EQU $02EA ;STATUS BUFFER
CBAUDL EQU $02EE ;CASSETTE BAUD RATE
CBAUDH EQU $02EF
CRSINH EQU $02F0 ;CURSOR INHIBIT 0=ON
KEYDEL EQU $02F1 ;KEY DELAY
CH1 EQU $02F2 ;PRIOR KB CHAR CODE
CHACT EQU $02F3 ;CHACTL REGISTER RAM
CHBAS EQU $02F4 ;CHBAS REGISTER RAM
NEWROW EQU $02F5 ;POINT DRAW GOES TO
NEWCOL EQU $02F6
ROWINC EQU $02F8 ;ROW INCREMENT VALUE
COLINC EQU $02F9 ;COL INCREMENT VALUE
CHAR EQU $02FA ;INTERNAL CHAR CODE
ATACHR EQU $02FB ;ATASCII CHARACTER
CHKEY EQU $02FC ;KB CHAR CODE (FIFO)
FILDAT EQU $02FD ;RIGHT FILL DATA
DSPFLG EQU $02FE ;DISPLAY FLAG
SSFLAG EQU $02FF ;START/STOP FLAG
;
; PAGE THREE RAM ASSIGNMENTS
;
DDEVIC EQU $0300 ;BUS I.D. NUMBER
DUNIT EQU $0301 ;UNIT NUMBER
DCOMND EQU $0302 ;BUS COMMAND
DSTATS EQU $0303 ;COMMAND TYPE/STATUS
DBUFLO EQU $0304 ;DATA BUFFER LO BYTE
DBUFHI EQU $0305 ;DATA BUFFER HI BYTE
DTIMLO EQU $0306 ;DEVICE TIMEOUT SECS
DUNUSE EQU $0307 ;UNUSED BYTE
DBYTLO EQU $0308 ;# OF BYTES XFERRED
DBYTHI EQU $0309
DAUX1 EQU $030A ;COMMAND AUX BYTE 1
DAUX2 EQU $030B ;COMMAND AUX BYTE 2
TIMER1 EQU $030C ;INITIAL TIMER VALUE
JMPERS EQU $030E ;OPTIONS (1200)
CASFLG EQU $030F ;CASSETE MODE IF SET
TIMER2 EQU $0310 ;FINAL TIMER VALUE
;TEMP1 EQU $0312 ;TEMP STORAGE
;TEMP2 EQU $0313 ;TEMP STORAGE
PTIMOT EQU $0314 ;PRINTER TIMEOUT REG
;TEMP3 EQU $0315 ;TEMP STORAGE
SAVIO EQU $0316 ;SAVE SERIAL IN DATA
TIMFLG EQU $0317 ;TIMEOUT FLAG C BAUD
STACKP EQU $0318 ;SIO STACK PTR SAVE
TSTAT EQU $0319 ;TEMP STATUS HOLDER
HATABS EQU $031A ;HANDLER ADDR TABLE
PUPBT1 EQU $033D ;POWER/UP RESET
PUPBT2 EQU $033E
PUPBT3 EQU $033F
ICHID EQU $0340 ;HANDLER INDEX #
ICDNO EQU $0341 ;DEVICE NUMBER
ICCOM EQU $0342 ;COMMAND CODE
ICSTA EQU $0343 ;STATUS
ICBAL EQU $0344 ;BUFFER ADDR LO BYTE
ICBAH EQU $0345 ;BUFFER ADDR HI BYTE
ICPTL EQU $0346 ;PUT ROUTINE ADDR-1
ICPTH EQU $0347
ICBLL EQU $0348 ;BUFFER LENGTH LO
ICBLH EQU $0349 ;BUFFER LENGTH HI
ICAX1 EQU $034A ;AUX BYTE 1
ICAX2 EQU $034B ;AUX BYTE 2
ICSPR EQU $034C ;SPARE BYTES
PRNBUF EQU $03C0 ;PRINTER BUFFER (40 BYTES)
SUPERF EQU $03E8 ;SCREEN EDITOR
CKEY EQU $03E9 ;START KEY FLAG
CASSBT EQU $03EA ;CASSETTE BOOT FLAG
CARTCK EQU $03EB ;CARTRIDGE CHECKSUM
ACMVAR EQU $03ED ;RESERVED
MINTLK EQU $03F9 ;RESERVED
GINTLK EQU $03FA ;CART INTERLOCK
CHLINK EQU $03FB ;HANDLER CHAIN
;
; PAGE FOUR RAM ASSIGNMENTS
;
CASBUF EQU $03FD ;CASSETTE BUFFER (131 BYTES)
USAREA EQU $0480 ;USER AREA
;
; PAGE FIVE AND SIX ARE RESERVED
; FOR USER WORK SPACE
;
; COLLEEN MNEMONICS
;
; ---------------------------------------------------------------------------
POKEY EQU $D200
; ---------------------------------------------------------------------------
;
; READ
;
POT0 EQU POKEY+$00
POT1 EQU POKEY+$01
POT2 EQU POKEY+$02
POT3 EQU POKEY+$03
POT4 EQU POKEY+$04
POT5 EQU POKEY+$05
POT6 EQU POKEY+$06
POT7 EQU POKEY+$07
ALLPOT EQU POKEY+$08
KBCODE EQU POKEY+$09
RANDOM EQU POKEY+$0a
POTGO EQU POKEY+$0b
SERIN EQU POKEY+$0d
IRQST EQU POKEY+$0e
SKSTAT EQU POKEY+$0f
;
; WRITE
;
AUDF1 EQU POKEY+$00
AUDC1 EQU POKEY+$01
AUDF2 EQU POKEY+$02
AUDC2 EQU POKEY+$03
AUDF3 EQU POKEY+$04
AUDC3 EQU POKEY+$05
AUDF4 EQU POKEY+$06
AUDC4 EQU POKEY+$07
AUDCTL EQU POKEY+$08
STIMER EQU POKEY+$09
SKRES EQU POKEY+$0a
SEROUT EQU POKEY+$0d
IRQEN EQU POKEY+$0e
SKCTL EQU POKEY+$0f
;
;
;
; ---------------------------------------------------------------------------
GTIA EQU $D000
; ---------------------------------------------------------------------------
;
; WRITE
;
HPOSP0 EQU GTIA+$00
HPOSP1 EQU GTIA+$01
HPOSP2 EQU GTIA+$02
HPOSP3 EQU GTIA+$03
HPOSM0 EQU GTIA+$04
HPOSM1 EQU GTIA+$05
HPOSM2 EQU GTIA+$06
HPOSM3 EQU GTIA+$07
SIZEP0 EQU GTIA+$08
SIZEP1 EQU GTIA+$09
SIZEP2 EQU GTIA+$0a
SIZEP3 EQU GTIA+$0b
SIZEM EQU GTIA+$0c
GRAFP0 EQU GTIA+$0d
GRAFP1 EQU GTIA+$0e
GRAFP2 EQU GTIA+$0f
GRAFP3 EQU GTIA+$10
GRAFM EQU GTIA+$11
COLPM0 EQU GTIA+$12
COLPM1 EQU GTIA+$13
COLPM2 EQU GTIA+$14
COLPM3 EQU GTIA+$15
COLPF0 EQU GTIA+$16
COLPF1 EQU GTIA+$17
COLPF2 EQU GTIA+$18
COLPF3 EQU GTIA+$19
COLBAK EQU GTIA+$1a
PRIOR EQU GTIA+$1b
VDELAY EQU GTIA+$1c
GRACTL EQU GTIA+$1d
HITCLR EQU GTIA+$1e
CONSOL EQU GTIA+$1f
;
; READ
;
M0PF EQU GTIA+$00
M1PF EQU GTIA+$01
M2PF EQU GTIA+$02
M3PF EQU GTIA+$03
P0PF EQU GTIA+$04
P1PF EQU GTIA+$05
P2PF EQU GTIA+$06
P3PF EQU GTIA+$07
M0PL EQU GTIA+$08
M1PL EQU GTIA+$09
M2PL EQU GTIA+$0a
M3PL EQU GTIA+$0b
P0PL EQU GTIA+$0c
P1PL EQU GTIA+$0d
P2PL EQU GTIA+$0e
P3PL EQU GTIA+$0f
TRIG0 EQU GTIA+$10
TRIG1 EQU GTIA+$11
TRIG2 EQU GTIA+$12
TRIG3 EQU GTIA+$13
PAL EQU GTIA+$14
;
;
; ---------------------------------------------------------------------------
ANTIC EQU $D400
; ---------------------------------------------------------------------------
;
DMACTL EQU ANTIC+$00
CHACTL EQU ANTIC+$01
DLPTR EQU ANTIC+$02
;DLISTH EQU ANTIC+$03
HSCROL EQU ANTIC+$04
VSCROL EQU ANTIC+$05
PMBASE EQU ANTIC+$07
CHBASE EQU ANTIC+$09
WSYNC EQU ANTIC+$0a
VCOUNT EQU ANTIC+$0b
PENH EQU ANTIC+$0c
PENV EQU ANTIC+$0d
NMIEN EQU ANTIC+$0e
NMIRES EQU ANTIC+$0f
NMIST EQU ANTIC+$0f
;
;
; ---------------------------------------------------------------------------
PIA EQU $D300
; ---------------------------------------------------------------------------
;
PORTA EQU PIA+0
PORTB EQU PIA+1
PACTL EQU PIA+2
PBCTL EQU PIA+3
;
; ---------------------------------------------------------------------------
; Atari ANTIC chip display list equates
; ---------------------------------------------------------------------------
;
JUMP EQU $01 ; display list jump instruction (3 byte)
JVB EQU $41 ; display list jump and wait for vblank instruction (3)
;
SCH EQU $10 ; display list horizontal scrolling
SCV EQU $20 ; display list vertical scrolling
LMS EQU $40 ; display list load memory scan instruction (3 byte)
DLII EQU $80 ; display list interrupt instruction
;
SKIP1 EQU $00 ; display list skip 1 scan line instruction
SKIP2 EQU $10 ; display list skip 2 scan lines instruction
SKIP3 EQU $20 ; display list skip 3 scan lines instruction
SKIP4 EQU $30 ; display list skip 4 scan lines instruction
SKIP5 EQU $40 ; display list skip 5 scan lines instruction
SKIP6 EQU $50 ; display list skip 6 scan lines instruction
SKIP7 EQU $60 ; display list skip 7 scan lines instruction
SKIP8 EQU $70 ; display list skip 8 scan lines instruction
;
MODE2 EQU $02 ; display list mode 2
MODE4 EQU $04 ; display list mode 4
MODE8 EQU $08 ; display list mode 8
MODEE EQU $0E ; display list mode E
MODEF EQU $0F ; display list mode F
; ---------------------------------------------------------------------------
; ENUMS
; ---------------------------------------------------------------------------
.enum @dmactl
blank = %00
narrow = %01
standard= %10
wide = %11
missiles= %100
players = %1000
lineX1 = %10000
lineX2 = %00000
dma = %100000
.ende
scr48 = @dmactl(wide|dma|players|missiles|lineX1)
scr40 = @dmactl(standard|dma|players|missiles|lineX1)
scr32 = @dmactl(narrow|dma|players|missiles|lineX1)
.enum @pmcntl
missiles= %1
players = %10
trigs = %100
.ende
.enum @gtictl
prior0 = %0
prior1 = %1
prior2 = %10
prior4 = %100
prior8 = %1000
ply5 = %10000 ; Fifth Player Enable
mlc = %100000 ; Multiple Color Player Enable
mode9 = %01000000
mode10 = %10000000
mode11 = %11000000
.ende
.enum @consol
start = %001
select = %010
option = %100
.ende
; ---------------------------------------------------------------------------
; KBCODEs
; ---------------------------------------------------------------------------
.enum @kbcode
_none = 255
_esc = 28
_1 = 31
_2 = 30
_3 = 26
_4 = 24
_5 = 29
_6 = 27
_7 = 51
_8 = 53
_9 = 48
_0 = 50
_lt = 54
_gt = 55
_del = 52
_tab = 44
_Q = 47
_W = 46
_E = 42
_R = 40
_T = 45
_Y = 43
_U = 11
_I = 13
_O = 8
_P = 10
_min = 14
_up = 14 ; cursor function
_eq = 15
_down = 15 ; cursor function
_ret = 12
_A = 63
_S = 62
_D = 58
_F = 56
_G = 61
_H = 57
_J = 1
_K = 5
_L = 0
_semicolon = 2
_plus = 6
_left = 6 ; cursor function
_asterisk = 7
_right = 7 ; cursor function
_caps = 60
_Z = 23
_X = 22
_C = 18
_V = 16
_B = 21
_N = 36
_M = 37
_comma = 32
_dot = 34
_slash = 38
_atari = 39
_help = 17
_F1 = 3
_F2 = 4
_F3 = 19
_F4 = 20
_space = 33
.ende
; ---------------------------------------------------------------------------
; MISCELLANEOUS
; ---------------------------------------------------------------------------
EOL = $9b
CR_PC = 13 ; PC CR code
LF_PC = 10 ; PC LF code
+182
View File
@@ -0,0 +1,182 @@
;-------------------------------------
.MACRO ROLW
ROL :1
ROL :1+1
.ENDM
;-------------------------------------
.MACRO ASLW
ASL :1
ROL :1+1
.ENDM
;-------------------------------------
.MACRO RORW
ROR :1+1
ROR :1
.ENDM
;-------------------------------------
.MACRO LSRW
LSR :1+1
ROR :1
.ENDM
;-------------------------------------
.MACRO VMAIN
; VMAIN #WORD,interrupt.vector
; interrupt.vector:
; 0 - VIMIRQ
; 1 - TIMCNT1
; 2 - TIMCNT2
; 3 - TIMCNT3
; 4 - TIMCNT4
; 5 - TIMCNT5
; 6 - VVBLKI
; 7 - VVBLKD
; 8 - TIMVEC1
; 9 - TIMVEC2
; Initialises Vertical Blank Interrupts
; (works only with system interrupts ON)
LDY # <:1
LDX # >:1
LDA #:2
JSR SETVBV
.ENDM
;-------------------------------------
.MACRO VDLI
; VDLI #WORD
; Initialises Display List Interrupts
LDY # <:1
LDX # >:1
LDA #$C0
STY $0200
STX $0201
STA NMIEN
.ENDM
;-------------------------------------
.MACRO VDL
; VDL #WORD
; Changes Display List addres
; and sets width of the screen
; vdl dl,$01 - narrow screen (32 bytes)
; vdl dl,$02 - normal screen (40 bytes)
; vdl dl,$03 - wide screen (48 bytes)
; (works only with system interrupts ON)
.if %0=2
lda dmactls
and #$fc
ora #%2
sta dmactls
.endif
LDA # <%1
STA DLPTRS
LDA # >%1
STA DLPTRS+1
.ENDM
;-------------------------------------
.MACRO halt
?stop
lda RANDOM
and #$05
sta COLBAK
jmp ?stop
.ENDM
;-------------------------------------
.MACRO KEY
; KEY
; waits for releasing and pressing "any key"
PHA
?CK1 LDA SKSTAT
AND #$04
BEQ ?CK1
?CK LDA SKSTAT
AND #$04
BNE ?CK
PLA
.ENDM
;-------------------------------------
.MACRO WAIT
; WAIT
; waits one frame (1/50 s(PAL) or 1/60s(NTSC))
?ze LDA VCOUNT
cmp #16 ; if line<16 then wait for line>15 (long VBI protection)
bcc ?ze
sbc #10 ; last lines correction
?wa cmp VCOUNT
bcc ?wa
?wf cmp VCOUNT
bcs ?wf
.ENDM
;-------------------------------------
.macro waitRTC
lda RTCLOK+2
?wa cmp RTCLOK+2
beq ?wa
.endm
;-------------------------------------
.macro negw
; negate the given word (0-a)
;-------------------------------------
sec
lda #$00
sbc :1
sta :1
lda #$00
sbc :1+1
sta :1+1
.endm
;-------------------------------------
.macro randomize
;usage: randomize floor ceiling
;returns (in A) a random .byte between "floor" and "ceiling"
.if :2 < :1
.error "floor higher than ceiling"
.endif
?rand
lda random
cmp #:2+1-:1 ;ceiling
bcs ?rand
.if %1>0 ; if floor = 0 - no add offset
adc #:1
.endif
.endm
;-------------------------------------
.macro phx
txa
pha
.endm
;-------------------------------------
.macro phy
tya
pha
.endm
;-------------------------------------
.macro plx
pla
tax
.endm
;-------------------------------------
.macro ply
pla
tay
.endm
;-------------------------------------
.macro txy
txa
tay
.endm
;-------------------------------------
.macro tyx
tya
tax
.endm
;-------------------------------------
.macro pause
;waits :1 number (byte) of frames
ldx #:1
?PAUSELOOP
wait
dex
bne ?PAUSELOOP
.ENDM
+50
View File
@@ -0,0 +1,50 @@
.IF *>0 ;this is a trick that prevents compiling this file alone
;--------------------------------------------------
.proc open
;--------------------------------------------------
; OPEN #1,4,0,"D:LEVEL000.DAT"
ldx #$10 ;IOCB #1
lda #$03 ;komenda: OPEN
sta ICCOM,x
lda #<fname ;adres nazwy pliku
sta ICBAL,x
lda #>fname
sta ICBAH,x
lda #04 ;kod dostępu: $04 odczyt, $08 zapis, $09 dopisywanie, $0c odczyt/zapis
sta ICAX1,x
lda #$00 ;dodatkowy parametr, $00 jest zawsze dobre
sta ICAX2,x
jmp ciov
.endp
;--------------------------------------------------
.proc bget
;--------------------------------------------------
; BGET #1,LevelFileBuff,LevelFileBuffLen-2
ldx #$10 ;IOCB #1
lda #$07 ;komenda: GET BYTES / BINARY READ
sta ICCOM,x
lda #<LevelFileBuff ;adres w pamieci, gdzie maja trafic dane
sta ICBAL,x
lda #>LevelFileBuff
sta ICBAH,x
lda #<(LevelFileBuffLen-2) ;wielkosc bloku danych w bajtach
sta ICBLL,x
lda #>(LevelFileBuffLen-2)
sta ICBLH,x
jmp ciov
.endp
;--------------------------------------------------
.proc close
;--------------------------------------------------
; CLOSE #1
ldx #$10 ;IOCB #1
lda #$0c ;komenda: CLOSE
sta ICCOM,x
jmp ciov
.endp
.ENDIF