.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 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 ; 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 ; 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 ; 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 ; 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 ; 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 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 ESTKH,X DEX LDA #$E4 STA ESTKL,X LDA #$06 STA ESTKH,X JSR C0008 ; 212: OLDTREES = @TREES1 DEX 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 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 ; LA D0000 DB $54,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 ; SKPFLS C0059 ; 256: RNDNUM = RNDNUM + 1 DB $6A,D3595 ; LAW D3595 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $7A,D3595 ; SAW D3595 ; 257: LOOP DB $50,C0058 ; SKIP C0058 C0059: ; 258: RANDOMIZE(RNDNUM) DB $6A,D3595 ; LAW D3595 DB $54,C0020 ; CALL C0020 ; 259: DROP ^$C010 DB $2C,$10,$C0 ; CW 49168 DB $60 ; LB DB $30 ; DROP ; 260: GRMODE DB $54,C0018 ; CALL C0018 ; 261: HOME DB $54,C0014 ; CALL C0014 ; 262: GOTOXY(10,22) DB $2A,$0A ; CB 10 DB $2A,$16 ; CB 22 DB $54,C0016 ; CALL C0016 ; 263: PRSTR(@EXITMSG) DB $26,D0026 ; LA D0026 DB $54,C0010 ; CALL C0010 ; 264: FORESTFIRE DB $54,C0035 ; CALL C0035 ; 265: TEXTMODE DB $54,C0012 ; CALL C0012 ; 266: HOME DB $54,C0014 ; CALL C0014 ; 267: PRSTR(@GOODBYE) DB $26,D0049 ; LA D0049 DB $54,C0010 ; CALL C0010 ; 268: DONE DB $5C ; RET