1
0
mirror of https://github.com/RevCurtisP/C02.git synced 2024-12-01 14:51:52 +00:00
C02/vcs/include/startup.a02

205 lines
3.5 KiB
Plaintext

;Atari 2600 Initialization Code - C02 Assembly Language File
PLR0X EQU $80
PLR1X EQU $81
MSL0X EQU $82
MSL1X EQU $83
BALLX EQU $84
OBJTY EQU $85
PLR0Y EQU $85
PLR1Y EQU $86
MSL1HT EQU $87
MSL1Y EQU $88
BALLY EQU $89
PLR0LO EQU $8A
PLR0HI EQU $8B
PLR1LO EQU $8C
PLR1HI EQU $8D
PLR0HT EQU $8E
PLR1HT EQU $8F
MSL0HT EQU $90
MSL0Y EQU $91
BALLHT EQU $92
SCORE EQU $93 ; $93-$95
SCOREPOINTERS EQU $96 ; $96-$9B EQU 6 BYTES
TEMP1 EQU $9C ;USED BY KERNEL
TEMP2 EQU $9D ;CAN BE USED IN PROGRAM TOO, BUT
TEMP3 EQU $9E ;ARE OBLITERATED WHEN DRAWSCREEN IS CALLED.
TEMP4 EQU $9F
TEMP5 EQU $A0
TEMP6 EQU $A1
RAND EQU $A2
SCORECOLOR EQU $A3
VAR0 EQU $A4
VAR1 EQU $A5
VAR2 EQU $A6
VAR3 EQU $A7
VAR4 EQU $A8
VAR5 EQU $A9
VAR6 EQU $AA
VAR7 EQU $AB
VAR8 EQU $AC
VAR9 EQU $AD
VAR10 EQU $AE
VAR11 EQU $AF
VAR12 EQU $B0
VAR13 EQU $B1
VAR14 EQU $B2
VAR15 EQU $B3
VAR16 EQU $B4
VAR17 EQU $B5
VAR18 EQU $B6
VAR19 EQU $B7
VAR20 EQU $B8
VAR21 EQU $B9
VAR22 EQU $BA
VAR23 EQU $BB
VAR24 EQU $BC
VAR25 EQU $BD
VAR26 EQU $BE
VAR27 EQU $BF
VAR28 EQU $C0
VAR29 EQU $C1
VAR30 EQU $C2
VAR31 EQU $C3
VAR32 EQU $C4
VAR33 EQU $C5
VAR34 EQU $C6
VAR35 EQU $C7
VAR36 EQU $C8
VAR37 EQU $C9
VAR38 EQU $CA
VAR39 EQU $CB
VAR40 EQU $CC
VAR41 EQU $CD
VAR42 EQU $CE
VAR43 EQU $CF
VAR44 EQU $D0
VAR45 EQU $D1
VAR46 EQU $D2
VAR47 EQU $D3
TEMP7 EQU $D4 ; THIS IS USED TO AID IN BANKSWITCHING
PLAYFIELDPOS EQU $D5
A EQU $D6
B EQU $D7
C EQU $D8
D EQU $D9
E EQU $DA
F EQU $DB
G EQU $DC
H EQU $DD
I EQU $DE
J EQU $DF
K EQU $E0
L EQU $E1
M EQU $E2
N EQU $E3
O EQU $E4
P EQU $E5
Q EQU $E6
R EQU $E7
S EQU $E8
T EQU $E9
U EQU $EA
V EQU $EB
W EQU $EC
X EQU $ED
Y EQU $EE
Z EQU $EF
; AVAILABLE FOR OTHER USES, OR IF UNUSED, PROVIDE MORE STACK SPACE
AUX1 EQU $F0
AUX2 EQU $F1
AUX3 EQU $F2
AUX4 EQU $F3
AUX5 EQU $F4
AUX6 EQU $F5
; PLAYFIELD COLOR/HT POINTERS
PFCOLORTABLE EQU $F0 ; AND $D5
PFHTTABLE EQU $F0 ; AND $D5
; THE ABOVE POINTERS ARE THE SAME BECAUSE IF COLOR AND HT ARE BOTH USED TOGETHER,
; THEY MUST USED ABSOLUTE INDEXED AND CANNOT USE POINTERS
LIFEPOINTER EQU $F2 ; POINTER TO "LIVES" SHAPE
; UPPER 3 BITS OF $F2 CONTAIN THE NUMBER OF LIVES
LIFECOLOR EQU $F4
LIVES EQU $F3 ; # LIVES >> 5
STATUSBARLENGTH EQU $F5 ; ONLY USES UPPER 5 BITS; OTHER BITS FREE
PFSCORE1 EQU $F2 ; OPTIONAL PLAYFIELD BYTES IN SCORE
PFSCORE2 EQU $F3
PFSCORECOLOR EQU $F4
STACK1 EQU $F6
STACK2 EQU $F7
STACK3 EQU $F8
STACK4 EQU $F9
START: SEI ;Disable Interrupts
CLD ;Disable Decimal Modes
LDY #0 ;Set Y-Index to $00
LDA $D0 ;If Location $D0
CMP #$2C ; Does Not Contain $2C
BNE IS2600 ;And
LDA $D1 ; Location $D1
CMP #$A9 ; Does Not Contain $D1
BNE IS2600 ;Then
DEY ; Set Y-Index to $FF
IS2600: LDX #0 ;Initialize X-Index
TXA ;Initialize Accumulator
CLRMEM: INX ;
TXS ;
PHA
BNE CLRMEM
STY TEMP1
IFCONST PFROWHT
LDA PFROWHT
ELSE
IFCONST PFRES
LDA #(96/PFRES)
ELSE
LDA #8
ENDIF
ENDIF
STA PLAYFIELDPOS
LDX #5
INITSCORE
LDA #<SCORETABLE
STA SCOREPOINTERS,X
DEX
BPL INITSCORE
LDA #1
STA CTRLPF
ORA INTIM
STA RAND
IFCONST MULTISPRITE
JSR MULTISPRITE_SETUP
ENDIF
IFNCONST BANKSWITCH
JMP GAME
ELSE
LDA #>(GAME-1)
PHA
LDA #<(GAME-1)
PHA
PHA
PHA
LDX #1
JMP BS_JSR
ENDIF