mirror of https://github.com/dschmenk/VM02.git
1376 lines
20 KiB
ArmAsm
Executable File
1376 lines
20 KiB
ArmAsm
Executable File
.INCLUDE "plstub.s"
|
|
; 1: CONST FALSE = 0
|
|
; FALSE = 0
|
|
; 2: CONST TRUE = NOT FALSE
|
|
; TRUE = -1
|
|
; 3: CONST SHOWLORES = $C056
|
|
; SHOWLORES = 49238
|
|
; 4: CONST KEYBOARD = $C000
|
|
; KEYBOARD = 49152
|
|
; 5: CONST KEYSTROBE = $C010
|
|
; KEYSTROBE = 49168
|
|
; 6: CONST EMPTY = 0
|
|
; EMPTY = 0
|
|
; 7: CONST TREE = 4
|
|
; TREE = 4
|
|
; 8: CONST FIRE = 13
|
|
; FIRE = 13
|
|
; 9: CONST FORESTSIZE = 42*42
|
|
; FORESTSIZE = 1764
|
|
; 10: BYTE HELLOMSG[] = "PRESS ANY KEY TO BEGIN..."
|
|
D0000: ; HELLOMSG
|
|
DB $19
|
|
DB $50,$52,$45,$53,$53,$20,$41,$4E
|
|
DB $59,$20,$4B,$45,$59,$20,$54,$4F
|
|
DB $20,$42,$45,$47,$49,$4E,$2E,$2E
|
|
DB $2E
|
|
; 11: BYTE EXITMSG[] = "PRESS ANY KEY TO EXIT."
|
|
D0026: ; EXITMSG
|
|
DB $16
|
|
DB $50,$52,$45,$53,$53,$20,$41,$4E
|
|
DB $59,$20,$4B,$45,$59,$20,$54,$4F
|
|
DB $20,$45,$58,$49,$54,$2E
|
|
; 12: BYTE GOODBYE[] = "THAT'S ALL FOLKS!"
|
|
D0049: ; GOODBYE
|
|
DB $11
|
|
DB $54,$48,$41,$54,$27,$53,$20,$41
|
|
DB $4C,$4C,$20,$46,$4F,$4C,$4B,$53
|
|
DB $21
|
|
; 13: BYTE TREES1[FORESTSIZE]
|
|
D0067: DS 1764 ; TREES1
|
|
; 14: BYTE TREES2[FORESTSIZE]
|
|
D1831: DS 1764 ; TREES2
|
|
; 15: WORD RNDNUM
|
|
D3595: DS 2 ; RNDNUM
|
|
; 16: ;
|
|
; 17: ; Defines for ASM routines
|
|
; 18: ;
|
|
; 19: ASM EQUATES
|
|
C0000: ; EQUATES()
|
|
; 20: SRC EQU $F0
|
|
SRC EQU $F0
|
|
; 21: SRCL EQU SRC
|
|
SRCL EQU SRC
|
|
; 22: SRCH EQU SRC+1
|
|
SRCH EQU SRC+1
|
|
; 23: DST EQU SRC+2
|
|
DST EQU SRC+2
|
|
; 24: DSTL EQU DST
|
|
DSTL EQU DST
|
|
; 25: DSTH EQU DST+1
|
|
DSTH EQU DST+1
|
|
; 26: ESP EQU DST+2
|
|
ESP EQU DST+2
|
|
; 27: END
|
|
RTS
|
|
; 28: ;
|
|
; 29: ; CALL 6502 ROUTINE
|
|
; 30: ; ROMCALL(AREG, XREG, YREG, STATUS, ADDR)
|
|
; 31: ;
|
|
; 32: ASM ROMCALL
|
|
C0002: ; ROMCALL()
|
|
; 33: TMP EQU $06
|
|
TMP EQU $06
|
|
; 34:
|
|
; 35: PHP
|
|
PHP
|
|
; 36: LDA ESTKL,X
|
|
LDA ESTKL,X
|
|
; 37: STA TMP
|
|
STA TMP
|
|
; 38: LDA ESTKH,X
|
|
LDA ESTKH,X
|
|
; 39: STA TMP+1
|
|
STA TMP+1
|
|
; 40: INX
|
|
INX
|
|
; 41: LDA ESTKL,X
|
|
LDA ESTKL,X
|
|
; 42: PHA
|
|
PHA
|
|
; 43: INX
|
|
INX
|
|
; 44: LDA ESTKL,X
|
|
LDA ESTKL,X
|
|
; 45: TAY
|
|
TAY
|
|
; 46: INX
|
|
INX
|
|
; 47: LDA ESTKL+1,X
|
|
LDA ESTKL+1,X
|
|
; 48: PHA
|
|
PHA
|
|
; 49: LDA ESTKL,X
|
|
LDA ESTKL,X
|
|
; 50: INX
|
|
INX
|
|
; 51: STX TMP+2
|
|
STX TMP+2
|
|
; 52: TAX
|
|
TAX
|
|
; 53: PLA
|
|
PLA
|
|
; 54: BIT ROMIN
|
|
BIT ROMIN
|
|
; 55: PLP
|
|
PLP
|
|
; 56: JSR JMPTMP
|
|
JSR JMPTMP
|
|
; 57: PHP
|
|
PHP
|
|
; 58: BIT LCBNK2
|
|
BIT LCBNK2
|
|
; 59: STA REGVALS+0
|
|
STA REGVALS+0
|
|
; 60: STX REGVALS+1
|
|
STX REGVALS+1
|
|
; 61: STY REGVALS+2
|
|
STY REGVALS+2
|
|
; 62: PLA
|
|
PLA
|
|
; 63: STA REGVALS+3
|
|
STA REGVALS+3
|
|
; 64: LDX TMP+2
|
|
LDX TMP+2
|
|
; 65: LDA #<REGVALS
|
|
LDA #<REGVALS
|
|
; 66: LDY #>REGVALS
|
|
LDY #>REGVALS
|
|
; 67: STA ESTKL,X
|
|
STA ESTKL,X
|
|
; 68: STY ESTKH,X
|
|
STY ESTKH,X
|
|
; 69: PLP
|
|
PLP
|
|
; 70: RTS
|
|
RTS
|
|
; 71: JMPTMP: JMP (TMP)
|
|
JMPTMP: JMP (TMP)
|
|
; 72: REGVALS: DS 4
|
|
REGVALS: DS 4
|
|
; 73: END
|
|
RTS
|
|
; 74: ;
|
|
; 75: ; GRCOLOR(COLOR)
|
|
; 76: ;
|
|
; 77: ASM GRCOLOR
|
|
C0004: ; GRCOLOR()
|
|
; 78: LDA ESTKL,X
|
|
LDA ESTKL,X
|
|
; 79: INX
|
|
INX
|
|
; 80: STX TMP+2
|
|
STX TMP+2
|
|
; 81: BIT $C081
|
|
BIT $C081
|
|
; 82: JSR $F864
|
|
JSR $F864
|
|
; 83: BIT $C080
|
|
BIT $C080
|
|
; 84: LDX TMP+2
|
|
LDX TMP+2
|
|
; 85: END
|
|
RTS
|
|
; 86: ;
|
|
; 87: ; GRPLOT(X, Y)
|
|
; 88: ;
|
|
; 89: ASM GRPLOT
|
|
C0006: ; GRPLOT()
|
|
; 90: LDA ESTKL,X
|
|
LDA ESTKL,X
|
|
; 91: INX
|
|
INX
|
|
; 92: LDY ESTKL,X
|
|
LDY ESTKL,X
|
|
; 93: INX
|
|
INX
|
|
; 94: STX TMP+2
|
|
STX TMP+2
|
|
; 95: BIT $C081
|
|
BIT $C081
|
|
; 96: JSR $F800
|
|
JSR $F800
|
|
; 97: BIT $C080
|
|
BIT $C080
|
|
; 98: LDX TMP+2
|
|
LDX TMP+2
|
|
; 99: END
|
|
RTS
|
|
; 100: ;
|
|
; 101: ; SET MEMORY TO VALUE
|
|
; 102: ; MEMSET(VALUE, ADDR, SIZE)
|
|
; 103: ;
|
|
; 104: ASM MEMSET
|
|
C0008: ; MEMSET()
|
|
; 105: LDY #$00
|
|
LDY #$00
|
|
; 106: LDA ESTKL+1,X
|
|
LDA ESTKL+1,X
|
|
; 107: STA DSTL
|
|
STA DSTL
|
|
; 108: LDA ESTKH+1,X
|
|
LDA ESTKH+1,X
|
|
; 109: STA DSTH
|
|
STA DSTH
|
|
; 110: INC ESTKL,X
|
|
INC ESTKL,X
|
|
; 111: INC ESTKH,X
|
|
INC ESTKH,X
|
|
; 112: SETMEM: DEC ESTKL,X
|
|
SETMEM: DEC ESTKL,X
|
|
; 113: BNE :+
|
|
BNE :+
|
|
; 114: DEC ESTKH,X
|
|
DEC ESTKH,X
|
|
; 115: BEQ MEMEXIT
|
|
BEQ MEMEXIT
|
|
; 116: : LDA ESTKL+2,X
|
|
: LDA ESTKL+2,X
|
|
; 117: STA (DST),Y
|
|
STA (DST),Y
|
|
; 118: INY
|
|
INY
|
|
; 119: BNE :+
|
|
BNE :+
|
|
; 120: INC DSTH
|
|
INC DSTH
|
|
; 121: : DEC ESTKL,X
|
|
: DEC ESTKL,X
|
|
; 122: BNE :+
|
|
BNE :+
|
|
; 123: DEC ESTKH,X
|
|
DEC ESTKH,X
|
|
; 124: BEQ MEMEXIT
|
|
BEQ MEMEXIT
|
|
; 125: : LDA ESTKH+2,X
|
|
: LDA ESTKH+2,X
|
|
; 126: STA (DST),Y
|
|
STA (DST),Y
|
|
; 127: INY
|
|
INY
|
|
; 128: BNE SETMEM
|
|
BNE SETMEM
|
|
; 129: INC DSTH
|
|
INC DSTH
|
|
; 130: BNE SETMEM
|
|
BNE SETMEM
|
|
; 131: MEMEXIT: INX
|
|
MEMEXIT: INX
|
|
; 132: INX
|
|
INX
|
|
; 133: INX
|
|
INX
|
|
; 134: END
|
|
RTS
|
|
; 135: ;
|
|
; 136: ; PRINT STRING
|
|
; 137: ; PRSTR(STR)
|
|
; 138: ;
|
|
; 139: ASM PRSTR
|
|
C0010: ; PRSTR()
|
|
; 140: LDY #$00
|
|
LDY #$00
|
|
; 141: LDA ESTKL,X
|
|
LDA ESTKL,X
|
|
; 142: STA SRCL
|
|
STA SRCL
|
|
; 143: LDA ESTKH,X
|
|
LDA ESTKH,X
|
|
; 144: STA SRCH
|
|
STA SRCH
|
|
; 145: BIT ROMIN
|
|
BIT ROMIN
|
|
; 146: LDA (SRC),Y
|
|
LDA (SRC),Y
|
|
; 147: STA ESTKL,X
|
|
STA ESTKL,X
|
|
; 148: BEQ :+
|
|
BEQ :+
|
|
; 149: _PRS1: INY
|
|
_PRS1: INY
|
|
; 150: LDA (SRC),Y
|
|
LDA (SRC),Y
|
|
; 151: ORA #$80
|
|
ORA #$80
|
|
; 152: JSR $FDED
|
|
JSR $FDED
|
|
; 153: TYA
|
|
TYA
|
|
; 154: CMP ESTKL,X
|
|
CMP ESTKL,X
|
|
; 155: BNE _PRS1
|
|
BNE _PRS1
|
|
; 156: : INX
|
|
: INX
|
|
; 157: BIT LCBNK2
|
|
BIT LCBNK2
|
|
; 158: END
|
|
RTS
|
|
; 159: DEF TEXTMODE
|
|
C0012: ; TEXTMODE()
|
|
; 160: DROP ROMCALL(0, 0, 0, 0, $FB39)
|
|
JSR _INTERP
|
|
DB $00 ; ZERO
|
|
DB $00 ; ZERO
|
|
DB $00 ; ZERO
|
|
DB $00 ; ZERO
|
|
DB $2C,$39,$FB ; CW 64313
|
|
DB $54,<C0002,>C0002 ; CALL C0002
|
|
DB $30 ; DROP
|
|
; 161: END
|
|
DB $5C ; RET
|
|
; 162:
|
|
; 163: DEF HOME
|
|
C0014: ; HOME()
|
|
; 164: DROP ROMCALL(0, 0, 0, 0, $FC58)
|
|
JSR _INTERP
|
|
DB $00 ; ZERO
|
|
DB $00 ; ZERO
|
|
DB $00 ; ZERO
|
|
DB $00 ; ZERO
|
|
DB $2C,$58,$FC ; CW 64600
|
|
DB $54,<C0002,>C0002 ; CALL C0002
|
|
DB $30 ; DROP
|
|
; 165: END
|
|
DB $5C ; RET
|
|
; 166:
|
|
; 167: DEF GOTOXY(X, Y)
|
|
C0016: ; GOTOXY()
|
|
; X = 2
|
|
; Y = 4
|
|
; 168: ^($24) = X
|
|
JSR _INTERP
|
|
DB $58,$06,$02 ; ENTER 6,2
|
|
DB $2A,$24 ; CB 36
|
|
DB $66,$02 ; LLW 2
|
|
DB $70 ; SB
|
|
; 169: DROP ROMCALL(Y, 0, 0, 0, $FB5B)
|
|
DB $66,$04 ; LLW 4
|
|
DB $00 ; ZERO
|
|
DB $00 ; ZERO
|
|
DB $00 ; ZERO
|
|
DB $2C,$5B,$FB ; CW 64347
|
|
DB $54,<C0002,>C0002 ; CALL C0002
|
|
DB $30 ; DROP
|
|
; 170: END
|
|
DB $5A ; LEAVE
|
|
; 171:
|
|
; 172: DEF GRMODE
|
|
C0018: ; GRMODE()
|
|
; 173: DROP ROMCALL(0, 0, 0, 0, $FB40)
|
|
JSR _INTERP
|
|
DB $00 ; ZERO
|
|
DB $00 ; ZERO
|
|
DB $00 ; ZERO
|
|
DB $00 ; ZERO
|
|
DB $2C,$40,$FB ; CW 64320
|
|
DB $54,<C0002,>C0002 ; CALL C0002
|
|
DB $30 ; DROP
|
|
; 174: DROP ^SHOWLORES
|
|
DB $2C,$56,$C0 ; CW 49238
|
|
DB $60 ; LB
|
|
DB $30 ; DROP
|
|
; 175: END
|
|
DB $5C ; RET
|
|
; 176:
|
|
; 177: DEF RANDOMIZE(SEED)
|
|
C0020: ; RANDOMIZE()
|
|
; SEED = 2
|
|
; 178: RNDNUM = (SEED << 8) ? (SEED >> 8 & $FF) + SEED
|
|
JSR _INTERP
|
|
DB $58,$04,$01 ; ENTER 4,1
|
|
DB $66,$02 ; LLW 2
|
|
DB $2A,$08 ; CB 8
|
|
DB $1A ; SHL
|
|
DB $66,$02 ; LLW 2
|
|
DB $2A,$08 ; CB 8
|
|
DB $1C ; SHR
|
|
DB $2A,$FF ; CB 255
|
|
DB $14 ; BAND
|
|
DB $66,$02 ; LLW 2
|
|
DB $02 ; ADD
|
|
DB $16 ; IOR
|
|
DB $7A,<D3595,>D3595 ; SAW D3595
|
|
; 179: END
|
|
DB $5A ; LEAVE
|
|
; 180:
|
|
; 181: DEFOPT RND
|
|
C0022: ; RND()
|
|
; 182: RNDNUM = (RNDNUM << 8) + RNDNUM + 12345
|
|
DEX
|
|
LDA D3595
|
|
STA ESTKL,X
|
|
LDA D3595+1
|
|
STA ESTKH,X
|
|
DEX
|
|
LDA #$08
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
JSR SHL
|
|
DEX
|
|
LDA D3595
|
|
STA ESTKL,X
|
|
LDA D3595+1
|
|
STA ESTKH,X
|
|
JSR ADD
|
|
DEX
|
|
LDA #$39
|
|
STA ESTKL,X
|
|
LDA #$30
|
|
STA ESTKH,X
|
|
JSR ADD
|
|
LDA ESTKL,X
|
|
STA D3595
|
|
LDA ESTKH,X
|
|
STA D3595+1
|
|
; 183: RETURN RNDNUM & $7FFF
|
|
LDA D3595
|
|
STA ESTKL,X
|
|
LDA D3595+1
|
|
STA ESTKH,X
|
|
DEX
|
|
LDA #$FF
|
|
STA ESTKL,X
|
|
LDA #$7F
|
|
STA ESTKH,X
|
|
JSR BAND
|
|
RTS
|
|
; 184: END
|
|
; 185:
|
|
; 186: DEFOPT BYFIRE(TREEPTR)
|
|
C0024: ; BYFIRE()
|
|
; TREEPTR = 2
|
|
; 187: IF ^(TREEPTR - 43) == FIRE
|
|
LDY #4
|
|
LDA #1
|
|
JSR ENTER
|
|
DEX
|
|
LDY #$02
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
DEX
|
|
LDA #$2B
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
JSR SUB
|
|
JSR LB
|
|
DEX
|
|
LDA #$0D
|
|
STA ESTKL,X
|
|
STY ESTKH,X
|
|
JSR ISEQ
|
|
INX
|
|
LDA ESTKL-1,X
|
|
ORA ESTKH-1,X
|
|
BNE :+
|
|
JMP C0026
|
|
:
|
|
; 188: RETURN TRUE
|
|
DEX
|
|
LDA #$FF
|
|
STA ESTKL,X
|
|
STA ESTKH,X
|
|
JMP LEAVE
|
|
; 189: ELSIF ^(TREEPTR - 42) == FIRE
|
|
JMP C0027
|
|
C0026:
|
|
DEX
|
|
LDY #$02
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
DEX
|
|
LDA #$2A
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
JSR SUB
|
|
JSR LB
|
|
DEX
|
|
LDA #$0D
|
|
STA ESTKL,X
|
|
STY ESTKH,X
|
|
JSR ISEQ
|
|
INX
|
|
LDA ESTKL-1,X
|
|
ORA ESTKH-1,X
|
|
BNE :+
|
|
JMP C0028
|
|
:
|
|
; 190: RETURN TRUE
|
|
DEX
|
|
LDA #$FF
|
|
STA ESTKL,X
|
|
STA ESTKH,X
|
|
JMP LEAVE
|
|
; 191: ELSIF ^(TREEPTR - 41) == FIRE
|
|
JMP C0027
|
|
C0028:
|
|
DEX
|
|
LDY #$02
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
DEX
|
|
LDA #$29
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
JSR SUB
|
|
JSR LB
|
|
DEX
|
|
LDA #$0D
|
|
STA ESTKL,X
|
|
STY ESTKH,X
|
|
JSR ISEQ
|
|
INX
|
|
LDA ESTKL-1,X
|
|
ORA ESTKH-1,X
|
|
BNE :+
|
|
JMP C0029
|
|
:
|
|
; 192: RETURN TRUE
|
|
DEX
|
|
LDA #$FF
|
|
STA ESTKL,X
|
|
STA ESTKH,X
|
|
JMP LEAVE
|
|
; 193: ELSIF ^(TREEPTR - 1) == FIRE
|
|
JMP C0027
|
|
C0029:
|
|
DEX
|
|
LDY #$02
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
DEX
|
|
LDA #$01
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
JSR SUB
|
|
JSR LB
|
|
DEX
|
|
LDA #$0D
|
|
STA ESTKL,X
|
|
STY ESTKH,X
|
|
JSR ISEQ
|
|
INX
|
|
LDA ESTKL-1,X
|
|
ORA ESTKH-1,X
|
|
BNE :+
|
|
JMP C0030
|
|
:
|
|
; 194: RETURN TRUE
|
|
DEX
|
|
LDA #$FF
|
|
STA ESTKL,X
|
|
STA ESTKH,X
|
|
JMP LEAVE
|
|
; 195: ELSIF ^(TREEPTR + 1) == FIRE
|
|
JMP C0027
|
|
C0030:
|
|
DEX
|
|
LDY #$02
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
DEX
|
|
LDA #$01
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
JSR ADD
|
|
JSR LB
|
|
DEX
|
|
LDA #$0D
|
|
STA ESTKL,X
|
|
STY ESTKH,X
|
|
JSR ISEQ
|
|
INX
|
|
LDA ESTKL-1,X
|
|
ORA ESTKH-1,X
|
|
BNE :+
|
|
JMP C0031
|
|
:
|
|
; 196: RETURN TRUE
|
|
DEX
|
|
LDA #$FF
|
|
STA ESTKL,X
|
|
STA ESTKH,X
|
|
JMP LEAVE
|
|
; 197: ELSIF ^(TREEPTR + 41) == FIRE
|
|
JMP C0027
|
|
C0031:
|
|
DEX
|
|
LDY #$02
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
DEX
|
|
LDA #$29
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
JSR ADD
|
|
JSR LB
|
|
DEX
|
|
LDA #$0D
|
|
STA ESTKL,X
|
|
STY ESTKH,X
|
|
JSR ISEQ
|
|
INX
|
|
LDA ESTKL-1,X
|
|
ORA ESTKH-1,X
|
|
BNE :+
|
|
JMP C0032
|
|
:
|
|
; 198: RETURN TRUE
|
|
DEX
|
|
LDA #$FF
|
|
STA ESTKL,X
|
|
STA ESTKH,X
|
|
JMP LEAVE
|
|
; 199: ELSIF ^(TREEPTR + 42) == FIRE
|
|
JMP C0027
|
|
C0032:
|
|
DEX
|
|
LDY #$02
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
DEX
|
|
LDA #$2A
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
JSR ADD
|
|
JSR LB
|
|
DEX
|
|
LDA #$0D
|
|
STA ESTKL,X
|
|
STY ESTKH,X
|
|
JSR ISEQ
|
|
INX
|
|
LDA ESTKL-1,X
|
|
ORA ESTKH-1,X
|
|
BNE :+
|
|
JMP C0033
|
|
:
|
|
; 200: RETURN TRUE
|
|
DEX
|
|
LDA #$FF
|
|
STA ESTKL,X
|
|
STA ESTKH,X
|
|
JMP LEAVE
|
|
; 201: ELSIF ^(TREEPTR + 43) == FIRE
|
|
JMP C0027
|
|
C0033:
|
|
DEX
|
|
LDY #$02
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
DEX
|
|
LDA #$2B
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
JSR ADD
|
|
JSR LB
|
|
DEX
|
|
LDA #$0D
|
|
STA ESTKL,X
|
|
STY ESTKH,X
|
|
JSR ISEQ
|
|
INX
|
|
LDA ESTKL-1,X
|
|
ORA ESTKH-1,X
|
|
BNE :+
|
|
JMP C0034
|
|
:
|
|
; 202: RETURN TRUE
|
|
DEX
|
|
LDA #$FF
|
|
STA ESTKL,X
|
|
STA ESTKH,X
|
|
JMP LEAVE
|
|
; 203: FIN
|
|
C0034:
|
|
C0027:
|
|
; 204: RETURN FALSE
|
|
DEX
|
|
LDY #$00
|
|
STY ESTKL,X
|
|
STY ESTKH,X
|
|
JMP LEAVE
|
|
; 205: END
|
|
; 206: DEFOPT FORESTFIRE
|
|
C0035: ; FORESTFIRE()
|
|
; 207: WORD NEWTREES, OLDTREES, NEWTREE, OLDTREE, YROW
|
|
; NEWTREES = 2
|
|
; OLDTREES = 4
|
|
; NEWTREE = 6
|
|
; OLDTREE = 8
|
|
; YROW = 10
|
|
; 208: BYTE X, Y
|
|
; X = 12
|
|
; Y = 13
|
|
; 209:
|
|
; 210: MEMSET(EMPTY, @TREES1, FORESTSIZE)
|
|
LDY #14
|
|
LDA #0
|
|
JSR ENTER
|
|
DEX
|
|
STY ESTKL,X
|
|
STY ESTKH,X
|
|
DEX
|
|
LDA #<D0067
|
|
STA ESTKL,X
|
|
LDA #>D0067
|
|
STA ESTKH,X
|
|
DEX
|
|
LDA #$E4
|
|
STA ESTKL,X
|
|
LDA #$06
|
|
STA ESTKH,X
|
|
JSR C0008
|
|
; 211: MEMSET(EMPTY, @TREES2, FORESTSIZE)
|
|
DEX
|
|
LDY #$00
|
|
STY ESTKL,X
|
|
STY ESTKH,X
|
|
DEX
|
|
LDA #<D1831
|
|
STA ESTKL,X
|
|
LDA #>D1831
|
|
STA ESTKH,X
|
|
DEX
|
|
LDA #$E4
|
|
STA ESTKL,X
|
|
LDA #$06
|
|
STA ESTKH,X
|
|
JSR C0008
|
|
; 212: OLDTREES = @TREES1
|
|
DEX
|
|
LDA #<D0067
|
|
STA ESTKL,X
|
|
LDA #>D0067
|
|
STA ESTKH,X
|
|
LDY #$04
|
|
LDA ESTKL,X
|
|
STA (FRMP),Y
|
|
INY
|
|
LDA ESTKH,X
|
|
STA (FRMP),Y
|
|
; 213: NEWTREES = @TREES2
|
|
LDA #<D1831
|
|
STA ESTKL,X
|
|
LDA #>D1831
|
|
STA ESTKH,X
|
|
LDY #$02
|
|
LDA ESTKL,X
|
|
STA (FRMP),Y
|
|
INY
|
|
LDA ESTKH,X
|
|
STA (FRMP),Y
|
|
; 214:
|
|
; 215: FOR Y = 1 TO 40
|
|
LDA #$01
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
C0038:
|
|
LDY #$0D
|
|
LDA ESTKL,X
|
|
STA (FRMP),Y
|
|
DEX
|
|
LDA #$28
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
INX
|
|
LDA ESTKL-1,X
|
|
CMP ESTKL,X
|
|
LDA ESTKH-1,X
|
|
SBC ESTKH,X
|
|
BPL :+
|
|
JMP C0037
|
|
:
|
|
INC ESTKL,X
|
|
BNE :+
|
|
INC ESTKH,X
|
|
:
|
|
; 216: YROW = Y * 42
|
|
DEX
|
|
LDY #$0D
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
DEX
|
|
LDA #$2A
|
|
STA ESTKL,X
|
|
STY ESTKH,X
|
|
JSR MUL
|
|
LDY #$0A
|
|
LDA ESTKL,X
|
|
STA (FRMP),Y
|
|
INY
|
|
LDA ESTKH,X
|
|
STA (FRMP),Y
|
|
; 217: FOR X = 1 TO 40
|
|
LDA #$01
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
C0040:
|
|
LDY #$0C
|
|
LDA ESTKL,X
|
|
STA (FRMP),Y
|
|
DEX
|
|
LDA #$28
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
INX
|
|
LDA ESTKL-1,X
|
|
CMP ESTKL,X
|
|
LDA ESTKH-1,X
|
|
SBC ESTKH,X
|
|
BPL :+
|
|
JMP C0039
|
|
:
|
|
INC ESTKL,X
|
|
BNE :+
|
|
INC ESTKH,X
|
|
:
|
|
; 218: IF RND < 16384
|
|
JSR C0022
|
|
DEX
|
|
LDY #$00
|
|
STY ESTKL,X
|
|
LDA #$40
|
|
STA ESTKH,X
|
|
JSR ISLT
|
|
INX
|
|
LDA ESTKL-1,X
|
|
ORA ESTKH-1,X
|
|
BNE :+
|
|
JMP C0041
|
|
:
|
|
; 219: ^(OLDTREES + X + YROW) = TREE
|
|
DEX
|
|
LDY #$04
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
DEX
|
|
LDY #$0C
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
JSR ADD
|
|
DEX
|
|
LDY #$0A
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
JSR ADD
|
|
DEX
|
|
LDA #$04
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
JSR SB
|
|
; 220: FIN
|
|
C0041:
|
|
C0042:
|
|
; 221: NEXT
|
|
JMP C0040
|
|
C0039:
|
|
; 222: NEXT
|
|
INX
|
|
JMP C0038
|
|
C0037:
|
|
; 223: WHILE ^$C000 < 128
|
|
INX
|
|
C0043:
|
|
DEX
|
|
LDY #$00
|
|
STY ESTKL,X
|
|
LDA #$C0
|
|
STA ESTKH,X
|
|
JSR LB
|
|
DEX
|
|
LDA #$80
|
|
STA ESTKL,X
|
|
STY ESTKH,X
|
|
JSR ISLT
|
|
INX
|
|
LDA ESTKL-1,X
|
|
ORA ESTKH-1,X
|
|
BNE :+
|
|
JMP C0044
|
|
:
|
|
; 224: FOR Y = 1 TO 40
|
|
DEX
|
|
LDA #$01
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
C0046:
|
|
LDY #$0D
|
|
LDA ESTKL,X
|
|
STA (FRMP),Y
|
|
DEX
|
|
LDA #$28
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
INX
|
|
LDA ESTKL-1,X
|
|
CMP ESTKL,X
|
|
LDA ESTKH-1,X
|
|
SBC ESTKH,X
|
|
BPL :+
|
|
JMP C0045
|
|
:
|
|
INC ESTKL,X
|
|
BNE :+
|
|
INC ESTKH,X
|
|
:
|
|
; 225: YROW = Y * 42
|
|
DEX
|
|
LDY #$0D
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
DEX
|
|
LDA #$2A
|
|
STA ESTKL,X
|
|
STY ESTKH,X
|
|
JSR MUL
|
|
LDY #$0A
|
|
LDA ESTKL,X
|
|
STA (FRMP),Y
|
|
INY
|
|
LDA ESTKH,X
|
|
STA (FRMP),Y
|
|
; 226: FOR X = 1 TO 40
|
|
LDA #$01
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
C0048:
|
|
LDY #$0C
|
|
LDA ESTKL,X
|
|
STA (FRMP),Y
|
|
DEX
|
|
LDA #$28
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
INX
|
|
LDA ESTKL-1,X
|
|
CMP ESTKL,X
|
|
LDA ESTKH-1,X
|
|
SBC ESTKH,X
|
|
BPL :+
|
|
JMP C0047
|
|
:
|
|
INC ESTKL,X
|
|
BNE :+
|
|
INC ESTKH,X
|
|
:
|
|
; 227: OLDTREE = OLDTREES + X + YROW
|
|
DEX
|
|
LDY #$04
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
DEX
|
|
LDY #$0C
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
JSR ADD
|
|
DEX
|
|
LDY #$0A
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
JSR ADD
|
|
LDY #$08
|
|
LDA ESTKL,X
|
|
STA (FRMP),Y
|
|
INY
|
|
LDA ESTKH,X
|
|
STA (FRMP),Y
|
|
; 228: NEWTREE = NEWTREES + X + YROW
|
|
LDY #$02
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
DEX
|
|
LDY #$0C
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
JSR ADD
|
|
DEX
|
|
LDY #$0A
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
JSR ADD
|
|
LDY #$06
|
|
LDA ESTKL,X
|
|
STA (FRMP),Y
|
|
INY
|
|
LDA ESTKH,X
|
|
STA (FRMP),Y
|
|
; 229: WHEN ^OLDTREE
|
|
LDY #$08
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
LDY #$00
|
|
JSR LB
|
|
; 230: IS EMPTY
|
|
DEX
|
|
STY ESTKL,X
|
|
STY ESTKH,X
|
|
INX
|
|
LDA ESTKL-1,X
|
|
CMP ESTKL,X
|
|
BNE :+
|
|
LDA ESTKH-1,X
|
|
CMP ESTKH,X
|
|
BEQ :++
|
|
: JMP C0050
|
|
:
|
|
; 231: IF RND < 400
|
|
JSR C0022
|
|
DEX
|
|
LDA #$90
|
|
STA ESTKL,X
|
|
LDA #$01
|
|
STA ESTKH,X
|
|
LDY #$00
|
|
JSR ISLT
|
|
INX
|
|
LDA ESTKL-1,X
|
|
ORA ESTKH-1,X
|
|
BNE :+
|
|
JMP C0051
|
|
:
|
|
; 232: ^NEWTREE = TREE
|
|
DEX
|
|
LDY #$06
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
DEX
|
|
LDA #$04
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
JSR SB
|
|
; 233: ELSE
|
|
JMP C0052
|
|
C0051:
|
|
; 234: ^NEWTREE = EMPTY
|
|
DEX
|
|
LDY #$06
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
DEX
|
|
LDY #$00
|
|
STY ESTKL,X
|
|
STY ESTKH,X
|
|
JSR SB
|
|
; 235: FIN
|
|
C0052:
|
|
; 236: IS TREE
|
|
JMP C0049
|
|
C0050:
|
|
DEX
|
|
LDA #$04
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
INX
|
|
LDA ESTKL-1,X
|
|
CMP ESTKL,X
|
|
BNE :+
|
|
LDA ESTKH-1,X
|
|
CMP ESTKH,X
|
|
BEQ :++
|
|
: JMP C0053
|
|
:
|
|
; 237: IF RND < 10 OR BYFIRE(OLDTREE)
|
|
JSR C0022
|
|
DEX
|
|
LDA #$0A
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
JSR ISLT
|
|
DEX
|
|
LDY #$08
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
JSR C0024
|
|
JSR LOR
|
|
INX
|
|
LDA ESTKL-1,X
|
|
ORA ESTKH-1,X
|
|
BNE :+
|
|
JMP C0054
|
|
:
|
|
; 238: ^NEWTREE = FIRE
|
|
DEX
|
|
LDY #$06
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
DEX
|
|
LDA #$0D
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
JSR SB
|
|
; 239: ELSE
|
|
JMP C0055
|
|
C0054:
|
|
; 240: ^NEWTREE = TREE
|
|
DEX
|
|
LDY #$06
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
DEX
|
|
LDA #$04
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
JSR SB
|
|
; 241: FIN
|
|
C0055:
|
|
; 242: IS FIRE
|
|
JMP C0049
|
|
C0053:
|
|
DEX
|
|
LDA #$0D
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
INX
|
|
LDA ESTKL-1,X
|
|
CMP ESTKL,X
|
|
BNE :+
|
|
LDA ESTKH-1,X
|
|
CMP ESTKH,X
|
|
BEQ :++
|
|
: JMP C0056
|
|
:
|
|
; 243: ^NEWTREE = EMPTY
|
|
DEX
|
|
LDY #$06
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
DEX
|
|
LDY #$00
|
|
STY ESTKL,X
|
|
STY ESTKH,X
|
|
JSR SB
|
|
; 244: WEND
|
|
JMP C0049
|
|
C0056:
|
|
C0049:
|
|
; 245: GRCOLOR(^NEWTREE)
|
|
LDY #$06
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
LDY #$00
|
|
JSR LB
|
|
JSR C0004
|
|
; 246: GRPLOT(X - 1, Y - 1)
|
|
DEX
|
|
LDY #$0C
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
DEX
|
|
LDA #$01
|
|
STA ESTKL,X
|
|
STY ESTKH,X
|
|
JSR SUB
|
|
DEX
|
|
LDY #$0D
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
LDY #$00
|
|
STY ESTKH,X
|
|
DEX
|
|
LDA #$01
|
|
STA ESTKL,X
|
|
STY ESTKH,X
|
|
JSR SUB
|
|
JSR C0006
|
|
; 247: NEXT
|
|
JMP C0048
|
|
C0047:
|
|
; 248: NEXT
|
|
INX
|
|
JMP C0046
|
|
C0045:
|
|
; 249: NEWTREES =, OLDTREES = OLDTREES, NEWTREES
|
|
LDY #$04
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
DEX
|
|
LDY #$02
|
|
LDA (FRMP),Y
|
|
STA ESTKL,X
|
|
INY
|
|
LDA (FRMP),Y
|
|
STA ESTKH,X
|
|
LDY #$04
|
|
LDA ESTKL,X
|
|
STA (FRMP),Y
|
|
INY
|
|
LDA ESTKH,X
|
|
STA (FRMP),Y
|
|
INX
|
|
LDY #$02
|
|
LDA ESTKL,X
|
|
STA (FRMP),Y
|
|
INY
|
|
LDA ESTKH,X
|
|
STA (FRMP),Y
|
|
; 250: LOOP
|
|
INX
|
|
JMP C0043
|
|
C0044:
|
|
; 251: DROP ^$C010
|
|
DEX
|
|
LDA #$10
|
|
STA ESTKL,X
|
|
LDA #$C0
|
|
STA ESTKH,X
|
|
LDY #$00
|
|
JSR LB
|
|
; 252: END
|
|
INX
|
|
JMP LEAVE
|
|
; 253:
|
|
; 254: PRSTR(@HELLOMSG)
|
|
START: ; JSR INTERP
|
|
DB $26,<D0000,>D0000 ; LA D0000
|
|
DB $54,<C0010,>C0010 ; CALL C0010
|
|
; 255: WHILE ^$C000 < 128
|
|
C0058:
|
|
DB $2C,$00,$C0 ; CW 49152
|
|
DB $60 ; LB
|
|
DB $2A,$80 ; CB 128
|
|
DB $46 ; ISLT
|
|
DB $4C,<C0059,>C0059 ; SKPFLS C0059
|
|
; 256: RNDNUM = RNDNUM + 1
|
|
DB $6A,<D3595,>D3595 ; LAW D3595
|
|
DB $2A,$01 ; CB 1
|
|
DB $02 ; ADD
|
|
DB $7A,<D3595,>D3595 ; SAW D3595
|
|
; 257: LOOP
|
|
DB $50,<C0058,>C0058 ; SKIP C0058
|
|
C0059:
|
|
; 258: RANDOMIZE(RNDNUM)
|
|
DB $6A,<D3595,>D3595 ; LAW D3595
|
|
DB $54,<C0020,>C0020 ; CALL C0020
|
|
; 259: DROP ^$C010
|
|
DB $2C,$10,$C0 ; CW 49168
|
|
DB $60 ; LB
|
|
DB $30 ; DROP
|
|
; 260: GRMODE
|
|
DB $54,<C0018,>C0018 ; CALL C0018
|
|
; 261: HOME
|
|
DB $54,<C0014,>C0014 ; CALL C0014
|
|
; 262: GOTOXY(10,22)
|
|
DB $2A,$0A ; CB 10
|
|
DB $2A,$16 ; CB 22
|
|
DB $54,<C0016,>C0016 ; CALL C0016
|
|
; 263: PRSTR(@EXITMSG)
|
|
DB $26,<D0026,>D0026 ; LA D0026
|
|
DB $54,<C0010,>C0010 ; CALL C0010
|
|
; 264: FORESTFIRE
|
|
DB $54,<C0035,>C0035 ; CALL C0035
|
|
; 265: TEXTMODE
|
|
DB $54,<C0012,>C0012 ; CALL C0012
|
|
; 266: HOME
|
|
DB $54,<C0014,>C0014 ; CALL C0014
|
|
; 267: PRSTR(@GOODBYE)
|
|
DB $26,<D0049,>D0049 ; LA D0049
|
|
DB $54,<C0010,>C0010 ; CALL C0010
|
|
; 268: DONE
|
|
DB $5C ; RET
|