Homebrew:Lights Out
From veswiki
Lights Out is a homebrew game written by Sean Riddle. From the website:
There is a 5x5 grid of colored squares; you are trying to make them all green. You move the cursor around and push down to toggle the current square as well as the neighbors above, below, left and right. There are 64 patterns included, and after they are all played in random order, I invert red/green so that there are 64 more. I also added a few variations- game 2 uses a wrap-around grid, so that if you click on a square on the edge, the light on the opposite side will toggle as if you were playing on a torus. Note: not all of the 64 puzzles are solvable in this mode! Game 3 only lets you click on lights that are red. All the patterns are still solvable, but they usually take more clicks. You can also select mode 2, in which only the neighboring lights are toggled, not the one clicked on; mode 3, where the pattern is an X; or mode 4, X but the center light doesn't toggle. Again, not all of the built-in patterns are solvable in these modes.
See Also
http://members.cox.net/seanriddle/chanf.html
Here you can get the game as of 6/16/2004: Download binary.
Code
;lights out
;by Sean Riddle
;6/2004
;members.cox.net/seanriddle
;for the Channel F multigame
;it will play in MESS
;it requires MG RAM at $2800 (could be rewritten to use regs only)
;instructions:
;make all lights green
;l/r/u/d moves cursor
;push down toggles lights
;pull up replays current pattern
;when complete, the count of moves is shown
;then up replays pattern, down goes to next random
;after all 64 patterns are played randomly, the complements (red<->green) are played
;game 1 is normal - all included patterns are solvable
;game 2 is on a torus (wrap-around) !!! not all included patterns are solvable on a torus
;game 3 is lit-only (only lit buttons can be pressed)
;mode 1 toggles self and u/d/l/r neighbors - + pattern
;mode 2 only toggles u/d/l/r neighbors !!! not all included patterns are solvable in this mode
;mode 3 toggles self and nw/ne/sw/se neighbors - X pattern
;mode 4 toggles nw/ne/sw/ne - X not self
;todo:
;build game 2 or mode 2 patterns from random legal moves
;add random legal moves to patterns to create more
;rotate, invert patterns randomly for more variation
;three-state red, green, gray
;L modes
;more symbols-greek, smilies, arcade,
;currently 12 bytes short of 2K, but there's lots more room
;egg - certain game/mode combo, solve certain pattern in minimum moves
;BIOS calls
clrscrn: equ $00d0 ;uses r31
delay: equ $008f
pushk: equ $0107 ;used to allow more subroutine stack space
popk: equ $011e
drawchar: equ $0679
array: equ $2800 ;use Schach RAM to hold current state of 25 lights
history: equ $2900 ;patterns we have already used, so we don't repeat
temp4: equ $2a00 ;temp storage of 4 bytes
org $800
CartridgeStart: db $55 ; valid cart indicator
NOP ; unused byte
CartridgeEntry:
LIS $0 ; init the h/w
OUTS 1
OUTS 4
OUTS 5
OUTS 0
lisu 4 ;r32=complement flag
lisl 0
lr (IS),a
LI $d6 ;
LR $3,A ; clear screen to gray
PI clrscrn ;
li $11
lisu 3 ;init R30 game 1, mode 1
lisl 6
lr (IS),a
li $4a ;display G? prompt
lr 0,a
pi prompt
lr a,4
sl 4
lisu 3 ;r30 low nibble = game
lisl 6
lr (IS),a ;game 1 - normal, game 2 - wraparound; game 3 - lit only
pi prompts ;display S?/M? ; mode 1 normal, mode 2 no center toggle
clrhist: ;clear history of patterns presented
dci history
li $41 ; # of patterns +1
lr 0,a
clrhist2:
lis 0
st
ds 0
bf 4,clrhist2
nextpat:
lisu 2 ;random #
lisl 5
lr a,(IS)
lisu 3
lisl 5
as (IS) ;add to current pattern...
ni $3f ;...mod 64...
lr (IS),a ;...to get next pattern
dci history ;check to see if we've already done this one
adc
lr q,dc
lm
ni $ff
bt 4,unusedpat ;not yet used, display it
;pattern already used, check for unused from top
;if not found, clear array and start over
dci history
checknext:
lm
ni $ff
bf 4,checknext ;will always complete because we zeroed 1 extra byte in clrhist
lr q,dc
lr a,ql
ai $ff ;lm moved us 1 past
lr ql,a
ci $40 ;all done?
bf 4,foundone
li $ff
lisu 4 ; set flag to start complements (random/rotations later)
lisl 0
lr (IS),a
bf 0,clrhist ;no empty slots, start over
foundone:
lr (IS),a ;update the current pattern
unusedpat:
lr dc,q ;mark it used
li $ff
st
replay:
lisu 3 ;current pattern # in r29
lisl 5
lr a,(IS)
dci pats
adc ; add cur pat to data pointer 5 times to get to the pat data
adc
adc
adc
adc
getpat: lisu 2 ;read bit pattern into regs 16-20
lisl 0
lis 5
lr 1,a
getpatloop:
lm
lr (is)+,a
ds 1
bf 4,getpatloop
dci array ;put byte pattern into RAM
lis 5
lr 2,a
lisu 4 ;first time through 0, next time FF
lisl 0
lr a,(IS)
lr 3,a ;temp
lisu 2
lisl 0
storepatloop2:
lis 5
lr 1,a
lr a,(is)+
storepatloop:
lr 0,a
ni $ff
lr a,3
bf 1,onebit
bf 0,storepat
onebit:
com
storepat:
st
lr a,0
sl 1
lr 0,a
ds 1
bf 4,storepatloop
ds 2
bf 4,storepatloop2
lis 0 ;init variables to 0
lisu 3
lisl 0
lr (IS)+,a ;r24=row (3:0)
lr (IS)+,a ;r25=col (3:1)
lr (IS)+,a ;r26=cursor (3:2)
lr (IS)+,a ;r27=array index (3:3)
lr (IS)+,a ;r28=parameter to toggle sub (3:4)
lisu 2
lisl 6
lr (IS)+,a ;r22=press counter lo (2:6)
lr (IS)+,a ;r23=press counter hi (2:7)
dci grid ;draw the grid
pi drawlines
;draw lights
li 24 ;array index
lisu 3
lisl 3
lr (IS),a
sqloop:
pi drawlight
lisu 3
lisl 3
lr a,(IS)
ai $ff
lr (IS),a
bt 2,sqloop ;branch if >= 0
dci currows
lm
lr 5,a ;upper row
dci curcols
lm
lr 4,a ;left col
dci cursor ;start with the cursor in light 0
pi square
mainloop:
pi readhc
lr 0,a ;save controller input
lisu 2 ;inc random seed
lisl 5
lr a,(IS)
inc
lr (IS),a
; redraw current square without cursor
lisu 3
lisl 2
lr a,(IS)+
lr (IS),a
pi drawlight
lr a,0
ni $0c
bt 4,notupdn
ci $08
bf 4,down
lisu 3 ;up
lisl 0 ;r24 is row
ds (IS) ;prev row
bf 2,minrow ;>=0?
updcurx:
jmp updcur
minrow:
lis 4
lr (IS),a
bf 0,updcurx
down:
lisu 3
lisl 0
lr a,(IS)
inc ;next row
lr (IS),a
ci 5 ;too far?
bt 4,maxrow
bf 0,updcurx
maxrow:
lis 0
lr (IS),a
bf 0,updcurx
notupdn:
lr a,0
ni $03
bt 4,notlfrt
ci $02
bf 4,right
lisu 3 ;left
lisl 1 ;r25 is col
ds (IS) ;prev col
bf 2,prevcol ;>=0?
bf 0,updcurx
prevcol:
lis 4
lr (IS),a
bf 0,updcurx
right:
lisu 3
lisl 1
lr a,(IS)
inc ;next col
lr (IS),a
ci 5 ;too far?
bf 4,updcurx
lis 0
lr (IS),a
bf 0,updcurx
notlfrt:
lr a,0
ni $c0
bt 4,mainloop
ci $80
bt 4,pushdown
jmp replay ;pull up replays current pattern
pushdown:
lisu 3
lisl 6
lr a,(IS)
ni $f0
ci $40 ;if game=3, can only press lit buttons
bf 4,allowpress
lisu 3
lisl 2 ; get cursor loc
lr a,(IS)
dci array
adc
lm
ni $ff
bf 4,allowpress
;make a bad sound
li $3f
lr 1,a
sndloop:
li $80
outs 5
lis 1
lr 5,a
pi delay
lis 0
outs 5
ds 1
bf 4,sndloop
jmp updcur
allowpress:
lisu 2 ;inc press counter
lisl 6
lis 1
ai $66
asd (IS) ;thanks Fredric!
lr (IS)+,a
bf 2,nocarry
lis 1
ai $66
asd (IS)
lr (IS),a
nocarry:
lisu 3
lisl 6 ;if mode=2 or 4, no center toggle
lr a,(IS)
ni $f ;mode in low nibble
ci $2
bt 4,nocenter
ci $8
bt 4,nocenter
lisu 3
lisl 2 ; get cursor loc
lr a,(IS)
lisl 4
lr (IS),a
pi toggle ;toggle center light
nocenter:
dci plustable
lisu 3
lisl 6 ;if mode=3 or 4, X toggle
lr a,(IS)
ni $f ;mode in low nibble
ci $4
bt 4,xtoggle ;mode 3, X toggle
ci $8
bt 4,xtoggle ;mode 4, X toggle
bf 0,dotoggle
xtoggle:
dci xtable
dotoggle:
lisl 2
lr a,(IS) ;get cursor loc
as (IS)
as (IS)
as (IS) ;*4 for table offset
adc
lm ;get 4 neighbors
lr 0,a
lm
lr 1,a
lm
lr 2,a
lm
dci temp4 ;store them temporarily
st ;t4
lr a,2
st ;t3
lr a,1
st ;t2
lr a,0
st ;t1
dci temp4 ;toggle each neighbor
li 3
adc
pi togglem ;t1
dci temp4
lm
lm
pi togglem ;t2
dci temp4
lm
pi togglem ;t3
dci temp4
pi togglem ;t4
updcur:
lisu 3 ;calc index from row and col
lisl 0
lr a,(IS)
as (IS)
as (IS)
as (IS)
as (IS) ;row * 5
lisu 3
lisl 1
as (IS)+ ;add in col
lr (IS),a
dci currows ;get row and column to draw cursor
lisu 3
lisl 0
lr a,(IS)+
adc
lm
lr 5,a
dci curcols
lr a,(IS)
adc
lm
lr 4,a
dci cursor ;draw the cursor
pi square
LI $3F ;debounce by pausing a while
LR 5,A
pi delay
;check for all green (win)
dci array
li 24 ;array index
lisu 3
lisl 3
lr (IS),a
chkloop:
lm
ni $ff
bt 4,lighton
jmp mainloop ;not a win
lighton:
lisu 3
lisl 3
lr a,(IS)
ai $ff
lr (IS),a
bt 2,chkloop
;made it here, all off
;make a winning sound
li $3f
lr 1,a
snd2loop:
li $40
outs 5
lr a,1
snd2loopa:
inc
bf 4,snd2loopa
lis 0
outs 5
ds 1
bf 4,snd2loop
li 32 ;draw 2 concentric squares
lr 4,a
li 18
lr 5,a
dci winsq1
pi square
li 34
lr 4,a
li 20
lr 5,a
dci winsq2
pi square
;print # of moves from r23/22 (2:7/6)
li $1e ;row
lr 2,a
lisu 2 ;1000s digit
lisl 7
lr a,(IS)
sr 4
bt 4,lt1000
oi $40
lr 0,a
li $2a
lr 1,a
pi drawchar
bf 0,d100
lt1000:
li $2c
lr 1,a
d100:
lr a,1
inc
lr 1,a
lisu 2 ;100s digit
lisl 7
lr a,(IS)
ni $f
bf 4,gt100
lr a,(IS) ;print 0 if x0yz where x > 0
ni $ff
bt 4,lt100
lis 0
gt100:
oi $40
lr 0,a
pi drawchar
bf 0,d10
lt100:
li $30
lr 1,a
d10:
lr a,1
inc
lr 1,a
lisu 2 ;10s digit
lisl 6
lr a,(IS)
sr 4
bf 4,gt10
lisl 7 ;print 0 if xy0z where x or y > 0
lr a,(IS)
ni $ff
bt 4,lt10
lis 0
gt10:
oi $40
lr 0,a
pi drawchar
bf 0,d1
lt10:
li $34
lr 1,a
d1:
lr a,1
inc
lr 1,a
lisu 2 ;1s digit
lisl 6
lr a,(IS)
ni $f
oi $40
lr 0,a
pi drawchar
waitupdn:
pi readhc ;wait for hc up/down
ni $c0
bt 4,waitupdn
ni $80
bt 4,redo
jmp nextpat ;down - get next random pattern
redo:
lisu 3
lisl 6
lr a,(IS)
ci $41
bf 4,replay2
lisl 5
lr a,(IS)
ci 51
bf 4,replay2
lisu 2
lisl 7
lr a,(IS)-
ci 0
bf 4,replay2
lr a,(IS)
ci $18
bf 4,replay2
LI $d6
LR $3,A
PI clrscrn
dci blitparm
pi blit
li $3f
lr 1,a
snd3loop:
li $40
outs 5
li $1
lr 5,a
pi delay
lis 0
outs 5
ds 1
bf 4,snd3loop
pi readhc
LI $d6
LR $3,A
PI clrscrn
jmp nextpat
replay2:
jmp replay ;up - replay current pattern
readhc: ;wait until one of the hand controllers is moved
lis 0
outs 0
lis 0
outs 4
ins 4
com ;un-invert port data
ni $cf ;mask off twists, since we don't use them
bf 4,gothc
outs 1
ins 1
com
ni $cf
bt 4,readhc
gothc: pop
togglem: ;change a square (index in memory) from red to green or vice versa
lr k,p
pi pushk
lm
lr 0,a
ni $80 ;if high bit set, then this was a wrap
bt 4,notwrapped
lisu 3
lisl 6 ;if game=$2x, allow wrap-around
lr a,(IS)
ni $f0 ;mode in low nibble
ci $20
bf 4,toggleexit2 ;no wrap allowed
notwrapped:
lr a,0
ni $7f ;strip off "wrapped" bit
lisu 3
lisl 4
lr (IS),a
bf 0,toggle2
toggle: ;change a square (index in r28) from red to green or vice versa
lr k,p
pi pushk
lisu 3
lisl 4
lr a,(IS)
toggle2:
dci array
adc
lm
ni $ff
lr a,(IS)
dci array
adc
bt 4,notset
lis 0
bf 0,toggleexit
notset:
li $ff
toggleexit:
st
lisu 3
lisl 4
lr a,(IS)-
lr (IS),a
pi drawlight
toggleexit2:
pi popk
pk
square: ;draw a square
; dci to color,width,height
;r5=upper row
;r4=left col
; uses r2,r3,r6
lr k,p
pi pushk
lm
outs 1 ;set the color
lr a,5
com
outs 5 ;set the row
lm ;
lr 5,a ;save the width
lm
lr 3,a ;store the height
squarev:
lr a,4
lr 2,a ;save col
lr a,5 ;get width
squareh: lr 6,a ;save temp
lr a,2
com
outs 4 ;set the col
lr a,2
inc ;next col
lr 2,a
pi plot
lr a,6
ai $ff
bf 4,squareh ;all done w/row
ins 5 ;next row
ai $ff ;complement, so subtract 1
outs 5
lr a,3
ai $ff
lr 3,a
bf 4,squarev ;done full height?
pi popk
pk
drawlines: ; dci to table of color,len,row,start col (horiz if len<$80)
; color,len,col,start row (vert if len>$80)
; repeat until $FF
;uses r5
lr k,p
line2:
lm
ci $ff
bt 4,lineexit ;ff means done
outs 1 ;set the color
lm ;get len
ni $ff ;lm doesn't set status flags
bf 1,vline ;vertical lines are negative (and sign bit backwards)
lr 5,a ;horiz-save len
lm
com
outs 5 ;set the row
lm ;get starting column
hline2:
com
outs 4 ;set the column
pi plot
ds 5
bt 4,line2
ins 4 ;
com
inc
bf 0,hline2
lineexit:
pk
vline:
ni $3f ;mask off sign bit, limit len to 63 (height of screen)
lr 5,a ;save it
lm
com
outs 4 ;set the column
lm ;get starting row
vline2:
com
outs 5 ;set the row
pi plot
ds 5
bt 4,line2
ins 5
com
inc
bf 0,vline2
plot: ;this is what you have to do to transfer data to the screen memory
;after setting row, column and color
li $60
outs 0
li $50
outs 0
lis 6 ; little delay
pdelay: ai $ff
bf 4,pdelay
pop
drawlight: ;draws a red or green square based off value passed in r27
lr k,p
pi pushk
lisu 3
lisl 3
lr a,(IS)
dci sqrows
adc
lm
lr 5,a
lr a,(IS)
dci sqcols
adc
lm
lr 4,a
lr a,(IS) ; read color from array
dci array
adc
lm
ni $ff
bt 4,dogreen
dci redsq
bf 0,dosq
dogreen:
dci greensq
dosq:
pi square
pi popk
pk
;blit code from cart 26
blit:
LR K,P
pi pushk
LISU 0
blitloop:
LISL 4
getparms:
LM
LR (IS)-,A
BR7 getparms
LM
LR H,DC
DCI blitparm
ADC
LIS 1
LR $7,A
INS 5
COM
NI $c0
AS $1
COM
blit2z:
OUTS 5
DS $3
BF 2,blitexit
LR A,$2
LR $5,A
LR A,$0
COM
blit2a:
OUTS 4
DS $7
BF 4,blit2c
LIS 8
LR $7,A
LM
LR $6,A
LIS 1
NS $4
BT 4,blit2b
LIS 0
COM
blit2b:
ADC
blit2c:
LR A,$6
AS $6
LR $6,A
LR A,$4
BT 2,blit2d
LIS 0
blit2d:
COM
OUTS 1
LIS 6
SL 4
OUTS 0
SL 1
OUTS 0
BF 0,blit2e
blit2e:
AI $60
BF 4,blit2e
DS $5
BT 4,blit2f
INS 4
AI $ff
BF 0,blit2a
blit2f:
INS 5
AI $ff
BF 0,blit2z
blitexit:
LR DC,H
LIS 2
NS $4
BT 4,blitloop
pi popk
PK
;from the BIOS, but I removed T? (time) prompt
prompts: LR K,P ;
PI pushk ;
prompts2: LI $85 ; red 5 (S)
LR $0,A ;
PI prompt ;
LR A,$4 ;
CI $08 ; is it button 4, Start?
BF $4,notbut4 ; no, check others
notbut2:
PI popk ; yes, return
PK ;
notbut4: CI $02 ; is it button 2, Mode?
BF $4,notbut2 ;
LI $8e ; red M
LR $0,A ;
PI prompt ;
LISU 3 ;
LISL 6 ;
LR A,(IS) ;
as 4 ;add the mode to the game #
LR (IS),A ;
BF $0,prompts2 ;
;from the BIOS, but I added random # seed to readbuts
prompt: LR K,P ; $0099 - prints char r0 at row r1, col r2, waits for button
PI pushk ;
LI $33 ; r1=$33
LR $1,A ;
LI $13 ; r2=$13
LR $2,A ;
PI drawchar ;
LI $8b ; r0=8b red ?
LR $0,A ;
PI drawchar ;
PI readbuts ;
LI $33 ; r1=$33
LR $1,A ;
LI $13 ; r2=$13
LR $2,A ;
LIS $d ; r0=$d
LR $0,A ;
PI drawchar ;
PI drawchar ;
PI popk ;
PK ;
readbuts:
lisu 2 ;inc random seed
lisl 5
lr a,(IS)
inc
lr (IS),a
INS 0 ; $00c1 - read buttons
COM ;
NI $0f ;
BT 4,readbuts ;
LR $4,A ;
LI $ff ;
LR $5,A ;
dbounce: DS $5 ;
BF $4,dbounce ;
jmp delay ;
;colors: $40-red, $80=blue, $0=green, $c0=bkg
;data to draw lines for grid
grid: ;horiz-color,len,row,start col
db $80,66,7,18
db $80,66,17,18
db $80,66,27,18
db $80,66,37,18
db $80,66,47,18
db $80,66,57,18
;vert-color,$80+len,col,start row
db $80,179,18,7 ;179=128+51
db $80,179,31,7
db $80,179,44,7
db $80,179,57,7
db $80,179,70,7
db $80,179,83,7
db $ff
;data to draw squares
redsq: ;color,width,height
db $40,12,9
greensq: ;color,width,height
db $0,12,9
cursor: ;color,width,height
db $c0,4,3
winsq1:
db $40,38,29 ;red
winsq2:
db $c0,34,25 ;bkg
;locations to draw each light, based on index (0-24)
sqrows:
db 8, 8, 8, 8, 8,18,18,18,18,18,28,28,28,28,28,38,38,38,38,38,48,48,48,48,48
sqcols:
db 19,32,45,58,71,19,32,45,58,71,19,32,45,58,71,19,32,45,58,71,19,32,45,58,71
;locations to draw cursor, based on row/column
currows:
db 11,21,31,41,51
curcols:
db 23,36,49,62,75
plustable: ;squares to toggle based on cursor N E W S +128 means wrapped
db 148, 1,132, 5
db 149, 2, 0, 6
db 150, 3, 1, 7
db 151, 4, 2, 8
db 152,128, 3, 9
db 0, 6,137, 10
db 1, 7, 5, 11
db 2, 8, 6, 12
db 3, 9, 7, 13
db 4,133, 8, 14
db 5, 11,142, 15
db 6, 12, 10, 16
db 7, 13, 11, 17
db 8, 14, 12, 18
db 9,138, 13, 19
db 10, 16,147, 20
db 11, 17, 15, 21
db 12, 18, 16, 22
db 13, 19, 17, 23
db 14,143, 18, 24
db 15, 21,152,128
db 16, 22, 20,129
db 17, 23, 21,130
db 18, 24, 22,131
db 19,148, 23,132
xtable: ;squares to toggle based on cursor NW NE SW SE +128 means wrapped
db 152,149,137, 6
db 148,150, 5, 7
db 149,151, 6, 8
db 150,152, 7, 9
db 151,148, 8,133
db 132, 1,142, 11
db 0, 2, 10, 12
db 1, 3, 11, 13
db 2, 4, 12, 14
db 3,128, 13,138
db 137, 6,147, 16
db 5, 7, 15, 17
db 6, 8, 16, 18
db 7, 9, 17, 19
db 8,133, 18,143
db 142, 11,152, 21
db 10, 12, 20, 22
db 11, 13, 21, 23
db 12, 14, 22, 24
db 13,138, 23,148
db 147, 16,132,129
db 15, 17,128,130
db 16, 18,129,131
db 17, 19,130,132
db 18,143,132,128
;the patterns - 1 bit is red, 0 is green
;other code has to be adjusted to use more or less than 64 patterns
;not all of these are solvable on a torus or if only the neighbors toggle
pats:
; db $00,$00,$00,$80,$c0 ; easy one for test
db $20,$50,$88,$F8,$88
db $F0,$88,$88,$88,$F0
db $F8,$80,$F8,$80,$F8
db $F8,$80,$F0,$80,$80
db $88,$88,$F8,$88,$88
db $F8,$20,$20,$20,$F8
db $90,$A0,$C0,$A0,$90
db $80,$80,$80,$80,$F8
db $88,$D8,$A8,$88,$88
db $88,$C8,$A8,$98,$88
db $70,$88,$88,$88,$70
db $70,$88,$A8,$90,$68
db $70,$80,$70,$08,$70
db $F8,$20,$20,$20,$20
db $88,$88,$A8,$D8,$88
db $88,$50,$20,$50,$88
db $88,$50,$20,$20,$20
db $F8,$10,$20,$40,$F8
db $50,$50,$00,$70,$20
db $20,$70,$F8,$70,$20
db $D8,$20,$20,$20,$D8
db $00,$00,$20,$00,$00
db $00,$20,$50,$20,$00
db $20,$00,$88,$00,$20
db $50,$A8,$50,$A8,$50
db $A8,$70,$F8,$70,$A8
db $00,$D8,$50,$D8,$00
db $20,$88,$20,$88,$20
db $F8,$A8,$88,$A8,$F8
db $20,$60,$20,$20,$70
db $70,$08,$70,$80,$F8
db $70,$08,$70,$08,$70
db $F8,$00,$70,$00,$F8
db $70,$88,$70,$88,$70
db $F8,$88,$50,$70,$00
db $F8,$70,$20,$00,$00
db $20,$20,$F8,$20,$20
db $A8,$88,$F8,$88,$A8
db $C0,$A0,$A8,$28,$18
db $18,$08,$20,$80,$C0
db $D8,$88,$50,$88,$D8
db $18,$C0,$18,$C0,$18
db $A8,$A8,$A8,$A8,$A8
db $00,$F8,$00,$F8,$00
db $10,$78,$50,$F0,$40
db $C0,$E0,$70,$38,$18
db $60,$90,$70,$48,$30
db $A8,$A8,$50,$A8,$A8
db $98,$F0,$50,$78,$C8
db $70,$A8,$F8,$F8,$A8
db $A0,$E0,$B8,$10,$38
db $00,$00,$F8,$50,$50 ; pi pattern
db $00,$40,$00,$10,$00
db $00,$50,$00,$50,$00
db $10,$48,$20,$90,$40
db $78,$E8,$F8,$B8,$F0
db $E0,$90,$E0,$90,$E0
db $30,$48,$C0,$48,$30
db $38,$48,$20,$90,$E0
db $00,$38,$00,$E0,$00
db $20,$20,$D8,$20,$20
db $20,$70,$A8,$20,$20
db $C8,$D0,$20,$58,$98
db $00,$70,$50,$70,$00
;8 bytes available here
org $f00
blitparm:
db $82,19,96,$16,$8,$08,00,00
blitdata:
db $00,$45,$F0,$41,$E1,$01,$F7,$80,$44,$20,$40,$00
db $00,$45,$00,$41,$13,$81,$04,$40,$A4,$20,$A0,$00
db $00,$7D,$E0,$41,$E4,$41,$E7,$81,$14,$21,$10,$00
db $00,$45,$04,$41,$07,$C1,$04,$41,$F4,$21,$F0,$00
db $00,$45,$f3,$81,$04,$41,$F4,$41,$17,$BD,$10,$00
db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
db $F8,$8E,$F1,$C8,$BA,$1E,$04,$50,$72,$22,$3C,$F8
db $81,$44,$8A,$28,$92,$11,$03,$90,$82,$45,$22,$80
db $F2,$24,$F2,$0F,$92,$11,$74,$50,$73,$88,$BC,$F0
db $83,$E4,$8A,$28,$92,$11,$07,$D0,$0A,$4F,$A2,$80
db $82,$2E,$89,$C8,$BB,$DE,$04,$5E,$72,$28,$A2,$F8
db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
db $00,$00,$00,$79,$17,$81,$17,$DF,$20,$00,$00,$00
db $00,$00,$00,$44,$E4,$41,$11,$10,$20,$00,$00,$00
db $00,$00,$00,$45,$17,$81,$11,$1E,$20,$00,$00,$00
db $00,$00,$00,$45,$F4,$41,$11,$10,$00,$00,$00,$00
db $00,$00,$00,$79,$14,$40,$E1,$1F,$20,$00,$00,$00
;4 bytes available here
org $ff0
db $53,$65,$61,$6e,$20,$52,$69,$64,$64,$6c,$65,$20,$32,$30,$30,$34