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