Home » Archimedes archive » Acorn User » AU 1996-05.adf » Regulars » StarInfo/Whitehouse/!Hneftafl/Hneftafl
StarInfo/Whitehouse/!Hneftafl/Hneftafl
This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.
Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.
Tape/disk: | Home » Archimedes archive » Acorn User » AU 1996-05.adf » Regulars |
Filename: | StarInfo/Whitehouse/!Hneftafl/Hneftafl |
Read OK: | ✔ |
File size: | 1D1C bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM hneftafl 20REM Stuart Whitehouse 30REM 40REM This file has been written in an unnecessarily complex manner 50REM This is in order to make the addition of a computer player possible 60REM 70DEFPROChnft_init 80LOCAL x% 90_blank%=0 100_swede%=1 110_muskovit%=2 120_swedeking%=4:_king%=4 130_campmuskovit%=8:_camp%=8 140 150DIM board% 104 : REM this is larger to allow saving of options from this mem 160DIM grid% 90 170FOR w%=0 TO 80:grid%?w%=0:NEXT 180grid%?40=_king% 190RESTORE+0:FOR w%=0 TO 15:READ x%:grid%?x%=_camp%:NEXT 200DATA 3,4,5,13, 27,36,45,37, 35,44,53,43, 75,76,77,67 210ENDPROC 220: 230DEFPROChnft_newgame 240FOR w%=0 TO 80 250CASE grid%?w% OF 260WHEN _king% : board%?w%=_king% 270WHEN _camp% : board%?w%=_muskovit% 280OTHERWISE : board%?w%=0 290ENDCASE 300NEXT 310board%?22=_swede%:board%?31=_swede%:board%?49=_swede%:board%?58=_swede% 320board%?38=_swede%:board%?39=_swede%:board%?41=_swede%:board%?42=_swede% 330turn%=0 340PROChnft_newturn 350 360PROCredrawboard 370ENDPROC 380: 390DEFPROChnft_newturn 400turn%+=1 410to_play%=(2-(turn% AND 1)) 420PROCstatus 430ENDPROC 440: 450: 460DEFFNplayer(type%) 470=((type% OR (type%>>>2)) AND 3) 480: 490: 500: 510: 520DEFPROChnft_makemove(start_square%,square%) 530LOCAL index%, ptr%, type%, k_found%,m_found% 540 550A%!vars_square1=start_square% 560CALL generate_move_list 570ptr%=list% 580WHILE !ptr%>=0 AND match%=FALSE 590IF !ptr%=square% THEN match%=TRUE 600ptr%+=4 610ENDWHILE 620IF NOT match% THEN VDU7:ENDPROC 630 640type%=board%?start_square% 650PROCsetsquare(start_square%,_blank%) 660PROCsetsquare(square%,type%) 670 680REM --- now test for winning and zapping 690IF type%=_king% THEN 700IF square%<9 OR square%>=72 THEN to_play%=-to_play% 710w%=square% MOD 9 720IF w%=0 OR w%=8 THEN to_play%=-to_play% 730IF to_play%<0 THEN w%=FNgenalert("KING") 740PROCstatus 750ENDIF 760IF to_play%<0 THEN ENDPROC 770 780A%!vars_square1=square% 790CALL basic_test_for_zap,result% 800WHILE result%>0 810PROCsetsquare((result% AND &FF)-1,0) 820result%=result%>>>8 830ENDWHILE 840 850FOR index%=0 TO 80 860CASE board%?index% OF 870WHEN _king% : k_found%=TRUE 880WHEN _muskovit% : m_found%=TRUE 890ENDCASE 900NEXT 910IF k_found%=FALSE THEN w%=FNgenalert("KXXX"):to_play%=-_muskovit% 920IF m_found%=FALSE THEN w%=FNgenalert("MXXX"):to_play%=-_swede% 930IF to_play%<0 THEN PROCstatus:ENDPROC 940 950PROChnft_newturn 960ENDPROC 970 980 990 1000 1010 1020 1030 1040 1050 1060 1070 1080 1090REM the machine could have been far more simply written in BASIC. 1100REM it has been done as armcode in case I wish to add a computer player. 1110 1120 1130 1140DEFPROCassem 1150PROCgeneratezaptable 1160 1170DIM varmem 1024, list% 1024 1180A%=varmem 1190vars_board=0 : vars_grid=4 : vars_turn=8 1200vars_square1=12 : vars_square2=16 : vars_listptr=20 1210vars_zaptable=24 1220 1230A%!vars_board=board% 1240A%!vars_grid=grid% 1250A%!vars_listptr=list% 1260A%!vars_zaptable=zaptable% 1270 1280 1290 1300stack=13:link=14:mainvars=12:boardptr=11:gridptr=10 1310 1320codesize%=2048:opt_max%=2 1330DIM codemem codesize% 1340FOR pass%=0 TO opt_max% STEP opt_max% 1350P%=codemem 1360L%=codemem+codesize% 1370[OPT pass%+8 1380 1390.generate_move_list 1400; gml 1410STMFD (stack)!,{R0-R12,link} 1420MOV mainvars,R0 1430LDR boardptr,[mainvars,#vars_board] 1440LDR gridptr,[mainvars,#vars_grid] 1450 1460LDR R9,[mainvars,#vars_listptr] ; R9 = listptr 1470LDR R8,[mainvars,#vars_square1] ; R8 = start_square 1480LDRB R7,[gridptr,R8] 1490CMPS R7,#_camp% 1500LDRNEB R7,[boardptr,R8] ; R7 = move type 1510 1520MOV R6,R8 1530.gml_makex_loop 1540CMPS R6,#9:SUBGE R6,R6,#9:BGT gml_makex_loop ; R6 = x coord 1550 1560MOV R4,#1:MOV R5,#0:BL gml_generate 1570MVN R4,#0:MOV R5,#0:BL gml_generate 1580MOV R4,#0:MOV R5,#9:BL gml_generate 1590MOV R4,#0:MVN R5,#8:BL gml_generate 1600; that's all! 1610MVN R0,#0:STR R0,[R9],#4 ; add terminator to list 1620 1630LDMFD (stack)!,{R0-R12,PC} 1640 1650 1660.gml_generate 1670STMFD (stack)!,{R6,R8,link} 1680 1690.gml_mainloop 1700ADD R8,R8,R4:ADD R8,R8,R5 1710ADD R6,R6,R4 1720 1730; now test validity 1740RSBS R0,R8,#0:CMPLES R8,#80:BGT gml_stop 1750RSBS R0,R6,#0:CMPLES R6,#8:BGT gml_stop ; fallen off board 1760 1770LDRB R0,[boardptr,R8]:CMPS R0,#0:BNE gml_stop ; piece in the way 1780LDRB R0,[gridptr,R8] 1790CMPS R0,#_king%:BEQ gml_stop ; no-one is allowed on the chief's square 1800CMPS R0,#_camp%:BNE gml_ok 1810; a camp square, only a muskovit camp piece is allowed onto it 1820CMPS R7,#_camp%:BNE gml_stop 1830.gml_ok 1840 1850; legal move 1860STR R8,[R9],#4 1870B gml_mainloop 1880 1890.gml_stop 1900LDMFD (stack)!,{R6,R8,PC} 1910 1920 1930 1940 1950 1960.basic_test_for_zap 1970STMFD (stack)!,{R0-R12,link} 1980MOV mainvars,R0 1990LDR R1,[mainvars,#vars_square1] 2000LDR boardptr,[mainvars,#vars_board] 2010BL test_for_zap 2020LDR R9,[R9] ; l-value of result 2030STR R0,[R9] 2040LDMFD (stack)!,{R0-R12,PC} 2050 2060 2070]:tfz_move=5:tfz_target=6:tfz_tableptr=9:tfz_dirloop=7:tfz_result=8 2080REM also uses R10 gridptr, R11 boardptr 2090[OPT pass%+8 2100 2110.test_for_zap ; R1 is the square to be tested. R11/boardptr is set 2120; return in R0. 2130; return is 4 bytes. Each is a number of a square that has been killed, or 0 2140 2150STMFD (stack)!,{R1-R10,link} 2160LDRB tfz_move,[boardptr,R1] 2170CMPS tfz_move,#_king%:BEQ tfz_null_result 2180CMPS tfz_move,#_swede%:MOVEQ tfz_target,#_muskovit%:MOVNE tfz_target,#_swede% 2190LDR tfz_tableptr,[mainvars,#vars_zaptable] 2200ADD tfz_tableptr,tfz_tableptr,R1,LSL #4 ; 4-dir * 4-bytes for each square 2210LDR gridptr,[mainvars,#vars_grid] 2220 2230MOV tfz_result,#0 2240MOV tfz_dirloop,#4 2250.tfz_loop ; R1 must be maintained until tfz_loop 2260LDRB R1,[tfz_tableptr]:CMPS R0,#255:BEQ tfz_null_loop 2270LDRB R0,[boardptr,R1] ; type of piece in the middle 2280CMPS R0,#_king%:BEQ tfz_king 2290CMPS R0,tfz_target:BNE tfz_null_loop 2300 2310LDRB R0,[tfz_tableptr,#1] 2320LDRB R0,[boardptr,R0]:CMPS R0,tfz_move:BNE tfz_null_loop ; no pair opposite to take 2330 2340.tfz_zap ; R1 still set 2350ADD R1,R1,#1 ; square to kill+1 2360ADD tfz_result,R1,tfz_result,LSL #8 ; insert into bottom byte 2370 2380.tfz_null_loop 2390ADD tfz_tableptr,tfz_tableptr,#4 2400SUBS tfz_dirloop,tfz_dirloop,#1 : BNE tfz_loop 2410 2420MOV R0,tfz_result : LDMFD (stack)!,{R1-R10,PC} 2430 2440.tfz_null_result : MOV R0,#0 : LDMFD (stack)!,{R1-R10,PC} 2450 2460.tfz_king 2470CMPS tfz_target,#_swede%:BNE tfz_null_loop 2480; king requires 4 attackers, but these may be camp squares 2490 2500LDRB R0,[tfz_tableptr,#1] 2510LDRB R1,[gridptr,R0] 2520LDRB R0,[boardptr,R0]:CMPS R0,tfz_move:CMPNES R1,#_camp%:BNE tfz_null_loop 2530 2540LDRB R0,[tfz_tableptr,#2]:CMPS R0,#255:BEQ tfz_null_loop ; no sides 2550LDRB R1,[gridptr,R0] 2560LDRB R0,[boardptr,R0]:CMPS R0,tfz_move:CMPNES R1,#_camp%:BNE tfz_null_loop 2570 2580LDRB R0,[tfz_tableptr,#3] 2590LDRB R1,[gridptr,R0] 2600LDRB R0,[boardptr,R0]:CMPS R0,tfz_move:CMPNES R1,#_camp%:BNE tfz_null_loop 2610 2620LDRB R1,[tfz_tableptr] ; square that the chief is in 2630B tfz_zap 2640] 2650NEXT 2660ENDPROC 2670 2680 2690 2700 2710 2720DEFPROCgeneratezaptable 2730LOCAL x%,y%,dir%, rx%, ry%, ptr% 2740DIM dx%(3), dy%(3) 2750DIM zaptable% 82*4*4 2760 2770dx%()=0:dy%()=0:dx%(0)=1:dy%(1)=1:dx%(2)=-1:dy%(3)=-1 :REM clockwise from R 2780ptr%=zaptable% 2790 2800FOR y%=0 TO 8 2810FOR x%=0 TO 8 2820FOR dir%=0 TO 3 2830rx%=x%+2*dx%(dir%):ry%=y%+2*dy%(dir%) 2840IF rx%<0 OR rx%>8 OR ry%<0 OR ry%>8 THEN 2850!ptr%=-1 2860ELSE 2870?ptr%=x%+dx%(dir%)+9*(y%+dy%(dir%)) 2880ptr%?1=rx%+9*ry% 2890 2900REM now set the side lobes 2910rx%-=dx%(dir%):ry%-=dy%(dir%) 2920 2930IF FNok(rx%+dy%(dir%)) AND FNok(rx%-dy%(dir%)) AND FNok(ry%+dx%(dir%)) AND FNok(ry%-dx%(dir%)) THEN 2940ptr%?2=(rx%+dy%(dir%))+9*(ry%+dx%(dir%)) 2950ptr%?3=(rx%-dy%(dir%))+9*(ry%-dx%(dir%)) 2960ELSE 2970ptr%?2=255:ptr%?3=255 2980ENDIF 2990ENDIF 3000ptr%+=4 3010NEXT 3020NEXT 3030NEXT 3040REM OSCLI("SAVE <Hneftafl$Dir>.TableTest "+STR$~(zaptable%)+"+"+STR$~(82*4*4)) 3050ENDPROC 3060: 3070: 3080DEFFNok(x%) 3090IF x%>=0 AND x%<9 THEN =TRUE 3100=FALSE 3110: 3120: 3130 3140 3150 3160
� hneftafl � Stuart Whitehouse � (C� This file has been written in an unnecessarily complex manner 2I� This is in order to make the addition of a computer player possible <� F��hnft_init P� x% Z _blank%=0 d _swede%=1 n_muskovit%=2 x_swedeking%=4:_king%=4 �_campmuskovit%=8:_camp%=8 � �L� board% 104 : � this is larger to allow saving of options from this mem �� grid% 90 �� w%=0 � 80:grid%?w%=0:� �grid%?40=_king% �*�+0:� w%=0 � 15:� x%:grid%?x%=_camp%:� �5� 3,4,5,13, 27,36,45,37, 35,44,53,43, 75,76,77,67 �� �: ���hnft_newgame �� w%=0 � 80 �Ȏ grid%?w% � � _king% : board%?w%=_king% #� _camp% : board%?w%=_muskovit% : board%?w%=0 "� ,� 6Kboard%?22=_swede%:board%?31=_swede%:board%?49=_swede%:board%?58=_swede% @Kboard%?38=_swede%:board%?39=_swede%:board%?41=_swede%:board%?42=_swede% Jturn%=0 T�hnft_newturn ^ h�redrawboard r� |: ���hnft_newturn �turn%+=1 �to_play%=(2-(turn% � 1)) ��status �� �: �: �ݤplayer(type%) � =((type% � (type%>>>2)) � 3) �: �: �: �: *��hnft_makemove(start_square%,square%) ,� index%, ptr%, type%, k_found%,m_found% &!A%!vars_square1=start_square% 0� generate_move_list :ptr%=list% Dȕ !ptr%>=0 � match%=� N� !ptr%=square% � match%=� Xptr%+=4 b� l� � match% � �7:� v �type%=board%?start_square% �%�setsquare(start_square%,_blank%) ��setsquare(square%,type%) � �+� --- now test for winning and zapping �� type%=_king% � �2� square%<9 � square%>=72 � to_play%=-to_play% �w%=square% � 9 �&� w%=0 � w%=8 � to_play%=-to_play% �'� to_play%<0 � w%=�genalert("KING") ��status �� �� to_play%<0 � � A%!vars_square1=square% � basic_test_for_zap,result% ȕ result%>0 *#�setsquare((result% � &FF)-1,0) 4result%=result%>>>8 >� H R� index%=0 � 80 \Ȏ board%?index% � f� _king% : k_found%=� p� _muskovit% : m_found%=� z� �� �<� k_found%=� � w%=�genalert("KXXX"):to_play%=-_muskovit% �9� m_found%=� � w%=�genalert("MXXX"):to_play%=-_swede% �� to_play%<0 � �status:� � ��hnft_newturn �� � � � � � � $ . 8 BC� the machine could have been far more simply written in BASIC. LJ� it has been done as armcode in case I wish to add a computer player. V ` j t��assem ~�generatezaptable � �� varmem 1024, list% 1024 � A%=varmem �,vars_board=0 : vars_grid=4 : vars_turn=8 �7vars_square1=12 : vars_square2=16 : vars_listptr=20 �vars_zaptable=24 � �A%!vars_board=board% �A%!vars_grid=grid% �A%!vars_listptr=list% �A%!vars_zaptable=zaptable% � 7stack=13:link=14:mainvars=12:boardptr=11:gridptr=10 (codesize%=2048:opt_max%=2 2� codemem codesize% <#� pass%=0 � opt_max% � opt_max% FP%=codemem PL%=codemem+codesize% Z[OPT pass%+8 d n.generate_move_list x ; gml � STMFD (stack)!,{R0-R12,link} �MOV mainvars,R0 �'LDR boardptr,[mainvars,#vars_board] �%LDR gridptr,[mainvars,#vars_grid] � �2LDR R9,[mainvars,#vars_listptr] ; R9 = listptr �8LDR R8,[mainvars,#vars_square1] ; R8 = start_square �LDRB R7,[gridptr,R8] �CMPS R7,#_camp% �-LDRNEB R7,[boardptr,R8] ; R7 = move type � � MOV R6,R8 �.gml_makex_loop ACMPS R6,#9:SUBGE R6,R6,#9:BGT gml_makex_loop ; R6 = x coord 'MOV R4,#1:MOV R5,#0:BL gml_generate "'MVN R4,#0:MOV R5,#0:BL gml_generate ,'MOV R4,#0:MOV R5,#9:BL gml_generate 6'MOV R4,#0:MVN R5,#8:BL gml_generate @; that's all! J5MVN R0,#0:STR R0,[R9],#4 ; add terminator to list T ^LDMFD (stack)!,{R0-R12,PC} h r |.gml_generate �STMFD (stack)!,{R6,R8,link} � �.gml_mainloop �ADD R8,R8,R4:ADD R8,R8,R5 �ADD R6,R6,R4 � �; now test validity �,RSBS R0,R8,#0:CMPLES R8,#80:BGT gml_stop �BRSBS R0,R6,#0:CMPLES R6,#8:BGT gml_stop ; fallen off board � �DLDRB R0,[boardptr,R8]:CMPS R0,#0:BNE gml_stop ; piece in the way �LDRB R0,[gridptr,R8] �JCMPS R0,#_king%:BEQ gml_stop ; no-one is allowed on the chief's square CMPS R0,#_camp%:BNE gml_ok B; a camp square, only a muskovit camp piece is allowed onto it CMPS R7,#_camp%:BNE gml_stop &.gml_ok 0 :; legal move DSTR R8,[R9],#4 NB gml_mainloop X b .gml_stop lLDMFD (stack)!,{R6,R8,PC} v � � � � �.basic_test_for_zap � STMFD (stack)!,{R0-R12,link} �MOV mainvars,R0 �#LDR R1,[mainvars,#vars_square1] �'LDR boardptr,[mainvars,#vars_board] �BL test_for_zap �#LDR R9,[R9] ; l-value of result �STR R0,[R9] �LDMFD (stack)!,{R0-R12,PC} G]:tfz_move=5:tfz_target=6:tfz_tableptr=9:tfz_dirloop=7:tfz_result=8 )� also uses R10 gridptr, R11 boardptr *[OPT pass%+8 4 >I.test_for_zap ; R1 is the square to be tested. R11/boardptr is set H; return in R0. RQ; return is 4 bytes. Each is a number of a square that has been killed, or 0 \ f STMFD (stack)!,{R1-R10,link} pLDRB tfz_move,[boardptr,R1] z-CMPS tfz_move,#_king%:BEQ tfz_null_result �NCMPS tfz_move,#_swede%:�Q tfz_target,#_muskovit%:MOVNE tfz_target,#_swede% �.LDR tfz_tableptr,[mainvars,#vars_zaptable] �MADD tfz_tableptr,tfz_tableptr,R1,LSL #4 ; 4-dir * 4-bytes for each square �%LDR gridptr,[mainvars,#vars_grid] � �MOV tfz_result,#0 �MOV tfz_dirloop,#4 �7.tfz_loop ; R1 must be maintained until tfz_loop �9LDRB R1,[tfz_tableptr]:CMPS R0,#255:BEQ tfz_null_loop �7LDRB R0,[boardptr,R1] ; type of piece in the middle � CMPS R0,#_king%:BEQ tfz_king �(CMPS R0,tfz_target:BNE tfz_null_loop � LDRB R0,[tfz_tableptr,#1] WLDRB R0,[boardptr,R0]:CMPS R0,tfz_move:BNE tfz_null_loop ; no pair opposite to take $ .tfz_zap ; R1 still set .#ADD R1,R1,#1 ; square to kill+1 8BADD tfz_result,R1,tfz_result,LSL #8 ; insert into bottom byte B L.tfz_null_loop V$ADD tfz_tableptr,tfz_tableptr,#4 `2SUBS tfz_dirloop,tfz_dirloop,#1 : BNE tfz_loop j t2MOV R0,tfz_result : LDMFD (stack)!,{R1-R10,PC} ~ �=.tfz_null_result : MOV R0,#0 : LDMFD (stack)!,{R1-R10,PC} � � .tfz_king �.CMPS tfz_target,#_swede%:BNE tfz_null_loop �>; king requires 4 attackers, but these may be camp squares � �LDRB R0,[tfz_tableptr,#1] �LDRB R1,[gridptr,R0] �NLDRB R0,[boardptr,R0]:CMPS R0,tfz_move:CMPNES R1,#_camp%:BNE tfz_null_loop � �GLDRB R0,[tfz_tableptr,#2]:CMPS R0,#255:BEQ tfz_null_loop ; no sides �LDRB R1,[gridptr,R0] NLDRB R0,[boardptr,R0]:CMPS R0,tfz_move:CMPNES R1,#_camp%:BNE tfz_null_loop LDRB R0,[tfz_tableptr,#3] LDRB R1,[gridptr,R0] (NLDRB R0,[boardptr,R0]:CMPS R0,tfz_move:CMPNES R1,#_camp%:BNE tfz_null_loop 2 <:LDRB R1,[tfz_tableptr] ; square that the chief is in F B tfz_zap P] Z� d� n x � � � ���generatezaptable �!� x%,y%,dir%, rx%, ry%, ptr% �� dx%(3), dy%(3) �� zaptable% 82*4*4 � �Mdx%()=0:dy%()=0:dx%(0)=1:dy%(1)=1:dx%(2)=-1:dy%(3)=-1 :� clockwise from R �ptr%=zaptable% � �� y%=0 � 8 �� x%=0 � 8 � dir%=0 � 3 )rx%=x%+2*dx%(dir%):ry%=y%+2*dy%(dir%) %� rx%<0 � rx%>8 � ry%<0 � ry%>8 � "!ptr%=-1 ,� 6'?ptr%=x%+dx%(dir%)+9*(y%+dy%(dir%)) @ptr%?1=rx%+9*ry% J T� now set the side lobes ^!rx%-=dx%(dir%):ry%-=dy%(dir%) h rY� �ok(rx%+dy%(dir%)) � �ok(rx%-dy%(dir%)) � �ok(ry%+dx%(dir%)) � �ok(ry%-dx%(dir%)) � |,ptr%?2=(rx%+dy%(dir%))+9*(ry%+dx%(dir%)) �,ptr%?3=(rx%-dy%(dir%))+9*(ry%-dx%(dir%)) �� �ptr%?2=255:ptr%?3=255 �� �� �ptr%+=4 �� �� �� �P� OSCLI("SAVE <Hneftafl$Dir>.TableTest "+STR$~(zaptable%)+"+"+STR$~(82*4*4)) �� �: �: ݤok(x%) � x%>=0 � x%<9 � =� =� &: 0: : D N X �
00000000 0d 00 0a 0e f4 20 68 6e 65 66 74 61 66 6c 0d 00 |..... hneftafl..| 00000010 14 17 f4 20 53 74 75 61 72 74 20 57 68 69 74 65 |... Stuart White| 00000020 68 6f 75 73 65 0d 00 1e 05 f4 0d 00 28 43 f4 20 |house.......(C. | 00000030 54 68 69 73 20 66 69 6c 65 20 68 61 73 20 62 65 |This file has be| 00000040 65 6e 20 77 72 69 74 74 65 6e 20 69 6e 20 61 6e |en written in an| 00000050 20 75 6e 6e 65 63 65 73 73 61 72 69 6c 79 20 63 | unnecessarily c| 00000060 6f 6d 70 6c 65 78 20 6d 61 6e 6e 65 72 0d 00 32 |omplex manner..2| 00000070 49 f4 20 54 68 69 73 20 69 73 20 69 6e 20 6f 72 |I. This is in or| 00000080 64 65 72 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 |der to make the | 00000090 61 64 64 69 74 69 6f 6e 20 6f 66 20 61 20 63 6f |addition of a co| 000000a0 6d 70 75 74 65 72 20 70 6c 61 79 65 72 20 70 6f |mputer player po| 000000b0 73 73 69 62 6c 65 0d 00 3c 05 f4 0d 00 46 0f dd |ssible..<....F..| 000000c0 f2 68 6e 66 74 5f 69 6e 69 74 0d 00 50 08 ea 20 |.hnft_init..P.. | 000000d0 78 25 0d 00 5a 0d 5f 62 6c 61 6e 6b 25 3d 30 0d |x%..Z._blank%=0.| 000000e0 00 64 0d 5f 73 77 65 64 65 25 3d 31 0d 00 6e 10 |.d._swede%=1..n.| 000000f0 5f 6d 75 73 6b 6f 76 69 74 25 3d 32 0d 00 78 1a |_muskovit%=2..x.| 00000100 5f 73 77 65 64 65 6b 69 6e 67 25 3d 34 3a 5f 6b |_swedeking%=4:_k| 00000110 69 6e 67 25 3d 34 0d 00 82 1d 5f 63 61 6d 70 6d |ing%=4...._campm| 00000120 75 73 6b 6f 76 69 74 25 3d 38 3a 5f 63 61 6d 70 |uskovit%=8:_camp| 00000130 25 3d 38 0d 00 8c 04 0d 00 96 4c de 20 62 6f 61 |%=8.......L. boa| 00000140 72 64 25 20 31 30 34 20 3a 20 f4 20 74 68 69 73 |rd% 104 : . this| 00000150 20 69 73 20 6c 61 72 67 65 72 20 74 6f 20 61 6c | is larger to al| 00000160 6c 6f 77 20 73 61 76 69 6e 67 20 6f 66 20 6f 70 |low saving of op| 00000170 74 69 6f 6e 73 20 66 72 6f 6d 20 74 68 69 73 20 |tions from this | 00000180 6d 65 6d 0d 00 a0 0e de 20 67 72 69 64 25 20 39 |mem..... grid% 9| 00000190 30 0d 00 aa 1c e3 20 77 25 3d 30 20 b8 20 38 30 |0..... w%=0 . 80| 000001a0 3a 67 72 69 64 25 3f 77 25 3d 30 3a ed 0d 00 b4 |:grid%?w%=0:....| 000001b0 13 67 72 69 64 25 3f 34 30 3d 5f 6b 69 6e 67 25 |.grid%?40=_king%| 000001c0 0d 00 be 2a f7 2b 30 3a e3 20 77 25 3d 30 20 b8 |...*.+0:. w%=0 .| 000001d0 20 31 35 3a f3 20 78 25 3a 67 72 69 64 25 3f 78 | 15:. x%:grid%?x| 000001e0 25 3d 5f 63 61 6d 70 25 3a ed 0d 00 c8 35 dc 20 |%=_camp%:....5. | 000001f0 33 2c 34 2c 35 2c 31 33 2c 20 32 37 2c 33 36 2c |3,4,5,13, 27,36,| 00000200 34 35 2c 33 37 2c 20 33 35 2c 34 34 2c 35 33 2c |45,37, 35,44,53,| 00000210 34 33 2c 20 37 35 2c 37 36 2c 37 37 2c 36 37 0d |43, 75,76,77,67.| 00000220 00 d2 05 e1 0d 00 dc 05 3a 0d 00 e6 12 dd f2 68 |........:......h| 00000230 6e 66 74 5f 6e 65 77 67 61 6d 65 0d 00 f0 0f e3 |nft_newgame.....| 00000240 20 77 25 3d 30 20 b8 20 38 30 0d 00 fa 11 c8 8e | w%=0 . 80......| 00000250 20 67 72 69 64 25 3f 77 25 20 ca 0d 01 04 1f c9 | grid%?w% ......| 00000260 20 5f 6b 69 6e 67 25 20 3a 20 62 6f 61 72 64 25 | _king% : board%| 00000270 3f 77 25 3d 5f 6b 69 6e 67 25 0d 01 0e 23 c9 20 |?w%=_king%...#. | 00000280 5f 63 61 6d 70 25 20 3a 20 62 6f 61 72 64 25 3f |_camp% : board%?| 00000290 77 25 3d 5f 6d 75 73 6b 6f 76 69 74 25 0d 01 18 |w%=_muskovit%...| 000002a0 13 7f 20 3a 20 62 6f 61 72 64 25 3f 77 25 3d 30 |.. : board%?w%=0| 000002b0 0d 01 22 05 cb 0d 01 2c 05 ed 0d 01 36 4b 62 6f |.."....,....6Kbo| 000002c0 61 72 64 25 3f 32 32 3d 5f 73 77 65 64 65 25 3a |ard%?22=_swede%:| 000002d0 62 6f 61 72 64 25 3f 33 31 3d 5f 73 77 65 64 65 |board%?31=_swede| 000002e0 25 3a 62 6f 61 72 64 25 3f 34 39 3d 5f 73 77 65 |%:board%?49=_swe| 000002f0 64 65 25 3a 62 6f 61 72 64 25 3f 35 38 3d 5f 73 |de%:board%?58=_s| 00000300 77 65 64 65 25 0d 01 40 4b 62 6f 61 72 64 25 3f |wede%..@Kboard%?| 00000310 33 38 3d 5f 73 77 65 64 65 25 3a 62 6f 61 72 64 |38=_swede%:board| 00000320 25 3f 33 39 3d 5f 73 77 65 64 65 25 3a 62 6f 61 |%?39=_swede%:boa| 00000330 72 64 25 3f 34 31 3d 5f 73 77 65 64 65 25 3a 62 |rd%?41=_swede%:b| 00000340 6f 61 72 64 25 3f 34 32 3d 5f 73 77 65 64 65 25 |oard%?42=_swede%| 00000350 0d 01 4a 0b 74 75 72 6e 25 3d 30 0d 01 54 11 f2 |..J.turn%=0..T..| 00000360 68 6e 66 74 5f 6e 65 77 74 75 72 6e 0d 01 5e 04 |hnft_newturn..^.| 00000370 0d 01 68 10 f2 72 65 64 72 61 77 62 6f 61 72 64 |..h..redrawboard| 00000380 0d 01 72 05 e1 0d 01 7c 05 3a 0d 01 86 12 dd f2 |..r....|.:......| 00000390 68 6e 66 74 5f 6e 65 77 74 75 72 6e 0d 01 90 0c |hnft_newturn....| 000003a0 74 75 72 6e 25 2b 3d 31 0d 01 9a 1c 74 6f 5f 70 |turn%+=1....to_p| 000003b0 6c 61 79 25 3d 28 32 2d 28 74 75 72 6e 25 20 80 |lay%=(2-(turn% .| 000003c0 20 31 29 29 0d 01 a4 0b f2 73 74 61 74 75 73 0d | 1)).....status.| 000003d0 01 ae 05 e1 0d 01 b8 05 3a 0d 01 c2 05 3a 0d 01 |........:....:..| 000003e0 cc 13 dd a4 70 6c 61 79 65 72 28 74 79 70 65 25 |....player(type%| 000003f0 29 0d 01 d6 20 3d 28 28 74 79 70 65 25 20 84 20 |)... =((type% . | 00000400 28 74 79 70 65 25 3e 3e 3e 32 29 29 20 80 20 33 |(type%>>>2)) . 3| 00000410 29 0d 01 e0 05 3a 0d 01 ea 05 3a 0d 01 f4 05 3a |)....:....:....:| 00000420 0d 01 fe 05 3a 0d 02 08 2a dd f2 68 6e 66 74 5f |....:...*..hnft_| 00000430 6d 61 6b 65 6d 6f 76 65 28 73 74 61 72 74 5f 73 |makemove(start_s| 00000440 71 75 61 72 65 25 2c 73 71 75 61 72 65 25 29 0d |quare%,square%).| 00000450 02 12 2c ea 20 69 6e 64 65 78 25 2c 20 70 74 72 |..,. index%, ptr| 00000460 25 2c 20 74 79 70 65 25 2c 20 6b 5f 66 6f 75 6e |%, type%, k_foun| 00000470 64 25 2c 6d 5f 66 6f 75 6e 64 25 0d 02 1c 04 0d |d%,m_found%.....| 00000480 02 26 21 41 25 21 76 61 72 73 5f 73 71 75 61 72 |.&!A%!vars_squar| 00000490 65 31 3d 73 74 61 72 74 5f 73 71 75 61 72 65 25 |e1=start_square%| 000004a0 0d 02 30 18 d6 20 67 65 6e 65 72 61 74 65 5f 6d |..0.. generate_m| 000004b0 6f 76 65 5f 6c 69 73 74 0d 02 3a 0e 70 74 72 25 |ove_list..:.ptr%| 000004c0 3d 6c 69 73 74 25 0d 02 44 1a c8 95 20 21 70 74 |=list%..D... !pt| 000004d0 72 25 3e 3d 30 20 80 20 6d 61 74 63 68 25 3d a3 |r%>=0 . match%=.| 000004e0 0d 02 4e 1e e7 20 21 70 74 72 25 3d 73 71 75 61 |..N.. !ptr%=squa| 000004f0 72 65 25 20 8c 20 6d 61 74 63 68 25 3d b9 0d 02 |re% . match%=...| 00000500 58 0b 70 74 72 25 2b 3d 34 0d 02 62 05 ce 0d 02 |X.ptr%+=4..b....| 00000510 6c 15 e7 20 ac 20 6d 61 74 63 68 25 20 8c 20 ef |l.. . match% . .| 00000520 37 3a e1 0d 02 76 04 0d 02 80 1e 74 79 70 65 25 |7:...v.....type%| 00000530 3d 62 6f 61 72 64 25 3f 73 74 61 72 74 5f 73 71 |=board%?start_sq| 00000540 75 61 72 65 25 0d 02 8a 25 f2 73 65 74 73 71 75 |uare%...%.setsqu| 00000550 61 72 65 28 73 74 61 72 74 5f 73 71 75 61 72 65 |are(start_square| 00000560 25 2c 5f 62 6c 61 6e 6b 25 29 0d 02 94 1d f2 73 |%,_blank%).....s| 00000570 65 74 73 71 75 61 72 65 28 73 71 75 61 72 65 25 |etsquare(square%| 00000580 2c 74 79 70 65 25 29 0d 02 9e 04 0d 02 a8 2b f4 |,type%).......+.| 00000590 20 2d 2d 2d 20 20 6e 6f 77 20 74 65 73 74 20 66 | --- now test f| 000005a0 6f 72 20 77 69 6e 6e 69 6e 67 20 61 6e 64 20 7a |or winning and z| 000005b0 61 70 70 69 6e 67 0d 02 b2 14 e7 20 74 79 70 65 |apping..... type| 000005c0 25 3d 5f 6b 69 6e 67 25 20 8c 0d 02 bc 32 e7 20 |%=_king% ....2. | 000005d0 73 71 75 61 72 65 25 3c 39 20 84 20 73 71 75 61 |square%<9 . squa| 000005e0 72 65 25 3e 3d 37 32 20 8c 20 74 6f 5f 70 6c 61 |re%>=72 . to_pla| 000005f0 79 25 3d 2d 74 6f 5f 70 6c 61 79 25 0d 02 c6 12 |y%=-to_play%....| 00000600 77 25 3d 73 71 75 61 72 65 25 20 83 20 39 0d 02 |w%=square% . 9..| 00000610 d0 26 e7 20 77 25 3d 30 20 84 20 77 25 3d 38 20 |.&. w%=0 . w%=8 | 00000620 8c 20 74 6f 5f 70 6c 61 79 25 3d 2d 74 6f 5f 70 |. to_play%=-to_p| 00000630 6c 61 79 25 0d 02 da 27 e7 20 74 6f 5f 70 6c 61 |lay%...'. to_pla| 00000640 79 25 3c 30 20 8c 20 77 25 3d a4 67 65 6e 61 6c |y%<0 . w%=.genal| 00000650 65 72 74 28 22 4b 49 4e 47 22 29 0d 02 e4 0b f2 |ert("KING").....| 00000660 73 74 61 74 75 73 0d 02 ee 05 cd 0d 02 f8 14 e7 |status..........| 00000670 20 74 6f 5f 70 6c 61 79 25 3c 30 20 8c 20 e1 0d | to_play%<0 . ..| 00000680 03 02 04 0d 03 0c 1b 41 25 21 76 61 72 73 5f 73 |.......A%!vars_s| 00000690 71 75 61 72 65 31 3d 73 71 75 61 72 65 25 0d 03 |quare1=square%..| 000006a0 16 20 d6 20 62 61 73 69 63 5f 74 65 73 74 5f 66 |. . basic_test_f| 000006b0 6f 72 5f 7a 61 70 2c 72 65 73 75 6c 74 25 0d 03 |or_zap,result%..| 000006c0 20 10 c8 95 20 72 65 73 75 6c 74 25 3e 30 0d 03 | ... result%>0..| 000006d0 2a 23 f2 73 65 74 73 71 75 61 72 65 28 28 72 65 |*#.setsquare((re| 000006e0 73 75 6c 74 25 20 80 20 26 46 46 29 2d 31 2c 30 |sult% . &FF)-1,0| 000006f0 29 0d 03 34 17 72 65 73 75 6c 74 25 3d 72 65 73 |)..4.result%=res| 00000700 75 6c 74 25 3e 3e 3e 38 0d 03 3e 05 ce 0d 03 48 |ult%>>>8..>....H| 00000710 04 0d 03 52 13 e3 20 69 6e 64 65 78 25 3d 30 20 |...R.. index%=0 | 00000720 b8 20 38 30 0d 03 5c 16 c8 8e 20 62 6f 61 72 64 |. 80..\... board| 00000730 25 3f 69 6e 64 65 78 25 20 ca 0d 03 66 19 c9 20 |%?index% ...f.. | 00000740 5f 6b 69 6e 67 25 20 3a 20 6b 5f 66 6f 75 6e 64 |_king% : k_found| 00000750 25 3d b9 0d 03 70 1d c9 20 5f 6d 75 73 6b 6f 76 |%=...p.. _muskov| 00000760 69 74 25 20 3a 20 6d 5f 66 6f 75 6e 64 25 3d b9 |it% : m_found%=.| 00000770 0d 03 7a 05 cb 0d 03 84 05 ed 0d 03 8e 3c e7 20 |..z..........<. | 00000780 6b 5f 66 6f 75 6e 64 25 3d a3 20 8c 20 77 25 3d |k_found%=. . w%=| 00000790 a4 67 65 6e 61 6c 65 72 74 28 22 4b 58 58 58 22 |.genalert("KXXX"| 000007a0 29 3a 74 6f 5f 70 6c 61 79 25 3d 2d 5f 6d 75 73 |):to_play%=-_mus| 000007b0 6b 6f 76 69 74 25 0d 03 98 39 e7 20 6d 5f 66 6f |kovit%...9. m_fo| 000007c0 75 6e 64 25 3d a3 20 8c 20 77 25 3d a4 67 65 6e |und%=. . w%=.gen| 000007d0 61 6c 65 72 74 28 22 4d 58 58 58 22 29 3a 74 6f |alert("MXXX"):to| 000007e0 5f 70 6c 61 79 25 3d 2d 5f 73 77 65 64 65 25 0d |_play%=-_swede%.| 000007f0 03 a2 1c e7 20 74 6f 5f 70 6c 61 79 25 3c 30 20 |.... to_play%<0 | 00000800 8c 20 f2 73 74 61 74 75 73 3a e1 0d 03 ac 04 0d |. .status:......| 00000810 03 b6 11 f2 68 6e 66 74 5f 6e 65 77 74 75 72 6e |....hnft_newturn| 00000820 0d 03 c0 05 e1 0d 03 ca 04 0d 03 d4 04 0d 03 de |................| 00000830 04 0d 03 e8 04 0d 03 f2 04 0d 03 fc 04 0d 04 06 |................| 00000840 04 0d 04 10 04 0d 04 1a 04 0d 04 24 04 0d 04 2e |...........$....| 00000850 04 0d 04 38 04 0d 04 42 43 f4 20 74 68 65 20 6d |...8...BC. the m| 00000860 61 63 68 69 6e 65 20 63 6f 75 6c 64 20 68 61 76 |achine could hav| 00000870 65 20 62 65 65 6e 20 66 61 72 20 6d 6f 72 65 20 |e been far more | 00000880 73 69 6d 70 6c 79 20 77 72 69 74 74 65 6e 20 69 |simply written i| 00000890 6e 20 42 41 53 49 43 2e 0d 04 4c 4a f4 20 69 74 |n BASIC...LJ. it| 000008a0 20 68 61 73 20 62 65 65 6e 20 64 6f 6e 65 20 61 | has been done a| 000008b0 73 20 61 72 6d 63 6f 64 65 20 69 6e 20 63 61 73 |s armcode in cas| 000008c0 65 20 49 20 77 69 73 68 20 74 6f 20 61 64 64 20 |e I wish to add | 000008d0 61 20 63 6f 6d 70 75 74 65 72 20 70 6c 61 79 65 |a computer playe| 000008e0 72 2e 0d 04 56 04 0d 04 60 04 0d 04 6a 04 0d 04 |r...V...`...j...| 000008f0 74 0b dd f2 61 73 73 65 6d 0d 04 7e 15 f2 67 65 |t...assem..~..ge| 00000900 6e 65 72 61 74 65 7a 61 70 74 61 62 6c 65 0d 04 |neratezaptable..| 00000910 88 04 0d 04 92 1d de 20 76 61 72 6d 65 6d 20 31 |....... varmem 1| 00000920 30 32 34 2c 20 6c 69 73 74 25 20 31 30 32 34 0d |024, list% 1024.| 00000930 04 9c 0d 41 25 3d 76 61 72 6d 65 6d 0d 04 a6 2c |...A%=varmem...,| 00000940 76 61 72 73 5f 62 6f 61 72 64 3d 30 20 3a 20 76 |vars_board=0 : v| 00000950 61 72 73 5f 67 72 69 64 3d 34 20 3a 20 76 61 72 |ars_grid=4 : var| 00000960 73 5f 74 75 72 6e 3d 38 0d 04 b0 37 76 61 72 73 |s_turn=8...7vars| 00000970 5f 73 71 75 61 72 65 31 3d 31 32 20 3a 20 76 61 |_square1=12 : va| 00000980 72 73 5f 73 71 75 61 72 65 32 3d 31 36 20 3a 20 |rs_square2=16 : | 00000990 76 61 72 73 5f 6c 69 73 74 70 74 72 3d 32 30 0d |vars_listptr=20.| 000009a0 04 ba 14 76 61 72 73 5f 7a 61 70 74 61 62 6c 65 |...vars_zaptable| 000009b0 3d 32 34 0d 04 c4 04 0d 04 ce 18 41 25 21 76 61 |=24........A%!va| 000009c0 72 73 5f 62 6f 61 72 64 3d 62 6f 61 72 64 25 0d |rs_board=board%.| 000009d0 04 d8 16 41 25 21 76 61 72 73 5f 67 72 69 64 3d |...A%!vars_grid=| 000009e0 67 72 69 64 25 0d 04 e2 19 41 25 21 76 61 72 73 |grid%....A%!vars| 000009f0 5f 6c 69 73 74 70 74 72 3d 6c 69 73 74 25 0d 04 |_listptr=list%..| 00000a00 ec 1e 41 25 21 76 61 72 73 5f 7a 61 70 74 61 62 |..A%!vars_zaptab| 00000a10 6c 65 3d 7a 61 70 74 61 62 6c 65 25 0d 04 f6 04 |le=zaptable%....| 00000a20 0d 05 00 04 0d 05 0a 04 0d 05 14 37 73 74 61 63 |...........7stac| 00000a30 6b 3d 31 33 3a 6c 69 6e 6b 3d 31 34 3a 6d 61 69 |k=13:link=14:mai| 00000a40 6e 76 61 72 73 3d 31 32 3a 62 6f 61 72 64 70 74 |nvars=12:boardpt| 00000a50 72 3d 31 31 3a 67 72 69 64 70 74 72 3d 31 30 0d |r=11:gridptr=10.| 00000a60 05 1e 04 0d 05 28 1d 63 6f 64 65 73 69 7a 65 25 |.....(.codesize%| 00000a70 3d 32 30 34 38 3a 6f 70 74 5f 6d 61 78 25 3d 32 |=2048:opt_max%=2| 00000a80 0d 05 32 17 de 20 63 6f 64 65 6d 65 6d 20 63 6f |..2.. codemem co| 00000a90 64 65 73 69 7a 65 25 0d 05 3c 23 e3 20 70 61 73 |desize%..<#. pas| 00000aa0 73 25 3d 30 20 b8 20 6f 70 74 5f 6d 61 78 25 20 |s%=0 . opt_max% | 00000ab0 88 20 6f 70 74 5f 6d 61 78 25 0d 05 46 0e 50 25 |. opt_max%..F.P%| 00000ac0 3d 63 6f 64 65 6d 65 6d 0d 05 50 18 4c 25 3d 63 |=codemem..P.L%=c| 00000ad0 6f 64 65 6d 65 6d 2b 63 6f 64 65 73 69 7a 65 25 |odemem+codesize%| 00000ae0 0d 05 5a 10 5b 4f 50 54 20 70 61 73 73 25 2b 38 |..Z.[OPT pass%+8| 00000af0 0d 05 64 04 0d 05 6e 17 2e 67 65 6e 65 72 61 74 |..d...n..generat| 00000b00 65 5f 6d 6f 76 65 5f 6c 69 73 74 0d 05 78 09 3b |e_move_list..x.;| 00000b10 20 67 6d 6c 0d 05 82 20 53 54 4d 46 44 20 28 73 | gml... STMFD (s| 00000b20 74 61 63 6b 29 21 2c 7b 52 30 2d 52 31 32 2c 6c |tack)!,{R0-R12,l| 00000b30 69 6e 6b 7d 0d 05 8c 13 4d 4f 56 20 6d 61 69 6e |ink}....MOV main| 00000b40 76 61 72 73 2c 52 30 0d 05 96 27 4c 44 52 20 62 |vars,R0...'LDR b| 00000b50 6f 61 72 64 70 74 72 2c 5b 6d 61 69 6e 76 61 72 |oardptr,[mainvar| 00000b60 73 2c 23 76 61 72 73 5f 62 6f 61 72 64 5d 0d 05 |s,#vars_board]..| 00000b70 a0 25 4c 44 52 20 67 72 69 64 70 74 72 2c 5b 6d |.%LDR gridptr,[m| 00000b80 61 69 6e 76 61 72 73 2c 23 76 61 72 73 5f 67 72 |ainvars,#vars_gr| 00000b90 69 64 5d 0d 05 aa 04 0d 05 b4 32 4c 44 52 20 52 |id].......2LDR R| 00000ba0 39 2c 5b 6d 61 69 6e 76 61 72 73 2c 23 76 61 72 |9,[mainvars,#var| 00000bb0 73 5f 6c 69 73 74 70 74 72 5d 20 3b 20 52 39 20 |s_listptr] ; R9 | 00000bc0 3d 20 6c 69 73 74 70 74 72 0d 05 be 38 4c 44 52 |= listptr...8LDR| 00000bd0 20 52 38 2c 5b 6d 61 69 6e 76 61 72 73 2c 23 76 | R8,[mainvars,#v| 00000be0 61 72 73 5f 73 71 75 61 72 65 31 5d 20 20 3b 20 |ars_square1] ; | 00000bf0 52 38 20 3d 20 73 74 61 72 74 5f 73 71 75 61 72 |R8 = start_squar| 00000c00 65 0d 05 c8 18 4c 44 52 42 20 52 37 2c 5b 67 72 |e....LDRB R7,[gr| 00000c10 69 64 70 74 72 2c 52 38 5d 0d 05 d2 13 43 4d 50 |idptr,R8]....CMP| 00000c20 53 20 52 37 2c 23 5f 63 61 6d 70 25 0d 05 dc 2d |S R7,#_camp%...-| 00000c30 4c 44 52 4e 45 42 20 52 37 2c 5b 62 6f 61 72 64 |LDRNEB R7,[board| 00000c40 70 74 72 2c 52 38 5d 20 20 3b 20 52 37 20 3d 20 |ptr,R8] ; R7 = | 00000c50 6d 6f 76 65 20 74 79 70 65 0d 05 e6 04 0d 05 f0 |move type.......| 00000c60 0d 4d 4f 56 20 52 36 2c 52 38 0d 05 fa 13 2e 67 |.MOV R6,R8.....g| 00000c70 6d 6c 5f 6d 61 6b 65 78 5f 6c 6f 6f 70 0d 06 04 |ml_makex_loop...| 00000c80 41 43 4d 50 53 20 52 36 2c 23 39 3a 53 55 42 47 |ACMPS R6,#9:SUBG| 00000c90 45 20 52 36 2c 52 36 2c 23 39 3a 42 47 54 20 67 |E R6,R6,#9:BGT g| 00000ca0 6d 6c 5f 6d 61 6b 65 78 5f 6c 6f 6f 70 20 3b 20 |ml_makex_loop ; | 00000cb0 20 20 52 36 20 3d 20 78 20 63 6f 6f 72 64 0d 06 | R6 = x coord..| 00000cc0 0e 04 0d 06 18 27 4d 4f 56 20 52 34 2c 23 31 3a |.....'MOV R4,#1:| 00000cd0 4d 4f 56 20 52 35 2c 23 30 3a 42 4c 20 67 6d 6c |MOV R5,#0:BL gml| 00000ce0 5f 67 65 6e 65 72 61 74 65 0d 06 22 27 4d 56 4e |_generate.."'MVN| 00000cf0 20 52 34 2c 23 30 3a 4d 4f 56 20 52 35 2c 23 30 | R4,#0:MOV R5,#0| 00000d00 3a 42 4c 20 67 6d 6c 5f 67 65 6e 65 72 61 74 65 |:BL gml_generate| 00000d10 0d 06 2c 27 4d 4f 56 20 52 34 2c 23 30 3a 4d 4f |..,'MOV R4,#0:MO| 00000d20 56 20 52 35 2c 23 39 3a 42 4c 20 67 6d 6c 5f 67 |V R5,#9:BL gml_g| 00000d30 65 6e 65 72 61 74 65 0d 06 36 27 4d 4f 56 20 52 |enerate..6'MOV R| 00000d40 34 2c 23 30 3a 4d 56 4e 20 52 35 2c 23 38 3a 42 |4,#0:MVN R5,#8:B| 00000d50 4c 20 67 6d 6c 5f 67 65 6e 65 72 61 74 65 0d 06 |L gml_generate..| 00000d60 40 11 3b 20 74 68 61 74 27 73 20 61 6c 6c 21 0d |@.; that's all!.| 00000d70 06 4a 35 4d 56 4e 20 52 30 2c 23 30 3a 53 54 52 |.J5MVN R0,#0:STR| 00000d80 20 52 30 2c 5b 52 39 5d 2c 23 34 20 3b 20 61 64 | R0,[R9],#4 ; ad| 00000d90 64 20 74 65 72 6d 69 6e 61 74 6f 72 20 74 6f 20 |d terminator to | 00000da0 6c 69 73 74 0d 06 54 04 0d 06 5e 1e 4c 44 4d 46 |list..T...^.LDMF| 00000db0 44 20 28 73 74 61 63 6b 29 21 2c 7b 52 30 2d 52 |D (stack)!,{R0-R| 00000dc0 31 32 2c 50 43 7d 0d 06 68 04 0d 06 72 04 0d 06 |12,PC}..h...r...| 00000dd0 7c 11 2e 67 6d 6c 5f 67 65 6e 65 72 61 74 65 0d ||..gml_generate.| 00000de0 06 86 1f 53 54 4d 46 44 20 28 73 74 61 63 6b 29 |...STMFD (stack)| 00000df0 21 2c 7b 52 36 2c 52 38 2c 6c 69 6e 6b 7d 0d 06 |!,{R6,R8,link}..| 00000e00 90 04 0d 06 9a 11 2e 67 6d 6c 5f 6d 61 69 6e 6c |.......gml_mainl| 00000e10 6f 6f 70 0d 06 a4 1d 41 44 44 20 52 38 2c 52 38 |oop....ADD R8,R8| 00000e20 2c 52 34 3a 41 44 44 20 52 38 2c 52 38 2c 52 35 |,R4:ADD R8,R8,R5| 00000e30 0d 06 ae 10 41 44 44 20 52 36 2c 52 36 2c 52 34 |....ADD R6,R6,R4| 00000e40 0d 06 b8 04 0d 06 c2 17 3b 20 6e 6f 77 20 74 65 |........; now te| 00000e50 73 74 20 76 61 6c 69 64 69 74 79 0d 06 cc 2c 52 |st validity...,R| 00000e60 53 42 53 20 52 30 2c 52 38 2c 23 30 3a 43 4d 50 |SBS R0,R8,#0:CMP| 00000e70 4c 45 53 20 52 38 2c 23 38 30 3a 42 47 54 20 67 |LES R8,#80:BGT g| 00000e80 6d 6c 5f 73 74 6f 70 0d 06 d6 42 52 53 42 53 20 |ml_stop...BRSBS | 00000e90 52 30 2c 52 36 2c 23 30 3a 43 4d 50 4c 45 53 20 |R0,R6,#0:CMPLES | 00000ea0 52 36 2c 23 38 3a 42 47 54 20 67 6d 6c 5f 73 74 |R6,#8:BGT gml_st| 00000eb0 6f 70 20 20 20 20 3b 20 20 66 61 6c 6c 65 6e 20 |op ; fallen | 00000ec0 6f 66 66 20 62 6f 61 72 64 0d 06 e0 04 0d 06 ea |off board.......| 00000ed0 44 4c 44 52 42 20 52 30 2c 5b 62 6f 61 72 64 70 |DLDRB R0,[boardp| 00000ee0 74 72 2c 52 38 5d 3a 43 4d 50 53 20 52 30 2c 23 |tr,R8]:CMPS R0,#| 00000ef0 30 3a 42 4e 45 20 67 6d 6c 5f 73 74 6f 70 20 3b |0:BNE gml_stop ;| 00000f00 20 70 69 65 63 65 20 69 6e 20 74 68 65 20 77 61 | piece in the wa| 00000f10 79 0d 06 f4 18 4c 44 52 42 20 52 30 2c 5b 67 72 |y....LDRB R0,[gr| 00000f20 69 64 70 74 72 2c 52 38 5d 0d 06 fe 4a 43 4d 50 |idptr,R8]...JCMP| 00000f30 53 20 52 30 2c 23 5f 6b 69 6e 67 25 3a 42 45 51 |S R0,#_king%:BEQ| 00000f40 20 67 6d 6c 5f 73 74 6f 70 20 3b 20 6e 6f 2d 6f | gml_stop ; no-o| 00000f50 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 6f 6e |ne is allowed on| 00000f60 20 74 68 65 20 63 68 69 65 66 27 73 20 73 71 75 | the chief's squ| 00000f70 61 72 65 0d 07 08 1e 43 4d 50 53 20 52 30 2c 23 |are....CMPS R0,#| 00000f80 5f 63 61 6d 70 25 3a 42 4e 45 20 67 6d 6c 5f 6f |_camp%:BNE gml_o| 00000f90 6b 0d 07 12 42 3b 20 61 20 63 61 6d 70 20 73 71 |k...B; a camp sq| 00000fa0 75 61 72 65 2c 20 6f 6e 6c 79 20 61 20 6d 75 73 |uare, only a mus| 00000fb0 6b 6f 76 69 74 20 63 61 6d 70 20 70 69 65 63 65 |kovit camp piece| 00000fc0 20 69 73 20 61 6c 6c 6f 77 65 64 20 6f 6e 74 6f | is allowed onto| 00000fd0 20 69 74 0d 07 1c 20 43 4d 50 53 20 52 37 2c 23 | it... CMPS R7,#| 00000fe0 5f 63 61 6d 70 25 3a 42 4e 45 20 67 6d 6c 5f 73 |_camp%:BNE gml_s| 00000ff0 74 6f 70 0d 07 26 0b 2e 67 6d 6c 5f 6f 6b 0d 07 |top..&..gml_ok..| 00001000 30 04 0d 07 3a 10 3b 20 6c 65 67 61 6c 20 6d 6f |0...:.; legal mo| 00001010 76 65 0d 07 44 12 53 54 52 20 52 38 2c 5b 52 39 |ve..D.STR R8,[R9| 00001020 5d 2c 23 34 0d 07 4e 12 42 20 67 6d 6c 5f 6d 61 |],#4..N.B gml_ma| 00001030 69 6e 6c 6f 6f 70 0d 07 58 04 0d 07 62 0d 2e 67 |inloop..X...b..g| 00001040 6d 6c 5f 73 74 6f 70 0d 07 6c 1d 4c 44 4d 46 44 |ml_stop..l.LDMFD| 00001050 20 28 73 74 61 63 6b 29 21 2c 7b 52 36 2c 52 38 | (stack)!,{R6,R8| 00001060 2c 50 43 7d 0d 07 76 04 0d 07 80 04 0d 07 8a 04 |,PC}..v.........| 00001070 0d 07 94 04 0d 07 9e 04 0d 07 a8 17 2e 62 61 73 |.............bas| 00001080 69 63 5f 74 65 73 74 5f 66 6f 72 5f 7a 61 70 0d |ic_test_for_zap.| 00001090 07 b2 20 53 54 4d 46 44 20 28 73 74 61 63 6b 29 |.. STMFD (stack)| 000010a0 21 2c 7b 52 30 2d 52 31 32 2c 6c 69 6e 6b 7d 0d |!,{R0-R12,link}.| 000010b0 07 bc 13 4d 4f 56 20 6d 61 69 6e 76 61 72 73 2c |...MOV mainvars,| 000010c0 52 30 0d 07 c6 23 4c 44 52 20 52 31 2c 5b 6d 61 |R0...#LDR R1,[ma| 000010d0 69 6e 76 61 72 73 2c 23 76 61 72 73 5f 73 71 75 |invars,#vars_squ| 000010e0 61 72 65 31 5d 0d 07 d0 27 4c 44 52 20 62 6f 61 |are1]...'LDR boa| 000010f0 72 64 70 74 72 2c 5b 6d 61 69 6e 76 61 72 73 2c |rdptr,[mainvars,| 00001100 23 76 61 72 73 5f 62 6f 61 72 64 5d 0d 07 da 13 |#vars_board]....| 00001110 42 4c 20 74 65 73 74 5f 66 6f 72 5f 7a 61 70 0d |BL test_for_zap.| 00001120 07 e4 23 4c 44 52 20 52 39 2c 5b 52 39 5d 20 3b |..#LDR R9,[R9] ;| 00001130 20 6c 2d 76 61 6c 75 65 20 6f 66 20 72 65 73 75 | l-value of resu| 00001140 6c 74 0d 07 ee 0f 53 54 52 20 52 30 2c 5b 52 39 |lt....STR R0,[R9| 00001150 5d 0d 07 f8 1e 4c 44 4d 46 44 20 28 73 74 61 63 |]....LDMFD (stac| 00001160 6b 29 21 2c 7b 52 30 2d 52 31 32 2c 50 43 7d 0d |k)!,{R0-R12,PC}.| 00001170 08 02 04 0d 08 0c 04 0d 08 16 47 5d 3a 74 66 7a |..........G]:tfz| 00001180 5f 6d 6f 76 65 3d 35 3a 74 66 7a 5f 74 61 72 67 |_move=5:tfz_targ| 00001190 65 74 3d 36 3a 74 66 7a 5f 74 61 62 6c 65 70 74 |et=6:tfz_tablept| 000011a0 72 3d 39 3a 74 66 7a 5f 64 69 72 6c 6f 6f 70 3d |r=9:tfz_dirloop=| 000011b0 37 3a 74 66 7a 5f 72 65 73 75 6c 74 3d 38 0d 08 |7:tfz_result=8..| 000011c0 20 29 f4 20 61 6c 73 6f 20 75 73 65 73 20 52 31 | ). also uses R1| 000011d0 30 20 67 72 69 64 70 74 72 2c 20 52 31 31 20 62 |0 gridptr, R11 b| 000011e0 6f 61 72 64 70 74 72 0d 08 2a 10 5b 4f 50 54 20 |oardptr..*.[OPT | 000011f0 70 61 73 73 25 2b 38 0d 08 34 04 0d 08 3e 49 2e |pass%+8..4...>I.| 00001200 74 65 73 74 5f 66 6f 72 5f 7a 61 70 20 3b 20 52 |test_for_zap ; R| 00001210 31 20 69 73 20 74 68 65 20 73 71 75 61 72 65 20 |1 is the square | 00001220 74 6f 20 62 65 20 74 65 73 74 65 64 2e 20 20 20 |to be tested. | 00001230 20 52 31 31 2f 62 6f 61 72 64 70 74 72 20 69 73 | R11/boardptr is| 00001240 20 73 65 74 0d 08 48 13 3b 20 72 65 74 75 72 6e | set..H.; return| 00001250 20 69 6e 20 52 30 2e 0d 08 52 51 3b 20 72 65 74 | in R0...RQ; ret| 00001260 75 72 6e 20 69 73 20 34 20 62 79 74 65 73 2e 20 |urn is 4 bytes. | 00001270 20 45 61 63 68 20 69 73 20 61 20 6e 75 6d 62 65 | Each is a numbe| 00001280 72 20 6f 66 20 61 20 73 71 75 61 72 65 20 74 68 |r of a square th| 00001290 61 74 20 68 61 73 20 62 65 65 6e 20 6b 69 6c 6c |at has been kill| 000012a0 65 64 2c 20 6f 72 20 30 0d 08 5c 04 0d 08 66 20 |ed, or 0..\...f | 000012b0 53 54 4d 46 44 20 28 73 74 61 63 6b 29 21 2c 7b |STMFD (stack)!,{| 000012c0 52 31 2d 52 31 30 2c 6c 69 6e 6b 7d 0d 08 70 1f |R1-R10,link}..p.| 000012d0 4c 44 52 42 20 74 66 7a 5f 6d 6f 76 65 2c 5b 62 |LDRB tfz_move,[b| 000012e0 6f 61 72 64 70 74 72 2c 52 31 5d 0d 08 7a 2d 43 |oardptr,R1]..z-C| 000012f0 4d 50 53 20 74 66 7a 5f 6d 6f 76 65 2c 23 5f 6b |MPS tfz_move,#_k| 00001300 69 6e 67 25 3a 42 45 51 20 74 66 7a 5f 6e 75 6c |ing%:BEQ tfz_nul| 00001310 6c 5f 72 65 73 75 6c 74 0d 08 84 4e 43 4d 50 53 |l_result...NCMPS| 00001320 20 74 66 7a 5f 6d 6f 76 65 2c 23 5f 73 77 65 64 | tfz_move,#_swed| 00001330 65 25 3a ec 51 20 74 66 7a 5f 74 61 72 67 65 74 |e%:.Q tfz_target| 00001340 2c 23 5f 6d 75 73 6b 6f 76 69 74 25 3a 4d 4f 56 |,#_muskovit%:MOV| 00001350 4e 45 20 74 66 7a 5f 74 61 72 67 65 74 2c 23 5f |NE tfz_target,#_| 00001360 73 77 65 64 65 25 0d 08 8e 2e 4c 44 52 20 74 66 |swede%....LDR tf| 00001370 7a 5f 74 61 62 6c 65 70 74 72 2c 5b 6d 61 69 6e |z_tableptr,[main| 00001380 76 61 72 73 2c 23 76 61 72 73 5f 7a 61 70 74 61 |vars,#vars_zapta| 00001390 62 6c 65 5d 0d 08 98 4d 41 44 44 20 74 66 7a 5f |ble]...MADD tfz_| 000013a0 74 61 62 6c 65 70 74 72 2c 74 66 7a 5f 74 61 62 |tableptr,tfz_tab| 000013b0 6c 65 70 74 72 2c 52 31 2c 4c 53 4c 20 23 34 20 |leptr,R1,LSL #4 | 000013c0 3b 20 34 2d 64 69 72 20 2a 20 34 2d 62 79 74 65 |; 4-dir * 4-byte| 000013d0 73 20 66 6f 72 20 65 61 63 68 20 73 71 75 61 72 |s for each squar| 000013e0 65 0d 08 a2 25 4c 44 52 20 67 72 69 64 70 74 72 |e...%LDR gridptr| 000013f0 2c 5b 6d 61 69 6e 76 61 72 73 2c 23 76 61 72 73 |,[mainvars,#vars| 00001400 5f 67 72 69 64 5d 0d 08 ac 04 0d 08 b6 15 4d 4f |_grid]........MO| 00001410 56 20 74 66 7a 5f 72 65 73 75 6c 74 2c 23 30 0d |V tfz_result,#0.| 00001420 08 c0 16 4d 4f 56 20 74 66 7a 5f 64 69 72 6c 6f |...MOV tfz_dirlo| 00001430 6f 70 2c 23 34 0d 08 ca 37 2e 74 66 7a 5f 6c 6f |op,#4...7.tfz_lo| 00001440 6f 70 20 20 20 20 3b 20 52 31 20 6d 75 73 74 20 |op ; R1 must | 00001450 62 65 20 6d 61 69 6e 74 61 69 6e 65 64 20 75 6e |be maintained un| 00001460 74 69 6c 20 74 66 7a 5f 6c 6f 6f 70 0d 08 d4 39 |til tfz_loop...9| 00001470 4c 44 52 42 20 52 31 2c 5b 74 66 7a 5f 74 61 62 |LDRB R1,[tfz_tab| 00001480 6c 65 70 74 72 5d 3a 43 4d 50 53 20 52 30 2c 23 |leptr]:CMPS R0,#| 00001490 32 35 35 3a 42 45 51 20 74 66 7a 5f 6e 75 6c 6c |255:BEQ tfz_null| 000014a0 5f 6c 6f 6f 70 0d 08 de 37 4c 44 52 42 20 52 30 |_loop...7LDRB R0| 000014b0 2c 5b 62 6f 61 72 64 70 74 72 2c 52 31 5d 20 3b |,[boardptr,R1] ;| 000014c0 20 74 79 70 65 20 6f 66 20 70 69 65 63 65 20 69 | type of piece i| 000014d0 6e 20 74 68 65 20 6d 69 64 64 6c 65 0d 08 e8 20 |n the middle... | 000014e0 43 4d 50 53 20 52 30 2c 23 5f 6b 69 6e 67 25 3a |CMPS R0,#_king%:| 000014f0 42 45 51 20 74 66 7a 5f 6b 69 6e 67 0d 08 f2 28 |BEQ tfz_king...(| 00001500 43 4d 50 53 20 52 30 2c 74 66 7a 5f 74 61 72 67 |CMPS R0,tfz_targ| 00001510 65 74 3a 42 4e 45 20 74 66 7a 5f 6e 75 6c 6c 5f |et:BNE tfz_null_| 00001520 6c 6f 6f 70 0d 08 fc 04 0d 09 06 1d 4c 44 52 42 |loop........LDRB| 00001530 20 52 30 2c 5b 74 66 7a 5f 74 61 62 6c 65 70 74 | R0,[tfz_tablept| 00001540 72 2c 23 31 5d 0d 09 10 57 4c 44 52 42 20 52 30 |r,#1]...WLDRB R0| 00001550 2c 5b 62 6f 61 72 64 70 74 72 2c 52 30 5d 3a 43 |,[boardptr,R0]:C| 00001560 4d 50 53 20 52 30 2c 74 66 7a 5f 6d 6f 76 65 3a |MPS R0,tfz_move:| 00001570 42 4e 45 20 74 66 7a 5f 6e 75 6c 6c 5f 6c 6f 6f |BNE tfz_null_loo| 00001580 70 20 3b 20 6e 6f 20 70 61 69 72 20 6f 70 70 6f |p ; no pair oppo| 00001590 73 69 74 65 20 74 6f 20 74 61 6b 65 0d 09 1a 04 |site to take....| 000015a0 0d 09 24 20 2e 74 66 7a 5f 7a 61 70 20 20 20 20 |..$ .tfz_zap | 000015b0 20 3b 20 20 52 31 20 73 74 69 6c 6c 20 73 65 74 | ; R1 still set| 000015c0 0d 09 2e 23 41 44 44 20 52 31 2c 52 31 2c 23 31 |...#ADD R1,R1,#1| 000015d0 20 3b 20 73 71 75 61 72 65 20 74 6f 20 6b 69 6c | ; square to kil| 000015e0 6c 2b 31 0d 09 38 42 41 44 44 20 74 66 7a 5f 72 |l+1..8BADD tfz_r| 000015f0 65 73 75 6c 74 2c 52 31 2c 74 66 7a 5f 72 65 73 |esult,R1,tfz_res| 00001600 75 6c 74 2c 4c 53 4c 20 23 38 20 20 3b 20 69 6e |ult,LSL #8 ; in| 00001610 73 65 72 74 20 69 6e 74 6f 20 62 6f 74 74 6f 6d |sert into bottom| 00001620 20 62 79 74 65 0d 09 42 04 0d 09 4c 12 2e 74 66 | byte..B...L..tf| 00001630 7a 5f 6e 75 6c 6c 5f 6c 6f 6f 70 0d 09 56 24 41 |z_null_loop..V$A| 00001640 44 44 20 74 66 7a 5f 74 61 62 6c 65 70 74 72 2c |DD tfz_tableptr,| 00001650 74 66 7a 5f 74 61 62 6c 65 70 74 72 2c 23 34 0d |tfz_tableptr,#4.| 00001660 09 60 32 53 55 42 53 20 74 66 7a 5f 64 69 72 6c |.`2SUBS tfz_dirl| 00001670 6f 6f 70 2c 74 66 7a 5f 64 69 72 6c 6f 6f 70 2c |oop,tfz_dirloop,| 00001680 23 31 20 3a 20 42 4e 45 20 74 66 7a 5f 6c 6f 6f |#1 : BNE tfz_loo| 00001690 70 0d 09 6a 04 0d 09 74 32 4d 4f 56 20 52 30 2c |p..j...t2MOV R0,| 000016a0 74 66 7a 5f 72 65 73 75 6c 74 20 3a 20 4c 44 4d |tfz_result : LDM| 000016b0 46 44 20 28 73 74 61 63 6b 29 21 2c 7b 52 31 2d |FD (stack)!,{R1-| 000016c0 52 31 30 2c 50 43 7d 0d 09 7e 04 0d 09 88 3d 2e |R10,PC}..~....=.| 000016d0 74 66 7a 5f 6e 75 6c 6c 5f 72 65 73 75 6c 74 20 |tfz_null_result | 000016e0 3a 20 4d 4f 56 20 52 30 2c 23 30 20 3a 20 4c 44 |: MOV R0,#0 : LD| 000016f0 4d 46 44 20 28 73 74 61 63 6b 29 21 2c 7b 52 31 |MFD (stack)!,{R1| 00001700 2d 52 31 30 2c 50 43 7d 0d 09 92 04 0d 09 9c 0d |-R10,PC}........| 00001710 2e 74 66 7a 5f 6b 69 6e 67 0d 09 a6 2e 43 4d 50 |.tfz_king....CMP| 00001720 53 20 74 66 7a 5f 74 61 72 67 65 74 2c 23 5f 73 |S tfz_target,#_s| 00001730 77 65 64 65 25 3a 42 4e 45 20 74 66 7a 5f 6e 75 |wede%:BNE tfz_nu| 00001740 6c 6c 5f 6c 6f 6f 70 0d 09 b0 3e 3b 20 6b 69 6e |ll_loop...>; kin| 00001750 67 20 72 65 71 75 69 72 65 73 20 34 20 61 74 74 |g requires 4 att| 00001760 61 63 6b 65 72 73 2c 20 62 75 74 20 74 68 65 73 |ackers, but thes| 00001770 65 20 6d 61 79 20 62 65 20 63 61 6d 70 20 73 71 |e may be camp sq| 00001780 75 61 72 65 73 0d 09 ba 04 0d 09 c4 1d 4c 44 52 |uares........LDR| 00001790 42 20 52 30 2c 5b 74 66 7a 5f 74 61 62 6c 65 70 |B R0,[tfz_tablep| 000017a0 74 72 2c 23 31 5d 0d 09 ce 18 4c 44 52 42 20 52 |tr,#1]....LDRB R| 000017b0 31 2c 5b 67 72 69 64 70 74 72 2c 52 30 5d 0d 09 |1,[gridptr,R0]..| 000017c0 d8 4e 4c 44 52 42 20 52 30 2c 5b 62 6f 61 72 64 |.NLDRB R0,[board| 000017d0 70 74 72 2c 52 30 5d 3a 43 4d 50 53 20 52 30 2c |ptr,R0]:CMPS R0,| 000017e0 74 66 7a 5f 6d 6f 76 65 3a 43 4d 50 4e 45 53 20 |tfz_move:CMPNES | 000017f0 52 31 2c 23 5f 63 61 6d 70 25 3a 42 4e 45 20 74 |R1,#_camp%:BNE t| 00001800 66 7a 5f 6e 75 6c 6c 5f 6c 6f 6f 70 0d 09 e2 04 |fz_null_loop....| 00001810 0d 09 ec 47 4c 44 52 42 20 52 30 2c 5b 74 66 7a |...GLDRB R0,[tfz| 00001820 5f 74 61 62 6c 65 70 74 72 2c 23 32 5d 3a 43 4d |_tableptr,#2]:CM| 00001830 50 53 20 52 30 2c 23 32 35 35 3a 42 45 51 20 74 |PS R0,#255:BEQ t| 00001840 66 7a 5f 6e 75 6c 6c 5f 6c 6f 6f 70 20 3b 20 6e |fz_null_loop ; n| 00001850 6f 20 73 69 64 65 73 0d 09 f6 18 4c 44 52 42 20 |o sides....LDRB | 00001860 52 31 2c 5b 67 72 69 64 70 74 72 2c 52 30 5d 0d |R1,[gridptr,R0].| 00001870 0a 00 4e 4c 44 52 42 20 52 30 2c 5b 62 6f 61 72 |..NLDRB R0,[boar| 00001880 64 70 74 72 2c 52 30 5d 3a 43 4d 50 53 20 52 30 |dptr,R0]:CMPS R0| 00001890 2c 74 66 7a 5f 6d 6f 76 65 3a 43 4d 50 4e 45 53 |,tfz_move:CMPNES| 000018a0 20 52 31 2c 23 5f 63 61 6d 70 25 3a 42 4e 45 20 | R1,#_camp%:BNE | 000018b0 74 66 7a 5f 6e 75 6c 6c 5f 6c 6f 6f 70 0d 0a 0a |tfz_null_loop...| 000018c0 04 0d 0a 14 1d 4c 44 52 42 20 52 30 2c 5b 74 66 |.....LDRB R0,[tf| 000018d0 7a 5f 74 61 62 6c 65 70 74 72 2c 23 33 5d 0d 0a |z_tableptr,#3]..| 000018e0 1e 18 4c 44 52 42 20 52 31 2c 5b 67 72 69 64 70 |..LDRB R1,[gridp| 000018f0 74 72 2c 52 30 5d 0d 0a 28 4e 4c 44 52 42 20 52 |tr,R0]..(NLDRB R| 00001900 30 2c 5b 62 6f 61 72 64 70 74 72 2c 52 30 5d 3a |0,[boardptr,R0]:| 00001910 43 4d 50 53 20 52 30 2c 74 66 7a 5f 6d 6f 76 65 |CMPS R0,tfz_move| 00001920 3a 43 4d 50 4e 45 53 20 52 31 2c 23 5f 63 61 6d |:CMPNES R1,#_cam| 00001930 70 25 3a 42 4e 45 20 74 66 7a 5f 6e 75 6c 6c 5f |p%:BNE tfz_null_| 00001940 6c 6f 6f 70 0d 0a 32 04 0d 0a 3c 3a 4c 44 52 42 |loop..2...<:LDRB| 00001950 20 52 31 2c 5b 74 66 7a 5f 74 61 62 6c 65 70 74 | R1,[tfz_tablept| 00001960 72 5d 20 20 3b 20 20 73 71 75 61 72 65 20 74 68 |r] ; square th| 00001970 61 74 20 74 68 65 20 63 68 69 65 66 20 69 73 20 |at the chief is | 00001980 69 6e 0d 0a 46 0d 42 20 74 66 7a 5f 7a 61 70 0d |in..F.B tfz_zap.| 00001990 0a 50 05 5d 0d 0a 5a 05 ed 0d 0a 64 05 e1 0d 0a |.P.]..Z....d....| 000019a0 6e 04 0d 0a 78 04 0d 0a 82 04 0d 0a 8c 04 0d 0a |n...x...........| 000019b0 96 04 0d 0a a0 16 dd f2 67 65 6e 65 72 61 74 65 |........generate| 000019c0 7a 61 70 74 61 62 6c 65 0d 0a aa 21 ea 20 78 25 |zaptable...!. x%| 000019d0 2c 79 25 2c 64 69 72 25 2c 20 20 72 78 25 2c 20 |,y%,dir%, rx%, | 000019e0 72 79 25 2c 20 70 74 72 25 0d 0a b4 14 de 20 64 |ry%, ptr%..... d| 000019f0 78 25 28 33 29 2c 20 64 79 25 28 33 29 0d 0a be |x%(3), dy%(3)...| 00001a00 16 de 20 7a 61 70 74 61 62 6c 65 25 20 38 32 2a |.. zaptable% 82*| 00001a10 34 2a 34 0d 0a c8 04 0d 0a d2 4d 64 78 25 28 29 |4*4.......Mdx%()| 00001a20 3d 30 3a 64 79 25 28 29 3d 30 3a 64 78 25 28 30 |=0:dy%()=0:dx%(0| 00001a30 29 3d 31 3a 64 79 25 28 31 29 3d 31 3a 64 78 25 |)=1:dy%(1)=1:dx%| 00001a40 28 32 29 3d 2d 31 3a 64 79 25 28 33 29 3d 2d 31 |(2)=-1:dy%(3)=-1| 00001a50 20 3a f4 20 63 6c 6f 63 6b 77 69 73 65 20 66 72 | :. clockwise fr| 00001a60 6f 6d 20 52 0d 0a dc 12 70 74 72 25 3d 7a 61 70 |om R....ptr%=zap| 00001a70 74 61 62 6c 65 25 0d 0a e6 04 0d 0a f0 0e e3 20 |table%......... | 00001a80 79 25 3d 30 20 b8 20 38 0d 0a fa 0e e3 20 78 25 |y%=0 . 8..... x%| 00001a90 3d 30 20 b8 20 38 0d 0b 04 10 e3 20 64 69 72 25 |=0 . 8..... dir%| 00001aa0 3d 30 20 b8 20 33 0d 0b 0e 29 72 78 25 3d 78 25 |=0 . 3...)rx%=x%| 00001ab0 2b 32 2a 64 78 25 28 64 69 72 25 29 3a 72 79 25 |+2*dx%(dir%):ry%| 00001ac0 3d 79 25 2b 32 2a 64 79 25 28 64 69 72 25 29 0d |=y%+2*dy%(dir%).| 00001ad0 0b 18 25 e7 20 72 78 25 3c 30 20 84 20 72 78 25 |..%. rx%<0 . rx%| 00001ae0 3e 38 20 84 20 72 79 25 3c 30 20 84 20 72 79 25 |>8 . ry%<0 . ry%| 00001af0 3e 38 20 8c 0d 0b 22 0c 21 70 74 72 25 3d 2d 31 |>8 ...".!ptr%=-1| 00001b00 0d 0b 2c 05 cc 0d 0b 36 27 3f 70 74 72 25 3d 78 |..,....6'?ptr%=x| 00001b10 25 2b 64 78 25 28 64 69 72 25 29 2b 39 2a 28 79 |%+dx%(dir%)+9*(y| 00001b20 25 2b 64 79 25 28 64 69 72 25 29 29 0d 0b 40 14 |%+dy%(dir%))..@.| 00001b30 70 74 72 25 3f 31 3d 72 78 25 2b 39 2a 72 79 25 |ptr%?1=rx%+9*ry%| 00001b40 0d 0b 4a 04 0d 0b 54 1c f4 20 6e 6f 77 20 73 65 |..J...T.. now se| 00001b50 74 20 74 68 65 20 73 69 64 65 20 6c 6f 62 65 73 |t the side lobes| 00001b60 0d 0b 5e 21 72 78 25 2d 3d 64 78 25 28 64 69 72 |..^!rx%-=dx%(dir| 00001b70 25 29 3a 72 79 25 2d 3d 64 79 25 28 64 69 72 25 |%):ry%-=dy%(dir%| 00001b80 29 0d 0b 68 04 0d 0b 72 59 e7 20 a4 6f 6b 28 72 |)..h...rY. .ok(r| 00001b90 78 25 2b 64 79 25 28 64 69 72 25 29 29 20 80 20 |x%+dy%(dir%)) . | 00001ba0 a4 6f 6b 28 72 78 25 2d 64 79 25 28 64 69 72 25 |.ok(rx%-dy%(dir%| 00001bb0 29 29 20 80 20 a4 6f 6b 28 72 79 25 2b 64 78 25 |)) . .ok(ry%+dx%| 00001bc0 28 64 69 72 25 29 29 20 80 20 a4 6f 6b 28 72 79 |(dir%)) . .ok(ry| 00001bd0 25 2d 64 78 25 28 64 69 72 25 29 29 20 8c 0d 0b |%-dx%(dir%)) ...| 00001be0 7c 2c 70 74 72 25 3f 32 3d 28 72 78 25 2b 64 79 ||,ptr%?2=(rx%+dy| 00001bf0 25 28 64 69 72 25 29 29 2b 39 2a 28 72 79 25 2b |%(dir%))+9*(ry%+| 00001c00 64 78 25 28 64 69 72 25 29 29 0d 0b 86 2c 70 74 |dx%(dir%))...,pt| 00001c10 72 25 3f 33 3d 28 72 78 25 2d 64 79 25 28 64 69 |r%?3=(rx%-dy%(di| 00001c20 72 25 29 29 2b 39 2a 28 72 79 25 2d 64 78 25 28 |r%))+9*(ry%-dx%(| 00001c30 64 69 72 25 29 29 0d 0b 90 05 cc 0d 0b 9a 19 70 |dir%)).........p| 00001c40 74 72 25 3f 32 3d 32 35 35 3a 70 74 72 25 3f 33 |tr%?2=255:ptr%?3| 00001c50 3d 32 35 35 0d 0b a4 05 cd 0d 0b ae 05 cd 0d 0b |=255............| 00001c60 b8 0b 70 74 72 25 2b 3d 34 0d 0b c2 05 ed 0d 0b |..ptr%+=4.......| 00001c70 cc 05 ed 0d 0b d6 05 ed 0d 0b e0 50 f4 20 4f 53 |...........P. OS| 00001c80 43 4c 49 28 22 53 41 56 45 20 3c 48 6e 65 66 74 |CLI("SAVE <Hneft| 00001c90 61 66 6c 24 44 69 72 3e 2e 54 61 62 6c 65 54 65 |afl$Dir>.TableTe| 00001ca0 73 74 20 22 2b 53 54 52 24 7e 28 7a 61 70 74 61 |st "+STR$~(zapta| 00001cb0 62 6c 65 25 29 2b 22 2b 22 2b 53 54 52 24 7e 28 |ble%)+"+"+STR$~(| 00001cc0 38 32 2a 34 2a 34 29 29 0d 0b ea 05 e1 0d 0b f4 |82*4*4))........| 00001cd0 05 3a 0d 0b fe 05 3a 0d 0c 08 0c dd a4 6f 6b 28 |.:....:......ok(| 00001ce0 78 25 29 0d 0c 12 17 e7 20 78 25 3e 3d 30 20 80 |x%)..... x%>=0 .| 00001cf0 20 78 25 3c 39 20 8c 20 3d b9 0d 0c 1c 06 3d a3 | x%<9 . =.....=.| 00001d00 0d 0c 26 05 3a 0d 0c 30 05 3a 0d 0c 3a 04 0d 0c |..&.:..0.:..:...| 00001d10 44 04 0d 0c 4e 04 0d 0c 58 04 0d ff |D...N...X...| 00001d1c