VM02/plasma2/fire.s

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