Jump to content

Forest fire: Difference between revisions

less APPLE II specific, more generic and Commodore 64
(less APPLE II specific, more generic and Commodore 64)
Line 18:
=={{header|6502 Assembly}}==
<lang asm> ORG $4357
; SYS 17239 or CALL 17239
;
SEED0 = 6
SEED1 = 7
SEED2 = 8
 
PLOT = $F800
CLRSCR = $F832
GBASCALC = $F847
GBASL = $26
GBASH = $27
H2 = $2C
V2 = $2D
COLOR = $30
 
EMPTY2 = $00
Line 36 ⟶ 24:
FIRE2 = $99
 
; common available zero page
tablelo = $033C
 
tablehi = tablelo+24
 
GBASL = $26
GBASH = $27
 
SEED2 = $28
SEED0 = $29
SEED1 = $2A
 
H2 = $2B
V2 = $2C
PLOTC = $2D
COLOR = $2E
PAGE = $2F
TOPL = $30
TOPH = $31
MIDL = $32
MIDH = $33
BTML = $34
BTMH = $35
PLOTL = $36
PLOTH = $37
lastzp = $38
 
tablelo = $5000
tablehi = tablelo+25
 
JSR START
LDX #23 ; y coord
STA V2
LDA #$4C ; JMP instruction
STA SEED2 ; temporary JMP
LDX #$00 ; y coord
table:
TXA
JSR SEED2 ; temporary JMP GBASCALC
LDA GBASL
STA tablelo,X
LDA GBASH
STA tablehi,X
LDY #$00
DEX
TYA
BPL table
clrline:
STA (GBASL),Y
INY
CPY #40
BNE clrline
 
INX
CPX V2
BNE table
 
JSR sseed0
JSR sseed2
 
LDX #$60
STX $F9PAGE
STX $01TOPH
LDY #$00
STY $00TOPL
TYA
zero: STA ($00TOPL),Y
INY
BNE zero
INX
STX $01TOPH
CPX #$80
BNE zero
 
BIT $C056 ; low resolution
BIT $C052 ; full screen
BIT $C054 ; page one
BIT $C050 ; graphics
JSR CLRSCR ; clear entire lores screen
loop3:
LDX #0
STX $0TOPL
LDA #41
STA $2MIDL
STA $FEPLOTL
LDA #83
STA $4BTML
LDA $F9PAGE
STA $01TOPH
STA $03MIDH
STA $05BTMH
EOR #$10
STA $FFPLOTH
STA $F9PAGE
loop2:
TXA
Line 94 ⟶ 117:
BCC over2
ADC #$E0
over2: STA $2EPLOTC ; PLOT...
LDA tablelo,Y ; lookup instead of GBASCALC
STA $26GBASL
LDA tablehi,Y
STA $27GBASH
; PLP ; continue PLOT
LDY #$01 ; x coord
loop1:
STY H2
LDA ($02MIDL),Y
STA ($FEPLOTL),Y
BEQ empty
BPL tree
LDA #EMPTY2
doplot: LDY H2
STA ($FEPLOTL),Y
DEY
EOR ($26GBASL),Y
AND $2EPLOTC
EOR ($26GBASL),Y
STA ($26GBASL),Y
noplot:
LDY H2
Line 120 ⟶ 143:
CPY #41
BNE loop1
LDA $2MIDL
STA $0TOPL
LDA $3MIDH
STA $1TOPH
LDA $4BTML
STA $2MIDL
STA $FEPLOTL
CLC
ADC #42
STA $4BTML
LDA $5BTMH
EOR #$10
STA $FFPLOTH
EOR #$10
STA $3MIDH
ADC #$00
STA $5BTMH
LDX V2
INX
CPX #48
BNE loop2
JSR QUIT
BIT $C000
; BPL loop3
BMI quit
JMP loop3
quit: BIT $C010
BIT $C051
RTS
empty:
DEC SEED2
BNE noplot
JSR sseed2 ; probability f
LDA #$65 ; 1 in 101 (prime)
STA SEED2
LDA #TREE2
BNE doplot
Line 159 ⟶ 176:
BNE doplot
tree:
DEC SEED0 ; 1 in 10007 (prime)
BNE check
DEC SEED1
BNE check
JSR sseed0 ; probability p
LDA #$17
STA SEED0
LDA #$27
STA SEED1
BNE ignite
check:
LDA ($00TOPL),Y ; n
ORA ($04BTML),Y ; s
DEY
ORA ($00TOPL),Y ; nw
ORA ($02MIDL),Y ; w
ORA ($04BTML),Y ; sw
INY
INY
ORA ($00TOPL),Y ; ne
ORA ($02MIDL),Y ; e
ORA ($04BTML),Y ; se
BMI ignite
BPL noplot
 
; tablelo:
sseed0:
; tablehi = tablelo+24
LDA #$17 ; 1 in 10007 (prime)
STA SEED0
LDA #$27
STA SEED1
RTS
sseed2:
LDA #$65 ; 1 in 101 (prime)
STA SEED2
RTS
 
