mirror of
https://github.com/peterdell/wudsn-ide.git
synced 2024-06-03 06:29:35 +00:00
2743 lines
46 KiB
NASM
2743 lines
46 KiB
NASM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; DRAGONFIRE
|
|
; AKA
|
|
; CHEESE
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; MAY 21, 1982
|
|
; COPYRIGHT 1982 BY IMAGIC
|
|
; ROBERT GRAVES SMITH III
|
|
;
|
|
|
|
processor 6502
|
|
|
|
RELEASE EQU 1
|
|
PAL EQU 0 ;(PAL COLORS NOT IN THIS LISTING, OTHER PAL SHOULD WORK)
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; STELLA EQUATES
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
|
|
VSYNC EQU $00 ; VERT SYNC
|
|
VBLNK EQU $01 ;
|
|
HSYNC EQU $02 ; STROBE
|
|
MCRES EQU $03 ; MASTER COUNTER RESET
|
|
P0SIZE EQU $04 ; SIZE, NUMBER OF COPIES
|
|
P1SIZE EQU $05 ;
|
|
P0CLR EQU $06 ; COLOR
|
|
P1CLR EQU $07 ;
|
|
PFCLR EQU $08 ;
|
|
BKCLR EQU $09
|
|
PFCTRL EQU $0A ; PLAYFIELD CONTROL
|
|
|
|
P0REF EQU $0B ; REFLECT
|
|
P1REF EQU $0C ;
|
|
|
|
PF0 EQU $0D ; PLAYFIELD REGISTERS
|
|
PF1 EQU $0E ;
|
|
PF2 EQU $0F ;
|
|
|
|
P0RES EQU $10 ; RESETS
|
|
P1RES EQU $11 ;
|
|
M0RES EQU $12 ;
|
|
M1RES EQU $13 ;
|
|
BRES EQU $14 ;
|
|
|
|
SNDC0 EQU $15 ; SOUND CONTROL
|
|
SNDC1 EQU $16 ;
|
|
SNDF0 EQU $17 ; FREQUENCY
|
|
SNDF1 EQU $18 ;
|
|
SNDV0 EQU $19 ; VOLUME
|
|
SNDV1 EQU $1A ;
|
|
|
|
P0GR EQU $1B ; GRAPHICS REGISTERS
|
|
P1GR EQU $1C ;
|
|
M0GR EQU $1D ;
|
|
M1GR EQU $1E ;
|
|
BGR EQU $1F ;
|
|
|
|
P0HM EQU $20 ; HMOVES
|
|
P1HM EQU $21
|
|
M0HM EQU $22
|
|
M1HM EQU $23
|
|
BHM EQU $24 ;
|
|
|
|
P0VDEL EQU $25 ; VERTICAL DELAYS
|
|
P1VDEL EQU $26 ;
|
|
BVDEL EQU $27 ;
|
|
|
|
MP0RES EQU $28 ; MISSILE TRACKING
|
|
MP1RES EQU $29 ;
|
|
HMOV EQU $2A ; HORIZ MOVEMENT STROBE
|
|
CLRHM EQU $2B ; CLEAR HMOVE STROBE
|
|
CCLR EQU $2C ; CX REGISTER RESET STROBE
|
|
|
|
;READ ADDRESSES
|
|
|
|
M0PPCX EQU $00 ; M0 PLAYER CX
|
|
M1PPCX EQU $01 ; M1 PLAYER
|
|
P0BPCX EQU $02 ; P0 BALL/PLAYFIELD CX
|
|
P1BPCX EQU $03 ;
|
|
M0BPCX EQU $04 ; M0 BALL/PLAYFIELD CX
|
|
M1BPCX EQU $05 ;
|
|
BPCX EQU $06 ; BALL PLAYFIELD CX
|
|
PPMMCX EQU $07 ; P0/P1 MISSILE CX
|
|
POT0A EQU $08 ; POT IN, LEFT
|
|
POT0B EQU $09 ; POT IN, LEFT
|
|
POT1A EQU $0A ; POT IN, RIGHT
|
|
POT1B EQU $0B ; POT IN, RIGHT
|
|
TRIG0 EQU $0C ; SCHMIDT TRIGGER LEFT
|
|
TRIG1 EQU $0D ; RIGHT
|
|
|
|
; PIA ADDRESSES
|
|
|
|
PLRCTL EQU $280 ; PORT A (CONTROLLERS)
|
|
DDRA EQU $281 ; DATA DIRECTION A
|
|
FPCTL EQU $282 ; FRONT PANEL SWITCHES
|
|
DDRB EQU $283 ; DATA DRIECTION B
|
|
TIMER EQU $284 ; PIA TIMER
|
|
TIMOUT EQU $285 ; PIA TIMER FLAG
|
|
TIMD1 EQU $294 ; CLOCK / 1
|
|
TIMD8 EQU $295 ; CLOCK / 8
|
|
TIMD64 EQU $296 ; CLOCK / 64
|
|
TIMD1K EQU $297 ; CLOCK / 1024
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; GAME EQUATES
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
TOP EQU $A0
|
|
|
|
IF PAL
|
|
NUP1S EQU 10 ; NUMBER OF PLAYER 1'S
|
|
ELSE
|
|
NUP1S EQU 9
|
|
ENDIF
|
|
NUP0S EQU 5 ; NUMBER OF PLAYER 0'S
|
|
|
|
DEAD EQU $D0
|
|
SUPRESS EQU $FF
|
|
FBSPEED EQU 2 ;FIREBALL SPEED
|
|
WINDOW EQU 20
|
|
CAVECLR EQU $0A
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; SOUND EQUATES
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
FIRES EQU 0 ;FIRE FIREBALL
|
|
BONSND EQU 1 ;BONUS
|
|
JUMPS EQU 2 ;JUMP SOUND
|
|
EXSND EQU 3 ;EXPLOSION
|
|
DEATHS EQU 4 ;DEATH
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; RAM ALOCATION
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
; CODE
|
|
SEG.U RAM
|
|
ORG $80
|
|
|
|
RAND DS 1 ;
|
|
RANDH DS 1
|
|
FLAGS DS 1 ; D7=0=LOGO, D6=1, SHOW VERSION NUM
|
|
; D0 = RESET SWITCH
|
|
|
|
EYETOP DS 1 ; UPPER LIMIT OF EYE
|
|
EYEBOT DS 1 ; LOWER LIMIT OF EYE
|
|
NEWCNT DS 1 ; COUNTER FOR NEW BOARD SETUP
|
|
ATTRACT DS 1 ;
|
|
GAMESTAT DS 1 ; D7 RESET=CASTLE SCREEN, D6 RESET=ATTR
|
|
PLYRSTAT DS 1 ; D7 SET=PLAYER INIT
|
|
DRAGSTAT DS 1 ; D6 SET=FLAMING
|
|
REFSHAD DS 1 ; REFLECT FOR PLAYER
|
|
GSEL DS 1 ; SELECT TIMER
|
|
GAMNUM DS 1 ; GAME NUMBER
|
|
T0 DS 1 ;
|
|
T1 DS 1 ;
|
|
T2 DS 1 ;
|
|
T3 DS 1 ;
|
|
CX DS 1 ; COLLISION POINTER
|
|
LIVES DS 2 ; LIFE COUNTERS
|
|
P1POINT DS 1 ;
|
|
P0POINT DS 1 ;
|
|
COUNT DS 1 ;
|
|
|
|
ZSTART
|
|
XSTART
|
|
|
|
P0XS DS NUP0S
|
|
DRAGONX DS 1 ;
|
|
EYEX DS 1 ; EYE XPOS
|
|
PLAYERX DS 1 ;
|
|
XEND
|
|
|
|
PLAYERY DS 1 ;
|
|
PLAYNO DS 1 ; PLAYER UP
|
|
WAVENO DS 1 ; WAVE NUM
|
|
FRAME DS 2 ; 16 BIT FRAME COUNTER
|
|
DEATH DS 1 ; DEATH FLAG
|
|
;
|
|
PLAYERLX DS 1 ;
|
|
PLAYERLY DS 1 ;
|
|
PLAYERDX DS 1 ;
|
|
PLAYERDY DS 1 ;
|
|
;
|
|
DRAGONDX DS 1 ;DRAGON DELTA
|
|
;
|
|
SCOREL0 DS 2 ; LO SCORE
|
|
SCOREM0 DS 2 ;
|
|
SCOREH0 DS 2 ;
|
|
|
|
ZEND
|
|
; HMOVE VALUES
|
|
P1HMS DS NUP1S ;LIST OF HMOVES FOR P1'S
|
|
P0HMS DS NUP0S ;
|
|
DRAGONHM DS 1 ;
|
|
EYEHM DS 1 ;
|
|
PLAYERHM DS 1 ;
|
|
|
|
P0YS DS NUP0S ;
|
|
P0Y DS 1 ;
|
|
P1ID DS NUP1S ;
|
|
P0ID DS NUP0S ;
|
|
|
|
;MAP THE RAT & ARROW RAM OVER THE P0 ID LIST
|
|
RATTIME EQU *-4 ; RAT TIMER
|
|
ARROWTIM EQU *-3 ; ARROW TIMER
|
|
RATHM EQU *-2 ; RAT HMOVE
|
|
ARROWHM EQU *-1 ; ARROW HMOVE
|
|
|
|
PLAYERID DS 1 ;
|
|
P1INDCLR DS 2 ;
|
|
P0INDCLR DS 2 ;
|
|
P1IND DS 2 ;
|
|
P0IND DS 2 ;
|
|
|
|
DRAGTIME DS 1 ; DRAGON FLAMING TIMER
|
|
DRAGONAN DS 1 ;
|
|
|
|
; DRAGON AND SIXCHAR INDIRECTION
|
|
ARRWIND ; ARROW INDIRECTION
|
|
SIXIND0
|
|
DRAGH0 DS 2
|
|
;
|
|
ARRWINDC ; ARROW COLOR INDIRECTION
|
|
SIXIND1
|
|
DRAGH1 DS 2
|
|
;
|
|
SIXIND2
|
|
DRAGH2 DS 2 ;
|
|
;
|
|
SIXIND3
|
|
DRAGH3 DS 2
|
|
;
|
|
SIXIND4
|
|
DELAY DS 2 ; INDIRECT JUMP INTO KERNEL
|
|
|
|
SIXIND5 DS 2 ;
|
|
|
|
CAVESHAD DS 1 ; SHADOW CAVE COLOR
|
|
|
|
SND1 DS 1 ; SOUND ID
|
|
SND1TIME DS 1 ; SOUND TIMER
|
|
JUMPTIME DS 1 ;
|
|
SELTIME DS 1 ; SELECT SWITCH TIMER
|
|
SEA DS 1 ;
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; MAIN PROGRAM
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
SEG CODE
|
|
ORG $1000,0
|
|
|
|
START SEI
|
|
CLD ; NO DECIMAL
|
|
LDX #$00
|
|
TXA
|
|
CLP STA $0,X ; CLEAR STELLA & RAM
|
|
TXS
|
|
INX
|
|
BNE CLP
|
|
;
|
|
; INITS
|
|
;
|
|
DEC ATTRACT
|
|
LDA #$11
|
|
STA PFCTRL
|
|
STA RANDH
|
|
JSR SETUPCA ; SET UP CASTELE SCREEN
|
|
LDA #150
|
|
STA PLAYERX
|
|
STA PLAYERY
|
|
STA RAND
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; SYNC FOR NEW FRAME
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
SCRNTOP LDA #2 ; VBLANK ON
|
|
STA VBLNK
|
|
STA HSYNC ; VSYNC FOR 3 SCAN LINES
|
|
STA VSYNC
|
|
|
|
; SET UP HIGH BYTES FOR INDIRECTION
|
|
LDA #(ATREAS >>8 )
|
|
STA P1IND+1
|
|
LDA #MAN0 >>8
|
|
STA P0IND+1
|
|
LDA #TREASCLR >>8
|
|
STA P1INDCLR+1
|
|
LDA #MAN0C >> 8
|
|
STA P0INDCLR+1
|
|
|
|
; SET UP DRAGONS EYE OR FLAME
|
|
; 30 MC
|
|
;
|
|
LDA DRAGSTAT
|
|
ASL
|
|
ASL
|
|
LDA DRAGONDX
|
|
ROL
|
|
ROL
|
|
AND #$3
|
|
TAX
|
|
LDA DRAGONX
|
|
CLC
|
|
ADC OFFSETS,X
|
|
STA EYEX
|
|
; RANDOM NUMBER GENERATOR
|
|
RANDOM LDA RAND
|
|
ROR
|
|
ROR
|
|
ROR
|
|
EOR RANDH
|
|
ASL
|
|
ASL
|
|
ROL RAND
|
|
ROL RANDH
|
|
LDA RAND
|
|
;
|
|
STA HSYNC
|
|
LDA CAVESHAD ; SETUP PLAYFIELD COLOR
|
|
EOR #$C ; DROP 2 LUMES
|
|
AND ATTRACT
|
|
STA PFCLR
|
|
LDA #$0
|
|
STA HSYNC
|
|
STA VSYNC ; OFF GOES VSYNC
|
|
|
|
IF PAL
|
|
LDA #$42
|
|
ELSE
|
|
LDA #$2C
|
|
ENDIF
|
|
STA TIMD64
|
|
;
|
|
; SOMEONE DIE THIS FRAME?
|
|
;
|
|
LDX PLAYNO
|
|
LDA LIVES,X
|
|
BPL OUT23
|
|
; START DEATH, SOMEONE DEAD!
|
|
IF PAL
|
|
LDA #150+15
|
|
STA PLAYERY
|
|
LDA #150
|
|
STA PLAYERX
|
|
ELSE
|
|
LDA #150
|
|
STA PLAYERY
|
|
STA PLAYERX
|
|
ENDIF
|
|
|
|
LDY SND1TIME
|
|
DEY
|
|
BEQ SKIP39
|
|
LDX #DEATHS
|
|
CPX SND1
|
|
BEQ OUT23
|
|
JSR STARTSND
|
|
JMP OUT23
|
|
SKIP39
|
|
;
|
|
LDA GAMNUM
|
|
LSR
|
|
BCS PLAY2 ; TWO PLAYER
|
|
|
|
; END GAME
|
|
ENDGAME JSR SETUPCA
|
|
STA LIVES ;(A = 0)
|
|
STA LIVES+1
|
|
STA GAMESTAT
|
|
LDA #150
|
|
STA PLAYERY
|
|
STA PLAYERX
|
|
BNE OUT23
|
|
; 2 PLAYER VERSION
|
|
PLAY2 LDA LIVES
|
|
BPL ALIVE0
|
|
LDA LIVES+1
|
|
BMI ENDGAME ; BOTH DEAD
|
|
; O DEAD, 1 ALIVE
|
|
ALIVE1 LDA PLAYNO
|
|
EOR #$1
|
|
STA PLAYNO
|
|
JSR SETUPCA
|
|
BEQ OUT23
|
|
ALIVE0 LDY WAVENO
|
|
INY
|
|
CPY #9
|
|
BCS ALIVE1
|
|
STY WAVENO
|
|
BCC ALIVE1 ; START NEW WAVE
|
|
OUT23
|
|
;
|
|
; ANIMATE MAN
|
|
;
|
|
LDA FRAME
|
|
AND #$7
|
|
TAY
|
|
AND #$1
|
|
BNE OUT16
|
|
; SPECIAL CASE, EXPLODING MAN
|
|
LDA PLAYERID
|
|
CMP #(SUPINE & $FF)
|
|
BCC SKIP40
|
|
;EXPLODING MAN
|
|
CPY #0
|
|
BNE OUT16
|
|
ADC #$F
|
|
CMP #(SUPINE2+1) & $FF
|
|
BCC WRID
|
|
;EXPLOSION OVER
|
|
LDA #$8C
|
|
STA PLAYERX
|
|
LDA #0
|
|
STA PLAYERY
|
|
STA PLAYERDY
|
|
LDA #$80
|
|
STA PLYRSTAT
|
|
LDX PLAYNO
|
|
DEC LIVES,X
|
|
LDA #MAN0 & $FF
|
|
WRID STA PLAYERID
|
|
JMP OUT16
|
|
SKIP40
|
|
; FORCE KNEELING MAN IF CASTLE AND DOWN STICK
|
|
BIT GAMESTAT
|
|
BMI SKIP07 ; DOING DRAGON SCREEN
|
|
LDA PLRCTL ; LOAD STICK
|
|
LDX PLAYNO
|
|
BEQ SKIP09
|
|
ASL
|
|
ASL
|
|
ASL
|
|
ASL
|
|
SKIP09 AND #$20
|
|
BNE SKIP23
|
|
STA PLAYERDX ;KNEELING MAN CAN'T MOVE
|
|
LDA #MAN4 & $FF
|
|
BNE SKIP75
|
|
SKIP23
|
|
SKIP07
|
|
LDA PLAYERDX
|
|
ORA PLAYERDY
|
|
BNE SKIP76
|
|
DOMAN0 LDA #(MAN0 & $FF) ;FORCE STILL PICTURE
|
|
BEQ SKIP75
|
|
SKIP76 LDA PLAYERID
|
|
CMP #(MAN2 & $FF)
|
|
BCS DOMAN0
|
|
ADC #$10
|
|
SKIP75 STA PLAYERID
|
|
OUT16
|
|
; SET UP SCORE FOR VERSION NUMBER
|
|
BIT FLAGS
|
|
; SET UP VERSION NUMBER
|
|
NOLOGO BVC OUT03
|
|
LDA GAMNUM
|
|
AND #$1
|
|
LSR
|
|
STA SCOREM0
|
|
ADC #1
|
|
STA SCOREL0
|
|
LDA GAMNUM
|
|
LSR
|
|
TAX
|
|
INX
|
|
STX SCOREH0
|
|
OUT03
|
|
|
|
|
|
|
|
;
|
|
; REMOVE ONE EMPTY SLOT IN LIST OF P0'S
|
|
;
|
|
LDX #0
|
|
STX T0
|
|
;
|
|
LOOP2 LDY P0YS,X
|
|
CPY #DEAD
|
|
BNE SKIP08
|
|
INC T0
|
|
LOOP3 INX ; BUMP LOOP COUNT
|
|
CPX #NUP0S
|
|
BNE LOOP2
|
|
BEQ OUT06
|
|
SKIP08 LDA T0
|
|
BEQ LOOP3
|
|
;READING VLID ENTRY
|
|
LOOP4 LDA P0ID,X ; GET ID
|
|
PHA
|
|
LDA P0XS,X
|
|
DEX
|
|
STA P0XS,X
|
|
PLA
|
|
STA P0ID,X
|
|
STY P0YS,X
|
|
INX ; POINT TO OLD ENTRY
|
|
INX ; POINT OVER
|
|
LDY P0YS,X
|
|
CPX #NUP0S ; CHECK FOR MAX
|
|
BNE LOOP4
|
|
OUT06
|
|
;
|
|
; ROOM CLEAR?
|
|
;
|
|
LDX #NUP1S-1
|
|
LDA #(SPACE10 & $FF)
|
|
ENDLOOP CMP P1ID,X
|
|
BNE OUT11
|
|
DEX
|
|
BNE ENDLOOP
|
|
;
|
|
LDA #(ODOOR & $FF)
|
|
STA P1ID+NUP1S-1
|
|
STX P1HMS+NUP1S-1 ; X = 0
|
|
OUT11
|
|
;
|
|
; FIREBALL BIRTH
|
|
;
|
|
BIT GAMESTAT ;DON'T DO IF CASTLE SCREEN
|
|
BPL OUT10
|
|
|
|
LDX #$FF
|
|
LDA PLAYERY ; IF PLAYER HIDDEN, QUIT
|
|
BEQ OUT10
|
|
;SCAN LIST TO FIND AVAILABLE SLOT
|
|
SERCHLP INX
|
|
CPX #NUP0S-1
|
|
BCS OUT10
|
|
LDA P0YS,X
|
|
CMP #DEAD
|
|
BNE SERCHLP
|
|
|
|
;FOUND A SLOT
|
|
GOTONE CPX #0 ;ALREADY TOP OF LIST?
|
|
BEQ SKIP17
|
|
DEX ;SEE IF ROOM
|
|
LDA P0YS,X
|
|
CMP #42 ;MIN SEPARATION
|
|
BCC OUT10
|
|
INX ;ROOM TO SPARE
|
|
SKIP17 LDA DRAGONX
|
|
ADC #$14 ;OFFSET TO DRAGON HEAD
|
|
BIT DRAGONDX ;TRAVEL LEFT OR RIGHT
|
|
BPL SKIP16 ;RIGHT
|
|
SBC #$12
|
|
SKIP16 STA T0 ;CHECK FOR PRESENSE IN FLAME WINDOW
|
|
CMP PLAYERX
|
|
BCC SUBT0
|
|
SBC PLAYERX
|
|
BCS SKIP29 ;ALWAYS TAKEN
|
|
;
|
|
SUBT0 LDA PLAYERX
|
|
SEC
|
|
SBC T0
|
|
SKIP29 CMP #WINDOW
|
|
BCS OUT10
|
|
LDA T0
|
|
STA P0XS,X
|
|
LDA #$10 ;START FLAME TIMER
|
|
STA DRAGTIME
|
|
LDA #$40
|
|
STA DRAGSTAT ;ENABLE GRAPHICS
|
|
STX T1
|
|
LDX #FIRES ;START SOUND
|
|
JSR STARTSND
|
|
LDX T1
|
|
LDA #17 ;SET UP FLAME
|
|
STA EYETOP
|
|
LDA #10
|
|
STA EYEBOT
|
|
LDA #0
|
|
STA P0YS,X
|
|
LDA #(FB0 & $FF)
|
|
STA P0ID,X
|
|
OUT10
|
|
INC FRAME
|
|
BNE NOINC
|
|
; CHANGE PLAYER NUMBER IF 2 PLAYER AND GAME OVER
|
|
BIT FLAGS
|
|
BVS OUT21
|
|
BIT GAMESTAT
|
|
BVS OUT21
|
|
LDA GAMNUM
|
|
LSR
|
|
BCC OUT21
|
|
LDA PLAYNO
|
|
EOR #1
|
|
STA PLAYNO
|
|
OUT21
|
|
;
|
|
INC FRAME+1
|
|
BNE NOINC
|
|
LDA #$F3
|
|
STA ATTRACT
|
|
LDA #$0
|
|
STA GAMESTAT
|
|
NOINC
|
|
;
|
|
; PLAYER/ FIRE BALL COLLISIONS
|
|
;
|
|
LDA #0
|
|
STA T0
|
|
BIT GAMESTAT
|
|
BPL OUT04
|
|
LDA PLAYERID ;DONT CX WITH EXPLODING MAN
|
|
CMP #(SUPINE & $FF)
|
|
BCS OUT04
|
|
LDA PLAYERY ;CHECK FOR Y CX FIRST
|
|
BEQ OUT04
|
|
SEC
|
|
SBC #16
|
|
BCC NEGNUM
|
|
STA T0
|
|
NEGNUM CLC
|
|
ADC #32
|
|
STA T1
|
|
;CHECK IN Y
|
|
LDX #NUP0S-1
|
|
PCXLOOP LDA P0YS,X
|
|
CMP #DEAD
|
|
BEQ NEXT07
|
|
CMP T0
|
|
BCC NEXT07
|
|
CMP T1
|
|
BCC MAYBE
|
|
NEXT07 DEX
|
|
BPL PCXLOOP
|
|
BMI OUT04
|
|
;CHECK IN X
|
|
MAYBE LDA PLAYERX
|
|
SBC #6
|
|
BCC NEGNUM1
|
|
CMP P0XS,X
|
|
BCS NEXT07 ;NO CX
|
|
NEGNUM1
|
|
ADC #12
|
|
CMP P0XS,X
|
|
BCC NEXT07
|
|
;COLLISION!!
|
|
LDA #(DOOR & $FF)
|
|
STA P1ID
|
|
LDA #DEAD ;EXPLODE FIREBALL
|
|
STA P0YS,X
|
|
LDA #SUPINE & $FF
|
|
STA PLAYERID
|
|
LDX #EXSND ;SOUND
|
|
JSR STARTSND
|
|
OUT04
|
|
;
|
|
; DERIVE HMOVE AND DELAY VALUES FOR OBJECTS
|
|
;
|
|
DOHMS LDX #XEND-XSTART-1 ;LOAD NUMBER OF OBJECTS
|
|
DOHMOVES LDA P0XS,X ;LOAD XPOS
|
|
LSR ;/16
|
|
LSR
|
|
LSR
|
|
LSR
|
|
SEC
|
|
ADC P0XS,X
|
|
LSR
|
|
LSR
|
|
LSR
|
|
LSR
|
|
STA T0 ;DELAY VALUE
|
|
CLC
|
|
ADC P0XS,X
|
|
AND #$F ;GET HMOVE VALUE 0-E
|
|
SEC
|
|
SBC #$7 ;MAKE 0-E FORMAT INTO SIGNED FOR HMOV
|
|
EOR #$FF
|
|
ASL
|
|
ASL
|
|
ASL
|
|
ASL ;60 = CLOCK 0
|
|
ORA T0
|
|
STA P0HMS,X
|
|
DEX
|
|
BPL DOHMOVES
|
|
; RESET EYE OR FLAME
|
|
STA HSYNC
|
|
LDA EYEHM
|
|
STA BHM
|
|
AND #$F
|
|
TAY
|
|
NOP
|
|
NOP
|
|
NOP
|
|
EYELOOP DEY
|
|
BPL EYELOOP
|
|
STA BRES
|
|
|
|
|
|
|
|
; SET UP INDIRECT JUMP FOR MOVING FOUR CHAR
|
|
LDA DRAGONHM
|
|
LSR
|
|
LSR
|
|
LSR
|
|
LSR
|
|
TAY
|
|
LDA DELAYS,Y
|
|
STA DELAY ;SET UP INDIRECT JUMP
|
|
LDA #(W11 >> 8)
|
|
STA DELAY+1
|
|
;
|
|
; RESET TOP OF LIST P0
|
|
LDA FRAME
|
|
LSR
|
|
BCS DOPLYR1
|
|
LDA P0HMS
|
|
LDX #1
|
|
STX P0POINT
|
|
LDX P0ID
|
|
LDY P0YS
|
|
CPY #DEAD
|
|
BNE SKIP11
|
|
DOPLYR1 LDA PLAYERHM
|
|
LDX #NUP0S
|
|
STX P0POINT
|
|
LDX PLAYERID
|
|
LDY PLAYERY
|
|
SKIP11 STA HSYNC
|
|
STX P0IND
|
|
STX P0INDCLR
|
|
STY P0Y
|
|
STA P0HM
|
|
AND #$F ;GET DELAY
|
|
TAY
|
|
RLOOPP0 DEY
|
|
BPL RLOOPP0
|
|
STA P0RES
|
|
STA HSYNC
|
|
STA HMOV
|
|
STY CX ;PUT FF INTO CX
|
|
INY
|
|
STY P1SIZE
|
|
STY P0SIZE
|
|
;
|
|
; LAST LINES BEFORE KERNEL
|
|
;
|
|
LDY #NUP1S ;NUMBER OF BANDS
|
|
STY P1POINT
|
|
IF PAL
|
|
LDX #$A5
|
|
ELSE
|
|
LDX #$A5-15 ;SETUP LINE COUNT
|
|
ENDIF
|
|
|
|
LDY #0
|
|
STY COUNT
|
|
LDA REFSHAD ;REFLECT PLAYER 1
|
|
STA P0REF
|
|
STA CLRHM
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; END OF VERTICAL BLANK
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
VBOUT BIT TIMOUT ;WAIT FOR VERTICAL BLANK OVER
|
|
BPL VBOUT
|
|
STA HSYNC
|
|
STY VBLNK ;ENABLE ELECTRON BEAM
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; KERNELS BGINS HERE
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
STY BKCLR
|
|
BIT GAMESTAT
|
|
BMI DOCAVE
|
|
STY PF0
|
|
STY PF1
|
|
STY PF2
|
|
IF PAL
|
|
LDA #$DA
|
|
ELSE
|
|
LDA #$C8
|
|
ENDIF
|
|
STA TIMD64
|
|
BNE DOCASTLE
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
;CAVE TOP KERNEL
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
DOCAVE LDY #$03
|
|
CAVELOOP STA HSYNC
|
|
STA HSYNC
|
|
STA HSYNC
|
|
LDA CAVE0,Y
|
|
STA PF0
|
|
LDA CAVE1,Y
|
|
STA PF1
|
|
LDA CAVE2,Y
|
|
|
|
DC $8D ; STA PF2 (ABSOLUTE)
|
|
DC.W PF2
|
|
|
|
DEY
|
|
BPL CAVELOOP
|
|
NOP
|
|
NOP
|
|
JMP KENTRY ;MC 33
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; CASTLE KERNALS
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
DOCASTLE
|
|
LDA #$15
|
|
STA PFCTRL
|
|
;
|
|
LDA #(HFB0 >>8)
|
|
STA ARRWIND+1
|
|
LDX #(HFB0 & $FF) ;HORIZONTAL FIREBALL
|
|
LDA FRAME
|
|
|
|
AND #4
|
|
BNE SKIP41
|
|
LDX #(HFB1 & $FF)
|
|
SKIP41 STX ARRWIND
|
|
LDX #14
|
|
STX T0 ;COUNT FOR ARROW
|
|
;
|
|
LDY #$0A
|
|
CASLOOP LDX #7
|
|
CASLOOP0 STA HSYNC
|
|
LDA CASTLE0,Y
|
|
STA PF0
|
|
LDA CASTLE1,Y
|
|
STA PF1
|
|
DEX
|
|
BPL CASLOOP0
|
|
DEY
|
|
BPL CASLOOP
|
|
INY
|
|
STA T1
|
|
;
|
|
LDA RATHM
|
|
STA T2 ;SAVE HMOVE VALUE
|
|
AND #$F
|
|
STA T3 ;HOLD RAT DELAY
|
|
STA HSYNC
|
|
NOP
|
|
NOP
|
|
LDa ARROWHM
|
|
LDX #25 ;LINE COUNT
|
|
STA P1HM
|
|
AND #$F
|
|
TAY
|
|
RESLOOP0 DEY
|
|
BPL RESLOOP0
|
|
STA P1RES
|
|
STA HSYNC
|
|
STA HMOV
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
;ARROW/RAT/MAN KERNAL
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
WALKLOOP STA HSYNC
|
|
STA P0CLR ;MC 3
|
|
LDA T1 ;MC 6
|
|
STA P0GR ;MC 9
|
|
LDY T0 ;MC 12
|
|
LDA (ARRWIND),Y ;MC 17
|
|
STA P1GR ;MC 20
|
|
LDA #$44 ;MC 22 LOAD RED COLOR
|
|
STA P1CLR ;MC 25
|
|
;
|
|
LDA T2
|
|
STA P1HM ;MC 31
|
|
MKERNEL TXA
|
|
SEC
|
|
SBC P0Y
|
|
TAY
|
|
AND #$F0
|
|
BNE SKIP95
|
|
LDA (P0IND),Y
|
|
STA T1
|
|
LDA (P0INDCLR),Y
|
|
SKIP95 DEX
|
|
BMI SHIELDK
|
|
DEC T0
|
|
BPL WALKLOOP
|
|
;
|
|
RESET STA HSYNC
|
|
STA P0CLR
|
|
LDA T1
|
|
STA P0GR
|
|
LDY T3
|
|
;
|
|
TXA
|
|
SEC
|
|
;
|
|
RATLOOP DEY
|
|
BPL RATLOOP
|
|
STA P1RES
|
|
STA HSYNC
|
|
STA HMOV
|
|
SBC P0Y
|
|
TAY
|
|
LDA (P0IND),Y
|
|
STA P0GR
|
|
LDA (P0INDCLR),Y
|
|
STA P0CLR
|
|
SKIP04 DEX
|
|
LDY #$9
|
|
STY T0
|
|
JMP MKERNEL
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; SHIELD KERNAL
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
SHIELDK
|
|
LDA P0BPCX ;PLAYER/WALL CX
|
|
STA HSYNC
|
|
STA CX
|
|
LDA #0
|
|
STA P1GR
|
|
STA P0GR
|
|
STX P0REF
|
|
STX PF0
|
|
STX PF1
|
|
STX PF2
|
|
LDY #$11
|
|
NOP
|
|
STA P1RES ;MC 30
|
|
STY PFCTRL
|
|
LDA #3
|
|
STA P1SIZE
|
|
STA P0SIZE
|
|
LDX WAVENO
|
|
LDA DRAGCLR,X
|
|
STA P0RES ;MC 51
|
|
AND ATTRACT
|
|
STA P1CLR
|
|
STA P0CLR
|
|
LDX #9
|
|
STA HSYNC
|
|
LDA CAVESHAD
|
|
EOR #$2
|
|
AND ATTRACT
|
|
STA PFCLR
|
|
STA HSYNC
|
|
SHIELDLP STA HSYNC
|
|
LDA SHIELD,X
|
|
STA P1GR
|
|
STA P0GR
|
|
DEX
|
|
BPL SHIELDLP
|
|
;
|
|
;
|
|
STA HSYNC
|
|
LDY #$80
|
|
STY PF1
|
|
STY PF2
|
|
|
|
IF PAL
|
|
LDY #30
|
|
ELSE
|
|
LDY #20
|
|
ENDIF
|
|
MOATLOOP STA HSYNC
|
|
DEY
|
|
BPL MOATLOOP
|
|
LDA SEA
|
|
STA BKCLR
|
|
STA HSYNC
|
|
|
|
IF PAL
|
|
LDA #$B4
|
|
ELSE
|
|
LDA #$84
|
|
ENDIF
|
|
|
|
AND ATTRACT
|
|
STA BKCLR
|
|
;
|
|
; RETURN TO MAIN SCREEN
|
|
;
|
|
JMP TIMLOOP1
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; CASTLE SCREEN ROUTINES
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
MOVERAT LDA PLAYERID
|
|
CMP #(SUPINE & $FF)
|
|
BCS SKIP06
|
|
LDA PLAYERX
|
|
CMP #12
|
|
BCS SKIP06
|
|
JMP SETUPDR
|
|
SKIP06
|
|
;
|
|
; MOVE RATS AND ARROWS
|
|
;
|
|
LDX #1
|
|
MRATLOOP LDY RATTIME,X
|
|
BEQ MOVE
|
|
DEC RATTIME,X
|
|
BNE NEXT08
|
|
STX T1
|
|
LDX #FIRES
|
|
JSR STARTSND
|
|
LDX T1
|
|
MOVE TXA
|
|
TAY
|
|
LDA RATHM,X
|
|
MOVELOOP SEC
|
|
SBC #$10
|
|
BVC NOWRAP
|
|
SEC
|
|
SBC #$F
|
|
NOWRAP CMP #$CA
|
|
BNE SKIP02
|
|
LDA #$60
|
|
SKIP02
|
|
CMP #$40
|
|
BNE SKIP03
|
|
LDA RAND
|
|
AND #$1F
|
|
ADC WAVENO
|
|
EOR #$3F
|
|
ASL
|
|
STA RATTIME,X
|
|
LDA #$40
|
|
BNE NEXT09
|
|
SKIP03 DEY
|
|
BPL MOVELOOP
|
|
NEXT09 STA RATHM,X
|
|
NEXT08 DEX
|
|
BPL MRATLOOP
|
|
;
|
|
; JUMP
|
|
;
|
|
J BIT GAMESTAT
|
|
BVC OUT18
|
|
LDA PLAYERDY
|
|
BNE SKIP24
|
|
LDY PLAYERID
|
|
CPY #(SUPINE & $FF)
|
|
BCS OUT18
|
|
LDX PLAYNO
|
|
LDY TRIG0,X
|
|
BMI SKIP24
|
|
LDX #JUMPS
|
|
JSR STARTSND
|
|
LDA #12
|
|
STA JUMPTIME
|
|
LDA #1
|
|
STA PLAYERDY
|
|
;
|
|
SKIP24
|
|
CLC
|
|
ADC PLAYERY
|
|
STA PLAYERY
|
|
BNE SKIP27
|
|
STA PLAYERDY
|
|
SKIP27
|
|
CMP #$9
|
|
BCC OUT18
|
|
; AT TOP OF JUMP
|
|
DEC PLAYERY
|
|
DEC JUMPTIME
|
|
BNE OUT18
|
|
LDY #$FF
|
|
STY PLAYERDY
|
|
OUT18
|
|
;
|
|
; CX
|
|
;
|
|
LDA PLAYERID ;DONT CX WITH EXPLODING MAN
|
|
CMP #(SUPINE & $FF)
|
|
BCS OUT19
|
|
BIT PPMMCX
|
|
BPL OUT19
|
|
BIT CX
|
|
BMI OUT19 ;LEAVE IF TOUCHING WALL
|
|
LDA #(SUPINE & $FF)
|
|
STA PLAYERID
|
|
LDX #EXSND ;TURN ON EXPLOSION
|
|
JSR STARTSND
|
|
LDA #$4A
|
|
STA ARROWHM ;START FIREBALLS AGAIN
|
|
STA RATHM
|
|
LDA #0
|
|
STA RATTIME
|
|
STA ARROWTIM
|
|
OUT19 STA CCLR
|
|
RTS
|
|
;
|
|
; MORE SUBROUTINES
|
|
;
|
|
SETUPCA
|
|
ROL GAMESTAT
|
|
CLC
|
|
ROR GAMESTAT
|
|
LDA #$60
|
|
STA ARROWHM
|
|
STA RATHM
|
|
LDA #$8C
|
|
STA PLAYERX
|
|
LDA #NUP1S-1
|
|
STA NEWCNT
|
|
;
|
|
; CLEAR P0 LISR
|
|
;
|
|
LDX #NUP0S-1
|
|
LDA #DEAD
|
|
KILLLOOP STA P0YS,X
|
|
DEX
|
|
BPL KILLLOOP
|
|
LDA #0
|
|
STA ARROWTIM
|
|
STA RATTIME
|
|
STA PLAYERDX
|
|
STA PLAYERDY
|
|
STA PLAYERY
|
|
STA DRAGSTAT
|
|
RTS
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; MAIN KERNEL
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
ORG $1500
|
|
|
|
LDZERO0 NOP ;MC 49
|
|
NOP ;MC 51
|
|
LDA #0 ;MC 53
|
|
STA T1 ;MC 56
|
|
BEQ SKIP10 ;MC 59
|
|
TOENDK JMP ENDK
|
|
LOOP1 STA P0CLR ;MC 73
|
|
LDA T1 ;MC 76
|
|
;
|
|
KERNEL STA P0GR ;MC 3
|
|
LDA (P1IND),Y ;MC 8
|
|
STA P1GR ;MC 11
|
|
LDA (P1INDCLR),Y ;MC 16
|
|
STA P1CLR ;MC 19
|
|
;
|
|
JSR WASTE12
|
|
DEX
|
|
KENTRY TXA ;MC 35
|
|
SEC ;MC 37
|
|
SBC P0Y ;MC 40
|
|
TAY ;MC 42
|
|
AND #$F0 ;MC 44
|
|
BNE LDZERO0 ;MC 46/47
|
|
LDA (P0IND),Y ;MC 51
|
|
STA T1 ;MC 54
|
|
LDA (P0INDCLR),Y ;MC 59
|
|
SKIP10
|
|
DEC COUNT ;MC 64
|
|
LDY COUNT ;MC 67
|
|
BPL LOOP1 ;MC 69/70
|
|
;
|
|
; LINE 11 SETUP P1
|
|
;
|
|
DEC P1POINT ;MC 74
|
|
BMI TOENDK ;END KERNEL
|
|
STA P0CLR ;MC 3
|
|
LDA T1 ;MC 6
|
|
STA P0GR ;MC 9
|
|
;SETUP P1
|
|
LDY P1POINT ;MC 12
|
|
LDA PPMMCX ;MC 15 P1/P0 CX
|
|
BPL EQUTIME ;MC 17/18
|
|
STY CX ;MC 20 SAVE LINE NUM OF CX
|
|
EQUTIME STY CCLR ;MC 23 CLEAR CX
|
|
LDA P1ID,Y ;MC 27
|
|
STA P1IND ;MC 30
|
|
STA P1INDCLR ;MC 33
|
|
LDA P1HMS,Y ;MC 37
|
|
STA P1HM ;MC 40 SET UP HMOVE
|
|
DEX ;MC 42
|
|
AND #$F ;MC 44 GET DELAY VALUE
|
|
STA T0 ;MC 47
|
|
JMP SKIP05 ;MC 50
|
|
;
|
|
;
|
|
;
|
|
LDZERO2 LDA #0
|
|
TAY
|
|
BEQ SKIP12
|
|
LDZERO4 LDA #0
|
|
BEQ SKIP13
|
|
;
|
|
;
|
|
SKIP05 TXA ;MC 52
|
|
SEC ;MC 54
|
|
SBC P0Y ;MC 57
|
|
TAY ;MC 59
|
|
AND #$F0 ;MC 61
|
|
BNE LDZERO2 ;MC 63/64
|
|
LDA (P0IND),Y ;MC 68
|
|
STA P0GR ;MC 71
|
|
SKIP12
|
|
;
|
|
; LINE 12 RESET P1 KERNEL
|
|
;
|
|
STA HSYNC
|
|
LDA (P0INDCLR),Y ;MC 5
|
|
STA P0CLR ;MC 8
|
|
DEX ;MC 10
|
|
SEC ;MC 12 ;PREPARE FOR P0
|
|
TXA ;MC 14
|
|
LDY T0 ;MC 17
|
|
RESETLP DEY ;MC 19
|
|
BPL RESETLP ;MC 21/22
|
|
STA P1RES ;MC 24
|
|
;
|
|
SBC P0Y ;MC 73
|
|
STA HSYNC ;MC 76
|
|
;
|
|
; LINE 13 CHECK FOR P0 RESET
|
|
;
|
|
TAY ;MC 2
|
|
AND #$F0 ;MC 4
|
|
BNE LDZERO4 ;MC 6/7
|
|
LDA (P0INDCLR),Y ;MC 11
|
|
STA P0CLR ;MC 14
|
|
LDA (P0IND),Y ;MC 19
|
|
STA P0GR ;MC 22
|
|
SKIP13 STA T1 ;MC 25 (15 IF NO P0)
|
|
TXA ;MC 27
|
|
;
|
|
LDY P0POINT ;MC 42
|
|
DEX ;MC 44
|
|
CMP P0Y ;MC 48
|
|
BCS NORESET ;MC 50/51
|
|
; IF THIS PATH IS TAKEN, NO P0, SO MAX COUNT IS 39
|
|
CPY #NUP0S ;MC
|
|
BEQ DOPLYR ;MC
|
|
LDA P0YS,Y ;MC 43
|
|
;
|
|
CMP #DEAD ;MC
|
|
BNE SKIP99 ;MC
|
|
;PUT PLAYER ON SCREEN
|
|
DOPLYR LDA PLAYERHM ;MC
|
|
STA P0HM ;MC
|
|
AND #$F ;MC
|
|
STA T2 ;MC
|
|
LDA PLAYERY ;MC
|
|
STA P0Y ;MC
|
|
LDA PLAYERID ;MC
|
|
JMP CONT0 ;MC
|
|
SKIP99
|
|
STA P0Y ;MC 56
|
|
LDA P0HMS,Y ;MC
|
|
STA P0HM ;MC 46
|
|
AND #$F ;MC
|
|
STA T2 ;MC 49
|
|
LDA P0ID,Y ;MC 66
|
|
INY ;MC
|
|
CONT0 STA HSYNC ;MC 74
|
|
;
|
|
; LINE 14 RESET P0
|
|
;
|
|
STA P0IND ;MC
|
|
STA P0INDCLR ;MC
|
|
STY P0POINT ;WASTE 3
|
|
LDY T2 ;MC
|
|
NOP ;MC
|
|
DEX ;MC 17
|
|
RP0LP DEY ;MC 19
|
|
BPL RP0LP ;MC 21/22
|
|
STA P0RES ;MC 24/?
|
|
;
|
|
; LINE 15 SETUP TO RETURN TO MAIN KERNEL
|
|
;
|
|
STA HSYNC ;MC
|
|
STA HMOV ;MC 3
|
|
NOP ;MC 5
|
|
NOP ;MC 7
|
|
NOP ;MC 9
|
|
JMP AENTRY ;MC 12
|
|
;
|
|
TOENDK1 JMP ENDK
|
|
;
|
|
; LINE 13 NO P0 RESET, RUN INSTEAD OF P0 RESET
|
|
;
|
|
NORESET TXA ;MC 53
|
|
SEC ;MC 55
|
|
SBC P0Y ;MC 58
|
|
TAY ;MC 60
|
|
AND #$F0 ;MC 62
|
|
BNE SKIP14 ;MC 64/65
|
|
LDA (P0IND),Y ;MC 69
|
|
STA T1 ;MC 72
|
|
SKIP14
|
|
;
|
|
; LINE 14 MAPS TO P0 RESET LINE
|
|
;
|
|
STA HSYNC ;MC 75 MAX
|
|
LDA T1 ;MC 3
|
|
STA P0GR ;MC 6
|
|
LDA (P0INDCLR),Y ;MC 11
|
|
STA P0CLR ;MC 14
|
|
DEX ;MC 16
|
|
TXA ;MC 18
|
|
SEC ;MC 20
|
|
SBC P0Y ;MC 23
|
|
TAY ;MC 25
|
|
AND #$F0 ;MC 27
|
|
BNE LDZERO3 ;MC 29/30
|
|
LDA (P0IND),Y ;MC 44
|
|
STA T1 ;MC 47
|
|
SKIP15
|
|
LDA (P0INDCLR),Y ;MC 52
|
|
STA HSYNC ;MC 55
|
|
;
|
|
; LINE 15 MAPS TO P1 SETUP LINE
|
|
;
|
|
STA HMOV ;MC 3
|
|
STA P0CLR ;MC 6
|
|
LDA T1 ;MC 9
|
|
STA P0GR ;MC 12
|
|
AENTRY DEX ;MC 14
|
|
NOP ;MC 16
|
|
NOP ;MC 18
|
|
NOP ;MC 20
|
|
NOP ;MC 22
|
|
LDA #10 ;MC 24 SET UP LINE COUNT FOR KERNEL
|
|
STA COUNT ;MC 27
|
|
STA CLRHM ;MC 30
|
|
JMP KENTRY ;MC 33
|
|
;
|
|
LDZERO3 LDY #0
|
|
BEQ SKIP15
|
|
|
|
ENDK
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; DRAGON KERNEL
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
LDA DRAGSTAT ; TURN ON FLAME?
|
|
ROL
|
|
ROL
|
|
ROL
|
|
ROL
|
|
STA BGR
|
|
;
|
|
LDX WAVENO
|
|
LDA #$4C ; FLAME COLOR
|
|
STA PFCLR
|
|
;
|
|
LDY #0
|
|
STY P0GR
|
|
|
|
IF PAL
|
|
LDA #$C0
|
|
ELSE
|
|
LDA #$C0
|
|
ENDIF
|
|
|
|
STA TIMD8
|
|
|
|
; RESET PLAYERS FOR DRAGON
|
|
INY
|
|
STY P1SIZE
|
|
STY P0SIZE
|
|
LDA DRAGONHM
|
|
STA HSYNC
|
|
STA P1HM
|
|
CLC
|
|
ADC #$10
|
|
STA P0HM
|
|
NOP
|
|
AND #$0F
|
|
TAY
|
|
DRLOOP DEY
|
|
BPL DRLOOP
|
|
STA P1RES ; POSITION PLAYERS
|
|
STA P0RES
|
|
;LAST LINE BEFORE KERNEL
|
|
STA HSYNC
|
|
STA HMOV
|
|
TAY
|
|
DELLOOP DEY
|
|
BPL DELLOOP
|
|
JMP (DELAY) ;MC 14 JUMP TO PROPER TIME WASTER
|
|
|
|
;
|
|
; KERNEL ENTRY POINTS
|
|
; WASTE 5-11 CYCLES (INCLUDING INDIRECT JUMP)
|
|
;
|
|
W11 DC $A9 ; LDA IMMED (LDA #A9,LDA #A9,LDA $EAA5 = 8)
|
|
W10 DC $A9 ; (LDA #A9, LDA #AD, LDA $EA = 7)
|
|
W9 DC $A9 ; (LDA #A9, LDA $EAA5 = 6)
|
|
W8 DC $A9 ; (LDA #AD, LDA $EA = 5)
|
|
W7 DC $AD ; LDA ABS (LDA $EAA5 = 4)
|
|
W6 DC $A5 ; LDA ZP (LDA $EA = 3)
|
|
W5 DC $EA ; NOP (NOP= 2)
|
|
|
|
DKERNEL
|
|
LDA DRAGCLR,X
|
|
AND ATTRACT
|
|
STA P1CLR
|
|
STA P0CLR
|
|
NOP
|
|
LDY #15
|
|
KERLOOP CPY EYETOP
|
|
BCS OFF
|
|
CPY EYEBOT
|
|
ROL
|
|
ROL
|
|
NOP
|
|
SKIP25 STA BGR
|
|
JMP SKIP26
|
|
OFF LDA ATTRACT ;WASTE 3 MC
|
|
LDA #0
|
|
BEQ SKIP25
|
|
SKIP26 LDA DRAGONDX
|
|
STA P1REF
|
|
STA P0REF
|
|
NOP
|
|
NOP
|
|
NOP
|
|
NOP
|
|
;
|
|
;
|
|
LDA (DRAGH3),Y ;MC 42
|
|
STA P1GR ;MC 45
|
|
LDA (DRAGH2),Y ;MC 50
|
|
STA P0GR ;MC 53
|
|
LDA (DRAGH1),Y ;MC 58
|
|
TAX ;MC 60
|
|
LDA (DRAGH0),Y ;MC 65
|
|
|
|
STX P1GR ;MC 68
|
|
STA P0GR ;MC 71
|
|
;
|
|
DEY ;MC 73
|
|
BPL KERLOOP ;MC 75/76
|
|
INY
|
|
STY P1GR
|
|
STY P0GR
|
|
;
|
|
TIMLOOP1 LDA TIMER
|
|
BNE TIMLOOP1
|
|
STA HSYNC
|
|
LDA CAVESHAD ; HOLD COLOR
|
|
STA PFCLR
|
|
LDX #$FF
|
|
STX PF1
|
|
STX PF0
|
|
STX PF2
|
|
LDA #4 ; WHICH SCORE?
|
|
CLC
|
|
ADC PLAYNO
|
|
TAY
|
|
LDA #(SPACE & $FF)
|
|
STA T2 ; STORE SPACE FOR ZERO SUPRESSION
|
|
|
|
LDA #(NUMBERS >>8 )
|
|
STA SIXIND0+1
|
|
STA SIXIND0+3
|
|
STA SIXIND0+5
|
|
STA SIXIND0+7
|
|
STA SIXIND0+9
|
|
STA SIXIND0+11
|
|
|
|
STA CLRHM
|
|
|
|
;
|
|
; WRITE SCORE INDIRECTION
|
|
;
|
|
LDX #11
|
|
SIXILOOP DEX
|
|
LDA SCOREL0,Y
|
|
STY T0 ; HOLD INDEX
|
|
PHA ; SAVE SCORE BYTE
|
|
AND #$F0
|
|
LSR
|
|
ADC #(N0 & $FF)
|
|
CMP #(N0 & $FF)
|
|
BNE SKIP89 ; NON ZERO
|
|
;
|
|
LDA T2
|
|
BNE SKIP88
|
|
SKIP89 LDY #(N0 & $FF)
|
|
STY T2 ; MAKE T2 "ZERO"
|
|
SKIP88 STA SIXIND0,X
|
|
DEX
|
|
PLA ; GET SCORE BYTE
|
|
DEX
|
|
AND #$F
|
|
ASL
|
|
ASL
|
|
ASL
|
|
ADC #(N0 & $FF) ; CARRY WAS ALWAYS CLEAR
|
|
CMP #(N0 & $FF)
|
|
BNE SKIP86
|
|
;
|
|
LDA T2
|
|
BNE SKIP85
|
|
SKIP86 BIT FLAGS
|
|
BVS SKIP85
|
|
LDY #(N0 & $FF)
|
|
STY T2
|
|
SKIP85
|
|
STA SIXIND0,X
|
|
DEX
|
|
CPX #4 ; ALWAYS STOP ZPRESS
|
|
BCS SKIP84
|
|
BIT FLAGS ; DONT SSTOP ZPRESS IF VERSION SHOWN
|
|
BVS SKIP84
|
|
LDY #(N0 & $FF)
|
|
STY T2
|
|
SKIP84
|
|
LDY T0
|
|
DEY
|
|
DEY
|
|
BPL SIXILOOP
|
|
;
|
|
STA HSYNC
|
|
LDY #1
|
|
LDX PLAYNO ; POINT TO PLAYER UP
|
|
LDA SCORECLR,X
|
|
AND ATTRACT
|
|
STA P0CLR
|
|
STA P1CLR
|
|
LDA #0
|
|
STA P1REF
|
|
STA P0REF
|
|
LDA #3 ; DO SCORE RESET
|
|
STA P1SIZE ; TRIPLE COPIES CLOSE
|
|
STA P0SIZE
|
|
LDA #$F0
|
|
STA P1RES
|
|
STA P0RES
|
|
STA P1HM
|
|
STA HSYNC
|
|
STA HMOV
|
|
STY P1VDEL
|
|
STY P0VDEL
|
|
;
|
|
; DO SIX CHAR TWICE
|
|
;
|
|
LDY #$07
|
|
JSR SIXCHAR
|
|
;
|
|
LDX PLAYNO
|
|
LDY LIVES,X
|
|
LDX #10 ; POINT INTO INDIRECTION
|
|
LDA #(MAN & $FF)
|
|
LIFELOOP DEY
|
|
BPL WSPACE
|
|
LDA #(SPACE & $FF)
|
|
WSPACE STA SIXIND0,X
|
|
NEXT04 DEX
|
|
DEX
|
|
BPL LIFELOOP
|
|
LDY #4
|
|
JSR SIXCHAR
|
|
|
|
STY P1VDEL
|
|
STY P0VDEL
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;
|
|
; OVERSCAN
|
|
;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
OVSCAN
|
|
IF PAL
|
|
LDA #$37
|
|
ELSE
|
|
LDA #$23
|
|
ENDIF
|
|
|
|
STA TIMD64
|
|
LDA #2
|
|
STA VBLNK
|
|
;
|
|
; WRITE CASTLE COLR
|
|
;
|
|
LDY WAVENO
|
|
LDA COLORS,Y
|
|
AND ATTRACT
|
|
STA CAVESHAD
|
|
;
|
|
; COUNT DOWN SELECT TIMER
|
|
;
|
|
LDA SELTIME
|
|
BEQ SKIP44
|
|
DEC SELTIME
|
|
SKIP44
|
|
;
|
|
; SKIP CX IF CASTLE SCREEN
|
|
;
|
|
BIT GAMESTAT
|
|
BMI DRAGCX
|
|
JSR MOVERAT
|
|
JMP NOCX
|
|
;
|
|
; P0/P1 CX DETECT
|
|
;
|
|
DRAGCX LDA FRAME
|
|
LSR
|
|
BCC NOCX
|
|
LDX #$FF
|
|
BIT PPMMCX
|
|
BMI SKIP20
|
|
LDX CX
|
|
BMI NOCX
|
|
SKIP20 INX
|
|
STX CX ; CX POINTS TO HIT P1
|
|
LDA CX
|
|
BNE SKIP21 ; NOT BOTTOM DOOR
|
|
; COLLISION WITH BOTTOM DOOR
|
|
LDA PLAYERDX ; PLAYER MOVING RIGHT?
|
|
BMI NOCX ; NO
|
|
BEQ NOCX ;NO
|
|
HIDE LDA #0
|
|
STA PLAYERY ; HIDE PLAYER
|
|
STA PLAYERDY
|
|
LDA #$80
|
|
STA PLYRSTAT
|
|
LDA #(DOOR & $FF) ; CLOSE DOOR
|
|
STA P1ID
|
|
BNE NOCX ; LEAVE
|
|
; TOP DOOR CX
|
|
SKIP21
|
|
LDA P1ID,X
|
|
CMP #(ODOOR & $FF) ; OPEN DOOR?
|
|
BNE SKIP22 ;NO
|
|
LDA #1
|
|
JSR SCORE
|
|
LDX #7 ;START SCORE SOUND
|
|
JSR STARTSND
|
|
; END WAVE HERE
|
|
LDA GAMNUM
|
|
LSR
|
|
BCC NEWWAVE ; ONE PLAYER VERSION
|
|
; 2 PLAYER
|
|
LDA PLAYNO
|
|
EOR #1
|
|
TAX
|
|
LDY LIVES,X ;OTHER PLAYER DEAD?
|
|
BMI SKIP36
|
|
TAX ; PLAYER NUM
|
|
STA PLAYNO
|
|
BNE OUT22
|
|
NEWWAVE
|
|
SKIP36 LDY WAVENO
|
|
INY
|
|
CPY #9
|
|
BCS SKIP37
|
|
STY WAVENO
|
|
SKIP37
|
|
OUT22
|
|
JSR SETUPCA
|
|
BEQ NOCX
|
|
SKIP22
|
|
;
|
|
; SCORING VALUES
|
|
;
|
|
LDY #$FF
|
|
LDA P1ID,X
|
|
SCLOOP INY
|
|
CMP BRKS,Y
|
|
BCS SCLOOP
|
|
SCONE LDA #(SPACE & $FF)
|
|
STA P1ID,X
|
|
LDX SCORESND,Y ; START SCORING SOUND
|
|
JSR STARTSND
|
|
LDA SCORES,Y
|
|
ASL
|
|
JSR SCORE
|
|
NOCX
|
|
OUT05 STA CCLR
|
|
|
|
;
|
|
; TURN OFF FLAMING IF TIMED OUT
|
|
;
|
|
LDY DRAGTIME
|
|
BEQ STOPFL
|
|
DEC DRAGTIME
|
|
BNE OUT17
|
|
; TURN OFF FALAMING BIT OF DRAGSTAT
|
|
STOPFL LDA #0
|
|
STA DRAGSTAT
|
|
LDY #6
|
|
STY EYETOP
|
|
DEY
|
|
STY EYEBOT
|
|
OUT17
|
|
;
|
|
; DELTA FIREBALLS
|
|
;
|
|
LDA FPCTL ; DO FIREBALL SPEED WITH WAVENO E DIFF
|
|
ASL ; SHIFT DIFFICULTY TO CARRY
|
|
LDX PLAYNO
|
|
BNE SKIP34
|
|
ASL
|
|
SKIP34
|
|
LDY WAVENO
|
|
LDA #0
|
|
ADC FBSPEEDS,Y
|
|
STA T0
|
|
LDX #NUP0S-1
|
|
DEFBLOOP LDA P0YS,X
|
|
CMP #DEAD
|
|
BEQ NEXT05
|
|
ADC T0 ; FIREBALL SPEED
|
|
|
|
IF PAL
|
|
CMP #$95+15
|
|
ELSE
|
|
CMP #$95
|
|
ENDIF
|
|
|
|
BCC OKXX
|
|
LDA #DEAD
|
|
OKXX
|
|
SKIP18 STA P0YS,X
|
|
NEXT05 DEX
|
|
BPL DEFBLOOP
|
|
;
|
|
; GAME RESET AND GAME SELECT
|
|
;
|
|
BIT GAMESTAT ; RESET GAME ON TRIGGER IF GAME OVER
|
|
BVS SKIP46
|
|
BIT TRIG0
|
|
BPL NWGAME
|
|
SKIP46
|
|
LDA FPCTL
|
|
LSR
|
|
BCC NWGAME
|
|
LSR
|
|
BCS CONTVB
|
|
;SELECT SWITCH PRESSED
|
|
LDA SELTIME
|
|
BNE GMCONT
|
|
LDA #$1F
|
|
STA SELTIME
|
|
LDA #0
|
|
STA PLAYNO
|
|
STA GAMESTAT
|
|
LDA #150
|
|
STA PLAYERX
|
|
STA PLAYERY
|
|
LDA #$C0 ; SET D6-D7 OF FLAGS
|
|
STA FLAGS
|
|
INC GAMNUM
|
|
LDA GAMNUM
|
|
AND #7 ; VERSIONS 0-7 ONLY
|
|
STA GAMNUM
|
|
BPL GMCONT
|
|
NWGAME LDA #$81 ; GAME RESET BRINGS YOU HERE
|
|
STA FLAGS ; TURN OFF LOGO (SET D7)
|
|
;
|
|
; START NEW GAME
|
|
;
|
|
LDX #ZEND-ZSTART-1
|
|
LDA #0
|
|
ZEROLOOP STA ZSTART,X
|
|
DEX
|
|
BPL ZEROLOOP
|
|
LDA #6
|
|
STA LIVES
|
|
STA LIVES+1
|
|
JSR SETUPCA ; SET UP CASTLE SCREEN
|
|
LDA #$40 ; YOU HERE
|
|
STA GAMESTAT ; TURN OFF SOFT ATTRACT
|
|
LDA GAMNUM
|
|
AND #$FE
|
|
STA WAVENO ; SKIP WAVES ACCORDING TO GAME NUMBER
|
|
GMCONT
|
|
LDA #$FF ; SELECT SWITCH BRINGS YOU HERE
|
|
STA ATTRACT
|
|
|
|
CONTVB ; NO SWITCHES BRINGS YOU HERE
|
|
|
|
;
|
|
; DRAGON INTELLIGENCE
|
|
;
|
|
; WRITE MAX DRAGON SPEED
|
|
LDA WAVENO
|
|
LSR
|
|
TAX
|
|
INX
|
|
INX
|
|
STX T2 ; MAX SPEED
|
|
LDA FRAME
|
|
AND #$3
|
|
BNE OUT12
|
|
|
|
LDX PLAYERX
|
|
LDA PLAYERY
|
|
BNE SKIP35
|
|
LDX #80 ; IF PLAYER HIDDEN, USE CENTER
|
|
SKIP35 STX T1
|
|
|
|
LDA DRAGONX
|
|
LDX DRAGONDX
|
|
BMI GOLEFT
|
|
ADC #$19
|
|
GOLEFT
|
|
;
|
|
; DRAGON IGNORANVE WINDOW
|
|
;
|
|
LDY WAVENO
|
|
CMP T1
|
|
BCS NORIGHT
|
|
; DRGON < PLAYERX
|
|
STA T0 ; STORE DRAGON POSITION
|
|
LDA T1
|
|
SEC
|
|
SBC T0 ; GET DIFFERENCE
|
|
CMP MINDMAX,Y ; TABLE OF IGNORANCE WIDTHS
|
|
BCC OUT12 ; IN WINDOW, DO NOTHING
|
|
GORIGHT INX
|
|
BEQ GORIGHT
|
|
BNE WRITEDX
|
|
; DRAGON > PlAYERX
|
|
NORIGHT SEC
|
|
SBC T1
|
|
CMP MINDMAX,Y
|
|
BCC OUT12
|
|
NOZERO0 DEX
|
|
BEQ NOZERO0
|
|
WRITEDX TXA
|
|
BPL WRMAX ; CHECK ABS VALUE AGAINST DRAGMAX
|
|
EOR #$FF
|
|
ADC #0 ; CARRY ALWAYS SET
|
|
WRMAX CMP T2
|
|
BCS NOWRITE
|
|
STX DRAGONDX
|
|
NOWRITE
|
|
OUT12
|
|
;
|
|
; DELTA DRAGON
|
|
;
|
|
LDA DRAGONDX
|
|
CLC
|
|
ADC DRAGONX
|
|
CMP #129
|
|
BCS WRAP ;IF 0>A>130 THEN IT WRAPPED
|
|
STA DRAGONX
|
|
BCC OUT01
|
|
;COMPLEMENT DELTA
|
|
WRAP LDX #1
|
|
BIT DRAGONDX
|
|
BMI STOP
|
|
LDX #$FF
|
|
STOP ; TURN ON HOMING ONLY IF D1 SET
|
|
OUT13 STX DRAGONDX
|
|
OUT01
|
|
;
|
|
; WRITE LO INDIRECTION FOR DRAGON
|
|
LDA DRAGONAN ;DRAGON ANIMATION COUNTER
|
|
ROR
|
|
ROR
|
|
ROR
|
|
AND #$C0 ;PUT ANIM NUMBER INTO D6-D7
|
|
LDX #$10
|
|
BIT DRAGSTAT
|
|
BVC SKIP31
|
|
LDA #$C0 ;FLAMING GRX
|
|
LDY DRAGONDX
|
|
BVS SKIP92
|
|
SKIP31
|
|
LDY DRAGONDX
|
|
BNE SKIP92
|
|
LDA #$80 ;STILL GRX
|
|
BMI SKIP93
|
|
SKIP92 BPL SKIP93
|
|
CLC
|
|
ADC #$30
|
|
LDX #$F0
|
|
SKIP93 STX T0
|
|
LDX #7 ;POINT TO INDIRECTION
|
|
LDY #(DRAGON0 >> 8)
|
|
INDLOOP STY DRAGH0,X
|
|
DEX
|
|
STA DRAGH0,X
|
|
CLC
|
|
ADC T0
|
|
DEX
|
|
BPL INDLOOP
|
|
;
|
|
; ANIMATE DRAGON
|
|
;
|
|
LDA FRAME
|
|
AND #3
|
|
BNE OUT02
|
|
DEC DRAGONAN
|
|
BPL SKIP91
|
|
LDA #2
|
|
STA DRAGONAN
|
|
SKIP91
|
|
OUT02
|
|
;
|
|
; ALTER SIGNED DELTAS ACCORDING TO STICK
|
|
;
|
|
LDA PLRCTL ;GET STICK
|
|
LDX PLAYNO ;TWO PLAYER?
|
|
BEQ SKIP90
|
|
ASL
|
|
ASL
|
|
ASL
|
|
ASL
|
|
SKIP90
|
|
LDX #0
|
|
LDY #0
|
|
BIT GAMESTAT ;SOFT ATTRACT ON?
|
|
BVC OUT07 ; GO IF SO
|
|
PHA
|
|
LDA SND1
|
|
CMP #EXSND
|
|
PLA
|
|
BCS OUT07
|
|
PHA
|
|
LDA PLAYERID ;EXPLODING MAN
|
|
CMP #(SUPINE & $FF)
|
|
PLA
|
|
BCS OUT07
|
|
;
|
|
; SEE IF PLAYER WAITING OUTSIDE
|
|
; LEFT STICK STARTS GAME
|
|
;
|
|
BIT GAMESTAT
|
|
BPL OUT08
|
|
BIT PLYRSTAT
|
|
BPL OUT08
|
|
;
|
|
; WAITING FOR INPUT
|
|
;
|
|
AND #$F0 ;GET TOP NIBBLE
|
|
CMP #$B0 ;LEFT STICK?
|
|
BNE OUT07 ;NO STICK
|
|
;
|
|
;LEFT STICK
|
|
LDA #(ODOOR & $FF)
|
|
STA P1ID
|
|
LDA #16
|
|
STA PLAYERY
|
|
LDA #$88
|
|
STA PLAYERX
|
|
LDA #0 ;RESET D7 OF PLYRSTAT
|
|
STA PLYRSTAT
|
|
;
|
|
OUT08
|
|
ASL ;GET RIGHT
|
|
BCS NR
|
|
INX ;MARK RIGHT
|
|
NR ASL
|
|
BCS NL
|
|
DEX ;MARK LEFT
|
|
NL ASL
|
|
BCS ND
|
|
DEY ;MARK DOWN
|
|
ND ASL
|
|
BCS NU
|
|
INY ;MARK UP
|
|
NU
|
|
OUT07
|
|
;
|
|
; ALTER DELTAS ACCORDING TO X AND Y
|
|
;
|
|
BIT GAMESTAT
|
|
BMI SKIP32
|
|
LDA P0IND
|
|
CMP #(MAN4 & $FF) ;KNEELING MAN?
|
|
BEQ OUT20
|
|
LDA PLAYERY
|
|
BNE OUT20 ;DONT CHANGE DELTA IF IN AIR
|
|
SKIP32
|
|
TXA
|
|
PHP
|
|
BEQ SKIP28
|
|
LSR FRAME+1
|
|
SKIP28
|
|
TYA
|
|
PHP
|
|
LDX #1
|
|
BIT GAMESTAT
|
|
BMI SKIP96
|
|
PLP ;DONT DO Y'S IF CASTLE
|
|
DEX
|
|
SKIP96
|
|
ALTLOOP LDA PLAYERDX,X
|
|
PLP ;GET SIGN OF DELTADELTA
|
|
BNE SKIP94 ;GO IF STICK PRESSED
|
|
;DECAY DELTA
|
|
ORA #0 ;DELTA ZERO ?
|
|
BEQ ABORT0 ;DONT CHANGE IF SO
|
|
BPL NEGDELT ;POS, DECREASE
|
|
BMI POSDELT ;NEG, INCREASE
|
|
SKIP94 PHP
|
|
CPX #0 ;DOING X?
|
|
BNE SKIP77
|
|
STA REFSHAD
|
|
SKIP77 PLP
|
|
BMI NEGDELT
|
|
; POS DELTA, ADD
|
|
POSDELT CLC
|
|
ADC #$7F/4
|
|
BCS OK00 ;GO TO POSITIVE IS OK
|
|
BVS ABORT0 ;DONT OVERFLOW TO NEGATIVE
|
|
BVC OK00
|
|
;NEGATIVE DELTA
|
|
NEGDELT SEC
|
|
SBC #$7F/4
|
|
BCC OK00 ;WRAP TO NEGATIVE OK
|
|
BVS ABORT0
|
|
OK00 STA PLAYERDX,X
|
|
ABORT0 DEX
|
|
BPL ALTLOOP
|
|
OUT20
|
|
;
|
|
; APPLY DELTAS TO 16 BIT POSITION
|
|
; X=0 DELTA X, X=1 DELTAY
|
|
;
|
|
LDX #1
|
|
DELTLOOP LDY #0 ;SPEED FOR CASTLE
|
|
BIT GAMESTAT ;WHICH SCREEEN?
|
|
BPL SKIP33
|
|
INY
|
|
LDA WAVENO
|
|
CMP #4
|
|
BCC SKIP33
|
|
INY
|
|
SKIP33
|
|
LDA PLAYERDX,X ;LOAD DELTA
|
|
ASL
|
|
BCS SUBDELTA
|
|
;ADD DELTA
|
|
ADDDELT CLC
|
|
PHA
|
|
ADC PLAYERLX,X
|
|
STA PLAYERLX,X
|
|
BCC NOCARRY0
|
|
LDA PLAYERX,X
|
|
ADC #0
|
|
CMP MAXLIMS,X ;CHECK AGAINST MAX VALUE
|
|
BCS NOCARRY0
|
|
STA PLAYERX,X
|
|
NOCARRY0 PLA
|
|
DEY
|
|
BPL ADDDELT
|
|
BMI CONT01
|
|
;SUBTRACT DELTA
|
|
SUBDELTA ROR ;RESTORE SIGN
|
|
CMP #$80 ;FUCKING SPECIAL CASE
|
|
BNE SKIP97
|
|
LDA #$81
|
|
SKIP97
|
|
EOR #$FF ;COMPLEMENT
|
|
CLC
|
|
ADC #1
|
|
ASL ;*2
|
|
STA T0
|
|
SUBLOOP LDA PLAYERLX,X
|
|
SEC
|
|
SBC T0
|
|
STA PLAYERLX,X
|
|
BCS CARRY0
|
|
LDA PLAYERX,X
|
|
SBC #0
|
|
BCC CARRY0 ;BOTTOM LIMIT
|
|
CMP MINLIMS,X
|
|
BCC CARRY0
|
|
STA PLAYERX,X
|
|
CARRY0
|
|
DEY
|
|
BPL SUBLOOP
|
|
|
|
CONT01 DEX
|
|
BPL DELTLOOP
|
|
;
|
|
; SET UP PLAYER 0
|
|
;
|
|
NEWBOARD LDX NEWCNT
|
|
BEQ OUT09
|
|
LDA RAND
|
|
AND #$7
|
|
CLC
|
|
ADC WAVENO
|
|
TAY
|
|
LDA TREATABL,Y
|
|
STA P1ID,X
|
|
;DRIVE XPOS
|
|
LDA RANDH
|
|
AND #$F
|
|
TAY
|
|
LDA RANDH
|
|
CPY #$A ;RIGHT MAX
|
|
BCC INRANGE
|
|
AND #$F7 ;ZERO D3
|
|
ADC #1
|
|
INRANGE AND #$EF ;DISALLOW ODD HMOVE VALUES
|
|
STA P1HMS,X
|
|
DEC NEWCNT
|
|
;SET UP LOWER DOOR
|
|
DODOORS LDA #(DOOR & $FF)
|
|
STA P1ID
|
|
LDA #$88
|
|
STA P1HMS
|
|
;
|
|
OUT09
|
|
;
|
|
JSR SOUND
|
|
;
|
|
; SET UP SEA COLOR
|
|
;
|
|
LDA FRAME
|
|
AND #$7
|
|
BNE OUT100
|
|
LDA RAND
|
|
AND #$7
|
|
|
|
IF PAL
|
|
ORA #$B0
|
|
ELSE
|
|
ORA #$80
|
|
ENDIF
|
|
|
|
STA SEA
|
|
OUT100
|
|
;
|
|
; ANIMATE FIREBALLS
|
|
;
|
|
BIT GAMESTAT
|
|
BPL OUT15
|
|
LDA FRAME
|
|
AND #$3 ;FASTEST RATE
|
|
BNE OUT15
|
|
LDX #NUP0S-1
|
|
ALOOP1 LDA P0YS,X
|
|
CMP #DEAD
|
|
BEQ NEXT01
|
|
LDA P0ID,X
|
|
;MOVING FIREBALL
|
|
EOR #$10
|
|
SKIP00 STA P0ID,X
|
|
NEXT01 DEX
|
|
BPL ALOOP1
|
|
OUT14
|
|
;
|
|
; ANIMATE TREASURES
|
|
;
|
|
LDX #NUP1S-1
|
|
ALOOP0 LDA P1ID,X
|
|
CMP #(TREAS & $FF)
|
|
BCS NEXT02
|
|
;ANIMATED TREASURES
|
|
ATR LDY #6
|
|
ALOOP2 DEY
|
|
CMP ATABLE,Y
|
|
BNE ALOOP2
|
|
TYA
|
|
EOR #1
|
|
TAY
|
|
LDA ATABLE,Y
|
|
STA P1ID,X
|
|
NEXT02 DEX
|
|
BPL ALOOP0
|
|
OUT15
|
|
;
|
|
OVOUT BIT TIMOUT ;WAIT FOR OVERSCAN TIMEOUT
|
|
BPL OVOUT
|
|
JMP SCRNTOP ; NEW FRAME !
|
|
|
|
;
|
|
;
|
|
; SUBROUTINES
|
|
;
|
|
; SETUP DRAGON SCREEN
|
|
;
|
|
SETUPDR LDA #$C0
|
|
STA GAMESTAT
|
|
LDA #0
|
|
STA BKCLR
|
|
STA PLAYERDY
|
|
STA PLAYERY
|
|
STA DRAGONX
|
|
LDA #1
|
|
STA DRAGONDX
|
|
LDA #$80
|
|
STA PLYRSTAT
|
|
RTS
|
|
;
|
|
; START SOUND, HIGHTEST NUBER GET PRIOITIY
|
|
; X HAS SOUND NUMBER
|
|
; Z FLAG RESET ON RETURN
|
|
STARTSND
|
|
LDA SNDNOS,X
|
|
CMP SND1
|
|
BCC OUT25
|
|
STA SND1
|
|
LDA SNDTIMS,X
|
|
STA SND1TIME
|
|
OUT25 RTS
|
|
;
|
|
; SCORING VALUES
|
|
;
|
|
SCORES DC $82
|
|
DC $81
|
|
DC $30
|
|
DC $08
|
|
|
|
; TOP OF DRAGONS CAVE GRAPHICS
|
|
CAVE0 DC $00,$60,$FF,$FF
|
|
CAVE1 DC $00,$DB,$FF,$FF
|
|
CAVE2 DC $00,$B6,$FF,$FF
|
|
;
|
|
; CASTLE COLORS
|
|
;
|
|
IF PAL
|
|
COLORS DC $0A,$7A,$2A,$3A,$7A,$BA,$5A,$AA,$8A
|
|
ELSE
|
|
COLORS DC $0A,$BA,$1A,$DA,$BA,$7A,$CA,$6A,$5A
|
|
ENDIF
|
|
|
|
;FIREBALL SPEEDS
|
|
FBSPEEDS DC 2,2,2,2,2,3,3,3,4
|
|
|
|
|
|
;SKIP TO PAGE BOUNDRY
|
|
ORG $1B00
|
|
|
|
; DRAGON 3
|
|
DRAGON8
|
|
DC $2E, $6C, $F9, $FF, $BF, $3F, $7F, $FF
|
|
DC $F7, $E0, $E0, $60, $30, $19, $1F, $0E
|
|
DRAGON9
|
|
DC $00, $F0, $FC, $FF, $FF, $FF, $FF, $8F
|
|
DC $07, $03, $81, $4F, $C3, $9E, $02, $3E
|
|
DRAGON10
|
|
DC $70, $61, $F9, $F1, $FF, $FF, $FC, $F8
|
|
DC $F1, $E0, $80, $00, $00, $02, $00, $10
|
|
DRAGON11
|
|
DC $00, $20, $90, $F8, $FF, $EF, $F8, $70
|
|
DC $E0, $00, $00, $00, $40, $00, $00, $00
|
|
|
|
; DRAGON 2
|
|
DRAGON4
|
|
DC $38, $70, $F8, $7F, $3F, $3F, $FF, $FF
|
|
DC $F3, $E0, $60, $30, $11, $1F, $0E, $00
|
|
DRAGON5
|
|
DC $00, $78, $FE, $FF, $FF, $FF, $FF, $CF
|
|
DC $87, $C3, $47, $C1, $8F, $02, $1E, $00
|
|
DRAGON6
|
|
DC $EC, $D9, $F9, $F1, $FF, $FF, $FC, $F8
|
|
DC $F1, $E0, $80, $00, $00, $00, $00, $00
|
|
DRAGON7
|
|
DC $00, $20, $90, $F8, $FF, $EF, $F9, $70
|
|
DC $E0, $00, $04, $08, $10, $40, $00, $00
|
|
|
|
; DRAGON 1
|
|
DRAGON0
|
|
DC $7E, $30, $71, $7B, $7F, $3F, $7F, $FF
|
|
DC $F7, $E0, $E0, $60, $30, $19, $1F, $0E
|
|
DRAGON1
|
|
DC $00, $F0, $FC, $FF, $FF, $FF, $FF, $8F
|
|
DC $07, $03, $87, $41, $CF, $82, $1E, $21
|
|
DRAGON2
|
|
DC $38, $61, $E1, $F1, $FF, $FF, $F8, $F0
|
|
DC $E1, $C0, $80, $00, $00, $00, $00, $00
|
|
DRAGON3
|
|
DC $00, $20, $90, $F8, $FF, $EF, $F9, $70
|
|
DC $E1, $02, $04, $04, $08, $00, $00, $00
|
|
;FLAMING DRAGON
|
|
DRAGON12
|
|
DC $7E, $30, $71, $7B, $7F, $3F, $7F, $FF
|
|
DC $F7, $E0, $E0, $60, $30, $19, $1F, $0E
|
|
DRAGON13
|
|
DC $00, $F0, $FC, $FF, $FF, $FF, $FF, $8F
|
|
DC $07, $03, $87, $41, $CF, $82, $1E, $21
|
|
DRAGON14
|
|
DC $70, $6E, $F8, $FC, $FF, $FF, $FB, $F1
|
|
DC $EB, $CB, $8F, $06, $03, $03, $07, $0E
|
|
DRAGON15
|
|
DC $00, $00, $00, $00, $00, $80, $C0, $C0
|
|
DC $F0, $E0, $E8, $F0, $E0, $30, $10, $18
|
|
|
|
|
|
|
|
MAN0
|
|
DC $00, $C2, $42, $4E, $58, $50, $70, $30
|
|
DC $30, $70, $78, $3C, $38, $60, $60, $60
|
|
MAN1
|
|
DC $00, $60, $20, $24, $3C, $38, $30, $30
|
|
DC $30, $30, $70, $38, $30, $60, $60, $60
|
|
MAN2
|
|
DC $00, $18, $28, $18, $38, $70, $70, $30
|
|
DC $30, $30, $F4, $B4, $38, $60, $60, $60
|
|
MAN4
|
|
DC $00, $7C, $60, $3C, $0E, $0E, $7E, $04
|
|
DC $0C, $0C, $00, $00, $00, $00, $00, $00
|
|
FB0
|
|
DC $00, $10, $5A, $1A, $48, $42, $1A, $3C
|
|
DC $6E, $FE, $3F, $6E, $3A, $3C, $18, $00
|
|
FB1
|
|
DC $52, $08, $40, $12, $02, $48, $00, $98
|
|
DC $3D, $7A, $5E, $FE, $74, $19, $24, $08
|
|
|
|
SUPINE
|
|
DC $00, $00, $00, $00, $C2, $4E, $48, $7C
|
|
DC $3E, $06, $06, $07, $3F, $03, $06, $06
|
|
SUPINE1
|
|
DC $00, $00, $00, $30, $31, $99, $FF, $38
|
|
DC $38, $78, $4C, $4F, $61, $20, $00, $00
|
|
SUPINE2
|
|
DC $00, $00, $20, $3B, $0A, $0A, $0E, $9C
|
|
DC $B8, $F0, $FC, $E4, $C4, $C0, $00, $00
|
|
HFB0
|
|
DC $00, $00, $04, $AA, $1F, $4A, $14, $00
|
|
DC $00, $00, $00, $00, $00, $00, $00
|
|
HFB1
|
|
DC $00
|
|
DC $00, $08, $5E, $07, $2F, $8A, $00, $00
|
|
DC $00, $00, $00, $00, $00, $00
|
|
|
|
;
|
|
; SIX CHAR ROUTINE
|
|
;
|
|
SIXCHAR
|
|
SCKRNL STY T1 ;MC 64
|
|
LDA (SIXIND5),Y ;MC 69
|
|
STA P1GR ;MC 72
|
|
STA HSYNC ;MC 75 (76)
|
|
LDA (SIXIND4),Y ;MC 5
|
|
STA P0GR ;MC 8
|
|
LDA (SIXIND3),Y ;MC 13
|
|
STA P1GR ;MC 16
|
|
LDA (SIXIND2),Y ;MC 21
|
|
STA T2 ;MC 24
|
|
LDA (SIXIND1),Y ;MC 29
|
|
TAX ;MC 31
|
|
LDA (SIXIND0),Y ;MC 36
|
|
TAY ;MC 38
|
|
LDA T2 ;MC 41
|
|
STA P0GR ;MC 44
|
|
STX P1GR ;MC 47
|
|
STY P0GR ;MC 50
|
|
STY P1GR ;MC 53
|
|
LDY T1 ;MC 56
|
|
DEY ;MC 58
|
|
BPL SCKRNL ;MC 60/61
|
|
INY ; MAKE Y=0
|
|
STY P1GR
|
|
STY P0GR
|
|
STY P1GR
|
|
STY P0GR
|
|
WASTE12 RTS
|
|
;
|
|
;SCORE
|
|
; A HAS BYTE CARRY CLEAR=ADD TO LO, CARRY SET=ADD TO MID SCORE
|
|
;
|
|
SCORE SED
|
|
LDX PLAYNO ;PLAYER UP
|
|
BCC SKIP78 ;ADD TO LO BYTE
|
|
INX ;POINT TO MID BYTE
|
|
INX
|
|
SKIP78 CLC
|
|
SCORLOOP ADC SCOREL0,X
|
|
STA SCOREL0,X
|
|
BCC OK01
|
|
INX
|
|
INX
|
|
LDA #1
|
|
CPX #6
|
|
BCC SCORLOOP
|
|
OK01 CLD
|
|
RTS
|
|
|
|
;
|
|
; TREASURE SCORING DIVISIONS
|
|
|
|
BRKS DC (BRK1 & $FF),(BRK2 & $FF),(BRK3 & $FF),$FF
|
|
|
|
|
|
;PAD TO NEXT PAGE BOUNDRY
|
|
DC $00, $00, $00
|
|
|
|
ATREAS
|
|
DIAMD0
|
|
DC $00, $10, $28, $28, $54, $54, $BA, $54
|
|
DC $28, $10
|
|
DIAMD1
|
|
DC $00, $10, $28, $28, $54, $54
|
|
DC $BA, $54, $28, $10
|
|
CROWN0
|
|
DC $00, $7E, $7E, $5A
|
|
DC $5A, $00, $81, $00, $24, $00
|
|
CROWN1
|
|
DC $00, $7E
|
|
DC $7E, $5A, $5A, $00, $00, $42, $18, $00
|
|
BRK1
|
|
HARPL0
|
|
DC $00, $7E, $95, $95, $95, $95, $56, $56
|
|
DC $42, $81
|
|
HARPL1
|
|
DC $00, $7E, $A9, $A9, $A9, $A9
|
|
DC $6A, $6A, $42, $81
|
|
TREAS
|
|
CHEST
|
|
DC $00, $7E, $7E, $7E
|
|
DC $66, $FF, $54, $28, $00, $00
|
|
BRK2
|
|
HELMET
|
|
DC $00, $42
|
|
DC $66, $66, $42, $E7, $BD, $BD, $99, $42
|
|
CHEST1
|
|
DC $00, $7C, $38, $10, $38, $10, $38, $6C
|
|
DC $AA, $AA
|
|
BRK3
|
|
LAMP
|
|
DC $00, $3C, $18, $FE, $BF, $AD
|
|
DC $E1, $00, $00, $00
|
|
URN
|
|
DC $00, $7C, $38, $10
|
|
DC $38, $10, $38, $7C, $FE, $FE
|
|
JUG
|
|
DC $00, $3C
|
|
DC $7E, $FF, $BF, $DF, $7E, $3C, $3C, $7E
|
|
DOOR
|
|
DC $00, $FF, $FE, $FF, $DF, $FF, $FE, $FF
|
|
DC $FF, $7E
|
|
ODOOR
|
|
DC $00, $8F, $8E, $8F, $8B, $8F
|
|
DC $8E, $8F, $C7, $7E
|
|
SPACE
|
|
SPACE10
|
|
DC $00, $00, $00, $00
|
|
DC $00, $00, $00, $00, $00, $00
|
|
NUMBERS
|
|
N0
|
|
DC $38, $6C
|
|
DC $C6, $86, $86, $C6, $6C, $38
|
|
N1
|
|
DC $08, $1C
|
|
DC $18, $18, $18, $18, $38, $10
|
|
N2
|
|
DC $FC, $FE
|
|
DC $62, $30, $18, $8C, $CC, $78
|
|
N3
|
|
DC $3C, $6E
|
|
DC $66, $C6, $1C, $0E, $66, $3C
|
|
N4
|
|
DC $08, $1C
|
|
DC $0C, $FE, $CC, $6C, $3C, $1C
|
|
N5
|
|
DC $FC, $8E
|
|
DC $0E, $EE, $BC, $80, $FC, $FC
|
|
N6
|
|
DC $7C, $C6
|
|
DC $C6, $FC, $C0, $C0, $FC, $78
|
|
N7
|
|
DC $E0, $E0
|
|
DC $70, $30, $18, $8C, $FE, $7E
|
|
N8
|
|
DC $3C, $66
|
|
DC $CE, $7C, $64, $C6, $7C, $38
|
|
N9
|
|
DC $78, $CC
|
|
DC $0E, $7E, $CE, $CE, $CC, $78
|
|
MAN
|
|
DC $00, $A0
|
|
DC $40, $E0, $40
|
|
|
|
DELAYS
|
|
DC W8 & $FF
|
|
DC W8 & $FF
|
|
DC W8 & $FF
|
|
DC W7 & $FF
|
|
DC W7 & $FF
|
|
DC W7 & $FF
|
|
DC W6 & $FF
|
|
DC W6 & $FF
|
|
DC W11 & $FF
|
|
DC W11 & $FF
|
|
DC W10 & $FF
|
|
DC W10 & $FF
|
|
DC W10 & $FF
|
|
DC W9 & $FF
|
|
DC W9 & $FF
|
|
DC W9 & $FF
|
|
|
|
|
|
;PAD TO NEXT PAGE BOUNDRY
|
|
DC $00, $00, $00, $00, $00
|
|
|
|
;
|
|
; COLORS FOR 16 LINE GRAPHICS
|
|
MAN0C
|
|
DC $00, $C8, $C8, $C8, $C8, $C8, $44, $00
|
|
DC $44, $44, $44, $44, $44, $18, $18, $12
|
|
MAN1C
|
|
DC $00, $C8, $C8, $C8, $C8, $C8, $44, $00
|
|
DC $44, $44, $44, $44, $44, $18, $18, $12
|
|
MAN2C
|
|
DC $00, $C8, $C8, $C8, $C8, $C8, $44, $00
|
|
DC $44, $44, $44, $44, $44, $18, $18, $12
|
|
MAN4C
|
|
DC $00, $C8, $C8, $C8, $44, $44, $44, $44
|
|
DC $18, $18, $00, $00
|
|
SCORESND
|
|
DC $05, $06, $07, $08
|
|
FB0C
|
|
DC $00, $44, $44, $F6, $44, $44, $44, $44
|
|
DC $44, $44, $44, $44, $44, $44, $44, $42
|
|
FB1C
|
|
DC $00, $44, $44, $F6, $44, $44, $44, $44
|
|
DC $44, $44, $44, $44, $44, $44, $44, $42
|
|
SUPINEC
|
|
DC $00, $C8, $C8, $C8, $C8, $C8, $C8, $C8
|
|
DC $44, $00, $44, $44, $44, $44, $18, $12
|
|
SUPINE1C
|
|
DC $00, $12, $18, $18, $18, $44, $44, $44
|
|
DC $44, $C8, $C8, $C8, $C8, $18, $18, $12
|
|
SUPINE2C
|
|
DC $00, $C8, $C8, $C8, $C8, $C8, $44, $00
|
|
DC $44, $44, $44, $44, $18, $18, $18, $12
|
|
SHIELD
|
|
DC $00, $38, $44, $6C, $D6, $FE, $C6, $82
|
|
DC $82, $00
|
|
|
|
;
|
|
; RUNTIME SOUND
|
|
;
|
|
SOUND
|
|
LDA GAMESTAT
|
|
BEQ TURNOFF ; DISALLOW SOUND DURING ATTRACT
|
|
LDA SND1TIME
|
|
BNE SKIP43
|
|
STA SND1 ; TUN OFF SOUND ID
|
|
BEQ TURNOFF
|
|
SKIP43 DEC SND1TIME
|
|
; A HAS SOUND COUNTDOWN TIMER
|
|
LDX SND1
|
|
LDY CTLS,X
|
|
STY SNDC1
|
|
LDY FREQS,X
|
|
DEX
|
|
BPL NOT0
|
|
;FIRE SOUND
|
|
; TIMER/8 INTO VOLUME
|
|
LSR
|
|
LSR
|
|
LSR
|
|
JMP TURNOFF
|
|
NOT0 DEX
|
|
;BONUS SOUND
|
|
BMI TURNOFF
|
|
NOT1 DEX
|
|
;JUMP SOUND
|
|
BMI TURNOFF
|
|
NOT2 DEX
|
|
BPL NOT3
|
|
;EXPLOSION
|
|
; RANDOM D4 INTO FREQ, 8 INTO VOL
|
|
LDA RAND
|
|
ORA #$10
|
|
TAY
|
|
LDA #$8
|
|
BNE TURNOFF
|
|
NOT3
|
|
;DEATH SOUND
|
|
; 32-TIMER/2 INTO FREQ, TIMER/4 INTO VOL
|
|
LSR
|
|
EOR #$1F
|
|
TAY
|
|
EOR #$1F
|
|
LSR
|
|
STA CAVESHAD
|
|
TURNOFF STY SNDF1
|
|
STA SNDV1
|
|
OUT24
|
|
;
|
|
; RUNNING SOUND
|
|
;
|
|
LDY #0
|
|
LDA PLAYERDX
|
|
ORA PLAYERDY
|
|
BEQ OUT42
|
|
LDA FRAME
|
|
AND #7
|
|
BNE OUT42
|
|
;HERE IF MOVING & EVERY EIGHTH FRAME
|
|
BIT GAMESTAT
|
|
BVC OUT42 ;SOFT ATTRACT ON
|
|
BMI SKIP42
|
|
LDA PLAYERY
|
|
BNE OUT43
|
|
SKIP42
|
|
;SET FREQ & VOLUME OF STEP
|
|
LDA #$1C
|
|
STA SNDF0
|
|
LDY #$A
|
|
OUT42 STY SNDV0
|
|
STY SNDC0
|
|
OUT43
|
|
RTS
|
|
|
|
|
|
;PAD TO PAGE BOUNDRY
|
|
DC $00, $00, $00
|
|
|
|
;
|
|
; TREASURE COLORS
|
|
;
|
|
TREASCLR
|
|
|
|
DIAMD0C
|
|
DC $00, $FF, $FF, $FF, $FF, $88, $88, $88
|
|
DC $FF, $FF
|
|
DIAMD1C
|
|
DC $00, $FA, $FA, $FA, $FA, $88
|
|
DC $FF, $88, $FA, $FA
|
|
CROWN0C
|
|
DC $00, $28, $44, $28
|
|
DC $28, $28, $28, $00, $78, $00
|
|
CROWN1C
|
|
DC $00, $28
|
|
DC $44, $28, $28, $28, $28, $00, $78, $00
|
|
HARPL0C
|
|
DC $00, $D8, $88, $88, $88, $88, $88, $88
|
|
DC $88, $FF
|
|
HARPL1C
|
|
DC $00, $D8, $88, $88, $88, $88
|
|
DC $88, $88, $88, $FF
|
|
CHESTC
|
|
DC $00, $14, $14, $14
|
|
DC $14, $12, $FC, $FC, $00, $00
|
|
HELMETC
|
|
DC $00, $88
|
|
DC $88, $88, $18, $18, $18, $18, $18, $18
|
|
CHEST1C
|
|
DC $00, $16, $44, $16, $44, $16, $16, $16
|
|
DC $FF, $FF
|
|
LAMPC
|
|
DC $00, $88, $14, $14, $14, $14
|
|
DC $14, $00, $00, $00
|
|
URNC
|
|
DC $44, $44, $14, $44
|
|
DC $14, $44, $44, $44, $44, $14
|
|
JUGC
|
|
DC $00, $18
|
|
DC $88, $18, $18, $18, $18, $88, $88, $18
|
|
DOORC
|
|
DC $00, $12, $12, $16, $12, $12, $12, $16
|
|
DC $12, $12
|
|
ODOORC
|
|
DC $00, $12, $12, $16, $12, $12
|
|
DC $12, $16, $12, $12
|
|
MAXLIMS
|
|
DC $94, $87
|
|
MINLIMS
|
|
DC $01, $10
|
|
SCORECLR
|
|
DC $00, $44
|
|
LINES
|
|
DC $00, $10, $1F, $2E, $3D, $4C
|
|
DC $5B, $6A, $79, $88
|
|
OFFSETS
|
|
DC $1C, $05, $19, $07
|
|
|
|
|
|
DRAGCLR
|
|
DC $D6, $18, $86, $64, $46, $18, $F6, $02
|
|
DC $0F
|
|
MINDMAX
|
|
DC $50, $40, $30, $28, $20, $18, $18
|
|
DC $18, $18, $20
|
|
ATABLE
|
|
DC $28, $32, $14, $1E, $00
|
|
DC $0A
|
|
CASTLE0
|
|
DC $70, $70, $F0, $D0, $D0, $D0, $F0
|
|
DC $F0, $50, $00, $00
|
|
CASTLE1
|
|
DC $00, $00, $00, $00
|
|
DC $00, $00, $80, $80, $80, $00, $00
|
|
CTLS
|
|
DC $08
|
|
DC $05, $01, $04, $0C
|
|
FREQS
|
|
DC $1A, $0A, $15, $0A
|
|
DC $10
|
|
;
|
|
; SOUND TO USE
|
|
;
|
|
SNDNOS
|
|
DC FIRES, BONSND, JUMPS, EXSND, DEATHS, BONSND, BONSND, BONSND, BONSND
|
|
;
|
|
; DURATION OF SOUNDS
|
|
SNDTIMS
|
|
DC $1F, $1F, $0F, $0F, $3F, $3F, $2F, $1F, $0F
|
|
; TREASURES TABLE
|
|
; USED FOR WEIGHTED RAMDOM SELECTION
|
|
TREATABL
|
|
DC URN & $FF
|
|
DC LAMP & $FF
|
|
DC JUG & $FF
|
|
DC CHEST1 & $FF
|
|
DC JUG & $FF
|
|
DC HELMET & $FF
|
|
DC CHEST1 & $FF
|
|
DC URN & $FF
|
|
DC LAMP & $FF
|
|
DC CHEST & $FF
|
|
DC HELMET & $FF
|
|
DC HARPL0 & $FF
|
|
DC LAMP & $FF
|
|
DC DIAMD1 & $FF
|
|
DC CROWN0 & $FF
|
|
DC JUG & $FF
|
|
|
|
DC $F7 ; TO MATCH RELEASE EPROM
|
|
VECTORS
|
|
DC.W START
|
|
DC.W START
|
|
|
|
END
|