122 lines
2.1 KiB
Plaintext
122 lines
2.1 KiB
Plaintext
|
|
gcl0x
|
|
|
|
{ Queens(N) for N=1-10: 51.385 seconds }
|
|
|
|
$ffff FFFF=
|
|
|
|
\SYS_LSRW1_48 \sysFn:
|
|
|
|
[def {Search}
|
|
push
|
|
10-- cols 0%= diagL 2%= diagR 4%= next 6%= avail 8%=
|
|
|
|
diagL diagR| FFFF^ cols& avail=
|
|
|
|
[do
|
|
0 avail- avail& next=
|
|
|
|
if<>0
|
|
|
|
0% {cols} next^ [if<>0
|
|
cols=
|
|
2% {diagL} next^ 1<< {LSLW} diagL=
|
|
4% {diagR} next^ 48!! {LSRW} diagR=
|
|
Search!
|
|
|
|
avail next^ avail=
|
|
loop]
|
|
Count 1+ Count=
|
|
{Break}
|
|
]
|
|
|
|
0% cols= 2% diagL= 4% diagR= 6% next= 8% avail= 10++
|
|
pop ret
|
|
] Search=
|
|
|
|
[def {DrawChar}
|
|
{Map ASCII code to offset in font table}
|
|
Char 82- [if<0 50+ i= \font32up
|
|
else i= \font82up] fontData= {Select low or high page}
|
|
i i+ tmp= tmp+ i+ {Multiply by 5}
|
|
fontData+ fontData= {Add to page address to reach bitmap data for Char}
|
|
$800 Pos+ q= {Where to stop the inner drawing loop}
|
|
|
|
{Draw 6 vertical slices: 5 using font data, the last with all-zeros}
|
|
5 i= [do
|
|
[if<>0 fontData 0? fontData<++ else 0] bits=
|
|
Pos p=
|
|
{Draw vertical slice}
|
|
[do
|
|
bits 128& [if=0 32 {Blue} else Color] p.
|
|
bits bits+ bits=
|
|
p>++
|
|
p q- if<0loop]
|
|
Pos<++
|
|
i 1- i= if>=0loop]
|
|
ret
|
|
] DrawChar=
|
|
|
|
{-----------------------------------------------------------------------+
|
|
|}\vLR>++ ret{ RAM page 4 |
|
|
+-----------------------------------------------------------------------}
|
|
$0400:
|
|
|
|
[def {DrawNextDigit}
|
|
push
|
|
Radix=
|
|
Value Radix- [if>=0
|
|
Value=
|
|
$31 Char=
|
|
Value [do
|
|
Radix-
|
|
if>=0
|
|
Value=
|
|
Char<++
|
|
loop
|
|
]
|
|
DrawChar!
|
|
$30 Char=
|
|
else
|
|
DrawChar!
|
|
]
|
|
pop ret
|
|
] DrawNextDigit=
|
|
|
|
[def {DrawNumber}
|
|
push
|
|
Value=
|
|
$20 Char=
|
|
10000 DrawNextDigit!
|
|
1000 DrawNextDigit!
|
|
100 DrawNextDigit!
|
|
10 DrawNextDigit! $30 Char=
|
|
1 DrawNextDigit!
|
|
pop ret
|
|
] DrawNumber=
|
|
|
|
[def {NewLine}
|
|
$800 Pos+ 255| 255^ Pos=
|
|
ret
|
|
] NewLine=
|
|
|
|
{ Main }
|
|
|
|
63 Color=
|
|
[do
|
|
1 Q= A= $2000 Pos=
|
|
[do
|
|
Q DrawNumber!
|
|
0 Count=
|
|
A cols= 0 diagL= diagR= Search!
|
|
Count DrawNumber! NewLine!
|
|
|
|
A 1<< 1+ A=
|
|
Q 1+ Q=
|
|
10- if<=0loop]
|
|
|
|
120 \soundTimer.
|
|
Color 9- Color=
|
|
loop]
|
|
|