420 lines
5.4 KiB
Text
420 lines
5.4 KiB
Text
ORG $4357
|
|
; SYS 17239 or CALL 17239
|
|
|
|
EMPTY2 = $00
|
|
TREE2 = $44
|
|
FIRE2 = $99
|
|
|
|
; common available zero page
|
|
|
|
|
|
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
|
|
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
|
|
TYA
|
|
clrline:
|
|
STA (GBASL),Y
|
|
INY
|
|
CPY #40
|
|
BNE clrline
|
|
|
|
INX
|
|
CPX V2
|
|
BNE table
|
|
|
|
JSR sseed0
|
|
JSR sseed2
|
|
|
|
LDX #$60
|
|
STX PAGE
|
|
STX TOPH
|
|
LDY #$00
|
|
STY TOPL
|
|
TYA
|
|
zero: STA (TOPL),Y
|
|
INY
|
|
BNE zero
|
|
INX
|
|
STX TOPH
|
|
CPX #$80
|
|
BNE zero
|
|
|
|
loop3:
|
|
LDX #0
|
|
STX TOPL
|
|
LDA #41
|
|
STA MIDL
|
|
STA PLOTL
|
|
LDA #83
|
|
STA BTML
|
|
LDA PAGE
|
|
STA TOPH
|
|
STA MIDH
|
|
STA BTMH
|
|
EOR #$10
|
|
STA PLOTH
|
|
STA PAGE
|
|
loop2:
|
|
TXA
|
|
STX V2
|
|
LSR ; F800 PLOT-like...
|
|
; PHP ; F801
|
|
TAY ; save A in Y without touching C
|
|
LDA #$0F
|
|
BCC over2
|
|
ADC #$E0
|
|
over2: STA PLOTC ; PLOT...
|
|
LDA tablelo,Y ; lookup instead of GBASCALC
|
|
STA GBASL
|
|
LDA tablehi,Y
|
|
STA GBASH
|
|
; PLP ; continue PLOT
|
|
LDY #$01 ; x coord
|
|
loop1:
|
|
STY H2
|
|
LDA (MIDL),Y
|
|
STA (PLOTL),Y
|
|
BEQ empty
|
|
BPL tree
|
|
LDA #EMPTY2
|
|
doplot: LDY H2
|
|
STA (PLOTL),Y
|
|
DEY
|
|
EOR (GBASL),Y
|
|
AND PLOTC
|
|
EOR (GBASL),Y
|
|
STA (GBASL),Y
|
|
noplot:
|
|
LDY H2
|
|
INY
|
|
CPY #41
|
|
BNE loop1
|
|
LDA MIDL
|
|
STA TOPL
|
|
LDA MIDH
|
|
STA TOPH
|
|
LDA BTML
|
|
STA MIDL
|
|
STA PLOTL
|
|
CLC
|
|
ADC #42
|
|
STA BTML
|
|
LDA BTMH
|
|
EOR #$10
|
|
STA PLOTH
|
|
EOR #$10
|
|
STA MIDH
|
|
ADC #$00
|
|
STA BTMH
|
|
LDX V2
|
|
INX
|
|
CPX #48
|
|
BNE loop2
|
|
JSR QUIT
|
|
JMP loop3
|
|
empty:
|
|
DEC SEED2
|
|
BNE noplot
|
|
JSR sseed2 ; probability f
|
|
LDA #TREE2
|
|
BNE doplot
|
|
ignite:
|
|
LDA #FIRE2
|
|
BNE doplot
|
|
tree:
|
|
DEC SEED0
|
|
BNE check
|
|
DEC SEED1
|
|
BNE check
|
|
JSR sseed0 ; probability p
|
|
BNE ignite
|
|
check:
|
|
LDA (TOPL),Y ; n
|
|
ORA (BTML),Y ; s
|
|
DEY
|
|
ORA (TOPL),Y ; nw
|
|
ORA (MIDL),Y ; w
|
|
ORA (BTML),Y ; sw
|
|
INY
|
|
INY
|
|
ORA (TOPL),Y ; ne
|
|
ORA (MIDL),Y ; e
|
|
ORA (BTML),Y ; se
|
|
BMI ignite
|
|
BPL noplot
|
|
|
|
sseed0:
|
|
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
|