default:
LDA #<GBASCALC ; setup GBASCALC
STA SEED0
LDA #>GBASCALC
STA SEED1
LDA #25 ; screen rows
RTS
GBASCALC:
LDY #$00
STY GBASH
ASL
ASL
ASL
STA GBASL
ASL
ROL GBASH
ASL
ROL GBASH
ADC GBASL
STA GBASL
LDA GBASH
ADC #$04
STA GBASH
RTS
 
QUIT:
LDA $E000
 
; APPLE II
 
CMP #$4C
BNE c64quit
 
BIT $C000 ; apple ii keypress?
BPL CONTINUE ; no keypressed then continue
BIT $C010 ; clear keyboard strobe
BIT $C051 ; text mode
 
; end APPLE II specific
 
ABORT:
PLA
PLA
 
LDX #GBASL
restorzp:
LDA $5100,X
STA $00,X
INX
CPX #lastzp
BNE restorzp
 
CONTINUE:
RTS
 
START:
LDX #GBASL
savezp:
LDA $00,X
STA $5100,X
INX
CPX #lastzp
BNE savezp
 
; machine ???
 
LDA $E000 ; terribly unreliable, oh well
 
; APPLE II
 
CMP #$4C ; apple ii?
BNE c64start ; nope, try another
 
BIT $C056 ; low resolution
BIT $C052 ; full screen
BIT $C054 ; page one
BIT $C050 ; graphics
; GBASCALC = $F847
LDA #$47
STA SEED0
LDA #$F8
STA SEED1
LDA #24 ; screen rows
RTS
 
; end APPLE II specific
 
; COMMODORE 64 specific
 
c64quit:
 
; COMMODORE 64
 
CMP #$85 ; commodore 64?
BNE CONTINUE ; nope, default to no keypress
 
LDA $C6 ; commodore keyboard buffer length
BEQ CONTINUE ; no keypressed then continue
 
LDA #$00
STA $C6
LDA $D016 ; Screen control register #2
AND #$EF ; Bit #4: 0 = Multicolor mode off.
STA $D016
LDA #21 ; default character set
STA $D018
BNE ABORT
 
c64start:
 
CMP #$85 ; commodore 64?
BEQ c64yes ; yes
JMP default ; no, default to boringness
c64yes:
LDA #$00 ; black
STA $D020 ; border
LDA #$00 ; black
STA $D021 ; background
LDA #$05 ; dark green
STA $D022 ; Extra background color #1
LDA #$08 ; orange
STA $D023 ; Extra background color #2
LDA $D016 ; Screen control register #2
ORA #$10 ; Bit #4: 1 = Multicolor mode on.
STA $D016
 
LDA #$30 ; 0011 0000 $3000 charset page
STA PLOTH
LSR
LSR
STA PLOTC ; 0000 1100 #$0C
; 53272 $D018
; POKE 53272,(PEEK(53272)AND240)+12: REM SET CHAR POINTER TO MEM. 12288
; Bits #1-#3: In text mode, pointer to character memory
; (bits #11-#13), relative to VIC bank, memory address $DD00
; %110, 6: $3000-$37FF, 12288-14335.
LDA $D018
AND #$F0
ORA PLOTC
STA $D018
; setup nine characters
 
; 00- 00 00
LDA #$00 ; chr(0) * 8
STA PLOTL
; --- LDA #$00 ; already zero
TAX ; LDX #$00
JSR charset
 
; 04- 00 55
LDA #32 ; chr(4) * 8
STA PLOTL
LDA #$55
; LDX #$00 ; already zero
JSR charset
 
; 09- 00 AA
LDA #72 ; chr(9) * 8
STA PLOTL
LDA #$AA
; LDX #$00 ; already zero
JSR charset
 
; 40- 55 00
LDA PLOTH ; 512 = chr(64) * 8
CLC
ADC #$02
STA PLOTH
LDX #$00
STX PLOTL
LDA #$00
LDX #$55
JSR charset
 
; 44- 55 55
LDA #32 ; chr(68) * 8
STA PLOTL
TXA ; LDA #$55
; LDX #$55 ; already 55
JSR charset
 
; 49- 55 AA
LDA #72 ; chr(73) * 8
STA PLOTL
LDA #$AA
; LDX #$55 ; already 55
JSR charset
 
; 90- AA 00
LDA PLOTH ; chr(144) * 8
CLC
ADC #$02
STA PLOTH
LDA #128
STA PLOTL
LDA #$00
LDX #$AA
JSR charset
 
; 94- AA 55
LDA #160 ; chr(148) * 8
STA PLOTL
LDA #$55
; LDX #$AA ; already AA
JSR charset
 
; 99- AA AA
LDA #200 ; chr(153) * 8
STA PLOTL
TXA ; LDA #$AA
; LDX #$AA ; already AA
JSR charset
JMP default
charset:
LDY #$00
chartop:
STA (PLOTL),Y
INY
CPY #$04
BNE chartop
TXA
charbtm:
STA (PLOTL),Y
INY
CPY #$08
BNE charbtm
RTS
 
; end COMMODORE 64 specific
 
</lang>
 
413

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.