Home » Archimedes archive » Acorn User » AU 1996-06.adf » Regulars » RTR/JoySource
RTR/JoySource
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-06.adf » Regulars |
Filename: | RTR/JoySource |
Read OK: | ✔ |
File size: | 0D66 bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM >RunTheRisc.No15.JoySource 20REM ASSEMBLE A RELOCATABLE MODULE 30REM To drive an Analogue Joystick from the Printer Port 40REM With SWIs 50PROC_CINT 60PRINTSPC(24);~MS;" ";~ME 70*KEY 1 OSCLI("*SAVE RunTheRisc.No15.Pjoy "+STR$~MS+" "+STR$~ME) |M 80*KEY 2 *SETTYPE RunTheRisc.No15.PjoyA FFA |M 90*KEY 3 *RMLOAD RunTheRisc.No15.PjoyA |M 100*KEY 5 QUIT|M 110*KEY 11 SYS&43F40,0 TO A%:P.~A%|M 120*KEY 12 SYS&43F40,1 TO A%:P.~A%|M 130 140PRINT"Code length ";ME-MS 150OSCLI("*SAVE RunTheRisc.No15.PjoyA "+STR$~MS+" "+STR$~ME) 160*SETTYPE RunTheRisc.No15.PjoyA FFA 170*RMLOAD RunTheRisc.No15.PjoyA 180 190END 200DEF PROC_CINT 210REM Code INITILISATION 220DIM CODE% 1000 230FOR A%=0 TO 3 STEP 3 240P%=CODE% 250[ 260OPT A% 270.MS \ MODULE START LABLE 280EQUD 0 \ START CODE 290EQUD IC-MS \ INITILISATION OFFSET 300EQUD FC-MS \ FINILISATION CODE 310EQUD 0 \ SERVICE CODE 320EQUD TS-MS \ TITLE STRING OFFSET 330EQUD HS-MS \ HELP STRING OFFSET 340EQUD 0 \ COMMAND TABLE OFFSET 350EQUD &43F40 \ SWI CHUNK BASE 360EQUD PP-MS \ SWI HANDLER CODE 370EQUD DT-MS \ SWI DECODING TABLE 380EQUD 0 \ SWI DECODING CODE 390EQUD 0 \ END OF TABLE MARKER 400.HS EQUS "Analogue Joystick on Printer Port" 410EQUB 09 420EQUS "1.00 (5 April 1996) Joystick Module" 430EQUB 0 440ALIGN 450.TS EQUS "Printer_Port_Analogue_Joystick" 460EQUB 0 470ALIGN 480.DT EQUS "Joystick" 490EQUB 0 500EQUS"Read" 510EQUB 0 520EQUB 0 530 540ALIGN 550.IC \ START CODE 560\ CLAIM MEMORY 570STMFD (13)!,{14} \ RENUMBER RETURN 580\ Make Printer Port Output 590MOV R0,#2 600MOV R2,#&DF 610MOV R1,#0 620SWI &42EC1 630 640LDMFD (13) !,{15} \ BACK FROM WHENST CAME 650 660.FC \ FINILISATION CODE 670STMFD (13)!,{14} \ RENUMBER RETURN 680\Nothing to do here 690LDMFD (13) !,{15} \ BACK FROM WHENST CAME 700 710.PP \ MACHINE CODE TO HANDLE Joystick read 720 730CMP R11,#(EOJ - JT)/4 740ADDLO PC, PC, R11, LSL #2 750B UNKN 760.JT 770B PP0 780.EOJ 790.UNKN 800ADR R0,ErrTok 810MOV R1, #0 820MOV R2, #0 830ADR R4, HS 840SWI "XMessageTrans_ErrorLookup" 850ORRS PC, R14, #&10000000\ #Overflow_Flag 860.ErrTok 870EQUD &1E6 880EQUS "BadSWI" 890EQUB 0 900ALIGN 910\ Read Joystick 920.PP0 930STMFD (13)!,{14} 940STMFD R13!,{R1,R2,R3,R4,R5} 950TEQP R15,#&C000003 \ Disable interrupts 960 970MOV R4,#0 \ Count register 980MOV R0,#1 990MOV R1,#1 1000SWI &42EC1 \ Output a one 1010MOV R0,#0 1020.LoopX 1030ADD R4,R4,#1 1040SWI &42EC1 1050TST R2,#&80 1060BNE LoopX 1070MOV R3,#81 \ The mid X value 1080SUBS R4,R4,R3 1090BMI NegLX \ Negitave Limit 1100CMP R4,#64 1110MOVGE R4,#64 1120B StrVX 1130.NegLX 1140CMN R4,#64 1150MVNLE R4,#63 1160.StrVX 1170AND R5,R4,#&FF 1180 1190MOV R4,#0 \ Count register 1200MOV R0,#1 1210MOV R1,#2 1220SWI &42EC1 \ Output a one to the Y monostable 1230MOV R0,#0 1240.LoopY 1250ADD R4,R4,#1 1260SWI &42EC1 1270TST R2,#&80 1280BNE LoopY 1290MOV R3,#87 \ The mid Y value 1300SUBS R4,R4,R3 1310BMI NegLY \ Negitave Limit 1320CMP R4,#64 1330MOVGE R4,#64 1340B StrVY 1350.NegLY 1360CMN R4,#64 1370MVNLE R4,#63 1380.StrVY 1390\Comment out the next two lines 1400\To invert the Y value 1410EOR R4,R4,#&FF 1420ADD R4,R4,#1 1430AND R4,R4,#&FF 1440 1450MOV R0,#1 1460MOV R1,#0 1470SWI &42EC1 \ Output a zero 1480 1490ORR R0, R4,R5,LSL#8 1500\ Add in fire buttons 1510TST R2,#&40 1520ORREQ R0,R0,#&10000 1530\Remove the next 6 lines for a mono direction port 1540TST R2,#&20 1550ORREQ R0,R0,#&20000 1560TST R2,#&10 1570ORREQ R0,R0,#&40000 1580TST R2,#&8 1590ORREQ R0,R0,#&80000 1600 1610LDMFD R13!,{R1,R2,R3,R4,R5} 1620LDMFD (13) !,{15} \ BACK FROM WHENST CAME 1630 1640.ME \ LABLE FOR MODULE END 1650 1660] 1670NEXT 1680ENDPROC
� >RunTheRisc.No15.JoySource #� ASSEMBLE A RELOCATABLE MODULE 9� To drive an Analogue Joystick from the Printer Port (� With SWIs 2 �_CINT <�(24);~MS;" ";~ME FF*KEY 1 OSCLI("*SAVE RunTheRisc.No15.Pjoy "+STR$~MS+" "+STR$~ME) |M P0*KEY 2 *SETTYPE RunTheRisc.No15.PjoyA FFA |M Z+*KEY 3 *RMLOAD RunTheRisc.No15.PjoyA |M d*KEY 5 QUIT|M n%*KEY 11 SYS&43F40,0 TO A%:P.~A%|M x%*KEY 12 SYS&43F40,1 TO A%:P.~A%|M � ��"Code length ";ME-MS �3�("*SAVE RunTheRisc.No15.PjoyA "+�~MS+" "+�~ME) �&*SETTYPE RunTheRisc.No15.PjoyA FFA �!*RMLOAD RunTheRisc.No15.PjoyA � �� �� �_CINT �� Code INITILISATION �� CODE% 1000 �� A%=0 � 3 � 3 �P%=CODE% �[ OPT A% .MS \ �ULE START LABLE EQUD 0 \ START CODE "$EQUD IC-MS \ INITILISATION �SET ,#EQUD FC-MS \ FINILISATION CODE 6EQUD 0 \ SERVICE CODE @#EQUD TS-MS \ TITLE STRING �SET J EQUD HS-MS \ Ǔ STRING �SET T$EQUD 0 \ COMMAND TABLE �SET ^ EQUD &43F40 \ SWI CHUNK BASE h"EQUD PP-MS \ SWI HANDLER CODE r$EQUD DT-MS \ SWI DECODING TABLE |#EQUD 0 \ SWI DECODING CODE �"EQUD 0 \ � � TABLE MARKER �0.HS EQUS "Analogue Joystick on Printer Port" �EQUB 09 �.EQUS "1.00 (5 April 1996) Joystick Module" � EQUB 0 � ALIGN �-.TS EQUS "Printer_Port_Analogue_Joystick" � EQUB 0 � ALIGN �.DT EQUS "Joystick" � EQUB 0 �EQUS"Read" � EQUB 0 EQUB 0 ALIGN &.IC \ START CODE 0\ CLAIM MEMORY :STMFD (13)!,{14} \ Ǚ � D\ Make Printer Port Output N MOV R0,#2 XMOV R2,#&DF b MOV R1,#0 lSWI &42EC1 v �*LDMFD (13) !,{15} \ BACK FROM �ST CAME � �.FC \ FINILISATION CODE �STMFD (13)!,{14} \ Ǚ � �\Nothing to do here �*LDMFD (13) !,{15} \ BACK FROM �ST CAME � �-.PP \ MACHINE CODE � HANDLE Joystick read � �CMP R11,#(EOJ - JT)/4 �ADDLO PC, PC, R11, LSL #2 � B UNKN �.JT B PP0 .EOJ .UNKN ADR R0,ErrTok *MOV R1, #0 4MOV R2, #0 >ADR R4, HS H#SWI "XMessageTrans_ErrorLookup" R,�RS PC, R14, #&10000000\ #Overflow_Flag \.ErrTok f EQUD &1E6 pEQUS "BadSWI" z EQUB 0 � ALIGN �\ Read Joystick �.PP0 �STMFD (13)!,{14} �STMFD R13!,{R1,R2,R3,R4,R5} �+TEQP R15,#&C000003 \ Disable interrupts � �MOV R4,#0 \ Count register � MOV R0,#1 � MOV R1,#1 �SWI &42EC1 \ Output a one � MOV R0,#0 � .LoopX ADD R4,R4,#1 SWI &42EC1 TST R2,#&80 $ BNE LoopX . MOV R3,#81 \ The mid X value 8SUBS R4,R4,R3 BBMI NegLX \ Negitave Limit LCMP R4,#64 VMOVGE R4,#64 `B StrVX j .NegLX tCMN R4,#64 ~MVNLE R4,#63 � .StrVX �� R5,R4,#&FF � �MOV R4,#0 \ Count register � MOV R0,#1 � MOV R1,#2 �1SWI &42EC1 \ Output a one to the Y monostable � MOV R0,#0 � .LoopY �ADD R4,R4,#1 �SWI &42EC1 �TST R2,#&80 BNE LoopY MOV R3,#87 \ The mid Y value SUBS R4,R4,R3 BMI NegLY \ Negitave Limit (CMP R4,#64 2MOVGE R4,#64 <B StrVY F .NegLY PCMN R4,#64 ZMVNLE R4,#63 d .StrVY n#\Comment out the next two lines x\To invert the Y value �� R4,R4,#&FF �ADD R4,R4,#1 �� R4,R4,#&FF � � MOV R0,#1 � MOV R1,#0 �SWI &42EC1 \ Output a zero � ��R R0, R4,R5,LSL#8 �\ Add in fire buttons �TST R2,#&40 ��REQ R0,R0,#&10000 �6\Remove the next 6 lines for a mono direction port TST R2,#&20 �REQ R0,R0,#&20000 TST R2,#&10 "�REQ R0,R0,#&40000 ,TST R2,#&8 6�REQ R0,R0,#&80000 @ JLDMFD R13!,{R1,R2,R3,R4,R5} T*LDMFD (13) !,{15} \ BACK FROM �ST CAME ^ h.ME \ LABLE � �ULE � r |] �� �� �
00000000 0d 00 0a 20 f4 20 3e 52 75 6e 54 68 65 52 69 73 |... . >RunTheRis| 00000010 63 2e 4e 6f 31 35 2e 4a 6f 79 53 6f 75 72 63 65 |c.No15.JoySource| 00000020 0d 00 14 23 f4 20 41 53 53 45 4d 42 4c 45 20 41 |...#. ASSEMBLE A| 00000030 20 52 45 4c 4f 43 41 54 41 42 4c 45 20 4d 4f 44 | RELOCATABLE MOD| 00000040 55 4c 45 0d 00 1e 39 f4 20 54 6f 20 64 72 69 76 |ULE...9. To driv| 00000050 65 20 61 6e 20 41 6e 61 6c 6f 67 75 65 20 4a 6f |e an Analogue Jo| 00000060 79 73 74 69 63 6b 20 66 72 6f 6d 20 74 68 65 20 |ystick from the | 00000070 50 72 69 6e 74 65 72 20 50 6f 72 74 0d 00 28 0f |Printer Port..(.| 00000080 f4 20 57 69 74 68 20 53 57 49 73 0d 00 32 0a f2 |. With SWIs..2..| 00000090 5f 43 49 4e 54 0d 00 3c 16 f1 89 28 32 34 29 3b |_CINT..<...(24);| 000000a0 7e 4d 53 3b 22 20 22 3b 7e 4d 45 0d 00 46 46 2a |~MS;" ";~ME..FF*| 000000b0 4b 45 59 20 31 20 4f 53 43 4c 49 28 22 2a 53 41 |KEY 1 OSCLI("*SA| 000000c0 56 45 20 52 75 6e 54 68 65 52 69 73 63 2e 4e 6f |VE RunTheRisc.No| 000000d0 31 35 2e 50 6a 6f 79 20 22 2b 53 54 52 24 7e 4d |15.Pjoy "+STR$~M| 000000e0 53 2b 22 20 22 2b 53 54 52 24 7e 4d 45 29 20 7c |S+" "+STR$~ME) || 000000f0 4d 0d 00 50 30 2a 4b 45 59 20 32 20 2a 53 45 54 |M..P0*KEY 2 *SET| 00000100 54 59 50 45 20 52 75 6e 54 68 65 52 69 73 63 2e |TYPE RunTheRisc.| 00000110 4e 6f 31 35 2e 50 6a 6f 79 41 20 46 46 41 20 7c |No15.PjoyA FFA || 00000120 4d 0d 00 5a 2b 2a 4b 45 59 20 33 20 2a 52 4d 4c |M..Z+*KEY 3 *RML| 00000130 4f 41 44 20 52 75 6e 54 68 65 52 69 73 63 2e 4e |OAD RunTheRisc.N| 00000140 6f 31 35 2e 50 6a 6f 79 41 20 7c 4d 0d 00 64 12 |o15.PjoyA |M..d.| 00000150 2a 4b 45 59 20 35 20 20 51 55 49 54 7c 4d 0d 00 |*KEY 5 QUIT|M..| 00000160 6e 25 2a 4b 45 59 20 31 31 20 53 59 53 26 34 33 |n%*KEY 11 SYS&43| 00000170 46 34 30 2c 30 20 54 4f 20 41 25 3a 50 2e 7e 41 |F40,0 TO A%:P.~A| 00000180 25 7c 4d 0d 00 78 25 2a 4b 45 59 20 31 32 20 53 |%|M..x%*KEY 12 S| 00000190 59 53 26 34 33 46 34 30 2c 31 20 54 4f 20 41 25 |YS&43F40,1 TO A%| 000001a0 3a 50 2e 7e 41 25 7c 4d 0d 00 82 04 0d 00 8c 19 |:P.~A%|M........| 000001b0 f1 22 43 6f 64 65 20 6c 65 6e 67 74 68 20 22 3b |."Code length ";| 000001c0 4d 45 2d 4d 53 0d 00 96 33 ff 28 22 2a 53 41 56 |ME-MS...3.("*SAV| 000001d0 45 20 52 75 6e 54 68 65 52 69 73 63 2e 4e 6f 31 |E RunTheRisc.No1| 000001e0 35 2e 50 6a 6f 79 41 20 22 2b c3 7e 4d 53 2b 22 |5.PjoyA "+.~MS+"| 000001f0 20 22 2b c3 7e 4d 45 29 0d 00 a0 26 2a 53 45 54 | "+.~ME)...&*SET| 00000200 54 59 50 45 20 52 75 6e 54 68 65 52 69 73 63 2e |TYPE RunTheRisc.| 00000210 4e 6f 31 35 2e 50 6a 6f 79 41 20 46 46 41 0d 00 |No15.PjoyA FFA..| 00000220 aa 21 2a 52 4d 4c 4f 41 44 20 52 75 6e 54 68 65 |.!*RMLOAD RunThe| 00000230 52 69 73 63 2e 4e 6f 31 35 2e 50 6a 6f 79 41 0d |Risc.No15.PjoyA.| 00000240 00 b4 04 0d 00 be 05 e0 0d 00 c8 0c dd 20 f2 5f |............. ._| 00000250 43 49 4e 54 0d 00 d2 18 f4 20 43 6f 64 65 20 49 |CINT..... Code I| 00000260 4e 49 54 49 4c 49 53 41 54 49 4f 4e 0d 00 dc 10 |NITILISATION....| 00000270 de 20 43 4f 44 45 25 20 31 30 30 30 0d 00 e6 12 |. CODE% 1000....| 00000280 e3 20 41 25 3d 30 20 b8 20 33 20 88 20 33 0d 00 |. A%=0 . 3 . 3..| 00000290 f0 0c 50 25 3d 43 4f 44 45 25 0d 00 fa 05 5b 0d |..P%=CODE%....[.| 000002a0 01 04 0a 4f 50 54 20 41 25 0d 01 0e 1a 2e 4d 53 |...OPT A%.....MS| 000002b0 20 5c 20 83 55 4c 45 20 53 54 41 52 54 20 4c 41 | \ .ULE START LA| 000002c0 42 4c 45 0d 01 18 1c 45 51 55 44 20 30 20 20 20 |BLE....EQUD 0 | 000002d0 20 20 20 5c 20 53 54 41 52 54 20 43 4f 44 45 0d | \ START CODE.| 000002e0 01 22 24 45 51 55 44 20 49 43 2d 4d 53 20 20 5c |."$EQUD IC-MS \| 000002f0 20 49 4e 49 54 49 4c 49 53 41 54 49 4f 4e 20 87 | INITILISATION .| 00000300 53 45 54 0d 01 2c 23 45 51 55 44 20 46 43 2d 4d |SET..,#EQUD FC-M| 00000310 53 20 20 5c 20 46 49 4e 49 4c 49 53 41 54 49 4f |S \ FINILISATIO| 00000320 4e 20 43 4f 44 45 0d 01 36 1e 45 51 55 44 20 30 |N CODE..6.EQUD 0| 00000330 20 20 20 20 20 20 5c 20 53 45 52 56 49 43 45 20 | \ SERVICE | 00000340 43 4f 44 45 0d 01 40 23 45 51 55 44 20 54 53 2d |CODE..@#EQUD TS-| 00000350 4d 53 20 20 5c 20 54 49 54 4c 45 20 53 54 52 49 |MS \ TITLE STRI| 00000360 4e 47 20 87 53 45 54 0d 01 4a 20 45 51 55 44 20 |NG .SET..J EQUD | 00000370 48 53 2d 4d 53 20 20 5c 20 c7 93 20 53 54 52 49 |HS-MS \ .. STRI| 00000380 4e 47 20 87 53 45 54 0d 01 54 24 45 51 55 44 20 |NG .SET..T$EQUD | 00000390 30 20 20 20 20 20 20 5c 20 43 4f 4d 4d 41 4e 44 |0 \ COMMAND| 000003a0 20 54 41 42 4c 45 20 87 53 45 54 0d 01 5e 20 45 | TABLE .SET..^ E| 000003b0 51 55 44 20 26 34 33 46 34 30 20 5c 20 53 57 49 |QUD &43F40 \ SWI| 000003c0 20 43 48 55 4e 4b 20 42 41 53 45 0d 01 68 22 45 | CHUNK BASE..h"E| 000003d0 51 55 44 20 50 50 2d 4d 53 20 20 5c 20 53 57 49 |QUD PP-MS \ SWI| 000003e0 20 48 41 4e 44 4c 45 52 20 43 4f 44 45 0d 01 72 | HANDLER CODE..r| 000003f0 24 45 51 55 44 20 44 54 2d 4d 53 20 20 5c 20 53 |$EQUD DT-MS \ S| 00000400 57 49 20 44 45 43 4f 44 49 4e 47 20 54 41 42 4c |WI DECODING TABL| 00000410 45 0d 01 7c 23 45 51 55 44 20 30 20 20 20 20 20 |E..|#EQUD 0 | 00000420 20 5c 20 53 57 49 20 44 45 43 4f 44 49 4e 47 20 | \ SWI DECODING | 00000430 43 4f 44 45 0d 01 86 22 45 51 55 44 20 30 20 20 |CODE..."EQUD 0 | 00000440 20 20 20 20 5c 20 e0 20 ca 20 54 41 42 4c 45 20 | \ . . TABLE | 00000450 4d 41 52 4b 45 52 0d 01 90 30 2e 48 53 20 45 51 |MARKER...0.HS EQ| 00000460 55 53 20 22 41 6e 61 6c 6f 67 75 65 20 4a 6f 79 |US "Analogue Joy| 00000470 73 74 69 63 6b 20 6f 6e 20 50 72 69 6e 74 65 72 |stick on Printer| 00000480 20 50 6f 72 74 22 0d 01 9a 0b 45 51 55 42 20 30 | Port"....EQUB 0| 00000490 39 0d 01 a4 2e 45 51 55 53 20 22 31 2e 30 30 20 |9....EQUS "1.00 | 000004a0 28 35 20 41 70 72 69 6c 20 31 39 39 36 29 20 4a |(5 April 1996) J| 000004b0 6f 79 73 74 69 63 6b 20 4d 6f 64 75 6c 65 22 0d |oystick Module".| 000004c0 01 ae 0a 45 51 55 42 20 30 0d 01 b8 09 41 4c 49 |...EQUB 0....ALI| 000004d0 47 4e 0d 01 c2 2d 2e 54 53 20 45 51 55 53 20 22 |GN...-.TS EQUS "| 000004e0 50 72 69 6e 74 65 72 5f 50 6f 72 74 5f 41 6e 61 |Printer_Port_Ana| 000004f0 6c 6f 67 75 65 5f 4a 6f 79 73 74 69 63 6b 22 0d |logue_Joystick".| 00000500 01 cc 0a 45 51 55 42 20 30 0d 01 d6 09 41 4c 49 |...EQUB 0....ALI| 00000510 47 4e 0d 01 e0 17 2e 44 54 20 45 51 55 53 20 22 |GN.....DT EQUS "| 00000520 4a 6f 79 73 74 69 63 6b 22 0d 01 ea 0a 45 51 55 |Joystick"....EQU| 00000530 42 20 30 0d 01 f4 0e 45 51 55 53 22 52 65 61 64 |B 0....EQUS"Read| 00000540 22 0d 01 fe 0a 45 51 55 42 20 30 0d 02 08 0a 45 |"....EQUB 0....E| 00000550 51 55 42 20 30 0d 02 12 04 0d 02 1c 09 41 4c 49 |QUB 0........ALI| 00000560 47 4e 0d 02 26 14 2e 49 43 20 5c 20 53 54 41 52 |GN..&..IC \ STAR| 00000570 54 20 43 4f 44 45 0d 02 30 12 5c 20 43 4c 41 49 |T CODE..0.\ CLAI| 00000580 4d 20 4d 45 4d 4f 52 59 0d 02 3a 1b 53 54 4d 46 |M MEMORY..:.STMF| 00000590 44 20 28 31 33 29 21 2c 7b 31 34 7d 20 5c 20 c7 |D (13)!,{14} \ .| 000005a0 99 20 f8 0d 02 44 1e 5c 20 4d 61 6b 65 20 50 72 |. ...D.\ Make Pr| 000005b0 69 6e 74 65 72 20 50 6f 72 74 20 4f 75 74 70 75 |inter Port Outpu| 000005c0 74 0d 02 4e 0d 4d 4f 56 20 52 30 2c 23 32 0d 02 |t..N.MOV R0,#2..| 000005d0 58 0f 4d 4f 56 20 52 32 2c 23 26 44 46 0d 02 62 |X.MOV R2,#&DF..b| 000005e0 0d 4d 4f 56 20 52 31 2c 23 30 0d 02 6c 0e 53 57 |.MOV R1,#0..l.SW| 000005f0 49 20 26 34 32 45 43 31 0d 02 76 04 0d 02 80 2a |I &42EC1..v....*| 00000600 4c 44 4d 46 44 20 28 31 33 29 20 21 2c 7b 31 35 |LDMFD (13) !,{15| 00000610 7d 20 5c 20 42 41 43 4b 20 46 52 4f 4d 20 c9 53 |} \ BACK FROM .S| 00000620 54 20 43 41 4d 45 0d 02 8a 04 0d 02 94 1b 2e 46 |T CAME.........F| 00000630 43 20 5c 20 46 49 4e 49 4c 49 53 41 54 49 4f 4e |C \ FINILISATION| 00000640 20 43 4f 44 45 0d 02 9e 1b 53 54 4d 46 44 20 28 | CODE....STMFD (| 00000650 31 33 29 21 2c 7b 31 34 7d 20 5c 20 c7 99 20 f8 |13)!,{14} \ .. .| 00000660 0d 02 a8 17 5c 4e 6f 74 68 69 6e 67 20 74 6f 20 |....\Nothing to | 00000670 64 6f 20 68 65 72 65 0d 02 b2 2a 4c 44 4d 46 44 |do here...*LDMFD| 00000680 20 28 31 33 29 20 21 2c 7b 31 35 7d 20 5c 20 42 | (13) !,{15} \ B| 00000690 41 43 4b 20 46 52 4f 4d 20 c9 53 54 20 43 41 4d |ACK FROM .ST CAM| 000006a0 45 0d 02 bc 04 0d 02 c6 2d 2e 50 50 20 5c 20 4d |E.......-.PP \ M| 000006b0 41 43 48 49 4e 45 20 43 4f 44 45 20 b8 20 48 41 |ACHINE CODE . HA| 000006c0 4e 44 4c 45 20 4a 6f 79 73 74 69 63 6b 20 72 65 |NDLE Joystick re| 000006d0 61 64 0d 02 d0 04 0d 02 da 19 43 4d 50 20 52 31 |ad........CMP R1| 000006e0 31 2c 23 28 45 4f 4a 20 2d 20 4a 54 29 2f 34 0d |1,#(EOJ - JT)/4.| 000006f0 02 e4 1d 41 44 44 4c 4f 20 50 43 2c 20 50 43 2c |...ADDLO PC, PC,| 00000700 20 52 31 31 2c 20 4c 53 4c 20 23 32 0d 02 ee 0a | R11, LSL #2....| 00000710 42 20 55 4e 4b 4e 0d 02 f8 07 2e 4a 54 0d 03 02 |B UNKN.....JT...| 00000720 09 42 20 50 50 30 0d 03 0c 08 2e 45 4f 4a 0d 03 |.B PP0.....EOJ..| 00000730 16 09 2e 55 4e 4b 4e 0d 03 20 11 41 44 52 20 52 |...UNKN.. .ADR R| 00000740 30 2c 45 72 72 54 6f 6b 0d 03 2a 0e 4d 4f 56 20 |0,ErrTok..*.MOV | 00000750 52 31 2c 20 23 30 0d 03 34 0e 4d 4f 56 20 52 32 |R1, #0..4.MOV R2| 00000760 2c 20 23 30 0d 03 3e 0e 41 44 52 20 52 34 2c 20 |, #0..>.ADR R4, | 00000770 48 53 0d 03 48 23 53 57 49 20 22 58 4d 65 73 73 |HS..H#SWI "XMess| 00000780 61 67 65 54 72 61 6e 73 5f 45 72 72 6f 72 4c 6f |ageTrans_ErrorLo| 00000790 6f 6b 75 70 22 0d 03 52 2c 84 52 53 20 20 50 43 |okup"..R,.RS PC| 000007a0 2c 20 52 31 34 2c 20 23 26 31 30 30 30 30 30 30 |, R14, #&1000000| 000007b0 30 5c 20 23 4f 76 65 72 66 6c 6f 77 5f 46 6c 61 |0\ #Overflow_Fla| 000007c0 67 0d 03 5c 0b 2e 45 72 72 54 6f 6b 0d 03 66 0d |g..\..ErrTok..f.| 000007d0 45 51 55 44 20 26 31 45 36 0d 03 70 11 45 51 55 |EQUD &1E6..p.EQU| 000007e0 53 20 22 42 61 64 53 57 49 22 0d 03 7a 0a 45 51 |S "BadSWI"..z.EQ| 000007f0 55 42 20 30 0d 03 84 09 41 4c 49 47 4e 0d 03 8e |UB 0....ALIGN...| 00000800 13 5c 20 52 65 61 64 20 4a 6f 79 73 74 69 63 6b |.\ Read Joystick| 00000810 0d 03 98 08 2e 50 50 30 0d 03 a2 15 53 54 4d 46 |.....PP0....STMF| 00000820 44 20 28 31 33 29 21 2c 7b 31 34 7d 20 0d 03 ac |D (13)!,{14} ...| 00000830 1f 53 54 4d 46 44 20 52 31 33 21 2c 7b 52 31 2c |.STMFD R13!,{R1,| 00000840 52 32 2c 52 33 2c 52 34 2c 52 35 7d 0d 03 b6 2b |R2,R3,R4,R5}...+| 00000850 54 45 51 50 20 52 31 35 2c 23 26 43 30 30 30 30 |TEQP R15,#&C0000| 00000860 30 33 20 5c 20 44 69 73 61 62 6c 65 20 69 6e 74 |03 \ Disable int| 00000870 65 72 72 75 70 74 73 0d 03 c0 04 0d 03 ca 1e 4d |errupts........M| 00000880 4f 56 20 52 34 2c 23 30 20 5c 20 43 6f 75 6e 74 |OV R4,#0 \ Count| 00000890 20 72 65 67 69 73 74 65 72 0d 03 d4 0d 4d 4f 56 | register....MOV| 000008a0 20 52 30 2c 23 31 0d 03 de 0d 4d 4f 56 20 52 31 | R0,#1....MOV R1| 000008b0 2c 23 31 0d 03 e8 1d 53 57 49 20 26 34 32 45 43 |,#1....SWI &42EC| 000008c0 31 20 5c 20 4f 75 74 70 75 74 20 61 20 6f 6e 65 |1 \ Output a one| 000008d0 0d 03 f2 0d 4d 4f 56 20 52 30 2c 23 30 0d 03 fc |....MOV R0,#0...| 000008e0 0a 2e 4c 6f 6f 70 58 0d 04 06 10 41 44 44 20 52 |..LoopX....ADD R| 000008f0 34 2c 52 34 2c 23 31 0d 04 10 0e 53 57 49 20 26 |4,R4,#1....SWI &| 00000900 34 32 45 43 31 0d 04 1a 0f 54 53 54 20 52 32 2c |42EC1....TST R2,| 00000910 23 26 38 30 0d 04 24 0d 42 4e 45 20 4c 6f 6f 70 |#&80..$.BNE Loop| 00000920 58 0d 04 2e 20 4d 4f 56 20 52 33 2c 23 38 31 20 |X... MOV R3,#81 | 00000930 5c 20 54 68 65 20 6d 69 64 20 58 20 76 61 6c 75 |\ The mid X valu| 00000940 65 0d 04 38 11 53 55 42 53 20 52 34 2c 52 34 2c |e..8.SUBS R4,R4,| 00000950 52 33 0d 04 42 1e 42 4d 49 20 4e 65 67 4c 58 20 |R3..B.BMI NegLX | 00000960 5c 20 4e 65 67 69 74 61 76 65 20 4c 69 6d 69 74 |\ Negitave Limit| 00000970 0d 04 4c 0e 43 4d 50 20 52 34 2c 23 36 34 0d 04 |..L.CMP R4,#64..| 00000980 56 10 4d 4f 56 47 45 20 52 34 2c 23 36 34 0d 04 |V.MOVGE R4,#64..| 00000990 60 0b 42 20 53 74 72 56 58 0d 04 6a 0a 2e 4e 65 |`.B StrVX..j..Ne| 000009a0 67 4c 58 0d 04 74 0e 43 4d 4e 20 52 34 2c 23 36 |gLX..t.CMN R4,#6| 000009b0 34 0d 04 7e 10 4d 56 4e 4c 45 20 52 34 2c 23 36 |4..~.MVNLE R4,#6| 000009c0 33 0d 04 88 0a 2e 53 74 72 56 58 0d 04 92 10 80 |3.....StrVX.....| 000009d0 20 52 35 2c 52 34 2c 23 26 46 46 0d 04 9c 04 0d | R5,R4,#&FF.....| 000009e0 04 a6 1e 4d 4f 56 20 52 34 2c 23 30 20 5c 20 43 |...MOV R4,#0 \ C| 000009f0 6f 75 6e 74 20 72 65 67 69 73 74 65 72 0d 04 b0 |ount register...| 00000a00 0d 4d 4f 56 20 52 30 2c 23 31 0d 04 ba 0d 4d 4f |.MOV R0,#1....MO| 00000a10 56 20 52 31 2c 23 32 0d 04 c4 31 53 57 49 20 26 |V R1,#2...1SWI &| 00000a20 34 32 45 43 31 20 5c 20 4f 75 74 70 75 74 20 61 |42EC1 \ Output a| 00000a30 20 6f 6e 65 20 74 6f 20 74 68 65 20 59 20 6d 6f | one to the Y mo| 00000a40 6e 6f 73 74 61 62 6c 65 0d 04 ce 0d 4d 4f 56 20 |nostable....MOV | 00000a50 52 30 2c 23 30 0d 04 d8 0a 2e 4c 6f 6f 70 59 0d |R0,#0.....LoopY.| 00000a60 04 e2 10 41 44 44 20 52 34 2c 52 34 2c 23 31 0d |...ADD R4,R4,#1.| 00000a70 04 ec 0e 53 57 49 20 26 34 32 45 43 31 0d 04 f6 |...SWI &42EC1...| 00000a80 0f 54 53 54 20 52 32 2c 23 26 38 30 0d 05 00 0d |.TST R2,#&80....| 00000a90 42 4e 45 20 4c 6f 6f 70 59 0d 05 0a 20 4d 4f 56 |BNE LoopY... MOV| 00000aa0 20 52 33 2c 23 38 37 20 5c 20 54 68 65 20 6d 69 | R3,#87 \ The mi| 00000ab0 64 20 59 20 76 61 6c 75 65 0d 05 14 11 53 55 42 |d Y value....SUB| 00000ac0 53 20 52 34 2c 52 34 2c 52 33 0d 05 1e 1e 42 4d |S R4,R4,R3....BM| 00000ad0 49 20 4e 65 67 4c 59 20 5c 20 4e 65 67 69 74 61 |I NegLY \ Negita| 00000ae0 76 65 20 4c 69 6d 69 74 0d 05 28 0e 43 4d 50 20 |ve Limit..(.CMP | 00000af0 52 34 2c 23 36 34 0d 05 32 10 4d 4f 56 47 45 20 |R4,#64..2.MOVGE | 00000b00 52 34 2c 23 36 34 0d 05 3c 0b 42 20 53 74 72 56 |R4,#64..<.B StrV| 00000b10 59 0d 05 46 0a 2e 4e 65 67 4c 59 0d 05 50 0e 43 |Y..F..NegLY..P.C| 00000b20 4d 4e 20 52 34 2c 23 36 34 0d 05 5a 10 4d 56 4e |MN R4,#64..Z.MVN| 00000b30 4c 45 20 52 34 2c 23 36 33 0d 05 64 0a 2e 53 74 |LE R4,#63..d..St| 00000b40 72 56 59 0d 05 6e 23 5c 43 6f 6d 6d 65 6e 74 20 |rVY..n#\Comment | 00000b50 6f 75 74 20 74 68 65 20 6e 65 78 74 20 74 77 6f |out the next two| 00000b60 20 6c 69 6e 65 73 0d 05 78 1a 5c 54 6f 20 69 6e | lines..x.\To in| 00000b70 76 65 72 74 20 74 68 65 20 59 20 76 61 6c 75 65 |vert the Y value| 00000b80 0d 05 82 10 82 20 52 34 2c 52 34 2c 23 26 46 46 |..... R4,R4,#&FF| 00000b90 0d 05 8c 10 41 44 44 20 52 34 2c 52 34 2c 23 31 |....ADD R4,R4,#1| 00000ba0 0d 05 96 10 80 20 52 34 2c 52 34 2c 23 26 46 46 |..... R4,R4,#&FF| 00000bb0 0d 05 a0 04 0d 05 aa 0d 4d 4f 56 20 52 30 2c 23 |........MOV R0,#| 00000bc0 31 0d 05 b4 0d 4d 4f 56 20 52 31 2c 23 30 0d 05 |1....MOV R1,#0..| 00000bd0 be 1e 53 57 49 20 26 34 32 45 43 31 20 5c 20 4f |..SWI &42EC1 \ O| 00000be0 75 74 70 75 74 20 61 20 7a 65 72 6f 0d 05 c8 04 |utput a zero....| 00000bf0 0d 05 d2 16 84 52 20 52 30 2c 20 52 34 2c 52 35 |.....R R0, R4,R5| 00000c00 2c 4c 53 4c 23 38 0d 05 dc 19 5c 20 41 64 64 20 |,LSL#8....\ Add | 00000c10 69 6e 20 66 69 72 65 20 62 75 74 74 6f 6e 73 0d |in fire buttons.| 00000c20 05 e6 0f 54 53 54 20 52 32 2c 23 26 34 30 0d 05 |...TST R2,#&40..| 00000c30 f0 16 84 52 45 51 20 52 30 2c 52 30 2c 23 26 31 |...REQ R0,R0,#&1| 00000c40 30 30 30 30 0d 05 fa 36 5c 52 65 6d 6f 76 65 20 |0000...6\Remove | 00000c50 74 68 65 20 6e 65 78 74 20 36 20 6c 69 6e 65 73 |the next 6 lines| 00000c60 20 66 6f 72 20 61 20 6d 6f 6e 6f 20 64 69 72 65 | for a mono dire| 00000c70 63 74 69 6f 6e 20 70 6f 72 74 0d 06 04 0f 54 53 |ction port....TS| 00000c80 54 20 52 32 2c 23 26 32 30 0d 06 0e 16 84 52 45 |T R2,#&20.....RE| 00000c90 51 20 52 30 2c 52 30 2c 23 26 32 30 30 30 30 0d |Q R0,R0,#&20000.| 00000ca0 06 18 0f 54 53 54 20 52 32 2c 23 26 31 30 0d 06 |...TST R2,#&10..| 00000cb0 22 16 84 52 45 51 20 52 30 2c 52 30 2c 23 26 34 |"..REQ R0,R0,#&4| 00000cc0 30 30 30 30 0d 06 2c 0e 54 53 54 20 52 32 2c 23 |0000..,.TST R2,#| 00000cd0 26 38 0d 06 36 16 84 52 45 51 20 52 30 2c 52 30 |&8..6..REQ R0,R0| 00000ce0 2c 23 26 38 30 30 30 30 0d 06 40 04 0d 06 4a 1f |,#&80000..@...J.| 00000cf0 4c 44 4d 46 44 20 52 31 33 21 2c 7b 52 31 2c 52 |LDMFD R13!,{R1,R| 00000d00 32 2c 52 33 2c 52 34 2c 52 35 7d 0d 06 54 2a 4c |2,R3,R4,R5}..T*L| 00000d10 44 4d 46 44 20 28 31 33 29 20 21 2c 7b 31 35 7d |DMFD (13) !,{15}| 00000d20 20 5c 20 42 41 43 4b 20 46 52 4f 4d 20 c9 53 54 | \ BACK FROM .ST| 00000d30 20 43 41 4d 45 0d 06 5e 04 0d 06 68 18 2e 4d 45 | CAME..^...h..ME| 00000d40 20 5c 20 4c 41 42 4c 45 20 e3 20 83 55 4c 45 20 | \ LABLE . .ULE | 00000d50 e0 0d 06 72 04 0d 06 7c 05 5d 0d 06 86 05 ed 0d |...r...|.]......| 00000d60 06 90 05 e1 0d ff |......| 00000d66