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]
 | 
						|
 |