mirror of
https://github.com/antoinevignau/source.git
synced 2025-01-16 21:32:11 +00:00
6164 lines
90 KiB
ArmAsm
6164 lines
90 KiB
ArmAsm
|
*
|
|||
|
* Lode Runner
|
|||
|
* (c) 1983, Broderbund Software
|
|||
|
* (s) 2014, Brutal Deluxe Software
|
|||
|
*
|
|||
|
|
|||
|
mx %11
|
|||
|
org $0
|
|||
|
lst off
|
|||
|
|
|||
|
ds $800
|
|||
|
|
|||
|
* 0 vide
|
|||
|
* 1 mur
|
|||
|
* 2 mur dur
|
|||
|
* 3 <EFBFBD>chelle visible
|
|||
|
* 4 liane
|
|||
|
* 5 trappe
|
|||
|
* 6 <EFBFBD>chelle invisible
|
|||
|
* 7 tr<EFBFBD>sor
|
|||
|
* 8 ennemi
|
|||
|
* 9 h<EFBFBD>ros
|
|||
|
|
|||
|
* Sprite quand heros ennemi tombe dans un trou :
|
|||
|
* - venant de gauche : 20 53 (35h)
|
|||
|
* - venant de droite : 19 54 (36h)
|
|||
|
*
|
|||
|
*-----------------------------------
|
|||
|
* EQUATES
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
lvlWIDTH = 28 ; $1c
|
|||
|
lvlHEIGHT = 16 ; $10
|
|||
|
|
|||
|
sprWIDTH = 10
|
|||
|
sprHEIGHT = 11
|
|||
|
|
|||
|
nbLIVES = 5
|
|||
|
maxLEVEL = 150
|
|||
|
maxHEIGHT = 192 ; lines
|
|||
|
|
|||
|
modeEDIT = 0 ; to decode level
|
|||
|
modeGAME = 1
|
|||
|
|
|||
|
sprEMPTY = 0
|
|||
|
sprWALL = 1
|
|||
|
sprWALLI = 2 ; mur indestructible
|
|||
|
sprLADDER = 3
|
|||
|
sprBAR = 4
|
|||
|
sprTRAP = 5
|
|||
|
sprLADDERI = 6
|
|||
|
sprCHEST = 7
|
|||
|
sprFOE = 8
|
|||
|
sprHERO = 9
|
|||
|
sprCURSOR = 10
|
|||
|
spr0 = $3b ; until $44
|
|||
|
sprA = $45 ; until $5e >.()/-< (latest sprite is $65)
|
|||
|
|
|||
|
minJOY = $12 ; joystick min/center/max values
|
|||
|
ctrJOY = $2e
|
|||
|
maxJOY = $3b
|
|||
|
|
|||
|
*--- The big zero page usage
|
|||
|
|
|||
|
boardX = $00
|
|||
|
boardY = $01
|
|||
|
heroSTEPX = $02
|
|||
|
heroSTEPY = $03
|
|||
|
heroINDEX = $04
|
|||
|
fgLEFTRIGHT = $05
|
|||
|
ptrBOARD = $06 ; $06..$07: pointer to board
|
|||
|
ptrBBACK = $08 ; $08..$09: pointer to back board
|
|||
|
ptrDATA = $0a ; $0a..$0b: pointer to data (HGR or other)
|
|||
|
ptrHGR1 = $0c ; $0c..$0d
|
|||
|
ptrHGR2 = $0e ; $0e..$0f
|
|||
|
ptrSTRSND = $10 ; $10..$11: pointer to some table (string, sound)
|
|||
|
foeX = $12
|
|||
|
foeY = $13
|
|||
|
foeINDEX = $14
|
|||
|
foeLEFTRIGHT = $15
|
|||
|
foeACTION = $16
|
|||
|
foeSTEPX = $17 ; coordinate
|
|||
|
foeSTEPY = $18 ; coordinate
|
|||
|
idxFOE = $19 ; current foe index
|
|||
|
fgODDEVEN = $1a
|
|||
|
theYSCREEN = $1b
|
|||
|
theXSCREEN = $1c
|
|||
|
nbLINES = $1d
|
|||
|
theA = $1e
|
|||
|
hgrPAGE = $1f
|
|||
|
CH = $24 ; **
|
|||
|
CV = $25 ; **
|
|||
|
CSWL = $36 ; **
|
|||
|
CSWH = $37 ; **
|
|||
|
KSWL = $38 ; **
|
|||
|
KSWH = $39 ; **
|
|||
|
theMASK1 = $50
|
|||
|
theMASK2 = $51
|
|||
|
fgCOLLISION = $52
|
|||
|
tempX6 = $53
|
|||
|
idxNOTE = $54
|
|||
|
tempX4 = $55
|
|||
|
tempY1 = $56
|
|||
|
tempX5 = $57
|
|||
|
tempX3 = $5a
|
|||
|
tempX2 = $5b
|
|||
|
temp1 = $5c
|
|||
|
tempX = $5d
|
|||
|
tempY = $5e
|
|||
|
theJOYX = $65
|
|||
|
theJOYY = $66
|
|||
|
sprTABLE = $71
|
|||
|
theX = $85
|
|||
|
theY = $86
|
|||
|
activePAGE = $87
|
|||
|
tempINDEX = $88
|
|||
|
theCENTAINE = $89
|
|||
|
theDIZAINE = $8a ; 8a
|
|||
|
theUNITE = $8b ; 8b
|
|||
|
theSPEED = $8c ; 8c
|
|||
|
nbFOE = $8d ; 8d
|
|||
|
theSCORE = $8e ; 8e..8f.90..91
|
|||
|
idxLVLDISK = $92 ; index in level buffer from disk
|
|||
|
nbCHEST = $93 ; 93
|
|||
|
fgCHEST = $94 ; 94 1: not a chest, 0: a chest
|
|||
|
fgINPUT = $95 ; "J"oystick, "K"eyboard
|
|||
|
intLEVEL = $96 ; 96 theLEVEL-1
|
|||
|
theMEN = $98 ; 5 bonshommes pour d<>marrer
|
|||
|
fgSOUND = $99 ; 0: no sound, -1: sound on
|
|||
|
fgPLAY = $9a ; 1: alive, 0: dead
|
|||
|
fgHEROFELL = $9b ; 0: hero fell into a hole, $20: tempo for game speed
|
|||
|
fgHOLE = $9c ; -1: left hole, 0: none, 1: right hole
|
|||
|
fgGOODSTART = $9d ; 1: start from level 0 / allow score update, 0: not true
|
|||
|
theKEY1 = $9e
|
|||
|
theKEY2 = $9f
|
|||
|
idxDIG = $a0 ; dig index in sprite list
|
|||
|
counter = $a1 ; a simple counter
|
|||
|
fgLVLMODE = $a2 ; 0: edit, <>0: game
|
|||
|
idxLADDERI = $a3
|
|||
|
fgSPEED = $a4 ; speed of the game
|
|||
|
fgCIRCLE = $a5 ; 0: show level, 1: hide level
|
|||
|
theLEVEL = $a6 ; current level
|
|||
|
fgDEMO = $a7 ; 1: in demo mode
|
|||
|
ptrDEMO = $a8 ; $a8..$a9 - pointer to demo data
|
|||
|
demoKEY = $aa ; the demo key actions
|
|||
|
demoREPEAT = $ab ; the demo repeat factor
|
|||
|
fgKEYBTN0 = $ac ; 1: no key/btn0 pressed, 0: key/btn0 pressed
|
|||
|
fgCHANGE = $ad ; 1: no change, 0: change
|
|||
|
sprDATA = $df ; $df..$ff
|
|||
|
|
|||
|
|
|||
|
chrLA = $88
|
|||
|
chrRET = $8d
|
|||
|
chrRA = $95
|
|||
|
chrESC = $9b
|
|||
|
chrSPC = " "
|
|||
|
chrZERO = "0"
|
|||
|
chrNINE = "9"
|
|||
|
chrDOT = "."
|
|||
|
chrA = "A"
|
|||
|
chrI = "I"
|
|||
|
chrJ = "J"
|
|||
|
chrK = "K"
|
|||
|
chrL = "L"
|
|||
|
chrN = "N"
|
|||
|
chrO = "O"
|
|||
|
chrU = "U"
|
|||
|
chrY = "Y"
|
|||
|
chrZ = "Z"
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* SOFTSWITCHES
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
KBD EQU $C000
|
|||
|
KBDSTROBE EQU $C010
|
|||
|
SPKR EQU $C030
|
|||
|
TXTCLR EQU $C050
|
|||
|
MIXCLR EQU $C052
|
|||
|
TXTPAGE1 EQU $C054
|
|||
|
TXTPAGE2 EQU $C055
|
|||
|
HIRES EQU $C057
|
|||
|
BUTN0 EQU $C061
|
|||
|
BUTN1 EQU $C062
|
|||
|
PADDL0 EQU $C064
|
|||
|
PADDL1 EQU $C065
|
|||
|
PTRIG EQU $C070
|
|||
|
SETKBD EQU $FE89
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* DONNEES
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
put LR.Data
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* PAGES GRAPHIQUES
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
HGR1 ds 8192
|
|||
|
HGR2 ds 8192
|
|||
|
HGR3 = *
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* ENTRY POINT
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
L6000 JSR checkJOYSTICK
|
|||
|
|
|||
|
LDA #$01 ; read score table
|
|||
|
JSR readSCORE
|
|||
|
|
|||
|
*--- Show title page
|
|||
|
* Data from $0F00 to $1A84
|
|||
|
|
|||
|
showTITLEPAGE
|
|||
|
JSR clearHGR1 ; display the compressed title page
|
|||
|
LDA #<logo-1
|
|||
|
STA L6030+1
|
|||
|
LDA #>logo-1
|
|||
|
STA L6030+2
|
|||
|
LDY #$00
|
|||
|
STY theY
|
|||
|
STY fgDEMO
|
|||
|
STY intLEVEL
|
|||
|
LDA #>HGR1
|
|||
|
STA hgrPAGE
|
|||
|
STA activePAGE
|
|||
|
L6023 JSR setHGRPOINTER
|
|||
|
LDY #$00
|
|||
|
L6028 INC L6030+1
|
|||
|
BNE L6030
|
|||
|
INC L6030+2
|
|||
|
L6030 LDA L6028
|
|||
|
BEQ L603F
|
|||
|
BPL L603C
|
|||
|
STA (ptrHGR1),Y
|
|||
|
INY
|
|||
|
BPL L6028
|
|||
|
L603C TAY
|
|||
|
BPL L6028
|
|||
|
L603F INC theY
|
|||
|
LDY theY
|
|||
|
CPY #maxHEIGHT ; until line 192
|
|||
|
BCC L6023
|
|||
|
STA TXTPAGE1
|
|||
|
STA HIRES
|
|||
|
STA MIXCLR
|
|||
|
STA TXTCLR
|
|||
|
JMP L618E
|
|||
|
|
|||
|
*---
|
|||
|
|
|||
|
L6056 LDA #$00
|
|||
|
STA theSCORE
|
|||
|
STA theSCORE+1
|
|||
|
STA theSCORE+2
|
|||
|
STA theSCORE+3
|
|||
|
STA $97 ; l'intelligence des ennemis peut-<2D>tre ?
|
|||
|
STA fgCIRCLE
|
|||
|
STA tempX6
|
|||
|
STA demoREPEAT
|
|||
|
STA ptrDEMO ; demo actions
|
|||
|
LDA #>demoDATA
|
|||
|
STA ptrDEMO+1
|
|||
|
LDA #nbLIVES ; 5 men to start with
|
|||
|
STA theMEN
|
|||
|
LDA fgDEMO
|
|||
|
LSR
|
|||
|
BEQ L6099
|
|||
|
LDA #$01
|
|||
|
JSR readSCORE ; load score
|
|||
|
CMP #$00
|
|||
|
BNE L6086
|
|||
|
JSR tellNODATADISK
|
|||
|
JMP showTITLEPAGE ; start again
|
|||
|
|
|||
|
L6086 LDA scorebuf+$FF
|
|||
|
BNE L6091
|
|||
|
LDA CSWL ; this code is useless
|
|||
|
LDX CSWH ; if no copy protection remains
|
|||
|
BNE L6095
|
|||
|
L6091 LDA KSWL
|
|||
|
LDX KSWH
|
|||
|
L6095 STA CH
|
|||
|
STX CV
|
|||
|
L6099 JSR clearHGRPAGES ; clear HGR pages and draw board
|
|||
|
STA TXTPAGE1
|
|||
|
L609F LDX #modeGAME
|
|||
|
JSR prepareLEVEL
|
|||
|
LDA #$00
|
|||
|
STA theKEY1
|
|||
|
STA theKEY2
|
|||
|
LDA fgDEMO ; are we in demo mode?
|
|||
|
LSR
|
|||
|
BEQ L60BF ; yes
|
|||
|
JSR waitKEYUP
|
|||
|
LDA boardX
|
|||
|
STA theX
|
|||
|
LDA boardY
|
|||
|
STA theY
|
|||
|
LDA #sprHERO
|
|||
|
JSR blinkSPRITE
|
|||
|
L60BF LDX #$00
|
|||
|
STX fgHOLE
|
|||
|
STX idxNOTE
|
|||
|
LDA $97
|
|||
|
CLC
|
|||
|
ADC nbFOE
|
|||
|
TAY
|
|||
|
LDX L6214,Y
|
|||
|
LDA L6CA7,X
|
|||
|
STA $60
|
|||
|
LDA L6CA7+1,X
|
|||
|
STA $61
|
|||
|
LDA L6CA7+2,X
|
|||
|
STA $62
|
|||
|
LDY $97
|
|||
|
LDA L621D,Y
|
|||
|
STA $5F
|
|||
|
|
|||
|
L60E4 JSR handleHERO
|
|||
|
LDA fgPLAY ; are we dead?
|
|||
|
BEQ L613F ; yes
|
|||
|
JSR playMELODY
|
|||
|
LDA nbCHEST ; remaining chests?
|
|||
|
BNE L60F5 ; yes
|
|||
|
JSR showINVISIBLELADDERS
|
|||
|
|
|||
|
L60F5 LDA boardY ; are we on top row
|
|||
|
BNE L6107
|
|||
|
LDA heroSTEPY ; are we going up?
|
|||
|
CMP #$02
|
|||
|
BNE L6107
|
|||
|
LDA nbCHEST ; are there chests left?
|
|||
|
BEQ L611A ; no
|
|||
|
CMP #$FF
|
|||
|
BEQ L611A ; no, we won
|
|||
|
|
|||
|
L6107 JSR checkHOLE ; are there holes active?
|
|||
|
LDA fgPLAY ; are we dead?
|
|||
|
BEQ L613F ; yes
|
|||
|
JSR playMELODY
|
|||
|
JSR handleFOE ; handle the foes
|
|||
|
LDA fgPLAY ; am I dead?
|
|||
|
BEQ L613F ; yes...
|
|||
|
BNE L60E4 ; no, loop
|
|||
|
|
|||
|
L611A INC theLEVEL ; next level, no chests left
|
|||
|
INC intLEVEL
|
|||
|
INC theMEN ; man++
|
|||
|
BNE L6124
|
|||
|
DEC theMEN ; man--
|
|||
|
L6124 LDX #$0F
|
|||
|
STX temp1
|
|||
|
L6128 LDY #$01 ; ajoute 15 x 100 points
|
|||
|
LDA #$00
|
|||
|
JSR printSCORE
|
|||
|
JSR scoreSOUND
|
|||
|
JSR scoreSOUND
|
|||
|
JSR scoreSOUND
|
|||
|
DEC temp1
|
|||
|
BNE L6128
|
|||
|
L613C JMP L609F
|
|||
|
|
|||
|
L613F DEC theMEN ; man--
|
|||
|
JSR printMEN
|
|||
|
JSR prepareMELODY
|
|||
|
HEX 02400240035003500460046005700570
|
|||
|
HEX 068006800790079008A008A009B009B0
|
|||
|
HEX 0AC00AC00BD00BD00CE00CE00DF00DF0
|
|||
|
HEX 00
|
|||
|
|
|||
|
L6178 JSR playMELODY
|
|||
|
BCS L6178
|
|||
|
LDA fgDEMO
|
|||
|
LSR
|
|||
|
BEQ L61D0
|
|||
|
LDA theMEN ; man
|
|||
|
BNE L613C
|
|||
|
JSR checkHIGHSCORE
|
|||
|
JSR animGAMEOVER ; we are dead, anim GAME OVER
|
|||
|
BCS L61F6
|
|||
|
|
|||
|
L618E JSR waitKEYUP
|
|||
|
LDX #$FF
|
|||
|
LDY #$FF
|
|||
|
LDA #$03
|
|||
|
STA theY
|
|||
|
L6199 LDA fgINPUT
|
|||
|
CMP #chrK
|
|||
|
BEQ L61A9
|
|||
|
LDA BUTN1
|
|||
|
BMI L6201
|
|||
|
LDA BUTN0
|
|||
|
BMI L6201
|
|||
|
L61A9 LDA KBD
|
|||
|
BMI L61F6
|
|||
|
DEX
|
|||
|
BNE L6199
|
|||
|
DEY
|
|||
|
BNE L6199
|
|||
|
DEC theY
|
|||
|
BNE L6199
|
|||
|
LDA fgDEMO
|
|||
|
BNE L61DE
|
|||
|
LDX #$01
|
|||
|
STX fgDEMO
|
|||
|
STX theLEVEL
|
|||
|
STX fgKEYBTN0
|
|||
|
STX fgGOODSTART
|
|||
|
LDX fgSOUND
|
|||
|
STX L61D0+1
|
|||
|
STA fgSOUND
|
|||
|
JMP L6056
|
|||
|
|
|||
|
L61D0 LDA #$00
|
|||
|
STA fgSOUND
|
|||
|
LDA KBD
|
|||
|
LDX fgKEYBTN0
|
|||
|
BEQ L61F6
|
|||
|
JMP L618E
|
|||
|
|
|||
|
L61DE CMP #$01
|
|||
|
BNE L61F3
|
|||
|
BEQ L61E9
|
|||
|
L61E4 LDA #$01
|
|||
|
JSR readSCORE
|
|||
|
L61E9 JSR showALLSCORES
|
|||
|
LDA #$02
|
|||
|
STA fgDEMO
|
|||
|
JMP L618E
|
|||
|
L61F3 JMP showTITLEPAGE
|
|||
|
|
|||
|
L61F6 STA KBDSTROBE
|
|||
|
CMP #$85 ; Ctrl-E - Editor
|
|||
|
BEQ L6211
|
|||
|
CMP #chrRET ; Return
|
|||
|
BEQ L61E4
|
|||
|
|
|||
|
L6201 LDX #$00
|
|||
|
STX intLEVEL
|
|||
|
INX
|
|||
|
STX theLEVEL
|
|||
|
STX fgGOODSTART
|
|||
|
LDA #$02
|
|||
|
STA fgDEMO
|
|||
|
JMP L6056
|
|||
|
|
|||
|
L6211 JMP enterEDITOR ; Jump to the Editor
|
|||
|
|
|||
|
L6214 HEX 000306090C0F121518 ; 0..3..6..9..12..15..18..21..24 (index in 6CA7)
|
|||
|
L621D HEX 26262E4447494A4B4C4D4E4F50
|
|||
|
|
|||
|
scoreSOUND LDA temp1 ; son pour le score
|
|||
|
ASL
|
|||
|
ASL
|
|||
|
ASL
|
|||
|
ASL
|
|||
|
LDX #$06
|
|||
|
JSR getNOTE
|
|||
|
JMP playMELODY
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* PREPARE LEVEL
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
prepareLEVEL
|
|||
|
STX fgLVLMODE ; 0: edit, <>0: game
|
|||
|
LDX #$FF
|
|||
|
STX boardX
|
|||
|
INX
|
|||
|
STX idxLADDERI ; index in table of for hidden ladder
|
|||
|
STX nbCHEST
|
|||
|
STX nbFOE
|
|||
|
STX idxFOE
|
|||
|
STX idxDIG
|
|||
|
STX idxLVLDISK
|
|||
|
STX fgODDEVEN
|
|||
|
STX theY
|
|||
|
TXA
|
|||
|
|
|||
|
LDX #sizeHOLE-2
|
|||
|
L6252 STA tblHOLET,X
|
|||
|
DEX
|
|||
|
BPL L6252
|
|||
|
LDX #sizeFOE-3
|
|||
|
L625A STA tblFOETEMPO,X
|
|||
|
DEX
|
|||
|
BPL L625A
|
|||
|
|
|||
|
LDA #$01
|
|||
|
STA fgPLAY
|
|||
|
JSR diskLEVEL
|
|||
|
|
|||
|
LDY theY
|
|||
|
L6269 LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
|
|||
|
LDA #$00 ; v<>rifie le contenu
|
|||
|
STA theX ; du niveau
|
|||
|
L627E LDA fgODDEVEN ; que des valeurs 0-9
|
|||
|
LSR
|
|||
|
LDY idxLVLDISK
|
|||
|
LDA levelDISK,Y
|
|||
|
BCS L628C
|
|||
|
AND #$0F
|
|||
|
BPL L6292
|
|||
|
L628C LSR
|
|||
|
LSR
|
|||
|
LSR
|
|||
|
LSR
|
|||
|
INC idxLVLDISK
|
|||
|
L6292 INC fgODDEVEN
|
|||
|
LDY theX
|
|||
|
CMP #sprHERO+1
|
|||
|
BCC L629C
|
|||
|
LDA #sprEMPTY
|
|||
|
L629C STA (ptrBOARD),Y
|
|||
|
STA (ptrBBACK),Y
|
|||
|
INC theX
|
|||
|
LDA theX
|
|||
|
CMP #lvlWIDTH
|
|||
|
BCC L627E
|
|||
|
INC theY
|
|||
|
LDY theY
|
|||
|
CPY #lvlHEIGHT
|
|||
|
BCC L6269
|
|||
|
|
|||
|
JSR decodeLEVEL
|
|||
|
BCC L62C3
|
|||
|
LDA intLEVEL
|
|||
|
BEQ L62C4
|
|||
|
LDX #$00
|
|||
|
STX intLEVEL
|
|||
|
INC $97
|
|||
|
DEX ; mode game
|
|||
|
JMP prepareLEVEL
|
|||
|
L62C3 RTS
|
|||
|
|
|||
|
L62C4 JMP showTITLEPAGE
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* ENCODE A LEVEL BEFORE SAVING IT
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
encodeLEVEL
|
|||
|
LDA #$00
|
|||
|
STA idxLVLDISK
|
|||
|
STA fgODDEVEN
|
|||
|
STA theY
|
|||
|
L62CF LDY theY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDY #$00
|
|||
|
STY theX
|
|||
|
L62DF LDA fgODDEVEN
|
|||
|
LSR
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
BCS L62EA
|
|||
|
STA theA
|
|||
|
BPL L62F7
|
|||
|
L62EA ASL
|
|||
|
ASL
|
|||
|
ASL
|
|||
|
ASL
|
|||
|
ORA theA
|
|||
|
LDY idxLVLDISK
|
|||
|
STA levelDISK,Y
|
|||
|
INC idxLVLDISK
|
|||
|
L62F7 INC fgODDEVEN
|
|||
|
INC theX
|
|||
|
LDY theX
|
|||
|
CPY #lvlWIDTH
|
|||
|
BCC L62DF
|
|||
|
INC theY
|
|||
|
LDA theY
|
|||
|
CMP #lvlHEIGHT
|
|||
|
BCC L62CF
|
|||
|
LDA #$02 ; write level
|
|||
|
JMP diskLEVEL
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* LOAD/SAVE LEVEL FROM/TO DISK
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
diskLEVEL STA LB7F4
|
|||
|
LDA fgDEMO ; are we in demo mode?
|
|||
|
LSR
|
|||
|
BEQ diskDEMO ; yes
|
|||
|
|
|||
|
LDA intLEVEL ; no, use internal level
|
|||
|
LSR
|
|||
|
LSR
|
|||
|
LSR
|
|||
|
LSR
|
|||
|
CLC
|
|||
|
ADC #$03
|
|||
|
STA LB7EC ; track
|
|||
|
LDA intLEVEL
|
|||
|
AND #$0F
|
|||
|
STA LB7ED ; sector
|
|||
|
|
|||
|
LDA #<levelDISK ; buffer
|
|||
|
STA LB7F0
|
|||
|
LDA #>levelDISK
|
|||
|
STA LB7F0+1
|
|||
|
LDA #$00
|
|||
|
STA LB7EB
|
|||
|
|
|||
|
diskRWTS LDY #<LB7E8
|
|||
|
LDA #>LB7E8
|
|||
|
jsr callRWTS ; LoGo - JSR $0023 - Souvenir from protection
|
|||
|
BCC L6344
|
|||
|
JMP showTITLEPAGE
|
|||
|
L6344 RTS
|
|||
|
|
|||
|
diskDEMO LDA theLEVEL ; demo mode uses levels in RAM
|
|||
|
CLC
|
|||
|
ADC #>L9E00
|
|||
|
STA ptrHGR1+1
|
|||
|
LDY #<L9E00
|
|||
|
STY ptrHGR1
|
|||
|
L6350 LDA (ptrHGR1),Y
|
|||
|
STA levelDISK,Y
|
|||
|
INY
|
|||
|
BNE L6350
|
|||
|
RTS
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* CALL RWTS
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
readSCORE STA LB7F4 ; command
|
|||
|
LDA #$0C
|
|||
|
STA LB7EC ; track
|
|||
|
LDA #$0F
|
|||
|
STA LB7ED ; sector
|
|||
|
|
|||
|
LDA #<scorebuf ; where to load
|
|||
|
STA LB7F0
|
|||
|
LDA #>scorebuf
|
|||
|
STA LB7F0+1
|
|||
|
LDA #$00
|
|||
|
STA LB7EB
|
|||
|
LDY #<LB7E8 ; IOB table
|
|||
|
LDA #>LB7E8
|
|||
|
JSR callRWTS
|
|||
|
BCC L6381
|
|||
|
JMP showTITLEPAGE
|
|||
|
|
|||
|
*--- Check disk (not a LR disk, data disk, master disk)
|
|||
|
|
|||
|
L6381 LDY #$0A ; check magic number
|
|||
|
LDA #$00
|
|||
|
STA theMASK1
|
|||
|
L6387 LDA scorebuf+$F4,Y ; magic key
|
|||
|
EOR L63A8,Y
|
|||
|
ORA theMASK1
|
|||
|
STA theMASK1
|
|||
|
DEY
|
|||
|
BPL L6387
|
|||
|
LDA theMASK1
|
|||
|
BEQ L639B
|
|||
|
LDA #$00 ; 0 means not a LR disk
|
|||
|
RTS
|
|||
|
|
|||
|
L639B LDA #$01 ; master disk
|
|||
|
LDX scorebuf+$FF
|
|||
|
BNE L63A4
|
|||
|
LDA #$FF ; FF means master disk
|
|||
|
L63A4 RTS
|
|||
|
|
|||
|
callRWTS JMP $bd00 ; LoGo - ($0036) to be replaced with JMP $BD00
|
|||
|
|
|||
|
L63A8 ASC "LODE RUNNER"
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* DECODE A LEVEL
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
decodeLEVEL LDY #lvlHEIGHT-1
|
|||
|
STY theY
|
|||
|
L63B7 LDA tblBOARDALLL,Y ; $0800
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH,Y ; $0a00
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY #lvlWIDTH-1
|
|||
|
STY theX
|
|||
|
L63CC LDA (ptrBOARD),Y
|
|||
|
LDX fgLVLMODE ; mode edit?
|
|||
|
BEQ L63EE ; yes
|
|||
|
CMP #sprLADDERI
|
|||
|
BNE L63F0
|
|||
|
LDX idxLADDERI
|
|||
|
CPX #sizeLI-3
|
|||
|
BCS L63E8
|
|||
|
INC idxLADDERI
|
|||
|
INX
|
|||
|
LDA theY
|
|||
|
STA tblLADDERIY,X
|
|||
|
TYA
|
|||
|
STA tblLADDERIX,X
|
|||
|
L63E8 LDA #sprEMPTY ; hide it
|
|||
|
STA (ptrBOARD),Y
|
|||
|
STA (ptrBBACK),Y
|
|||
|
|
|||
|
L63EE BEQ L6450 ; mode edit
|
|||
|
|
|||
|
L63F0 CMP #sprCHEST
|
|||
|
BNE L63F8
|
|||
|
INC nbCHEST
|
|||
|
BNE L6450
|
|||
|
L63F8 CMP #sprFOE
|
|||
|
BNE L642A
|
|||
|
|
|||
|
LDX nbFOE ; nbFOE
|
|||
|
CPX #sizeFOE-3 ; max
|
|||
|
BCS L63E8
|
|||
|
INC nbFOE
|
|||
|
INX
|
|||
|
TYA
|
|||
|
STA tblFOEX,X
|
|||
|
LDA theY
|
|||
|
STA tblFOEY,X
|
|||
|
LDA #$00
|
|||
|
STA tblFOEACTION,X
|
|||
|
STA tblFOEINDEX,X
|
|||
|
LDA #$02
|
|||
|
STA tblFOESTEPX,X ; x-step movement
|
|||
|
STA tblFOESTEPY,X ; y-step movement
|
|||
|
LDA #sprEMPTY
|
|||
|
STA (ptrBBACK),Y
|
|||
|
LDA #sprFOE ; output a foe
|
|||
|
BNE L6450
|
|||
|
|
|||
|
L6426 BPL L63B7
|
|||
|
L6428 BPL L63CC
|
|||
|
|
|||
|
L642A CMP #sprHERO ; if the hero
|
|||
|
BNE L644A
|
|||
|
|
|||
|
LDX boardX ; -1 on entry
|
|||
|
BPL L63E8 ; we'll never return
|
|||
|
STY boardX ; save a positive value
|
|||
|
LDX theY
|
|||
|
STX boardY
|
|||
|
LDX #$02
|
|||
|
STX heroSTEPX ; x-step movement
|
|||
|
STX heroSTEPY ; y-step movement
|
|||
|
LDX #$08
|
|||
|
STX heroINDEX ; index in sprite table
|
|||
|
LDA #sprEMPTY ; blank in background
|
|||
|
STA (ptrBBACK),Y
|
|||
|
LDA #sprHERO
|
|||
|
BNE L6450
|
|||
|
|
|||
|
L644A CMP #sprTRAP ; if a trap
|
|||
|
BNE L6450
|
|||
|
LDA #sprWALL ; output a wall
|
|||
|
|
|||
|
L6450 JSR coutHGR2 ; put the char in background
|
|||
|
|
|||
|
DEC theX ; x--
|
|||
|
LDY theX
|
|||
|
BPL L6428
|
|||
|
DEC theY ; y--
|
|||
|
LDY theY
|
|||
|
BPL L6426
|
|||
|
LDA fgLVLMODE ; mode edit?
|
|||
|
BEQ L6469 ; yes
|
|||
|
LDA boardX ; we met the hero
|
|||
|
BPL L648B ; continue to the animation
|
|||
|
SEC ; not ok
|
|||
|
RTS
|
|||
|
|
|||
|
*--- Level is decode for the edit mode
|
|||
|
|
|||
|
L6469 LDA #>HGR1 ; copy HGR1 > HGR2
|
|||
|
STA ptrHGR2+1
|
|||
|
LDA #>HGR2
|
|||
|
STA ptrHGR1+1
|
|||
|
LDA #$00
|
|||
|
STA ptrHGR2
|
|||
|
STA ptrHGR1
|
|||
|
TAY
|
|||
|
L6478 LDA (ptrHGR1),Y
|
|||
|
STA (ptrHGR2),Y
|
|||
|
INY
|
|||
|
BNE L6478
|
|||
|
INC ptrHGR2+1
|
|||
|
INC ptrHGR1+1
|
|||
|
LDX ptrHGR1+1
|
|||
|
CPX #>HGR3 ; >HGR2+$20 BUG
|
|||
|
BCC L6478
|
|||
|
CLC ; oookkkkk
|
|||
|
RTS
|
|||
|
|
|||
|
*--- Level is decoded for the game mode
|
|||
|
|
|||
|
L648B JSR circleANIMATION
|
|||
|
|
|||
|
LDY #lvlHEIGHT-1 ; clear HGR2 background
|
|||
|
STY theY ; for hero and foes
|
|||
|
L6492 LDA tblBOARDALLL,Y ; the background contains all other sprites
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDY #lvlWIDTH-1
|
|||
|
STY theX
|
|||
|
L64A0 LDA (ptrBOARD),Y
|
|||
|
CMP #sprHERO
|
|||
|
BEQ L64AA
|
|||
|
CMP #sprFOE
|
|||
|
BNE L64AF
|
|||
|
L64AA LDA #sprEMPTY
|
|||
|
JSR coutHGR2
|
|||
|
L64AF DEC theX
|
|||
|
LDY theX
|
|||
|
BPL L64A0
|
|||
|
DEC theY
|
|||
|
LDY theY
|
|||
|
BPL L6492
|
|||
|
CLC ; and say OOOKKKKKK
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
*
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
handleHERO LDA #$01
|
|||
|
STA fgCHEST
|
|||
|
LDA fgHOLE
|
|||
|
BEQ L64CD
|
|||
|
BPL L64CA
|
|||
|
JMP L67E7
|
|||
|
L64CA JMP L68AD
|
|||
|
|
|||
|
L64CD LDY boardY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY boardX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprLADDER
|
|||
|
BEQ L6522
|
|||
|
CMP #sprBAR
|
|||
|
BNE L64EB
|
|||
|
LDA heroSTEPY
|
|||
|
CMP #$02
|
|||
|
BEQ L6522
|
|||
|
L64EB LDA heroSTEPY
|
|||
|
CMP #$02
|
|||
|
BCC L6525
|
|||
|
LDY boardY
|
|||
|
CPY #lvlHEIGHT-1
|
|||
|
BEQ L6522
|
|||
|
LDA tblBOARDALLL+1,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH+1,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH+1,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY boardX
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprEMPTY
|
|||
|
BEQ L6525
|
|||
|
CMP #sprFOE
|
|||
|
BEQ L6522
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BEQ L6522
|
|||
|
CMP #sprWALLI
|
|||
|
BEQ L6522
|
|||
|
CMP #sprLADDER
|
|||
|
BNE L6525
|
|||
|
L6522 JMP L6584
|
|||
|
|
|||
|
L6525 LDA #$00 ; hero fell in a hole, tell the program
|
|||
|
STA fgHEROFELL ; to change speed
|
|||
|
JSR calcSPRITEXY
|
|||
|
JSR drawSPRITEXY
|
|||
|
LDA #$07 ; index in sprite table: fall in a left hole
|
|||
|
LDX fgLEFTRIGHT
|
|||
|
BMI L6537
|
|||
|
LDA #$0F ; fall in a right hole
|
|||
|
L6537 STA heroINDEX
|
|||
|
JSR heroNEXTSTEPX
|
|||
|
INC heroSTEPY
|
|||
|
LDA heroSTEPY
|
|||
|
CMP #$05
|
|||
|
BCS L654A
|
|||
|
JSR checkCHEST
|
|||
|
JMP checkCOLLISION
|
|||
|
|
|||
|
L654A LDA #$00
|
|||
|
STA heroSTEPY
|
|||
|
LDY boardY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY boardX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BNE L656B
|
|||
|
LDA #sprEMPTY
|
|||
|
L656B STA (ptrBOARD),Y
|
|||
|
INC boardY
|
|||
|
LDY boardY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDY boardX
|
|||
|
LDA #sprHERO
|
|||
|
STA (ptrBOARD),Y
|
|||
|
JMP checkCOLLISION
|
|||
|
|
|||
|
L6584 LDA fgHEROFELL
|
|||
|
BNE L658F
|
|||
|
LDA #$64
|
|||
|
LDX #$08
|
|||
|
JSR playSOUND
|
|||
|
L658F LDA #$20
|
|||
|
STA fgSPEED
|
|||
|
STA fgHEROFELL
|
|||
|
JSR getPLAYERINPUT
|
|||
|
|
|||
|
LDA theKEY1
|
|||
|
CMP #chrI ; move up
|
|||
|
BNE L65A4
|
|||
|
JSR checkMOVEUP
|
|||
|
BCS L65C2
|
|||
|
RTS
|
|||
|
|
|||
|
L65A4 CMP #chrK ; move down
|
|||
|
BNE L65AE
|
|||
|
JSR checkMOVEDOWN
|
|||
|
BCS L65C2
|
|||
|
RTS
|
|||
|
|
|||
|
L65AE CMP #chrU ; dig left
|
|||
|
BNE L65B8
|
|||
|
JSR checkDIGLEFT
|
|||
|
BCS L65C2
|
|||
|
RTS
|
|||
|
|
|||
|
L65B8 CMP #chrO ; dig right
|
|||
|
BNE L65C2
|
|||
|
JSR checkDIGRIGHT
|
|||
|
BCS L65C2
|
|||
|
RTS
|
|||
|
|
|||
|
L65C2 LDA theKEY2
|
|||
|
CMP #chrJ ; move left
|
|||
|
BNE L65CB
|
|||
|
JMP checkMOVELEFT
|
|||
|
|
|||
|
L65CB CMP #chrL ; move right
|
|||
|
BNE L65D2
|
|||
|
JMP checkMOVERIGHT
|
|||
|
L65D2 RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* CHECK IF WE CAN MOVE LEFT
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
checkMOVELEFT
|
|||
|
LDY boardY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
|
|||
|
LDX heroSTEPX
|
|||
|
CPX #$03
|
|||
|
BCS L6600
|
|||
|
LDY boardX ; already at column 0
|
|||
|
BEQ L65FF
|
|||
|
DEY ; what do we have to the left?
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprWALLI
|
|||
|
BEQ L65FF
|
|||
|
CMP #sprWALL
|
|||
|
BEQ L65FF
|
|||
|
CMP #sprTRAP
|
|||
|
BNE L6600
|
|||
|
L65FF RTS ; we cannot move
|
|||
|
|
|||
|
L6600 JSR calcSPRITEXY
|
|||
|
JSR drawSPRITEXY
|
|||
|
LDA #$FF
|
|||
|
STA fgLEFTRIGHT
|
|||
|
JSR heroNEXTSTEPY
|
|||
|
DEC heroSTEPX
|
|||
|
BPL L662A
|
|||
|
LDY boardX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BNE L661B
|
|||
|
LDA #sprEMPTY
|
|||
|
L661B STA (ptrBOARD),Y
|
|||
|
DEC boardX
|
|||
|
DEY
|
|||
|
LDA #sprHERO
|
|||
|
STA (ptrBOARD),Y
|
|||
|
LDA #$04
|
|||
|
STA heroSTEPX
|
|||
|
BNE L662D
|
|||
|
L662A JSR checkCHEST
|
|||
|
L662D LDY boardX ; define sprites
|
|||
|
LDA (ptrBBACK),Y ; if we are on a bar
|
|||
|
CMP #sprBAR
|
|||
|
BEQ L663B
|
|||
|
LDA #$00 ; run left first step
|
|||
|
LDX #$02 ; last step
|
|||
|
BNE L663F
|
|||
|
L663B LDA #$03 ; bar left first step
|
|||
|
LDX #$05 ; last step
|
|||
|
L663F JSR setHEROSTEP
|
|||
|
JMP checkCOLLISION
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* CHECK IF WE CAN MOVE RIGHT
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
checkMOVERIGHT
|
|||
|
LDY boardY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDX heroSTEPX
|
|||
|
CPX #$02
|
|||
|
BCC L6674
|
|||
|
LDY boardX
|
|||
|
CPY #lvlWIDTH-1
|
|||
|
BEQ L6673
|
|||
|
INY
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprWALLI
|
|||
|
BEQ L6673
|
|||
|
CMP #sprWALL
|
|||
|
BEQ L6673
|
|||
|
CMP #sprTRAP
|
|||
|
BNE L6674
|
|||
|
L6673 RTS
|
|||
|
|
|||
|
L6674 JSR calcSPRITEXY
|
|||
|
JSR drawSPRITEXY
|
|||
|
LDA #$01
|
|||
|
STA fgLEFTRIGHT
|
|||
|
JSR heroNEXTSTEPY
|
|||
|
INC heroSTEPX
|
|||
|
LDA heroSTEPX
|
|||
|
CMP #$05
|
|||
|
BCC L66A2
|
|||
|
LDY boardX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BNE L6693
|
|||
|
LDA #sprEMPTY
|
|||
|
L6693 STA (ptrBOARD),Y
|
|||
|
INC boardX
|
|||
|
INY
|
|||
|
LDA #sprHERO
|
|||
|
STA (ptrBOARD),Y
|
|||
|
LDA #$00
|
|||
|
STA heroSTEPX
|
|||
|
BEQ L66A5
|
|||
|
L66A2 JSR checkCHEST
|
|||
|
L66A5 LDY boardX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprBAR
|
|||
|
BEQ L66B3
|
|||
|
LDA #$08 ; run right step 1
|
|||
|
LDX #$0A ; run right step 3
|
|||
|
BNE L66B7
|
|||
|
L66B3 LDA #$0B ; bar right step 1
|
|||
|
LDX #$0D ; bar right step 3
|
|||
|
L66B7 JSR setHEROSTEP
|
|||
|
JMP checkCOLLISION
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* CAN WE MOVE UP
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
checkMOVEUP
|
|||
|
LDY boardY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY boardX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprLADDER
|
|||
|
BEQ L66ED
|
|||
|
LDY heroSTEPY
|
|||
|
CPY #$03
|
|||
|
BCC L66EB
|
|||
|
LDY boardY
|
|||
|
LDA tblBOARDALLL+1,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH+1,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY boardX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprLADDER
|
|||
|
BEQ L6711
|
|||
|
L66EB SEC
|
|||
|
RTS
|
|||
|
|
|||
|
L66ED LDY heroSTEPY
|
|||
|
CPY #$03
|
|||
|
BCS L6711
|
|||
|
LDY boardY
|
|||
|
BEQ L66EB
|
|||
|
LDA tblBOARDALLL-1,Y
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH-1,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDY boardX
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprWALL
|
|||
|
BEQ L66EB
|
|||
|
CMP #sprWALLI
|
|||
|
BEQ L66EB
|
|||
|
CMP #sprTRAP
|
|||
|
BEQ L66EB
|
|||
|
L6711 JSR calcSPRITEXY
|
|||
|
JSR drawSPRITEXY
|
|||
|
LDY boardY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
JSR heroNEXTSTEPX
|
|||
|
DEC heroSTEPY
|
|||
|
BPL L6757
|
|||
|
LDY boardX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BNE L673B
|
|||
|
LDA #$00
|
|||
|
L673B STA (ptrBOARD),Y
|
|||
|
DEC boardY
|
|||
|
LDY boardY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDY boardX
|
|||
|
LDA #sprHERO
|
|||
|
STA (ptrBOARD),Y
|
|||
|
LDA #$04
|
|||
|
STA heroSTEPY
|
|||
|
BNE L675A
|
|||
|
L6757 JSR checkCHEST
|
|||
|
L675A LDA #$10 ; climb ladder step 1
|
|||
|
LDX #$11 ; climb ladder step 2
|
|||
|
JSR setHEROSTEP
|
|||
|
JSR checkCOLLISION
|
|||
|
CLC
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* CHECK IF CAN MOVE DOWN
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
checkMOVEDOWN
|
|||
|
LDY heroSTEPY
|
|||
|
CPY #$02
|
|||
|
BCC L678A
|
|||
|
LDY boardY
|
|||
|
CPY #lvlHEIGHT-1
|
|||
|
BCS L6788
|
|||
|
LDA tblBOARDALLL+1,Y
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH+1,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDY boardX
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprWALLI
|
|||
|
BEQ L6788
|
|||
|
CMP #sprWALL
|
|||
|
BNE L678A
|
|||
|
L6788 SEC
|
|||
|
RTS
|
|||
|
|
|||
|
L678A JSR calcSPRITEXY
|
|||
|
JSR drawSPRITEXY
|
|||
|
LDY boardY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
JSR heroNEXTSTEPX
|
|||
|
INC heroSTEPY
|
|||
|
LDA heroSTEPY
|
|||
|
CMP #$05
|
|||
|
BCC L67D5
|
|||
|
LDY boardX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BNE L67B8
|
|||
|
LDA #$00
|
|||
|
L67B8 STA (ptrBOARD),Y
|
|||
|
INC boardY
|
|||
|
LDY boardY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDY boardX
|
|||
|
LDA #sprHERO
|
|||
|
STA (ptrBOARD),Y
|
|||
|
LDA #$00
|
|||
|
STA heroSTEPY
|
|||
|
JMP L675A
|
|||
|
L67D5 JMP L6757
|
|||
|
|
|||
|
L67D8 JMP L6892
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* CHECK IF WE CAN DIG LEFT
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
checkDIGLEFT
|
|||
|
LDA #$FF
|
|||
|
STA fgHOLE
|
|||
|
STA theKEY1
|
|||
|
STA theKEY2
|
|||
|
LDA #$00
|
|||
|
STA idxDIG
|
|||
|
|
|||
|
L67E7 LDY boardY ; are we on last line?
|
|||
|
CPY #lvlHEIGHT-1
|
|||
|
BCS L67D8
|
|||
|
INY
|
|||
|
JSR setBOARDLINEPOINTERS
|
|||
|
LDY boardX ; are we on first column?
|
|||
|
BEQ L67D8
|
|||
|
DEY
|
|||
|
LDA (ptrBOARD),Y ; what do we have on our left?
|
|||
|
CMP #sprWALL ; a wall?
|
|||
|
BNE L67D8
|
|||
|
LDY boardY ; yes
|
|||
|
JSR setBOARDLINEPOINTERS
|
|||
|
LDY boardX
|
|||
|
DEY
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprEMPTY
|
|||
|
BNE L686E
|
|||
|
JSR calcSPRITEXY
|
|||
|
JSR drawSPRITEXY
|
|||
|
JSR heroNEXTSTEPX
|
|||
|
JSR heroNEXTSTEPY
|
|||
|
LDY idxDIG
|
|||
|
LDA digNOTE,Y
|
|||
|
LDX digDURATION,Y
|
|||
|
JSR getNOTE
|
|||
|
LDX idxDIG
|
|||
|
LDA #$00
|
|||
|
CPX #$06
|
|||
|
BCS L682B
|
|||
|
LDA #$06
|
|||
|
L682B STA heroINDEX
|
|||
|
JSR checkCOLLISION
|
|||
|
LDX idxDIG
|
|||
|
CPX #$0C
|
|||
|
BEQ L6898
|
|||
|
CPX #$00
|
|||
|
BEQ L684C
|
|||
|
LDA seqDIGLEFT-1,X ; dig left - 1
|
|||
|
PHA
|
|||
|
LDX boardX
|
|||
|
DEX
|
|||
|
LDY boardY
|
|||
|
JSR getXY
|
|||
|
PLA
|
|||
|
JSR drawSPRITEXY
|
|||
|
LDX idxDIG
|
|||
|
L684C LDA seqDIGLEFT,X ; dig left
|
|||
|
PHA
|
|||
|
LDX boardX
|
|||
|
DEX
|
|||
|
STX theX
|
|||
|
LDY boardY
|
|||
|
STY theY
|
|||
|
JSR getXY
|
|||
|
PLA
|
|||
|
JSR drawSPRXYCOLLISION
|
|||
|
LDX idxDIG
|
|||
|
LDA seqDIGSTONE,X ; dig stone
|
|||
|
INC theY
|
|||
|
JSR coutHGR1
|
|||
|
INC idxDIG
|
|||
|
CLC
|
|||
|
RTS
|
|||
|
|
|||
|
L686E LDY boardY
|
|||
|
INY
|
|||
|
STY theY
|
|||
|
LDY boardX
|
|||
|
DEY
|
|||
|
STY theX
|
|||
|
LDA #sprWALL
|
|||
|
JSR coutHGR1
|
|||
|
LDX idxDIG
|
|||
|
BEQ L6892
|
|||
|
DEX
|
|||
|
LDA seqDIGLEFT,X
|
|||
|
PHA
|
|||
|
LDY boardY
|
|||
|
LDX boardX
|
|||
|
DEX
|
|||
|
JSR getXY
|
|||
|
PLA
|
|||
|
JSR drawSPRITEXY
|
|||
|
L6892 LDA #$00
|
|||
|
STA fgHOLE
|
|||
|
SEC
|
|||
|
RTS
|
|||
|
|
|||
|
L6898 LDX boardX
|
|||
|
DEX
|
|||
|
JMP addNEWHOLE
|
|||
|
L689E JMP L695C
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* CHECK IF WE CAN DIG RIGHT
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
checkDIGRIGHT
|
|||
|
LDA #$01
|
|||
|
STA fgHOLE
|
|||
|
STA theKEY1
|
|||
|
STA theKEY2
|
|||
|
LDA #$0C
|
|||
|
STA idxDIG
|
|||
|
L68AD LDY boardY ; are we on last line?
|
|||
|
CPY #lvlHEIGHT-1
|
|||
|
BCS L689E
|
|||
|
INY
|
|||
|
JSR setBOARDLINEPOINTERS
|
|||
|
LDY boardX ; are we on lat column?
|
|||
|
CPY #lvlWIDTH-1
|
|||
|
BCS L689E
|
|||
|
INY
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprWALL ; do we have a wall?
|
|||
|
BNE L689E
|
|||
|
LDY boardY
|
|||
|
JSR setBOARDLINEPOINTERS
|
|||
|
LDY boardX
|
|||
|
INY
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprEMPTY
|
|||
|
BNE L6936
|
|||
|
JSR calcSPRITEXY
|
|||
|
JSR drawSPRITEXY
|
|||
|
JSR heroNEXTSTEPX
|
|||
|
JSR heroNEXTSTEPY
|
|||
|
LDY idxDIG
|
|||
|
LDA seqDIGSTONE,Y ; dig stone
|
|||
|
LDX digNOTE2,Y
|
|||
|
JSR getNOTE
|
|||
|
LDX idxDIG
|
|||
|
LDA #$08
|
|||
|
CPX #$12
|
|||
|
BCS L68F3
|
|||
|
LDA #$0E
|
|||
|
L68F3 STA heroINDEX
|
|||
|
JSR checkCOLLISION
|
|||
|
LDX idxDIG
|
|||
|
CPX #$18
|
|||
|
BEQ L6962
|
|||
|
CPX #$0C
|
|||
|
BEQ L6914
|
|||
|
LDA seqDIGLEFT-1,X
|
|||
|
PHA
|
|||
|
LDX boardX
|
|||
|
INX
|
|||
|
LDY boardY
|
|||
|
JSR getXY
|
|||
|
PLA
|
|||
|
JSR drawSPRITEXY
|
|||
|
LDX idxDIG
|
|||
|
L6914 LDA seqDIGLEFT,X
|
|||
|
PHA
|
|||
|
LDX boardX
|
|||
|
INX
|
|||
|
STX theX
|
|||
|
LDY boardY
|
|||
|
STY theY
|
|||
|
JSR getXY
|
|||
|
PLA
|
|||
|
JSR drawSPRXYCOLLISION
|
|||
|
INC theY
|
|||
|
LDX idxDIG
|
|||
|
LDA seqDIGRIGHT,X
|
|||
|
JSR coutHGR1
|
|||
|
INC idxDIG
|
|||
|
CLC
|
|||
|
RTS
|
|||
|
|
|||
|
L6936 LDY boardY
|
|||
|
INY
|
|||
|
STY theY
|
|||
|
LDY boardX
|
|||
|
INY
|
|||
|
STY theX
|
|||
|
LDA #$01
|
|||
|
JSR coutHGR1
|
|||
|
LDX idxDIG
|
|||
|
CPX #$0C
|
|||
|
BEQ L695C
|
|||
|
DEX
|
|||
|
LDA seqDIGLEFT,X
|
|||
|
PHA
|
|||
|
LDX boardX
|
|||
|
INX
|
|||
|
LDY boardY
|
|||
|
JSR getXY
|
|||
|
PLA
|
|||
|
JSR drawSPRITEXY
|
|||
|
|
|||
|
L695C LDA #$00
|
|||
|
STA fgHOLE
|
|||
|
SEC
|
|||
|
RTS
|
|||
|
|
|||
|
L6962 LDX boardX ; we're digging
|
|||
|
INX
|
|||
|
JMP addNEWHOLE
|
|||
|
|
|||
|
* Encha<EFBFBD>nement des sprites
|
|||
|
|
|||
|
seqLODERUNNER
|
|||
|
DB $0B ; 0 court <20> gauche
|
|||
|
DB $0C ; 1
|
|||
|
DB $0D ; 2
|
|||
|
DB $18 ; 3 barre <20> gauche
|
|||
|
DB $19 ; 4
|
|||
|
DB $1A ; 5
|
|||
|
DB $0F ; 6 creuse <20> gauche
|
|||
|
DB $13 ; 7 tombe dans un trou <20> gauche
|
|||
|
DB $09 ; 8 court <20> droite
|
|||
|
DB $10 ; 9 LR court vers la droite step 1
|
|||
|
DB $11 ; A LR court vers la droite step 2
|
|||
|
DB $15 ; B LR est sur la barre vers la droite step 1
|
|||
|
DB $16 ; C LR est sur la barre vers la droite step 2
|
|||
|
DB $17 ; D LR est sur la barre vers la droite step 3
|
|||
|
DB $25 ; E creuse <20> droite
|
|||
|
DB $14 ; F tombe dans un trou <20> droite
|
|||
|
DB $0E ; 10 monte <20>chelle step 1
|
|||
|
DB $12 ; 11 monte <20>chelle step 2
|
|||
|
seqDIGLEFT DB $1B ; 12 creuse 1
|
|||
|
DB $1B ; 13 creuse 1
|
|||
|
DB $1C ; 14 creuse 2
|
|||
|
DB $1C ; 15 creuse 2
|
|||
|
DB $1D ; 16 creuse 3
|
|||
|
DB $1D ; 17 creuse 3
|
|||
|
DB $1E ; 18 creuse 4
|
|||
|
DB $1E ; 19 creuse 4
|
|||
|
DB $00 ; 1A
|
|||
|
DB $00 ; 1B
|
|||
|
DB $00 ; 1C
|
|||
|
DB $00 ; 1D
|
|||
|
seqDIGRIGHT DB $26 ; 1E creuse droite step 1
|
|||
|
DB $26 ; 1F creuse droite step 1
|
|||
|
DB $27 ; 20 creuse droite step 2
|
|||
|
DB $27 ; 21 creuse droite step 2
|
|||
|
DB $1D ; 22 creuse droite step 3
|
|||
|
DB $1D ; 23 creuse droite step 3
|
|||
|
DB $1E ; 24 creuse droite step 4
|
|||
|
DB $1E ; 25 creuse droite step 4
|
|||
|
DB $00 ; 26
|
|||
|
DB $00 ; 27
|
|||
|
DB $00 ; 28
|
|||
|
DB $00 ; 29
|
|||
|
seqDIGSTONE DB $1F ; 2A dig stone sequence
|
|||
|
DB $1F ; 2B
|
|||
|
DB $20 ; 2C
|
|||
|
DB $20 ; 2D
|
|||
|
DB $21 ; 2E
|
|||
|
DB $21 ; 2F
|
|||
|
DB $22 ; 30
|
|||
|
DB $22 ; 31
|
|||
|
DB $23 ; 32
|
|||
|
DB $23 ; 33
|
|||
|
DB $24 ; 34
|
|||
|
DB $24 ; 35
|
|||
|
|
|||
|
*--- Sound data
|
|||
|
|
|||
|
digNOTE DB $20 ; musical notes when we dig
|
|||
|
digNOTE2 DB $20 ;
|
|||
|
DB $20 ;
|
|||
|
DB $20 ;
|
|||
|
DB $20 ;
|
|||
|
DB $20 ;
|
|||
|
DB $20 ;
|
|||
|
DB $20 ;
|
|||
|
DB $24 ;
|
|||
|
DB $24 ;
|
|||
|
DB $24 ;
|
|||
|
DB $24 ;
|
|||
|
DB $24 ;
|
|||
|
digDURATION DB $04 ; duration
|
|||
|
DB $04 ;
|
|||
|
DB $04 ;
|
|||
|
DB $04 ;
|
|||
|
DB $04 ;
|
|||
|
DB $04 ;
|
|||
|
DB $04 ;
|
|||
|
DB $04 ;
|
|||
|
DB $03 ;
|
|||
|
DB $03 ;
|
|||
|
DB $02 ;
|
|||
|
DB $02 ;
|
|||
|
DB $01 ;
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* DEMO MODE ENGINE ENTRY POINT
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
L69B8 LDA KBD
|
|||
|
BMI L69CD
|
|||
|
LDA fgINPUT
|
|||
|
CMP #chrK
|
|||
|
BEQ L69D6
|
|||
|
LDA BUTN1
|
|||
|
BMI L69CD
|
|||
|
LDA BUTN0
|
|||
|
BPL L69D6
|
|||
|
L69CD LSR fgKEYBTN0
|
|||
|
LSR fgPLAY
|
|||
|
LDA #$01
|
|||
|
STA theMEN ; one man
|
|||
|
RTS
|
|||
|
|
|||
|
L69D6 LDA demoREPEAT ; are we currently handling a movement?
|
|||
|
BNE L69F2 ; yes
|
|||
|
LDY #$00 ; no, get values
|
|||
|
LDA (ptrDEMO),Y ; the keys
|
|||
|
STA demoKEY
|
|||
|
INY
|
|||
|
LDA (ptrDEMO),Y
|
|||
|
STA demoREPEAT ; the repeat
|
|||
|
LDA ptrDEMO ; next entry
|
|||
|
CLC
|
|||
|
ADC #$02
|
|||
|
STA ptrDEMO
|
|||
|
LDA ptrDEMO+1
|
|||
|
ADC #$00
|
|||
|
STA ptrDEMO+1
|
|||
|
L69F2 LDA demoKEY ; first entry is the fisrt key
|
|||
|
AND #$0F
|
|||
|
TAX
|
|||
|
LDA tblDEMO2KEY,X
|
|||
|
STA theKEY1
|
|||
|
LDA demoKEY
|
|||
|
LSR
|
|||
|
LSR
|
|||
|
LSR
|
|||
|
LSR
|
|||
|
TAX
|
|||
|
LDA tblDEMO2KEY,X
|
|||
|
STA theKEY2 ; second key
|
|||
|
DEC demoREPEAT
|
|||
|
RTS
|
|||
|
|
|||
|
* 0123456
|
|||
|
tblDEMO2KEY ASC "IJKLOU "
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* GAME ENGINE ENTRY POINT
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
getPLAYERINPUT
|
|||
|
LDA fgDEMO
|
|||
|
CMP #$01
|
|||
|
BEQ L69B8
|
|||
|
LDX KBD
|
|||
|
STX KBDSTROBE
|
|||
|
STX theA
|
|||
|
BMI L6A2B
|
|||
|
LDA fgINPUT
|
|||
|
CMP #chrK
|
|||
|
BEQ L6A55
|
|||
|
L6A28 JMP getJOYSTICKKEY
|
|||
|
|
|||
|
L6A2B CPX #chrSPC
|
|||
|
BCS L6A49
|
|||
|
STX theA
|
|||
|
LDY #$FF
|
|||
|
L6A33 INY
|
|||
|
LDA tblKEY,Y
|
|||
|
BEQ L6A49
|
|||
|
CMP theA
|
|||
|
BNE L6A33
|
|||
|
TYA
|
|||
|
ASL
|
|||
|
TAY
|
|||
|
LDA tblKEYADR+1,Y
|
|||
|
PHA
|
|||
|
LDA tblKEYADR,Y
|
|||
|
PHA
|
|||
|
RTS
|
|||
|
|
|||
|
L6A49 LDA fgINPUT
|
|||
|
CMP #chrJ
|
|||
|
BEQ L6A28
|
|||
|
LDX theA
|
|||
|
STX theKEY1
|
|||
|
STX theKEY2
|
|||
|
L6A55 RTS
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* 9E - CTRL-^ - NEXT LEVEL
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
doNEXTLEVEL
|
|||
|
INC theMEN ; man++
|
|||
|
INC theLEVEL
|
|||
|
INC intLEVEL
|
|||
|
LSR fgPLAY
|
|||
|
LSR fgGOODSTART
|
|||
|
RTS
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* 80 - CTRL-@ - EXTRA MAN
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
doEXTRAMAN
|
|||
|
INC theMEN ; man++
|
|||
|
BNE L6A67
|
|||
|
DEC theMEN ; man--
|
|||
|
L6A67 JSR printMEN
|
|||
|
LSR fgGOODSTART
|
|||
|
JMP getPLAYERINPUT
|
|||
|
|
|||
|
*--- dead code
|
|||
|
|
|||
|
INC $97
|
|||
|
INC theMEN ; man++
|
|||
|
LSR fgPLAY
|
|||
|
RTS
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* 9B - ESC - PAUSE GAME
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
doPAUSE JSR waitKEYDOWN
|
|||
|
CMP #$9B
|
|||
|
BNE doPAUSE
|
|||
|
JMP getPLAYERINPUT
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* 92 - CTRL-R - TERMINATES CURRENT GAME
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
doTERMINATE LDA #$01
|
|||
|
STA theMEN ; man
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* 81 - CTRL-A - ABORTS MAN
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
doABORTMAN LSR fgPLAY
|
|||
|
RTS
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* 93 - CTRL-S - TOGGLES SOUND
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
doTOGGLESOUND
|
|||
|
LDA fgSOUND
|
|||
|
EOR #$FF
|
|||
|
STA fgSOUND
|
|||
|
JMP getPLAYERINPUT
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* 8A - DOWN ARROW - MOVE LEFT
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
doDOWNARROW LDA #chrJ
|
|||
|
STA fgINPUT
|
|||
|
JMP getPLAYERINPUT
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* 8B - UP ARROW - MOVE DOWN
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
doUPARROW LDA #chrK
|
|||
|
STA fgINPUT
|
|||
|
JMP getPLAYERINPUT
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* 98 - CTRL-X - FLIPS X-AXIS
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
doFLIPX LDA joyXMIN
|
|||
|
LDX joyXMAX
|
|||
|
STA joyXMAX
|
|||
|
STX joyXMIN
|
|||
|
JMP getPLAYERINPUT
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* 99 - CTRL-Y - FLIPS Y-AXIS
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
doFLIPY LDA joyYMIN
|
|||
|
LDX joyYMAX
|
|||
|
STA joyYMAX
|
|||
|
STX joyYMIN
|
|||
|
JMP getPLAYERINPUT
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* 88 - LEFT ARROW - SLOWS DOWN
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
doSLOWDOWN LDA theSPEED
|
|||
|
BEQ L6ACD
|
|||
|
DEC theSPEED
|
|||
|
JMP getPLAYERINPUT
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* 95 - RIGHT ARROW - SPEEDS UP
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
doSPEEDUP LDA theSPEED
|
|||
|
CMP #$0F
|
|||
|
BEQ L6ACD
|
|||
|
INC theSPEED
|
|||
|
L6ACD JMP getPLAYERINPUT
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* GET JOYSTICK KEY
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
getJOYSTICKKEY
|
|||
|
LDA BUTN1
|
|||
|
BPL L6AD9
|
|||
|
LDA #chrU ; dig
|
|||
|
BNE L6AE0
|
|||
|
L6AD9 LDA BUTN0
|
|||
|
BPL L6AE5
|
|||
|
LDA #chrO ; dig
|
|||
|
L6AE0 STA theKEY1
|
|||
|
STA theKEY2
|
|||
|
RTS
|
|||
|
|
|||
|
L6AE5 JSR readJOYSTICK ; no keys pressed
|
|||
|
LDY theJOYX ; read joystick
|
|||
|
LDA joyXMAX ; clamp
|
|||
|
CMP #$2E ; return key
|
|||
|
BEQ L6AFA
|
|||
|
CPY joyXMAX
|
|||
|
BCS L6B03
|
|||
|
LDA #chrL
|
|||
|
BNE L6B1E
|
|||
|
L6AFA CPY joyXMAX
|
|||
|
BCC L6B03
|
|||
|
LDA #chrL
|
|||
|
BNE L6B1E
|
|||
|
L6B03 LDA joyXMIN
|
|||
|
CMP #$2E
|
|||
|
BEQ L6B13
|
|||
|
CPY joyXMIN
|
|||
|
BCS L6B1C
|
|||
|
LDA #chrJ
|
|||
|
BNE L6B1E
|
|||
|
L6B13 CPY joyXMIN
|
|||
|
BCC L6B1C
|
|||
|
LDA #chrJ
|
|||
|
BNE L6B1E
|
|||
|
L6B1C LDA #chrA-1
|
|||
|
L6B1E STA theKEY2
|
|||
|
LDY theJOYY
|
|||
|
LDA joyYMIN
|
|||
|
CMP #$2E
|
|||
|
BEQ L6B32
|
|||
|
CPY joyYMIN
|
|||
|
BCS L6B3B
|
|||
|
LDA #chrI
|
|||
|
BNE L6B56
|
|||
|
L6B32 CPY joyYMIN
|
|||
|
BCC L6B3B
|
|||
|
LDA #chrI
|
|||
|
BNE L6B56
|
|||
|
L6B3B LDA joyYMAX
|
|||
|
CMP #$2E
|
|||
|
BEQ L6B4B
|
|||
|
CPY joyYMAX
|
|||
|
BCS L6B54
|
|||
|
LDA #chrK
|
|||
|
BNE L6B56
|
|||
|
L6B4B CPY joyYMAX
|
|||
|
BCC L6B54
|
|||
|
LDA #chrK
|
|||
|
BNE L6B56
|
|||
|
L6B54 LDA #chrA-1
|
|||
|
L6B56 STA theKEY1
|
|||
|
RTS
|
|||
|
|
|||
|
*----------------------------------
|
|||
|
* KEYS AND ASSOCIATED JUMPS
|
|||
|
*----------------------------------
|
|||
|
|
|||
|
tblKEY HEX 9E809B9281938A8B889598998D00
|
|||
|
|
|||
|
tblKEYADR DA doNEXTLEVEL-1 ; 9E - CTRL-^
|
|||
|
DA doEXTRAMAN-1 ; 80 - CTRL-@
|
|||
|
DA doPAUSE-1 ; 9B - ESCAPE
|
|||
|
DA doTERMINATE-1 ; 92 - CTRL-R
|
|||
|
DA doABORTMAN-1 ; 81 - CTRL-A
|
|||
|
DA doTOGGLESOUND-1 ; 93 - CTRL-S
|
|||
|
DA doDOWNARROW-1 ; 8A - DOWN ARROW
|
|||
|
DA doUPARROW-1 ; 8B - UP ARROW
|
|||
|
DA doSPEEDUP-1 ; 88 - LEFT ARROW
|
|||
|
DA doSLOWDOWN-1 ; 95 - RIGHT ARROW
|
|||
|
DA doFLIPX-1 ; 98 - CTRL-X
|
|||
|
DA doFLIPY-1 ; 99 - CTRL-Y
|
|||
|
DA displayHIGHSCORES-1 ; 8D - RETURN
|
|||
|
|
|||
|
joyXMIN DB minJOY ; x-low
|
|||
|
joyXMAX DB ctrJOY ; x-high
|
|||
|
joyYMIN DB minJOY ; y-low
|
|||
|
joyYMAX DB ctrJOY ; y-high
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* CALC SPRITE X/Y
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
calcSPRITEXY
|
|||
|
LDX boardX ; calc next HGR X position
|
|||
|
LDY heroSTEPX
|
|||
|
JSR calcHGRX
|
|||
|
STX theA ; save it
|
|||
|
|
|||
|
LDY boardY ; calc next HGR Y position
|
|||
|
LDX heroSTEPY
|
|||
|
JSR calcHGRY ; we keep it in Y
|
|||
|
|
|||
|
LDX heroINDEX ; get sprite index
|
|||
|
LDA seqLODERUNNER,X
|
|||
|
LDX theA
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* CHECK CHEST
|
|||
|
*-----------------------------------
|
|||
|
* Check if we are on a chest
|
|||
|
* If so, add 250 to the score
|
|||
|
|
|||
|
checkCHEST LDA heroSTEPX ; is sprite still in X
|
|||
|
CMP #$02
|
|||
|
BNE L6BF3
|
|||
|
LDA heroSTEPY ; is sprite still in Y
|
|||
|
CMP #$02
|
|||
|
BNE L6BF3
|
|||
|
|
|||
|
LDY boardY ; yes
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
|
|||
|
LDY boardX ; are we on a chest?
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprCHEST
|
|||
|
BNE L6BF3
|
|||
|
|
|||
|
LSR fgCHEST ; collision avec un coffre
|
|||
|
DEC nbCHEST ; chest--
|
|||
|
|
|||
|
LDY boardY ; remove it from background
|
|||
|
STY theY
|
|||
|
LDY boardX
|
|||
|
STY theX
|
|||
|
LDA #sprEMPTY
|
|||
|
STA (ptrBBACK),Y
|
|||
|
JSR coutHGR2
|
|||
|
|
|||
|
LDY theY ; draw it on screen
|
|||
|
LDX theX
|
|||
|
JSR getXY
|
|||
|
LDA #sprCHEST
|
|||
|
JSR drawSPRITEXY
|
|||
|
LDY #$02 ; add 250 to score
|
|||
|
LDA #$50
|
|||
|
JSR printSCORE
|
|||
|
JSR prepareMELODY ; and beep it
|
|||
|
HEX 07450655054404540343025300
|
|||
|
L6BF3 RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* STEP HERO STEP
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
setHEROSTEP INC heroINDEX ; A is the first step
|
|||
|
CMP heroINDEX ; X the last
|
|||
|
BCC L6BFD ; sets the step accordingly
|
|||
|
L6BFA STA heroINDEX
|
|||
|
RTS
|
|||
|
L6BFD CPX heroINDEX
|
|||
|
BCC L6BFA
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* CHECK COLLISION
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
checkCOLLISION
|
|||
|
JSR calcSPRITEXY
|
|||
|
JSR drawSPRXYCOLLISION
|
|||
|
LDA fgCOLLISION ; les sprites sont-ils entr<74>s en collision ?
|
|||
|
BEQ L6C12 ; non
|
|||
|
LDA fgCHEST ; en collision avec un coffre ?
|
|||
|
BEQ L6C12 ; oui, on ne perd pas
|
|||
|
LSR fgPLAY ; non, perdu
|
|||
|
L6C12 RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* SET HERO NEXT STEP X
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
heroNEXTSTEPX
|
|||
|
LDA heroSTEPX
|
|||
|
CMP #$02
|
|||
|
BCC L6C20
|
|||
|
BEQ L6C25
|
|||
|
DEC heroSTEPX
|
|||
|
JMP checkCHEST
|
|||
|
L6C20 INC heroSTEPX
|
|||
|
JMP checkCHEST
|
|||
|
L6C25 RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* SET HERO NEXT STEP Y
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
heroNEXTSTEPY
|
|||
|
LDA heroSTEPY
|
|||
|
CMP #$02
|
|||
|
BCC L6C33
|
|||
|
BEQ L6C38
|
|||
|
DEC heroSTEPY
|
|||
|
JMP checkCHEST
|
|||
|
L6C33 INC heroSTEPY
|
|||
|
JMP checkCHEST
|
|||
|
L6C38 RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* ADD A NEW HOLE
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
addNEWHOLE LDA #$00 ; tell we're digging
|
|||
|
STA fgHOLE
|
|||
|
LDY boardY
|
|||
|
INY
|
|||
|
STX theX
|
|||
|
STY theY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA #sprEMPTY ; make the hole visible
|
|||
|
LDY theX
|
|||
|
STA (ptrBOARD),Y
|
|||
|
JSR coutHGR1
|
|||
|
LDA #sprEMPTY
|
|||
|
JSR coutHGR2
|
|||
|
DEC theY
|
|||
|
LDA #sprEMPTY
|
|||
|
JSR coutHGR1
|
|||
|
INC theY
|
|||
|
LDX #$FF ; add the hole to the list
|
|||
|
L6C67 INX
|
|||
|
CPX #sizeHOLE-2
|
|||
|
BEQ L6C81
|
|||
|
LDA tblHOLET,X ; <>0 tempo means there is a hole
|
|||
|
BNE L6C67
|
|||
|
LDA theY
|
|||
|
STA tblHOLEY,X
|
|||
|
LDA theX
|
|||
|
STA tblHOLEX,X
|
|||
|
LDA #$B4 ; its tempo
|
|||
|
STA tblHOLET,X
|
|||
|
SEC
|
|||
|
L6C81 RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
*
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
handleFOE LDX nbFOE ; no foe, skip
|
|||
|
BEQ L6CA6
|
|||
|
INC $64
|
|||
|
LDY $64
|
|||
|
CPY #$03
|
|||
|
BCC L6C92
|
|||
|
LDY #$00
|
|||
|
STY $64
|
|||
|
L6C92 LDA |$0060,Y
|
|||
|
STA $63
|
|||
|
L6C97 LSR $63
|
|||
|
BCC L6CA2
|
|||
|
JSR doFOEACTION
|
|||
|
LDA fgPLAY
|
|||
|
BEQ L6CA6
|
|||
|
L6CA2 LDA $63
|
|||
|
BNE L6C97
|
|||
|
L6CA6 RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
*
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
L6CA7 HEX 000000
|
|||
|
HEX 000101
|
|||
|
HEX 010101
|
|||
|
HEX 010301
|
|||
|
HEX 010303
|
|||
|
HEX 030303
|
|||
|
HEX 030307
|
|||
|
HEX 030707
|
|||
|
HEX 070707
|
|||
|
HEX 07070F
|
|||
|
HEX 070F0F
|
|||
|
HEX 0F0F0F
|
|||
|
|
|||
|
seqFOE DB $08 ; 0 - foe runs left 1
|
|||
|
DB $2B ; 1 - ...left 2
|
|||
|
DB $2C ; 2 - ...left 3
|
|||
|
DB $30 ; 3 - foe bar left 1
|
|||
|
DB $31 ; 4 - ... left 2
|
|||
|
DB $32 ; 5 - ... left 3
|
|||
|
DB $36 ; 6 - foe falls left
|
|||
|
DB $28 ; 7 - foe runs right 1
|
|||
|
DB $29 ; 8 - ... right 2
|
|||
|
DB $2A ; 9 - ... right 3
|
|||
|
DB $2D ; A - foe bar right 1
|
|||
|
DB $2E ; B - ... right 2
|
|||
|
DB $2F ; C - ... right 3
|
|||
|
DB $35 ; D - foe falls right
|
|||
|
DB $33 ; E - foe ladder 1
|
|||
|
DB $34 ; F - ... ladder 2
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
*
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
doFOEACTION INC idxFOE
|
|||
|
LDX nbFOE
|
|||
|
CPX idxFOE
|
|||
|
BCS L6CE7
|
|||
|
LDX #$01
|
|||
|
STX idxFOE
|
|||
|
L6CE7 JSR loadFOEDATA
|
|||
|
LDA foeACTION
|
|||
|
BMI L6D08
|
|||
|
BEQ L6D08
|
|||
|
DEC foeACTION
|
|||
|
LDY foeACTION
|
|||
|
CPY #$0D
|
|||
|
BCS L6CFB
|
|||
|
JMP L6E65
|
|||
|
|
|||
|
L6CFB LDX idxFOE
|
|||
|
LDA tblFOETEMPO,X
|
|||
|
BEQ L6D05
|
|||
|
JMP saveFOEDATA
|
|||
|
L6D05 JMP L6DB7
|
|||
|
|
|||
|
L6D08 LDY foeY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY foeX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprLADDER
|
|||
|
BEQ L6D61
|
|||
|
CMP #sprBAR
|
|||
|
BNE L6D26
|
|||
|
LDA foeSTEPY
|
|||
|
CMP #$02
|
|||
|
BEQ L6D61
|
|||
|
L6D26 LDA foeSTEPY
|
|||
|
CMP #$02
|
|||
|
BCC L6D64
|
|||
|
LDY foeY
|
|||
|
CPY #lvlHEIGHT-1
|
|||
|
BEQ L6D61
|
|||
|
LDA tblBOARDALLL+1,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH+1,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDA tblBOARDALLH+1,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDY foeX
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprEMPTY
|
|||
|
BEQ L6D64
|
|||
|
CMP #sprHERO
|
|||
|
BEQ L6D64
|
|||
|
CMP #sprFOE
|
|||
|
BEQ L6D61
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BEQ L6D61
|
|||
|
CMP #sprWALLI
|
|||
|
BEQ L6D61
|
|||
|
CMP #sprLADDER
|
|||
|
BNE L6D64
|
|||
|
L6D61 JMP L6E85
|
|||
|
|
|||
|
L6D64 JSR calcFOESPRITEXY
|
|||
|
JSR drawSPRITEXY
|
|||
|
JSR foeNEXTSTEPX
|
|||
|
LDA #$06 ; foe falls left
|
|||
|
LDY foeLEFTRIGHT
|
|||
|
BMI L6D75
|
|||
|
LDA #$0D ; foe falls right
|
|||
|
L6D75 STA foeINDEX
|
|||
|
INC foeSTEPY
|
|||
|
LDA foeSTEPY
|
|||
|
CMP #$05
|
|||
|
BCS L6DC0
|
|||
|
LDA foeSTEPY
|
|||
|
CMP #$02
|
|||
|
BNE L6DB7
|
|||
|
JSR foeTAKECHEST
|
|||
|
LDY foeY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY foeX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BNE L6DB7
|
|||
|
LDA foeACTION
|
|||
|
BPL L6DA2
|
|||
|
DEC nbCHEST
|
|||
|
L6DA2 LDA $5F
|
|||
|
STA foeACTION
|
|||
|
LDY #$00 ; we trapped a foe
|
|||
|
LDA #$75
|
|||
|
JSR printSCORE
|
|||
|
JSR prepareMELODY
|
|||
|
HEX 06200430024000
|
|||
|
|
|||
|
L6DB7 JSR calcFOESPRITEXY
|
|||
|
JSR drawSPRXYCOLLISION
|
|||
|
JMP saveFOEDATA
|
|||
|
|
|||
|
L6DC0 LDA #$00
|
|||
|
STA foeSTEPY
|
|||
|
LDY foeY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY foeX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BNE L6DE1
|
|||
|
LDA #sprEMPTY
|
|||
|
L6DE1 STA (ptrBOARD),Y
|
|||
|
INC foeY
|
|||
|
LDY foeY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY foeX
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprHERO
|
|||
|
BNE L6E02
|
|||
|
LSR fgPLAY ; found the hero, he's now dead
|
|||
|
L6E02 LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BNE L6E58
|
|||
|
LDA foeACTION
|
|||
|
BPL L6E58
|
|||
|
LDY foeY
|
|||
|
DEY
|
|||
|
STY theY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY foeX
|
|||
|
STY theX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprEMPTY
|
|||
|
BEQ L6E31
|
|||
|
DEC nbCHEST
|
|||
|
JMP L6E46
|
|||
|
|
|||
|
L6E31 LDA #sprCHEST
|
|||
|
STA (ptrBOARD),Y
|
|||
|
STA (ptrBBACK),Y
|
|||
|
JSR coutHGR2
|
|||
|
LDY theY
|
|||
|
LDX theX
|
|||
|
JSR getXY
|
|||
|
LDA #sprCHEST
|
|||
|
JSR drawSPRXYCOLLISION
|
|||
|
L6E46 LDY foeY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA #$00
|
|||
|
STA foeACTION
|
|||
|
LDY foeX
|
|||
|
L6E58 LDA #sprFOE
|
|||
|
STA (ptrBOARD),Y
|
|||
|
JSR calcFOESPRITEXY
|
|||
|
JSR drawSPRXYCOLLISION
|
|||
|
JMP saveFOEDATA
|
|||
|
|
|||
|
L6E65 CPY #$07
|
|||
|
BCC L6E85
|
|||
|
JSR calcFOESPRITEXY
|
|||
|
JSR drawSPRITEXY
|
|||
|
LDY foeACTION
|
|||
|
LDA L6E7F-7,Y
|
|||
|
STA foeSTEPX
|
|||
|
L6E76 JSR calcFOESPRITEXY
|
|||
|
JSR drawSPRXYCOLLISION
|
|||
|
JMP saveFOEDATA
|
|||
|
|
|||
|
L6E7F HEX 020102030201
|
|||
|
|
|||
|
L6E85 LDX foeX
|
|||
|
LDY foeY
|
|||
|
JSR L70D8
|
|||
|
ASL
|
|||
|
TAY
|
|||
|
LDA L6E97+1,Y
|
|||
|
PHA
|
|||
|
LDA L6E97,Y
|
|||
|
PHA
|
|||
|
RTS
|
|||
|
|
|||
|
L6E97 DA saveFOEDATA-1 ; 0
|
|||
|
DA L6FBC-1 ; 1
|
|||
|
DA L7047-1 ; 2
|
|||
|
DA L6EAC-1 ; 3
|
|||
|
DA L6F39-1 ; 4
|
|||
|
|
|||
|
L6EA1 LDA foeACTION
|
|||
|
BEQ L6EA9
|
|||
|
BMI L6EA9
|
|||
|
INC foeACTION
|
|||
|
L6EA9 JMP saveFOEDATA
|
|||
|
|
|||
|
*--- 3
|
|||
|
|
|||
|
L6EAC LDY foeSTEPY
|
|||
|
CPY #$03
|
|||
|
BCS L6ED5
|
|||
|
LDY foeY
|
|||
|
BEQ L6EA1
|
|||
|
DEY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDY foeX
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #$01
|
|||
|
BEQ L6EA1
|
|||
|
CMP #$02
|
|||
|
BEQ L6EA1
|
|||
|
CMP #$05
|
|||
|
BEQ L6EA1
|
|||
|
CMP #$08
|
|||
|
BEQ L6EA1
|
|||
|
L6ED5 JSR calcFOESPRITEXY
|
|||
|
JSR drawSPRITEXY
|
|||
|
JSR foeNEXTSTEPX
|
|||
|
LDY foeY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
DEC foeSTEPY
|
|||
|
BPL L6F26
|
|||
|
JSR checkDROPCHEST
|
|||
|
LDY foeX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #$01
|
|||
|
BNE L6F02
|
|||
|
LDA #$00
|
|||
|
L6F02 STA (ptrBOARD),Y
|
|||
|
DEC foeY
|
|||
|
LDY foeY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDY foeX
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprHERO
|
|||
|
BNE L6F1C
|
|||
|
LSR fgPLAY
|
|||
|
L6F1C LDA #$08
|
|||
|
STA (ptrBOARD),Y
|
|||
|
LDA #$04
|
|||
|
STA foeSTEPY
|
|||
|
BNE L6F29
|
|||
|
L6F26 JSR foeTAKECHEST
|
|||
|
L6F29 LDA #$0E
|
|||
|
LDX #$0F
|
|||
|
JSR setFOESTEP
|
|||
|
JSR calcFOESPRITEXY
|
|||
|
JSR drawSPRXYCOLLISION
|
|||
|
JMP saveFOEDATA
|
|||
|
|
|||
|
L6F39 LDY foeSTEPY
|
|||
|
CPY #$02
|
|||
|
BCC L6F63
|
|||
|
LDY foeY
|
|||
|
CPY #$0F
|
|||
|
BCS L6F60
|
|||
|
INY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDY foeX
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprWALLI
|
|||
|
BEQ L6F60
|
|||
|
CMP #sprFOE
|
|||
|
BEQ L6F60
|
|||
|
CMP #sprWALL
|
|||
|
BNE L6F63
|
|||
|
L6F60 JMP saveFOEDATA
|
|||
|
|
|||
|
L6F63 JSR calcFOESPRITEXY
|
|||
|
JSR drawSPRITEXY
|
|||
|
JSR foeNEXTSTEPX
|
|||
|
LDY foeY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
INC foeSTEPY
|
|||
|
LDA foeSTEPY
|
|||
|
CMP #$05
|
|||
|
BCC L6FB9
|
|||
|
JSR checkDROPCHEST
|
|||
|
LDY foeX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BNE L6F94
|
|||
|
LDA #sprEMPTY
|
|||
|
L6F94 STA (ptrBOARD),Y
|
|||
|
INC foeY
|
|||
|
LDY foeY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDY foeX
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprHERO
|
|||
|
BNE L6FAE
|
|||
|
LSR fgPLAY ; we're dead
|
|||
|
L6FAE LDA #sprFOE
|
|||
|
STA (ptrBOARD),Y
|
|||
|
LDA #$00
|
|||
|
STA foeSTEPY
|
|||
|
JMP L6F29
|
|||
|
L6FB9 JMP L6F26
|
|||
|
|
|||
|
L6FBC LDY foeY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDX foeSTEPX
|
|||
|
CPX #$03
|
|||
|
BCS L6FF1
|
|||
|
LDY foeX
|
|||
|
BEQ L6FEE
|
|||
|
DEY
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprFOE
|
|||
|
BEQ L6FEE
|
|||
|
CMP #sprWALLI
|
|||
|
BEQ L6FEE
|
|||
|
CMP #sprWALL
|
|||
|
BEQ L6FEE
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprTRAP
|
|||
|
BNE L6FF1
|
|||
|
L6FEE JMP saveFOEDATA
|
|||
|
|
|||
|
L6FF1 JSR calcFOESPRITEXY
|
|||
|
JSR drawSPRITEXY
|
|||
|
JSR foeNEXTSTEPY
|
|||
|
LDA #$FF
|
|||
|
STA foeLEFTRIGHT
|
|||
|
DEC foeSTEPX
|
|||
|
BPL L7026
|
|||
|
JSR checkDROPCHEST
|
|||
|
LDY foeX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BNE L700F
|
|||
|
LDA #sprEMPTY
|
|||
|
L700F STA (ptrBOARD),Y
|
|||
|
DEC foeX
|
|||
|
DEY
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprHERO
|
|||
|
BNE L701C
|
|||
|
LSR fgPLAY ; foe catched hero
|
|||
|
L701C LDA #sprFOE
|
|||
|
STA (ptrBOARD),Y
|
|||
|
LDA #$04
|
|||
|
STA foeSTEPX
|
|||
|
BNE L7029
|
|||
|
L7026 JSR foeTAKECHEST
|
|||
|
L7029 LDY foeX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprBAR
|
|||
|
BEQ L7037
|
|||
|
LDA #$00 ; foe runs left
|
|||
|
LDX #$02
|
|||
|
BNE L703B
|
|||
|
L7037 LDA #$03 ; foe bars left
|
|||
|
LDX #$05
|
|||
|
L703B JSR setFOESTEP
|
|||
|
JSR calcFOESPRITEXY
|
|||
|
JSR drawSPRXYCOLLISION
|
|||
|
JMP saveFOEDATA
|
|||
|
|
|||
|
L7047 LDY foeY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDX foeSTEPX
|
|||
|
CPX #$02
|
|||
|
BCC L707E
|
|||
|
LDY foeX
|
|||
|
CPY #lvlWIDTH-1
|
|||
|
BEQ L707B
|
|||
|
INY
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #$08
|
|||
|
BEQ L707B
|
|||
|
CMP #$02
|
|||
|
BEQ L707B
|
|||
|
CMP #$01
|
|||
|
BEQ L707B
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #$05
|
|||
|
BNE L707E
|
|||
|
L707B JMP saveFOEDATA
|
|||
|
|
|||
|
L707E JSR calcFOESPRITEXY
|
|||
|
JSR drawSPRITEXY
|
|||
|
JSR foeNEXTSTEPY
|
|||
|
LDA #$01
|
|||
|
STA foeLEFTRIGHT
|
|||
|
INC foeSTEPX
|
|||
|
LDA foeSTEPX
|
|||
|
CMP #$05
|
|||
|
BCC L70B7
|
|||
|
JSR checkDROPCHEST
|
|||
|
LDY foeX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BNE L70A0
|
|||
|
LDA #$00
|
|||
|
L70A0 STA (ptrBOARD),Y
|
|||
|
INC foeX
|
|||
|
INY
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprHERO
|
|||
|
BNE L70AD
|
|||
|
LSR fgPLAY
|
|||
|
L70AD LDA #sprFOE
|
|||
|
STA (ptrBOARD),Y
|
|||
|
LDA #$00
|
|||
|
STA foeSTEPX
|
|||
|
BEQ L70BA
|
|||
|
L70B7 JSR foeTAKECHEST
|
|||
|
L70BA LDY foeX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprBAR
|
|||
|
BEQ L70C8
|
|||
|
LDA #$07 ; foe runs right
|
|||
|
LDX #$09
|
|||
|
BNE L70CC
|
|||
|
L70C8 LDA #$0A ; foe bars right
|
|||
|
LDX #$0C
|
|||
|
L70CC JSR setFOESTEP
|
|||
|
JSR calcFOESPRITEXY
|
|||
|
JSR drawSPRXYCOLLISION
|
|||
|
JMP saveFOEDATA
|
|||
|
|
|||
|
L70D8 STX tempX4
|
|||
|
STY tempY1
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX4
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BNE L70F7
|
|||
|
LDA foeACTION
|
|||
|
BEQ L70F7
|
|||
|
BMI L70F7
|
|||
|
LDA #$03 ; action 3
|
|||
|
RTS
|
|||
|
|
|||
|
L70F7 LDY tempY1
|
|||
|
CPY boardY
|
|||
|
BEQ L7100
|
|||
|
JMP L7186
|
|||
|
|
|||
|
L7100 LDY tempX4
|
|||
|
STY tempX5
|
|||
|
CPY boardX
|
|||
|
BCS L7147
|
|||
|
L7108 INC tempX5
|
|||
|
LDY tempY1
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX5
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprLADDER
|
|||
|
BEQ L713E
|
|||
|
CMP #sprBAR
|
|||
|
BEQ L713E
|
|||
|
LDY tempY1
|
|||
|
CPY #lvlHEIGHT-1
|
|||
|
BEQ L713E
|
|||
|
LDA tblBOARDALLL+1,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH+1,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX5
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprEMPTY
|
|||
|
BEQ L7186
|
|||
|
CMP #sprTRAP
|
|||
|
BEQ L7186
|
|||
|
L713E LDY tempX5
|
|||
|
CPY boardX
|
|||
|
BNE L7108
|
|||
|
LDA #$02 ; action 2
|
|||
|
RTS
|
|||
|
|
|||
|
L7147 DEC tempX5
|
|||
|
LDY tempY1
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX5
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprLADDER
|
|||
|
BEQ L717D
|
|||
|
CMP #sprBAR
|
|||
|
BEQ L717D
|
|||
|
LDY tempY1
|
|||
|
CPY #lvlHEIGHT-1
|
|||
|
BEQ L717D
|
|||
|
LDA tblBOARDALLL+1,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH+1,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX5
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprEMPTY
|
|||
|
BEQ L7186
|
|||
|
CMP #sprTRAP
|
|||
|
BEQ L7186
|
|||
|
L717D LDY tempX5
|
|||
|
CPY boardX
|
|||
|
BNE L7147
|
|||
|
LDA #$01 ; action 1
|
|||
|
RTS
|
|||
|
|
|||
|
L7186 LDA #$00
|
|||
|
STA $58
|
|||
|
LDA #$FF
|
|||
|
STA $59
|
|||
|
LDX tempX4
|
|||
|
LDY tempY1
|
|||
|
JSR L743E
|
|||
|
JSR L7275
|
|||
|
JSR L71A2
|
|||
|
JSR L720C
|
|||
|
LDA $58
|
|||
|
RTS
|
|||
|
L71A1 RTS
|
|||
|
|
|||
|
L71A2 LDY tempX3
|
|||
|
CPY tempX4
|
|||
|
BEQ L71A1
|
|||
|
LDY tempY1
|
|||
|
CPY #lvlHEIGHT-1
|
|||
|
BEQ L71DA
|
|||
|
LDA tblBOARDALLL+1,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH+1,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX3
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BEQ L71DA
|
|||
|
CMP #sprWALLI
|
|||
|
BEQ L71DA
|
|||
|
LDX tempX3
|
|||
|
LDY tempY1
|
|||
|
JSR L739D
|
|||
|
LDX tempX3
|
|||
|
JSR L72D4
|
|||
|
CMP $59
|
|||
|
BCS L71DA
|
|||
|
STA $59
|
|||
|
LDA #$01
|
|||
|
STA $58
|
|||
|
L71DA LDY tempY1
|
|||
|
BEQ L7206
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX3
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprLADDER
|
|||
|
BNE L7206
|
|||
|
LDY tempY1
|
|||
|
LDX tempX3
|
|||
|
JSR L7300
|
|||
|
LDX tempX3
|
|||
|
JSR L72D4
|
|||
|
CMP $59
|
|||
|
BCS L7206
|
|||
|
STA $59
|
|||
|
LDA #$01
|
|||
|
STA $58
|
|||
|
L7206 INC tempX3
|
|||
|
JMP L71A2
|
|||
|
L720B RTS
|
|||
|
|
|||
|
L720C LDY tempX2
|
|||
|
CPY tempX4
|
|||
|
BEQ L720B
|
|||
|
LDY tempY1
|
|||
|
CPY #$0F
|
|||
|
BEQ L7244
|
|||
|
LDA tblBOARDALLL+1,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH+1,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX2
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BEQ L7244
|
|||
|
CMP #sprWALLI
|
|||
|
BEQ L7244
|
|||
|
LDX tempX2
|
|||
|
LDY tempY1
|
|||
|
JSR L739D
|
|||
|
LDX tempX2
|
|||
|
JSR L72D4
|
|||
|
CMP $59
|
|||
|
BCS L7244
|
|||
|
STA $59
|
|||
|
LDA #$02
|
|||
|
STA $58
|
|||
|
L7244 LDY tempY1
|
|||
|
BEQ L7270
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX2
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprLADDER
|
|||
|
BNE L7270
|
|||
|
LDY tempY1
|
|||
|
LDX tempX2
|
|||
|
JSR L7300
|
|||
|
LDX tempX2
|
|||
|
JSR L72D4
|
|||
|
CMP $59
|
|||
|
BCS L7270
|
|||
|
STA $59
|
|||
|
LDA #$02
|
|||
|
STA $58
|
|||
|
L7270 DEC tempX2
|
|||
|
JMP L720C
|
|||
|
|
|||
|
L7275 LDY tempY1
|
|||
|
CPY #lvlHEIGHT-1
|
|||
|
BEQ L72A7
|
|||
|
LDA tblBOARDALLL+1,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH+1,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX4
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BEQ L72A7
|
|||
|
CMP #sprWALLI
|
|||
|
BEQ L72A7
|
|||
|
LDX tempX4
|
|||
|
LDY tempY1
|
|||
|
JSR L739D
|
|||
|
LDX tempX4
|
|||
|
JSR L72D4
|
|||
|
CMP $59
|
|||
|
BCS L72A7
|
|||
|
STA $59
|
|||
|
LDA #$04
|
|||
|
STA $58
|
|||
|
L72A7 LDY tempY1
|
|||
|
BEQ L72D3
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX4
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprLADDER
|
|||
|
BNE L72D3
|
|||
|
LDX tempX4
|
|||
|
LDY tempY1
|
|||
|
JSR L7300
|
|||
|
LDX tempX4
|
|||
|
JSR L72D4
|
|||
|
CMP $59
|
|||
|
BCS L72D3
|
|||
|
STA $59
|
|||
|
LDA #$03
|
|||
|
STA $58
|
|||
|
L72D3 RTS
|
|||
|
|
|||
|
L72D4 STA fgODDEVEN
|
|||
|
CMP boardY
|
|||
|
BNE L72EB
|
|||
|
CPX foeX
|
|||
|
BCC L72E3
|
|||
|
TXA
|
|||
|
SEC
|
|||
|
SBC foeX
|
|||
|
RTS
|
|||
|
|
|||
|
L72E3 STX fgODDEVEN
|
|||
|
LDA foeX
|
|||
|
SEC
|
|||
|
SBC fgODDEVEN
|
|||
|
RTS
|
|||
|
|
|||
|
L72EB BCC L72F4
|
|||
|
SEC
|
|||
|
SBC boardY
|
|||
|
CLC
|
|||
|
ADC #$C8
|
|||
|
RTS
|
|||
|
L72F4 LDA boardY
|
|||
|
SEC
|
|||
|
SBC fgODDEVEN
|
|||
|
CLC
|
|||
|
ADC #$64
|
|||
|
RTS
|
|||
|
|
|||
|
L72FD LDA tempY
|
|||
|
RTS
|
|||
|
|
|||
|
L7300 STY tempY
|
|||
|
STX tempX
|
|||
|
L7304 LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprLADDER
|
|||
|
BNE L72FD
|
|||
|
DEC tempY
|
|||
|
LDY tempX
|
|||
|
BEQ L734A
|
|||
|
DEY
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BEQ L7340
|
|||
|
CMP #sprWALLI
|
|||
|
BEQ L7340
|
|||
|
CMP #sprLADDER
|
|||
|
BEQ L7340
|
|||
|
LDY tempY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX
|
|||
|
DEY
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprBAR
|
|||
|
BNE L734A
|
|||
|
L7340 LDY tempY
|
|||
|
STY temp1
|
|||
|
CPY boardY
|
|||
|
BCC L7397
|
|||
|
BEQ L7397
|
|||
|
L734A LDY tempX
|
|||
|
CPY #lvlWIDTH-1
|
|||
|
BEQ L738C
|
|||
|
LDY tempY
|
|||
|
LDA tblBOARDALLL+1,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH+1,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX
|
|||
|
INY
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BEQ L7382
|
|||
|
CMP #sprWALLI
|
|||
|
BEQ L7382
|
|||
|
CMP #sprLADDER
|
|||
|
BEQ L7382
|
|||
|
LDY tempY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX
|
|||
|
INY
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprBAR
|
|||
|
BNE L738C
|
|||
|
L7382 LDY tempY
|
|||
|
STY temp1
|
|||
|
CPY boardY
|
|||
|
BCC L7397
|
|||
|
BEQ L7397
|
|||
|
L738C LDY tempY
|
|||
|
CPY #$01
|
|||
|
BCC L7395
|
|||
|
JMP L7304
|
|||
|
|
|||
|
L7395 TYA
|
|||
|
RTS
|
|||
|
|
|||
|
L7397 LDA temp1
|
|||
|
RTS
|
|||
|
|
|||
|
L739A LDA tempY
|
|||
|
RTS
|
|||
|
|
|||
|
L739D STY tempY
|
|||
|
STX tempX
|
|||
|
L73A1 LDA tblBOARDALLL+1,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH+1,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BEQ L739A
|
|||
|
CMP #sprWALLI
|
|||
|
BEQ L739A
|
|||
|
LDY tempY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprEMPTY
|
|||
|
BEQ L742D
|
|||
|
CPY #$00 ; first column?
|
|||
|
BEQ L73FB ; yes
|
|||
|
DEY
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprBAR
|
|||
|
BEQ L73F3
|
|||
|
LDY tempY
|
|||
|
LDA tblBOARDALLL+1,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH+1,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX
|
|||
|
DEY
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BEQ L73F3
|
|||
|
CMP #sprWALLI
|
|||
|
BEQ L73F3
|
|||
|
CMP #sprLADDER
|
|||
|
BNE L73FB
|
|||
|
L73F3 LDY tempY
|
|||
|
STY temp1
|
|||
|
CPY boardY
|
|||
|
BCS L743B
|
|||
|
L73FB LDY tempX
|
|||
|
CPY #lvlWIDTH-1
|
|||
|
BCS L742D
|
|||
|
INY
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprBAR
|
|||
|
BEQ L7425
|
|||
|
LDY tempY
|
|||
|
LDA tblBOARDALLL+1,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH+1,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX
|
|||
|
INY
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprWALL
|
|||
|
BEQ L7425
|
|||
|
CMP #sprLADDER
|
|||
|
BEQ L7425
|
|||
|
CMP #sprWALLI
|
|||
|
BNE L742D
|
|||
|
L7425 LDY tempY
|
|||
|
STY temp1
|
|||
|
CPY boardY
|
|||
|
BCS L743B
|
|||
|
L742D INC tempY ; next column
|
|||
|
LDY tempY
|
|||
|
CPY #lvlHEIGHT
|
|||
|
BCS L7438
|
|||
|
JMP L73A1
|
|||
|
|
|||
|
L7438 LDA #$0F
|
|||
|
RTS
|
|||
|
|
|||
|
L743B LDA temp1
|
|||
|
RTS
|
|||
|
|
|||
|
L743E STX tempX3
|
|||
|
STX tempX2
|
|||
|
STY theYSCREEN
|
|||
|
L7444 LDA tempX3
|
|||
|
BEQ L7490
|
|||
|
LDY theYSCREEN
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDY tempX3
|
|||
|
DEY
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #$01
|
|||
|
BEQ L7490
|
|||
|
CMP #$02
|
|||
|
BEQ L7490
|
|||
|
CMP #$03
|
|||
|
BEQ L748A
|
|||
|
CMP #$04
|
|||
|
BEQ L748A
|
|||
|
LDY theYSCREEN
|
|||
|
CPY #$0F
|
|||
|
BEQ L748A
|
|||
|
LDA tblBOARDALLL+1,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH+1,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX3
|
|||
|
DEY
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #$01
|
|||
|
BEQ L748A
|
|||
|
CMP #$02
|
|||
|
BEQ L748A
|
|||
|
CMP #$03
|
|||
|
BNE L748E
|
|||
|
L748A DEC tempX3
|
|||
|
BPL L7444
|
|||
|
L748E DEC tempX3
|
|||
|
L7490 LDA tempX2
|
|||
|
CMP #lvlWIDTH-1
|
|||
|
BEQ L74DE
|
|||
|
LDY theYSCREEN
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDY tempX2
|
|||
|
INY
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprWALL
|
|||
|
BEQ L74DE
|
|||
|
CMP #sprWALLI
|
|||
|
BEQ L74DE
|
|||
|
CMP #sprLADDER
|
|||
|
BEQ L74D8
|
|||
|
CMP #sprBAR
|
|||
|
BEQ L74D8
|
|||
|
LDY theYSCREEN
|
|||
|
CPY #lvlHEIGHT-1
|
|||
|
BEQ L74D8
|
|||
|
LDA tblBOARDALLL+1,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH+1,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX2
|
|||
|
INY
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #$01
|
|||
|
BEQ L74D8
|
|||
|
CMP #$02
|
|||
|
BEQ L74D8
|
|||
|
CMP #$03
|
|||
|
BNE L74DC
|
|||
|
L74D8 INC tempX2
|
|||
|
BPL L7490
|
|||
|
L74DC INC tempX2
|
|||
|
L74DE RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* CALC FOE SPRITE X/Y
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
calcFOESPRITEXY
|
|||
|
LDX foeX
|
|||
|
LDY foeSTEPX
|
|||
|
JSR calcHGRX
|
|||
|
STX theA
|
|||
|
LDY foeY
|
|||
|
LDX foeSTEPY
|
|||
|
JSR calcHGRY
|
|||
|
LDX foeINDEX
|
|||
|
LDA seqFOE,X
|
|||
|
LDX theA
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* FOE TAKES A CHEST
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
foeTAKECHEST
|
|||
|
LDA foeSTEPX
|
|||
|
CMP #$02
|
|||
|
BNE L753D
|
|||
|
LDA foeSTEPY
|
|||
|
CMP #$02
|
|||
|
BNE L753D
|
|||
|
LDY foeY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY foeX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprCHEST
|
|||
|
BNE L753D
|
|||
|
LDA foeACTION ; deja un tresor ?
|
|||
|
BMI L753D ; oui
|
|||
|
LDA #$FF ; prends-le
|
|||
|
SEC
|
|||
|
SBC tempX6
|
|||
|
STA foeACTION
|
|||
|
LDA #sprEMPTY
|
|||
|
STA (ptrBBACK),Y
|
|||
|
LDY foeY
|
|||
|
STY theY
|
|||
|
LDY foeX
|
|||
|
STY theX
|
|||
|
JSR coutHGR2
|
|||
|
LDY theY
|
|||
|
LDX theX
|
|||
|
JSR getXY
|
|||
|
LDA #sprCHEST
|
|||
|
JMP drawSPRITEXY
|
|||
|
L753D RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* FOE DROPS CHEST
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
checkDROPCHEST
|
|||
|
LDA foeACTION
|
|||
|
BPL L7573 ; skip if positive
|
|||
|
INC foeACTION ; here is negative
|
|||
|
BNE L7573
|
|||
|
|
|||
|
LDY foeY ; here if 0
|
|||
|
STY theY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY foeX
|
|||
|
STY theX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
CMP #sprEMPTY
|
|||
|
BNE L7571
|
|||
|
LDA #sprCHEST
|
|||
|
STA (ptrBBACK),Y
|
|||
|
JSR coutHGR2
|
|||
|
LDY theY
|
|||
|
LDX theX
|
|||
|
JSR getXY
|
|||
|
LDA #sprCHEST
|
|||
|
JMP drawSPRXYCOLLISION
|
|||
|
|
|||
|
L7571 DEC foeACTION
|
|||
|
L7573 RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* SET FOE ANIMATION STEP
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
setFOESTEP INC foeINDEX ; tutu
|
|||
|
CMP foeINDEX
|
|||
|
BCC L757D
|
|||
|
L757A STA foeINDEX
|
|||
|
RTS
|
|||
|
L757D CPX foeINDEX
|
|||
|
BCC L757A
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* SET FOE NEXT STEP X
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
foeNEXTSTEPX
|
|||
|
LDA foeSTEPX
|
|||
|
CMP #$02
|
|||
|
BCC L758F
|
|||
|
BEQ L7594
|
|||
|
DEC foeSTEPX
|
|||
|
JMP foeTAKECHEST
|
|||
|
L758F INC foeSTEPX
|
|||
|
JMP foeTAKECHEST
|
|||
|
L7594 RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* SET FOE NEXT STEP Y
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
foeNEXTSTEPY
|
|||
|
LDA foeSTEPY
|
|||
|
CMP #$02
|
|||
|
BCC L75A2
|
|||
|
BEQ L75A7
|
|||
|
DEC foeSTEPY
|
|||
|
JMP foeTAKECHEST
|
|||
|
L75A2 INC foeSTEPY
|
|||
|
JMP foeTAKECHEST
|
|||
|
L75A7 RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* SAVE FOE DATA AFTER WE USED IT
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
saveFOEDATA LDX idxFOE
|
|||
|
LDA foeX
|
|||
|
STA tblFOEX,X
|
|||
|
LDA foeY
|
|||
|
STA tblFOEY,X
|
|||
|
LDA foeSTEPX
|
|||
|
STA tblFOESTEPX,X
|
|||
|
LDA foeSTEPY
|
|||
|
STA tblFOESTEPY,X
|
|||
|
LDA foeACTION
|
|||
|
STA tblFOEACTION,X
|
|||
|
LDA foeLEFTRIGHT
|
|||
|
STA tblFOELEFTRIGHT,X
|
|||
|
LDA foeINDEX
|
|||
|
STA tblFOEINDEX,X
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* LOAD FOE DATA TO USE IT
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
loadFOEDATA LDX idxFOE
|
|||
|
LDA tblFOEX,X
|
|||
|
STA foeX
|
|||
|
LDA tblFOEY,X
|
|||
|
STA foeY
|
|||
|
LDA tblFOESTEPX,X
|
|||
|
STA foeSTEPX
|
|||
|
LDA tblFOESTEPY,X
|
|||
|
STA foeSTEPY
|
|||
|
LDA tblFOEINDEX,X
|
|||
|
STA foeINDEX
|
|||
|
LDA tblFOELEFTRIGHT,X
|
|||
|
STA foeLEFTRIGHT
|
|||
|
LDA tblFOEACTION,X
|
|||
|
STA foeACTION
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* CHECK HOLE - Who/What is in the hole?
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
checkHOLE JSR checkRESURRECT
|
|||
|
INC tempX6 ; next one
|
|||
|
LDA tempX6
|
|||
|
CMP #lvlWIDTH ; ok, we browsed the line
|
|||
|
BCC L7603
|
|||
|
LDA #$00 ; start again at column 0
|
|||
|
STA tempX6
|
|||
|
|
|||
|
L7603 LDX #sizeHOLE-2
|
|||
|
L7605 LDA tblHOLET,X
|
|||
|
STX tempINDEX
|
|||
|
BNE L760F
|
|||
|
JMP L770D
|
|||
|
|
|||
|
L760F DEC tblHOLET,X
|
|||
|
BEQ L7641
|
|||
|
LDA tblHOLEX,X
|
|||
|
STA theX
|
|||
|
LDA tblHOLEY,X
|
|||
|
STA theY
|
|||
|
LDA tblHOLET,X
|
|||
|
CMP #$14 ; 20
|
|||
|
BNE L7639
|
|||
|
LDA #$37 ; 1er sprite
|
|||
|
L7627 JSR coutHGR2
|
|||
|
LDX theX
|
|||
|
LDY theY
|
|||
|
JSR getXY
|
|||
|
LDA #sprEMPTY
|
|||
|
JSR drawSPRITEXY
|
|||
|
L7636 JMP L770D
|
|||
|
|
|||
|
L7639 CMP #$0A ; 10
|
|||
|
BNE L7636
|
|||
|
LDA #$38 ; 2nd sprite
|
|||
|
BNE L7627
|
|||
|
|
|||
|
L7641 LDX tempINDEX
|
|||
|
LDY tblHOLEY,X
|
|||
|
STY theY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tblHOLEX,X
|
|||
|
STY theX
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
CMP #sprEMPTY
|
|||
|
BNE L7667
|
|||
|
JMP L7701
|
|||
|
|
|||
|
L7667 CMP #sprHERO
|
|||
|
BNE L766D
|
|||
|
LSR fgPLAY ; the hero was in the hole... he's dead
|
|||
|
L766D CMP #sprFOE
|
|||
|
BEQ L767A ; it was a foe
|
|||
|
CMP #sprCHEST
|
|||
|
BNE L7677
|
|||
|
DEC nbCHEST ; a chest, remove one
|
|||
|
L7677 JMP L7701
|
|||
|
|
|||
|
*--- kill the foe
|
|||
|
|
|||
|
L767A LDA #sprWALL ; put a wall
|
|||
|
STA (ptrBOARD),Y
|
|||
|
STA (ptrBBACK),Y
|
|||
|
JSR coutHGR1
|
|||
|
LDA #sprWALL
|
|||
|
JSR coutHGR2
|
|||
|
|
|||
|
LDX nbFOE ; find the foe
|
|||
|
L768A LDA tblFOEX,X
|
|||
|
CMP theX
|
|||
|
BNE L76FE
|
|||
|
LDA tblFOEY,X
|
|||
|
CMP theY
|
|||
|
BNE L76FE
|
|||
|
LDA tblFOEACTION,X ; was he holding a chest?
|
|||
|
BPL L769F
|
|||
|
DEC nbCHEST ; yes, remove it
|
|||
|
L769F LDA #$7F ; no chest
|
|||
|
STA tblFOEACTION,X
|
|||
|
STX idxFOE
|
|||
|
JSR loadFOEDATA
|
|||
|
JSR calcFOESPRITEXY
|
|||
|
JSR drawSPRITEXY
|
|||
|
LDX idxFOE
|
|||
|
LDY #$01 ; we resurrect him on line 1
|
|||
|
STY theY
|
|||
|
L76B5 LDY theY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY tempX6
|
|||
|
L76C3 LDA (ptrBBACK),Y
|
|||
|
CMP #sprEMPTY ; only if there is a space
|
|||
|
BEQ L76D9
|
|||
|
INC tempX6
|
|||
|
LDY tempX6
|
|||
|
CPY #lvlWIDTH
|
|||
|
BCC L76C3
|
|||
|
INC theY
|
|||
|
LDA #$00
|
|||
|
STA tempX6
|
|||
|
BEQ L76B5
|
|||
|
L76D9 TYA
|
|||
|
STA tblFOEX,X
|
|||
|
LDA theY
|
|||
|
STA tblFOEY,X
|
|||
|
LDA #$14
|
|||
|
STA tblFOETEMPO,X
|
|||
|
LDA #$02
|
|||
|
STA tblFOESTEPY,X
|
|||
|
STA tblFOESTEPX,X
|
|||
|
LDA #$00
|
|||
|
STA tblFOEINDEX,X
|
|||
|
LDY #$00 ; we killed an ennemy
|
|||
|
LDA #$75
|
|||
|
JSR printSCORE
|
|||
|
JMP L770D
|
|||
|
|
|||
|
L76FE DEX
|
|||
|
BNE L768A
|
|||
|
L7701 LDA #sprWALL
|
|||
|
STA (ptrBOARD),Y
|
|||
|
JSR coutHGR1
|
|||
|
LDA #sprWALL
|
|||
|
JSR coutHGR2
|
|||
|
L770D LDX tempINDEX
|
|||
|
DEX
|
|||
|
BMI L7715
|
|||
|
JMP L7605
|
|||
|
L7715 RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* CHECK RESURRECT - Can/Do we resurrect a foe?
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
checkRESURRECT
|
|||
|
LDX nbFOE ; ennemi 0 n'existe pas
|
|||
|
BEQ L7715
|
|||
|
LDA idxFOE
|
|||
|
PHA
|
|||
|
L771D LDA tblFOETEMPO,X
|
|||
|
BEQ nextFOE
|
|||
|
STX idxFOE
|
|||
|
JSR loadFOEDATA
|
|||
|
LDA #$7F
|
|||
|
STA tblFOEACTION,X
|
|||
|
LDA tblFOEX,X
|
|||
|
STA theX
|
|||
|
LDA tblFOEY,X
|
|||
|
STA theY
|
|||
|
DEC tblFOETEMPO,X ; foe must live
|
|||
|
BEQ resurrectFOE
|
|||
|
LDA tblFOETEMPO,X
|
|||
|
CMP #$13
|
|||
|
BNE L7752
|
|||
|
LDA #$39 ; foe appears again
|
|||
|
JSR coutHGR2
|
|||
|
JSR calcFOESPRITEXY
|
|||
|
LDA #$39
|
|||
|
JSR drawSPRXYCOLLISION
|
|||
|
JMP nextFOEalt
|
|||
|
|
|||
|
L7752 CMP #$0A
|
|||
|
BNE nextFOE
|
|||
|
LDA #$3A ; foe appears again sprite 2
|
|||
|
JSR coutHGR2
|
|||
|
JSR calcFOESPRITEXY
|
|||
|
LDA #$3A
|
|||
|
JSR drawSPRXYCOLLISION
|
|||
|
|
|||
|
nextFOEalt LDX idxFOE ; next ennemy
|
|||
|
nextFOE DEX
|
|||
|
BNE L771D
|
|||
|
PLA ; restore
|
|||
|
STA idxFOE
|
|||
|
RTS ; exit
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* RESURRECT FOE
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
resurrectFOE
|
|||
|
LDY theY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDX idxFOE
|
|||
|
INC tblFOETEMPO,X
|
|||
|
LDY theX
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
BNE nextFOE
|
|||
|
LDA #sprFOE
|
|||
|
STA (ptrBOARD),Y
|
|||
|
LDA #sprEMPTY
|
|||
|
JSR coutHGR2
|
|||
|
LDA #$00
|
|||
|
LDX idxFOE
|
|||
|
STA tblFOEACTION,X
|
|||
|
STA tblFOETEMPO,X
|
|||
|
LDA #sprFOE
|
|||
|
JSR coutHGR1
|
|||
|
JSR prepareMELODY
|
|||
|
HEX 027C03780474057000
|
|||
|
LDX idxFOE
|
|||
|
JMP nextFOE
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* 8D - RETURN - DISPLAYS HIGH SCORE
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
displayHIGHSCORES
|
|||
|
JSR showALLSCORES
|
|||
|
LDX #$FF
|
|||
|
LDY #$FF
|
|||
|
LDA #$04
|
|||
|
STA counter
|
|||
|
L77B7 LDA fgINPUT
|
|||
|
CMP #chrK
|
|||
|
BEQ L77C7
|
|||
|
LDA BUTN1
|
|||
|
BMI L77D6
|
|||
|
LDA BUTN0
|
|||
|
BMI L77D6
|
|||
|
L77C7 LDA KBD
|
|||
|
BMI L77D6
|
|||
|
DEX
|
|||
|
BNE L77B7
|
|||
|
DEY
|
|||
|
BNE L77B7
|
|||
|
DEC counter
|
|||
|
BNE L77B7
|
|||
|
L77D6 STA KBDSTROBE
|
|||
|
STA TXTPAGE1
|
|||
|
JSR clearHGR2
|
|||
|
|
|||
|
LDY #lvlHEIGHT-1
|
|||
|
STY theY
|
|||
|
L77E3 LDA tblBOARDALLL,Y
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY #lvlWIDTH-1
|
|||
|
STY theX
|
|||
|
L77F1 LDA (ptrBBACK),Y
|
|||
|
CMP #sprTRAP
|
|||
|
BNE L77F9
|
|||
|
LDA #sprWALL
|
|||
|
L77F9 JSR coutHGR2
|
|||
|
DEC theX
|
|||
|
LDY theX
|
|||
|
BPL L77F1
|
|||
|
DEC theY
|
|||
|
LDY theY
|
|||
|
BPL L77E3
|
|||
|
LDX #sizeHOLE-2
|
|||
|
L780A STX tempINDEX
|
|||
|
LDA tblHOLET,X
|
|||
|
BEQ L7838
|
|||
|
LDY tblHOLEY,X
|
|||
|
STY theY
|
|||
|
LDY tblHOLEX,X
|
|||
|
STY theX
|
|||
|
CMP #$15
|
|||
|
BCC L7827
|
|||
|
LDA #sprEMPTY
|
|||
|
JSR coutHGR2
|
|||
|
JMP L7838
|
|||
|
|
|||
|
L7827 CMP #$0B
|
|||
|
BCC L7833
|
|||
|
LDA #$37 ; rebuild wall step 1
|
|||
|
JSR coutHGR2
|
|||
|
JMP L7838
|
|||
|
|
|||
|
L7833 LDA #$38 ; rebuild wall step 2
|
|||
|
JSR coutHGR2
|
|||
|
|
|||
|
L7838 LDX tempINDEX
|
|||
|
DEX
|
|||
|
BPL L780A
|
|||
|
LDX nbFOE
|
|||
|
BEQ L7868 ; skip foe n<>0
|
|||
|
L7841 LDA tblFOETEMPO,X
|
|||
|
STX tempINDEX
|
|||
|
BEQ L7863
|
|||
|
LDY tblFOEX,X
|
|||
|
STY theX
|
|||
|
LDY tblFOEY,X
|
|||
|
STY theY
|
|||
|
CMP #$14
|
|||
|
BCS L7863
|
|||
|
CMP #$0B
|
|||
|
BCC L785E
|
|||
|
LDA #$39 ; foe revives step 1
|
|||
|
BNE L7860
|
|||
|
L785E LDA #$3A ; foe revives step 2
|
|||
|
L7860 JSR coutHGR2
|
|||
|
L7863 LDX tempINDEX
|
|||
|
DEX
|
|||
|
BNE L7841
|
|||
|
L7868 JMP getPLAYERINPUT
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* SHOW ALL SCORES
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
showALLSCORES
|
|||
|
JSR clearHGR2
|
|||
|
LDA #>HGR2
|
|||
|
STA activePAGE
|
|||
|
LDA #$00
|
|||
|
STA theX
|
|||
|
STA theY
|
|||
|
JSR printSTRING
|
|||
|
ASC " LODE RUNNER HIGH SCORES"8D8D8D
|
|||
|
ASC " INITIALS LEVEL SCORE"8D
|
|||
|
ASC " -------- ----- --------"8D00
|
|||
|
|
|||
|
LDA #$01 ; for x=1 to...10
|
|||
|
STA tempX4
|
|||
|
L78D4 CMP #$0A
|
|||
|
BNE L78E5
|
|||
|
LDA #$01
|
|||
|
JSR outputCHAR
|
|||
|
LDA #$00
|
|||
|
JSR outputCHAR
|
|||
|
JMP L78EF
|
|||
|
|
|||
|
L78E5 LDA #chrSPC
|
|||
|
JSR printCHAR
|
|||
|
LDA tempX4
|
|||
|
JSR outputCHAR
|
|||
|
L78EF JSR printSTRING
|
|||
|
ASC ". "00
|
|||
|
LDX tempX4
|
|||
|
LDY scoreoffset,X
|
|||
|
STY tempY1
|
|||
|
LDA scorebuf+$03,Y
|
|||
|
BNE L7907
|
|||
|
JMP L798C
|
|||
|
|
|||
|
* +0..+2 INITIALS
|
|||
|
* +3 LEVEL
|
|||
|
* +4..+7 SCORE
|
|||
|
|
|||
|
L7907 LDY tempY1
|
|||
|
LDA scorebuf,Y
|
|||
|
JSR printCHAR
|
|||
|
LDY tempY1
|
|||
|
LDA scorebuf+$01,Y
|
|||
|
JSR printCHAR
|
|||
|
LDY tempY1
|
|||
|
LDA scorebuf+$02,Y
|
|||
|
JSR printCHAR
|
|||
|
JSR printSTRING
|
|||
|
ASC " "00
|
|||
|
LDY tempY1
|
|||
|
LDA scorebuf+$03,Y
|
|||
|
JSR hex2dec
|
|||
|
LDA theCENTAINE
|
|||
|
JSR outputCHAR
|
|||
|
LDA theDIZAINE
|
|||
|
JSR outputCHAR
|
|||
|
LDA theUNITE
|
|||
|
JSR outputCHAR
|
|||
|
JSR printSTRING
|
|||
|
ASC " "00
|
|||
|
LDY tempY1
|
|||
|
LDA scorebuf+$04,Y
|
|||
|
JSR bcd2dec
|
|||
|
LDA theDIZAINE
|
|||
|
JSR outputCHAR
|
|||
|
LDA theUNITE
|
|||
|
JSR outputCHAR
|
|||
|
LDY tempY1
|
|||
|
LDA scorebuf+$05,Y
|
|||
|
JSR bcd2dec
|
|||
|
LDA theDIZAINE
|
|||
|
JSR outputCHAR
|
|||
|
LDA theUNITE
|
|||
|
JSR outputCHAR
|
|||
|
LDY tempY1
|
|||
|
LDA scorebuf+$06,Y
|
|||
|
JSR bcd2dec
|
|||
|
LDA theDIZAINE
|
|||
|
JSR outputCHAR
|
|||
|
LDA theUNITE
|
|||
|
JSR outputCHAR
|
|||
|
LDY tempY1
|
|||
|
LDA scorebuf+$07,Y
|
|||
|
JSR bcd2dec
|
|||
|
LDA theDIZAINE
|
|||
|
JSR outputCHAR
|
|||
|
LDA theUNITE
|
|||
|
JSR outputCHAR
|
|||
|
L798C JSR L7B7D
|
|||
|
INC tempX4
|
|||
|
LDA tempX4
|
|||
|
CMP #$0B
|
|||
|
BCS L799A
|
|||
|
JMP L78D4
|
|||
|
|
|||
|
L799A STA TXTPAGE2
|
|||
|
LDA #>HGR1
|
|||
|
STA activePAGE
|
|||
|
RTS
|
|||
|
|
|||
|
scoreoffset HEX 0000081018202830384048 ; offset of each score
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* CLEAR PAGES
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
clearHGRPAGES
|
|||
|
JSR clearHGR1
|
|||
|
JSR clearHGR2
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* DRAW GAME FRAME
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
drawINFOBAR
|
|||
|
LDY #$27 ; met la barre bleue
|
|||
|
LDA activePAGE
|
|||
|
CMP #>HGR2
|
|||
|
BEQ L79DD
|
|||
|
L79BB LDA #$AA
|
|||
|
STA $2350,Y
|
|||
|
STA $2750,Y
|
|||
|
STA $2B50,Y
|
|||
|
STA $2F50,Y
|
|||
|
DEY
|
|||
|
LDA #$D5
|
|||
|
STA $2350,Y
|
|||
|
STA $2750,Y
|
|||
|
STA $2B50,Y
|
|||
|
STA $2F50,Y
|
|||
|
DEY
|
|||
|
BPL L79BB
|
|||
|
BMI L79FD
|
|||
|
|
|||
|
L79DD LDA #$AA ; pareil mais sur HGR2
|
|||
|
STA $4350,Y
|
|||
|
STA $4750,Y
|
|||
|
STA $4B50,Y
|
|||
|
STA $4F50,Y
|
|||
|
DEY
|
|||
|
LDA #$D5
|
|||
|
STA $4350,Y
|
|||
|
STA $4750,Y
|
|||
|
STA $4B50,Y
|
|||
|
STA $4F50,Y
|
|||
|
DEY
|
|||
|
BPL L79DD
|
|||
|
|
|||
|
L79FD LDA #$10
|
|||
|
STA theY
|
|||
|
LDA #$00
|
|||
|
STA theX
|
|||
|
JSR printSTRING
|
|||
|
ASC "SCORE MEN LEVEL "00
|
|||
|
JSR printMEN
|
|||
|
JSR printLEVEL
|
|||
|
LDA #$00 ; score de 0
|
|||
|
TAY
|
|||
|
JMP printSCORE
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* SET HGR POINTER
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
setHGRPOINTER
|
|||
|
LDA xhgr,Y
|
|||
|
STA ptrHGR1
|
|||
|
LDA yhgr,Y
|
|||
|
ORA hgrPAGE
|
|||
|
STA ptrHGR1+1
|
|||
|
RTS
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* SET HGR POINTERS
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
setHGRPOINTERS
|
|||
|
LDA xhgr,Y
|
|||
|
STA ptrHGR1
|
|||
|
STA ptrHGR2
|
|||
|
LDA yhgr,Y
|
|||
|
ORA #>HGR1
|
|||
|
STA ptrHGR1+1
|
|||
|
EOR #$60
|
|||
|
STA ptrHGR2+1
|
|||
|
RTS
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* CLEAR HGR1
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
clearHGR1 LDA #>HGR1
|
|||
|
LDX #>HGR2 ; >HGR1+$20
|
|||
|
BNE L7A5B
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* CLEAR HGR2
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
clearHGR2 LDA #>HGR2
|
|||
|
LDX #>HGR3 ; >HGR2+$20
|
|||
|
|
|||
|
*--- clear now
|
|||
|
|
|||
|
L7A5B STA ptrDATA+1
|
|||
|
LDA #$00
|
|||
|
STA ptrDATA
|
|||
|
TAY
|
|||
|
LDA #$80
|
|||
|
L7A64 STA (ptrDATA),Y
|
|||
|
INY
|
|||
|
BNE L7A64
|
|||
|
INC ptrDATA+1
|
|||
|
CPX ptrDATA+1
|
|||
|
BNE L7A64
|
|||
|
RTS
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* PRINT MEN
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
printMEN LDA theMEN ; print number of men
|
|||
|
LDX #$10
|
|||
|
|
|||
|
L7A74 STX theX ; show byte2dec
|
|||
|
JSR hex2dec
|
|||
|
LDA #$10 ; print three values (0-255)
|
|||
|
STA theY
|
|||
|
LDA theCENTAINE
|
|||
|
JSR outputCHAR
|
|||
|
LDA theDIZAINE
|
|||
|
JSR outputCHAR
|
|||
|
LDA theUNITE
|
|||
|
JMP outputCHAR
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* PRINT LEVEL
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
printLEVEL LDA theLEVEL ; print level
|
|||
|
LDX #$19 ; column offset
|
|||
|
BNE L7A74
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* ADD & PRINT SCORE
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
printSCORE CLC
|
|||
|
SED
|
|||
|
ADC theSCORE
|
|||
|
STA theSCORE
|
|||
|
TYA
|
|||
|
ADC theSCORE+1
|
|||
|
STA theSCORE+1
|
|||
|
LDA #$00
|
|||
|
ADC theSCORE+2
|
|||
|
STA theSCORE+2
|
|||
|
LDA #$00
|
|||
|
ADC theSCORE+3
|
|||
|
STA theSCORE+3
|
|||
|
CLD
|
|||
|
|
|||
|
LDA #$05
|
|||
|
STA theX
|
|||
|
LDA #$10
|
|||
|
STA theY
|
|||
|
|
|||
|
LDA theSCORE+3
|
|||
|
JSR bcd2dec
|
|||
|
LDA theUNITE
|
|||
|
JSR outputCHAR
|
|||
|
LDA theSCORE+2
|
|||
|
JSR bcd2dec
|
|||
|
LDA theDIZAINE
|
|||
|
JSR outputCHAR
|
|||
|
LDA theUNITE
|
|||
|
JSR outputCHAR
|
|||
|
LDA theSCORE+1
|
|||
|
JSR bcd2dec
|
|||
|
LDA theDIZAINE
|
|||
|
JSR outputCHAR
|
|||
|
LDA theUNITE
|
|||
|
JSR outputCHAR
|
|||
|
LDA theSCORE
|
|||
|
JSR bcd2dec
|
|||
|
LDA theDIZAINE
|
|||
|
JSR outputCHAR
|
|||
|
LDA theUNITE
|
|||
|
JMP outputCHAR
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* BCD TO DECIMAL CONVERSION
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
bcd2dec STA theDIZAINE
|
|||
|
AND #$0F
|
|||
|
STA theUNITE ; unit<69>
|
|||
|
LDA theDIZAINE
|
|||
|
LSR
|
|||
|
LSR
|
|||
|
LSR
|
|||
|
LSR
|
|||
|
STA theDIZAINE ; dizaine
|
|||
|
RTS
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* HEX TO DECIMAL CONVERSION
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
hex2dec LDX #$00
|
|||
|
STX theDIZAINE
|
|||
|
STX theCENTAINE ; centaine
|
|||
|
L7AFE CMP #100
|
|||
|
BCC L7B08
|
|||
|
INC theCENTAINE
|
|||
|
SBC #100
|
|||
|
BNE L7AFE
|
|||
|
L7B08 CMP #10
|
|||
|
BCC L7B12
|
|||
|
INC theDIZAINE
|
|||
|
SBC #10
|
|||
|
BNE L7B08
|
|||
|
L7B12 STA theUNITE
|
|||
|
RTS
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* PRINT A CHARACTER
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
outputCHAR CLC ; print a char
|
|||
|
ADC #spr0
|
|||
|
LDX activePAGE
|
|||
|
CPX #>HGR2
|
|||
|
BEQ L7B24
|
|||
|
JSR coutHGR1 ; print HGR1
|
|||
|
INC theX
|
|||
|
RTS
|
|||
|
L7B24 JSR coutHGR2 ; print HGR2
|
|||
|
INC theX
|
|||
|
RTS
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* FILTER CHARACTER
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
filterCHAR CMP #"A"
|
|||
|
BCC L7B32
|
|||
|
CMP #"Z"+1
|
|||
|
BCC L7B60
|
|||
|
L7B32 LDX #$7C
|
|||
|
CMP #" " ; 7C = 00
|
|||
|
BEQ L7B5F
|
|||
|
LDX #$DB
|
|||
|
CMP #">" ; DB = 5F
|
|||
|
BEQ L7B5F
|
|||
|
INX
|
|||
|
CMP #"." ; DC = 60
|
|||
|
BEQ L7B5F
|
|||
|
INX
|
|||
|
CMP #"(" ; DD = 61
|
|||
|
BEQ L7B5F
|
|||
|
INX
|
|||
|
CMP #")" ; DE = 62
|
|||
|
BEQ L7B5F
|
|||
|
INX
|
|||
|
CMP #"/" ; DF = 63
|
|||
|
BEQ L7B5F
|
|||
|
INX
|
|||
|
CMP #"-" ; E0 = 64
|
|||
|
BEQ L7B5F
|
|||
|
INX
|
|||
|
CMP #"<" ; E1 = 65
|
|||
|
BEQ L7B5F
|
|||
|
LDA #$10 ; The still Lode Runner
|
|||
|
RTS
|
|||
|
|
|||
|
L7B5F TXA ; calculate offset
|
|||
|
L7B60 SEC
|
|||
|
SBC #$7C
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* OUTPUT A CHARACTER
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
printCHAR CMP #chrRET
|
|||
|
BEQ L7B7D
|
|||
|
JSR filterCHAR
|
|||
|
LDX activePAGE
|
|||
|
CPX #>HGR2
|
|||
|
BEQ L7B77
|
|||
|
JSR coutHGR1 ; output in HGR1
|
|||
|
INC theX
|
|||
|
RTS
|
|||
|
L7B77 JSR coutHGR2 ; output in HGR2
|
|||
|
INC theX
|
|||
|
RTS
|
|||
|
|
|||
|
L7B7D INC theY ; next line
|
|||
|
LDA #$00
|
|||
|
STA theX
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* CTRL-E - LEVEL EDITOR
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
enterEDITOR LDA #$00
|
|||
|
STA theSCORE
|
|||
|
STA theSCORE+1
|
|||
|
STA theSCORE+2
|
|||
|
STA theSCORE+3
|
|||
|
LDA CSWL
|
|||
|
STA CH
|
|||
|
LDA CSWH
|
|||
|
STA CV
|
|||
|
LDA #$05
|
|||
|
STA theMEN
|
|||
|
STA fgDEMO
|
|||
|
LDA fgINPUT ; save interface mode
|
|||
|
STA L7C76+1
|
|||
|
LDA #chrK ; force keyboard in editor
|
|||
|
STA fgINPUT
|
|||
|
STA TXTPAGE1
|
|||
|
LDA intLEVEL ; check level
|
|||
|
CMP #maxLEVEL
|
|||
|
BCC editMAIN
|
|||
|
LDA #$00 ; start at 0 if > 149
|
|||
|
STA intLEVEL
|
|||
|
|
|||
|
editMAIN JSR clearHGR1 ; clear HGR1
|
|||
|
LDA #>HGR1
|
|||
|
STA activePAGE
|
|||
|
LDA #$00
|
|||
|
STA theX
|
|||
|
STA theY
|
|||
|
JSR printSTRING
|
|||
|
ASC " LODE RUNNER BOARD EDITOR"8D
|
|||
|
ASC "----------------------------"8D
|
|||
|
ASC " <ESC> ABORTS ANY COMMAND"8D00
|
|||
|
|
|||
|
editLOOP LDA theY ; are we at the
|
|||
|
CMP #$09 ; end of the screen?
|
|||
|
BCS editMAIN ; yes, bottom line
|
|||
|
|
|||
|
JSR printSTRING ; no, show command
|
|||
|
ASC 8D
|
|||
|
ASC "COMMAND>"00
|
|||
|
|
|||
|
JSR editWAITKEY ; wait for key
|
|||
|
LDX #$00
|
|||
|
L7C2E LDY tblEDITKEY,X ; authorized key?
|
|||
|
BEQ editNEXT
|
|||
|
CMP tblEDITKEY,X
|
|||
|
BEQ L7C41
|
|||
|
INX
|
|||
|
BNE L7C2E
|
|||
|
|
|||
|
editNEXT JSR doBEEP ; beep
|
|||
|
JMP editLOOP ; loop
|
|||
|
|
|||
|
L7C41 TXA ; yes, we know the key
|
|||
|
ASL ; jump to the feature
|
|||
|
TAX ; and handle it
|
|||
|
LDA tblEDITADD+1,X
|
|||
|
PHA
|
|||
|
LDA tblEDITADD,X
|
|||
|
PHA
|
|||
|
RTS
|
|||
|
|
|||
|
tblEDITKEY ASC "PCEMIS"00
|
|||
|
|
|||
|
tblEDITADD DA editPLAY-1 ; Play level
|
|||
|
DA editCLEAR-1 ; Clear level
|
|||
|
DA editEDIT-1 ; Edit level
|
|||
|
DA editMOVE-1 ; Move level
|
|||
|
DA editINIT-1 ; Initialize
|
|||
|
DA editCLEARSCORE-1 ; Clear Score file
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* P - PLAY LEVEL
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
editPLAY JSR printSTRING
|
|||
|
ASC 8D
|
|||
|
ASC ">>PLAY LEVEL"00
|
|||
|
JSR inputLEVEL
|
|||
|
BCS L7C8B
|
|||
|
L7C76 LDA #$00
|
|||
|
STA fgINPUT
|
|||
|
LDA #$03
|
|||
|
STA fgDEMO
|
|||
|
LDA #$01
|
|||
|
STA fgGOODSTART
|
|||
|
LDA intLEVEL ; do we start at level 1?
|
|||
|
BEQ L7C88
|
|||
|
LSR fgGOODSTART ; no, we cannot change scores
|
|||
|
L7C88 JMP L6056
|
|||
|
L7C8B JMP editNEXT
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* C - CLEAR LEVEL
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
editCLEAR JSR printSTRING
|
|||
|
ASC 8D
|
|||
|
ASC ">>CLEAR LEVEL"00
|
|||
|
JSR inputLEVEL
|
|||
|
BCS L7CB9
|
|||
|
JSR checkDISK
|
|||
|
LDY #$00
|
|||
|
TYA
|
|||
|
L7CAB STA levelDISK,Y
|
|||
|
INY
|
|||
|
BNE L7CAB
|
|||
|
LDA #$02 ; write
|
|||
|
JSR diskLEVEL
|
|||
|
JMP editLOOP
|
|||
|
L7CB9 JMP editNEXT
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* E - EDIT LEVEL
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
editEDIT JSR printSTRING
|
|||
|
ASC 8D
|
|||
|
ASC ">>EDIT LEVEL"00
|
|||
|
JSR inputLEVEL ; is level valid?
|
|||
|
BCS L7CD5 ; no
|
|||
|
JMP editEDITLEVEL ; yes, handle edit
|
|||
|
L7CD5 JMP editNEXT
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* M - MOVE LEVEL
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
editMOVE JSR printSTRING
|
|||
|
ASC 8D
|
|||
|
ASC ">>MOVE LEVEL"00
|
|||
|
JSR inputLEVEL
|
|||
|
BCS L7D5A
|
|||
|
STY L824F
|
|||
|
JSR printSTRING
|
|||
|
ASC " TO LEVEL"00
|
|||
|
JSR inputLEVEL
|
|||
|
BCS L7D5A
|
|||
|
STY L8250
|
|||
|
JSR printSTRING
|
|||
|
ASC 8D
|
|||
|
ASC " SOURCE DISKETTE"00
|
|||
|
JSR editWAITKEY
|
|||
|
JSR checkDISK
|
|||
|
LDA L824F
|
|||
|
STA intLEVEL
|
|||
|
LDA #$01 ; read
|
|||
|
JSR diskLEVEL
|
|||
|
JSR printSTRING
|
|||
|
ASC 8D
|
|||
|
ASC " DESTINATION DISKETTE"00
|
|||
|
JSR editWAITKEY
|
|||
|
JSR checkDISK
|
|||
|
LDA L8250
|
|||
|
STA intLEVEL
|
|||
|
LDA #$02 ; write
|
|||
|
JSR diskLEVEL
|
|||
|
JMP editLOOP
|
|||
|
L7D5A JMP editNEXT
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* I - INITIALIZE DISKETTE
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
editINIT JSR printSTRING
|
|||
|
ASC 8D
|
|||
|
ASC ">>INITIALIZE"8D
|
|||
|
ASC " THIS FORMATS THE DISKETTE"8D
|
|||
|
ASC " FOR USER CREATED LEVELS."8D
|
|||
|
ASC " (CAUTION. IT ERASES THE"8D
|
|||
|
ASC " ENTIRE DISKETTE FIRST)"8D8D
|
|||
|
ASC " ARE YOU SURE (Y/N) "00
|
|||
|
JSR editWAITKEY
|
|||
|
CMP #chrY
|
|||
|
BNE L7E72
|
|||
|
NOP ; NOP
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
LDA intLEVEL
|
|||
|
PHA
|
|||
|
LDA #$04 ; Init command
|
|||
|
JSR diskLEVEL
|
|||
|
|
|||
|
LDA #<boot ; Save T0/S0
|
|||
|
STA LB7F0
|
|||
|
LDA #>boot
|
|||
|
STA LB7F0+1
|
|||
|
LDA #$00
|
|||
|
STA LB7ED
|
|||
|
STA LB7EC
|
|||
|
LDA #$02
|
|||
|
STA LB7F4
|
|||
|
JSR diskRWTS
|
|||
|
LDA #$E0
|
|||
|
STA intLEVEL
|
|||
|
LDA #$01
|
|||
|
JSR diskLEVEL
|
|||
|
LDY #$37
|
|||
|
L7E33 LDA L8251,Y
|
|||
|
STA levelDISK,Y
|
|||
|
DEY
|
|||
|
BPL L7E33
|
|||
|
LDA #$02
|
|||
|
JSR diskLEVEL
|
|||
|
LDA #$EF
|
|||
|
STA intLEVEL
|
|||
|
LDA #$01
|
|||
|
JSR diskLEVEL
|
|||
|
LDY #$20
|
|||
|
L7E4C LDA L8289,Y
|
|||
|
STA levelDISK+$B,Y
|
|||
|
DEY
|
|||
|
BPL L7E4C
|
|||
|
LDA #$02
|
|||
|
JSR diskLEVEL
|
|||
|
LDA #$01
|
|||
|
JSR readSCORE
|
|||
|
LDY #$0A
|
|||
|
L7E61 LDA L63A8,Y
|
|||
|
STA scorebuf+$F4,Y
|
|||
|
DEY
|
|||
|
BPL L7E61
|
|||
|
LDA #$02
|
|||
|
JSR readSCORE
|
|||
|
PLA
|
|||
|
STA intLEVEL
|
|||
|
L7E72 JMP editLOOP
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* C - CLEAR SCORE FILE
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
editCLEARSCORE
|
|||
|
JSR printSTRING
|
|||
|
ASC 8D
|
|||
|
ASC ">>CLEAR SCORE FILE"8D
|
|||
|
ASC " THIS CLEARS THE HIGH"8D
|
|||
|
ASC " SCORE FILE OF ALL"8D
|
|||
|
ASC " ENTRIES."8D8D
|
|||
|
ASC " ARE YOU SURE (Y/N) "00
|
|||
|
JSR editWAITKEY
|
|||
|
CMP #chrY
|
|||
|
BNE L7EFE
|
|||
|
LDA #$01
|
|||
|
JSR readSCORE
|
|||
|
CMP #$00
|
|||
|
BNE L7EEF
|
|||
|
JSR tellNODATADISK
|
|||
|
JMP editMAIN
|
|||
|
|
|||
|
L7EEF LDY #$4F ; clear score file
|
|||
|
LDA #$00
|
|||
|
L7EF3 STA scorebuf,Y
|
|||
|
DEY
|
|||
|
BPL L7EF3
|
|||
|
LDA #$02
|
|||
|
JSR readSCORE ; write score file
|
|||
|
L7EFE JMP editLOOP
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* EDIT THE LEVEL
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
editEDITLEVEL
|
|||
|
JSR clearHGR2 ; clear HGR2
|
|||
|
LDA #>HGR2
|
|||
|
STA activePAGE
|
|||
|
JSR drawINFOBAR ; show frame
|
|||
|
LDA #>HGR1
|
|||
|
STA activePAGE
|
|||
|
JSR checkDISK ; check diskette (master or data disk)
|
|||
|
LDX #$01
|
|||
|
STX fgCHANGE
|
|||
|
DEX ; mode edit
|
|||
|
JSR prepareLEVEL
|
|||
|
BCC L7F1F
|
|||
|
JMP editNEXT
|
|||
|
|
|||
|
L7F1F LDA #$00 ; cursor is at 0,0
|
|||
|
STA theX
|
|||
|
STA theY
|
|||
|
L7F25 JSR blinkATXY ; wait for key
|
|||
|
CMP #"9"+1
|
|||
|
BCS L7F54 ; no sprite
|
|||
|
CMP #"0" ; means check commands
|
|||
|
BCC L7F54
|
|||
|
AND #$0F
|
|||
|
STA theA ; save key
|
|||
|
LDY theY ; get Y
|
|||
|
LDA tblBOARDALLL,Y ; get line address
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDY theX ; get X
|
|||
|
LDA theA ; get sprite
|
|||
|
EOR (ptrBOARD),Y ; same as before?
|
|||
|
BEQ L7F4A ; yes
|
|||
|
LSR fgCHANGE ; no, tell there's a change
|
|||
|
L7F4A LDA theA ; get sprite
|
|||
|
STA (ptrBOARD),Y ; save it
|
|||
|
JSR coutHGR1 ; print sprite
|
|||
|
JMP L7F25 ; loop
|
|||
|
|
|||
|
L7F54 STA theA ; same key
|
|||
|
LDY #$FF
|
|||
|
L7F58 INY
|
|||
|
LDA tblEDITKEYS,Y ; is that a command?
|
|||
|
BEQ L7F6E
|
|||
|
CMP theA ; same as our key?
|
|||
|
BNE L7F58
|
|||
|
TYA ; yes, jump
|
|||
|
ASL
|
|||
|
TAY
|
|||
|
LDA tblEDITCODE+1,Y
|
|||
|
PHA
|
|||
|
LDA tblEDITCODE,Y
|
|||
|
PHA
|
|||
|
RTS
|
|||
|
|
|||
|
L7F6E JSR doBEEP ; beep
|
|||
|
JMP L7F25 ; loop
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* I - MOVE CURSOR UP
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
editUP LDA theY
|
|||
|
BEQ L7F6E
|
|||
|
DEC theY
|
|||
|
BPL L7F25
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* J - MOVE CURSOR LEFT
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
editLEFT LDA theX
|
|||
|
BEQ L7F6E
|
|||
|
DEC theX
|
|||
|
BPL L7F25
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* K - MOVE CURSOR RIGHT
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
editRIGHT LDA theX
|
|||
|
CMP #lvlWIDTH-1
|
|||
|
BCS L7F6E
|
|||
|
INC theX
|
|||
|
BNE L7F25
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* M - MOVE CURSOR DOWN
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
editDOWN LDA theY
|
|||
|
CMP #lvlHEIGHT-1
|
|||
|
BCS L7F6E
|
|||
|
INC theY
|
|||
|
BNE L7F25
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* SAVE THE LEVEL
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
saveLEVEL
|
|||
|
LDA theY ; save parms
|
|||
|
PHA
|
|||
|
LDA theX
|
|||
|
PHA
|
|||
|
|
|||
|
LDA #$01 ; check disk
|
|||
|
JSR readSCORE
|
|||
|
CMP #$00
|
|||
|
BNE L7FAD
|
|||
|
JSR tellNODATADISK
|
|||
|
JMP L7FC5
|
|||
|
|
|||
|
L7FAD CMP #$01
|
|||
|
BNE L7FB7
|
|||
|
JSR tellMASTERDISK
|
|||
|
JMP L7FC5
|
|||
|
|
|||
|
L7FB7 JSR encodeLEVEL ; prepare the level & save it
|
|||
|
PLA
|
|||
|
STA theX
|
|||
|
PLA
|
|||
|
STA theY
|
|||
|
LDA #$01
|
|||
|
STA fgCHANGE
|
|||
|
RTS ; and return
|
|||
|
|
|||
|
L7FC5 LDA #$00
|
|||
|
STA theX
|
|||
|
STA theY
|
|||
|
JMP L7F25
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* CTRL-S - SAVE YOUR GAME
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
editSAVE JSR saveLEVEL
|
|||
|
JMP L7F25
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* CTRL-U - NEXT LEVEL
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
editLOAD LDA intLEVEL
|
|||
|
CMP #maxLEVEL-1 ; 150-1
|
|||
|
L7FD8 BEQ L7F6E
|
|||
|
JSR editSAVECHANGES
|
|||
|
INC intLEVEL
|
|||
|
INC theLEVEL
|
|||
|
JMP editEDITLEVEL
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* CTRL-H - PREVIOUS LEVEL
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
editPREVIOUS
|
|||
|
LDA intLEVEL
|
|||
|
BEQ L7FD8
|
|||
|
JSR editSAVECHANGES
|
|||
|
DEC theLEVEL
|
|||
|
DEC intLEVEL
|
|||
|
JMP editEDITLEVEL
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* CTRL-Q - QUIT GAME GENERATOR
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
editQUIT JSR editSAVECHANGES
|
|||
|
JMP editMAIN
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* WANT TO SAVE CHANGES
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
editSAVECHANGES
|
|||
|
LDA fgCHANGE
|
|||
|
BNE L8075
|
|||
|
JSR clearHGR2
|
|||
|
LDA #>HGR2
|
|||
|
STA activePAGE
|
|||
|
LDA #$00
|
|||
|
STA theX
|
|||
|
STA theY
|
|||
|
JSR printSTRING
|
|||
|
ASC "LEVEL HAS BEEN CHANGED BUT"8D
|
|||
|
ASC "NOT SAVED. DO YOU WISH TO"8D
|
|||
|
ASC "SAVE MODIFIED LEVEL (Y/N) "00
|
|||
|
JSR doBEEP
|
|||
|
STA TXTPAGE2
|
|||
|
L8062 LDA #$00
|
|||
|
JSR L85F3
|
|||
|
STA KBDSTROBE
|
|||
|
CMP #chrN
|
|||
|
BEQ L8075
|
|||
|
CMP #chrY
|
|||
|
BNE L8062
|
|||
|
JSR saveLEVEL
|
|||
|
L8075 STA TXTPAGE1
|
|||
|
LDA #$00
|
|||
|
STA theX
|
|||
|
STA theY
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* CHECK DISK
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
checkDISK LDA #$01 ; load score
|
|||
|
JSR readSCORE
|
|||
|
CMP #$00 ; 00 means disk not identified
|
|||
|
BNE L808E
|
|||
|
JSR tellNODATADISK
|
|||
|
JMP editMAIN
|
|||
|
L808E CMP #$01 ; 01 means master disk
|
|||
|
BNE L8105
|
|||
|
JSR tellMASTERDISK
|
|||
|
JMP editMAIN
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* MASTER DISK FOUND
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
tellMASTERDISK
|
|||
|
JSR clearHGR2
|
|||
|
LDA #>HGR2
|
|||
|
STA activePAGE
|
|||
|
LDA #$00
|
|||
|
STA theX
|
|||
|
STA theY
|
|||
|
JSR printSTRING
|
|||
|
ASC "USER NOT ALLOWED TO"8D
|
|||
|
ASC "MANIPULATE MASTER DISKETTE."00
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* WAIT FOR A KEYPRESS
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
L80D8 JSR printSTRING
|
|||
|
ASC 8D8D
|
|||
|
ASC "HIT A KEY TO CONTINUE "00
|
|||
|
JSR doBEEP
|
|||
|
STA TXTPAGE2
|
|||
|
LDA #$00
|
|||
|
JSR L85F3
|
|||
|
STA KBDSTROBE
|
|||
|
STA TXTPAGE1
|
|||
|
|
|||
|
L8105 RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* LR DATA DISK NOT IDENTIFIED
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
tellNODATADISK
|
|||
|
JSR clearHGR2
|
|||
|
LDA #>HGR2
|
|||
|
STA activePAGE
|
|||
|
LDA #$00
|
|||
|
STA theX
|
|||
|
STA theY
|
|||
|
JSR printSTRING
|
|||
|
ASC "DISKETTE IN DRIVE IS NOT A"8D
|
|||
|
ASC "LODE RUNNER DATA DISK."00
|
|||
|
JMP L80D8
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* BLINK AT XY
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
blinkATXY
|
|||
|
LDY theY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDY theX
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
JSR blinkSPRITE
|
|||
|
STA KBDSTROBE
|
|||
|
RTS
|
|||
|
|
|||
|
tblEDITKEYS ASC "JIKM"
|
|||
|
HEX 9395889100
|
|||
|
|
|||
|
tblEDITCODE DA editLEFT-1 ; J move left
|
|||
|
DA editUP-1 ; I move up
|
|||
|
DA editRIGHT-1 ; K move right
|
|||
|
DA editDOWN-1 ; M move down
|
|||
|
DA editSAVE-1 ; CTRL-S to save your game
|
|||
|
DA editLOAD-1 ; CTRL-U to load next level
|
|||
|
DA editPREVIOUS-1 ; CTRL-H to load previous level
|
|||
|
DA editQUIT-1 ; CTRL-Q to quit game generator
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* INPUT LEVEL NUMBER
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
inputLEVEL
|
|||
|
LDY intLEVEL
|
|||
|
INY
|
|||
|
TYA
|
|||
|
JSR hex2dec
|
|||
|
LDA theX
|
|||
|
STA L824E
|
|||
|
LDY #$00
|
|||
|
L8189 LDA |$0089,Y
|
|||
|
STY L824D
|
|||
|
JSR outputCHAR
|
|||
|
LDY L824D
|
|||
|
INY
|
|||
|
CPY #$03
|
|||
|
BCC L8189
|
|||
|
LDA L824E
|
|||
|
STA theX
|
|||
|
LDY #$00
|
|||
|
STY L824D
|
|||
|
L81A4 LDX L824D
|
|||
|
LDA theCENTAINE,X
|
|||
|
CLC
|
|||
|
ADC #spr0 ; spr0
|
|||
|
JSR blinkSPRITE
|
|||
|
STA KBDSTROBE
|
|||
|
CMP #chrRET ; return
|
|||
|
BEQ L820D
|
|||
|
CMP #chrLA ; left arrow
|
|||
|
BNE L81C7
|
|||
|
LDX L824D
|
|||
|
BEQ L8207
|
|||
|
DEC L824D
|
|||
|
DEC theX
|
|||
|
JMP L81A4
|
|||
|
|
|||
|
L81C7 CMP #chrRA ; right arrow
|
|||
|
BNE L81DA
|
|||
|
LDX L824D
|
|||
|
CPX #$02
|
|||
|
BEQ L8207
|
|||
|
INC theX
|
|||
|
INC L824D
|
|||
|
JMP L81A4
|
|||
|
|
|||
|
L81DA CMP #chrESC ; esc
|
|||
|
BNE L81E1
|
|||
|
JMP editLOOP
|
|||
|
|
|||
|
L81E1 CMP #chrZERO ; 0
|
|||
|
BCC L8207
|
|||
|
CMP #chrNINE+1 ; 9+1
|
|||
|
BCS L8207
|
|||
|
SEC
|
|||
|
SBC #chrZERO
|
|||
|
LDY L824D
|
|||
|
STA |$0089,Y
|
|||
|
JSR outputCHAR
|
|||
|
|
|||
|
INC L824D
|
|||
|
LDA L824D
|
|||
|
CMP #$03
|
|||
|
BCC L81A4
|
|||
|
DEC L824D
|
|||
|
DEC theX
|
|||
|
JMP L81A4
|
|||
|
|
|||
|
L8207 JSR doBEEP
|
|||
|
JMP L81A4
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* TRANSFORM A ASC NUMBER IN HEX
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
L820D LDA L824E
|
|||
|
CLC
|
|||
|
ADC #$03
|
|||
|
STA theX
|
|||
|
LDA #$00
|
|||
|
LDX theCENTAINE
|
|||
|
BEQ L8223
|
|||
|
CLC
|
|||
|
L821C ADC #100
|
|||
|
BCS L823C
|
|||
|
DEX
|
|||
|
BNE L821C
|
|||
|
L8223 LDX theDIZAINE
|
|||
|
BEQ L822F
|
|||
|
CLC
|
|||
|
L8228 ADC #10
|
|||
|
BCS L823C
|
|||
|
DEX
|
|||
|
BNE L8228
|
|||
|
L822F CLC
|
|||
|
ADC theUNITE
|
|||
|
BCS L823C
|
|||
|
STA theLEVEL
|
|||
|
TAY
|
|||
|
DEY
|
|||
|
STY intLEVEL ; and make it our level
|
|||
|
CPY #maxLEVEL
|
|||
|
L823C RTS
|
|||
|
|
|||
|
editWAITKEY LDA #sprEMPTY
|
|||
|
JSR blinkSPRITE
|
|||
|
STA KBDSTROBE
|
|||
|
CMP #$9B ; escape
|
|||
|
BNE L824C
|
|||
|
JMP editLOOP
|
|||
|
L824C RTS
|
|||
|
L824D RTS
|
|||
|
|
|||
|
L824E DB $85
|
|||
|
L824F DB $0F
|
|||
|
L8250 DB $60
|
|||
|
|
|||
|
L8251 HEX 02110F040000FE000000000000000000
|
|||
|
HEX 00000000000000000000000000000000
|
|||
|
HEX 000000000000007A0000000000000000
|
|||
|
HEX FFFF0000230F0001
|
|||
|
L8289 HEX 220F8888888888888888CCCFC4C5A0D2
|
|||
|
HEX D5CECEC5D2A0C4C1D4C1A0C4C9D3CBA0
|
|||
|
HEX A0
|
|||
|
|
|||
|
*---------------------------------------
|
|||
|
* PRINT CHAR
|
|||
|
*---------------------------------------
|
|||
|
|
|||
|
coutHGR1 STA theA ; char in $1E
|
|||
|
LDA #>HGR1 ; print HGR1
|
|||
|
BNE L82B4
|
|||
|
|
|||
|
coutHGR2 STA theA ; char in $1E
|
|||
|
LDA #>HGR2 ; print HGR2
|
|||
|
|
|||
|
L82B4 STA hgrPAGE ; page in $1F
|
|||
|
LDY theY ; take Y
|
|||
|
JSR getXY
|
|||
|
STY theYSCREEN ; make it Y screen
|
|||
|
LDX theX ; take X
|
|||
|
JSR getBYBI
|
|||
|
STA theXSCREEN ; make it X screen
|
|||
|
STX sprTABLE
|
|||
|
LDA tblMASK1,X
|
|||
|
STA theMASK1
|
|||
|
LDA tblMASK2,X
|
|||
|
STA theMASK2
|
|||
|
JSR getSPRITEDATA
|
|||
|
LDA #sprHEIGHT
|
|||
|
STA nbLINES
|
|||
|
|
|||
|
LDX #$00
|
|||
|
LDA sprTABLE ; derniere table de sprite?
|
|||
|
CMP #$05
|
|||
|
BCS L8301
|
|||
|
|
|||
|
*--- sprite de 2 de large
|
|||
|
|
|||
|
L82DF LDY theYSCREEN
|
|||
|
JSR setHGRPOINTER
|
|||
|
LDY theXSCREEN
|
|||
|
LDA (ptrHGR1),Y ; 1
|
|||
|
AND theMASK1
|
|||
|
ORA sprDATA,X
|
|||
|
STA (ptrHGR1),Y
|
|||
|
INX
|
|||
|
INY
|
|||
|
LDA (ptrHGR1),Y ; 2
|
|||
|
AND theMASK2
|
|||
|
ORA sprDATA,X
|
|||
|
STA (ptrHGR1),Y
|
|||
|
INX
|
|||
|
INX
|
|||
|
INC theYSCREEN
|
|||
|
DEC nbLINES
|
|||
|
BNE L82DF
|
|||
|
RTS
|
|||
|
|
|||
|
*--- sprite de 3 de large
|
|||
|
|
|||
|
L8301 LDY theYSCREEN
|
|||
|
JSR setHGRPOINTER
|
|||
|
LDY theXSCREEN
|
|||
|
LDA (ptrHGR1),Y ; 1
|
|||
|
AND theMASK1
|
|||
|
ORA sprDATA,X
|
|||
|
STA (ptrHGR1),Y
|
|||
|
INX
|
|||
|
INY
|
|||
|
LDA sprDATA,X ; 2
|
|||
|
STA (ptrHGR1),Y
|
|||
|
INX
|
|||
|
INY
|
|||
|
LDA (ptrHGR1),Y ; 3
|
|||
|
AND theMASK2
|
|||
|
ORA sprDATA,X
|
|||
|
STA (ptrHGR1),Y
|
|||
|
INX
|
|||
|
INC theYSCREEN
|
|||
|
DEC nbLINES
|
|||
|
BNE L8301
|
|||
|
RTS
|
|||
|
|
|||
|
tblMASK1 HEX 000103070F1F3F ; mask1
|
|||
|
tblMASK2 HEX F8F0E0C080FEFC ; mask2
|
|||
|
|
|||
|
*---------------------------------------
|
|||
|
* DRAW SPRITE AT X,Y
|
|||
|
*---------------------------------------
|
|||
|
* draw a sprite at real HGR X,Y (eg. 175,111)
|
|||
|
|
|||
|
drawSPRITEXY
|
|||
|
STY theYSCREEN
|
|||
|
STA theA
|
|||
|
JSR getXBYBI
|
|||
|
STA theXSCREEN
|
|||
|
STX sprTABLE
|
|||
|
JSR getSPRITEDATA
|
|||
|
LDX #sprHEIGHT ; nb lignes
|
|||
|
STX nbLINES
|
|||
|
LDX #$00
|
|||
|
LDA sprTABLE
|
|||
|
CMP #$05
|
|||
|
BCS L8376
|
|||
|
|
|||
|
*--- sprite de 2 de large
|
|||
|
|
|||
|
L8350 LDY theYSCREEN
|
|||
|
JSR setHGRPOINTERS
|
|||
|
LDY theXSCREEN
|
|||
|
LDA sprDATA,X
|
|||
|
EOR #$7F
|
|||
|
AND (ptrHGR1),Y
|
|||
|
ORA (ptrHGR2),Y
|
|||
|
STA (ptrHGR1),Y
|
|||
|
INX
|
|||
|
INY
|
|||
|
LDA sprDATA,X
|
|||
|
EOR #$7F
|
|||
|
AND (ptrHGR1),Y
|
|||
|
ORA (ptrHGR2),Y
|
|||
|
STA (ptrHGR1),Y
|
|||
|
INX
|
|||
|
INX
|
|||
|
INC theYSCREEN
|
|||
|
DEC nbLINES
|
|||
|
BNE L8350
|
|||
|
RTS
|
|||
|
|
|||
|
*--- sprite de 3 de large
|
|||
|
|
|||
|
L8376 LDY theYSCREEN
|
|||
|
JSR setHGRPOINTERS
|
|||
|
LDY theXSCREEN
|
|||
|
LDA sprDATA,X
|
|||
|
EOR #$7F
|
|||
|
AND (ptrHGR1),Y
|
|||
|
ORA (ptrHGR2),Y
|
|||
|
STA (ptrHGR1),Y
|
|||
|
INX
|
|||
|
INY
|
|||
|
LDA sprDATA,X
|
|||
|
EOR #$7F
|
|||
|
AND (ptrHGR1),Y
|
|||
|
ORA (ptrHGR2),Y
|
|||
|
STA (ptrHGR1),Y
|
|||
|
INX
|
|||
|
INY
|
|||
|
LDA sprDATA,X
|
|||
|
EOR #$7F
|
|||
|
AND (ptrHGR1),Y
|
|||
|
ORA (ptrHGR2),Y
|
|||
|
STA (ptrHGR1),Y
|
|||
|
INX
|
|||
|
INC theYSCREEN
|
|||
|
DEC nbLINES
|
|||
|
BNE L8376
|
|||
|
RTS
|
|||
|
|
|||
|
*---------------------------------------
|
|||
|
* DRAW SPRITE AT X,Y WITH COLLISION
|
|||
|
*---------------------------------------
|
|||
|
* $52: 00 if no collision (empty background)
|
|||
|
* <>00 if collision
|
|||
|
|
|||
|
drawSPRXYCOLLISION
|
|||
|
STY theYSCREEN
|
|||
|
STA theA
|
|||
|
JSR getXBYBI
|
|||
|
STA theXSCREEN
|
|||
|
STX sprTABLE
|
|||
|
JSR getSPRITEDATA
|
|||
|
LDA #sprHEIGHT
|
|||
|
STA nbLINES
|
|||
|
LDX #$00
|
|||
|
STX fgCOLLISION
|
|||
|
LDA sprTABLE
|
|||
|
CMP #$05
|
|||
|
BCS L83F5
|
|||
|
|
|||
|
*--- sprite de 2 de large
|
|||
|
|
|||
|
L83C3 LDY theYSCREEN
|
|||
|
JSR setHGRPOINTERS
|
|||
|
LDY theXSCREEN
|
|||
|
LDA (ptrHGR1),Y
|
|||
|
EOR (ptrHGR2),Y
|
|||
|
AND sprDATA,X
|
|||
|
ORA fgCOLLISION
|
|||
|
STA fgCOLLISION
|
|||
|
LDA sprDATA,X
|
|||
|
ORA (ptrHGR1),Y
|
|||
|
STA (ptrHGR1),Y
|
|||
|
INX
|
|||
|
INY
|
|||
|
LDA (ptrHGR1),Y
|
|||
|
EOR (ptrHGR2),Y
|
|||
|
AND sprDATA,X
|
|||
|
ORA fgCOLLISION
|
|||
|
STA fgCOLLISION
|
|||
|
LDA sprDATA,X
|
|||
|
ORA (ptrHGR1),Y
|
|||
|
STA (ptrHGR1),Y
|
|||
|
INX
|
|||
|
INX
|
|||
|
INC theYSCREEN
|
|||
|
DEC nbLINES
|
|||
|
BNE L83C3
|
|||
|
RTS
|
|||
|
|
|||
|
*--- sprite de 3 de large
|
|||
|
|
|||
|
L83F5 LDY theYSCREEN
|
|||
|
JSR setHGRPOINTERS
|
|||
|
LDY theXSCREEN
|
|||
|
LDA (ptrHGR1),Y
|
|||
|
EOR (ptrHGR2),Y
|
|||
|
AND sprDATA,X
|
|||
|
ORA fgCOLLISION
|
|||
|
STA fgCOLLISION
|
|||
|
LDA sprDATA,X
|
|||
|
ORA (ptrHGR1),Y
|
|||
|
STA (ptrHGR1),Y
|
|||
|
INX
|
|||
|
INY
|
|||
|
LDA (ptrHGR1),Y
|
|||
|
EOR (ptrHGR2),Y
|
|||
|
AND sprDATA,X
|
|||
|
ORA fgCOLLISION
|
|||
|
STA fgCOLLISION
|
|||
|
LDA sprDATA,X
|
|||
|
ORA (ptrHGR1),Y
|
|||
|
STA (ptrHGR1),Y
|
|||
|
INX
|
|||
|
INY
|
|||
|
LDA (ptrHGR1),Y
|
|||
|
EOR (ptrHGR2),Y
|
|||
|
AND sprDATA,X
|
|||
|
ORA fgCOLLISION
|
|||
|
STA fgCOLLISION
|
|||
|
LDA sprDATA,X
|
|||
|
ORA (ptrHGR1),Y
|
|||
|
STA (ptrHGR1),Y
|
|||
|
INX
|
|||
|
INC theYSCREEN
|
|||
|
DEC nbLINES
|
|||
|
BNE L83F5
|
|||
|
RTS
|
|||
|
|
|||
|
*---------------------------------------
|
|||
|
* GET SPRITE DATA
|
|||
|
*---------------------------------------
|
|||
|
* Move sprite data at $df..$ff
|
|||
|
|
|||
|
getSPRITEDATA
|
|||
|
LDA #sprHEIGHT ; char height
|
|||
|
STA nbLINES
|
|||
|
|
|||
|
LDA #<tblOFFSPR ; pointer to index of sprite in each table
|
|||
|
STA ptrDATA
|
|||
|
LDA #>tblOFFSPR
|
|||
|
STA ptrDATA+1
|
|||
|
|
|||
|
LDA tblPTRSPR,X ; one of the six tables
|
|||
|
STA L845A+2
|
|||
|
STA L8466+2
|
|||
|
STA L848B+2
|
|||
|
STA L8497+2
|
|||
|
|
|||
|
LDX #$00
|
|||
|
L8455 LDY theA
|
|||
|
LDA (ptrDATA),Y
|
|||
|
TAY
|
|||
|
L845A LDA LA000,Y ; a
|
|||
|
STA L846F+1
|
|||
|
CLC
|
|||
|
ADC #$01
|
|||
|
STA L8474+1
|
|||
|
L8466 LDA LA080,Y ; a+1
|
|||
|
STA L846F+2
|
|||
|
STA L8474+2
|
|||
|
L846F LDA LA000 ; b
|
|||
|
STA sprDATA,X
|
|||
|
L8474 LDA LA000 ; b+1
|
|||
|
STA $E0,X
|
|||
|
|
|||
|
LDA ptrDATA ; next line
|
|||
|
CLC
|
|||
|
ADC #$68
|
|||
|
STA ptrDATA
|
|||
|
LDA ptrDATA+1
|
|||
|
ADC #$00
|
|||
|
STA ptrDATA+1
|
|||
|
|
|||
|
LDY theA
|
|||
|
LDA (ptrDATA),Y
|
|||
|
TAY
|
|||
|
L848B LDA LA000,Y ; c
|
|||
|
STA L84A0+1
|
|||
|
CLC
|
|||
|
ADC #$01
|
|||
|
STA L84A7+1
|
|||
|
L8497 LDA LA080,Y ; c+1
|
|||
|
STA L84A0+2
|
|||
|
STA L84A7+2
|
|||
|
L84A0 LDA LA000 ; d
|
|||
|
ORA $E0,X
|
|||
|
STA $E0,X
|
|||
|
L84A7 LDA LA000 ; d+1
|
|||
|
STA $E1,X
|
|||
|
|
|||
|
LDA ptrDATA ; next data
|
|||
|
CLC
|
|||
|
ADC #$68 ; b/c we have 68 sprites
|
|||
|
STA ptrDATA
|
|||
|
LDA ptrDATA+1
|
|||
|
ADC #$00
|
|||
|
STA ptrDATA+1
|
|||
|
INX
|
|||
|
INX
|
|||
|
INX
|
|||
|
DEC nbLINES
|
|||
|
BNE L8455
|
|||
|
RTS
|
|||
|
|
|||
|
tblPTRSPR DB >LA200 ; The six tables of sprites
|
|||
|
DB >LA300
|
|||
|
DB >LA400
|
|||
|
DB >LA500
|
|||
|
DB >LA600
|
|||
|
DB >LA700
|
|||
|
DB >LA800
|
|||
|
|
|||
|
*---------------------------------------
|
|||
|
* CHECK HIGH SCORE
|
|||
|
*---------------------------------------
|
|||
|
|
|||
|
checkHIGHSCORE
|
|||
|
LDA fgGOODSTART
|
|||
|
BEQ L8514
|
|||
|
LDA theSCORE
|
|||
|
ORA theSCORE+1
|
|||
|
ORA theSCORE+2
|
|||
|
ORA theSCORE+3
|
|||
|
BEQ L8514
|
|||
|
LDA #$01
|
|||
|
JSR readSCORE
|
|||
|
BEQ L8514
|
|||
|
LDY #$01 ; 1<>re entr<74>e
|
|||
|
L84DF LDX scoreoffset,Y
|
|||
|
LDA theLEVEL
|
|||
|
CMP scorebuf+$03,X
|
|||
|
BCC L850F
|
|||
|
BNE L8515
|
|||
|
LDA theSCORE+3
|
|||
|
CMP scorebuf+$04,X
|
|||
|
BCC L850F
|
|||
|
BNE L8515
|
|||
|
LDA theSCORE+2
|
|||
|
CMP scorebuf+$05,X
|
|||
|
BCC L850F
|
|||
|
BNE L8515
|
|||
|
LDA theSCORE+1
|
|||
|
CMP scorebuf+$06,X
|
|||
|
BCC L850F
|
|||
|
BNE L8515
|
|||
|
LDA theSCORE
|
|||
|
CMP scorebuf+$07,X
|
|||
|
BCC L850F
|
|||
|
BNE L8515
|
|||
|
L850F INY
|
|||
|
CPY #$0B ; derni<6E>re entr<74>e
|
|||
|
BCC L84DF
|
|||
|
L8514 RTS
|
|||
|
|
|||
|
L8515 CPY #$0A ; d<>cale les scores vers le bas
|
|||
|
BEQ L8536
|
|||
|
STY tempY1
|
|||
|
LDY #$09
|
|||
|
L851D LDX scoreoffset,Y
|
|||
|
LDA #$08
|
|||
|
STA nbLINES
|
|||
|
L8524 LDA scorebuf,X
|
|||
|
STA scorebuf+$08,X
|
|||
|
INX
|
|||
|
DEC nbLINES
|
|||
|
BNE L8524
|
|||
|
CPY tempY1
|
|||
|
BEQ L8536
|
|||
|
DEY
|
|||
|
BNE L851D
|
|||
|
|
|||
|
L8536 LDX scoreoffset,Y ; permet la saisie des initiales
|
|||
|
LDA #chrSPC
|
|||
|
STA scorebuf,X
|
|||
|
STA scorebuf+$01,X
|
|||
|
STA scorebuf+$02,X
|
|||
|
LDA theLEVEL
|
|||
|
STA scorebuf+$03,X
|
|||
|
LDA theSCORE+3
|
|||
|
STA scorebuf+$04,X
|
|||
|
LDA theSCORE+2
|
|||
|
STA scorebuf+$05,X
|
|||
|
LDA theSCORE+1
|
|||
|
STA scorebuf+$06,X
|
|||
|
LDA theSCORE
|
|||
|
STA scorebuf+$07,X
|
|||
|
STY $69
|
|||
|
LDA scoreoffset,Y
|
|||
|
STA L8582+1
|
|||
|
STA L85C9+1
|
|||
|
JSR showALLSCORES
|
|||
|
LDA #>HGR2
|
|||
|
STA activePAGE
|
|||
|
LDA $69
|
|||
|
CLC
|
|||
|
ADC #$04
|
|||
|
STA theY
|
|||
|
LDA #$07
|
|||
|
STA theX
|
|||
|
LDX #$00
|
|||
|
STX L824D
|
|||
|
L857F LDX L824D
|
|||
|
L8582 LDA scorebuf,X
|
|||
|
JSR filterCHAR
|
|||
|
JSR L85F3
|
|||
|
STA KBDSTROBE
|
|||
|
CMP #chrRET
|
|||
|
BEQ L85E7
|
|||
|
CMP #chrLA
|
|||
|
BNE L85A3
|
|||
|
LDX L824D
|
|||
|
BEQ L85E1
|
|||
|
DEC L824D
|
|||
|
DEC theX
|
|||
|
JMP L857F
|
|||
|
|
|||
|
L85A3 CMP #chrRA
|
|||
|
BNE L85B6
|
|||
|
LDX L824D
|
|||
|
CPX #$02
|
|||
|
BEQ L85E1
|
|||
|
INC theX
|
|||
|
INC L824D
|
|||
|
JMP L857F
|
|||
|
|
|||
|
L85B6 CMP #chrDOT
|
|||
|
BEQ L85C6
|
|||
|
CMP #chrSPC
|
|||
|
BEQ L85C6
|
|||
|
CMP #chrA
|
|||
|
BCC L85E1
|
|||
|
CMP #chrZ+1
|
|||
|
BCS L85E1
|
|||
|
L85C6 LDY L824D
|
|||
|
L85C9 STA scorebuf,Y
|
|||
|
JSR printCHAR
|
|||
|
INC L824D
|
|||
|
LDA L824D
|
|||
|
CMP #$03 ; max nb chars
|
|||
|
BCC L857F
|
|||
|
DEC L824D
|
|||
|
DEC theX
|
|||
|
JMP L857F
|
|||
|
|
|||
|
L85E1 JSR doBEEP
|
|||
|
JMP L857F
|
|||
|
|
|||
|
L85E7 LDA #>HGR1
|
|||
|
STA activePAGE
|
|||
|
LDA #$02
|
|||
|
JSR readSCORE
|
|||
|
JMP L618E
|
|||
|
|
|||
|
L85F3 STA bsDATA
|
|||
|
L85F6 LDA #$68
|
|||
|
STA counter
|
|||
|
LDA bsDATA
|
|||
|
BNE L8601
|
|||
|
LDA #sprCURSOR
|
|||
|
L8601 JSR coutHGR2
|
|||
|
L8604 LDA KBD
|
|||
|
BMI L8628
|
|||
|
JSR checkMOVEMENT
|
|||
|
DEC counter
|
|||
|
BNE L8604
|
|||
|
LDA #sprEMPTY
|
|||
|
JSR coutHGR2
|
|||
|
LDA #$68
|
|||
|
STA counter
|
|||
|
L8619 LDA KBD
|
|||
|
BMI L8628
|
|||
|
JSR checkMOVEMENT
|
|||
|
DEC counter
|
|||
|
BNE L8619
|
|||
|
JMP L85F6
|
|||
|
|
|||
|
L8628 PHA
|
|||
|
LDA bsDATA
|
|||
|
JSR coutHGR2
|
|||
|
PLA
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* SHOW INVISIBLE LADDERS
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
showINVISIBLELADDERS
|
|||
|
LDA #$00
|
|||
|
STA tblLADDERIX
|
|||
|
LDX idxLADDERI
|
|||
|
STX L869E
|
|||
|
L863B LDX L869E
|
|||
|
BEQ L8696
|
|||
|
LDA tblLADDERIX,X
|
|||
|
BMI L8690
|
|||
|
STA theX
|
|||
|
LDA tblLADDERIY,X
|
|||
|
STA theY
|
|||
|
TAY
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
LDY theX
|
|||
|
LDA (ptrBBACK),Y
|
|||
|
BNE L868B
|
|||
|
LDA #sprLADDER
|
|||
|
STA (ptrBBACK),Y
|
|||
|
LDA (ptrBOARD),Y
|
|||
|
BNE L8670
|
|||
|
LDA #sprLADDER
|
|||
|
STA (ptrBOARD),Y
|
|||
|
L8670 LDA #sprLADDER
|
|||
|
JSR coutHGR2
|
|||
|
LDX theX
|
|||
|
LDY theY
|
|||
|
JSR getXY
|
|||
|
LDA #sprLADDER
|
|||
|
JSR drawSPRXYCOLLISION
|
|||
|
LDX L869E
|
|||
|
LDA #$FF
|
|||
|
STA tblLADDERIX,X
|
|||
|
BMI L8690
|
|||
|
L868B LDA #$01
|
|||
|
STA tblLADDERIX
|
|||
|
L8690 DEC L869E
|
|||
|
JMP L863B
|
|||
|
|
|||
|
L8696 LDA tblLADDERIX
|
|||
|
BNE L869D
|
|||
|
DEC nbCHEST
|
|||
|
L869D RTS
|
|||
|
|
|||
|
L869E DB $00
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* WAIT KEY UP
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
waitKEYUP
|
|||
|
STA KBDSTROBE
|
|||
|
LDA KBD
|
|||
|
BMI waitKEYUP
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* WAIT KEY DOWN
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
waitKEYDOWN
|
|||
|
LDA KBD
|
|||
|
BPL waitKEYDOWN
|
|||
|
STA KBDSTROBE
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* WAIT
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
doWAIT LDA L86BE,X
|
|||
|
TAX
|
|||
|
doWAIT1 LDY #$B4
|
|||
|
]lp DEY
|
|||
|
BNE ]lp
|
|||
|
DEX
|
|||
|
BNE doWAIT1
|
|||
|
RTS
|
|||
|
|
|||
|
L86BE HEX 020406080A0C0E10121416181A1C1E20
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* The CTRL-G of Lode Runner
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
doBEEP LDY #$C0
|
|||
|
L86D0 LDX #$80
|
|||
|
L86D2 DEX
|
|||
|
BNE L86D2
|
|||
|
LDA fgSOUND
|
|||
|
BEQ L86DC
|
|||
|
LDA SPKR
|
|||
|
L86DC DEY
|
|||
|
BNE L86D0
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* PRINT STRING
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
printSTRING
|
|||
|
PLA
|
|||
|
STA ptrSTRSND
|
|||
|
PLA
|
|||
|
STA ptrSTRSND+1
|
|||
|
BNE L86F1
|
|||
|
L86E8 LDY #$00
|
|||
|
LDA (ptrSTRSND),Y
|
|||
|
BEQ L86F9
|
|||
|
JSR printCHAR
|
|||
|
L86F1 INC ptrSTRSND
|
|||
|
BNE L86E8
|
|||
|
INC ptrSTRSND+1
|
|||
|
BNE L86E8
|
|||
|
L86F9 LDA ptrSTRSND+1
|
|||
|
PHA
|
|||
|
LDA ptrSTRSND
|
|||
|
PHA
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* BLINK SPRITE
|
|||
|
*-----------------------------------
|
|||
|
* sprite is in A
|
|||
|
|
|||
|
blinkSPRITE
|
|||
|
STA bsDATA
|
|||
|
L8703 LDA #$68
|
|||
|
STA counter
|
|||
|
LDA #sprEMPTY
|
|||
|
LDX bsDATA
|
|||
|
BNE L8710
|
|||
|
LDA #sprCURSOR ; cursor sprite
|
|||
|
L8710 JSR coutHGR1 ; output empty
|
|||
|
L8713 LDA KBD ; key pressed?
|
|||
|
BMI L873C ; yes
|
|||
|
JSR checkMOVEMENT ; buttons pressed?
|
|||
|
BCS L873C ; yes
|
|||
|
DEC counter
|
|||
|
BNE L8713
|
|||
|
LDA bsDATA ; output sprite
|
|||
|
JSR coutHGR1
|
|||
|
LDA #$68 ; redo the wait
|
|||
|
STA counter
|
|||
|
L872B LDA KBD
|
|||
|
BMI L873C
|
|||
|
JSR checkMOVEMENT
|
|||
|
BCS L873C
|
|||
|
DEC counter
|
|||
|
BNE L872B
|
|||
|
JMP L8703
|
|||
|
|
|||
|
L873C PHA ; exit with
|
|||
|
LDA bsDATA ; sprite
|
|||
|
JSR coutHGR1
|
|||
|
PLA
|
|||
|
RTS
|
|||
|
|
|||
|
bsDATA DB ptrBOARD
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* READ JOYSTICK
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
readJOYSTICK
|
|||
|
LDA #$00
|
|||
|
STA theJOYX
|
|||
|
STA theJOYY
|
|||
|
LDA PTRIG
|
|||
|
L874F LDX #$01
|
|||
|
L8751 LDA PADDL0,X
|
|||
|
BPL L8769
|
|||
|
INC theJOYX,X
|
|||
|
L8758 DEX
|
|||
|
BPL L8751
|
|||
|
LDA PADDL0
|
|||
|
ORA PADDL1
|
|||
|
BPL L876C
|
|||
|
LDA theJOYX
|
|||
|
ORA theJOYY
|
|||
|
BPL L874F
|
|||
|
L8769 NOP
|
|||
|
BPL L8758
|
|||
|
L876C RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* CHECK MOVEMENT
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
checkMOVEMENT
|
|||
|
LDA fgINPUT
|
|||
|
CMP #chrK
|
|||
|
BEQ L8798
|
|||
|
JSR readJOYSTICK
|
|||
|
LDA theJOYX
|
|||
|
CMP #minJOY
|
|||
|
BCC L8796
|
|||
|
CMP #maxJOY
|
|||
|
BCS L8796
|
|||
|
LDA theJOYY
|
|||
|
CMP #minJOY
|
|||
|
BCC L8796
|
|||
|
CMP #maxJOY
|
|||
|
BCS L8796
|
|||
|
LDA BUTN1
|
|||
|
BMI L8796
|
|||
|
LDA BUTN0
|
|||
|
BMI L8796
|
|||
|
CLC
|
|||
|
RTS
|
|||
|
L8796 SEC
|
|||
|
RTS
|
|||
|
|
|||
|
L8798 LDX #$02 ; wait routine
|
|||
|
L879A DEY ; to compensate
|
|||
|
BNE L879A ; the skipped code above
|
|||
|
DEX
|
|||
|
BNE L879A
|
|||
|
CLC
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* CHECK JOYSTICK
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
checkJOYSTICK
|
|||
|
LDA PTRIG
|
|||
|
LDX #$10
|
|||
|
L87A7 LDA PADDL0
|
|||
|
ORA PADDL1
|
|||
|
BPL L87B9
|
|||
|
DEY
|
|||
|
BNE L87A7
|
|||
|
DEX
|
|||
|
BNE L87A7
|
|||
|
LDA #chrK
|
|||
|
STA fgINPUT
|
|||
|
L87B9 RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* PLAY A SOUND
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
playSOUND STA ptrDATA
|
|||
|
STX $0B
|
|||
|
L87BE LDA fgSOUND
|
|||
|
BEQ L87C5
|
|||
|
LDA SPKR
|
|||
|
L87C5 DEY
|
|||
|
BNE L87CC
|
|||
|
DEC $0B
|
|||
|
BEQ L87D4
|
|||
|
L87CC DEX
|
|||
|
BNE L87C5
|
|||
|
LDX ptrDATA
|
|||
|
JMP L87BE
|
|||
|
L87D4 RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* GET NOTE
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
getNOTE INC idxNOTE
|
|||
|
LDY idxNOTE
|
|||
|
STA sndNOTE,Y
|
|||
|
TXA
|
|||
|
STA sndDURATION,Y
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* PREPARE SOUND
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
prepareMELODY
|
|||
|
PLA
|
|||
|
STA ptrSTRSND
|
|||
|
PLA
|
|||
|
STA ptrSTRSND+1
|
|||
|
BNE L8802
|
|||
|
L87E9 LDY #$00 ; move sound
|
|||
|
LDA (ptrSTRSND),Y ; to the two
|
|||
|
BEQ L880A ; buffers
|
|||
|
INC idxNOTE
|
|||
|
LDX idxNOTE
|
|||
|
STA sndDURATION,X
|
|||
|
INY
|
|||
|
LDA (ptrSTRSND),Y
|
|||
|
STA sndNOTE,X
|
|||
|
INC ptrSTRSND
|
|||
|
BNE L8802
|
|||
|
INC ptrSTRSND+1
|
|||
|
L8802 INC ptrSTRSND
|
|||
|
BNE L87E9
|
|||
|
INC ptrSTRSND+1
|
|||
|
BNE L87E9
|
|||
|
L880A LDA ptrSTRSND+1
|
|||
|
PHA
|
|||
|
LDA ptrSTRSND
|
|||
|
PHA
|
|||
|
RTS
|
|||
|
|
|||
|
*-----------------------------------
|
|||
|
* PLAY MELODY
|
|||
|
*-----------------------------------
|
|||
|
|
|||
|
playMELODY LDY idxNOTE
|
|||
|
BEQ L8832
|
|||
|
LDA sndNOTE,Y
|
|||
|
LDX sndDURATION,Y
|
|||
|
JSR playSOUND ; play note
|
|||
|
LDY idxNOTE
|
|||
|
DEC idxNOTE
|
|||
|
LDA theSPEED
|
|||
|
SEC
|
|||
|
SBC sndDURATION,Y
|
|||
|
BEQ L8830
|
|||
|
BCC L8830
|
|||
|
TAX
|
|||
|
JSR doWAIT1 ; wait
|
|||
|
L8830 SEC
|
|||
|
RTS
|
|||
|
|
|||
|
L8832 LDA fgHEROFELL ; is the hero in a hole?
|
|||
|
BNE L8844 ; yes
|
|||
|
LDA fgSPEED
|
|||
|
LSR
|
|||
|
INC fgSPEED
|
|||
|
LDX theSPEED
|
|||
|
INX
|
|||
|
INX
|
|||
|
JSR playSOUND
|
|||
|
CLC
|
|||
|
RTS
|
|||
|
|
|||
|
L8844 LDX theSPEED ; wait....
|
|||
|
JSR doWAIT
|
|||
|
CLC
|
|||
|
RTS
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* SET BOARD LINE POINTERS
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
setBOARDLINEPOINTERS
|
|||
|
LDA tblBOARDALLL,Y
|
|||
|
STA ptrBOARD
|
|||
|
STA ptrBBACK
|
|||
|
LDA tblBOARDALLH,Y
|
|||
|
STA ptrBOARD+1
|
|||
|
LDA tblBOARDBACKH,Y
|
|||
|
STA ptrBBACK+1
|
|||
|
RTS
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* FROM A Y IN TEXT TO A Y IN HGR
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
getXY LDA ytable,Y ; in: board X/Y
|
|||
|
PHA ; out: hgr X/Y
|
|||
|
LDA xtable,X
|
|||
|
TAX
|
|||
|
PLA
|
|||
|
TAY
|
|||
|
RTS
|
|||
|
|
|||
|
getBYBI LDA bytable,X
|
|||
|
PHA
|
|||
|
LDA bitable,X
|
|||
|
TAX
|
|||
|
PLA
|
|||
|
RTS
|
|||
|
|
|||
|
getXBYBI LDA xbytable,X
|
|||
|
PHA
|
|||
|
LDA xbitable,X
|
|||
|
TAX
|
|||
|
PLA
|
|||
|
RTS
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* CALCULATE HGR Y-COORD
|
|||
|
*-------------------------------
|
|||
|
* on entry:
|
|||
|
* X is a sprite step
|
|||
|
* Y is a board index
|
|||
|
* on exit:
|
|||
|
* X is garbage
|
|||
|
* Y is the HGR coordinate
|
|||
|
|
|||
|
calcHGRY TXA ; in: board X/Y
|
|||
|
PHA ; out: hgr X / diff Y
|
|||
|
JSR getXY
|
|||
|
PLA
|
|||
|
TAX
|
|||
|
TYA
|
|||
|
CLC
|
|||
|
ADC tblDELTAY,X
|
|||
|
TAY
|
|||
|
RTS
|
|||
|
|
|||
|
tblDELTAY HEX FBFD000204 ; -5, -3, 0, 2, 4
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* CALCULATE HGR X-COORD
|
|||
|
*-------------------------------
|
|||
|
* on entry:
|
|||
|
* X is a board index
|
|||
|
* Y is a sprite step
|
|||
|
* on exit:
|
|||
|
* X is the HGR coordinate
|
|||
|
* Y is garbage
|
|||
|
|
|||
|
calcHGRX TYA
|
|||
|
PHA
|
|||
|
JSR getXY
|
|||
|
PLA
|
|||
|
TAY
|
|||
|
TXA ; X in HGR + Y step
|
|||
|
CLC
|
|||
|
ADC tblDELTAX,Y
|
|||
|
TAX
|
|||
|
RTS
|
|||
|
|
|||
|
tblDELTAX HEX FEFF000102 ; -2, -1, 0, 1, 2
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* CIRCLE ANIMATION
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
circleANIMATION
|
|||
|
LDA #$58 ; 88
|
|||
|
STA $73
|
|||
|
LDA #$8C ; 140
|
|||
|
STA $74
|
|||
|
LDA fgCIRCLE ; inner or outer animation?
|
|||
|
BEQ L88BD ; show the level
|
|||
|
|
|||
|
*--- hide the level
|
|||
|
|
|||
|
LDX #$AA ; 170
|
|||
|
STX $6D
|
|||
|
LDX #$00 ; 0
|
|||
|
STX $72
|
|||
|
L88B6 JSR L88D7
|
|||
|
DEC $6D
|
|||
|
BNE L88B6
|
|||
|
|
|||
|
*--- show the level
|
|||
|
|
|||
|
L88BD LDA #$01 ; 1
|
|||
|
STA $6D
|
|||
|
STA fgCIRCLE
|
|||
|
STA $72 ; 1
|
|||
|
JSR printMEN
|
|||
|
JSR printLEVEL
|
|||
|
L88CB JSR L88D7
|
|||
|
INC $6D
|
|||
|
LDA $6D
|
|||
|
CMP #$AA ; 170
|
|||
|
BNE L88CB
|
|||
|
RTS
|
|||
|
|
|||
|
L88D7 LDA $6D
|
|||
|
STA $69
|
|||
|
LDA #$00
|
|||
|
STA $6A
|
|||
|
STA $67
|
|||
|
STA $68
|
|||
|
LDA $69
|
|||
|
ASL
|
|||
|
STA $6B
|
|||
|
LDA $6A
|
|||
|
ROL
|
|||
|
STA $6C
|
|||
|
LDA #$03
|
|||
|
SEC
|
|||
|
SBC $6B
|
|||
|
STA $6B
|
|||
|
LDA #$00
|
|||
|
SBC $6C
|
|||
|
STA $6C
|
|||
|
LDA $73
|
|||
|
SEC
|
|||
|
SBC $6D
|
|||
|
STA $75
|
|||
|
LDA #$00
|
|||
|
SBC #$00
|
|||
|
STA $79
|
|||
|
LDA $73
|
|||
|
STA $76
|
|||
|
STA $77
|
|||
|
LDA #$00
|
|||
|
STA $7A
|
|||
|
STA $7B
|
|||
|
LDA $73
|
|||
|
CLC
|
|||
|
ADC $6D
|
|||
|
STA $78
|
|||
|
LDA #$00
|
|||
|
ADC #$00
|
|||
|
STA $7C
|
|||
|
LDA $74
|
|||
|
SEC
|
|||
|
SBC $6D
|
|||
|
TAX
|
|||
|
LDA #$00
|
|||
|
SBC #$00
|
|||
|
JSR L8A45
|
|||
|
STY $7D
|
|||
|
STA $81
|
|||
|
LDX $74
|
|||
|
LDA #$00
|
|||
|
JSR L8A45
|
|||
|
STY $7E
|
|||
|
STY $7F
|
|||
|
STA $82
|
|||
|
STA $83
|
|||
|
LDA $74
|
|||
|
CLC
|
|||
|
ADC $6D
|
|||
|
TAX
|
|||
|
LDA #$00
|
|||
|
ADC #$00
|
|||
|
JSR L8A45
|
|||
|
STY $80
|
|||
|
STA $84
|
|||
|
L8951 LDA $68
|
|||
|
CMP $6A
|
|||
|
BCC L896F
|
|||
|
BEQ L8969
|
|||
|
L8959 LDA $67
|
|||
|
CMP $69
|
|||
|
BNE L8968
|
|||
|
LDA $68
|
|||
|
CMP $6A
|
|||
|
BNE L8968
|
|||
|
JMP L8A69
|
|||
|
L8968 RTS
|
|||
|
|
|||
|
L8969 LDA $67
|
|||
|
CMP $69
|
|||
|
BCS L8959
|
|||
|
L896F JSR L8A69
|
|||
|
LDA $6C
|
|||
|
BPL L89A7
|
|||
|
LDA $67
|
|||
|
ASL
|
|||
|
STA $6F
|
|||
|
LDA $68
|
|||
|
ROL
|
|||
|
STA $70
|
|||
|
LDA $6F
|
|||
|
ASL
|
|||
|
STA $6F
|
|||
|
LDA $70
|
|||
|
ROL
|
|||
|
STA $70
|
|||
|
LDA $6B
|
|||
|
CLC
|
|||
|
ADC $6F
|
|||
|
STA $6F
|
|||
|
LDA $6C
|
|||
|
ADC $70
|
|||
|
STA $70
|
|||
|
LDA #$06
|
|||
|
CLC
|
|||
|
ADC $6F
|
|||
|
STA $6B
|
|||
|
LDA #$00
|
|||
|
ADC $70
|
|||
|
STA $6C
|
|||
|
JMP L8A14
|
|||
|
|
|||
|
L89A7 LDA $67
|
|||
|
SEC
|
|||
|
SBC $69
|
|||
|
STA $6F
|
|||
|
LDA $68
|
|||
|
SBC $6A
|
|||
|
STA $70
|
|||
|
LDA $6F
|
|||
|
ASL
|
|||
|
STA $6F
|
|||
|
LDA $70
|
|||
|
ROL
|
|||
|
STA $70
|
|||
|
LDA $6F
|
|||
|
ASL
|
|||
|
STA $6F
|
|||
|
LDA $70
|
|||
|
ROL
|
|||
|
STA $70
|
|||
|
LDA $6F
|
|||
|
CLC
|
|||
|
ADC #$10
|
|||
|
STA $6F
|
|||
|
LDA $70
|
|||
|
ADC #$00
|
|||
|
STA $70
|
|||
|
LDA $6F
|
|||
|
CLC
|
|||
|
ADC $6B
|
|||
|
STA $6B
|
|||
|
LDA $70
|
|||
|
ADC $6C
|
|||
|
STA $6C
|
|||
|
LDA $69
|
|||
|
PHP
|
|||
|
DEC $69
|
|||
|
PLP
|
|||
|
BNE L89EC
|
|||
|
DEC $6A
|
|||
|
L89EC INC $75
|
|||
|
BNE L89F2
|
|||
|
INC $79
|
|||
|
L89F2 DEC $84
|
|||
|
BPL L89FC
|
|||
|
LDA #$06
|
|||
|
STA $84
|
|||
|
DEC $80
|
|||
|
L89FC INC $81
|
|||
|
LDA $81
|
|||
|
CMP #$07
|
|||
|
BNE L8A0A
|
|||
|
LDA #$00
|
|||
|
STA $81
|
|||
|
INC $7D
|
|||
|
L8A0A DEC $78
|
|||
|
LDA $78
|
|||
|
CMP #$FF
|
|||
|
BNE L8A14
|
|||
|
DEC $7C
|
|||
|
L8A14 INC $67
|
|||
|
BNE L8A1A
|
|||
|
INC $68
|
|||
|
L8A1A INC $83
|
|||
|
LDA $83
|
|||
|
CMP #$07
|
|||
|
BNE L8A28
|
|||
|
LDA #$00
|
|||
|
STA $83
|
|||
|
INC $7F
|
|||
|
L8A28 DEC $76
|
|||
|
LDA $76
|
|||
|
CMP #$FF
|
|||
|
BNE L8A32
|
|||
|
DEC $7A
|
|||
|
L8A32 INC $77
|
|||
|
BNE L8A38
|
|||
|
INC $7B
|
|||
|
L8A38 DEC $82
|
|||
|
BPL L8A42
|
|||
|
LDA #$06
|
|||
|
STA $82
|
|||
|
DEC $7E
|
|||
|
L8A42 JMP L8951
|
|||
|
|
|||
|
L8A45 STX $6F
|
|||
|
LDY #$08
|
|||
|
SEC
|
|||
|
SBC #$07
|
|||
|
L8A4C PHP
|
|||
|
ROL $70
|
|||
|
ASL $6F
|
|||
|
ROL
|
|||
|
PLP
|
|||
|
BCC L8A5A
|
|||
|
SBC #$07
|
|||
|
JMP L8A5C
|
|||
|
|
|||
|
L8A5A ADC #$07
|
|||
|
L8A5C DEY
|
|||
|
BNE L8A4C
|
|||
|
BCS L8A64
|
|||
|
ADC #$07
|
|||
|
CLC
|
|||
|
L8A64 ROL $70
|
|||
|
LDY $70
|
|||
|
RTS
|
|||
|
|
|||
|
L8A69 LDY $7C
|
|||
|
BNE L8A8C
|
|||
|
LDY $78
|
|||
|
CPY #$B0
|
|||
|
BCS L8A8C
|
|||
|
JSR setHGRPOINTERS
|
|||
|
LDY $7F
|
|||
|
CPY #$28
|
|||
|
BCS L8A81
|
|||
|
LDX $83
|
|||
|
JSR L8AF6
|
|||
|
L8A81 LDY $7E
|
|||
|
CPY #$28
|
|||
|
BCS L8A8C
|
|||
|
LDX $82
|
|||
|
JSR L8AF6
|
|||
|
L8A8C LDY $79
|
|||
|
BNE L8AAF
|
|||
|
LDY $75
|
|||
|
CPY #$B0
|
|||
|
BCS L8AAF
|
|||
|
JSR setHGRPOINTERS
|
|||
|
LDY $7F
|
|||
|
CPY #$28
|
|||
|
BCS L8AA4
|
|||
|
LDX $83
|
|||
|
JSR L8AF6
|
|||
|
L8AA4 LDY $7E
|
|||
|
CPY #$28
|
|||
|
BCS L8AAF
|
|||
|
LDX $82
|
|||
|
JSR L8AF6
|
|||
|
L8AAF LDY $7B
|
|||
|
BNE L8AD2
|
|||
|
LDY $77
|
|||
|
CPY #$B0
|
|||
|
BCS L8AD2
|
|||
|
JSR setHGRPOINTERS
|
|||
|
LDY $80
|
|||
|
CPY #$28
|
|||
|
BCS L8AC7
|
|||
|
LDX $84
|
|||
|
JSR L8AF6
|
|||
|
L8AC7 LDY $7D
|
|||
|
CPY #$28
|
|||
|
BCS L8AD2
|
|||
|
LDX $81
|
|||
|
JSR L8AF6
|
|||
|
L8AD2 LDY $7A
|
|||
|
BNE L8AF5
|
|||
|
LDY $76
|
|||
|
CPY #$B0
|
|||
|
BCS L8AF5
|
|||
|
JSR setHGRPOINTERS
|
|||
|
LDY $80
|
|||
|
CPY #$28
|
|||
|
BCS L8AEA
|
|||
|
LDX $84
|
|||
|
JSR L8AF6
|
|||
|
L8AEA LDY $7D
|
|||
|
CPY #$28
|
|||
|
BCS L8AF5
|
|||
|
LDX $81
|
|||
|
JMP L8AF6
|
|||
|
L8AF5 RTS
|
|||
|
|
|||
|
L8AF6 LDA $72
|
|||
|
BNE L8B02
|
|||
|
LDA (ptrHGR1),Y
|
|||
|
AND L8B0C,X
|
|||
|
STA (ptrHGR1),Y
|
|||
|
RTS
|
|||
|
|
|||
|
L8B02 LDA (ptrHGR2),Y
|
|||
|
AND L8B13,X
|
|||
|
ORA (ptrHGR1),Y
|
|||
|
STA (ptrHGR1),Y
|
|||
|
RTS
|
|||
|
|
|||
|
L8B0C HEX F0F0F0F08F8F8F
|
|||
|
L8B13 HEX 8F8F8F8FF0F0F0
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* SHOW GAME OVER
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
animGAMEOVER
|
|||
|
LDA #$01
|
|||
|
STA L8D4B
|
|||
|
LDA #>HGR1
|
|||
|
STA hgrPAGE
|
|||
|
|
|||
|
L8B23 JSR L8BCF
|
|||
|
JSR L8BBE
|
|||
|
JSR L8BAD
|
|||
|
JSR L8B9C
|
|||
|
JSR L8B8B
|
|||
|
JSR L8B7A
|
|||
|
JSR L8B8B
|
|||
|
JSR L8B9C
|
|||
|
JSR L8BAD
|
|||
|
JSR L8BBE
|
|||
|
JSR L8BCF
|
|||
|
JSR L8C24
|
|||
|
JSR L8C13
|
|||
|
JSR L8C02
|
|||
|
JSR L8BF1
|
|||
|
JSR L8BE0
|
|||
|
JSR L8BF1
|
|||
|
JSR L8C02
|
|||
|
JSR L8C13
|
|||
|
JSR L8C24
|
|||
|
LDA L8D4B
|
|||
|
CMP #$64
|
|||
|
BCC L8B23
|
|||
|
JSR L8BCF
|
|||
|
JSR L8BBE
|
|||
|
JSR L8BAD
|
|||
|
JSR L8B9C
|
|||
|
JSR L8B8B
|
|||
|
JSR L8B7A
|
|||
|
CLC
|
|||
|
RTS
|
|||
|
|
|||
|
L8B7A JSR drawGOLINE
|
|||
|
HEX 000102030405060708090A020100
|
|||
|
L8B8B JSR drawGOLINE
|
|||
|
HEX 0000010203040507090A02010000
|
|||
|
L8B9C JSR drawGOLINE
|
|||
|
HEX 00000001020304090A0201000000
|
|||
|
L8BAD JSR drawGOLINE
|
|||
|
HEX 000000000102030A020100000000
|
|||
|
L8BBE JSR drawGOLINE
|
|||
|
HEX 000000000001030A010000000000
|
|||
|
L8BCF JSR drawGOLINE
|
|||
|
HEX 0000000000000101000000000000
|
|||
|
L8BE0 JSR drawGOLINE
|
|||
|
HEX 0001020A09080706050403020100
|
|||
|
L8BF1 JSR drawGOLINE
|
|||
|
HEX 000001020A090705040302010000
|
|||
|
L8C02 JSR drawGOLINE
|
|||
|
HEX 00000001020A0904030201000000
|
|||
|
L8C13 JSR drawGOLINE
|
|||
|
HEX 0000000001020A03020100000000
|
|||
|
L8C24 JSR drawGOLINE
|
|||
|
HEX 0000000000010A03010000000000
|
|||
|
|
|||
|
L8C35 HEX 8080808080808080808080808080
|
|||
|
L8C43 HEX C0AAD5AAD5AAD5AAD5AAD5AAD580
|
|||
|
L8C51 HEX 9080808080808080808080808082
|
|||
|
L8C5F HEX 90AAD1A2D5A885A8C5A2D4A29582
|
|||
|
L8C6D HEX 908291A2C5A88088C5A294A09082
|
|||
|
L8C7B HEX 908290A2C4A88088C5A294A09082
|
|||
|
L8C89 HEX 908290A2C4A88188C4A2D4A09582
|
|||
|
L8C97 HEX 90A2D1A2C4888088C4A284A08582
|
|||
|
L8CA5 HEX 908291A2C4888088C4AA84A08582
|
|||
|
L8CB3 HEX 908291A2C4888088C48A84A09182
|
|||
|
L8CC1 HEX 90AA91A2C4A885A88582D4A29182
|
|||
|
|
|||
|
L8CCF DA L8C35-$D
|
|||
|
DA L8C43-$D
|
|||
|
DA L8C51-$D
|
|||
|
DA L8C5F-$D
|
|||
|
DA L8C6D-$D
|
|||
|
DA L8C7B-$D
|
|||
|
DA L8C89-$D
|
|||
|
DA L8C97-$D
|
|||
|
DA L8CA5-$D
|
|||
|
DA L8CB3-$D
|
|||
|
DA L8CC1-$D
|
|||
|
|
|||
|
drawGOLINE PLA ; pour afficher game over
|
|||
|
STA ptrDATA
|
|||
|
PLA
|
|||
|
STA ptrDATA+1
|
|||
|
LDY #$50
|
|||
|
STY theY
|
|||
|
BNE L8D12
|
|||
|
L8CF1 JSR setHGRPOINTER
|
|||
|
LDY #$00
|
|||
|
LDA (ptrDATA),Y
|
|||
|
ASL
|
|||
|
TAX
|
|||
|
LDA L8CCF,X
|
|||
|
STA L8D08+1
|
|||
|
LDA L8CCF+1,X
|
|||
|
STA L8D08+2
|
|||
|
LDY #$0D
|
|||
|
L8D08 LDA L8D08,Y
|
|||
|
STA (ptrHGR1),Y
|
|||
|
INY
|
|||
|
CPY #lvlWIDTH-1
|
|||
|
BCC L8D08
|
|||
|
L8D12 JSR L8D4C
|
|||
|
INC theY
|
|||
|
LDY theY
|
|||
|
CPY #$5F
|
|||
|
BCC L8CF1
|
|||
|
LDX L8D4B
|
|||
|
LDY #$FF
|
|||
|
L8D22 DEY
|
|||
|
BNE L8D22
|
|||
|
DEX
|
|||
|
BNE L8D22
|
|||
|
INC L8D4B
|
|||
|
LDA fgINPUT
|
|||
|
CMP #chrK
|
|||
|
BEQ L8D3B
|
|||
|
LDA BUTN1
|
|||
|
BMI L8D41
|
|||
|
LDA BUTN0
|
|||
|
BMI L8D41
|
|||
|
L8D3B LDA KBD
|
|||
|
BMI L8D41
|
|||
|
RTS
|
|||
|
|
|||
|
L8D41 PLA
|
|||
|
PLA
|
|||
|
SEC
|
|||
|
LDA KBD
|
|||
|
STA KBDSTROBE
|
|||
|
RTS
|
|||
|
|
|||
|
L8D4B DB $9D
|
|||
|
|
|||
|
L8D4C INC ptrDATA
|
|||
|
BNE L8D52
|
|||
|
INC ptrDATA+1
|
|||
|
L8D52 RTS
|
|||
|
|
|||
|
ds \
|
|||
|
|
|||
|
*-------------------------------
|
|||
|
* NOT USED?
|
|||
|
*-------------------------------
|
|||
|
|
|||
|
L8E00 LDA #$44 ; MASTER DISKETTE
|
|||
|
STA $0478
|
|||
|
LDA #$00
|
|||
|
JSR LB9A0
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
LDA #$20
|
|||
|
STA $4F
|
|||
|
L8E14 DEY
|
|||
|
BNE L8E20
|
|||
|
DEC $4F
|
|||
|
BNE L8E20
|
|||
|
JMP LBEAF
|
|||
|
|
|||
|
NOP
|
|||
|
NOP
|
|||
|
L8E20 LDA $C08C,X
|
|||
|
BPL L8E20
|
|||
|
L8E25 CMP #$D4
|
|||
|
BNE L8E14
|
|||
|
NOP
|
|||
|
L8E2A LDA $C08C,X
|
|||
|
BPL L8E2A
|
|||
|
L8E2F CMP #$D5
|
|||
|
BNE L8E25
|
|||
|
NOP
|
|||
|
L8E34 LDA $C08C,X
|
|||
|
BPL L8E34
|
|||
|
CMP #$D6
|
|||
|
BNE L8E2F
|
|||
|
LDA $C088,X
|
|||
|
JSR tellMASTERDISK
|
|||
|
JMP editMAIN
|
|||
|
|
|||
|
DB $00
|
|||
|
DB $00
|
|||
|
DB $00
|
|||
|
DB $00
|
|||
|
DB $00
|
|||
|
DB $00
|
|||
|
DB $00
|
|||
|
DB $00
|
|||
|
DB $00
|
|||
|
DB $00
|
|||
|
JMP LB7B5
|
|||
|
|
|||
|
ds \
|
|||
|
|
|||
|
*---------------------------------------
|
|||
|
|
|||
|
put LR.Tables
|
|||
|
put LR.RWTS
|