Home » Archimedes archive » Acorn User » AU 1994-07.adf » !StarInfo_StarInfo » Hill/PHsource

Hill/PHsource

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 1994-07.adf » !StarInfo_StarInfo
Filename: Hill/PHsource
Read OK:
File size: 3C29 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM     >PHsource
   20REM by  Timothy Hall
   30REM (c) AU July 1994
   40
   50ON ERROR ON ERROR OFF : ERROR ERR, REPORT$+" at line "+STR$ERL
   60
   70DIM code% 4000
   80FOR pass%=4 TO 7 STEP 3
   90P%=0:O%=code%
  100
  110sp=13
  120timer=25  :REM This sets the number of centi-seconds interval that the mouse
  130           REM is checked for movement
  140
  150[ OPT pass%
  160
  170;This is the module header block
  180
  190                EQUD 0                  ;start up code (module cannot run)
  200                EQUD initialise         ;intialisation code
  210                EQUD finish             ;finalisation code
  220                EQUD service_call       ;service call handling code
  230                EQUD title_string       ;module title string
  240                EQUD help_string        ;module *help string
  250                EQUD help_table         ;help and command decoding table
  260                EQUD 0                  ;SWI chunk base number (no SWI's)
  270                EQUD 0                  ;SWI handling code (no SWI's)
  280                EQUD 0                  ;SWI decoding table (no SWI's)
  290                EQUD 0                  ;SWI decoding code (no SWI's)
  300
  310;This block contains the module title
  320
  330.title_string   EQUS "PointerHide"          ;the module title
  340                EQUB 0                          ;terminating byte
  350                ALIGN                           ;align memory
  360
  370;This block contains info for *help module
  380
  390.help_string    EQUS "PointerHide"          ;the module title
  400                EQUB 9                          ;perform tab
  410                EQUS "0.10 (28 Mar 1994)"       ;version and date
  420                EQUB 0                          ;terminating byte
  430                ALIGN                           ;align memory
  440
  450;This block contains the module commands
  460
  470.help_table     EQUS "Hide"                     ;The module command
  480                EQUB 0                          ;terminating byte
  490                ALIGN                           ;align memory
  500                EQUD hide_remove                ;code to be called on *hide
  510                EQUD &00010001                  ;expect ON/OFF after *hide
  520                EQUD syntax_string              ;code for syntax string
  530                EQUD hide_help                  ;code for *help hide
  540
  550;This block is the *hide help text
  560
  570.hide_help      EQUS "*Hide ON turns off pointer on typing at keyboard."
  580                EQUB 0
  590                ALIGN
  600
  610;This is block is the *hide Syntax string
  620
  630.syntax_string  EQUS "Syntax: *Hide <ON|OFF>"
  640                EQUB 0
  650                ALIGN
  660
  670;This block checks if module is being turned on or off
  680
  690.hide_remove    LDR r12,[r12]                   ;get address of RMA workspace
  700                LDRB r2,[r0],#1                 ;get 1st letter after *hide
  710                ORR r2,r2,#32                   ;convert to lower case
  720                CMP r2,#ASC"o"                  ;is this an 'o' ?
  730                BNE not_onoff                   ;if not then garbage typed
  740                LDRB r2,[r0],#1                 ;get 2nd letter after *hide
  750                ORR r2,r2,#32                   ;convert to lower case
  760                CMP r2,#ASC"n"                  ;is this an 'n' ?
  770                BEQ install                     ;if so then module turning on
  780                CMP r2,#ASC"f"                  ;if not, is it turning off ?
  790                BNE not_onoff                   ;if not then garbage typed
  800                LDRB r2,[r0],#1                 ;get 3rd letter after *hide
  810                ORR r2,r2,#32                   ;convert to lower case
  820                CMP r2,#ASC"f"                  ;is this an 'f' ?
  830                BEQ remove                      ;if so, module turning off
  840
  850;This routine deals with garbage typed after *hide
  860
  870.not_onoff      ADR r0,hide_onoff               ;get address of error block
  880                ORR r14,r14,#1<<28              ;cause an error
  890                MOVS pc,r14                     ;quit routine keeping status
  900
  910;This is the module error block
  920
  930.hide_onoff     EQUD &00123456
  940                EQUS "*Hide needs ON or OFF after it"
  950                EQUB 0
  960                ALIGN
  970
  980;This block contains module flags and mouse co-ords
  990;hideer_onff tells the module if it is on or off
 1000;mouse_onoff tells the module if the pointer is currently displayed or not
 1010;mouse_xy holds the sumn of the mouse co-ords
 1020
 1030.hide_onoff     EQUD 0                          ;0 for off, 1 for on
 1040.mouse_onoff    EQUD 1                          ;1 for off, -0 for on
 1050.mouse_xy       EQUD 0                          ;sum of mouse co-ords
 1060
 1070;This routine is the module initialising code
 1080
 1090.initialise     STMFD (sp)!,{r14}              ;preserve link on stack
 1100                MOV r1,r12                     ;get copy of workspace address
 1110                LDR r12,[r12]                  ;get contents of workspace
 1120                CMP r12,#0                     ;is the module already on ?
 1130                LDMNEFD (sp)!,{pc}             ;if so then quit routine
 1140                MOV r0,#6                      ;set r0 to claim RMA workspace
 1150                MOV r3,#0                      ;RMA workspace size (none)
 1160                SWI "XOS_Module"               ;claim RMA workspace
 1170                STR r2,[r1]
 1180                MOV r12,r2
 1190                LDMFD (sp)!,{pc}               ;quit routine
 1200
 1210;This routine tidies the module up when quitting
 1220
 1230.finish         STMFD (sp)!,{r1-r4,r14}         ;preserve link on stack
 1240                LDR r12,[r12]                   ;get contents of workspace
 1250                BL remove                       ;goto routine turn module off
 1260                MOV r0,#7                       ;set r0 for release RMA space
 1270                MOV r2,r12                      ;set r2 to workspace address
 1280                SWINE "XOS_Module"              ;free up module workspace
 1290                LDMFD (sp)!,{r1-r4,pc}          ;quit routine
 1300
 1310;This routine deals with the module service calls
 1320
 1330.service_call   CMP r1,#39                      ;has computer been reset
 1340                MOVNE pc,r14                    ;if so then quit routine
 1350                STMFD (sp)!,{r0}                ;store register
 1360                MOV r0,#0                       ;on/off flag to off on reset
 1370                STR r0,hide_onoff               ;store in memory
 1380                LDMFD (sp)!,{r0}                ;get register
 1390                MOV pc,r14                      ;quit routine
 1400
 1410;This routine turns the module on
 1420
 1430.install        STMFD (sp)!,{r0-r12,r14}        ;preserve link on stack
 1440                LDR r0,hide_onoff               ;get memory location
 1450                CMP r0,#0                       ;is module already on ?
 1460                LDMNEFD (sp)!,{r0-r12,pc}       ;if so then quit routine
 1470                MVN r0,#0                       ;if not then turn module on
 1480                STR r0,hide_onoff               ;store in memory
 1490                MOV r2,r12                      ;r12 wanted on vector start
 1500                MOV R9,pc                       ;keep current processor mode
 1510                ORR R8,R9,#3                    ;move to r8, select SVC mode
 1520                TEQP R8,#0                      ;enter SVC mode
 1530                MOVNV r0,r0                     ;NO-OP to sync register banks
 1540                STMFD (sp)!,{r14}               ;keep r14-SVC on SVC stack
 1550                MOV r0,#16                      ;number for event vector
 1560                ADR r1,keys                     ;address of routine to call
 1570                SWI "XOS_Claim"                 ;computer checks for event
 1580                MOV r0,#timer                   ;centi-seconds between check
 1590                ADR r1,mouse                    ;address of routine to call
 1600                SWI "XOS_CallEvery"             ;computer checks for event
 1610                MOV r0,#14                      ;next 3 lines do *FX 14,11
 1620                MOV r1,#11                      ;which enables checking
 1630                SWI "XOS_Byte"                  ;for key press event
 1640                LDMFD (sp)!,{r14}               ;get r14-SVC from SVC stack
 1650                TEQP R9,#0                      ;get original processor mode
 1660                MOVNV r0,r0                     ;NO-OP to sync register banks
 1670                LDMFD (sp)!,{r0-r12,pc}         ;quit routine
 1680
 1690;This routine turns the module off
 1700
 1710.remove         STMFD (sp)!,{r0-r12,r14}        ;preserve link on stack
 1720                LDR r0,hide_onoff               ;get memory location
 1730                CMP r0,#0                       ;is module already off ?
 1740                LDMEQFD (sp)!,{r0-r12,pc}       ;if so then quit routine
 1750                MOV r0,#0                       ;on/off flag to off
 1760                STR r0,hide_onoff               ;store in memory
 1770                MOV R9,pc                       ;keep current processor mode
 1780                ORR R8,R9,#3                    ;move to r8, select SVC mode
 1790                TEQP R8,#0                      ;enter SVC mode
 1800                MOVNV r0,r0                     ;NO-OP to sync register banks
 1810                STMFD (sp)!,{r14}               ;keep r14-SVC on SVC stack
 1820                MOV r0,#13                      ;next 3 lines do *FX 13,11
 1830                MOV r1,#11                      ;which disables checking
 1840                SWI "XOS_Byte"                  ;for key press event
 1850                MOV r0,#16                      ;number for event vector
 1860                MOV r2,r12                      ;r12 wanted on vector release
 1870                ADR r1,keys                     ;address of routine to remove
 1880                SWI "XOS_Release"               ;cancel check for event
 1890                ADR r0,mouse                    ;address of routine to remove
 1900                MOV r1,r12
 1910                SWI "XOS_RemoveTickerEvent"     ;cancel check for event
 1920                LDMFD (sp)!,{r14}               ;get r14-SVC on SVC stack
 1930                TEQP R9,#0                      ;get original processor mode
 1940                MOVNV r0,r0                     ;NO-OP to sync register banks
 1950                MOV r0,#106                     ;next 3 lines perform
 1960                MOV r1,#1                       ;*FX 106,1 turning pointer
 1970                SWI "XOS_Byte"                  ;on
 1980                MOV r1,#1                       ;tell module pointer is on
 1990                STR r1,mouse_onoff              ;store value in memory
 2000                LDMFD (sp)!,{r0-r12,pc}         ;quit routine
 2010
 2020;This routine checks for key pressing event and turns the pointer off
 2030
 2040.keys           CMP r0,#11                      ;check for key press event
 2050                MOVNES pc,r14                   ;if not then quit
 2060                CMP r2,#112                     ;is it mouse select
 2070                MOVEQS pc,r14                   ;if so don't turn off
 2080                CMP r2,#113                     ;is it mouse menu
 2090                MOVEQS pc,r14                   ;if so don't turn off
 2100                CMP r2,#114                     ;is it mouse adjust
 2110                MOVEQS pc,r14                   ;if so don't turn off
 2120                STMFD (sp)!,{r0-r12,r14}        ;store registers and link
 2130                MOV R9,pc                       ;keep current processor mode
 2140                ORR R8,R9,#3                    ;move to r8, select SVC mode
 2150                TEQP R8,#0                      ;enter SVC mode
 2160                MOVNV r0,r0                     ;NO-OP to sync register banks
 2170                STMFD (sp)!,{r14}               ;keep r14-SVC on SVC stack
 2180                LDR r1,mouse_onoff              ;get value in memory
 2190                CMP r1,#0                       ;is the pointer already off ?
 2200                BEQ jump_keys                   ;if so quit routine
 2210                MOV r1,#0                       ;tell module pointer is off
 2220                STR r1,mouse_onoff              ;store value in memory
 2230                SWI "XOS_Mouse"                 ;get current mouse co-ords
 2240                ADD r1,r0,r1                    ;add x and y coords together
 2250                STR r1,mouse_xy                 ;store co-ords in memory
 2260                MOV r0,#106                     ;next 3 lines perform
 2270                MOV r1,#0                       ;*FX 106,0 turning pointer
 2280                SWI "XOS_Byte"                  ;off
 2290.jump_keys      LDMFD (sp)!,{r14}               ;get r14-SVC from SVC stack
 2300                TEQP R9,#0                      ;get original processor mode
 2310                MOVNV r0,r0                     ;NO-OP to sync register banks
 2320                LDMFD (sp)!,{r0-r12,r14}        ;get registers and link
 2330                MOVS pc,r14                     ;quit routine keeping status
 2340
 2350;This routine checks for mouse movement every 'timer' centi-seconds
 2360
 2370.mouse          STMFD (sp)!,{r0-r12,r14}        ;store registers and link
 2380                MOV R9,pc                       ;keep current processor mode
 2390                ORR R8,R9,#3                    ;move to r8, select SVC mode
 2400                TEQP R8,#0                      ;enter SVC mode
 2410                MOVNV r0,r0                     ;NO-OP to sync register banks
 2420                STMFD (sp)!,{r14}               ;keep r14-SVC on SVC stack
 2430                LDR r1,mouse_onoff              ;get value in memory
 2440                CMP r1,#1                       ;is the pointer already on ?
 2450                BEQ jump_mouse                  ;if so quit routine
 2460                SWI "XOS_Mouse"                 ;get current mouse co-ords
 2470                ADD r1,r0,r1                    ;add x and y coords together
 2480                LDR r0,mouse_xy                 ;get value in memory
 2490                CMPS r2,#0                      ;have buttons been pressed ?
 2500                CMPEQS r0,r1                    ;has the mouse moved ?
 2510                BEQ jump_mouse                  ;if not then quit routine
 2520                MOV r0,#106                     ;next 3 lines perform
 2530                MOV r1,#1                       ;*FX 106,1 turning pointer
 2540                SWI "XOS_Byte"                  ;on
 2550                MOV r1,#1                       ;tell module pointer is on
 2560                STR r1,mouse_onoff              ;store value in memory
 2570.jump_mouse     LDMFD (sp)!,{r14}               ;get r14-SVC from SVC stack
 2580                TEQP R9,#0                      ;get original processor mode
 2590                MOVNV r0,r0                     ;NO-OP to sync register banks
 2600                LDMFD (sp)!,{r0-r12,r14}        ;get registers and link
 2610                MOVS pc,r14                     ;quit routine keeping status
 2620
 2630]
 2640NEXT pass%
 2650
 2660REM Save the module as PtrHide and set it's file type to module
 2670
 2680OSCLI "SAVE PtrHide "+STR$~code%+"+"+STR$~P%
 2690OSCLI "SETTYPE PtrHide FFA"

�     >PHsource
� by  Timothy Hall
� (c) AU July 1994
(
2&� � � � � : � �, �$+" at line "+Þ
<
F� code% 4000
P� pass%=4 � 7 � 3
ZP%=0:O%=code%
d
n	sp=13
xNtimer=25  :� This sets the number of centi-seconds interval that the mouse
�(           � is checked for movement
�
�[ OPT pass%
�
�$;This is the module header block
�
�N                EQUD 0                  ;start up code (module cannot run)
�?                EQUD initialise         ;intialisation code
�>                EQUD finish             ;finalisation code
�G                EQUD service_call       ;service call handling code
�@                EQUD title_string       ;module title string
�@                EQUD help_string        ;module *help string
�L                EQUD help_table         ;help and command decoding table
M                EQUD 0                  ;SWI chunk base number (no SWI's)
I                EQUD 0                  ;SWI handling code (no SWI's)
J                EQUD 0                  ;SWI decoding table (no SWI's)
"I                EQUD 0                  ;SWI decoding code (no SWI's)
,
6);This block contains the module title
@
JA.title_string   EQUS "PointerHide"          ;the module title
TE                EQUB 0                          ;terminating byte
^A                ALIGN                           ;align memory
h
r.;This block contains info for *help module
|
�A.help_string    EQUS "PointerHide"          ;the module title
�@                EQUB 9                          ;perform tab
�E                EQUS "0.10 (28 Mar 1994)"       ;version and date
�E                EQUB 0                          ;terminating byte
�A                ALIGN                           ;align memory
�
�,;This block contains the module commands
�
�G.help_table     EQUS "Hide"                     ;The module command
�E                EQUB 0                          ;terminating byte
�A                ALIGN                           ;align memory
�O                EQUD hide_remove                ;code to be called on *hide
�K                EQUD &00010001                  ;expect �/� after *hide
K                EQUD syntax_string              ;code for syntax string
H                EQUD hide_help                  ;code for *help hide

&&;This block is the *hide help text
0
:L.hide_help      EQUS "*Hide ON turns off pointer on typing at keyboard."
D                EQUB 0
N                ALIGN
X
b-;This is block is the *hide Syntax string
l
v1.syntax_string  EQUS "Syntax: *Hide <ON|OFF>"
�                EQUB 0
�                ALIGN
�
�:;This block checks if module is being turned on or off
�
�Q.hide_remove    LDR r12,[r12]                   ;get address of RMA workspace
�O                LDRB r2,[r0],#1                 ;get 1st letter after *hide
�I                �R r2,r2,#32                   ;convert to lower case
�C                CMP r2,#�"o"                  ;is this an 'o' ?
�N                BNE not_onoff                   ;if not then garbage typed
�O                LDRB r2,[r0],#1                 ;get 2nd letter after *hide
�I                �R r2,r2,#32                   ;convert to lower case
�C                CMP r2,#�"n"                  ;is this an 'n' ?
Q                BEQ install                     ;if so then module turning on
N                CMP r2,#�"f"                  ;if not, is it turning off ?
N                BNE not_onoff                   ;if not then garbage typed
 O                LDRB r2,[r0],#1                 ;get 3rd letter after *hide
*I                �R r2,r2,#32                   ;convert to lower case
4C                CMP r2,#�"f"                  ;is this an 'f' ?
>N                BEQ remove                      ;if so, module turning off
H
R6;This routine deals with garbage typed after *hide
\
fO.not_onoff      ADR r0,hide_onoff               ;get address of error block
pB                �R r14,r14,#1<<28              ;cause an error
zP                MOVS pc,r14                     ;quit routine keeping status
�
�#;This is the module error block
�
�".hide_onoff     EQUD &00123456
�9                EQUS "*Hide needs ON or OFF after it"
�                EQUB 0
�                ALIGN
�
�7;This block contains module flags and mouse co-ords
�4;hideer_onff tells the module if it is on or off
�N;mouse_onoff tells the module if the pointer is currently displayed or not
�1;mouse_xy holds the sumn of the mouse co-ords
�
H.hide_onoff     EQUD 0                          ;0 for off, 1 for on
I.mouse_onoff    EQUD 1                          ;1 for off, -0 for on
I.mouse_xy       EQUD 0                          ;sum of mouse co-ords
$
.1;This routine is the module initialising code
8
BJ.initialise     STMFD (sp)!,{r14}              ;preserve link on stack
LQ                MOV r1,r12                     ;get copy of workspace address
VM                LDR r12,[r12]                  ;get contents of workspace
`N                CMP r12,#0                     ;is the module already on ?
jK                LDMNEFD (sp)!,{pc}             ;if so then quit routine
tQ                MOV r0,#6                      ;set r0 to claim RMA workspace
~M                MOV r3,#0                      ;RMA workspace size (none)
�G                SWI "XOS_Module"               ;claim RMA workspace
�                STR r2,[r1]
�                MOV r12,r2
�@                LDMFD (sp)!,{pc}               ;quit routine
�
�4;This routine tidies the module up when quitting
�
�K.finish         STMFD (sp)!,{r1-r4,r14}         ;preserve link on stack
�N                LDR r12,[r12]                   ;get contents of workspace
�Q                BL remove                       ;goto routine turn module off
�Q                MOV r0,#7                       ;set r0 for release RMA space
�P                MOV r2,r12                      ;set r2 to workspace address
M                SWINE "XOS_Module"              ;free up module workspace

A                LDMFD (sp)!,{r1-r4,pc}          ;quit routine

5;This routine deals with the module service calls
(
2L.service_call   CMP r1,#39                      ;has computer been reset
<L                MOVNE pc,r14                    ;if so then quit routine
FC                STMFD (sp)!,{r0}                ;store register
PP                MOV r0,#0                       ;on/off flag to off on reset
ZD                STR r0,hide_onoff               ;store in memory
dA                LDMFD (sp)!,{r0}                ;get register
nA                MOV pc,r14                      ;quit routine
x
�%;This routine turns the module on
�
�K.install        STMFD (sp)!,{r0-r12,r14}        ;preserve link on stack
�H                LDR r0,hide_onoff               ;get memory location
�K                CMP r0,#0                       ;is module already on ?
�L                LDMNEFD (sp)!,{r0-r12,pc}       ;if so then quit routine
�O                MVN r0,#0                       ;if not then turn module on
�D                STR r0,hide_onoff               ;store in memory
�O                MOV r2,r12                      ;r12 wanted on vector start
�P                MOV R9,pc                       ;keep current processor mode
�O                �R R8,R9,#3                    ;move to r8, select SVC mode
�C                TEQP R8,#0                      ;enter SVC mode
�Q                MOVNV r0,r0                     ;NO-OP to sync register banks
N                STMFD (sp)!,{r14}               ;keep r14-SVC on SVC stack
L                MOV r0,#16                      ;number for event vector
O                ADR r1,keys                     ;address of routine to call
"N                SWI "XOS_Claim"                 ;computer checks for event
,P                MOV r0,#timer                   ;centi-seconds between check
6O                ADR r1,mouse                    ;address of routine to call
@N                SWI "XOS_CallEvery"             ;computer checks for event
JN                MOV r0,#14                      ;next 3 lines do *FX 14,11
TK                MOV r1,#11                      ;which enables checking
^H                SWI "XOS_Byte"                  ;for key press event
hO                LDMFD (sp)!,{r14}               ;get r14-SVC from SVC stack
rP                TEQP R9,#0                      ;get original processor mode
|Q                MOVNV r0,r0                     ;NO-OP to sync register banks
�A                LDMFD (sp)!,{r0-r12,pc}         ;quit routine
�
�&;This routine turns the module off
�
�K.remove         STMFD (sp)!,{r0-r12,r14}        ;preserve link on stack
�H                LDR r0,hide_onoff               ;get memory location
�L                CMP r0,#0                       ;is module already off ?
�L                LDMEQFD (sp)!,{r0-r12,pc}       ;if so then quit routine
�G                MOV r0,#0                       ;on/off flag to off
�D                STR r0,hide_onoff               ;store in memory
�P                MOV R9,pc                       ;keep current processor mode
�O                �R R8,R9,#3                    ;move to r8, select SVC mode
�C                TEQP R8,#0                      ;enter SVC mode
Q                MOVNV r0,r0                     ;NO-OP to sync register banks
N                STMFD (sp)!,{r14}               ;keep r14-SVC on SVC stack
N                MOV r0,#13                      ;next 3 lines do *FX 13,11
&L                MOV r1,#11                      ;which disables checking
0H                SWI "XOS_Byte"                  ;for key press event
:L                MOV r0,#16                      ;number for event vector
DQ                MOV r2,r12                      ;r12 wanted on vector release
NQ                ADR r1,keys                     ;address of routine to remove
XK                SWI "XOS_Release"               ;cancel check for event
bQ                ADR r0,mouse                    ;address of routine to remove
l                MOV r1,r12
vK                SWI "XOS_RemoveTickerEvent"     ;cancel check for event
�M                LDMFD (sp)!,{r14}               ;get r14-SVC on SVC stack
�P                TEQP R9,#0                      ;get original processor mode
�Q                MOVNV r0,r0                     ;NO-OP to sync register banks
�I                MOV r0,#106                     ;next 3 lines perform
�N                MOV r1,#1                       ;*FX 106,1 turning pointer
�7                SWI "XOS_Byte"                  ;on
�N                MOV r1,#1                       ;tell module pointer is on
�J                STR r1,mouse_onoff              ;store value in memory
�A                LDMFD (sp)!,{r0-r12,pc}         ;quit routine
�
�I;This routine checks for key pressing event and turns the pointer off
�
�N.keys           CMP r0,#11                      ;check for key press event
E                MOVNES pc,r14                   ;if not then quit
G                CMP r2,#112                     ;is it mouse select
F                �QS pc,r14                   ;if so don't turn off
 E                CMP r2,#113                     ;is it mouse menu
*F                �QS pc,r14                   ;if so don't turn off
4G                CMP r2,#114                     ;is it mouse adjust
>F                �QS pc,r14                   ;if so don't turn off
HM                STMFD (sp)!,{r0-r12,r14}        ;store registers and link
RP                MOV R9,pc                       ;keep current processor mode
\O                �R R8,R9,#3                    ;move to r8, select SVC mode
fC                TEQP R8,#0                      ;enter SVC mode
pQ                MOVNV r0,r0                     ;NO-OP to sync register banks
zN                STMFD (sp)!,{r14}               ;keep r14-SVC on SVC stack
�H                LDR r1,mouse_onoff              ;get value in memory
�Q                CMP r1,#0                       ;is the pointer already off ?
�G                BEQ jump_keys                   ;if so quit routine
�O                MOV r1,#0                       ;tell module pointer is off
�J                STR r1,mouse_onoff              ;store value in memory
�N                SWI "XOS_Mouse"                 ;get current mouse co-ords
�P                ADD r1,r0,r1                    ;add x and y coords together
�L                STR r1,mouse_xy                 ;store co-ords in memory
�I                MOV r0,#106                     ;next 3 lines perform
�N                MOV r1,#0                       ;*FX 106,0 turning pointer
�8                SWI "XOS_Byte"                  ;off
�O.jump_keys      LDMFD (sp)!,{r14}               ;get r14-SVC from SVC stack
�P                TEQP R9,#0                      ;get original processor mode
	Q                MOVNV r0,r0                     ;NO-OP to sync register banks
	K                LDMFD (sp)!,{r0-r12,r14}        ;get registers and link
	P                MOVS pc,r14                     ;quit routine keeping status
	$
	.G;This routine checks for mouse movement every 'timer' centi-seconds
	8
	BM.mouse          STMFD (sp)!,{r0-r12,r14}        ;store registers and link
	LP                MOV R9,pc                       ;keep current processor mode
	VO                �R R8,R9,#3                    ;move to r8, select SVC mode
	`C                TEQP R8,#0                      ;enter SVC mode
	jQ                MOVNV r0,r0                     ;NO-OP to sync register banks
	tN                STMFD (sp)!,{r14}               ;keep r14-SVC on SVC stack
	~H                LDR r1,mouse_onoff              ;get value in memory
	�P                CMP r1,#1                       ;is the pointer already on ?
	�G                BEQ jump_mouse                  ;if so quit routine
	�N                SWI "XOS_Mouse"                 ;get current mouse co-ords
	�P                ADD r1,r0,r1                    ;add x and y coords together
	�H                LDR r0,mouse_xy                 ;get value in memory
	�P                CMPS r2,#0                      ;have buttons been pressed ?
	�J                CMPEQS r0,r1                    ;has the mouse moved ?
	�M                BEQ jump_mouse                  ;if not then quit routine
	�I                MOV r0,#106                     ;next 3 lines perform
	�N                MOV r1,#1                       ;*FX 106,1 turning pointer
	�7                SWI "XOS_Byte"                  ;on
	�N                MOV r1,#1                       ;tell module pointer is on
J                STR r1,mouse_onoff              ;store value in memory

O.jump_mouse     LDMFD (sp)!,{r14}               ;get r14-SVC from SVC stack
P                TEQP R9,#0                      ;get original processor mode
Q                MOVNV r0,r0                     ;NO-OP to sync register banks
(K                LDMFD (sp)!,{r0-r12,r14}        ;get registers and link
2P                MOVS pc,r14                     ;quit routine keeping status
<
F]
P� pass%
Z
dA� Save the module as PtrHide and set it's file type to module
n
x&� "SAVE PtrHide "+�~code%+"+"+�~P%
�� "SETTYPE PtrHide FFA"
�
00000000  0d 00 0a 13 f4 20 20 20  20 20 3e 50 48 73 6f 75  |.....     >PHsou|
00000010  72 63 65 0d 00 14 16 f4  20 62 79 20 20 54 69 6d  |rce..... by  Tim|
00000020  6f 74 68 79 20 48 61 6c  6c 0d 00 1e 16 f4 20 28  |othy Hall..... (|
00000030  63 29 20 41 55 20 4a 75  6c 79 20 31 39 39 34 0d  |c) AU July 1994.|
00000040  00 28 04 0d 00 32 26 ee  20 85 20 ee 20 85 20 87  |.(...2&. . . . .|
00000050  20 3a 20 85 20 9f 2c 20  f6 24 2b 22 20 61 74 20  | : . ., .$+" at |
00000060  6c 69 6e 65 20 22 2b c3  9e 0d 00 3c 04 0d 00 46  |line "+....<...F|
00000070  10 de 20 63 6f 64 65 25  20 34 30 30 30 0d 00 50  |.. code% 4000..P|
00000080  15 e3 20 70 61 73 73 25  3d 34 20 b8 20 37 20 88  |.. pass%=4 . 7 .|
00000090  20 33 0d 00 5a 11 50 25  3d 30 3a 4f 25 3d 63 6f  | 3..Z.P%=0:O%=co|
000000a0  64 65 25 0d 00 64 04 0d  00 6e 09 73 70 3d 31 33  |de%..d...n.sp=13|
000000b0  0d 00 78 4e 74 69 6d 65  72 3d 32 35 20 20 3a f4  |..xNtimer=25  :.|
000000c0  20 54 68 69 73 20 73 65  74 73 20 74 68 65 20 6e  | This sets the n|
000000d0  75 6d 62 65 72 20 6f 66  20 63 65 6e 74 69 2d 73  |umber of centi-s|
000000e0  65 63 6f 6e 64 73 20 69  6e 74 65 72 76 61 6c 20  |econds interval |
000000f0  74 68 61 74 20 74 68 65  20 6d 6f 75 73 65 0d 00  |that the mouse..|
00000100  82 28 20 20 20 20 20 20  20 20 20 20 20 f4 20 69  |.(           . i|
00000110  73 20 63 68 65 63 6b 65  64 20 66 6f 72 20 6d 6f  |s checked for mo|
00000120  76 65 6d 65 6e 74 0d 00  8c 04 0d 00 96 0f 5b 20  |vement........[ |
00000130  4f 50 54 20 70 61 73 73  25 0d 00 a0 04 0d 00 aa  |OPT pass%.......|
00000140  24 3b 54 68 69 73 20 69  73 20 74 68 65 20 6d 6f  |$;This is the mo|
00000150  64 75 6c 65 20 68 65 61  64 65 72 20 62 6c 6f 63  |dule header bloc|
00000160  6b 0d 00 b4 04 0d 00 be  4e 20 20 20 20 20 20 20  |k.......N       |
00000170  20 20 20 20 20 20 20 20  20 45 51 55 44 20 30 20  |         EQUD 0 |
00000180  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000190  20 3b 73 74 61 72 74 20  75 70 20 63 6f 64 65 20  | ;start up code |
000001a0  28 6d 6f 64 75 6c 65 20  63 61 6e 6e 6f 74 20 72  |(module cannot r|
000001b0  75 6e 29 0d 00 c8 3f 20  20 20 20 20 20 20 20 20  |un)...?         |
000001c0  20 20 20 20 20 20 20 45  51 55 44 20 69 6e 69 74  |       EQUD init|
000001d0  69 61 6c 69 73 65 20 20  20 20 20 20 20 20 20 3b  |ialise         ;|
000001e0  69 6e 74 69 61 6c 69 73  61 74 69 6f 6e 20 63 6f  |intialisation co|
000001f0  64 65 0d 00 d2 3e 20 20  20 20 20 20 20 20 20 20  |de...>          |
00000200  20 20 20 20 20 20 45 51  55 44 20 66 69 6e 69 73  |      EQUD finis|
00000210  68 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 66  |h             ;f|
00000220  69 6e 61 6c 69 73 61 74  69 6f 6e 20 63 6f 64 65  |inalisation code|
00000230  0d 00 dc 47 20 20 20 20  20 20 20 20 20 20 20 20  |...G            |
00000240  20 20 20 20 45 51 55 44  20 73 65 72 76 69 63 65  |    EQUD service|
00000250  5f 63 61 6c 6c 20 20 20  20 20 20 20 3b 73 65 72  |_call       ;ser|
00000260  76 69 63 65 20 63 61 6c  6c 20 68 61 6e 64 6c 69  |vice call handli|
00000270  6e 67 20 63 6f 64 65 0d  00 e6 40 20 20 20 20 20  |ng code...@     |
00000280  20 20 20 20 20 20 20 20  20 20 20 45 51 55 44 20  |           EQUD |
00000290  74 69 74 6c 65 5f 73 74  72 69 6e 67 20 20 20 20  |title_string    |
000002a0  20 20 20 3b 6d 6f 64 75  6c 65 20 74 69 74 6c 65  |   ;module title|
000002b0  20 73 74 72 69 6e 67 0d  00 f0 40 20 20 20 20 20  | string...@     |
000002c0  20 20 20 20 20 20 20 20  20 20 20 45 51 55 44 20  |           EQUD |
000002d0  68 65 6c 70 5f 73 74 72  69 6e 67 20 20 20 20 20  |help_string     |
000002e0  20 20 20 3b 6d 6f 64 75  6c 65 20 2a 68 65 6c 70  |   ;module *help|
000002f0  20 73 74 72 69 6e 67 0d  00 fa 4c 20 20 20 20 20  | string...L     |
00000300  20 20 20 20 20 20 20 20  20 20 20 45 51 55 44 20  |           EQUD |
00000310  68 65 6c 70 5f 74 61 62  6c 65 20 20 20 20 20 20  |help_table      |
00000320  20 20 20 3b 68 65 6c 70  20 61 6e 64 20 63 6f 6d  |   ;help and com|
00000330  6d 61 6e 64 20 64 65 63  6f 64 69 6e 67 20 74 61  |mand decoding ta|
00000340  62 6c 65 0d 01 04 4d 20  20 20 20 20 20 20 20 20  |ble...M         |
00000350  20 20 20 20 20 20 20 45  51 55 44 20 30 20 20 20  |       EQUD 0   |
00000360  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00000370  53 57 49 20 63 68 75 6e  6b 20 62 61 73 65 20 6e  |SWI chunk base n|
00000380  75 6d 62 65 72 20 28 6e  6f 20 53 57 49 27 73 29  |umber (no SWI's)|
00000390  0d 01 0e 49 20 20 20 20  20 20 20 20 20 20 20 20  |...I            |
000003a0  20 20 20 20 45 51 55 44  20 30 20 20 20 20 20 20  |    EQUD 0      |
000003b0  20 20 20 20 20 20 20 20  20 20 20 20 3b 53 57 49  |            ;SWI|
000003c0  20 68 61 6e 64 6c 69 6e  67 20 63 6f 64 65 20 28  | handling code (|
000003d0  6e 6f 20 53 57 49 27 73  29 0d 01 18 4a 20 20 20  |no SWI's)...J   |
000003e0  20 20 20 20 20 20 20 20  20 20 20 20 20 45 51 55  |             EQU|
000003f0  44 20 30 20 20 20 20 20  20 20 20 20 20 20 20 20  |D 0             |
00000400  20 20 20 20 20 3b 53 57  49 20 64 65 63 6f 64 69  |     ;SWI decodi|
00000410  6e 67 20 74 61 62 6c 65  20 28 6e 6f 20 53 57 49  |ng table (no SWI|
00000420  27 73 29 0d 01 22 49 20  20 20 20 20 20 20 20 20  |'s).."I         |
00000430  20 20 20 20 20 20 20 45  51 55 44 20 30 20 20 20  |       EQUD 0   |
00000440  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00000450  53 57 49 20 64 65 63 6f  64 69 6e 67 20 63 6f 64  |SWI decoding cod|
00000460  65 20 28 6e 6f 20 53 57  49 27 73 29 0d 01 2c 04  |e (no SWI's)..,.|
00000470  0d 01 36 29 3b 54 68 69  73 20 62 6c 6f 63 6b 20  |..6);This block |
00000480  63 6f 6e 74 61 69 6e 73  20 74 68 65 20 6d 6f 64  |contains the mod|
00000490  75 6c 65 20 74 69 74 6c  65 0d 01 40 04 0d 01 4a  |ule title..@...J|
000004a0  41 2e 74 69 74 6c 65 5f  73 74 72 69 6e 67 20 20  |A.title_string  |
000004b0  20 45 51 55 53 20 22 50  6f 69 6e 74 65 72 48 69  | EQUS "PointerHi|
000004c0  64 65 22 20 20 20 20 20  20 20 20 20 20 3b 74 68  |de"          ;th|
000004d0  65 20 6d 6f 64 75 6c 65  20 74 69 74 6c 65 0d 01  |e module title..|
000004e0  54 45 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |TE              |
000004f0  20 20 45 51 55 42 20 30  20 20 20 20 20 20 20 20  |  EQUB 0        |
00000500  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000510  20 20 3b 74 65 72 6d 69  6e 61 74 69 6e 67 20 62  |  ;terminating b|
00000520  79 74 65 0d 01 5e 41 20  20 20 20 20 20 20 20 20  |yte..^A         |
00000530  20 20 20 20 20 20 20 41  4c 49 47 4e 20 20 20 20  |       ALIGN    |
00000540  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000550  20 20 20 20 20 20 20 3b  61 6c 69 67 6e 20 6d 65  |       ;align me|
00000560  6d 6f 72 79 0d 01 68 04  0d 01 72 2e 3b 54 68 69  |mory..h...r.;Thi|
00000570  73 20 62 6c 6f 63 6b 20  63 6f 6e 74 61 69 6e 73  |s block contains|
00000580  20 69 6e 66 6f 20 66 6f  72 20 2a 68 65 6c 70 20  | info for *help |
00000590  6d 6f 64 75 6c 65 0d 01  7c 04 0d 01 86 41 2e 68  |module..|....A.h|
000005a0  65 6c 70 5f 73 74 72 69  6e 67 20 20 20 20 45 51  |elp_string    EQ|
000005b0  55 53 20 22 50 6f 69 6e  74 65 72 48 69 64 65 22  |US "PointerHide"|
000005c0  20 20 20 20 20 20 20 20  20 20 3b 74 68 65 20 6d  |          ;the m|
000005d0  6f 64 75 6c 65 20 74 69  74 6c 65 0d 01 90 40 20  |odule title...@ |
000005e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 45  |               E|
000005f0  51 55 42 20 39 20 20 20  20 20 20 20 20 20 20 20  |QUB 9           |
00000600  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00000610  70 65 72 66 6f 72 6d 20  74 61 62 0d 01 9a 45 20  |perform tab...E |
00000620  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 45  |               E|
00000630  51 55 53 20 22 30 2e 31  30 20 28 32 38 20 4d 61  |QUS "0.10 (28 Ma|
00000640  72 20 31 39 39 34 29 22  20 20 20 20 20 20 20 3b  |r 1994)"       ;|
00000650  76 65 72 73 69 6f 6e 20  61 6e 64 20 64 61 74 65  |version and date|
00000660  0d 01 a4 45 20 20 20 20  20 20 20 20 20 20 20 20  |...E            |
00000670  20 20 20 20 45 51 55 42  20 30 20 20 20 20 20 20  |    EQUB 0      |
00000680  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000690  20 20 20 20 3b 74 65 72  6d 69 6e 61 74 69 6e 67  |    ;terminating|
000006a0  20 62 79 74 65 0d 01 ae  41 20 20 20 20 20 20 20  | byte...A       |
000006b0  20 20 20 20 20 20 20 20  20 41 4c 49 47 4e 20 20  |         ALIGN  |
000006c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000006d0  20 20 20 20 20 20 20 20  20 3b 61 6c 69 67 6e 20  |         ;align |
000006e0  6d 65 6d 6f 72 79 0d 01  b8 04 0d 01 c2 2c 3b 54  |memory.......,;T|
000006f0  68 69 73 20 62 6c 6f 63  6b 20 63 6f 6e 74 61 69  |his block contai|
00000700  6e 73 20 74 68 65 20 6d  6f 64 75 6c 65 20 63 6f  |ns the module co|
00000710  6d 6d 61 6e 64 73 0d 01  cc 04 0d 01 d6 47 2e 68  |mmands.......G.h|
00000720  65 6c 70 5f 74 61 62 6c  65 20 20 20 20 20 45 51  |elp_table     EQ|
00000730  55 53 20 22 48 69 64 65  22 20 20 20 20 20 20 20  |US "Hide"       |
00000740  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 54  |              ;T|
00000750  68 65 20 6d 6f 64 75 6c  65 20 63 6f 6d 6d 61 6e  |he module comman|
00000760  64 0d 01 e0 45 20 20 20  20 20 20 20 20 20 20 20  |d...E           |
00000770  20 20 20 20 20 45 51 55  42 20 30 20 20 20 20 20  |     EQUB 0     |
00000780  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000790  20 20 20 20 20 3b 74 65  72 6d 69 6e 61 74 69 6e  |     ;terminatin|
000007a0  67 20 62 79 74 65 0d 01  ea 41 20 20 20 20 20 20  |g byte...A      |
000007b0  20 20 20 20 20 20 20 20  20 20 41 4c 49 47 4e 20  |          ALIGN |
000007c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000007d0  20 20 20 20 20 20 20 20  20 20 3b 61 6c 69 67 6e  |          ;align|
000007e0  20 6d 65 6d 6f 72 79 0d  01 f4 4f 20 20 20 20 20  | memory...O     |
000007f0  20 20 20 20 20 20 20 20  20 20 20 45 51 55 44 20  |           EQUD |
00000800  68 69 64 65 5f 72 65 6d  6f 76 65 20 20 20 20 20  |hide_remove     |
00000810  20 20 20 20 20 20 20 20  20 20 20 3b 63 6f 64 65  |           ;code|
00000820  20 74 6f 20 62 65 20 63  61 6c 6c 65 64 20 6f 6e  | to be called on|
00000830  20 2a 68 69 64 65 0d 01  fe 4b 20 20 20 20 20 20  | *hide...K      |
00000840  20 20 20 20 20 20 20 20  20 20 45 51 55 44 20 26  |          EQUD &|
00000850  30 30 30 31 30 30 30 31  20 20 20 20 20 20 20 20  |00010001        |
00000860  20 20 20 20 20 20 20 20  20 20 3b 65 78 70 65 63  |          ;expec|
00000870  74 20 ee 2f 87 20 61 66  74 65 72 20 2a 68 69 64  |t ./. after *hid|
00000880  65 0d 02 08 4b 20 20 20  20 20 20 20 20 20 20 20  |e...K           |
00000890  20 20 20 20 20 45 51 55  44 20 73 79 6e 74 61 78  |     EQUD syntax|
000008a0  5f 73 74 72 69 6e 67 20  20 20 20 20 20 20 20 20  |_string         |
000008b0  20 20 20 20 20 3b 63 6f  64 65 20 66 6f 72 20 73  |     ;code for s|
000008c0  79 6e 74 61 78 20 73 74  72 69 6e 67 0d 02 12 48  |yntax string...H|
000008d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000008e0  45 51 55 44 20 68 69 64  65 5f 68 65 6c 70 20 20  |EQUD hide_help  |
000008f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000900  3b 63 6f 64 65 20 66 6f  72 20 2a 68 65 6c 70 20  |;code for *help |
00000910  68 69 64 65 0d 02 1c 04  0d 02 26 26 3b 54 68 69  |hide......&&;Thi|
00000920  73 20 62 6c 6f 63 6b 20  69 73 20 74 68 65 20 2a  |s block is the *|
00000930  68 69 64 65 20 68 65 6c  70 20 74 65 78 74 0d 02  |hide help text..|
00000940  30 04 0d 02 3a 4c 2e 68  69 64 65 5f 68 65 6c 70  |0...:L.hide_help|
00000950  20 20 20 20 20 20 45 51  55 53 20 22 2a 48 69 64  |      EQUS "*Hid|
00000960  65 20 4f 4e 20 74 75 72  6e 73 20 6f 66 66 20 70  |e ON turns off p|
00000970  6f 69 6e 74 65 72 20 6f  6e 20 74 79 70 69 6e 67  |ointer on typing|
00000980  20 61 74 20 6b 65 79 62  6f 61 72 64 2e 22 0d 02  | at keyboard."..|
00000990  44 1a 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |D.              |
000009a0  20 20 45 51 55 42 20 30  0d 02 4e 19 20 20 20 20  |  EQUB 0..N.    |
000009b0  20 20 20 20 20 20 20 20  20 20 20 20 41 4c 49 47  |            ALIG|
000009c0  4e 0d 02 58 04 0d 02 62  2d 3b 54 68 69 73 20 69  |N..X...b-;This i|
000009d0  73 20 62 6c 6f 63 6b 20  69 73 20 74 68 65 20 2a  |s block is the *|
000009e0  68 69 64 65 20 53 79 6e  74 61 78 20 73 74 72 69  |hide Syntax stri|
000009f0  6e 67 0d 02 6c 04 0d 02  76 31 2e 73 79 6e 74 61  |ng..l...v1.synta|
00000a00  78 5f 73 74 72 69 6e 67  20 20 45 51 55 53 20 22  |x_string  EQUS "|
00000a10  53 79 6e 74 61 78 3a 20  2a 48 69 64 65 20 3c 4f  |Syntax: *Hide <O|
00000a20  4e 7c 4f 46 46 3e 22 0d  02 80 1a 20 20 20 20 20  |N|OFF>"....     |
00000a30  20 20 20 20 20 20 20 20  20 20 20 45 51 55 42 20  |           EQUB |
00000a40  30 0d 02 8a 19 20 20 20  20 20 20 20 20 20 20 20  |0....           |
00000a50  20 20 20 20 20 41 4c 49  47 4e 0d 02 94 04 0d 02  |     ALIGN......|
00000a60  9e 3a 3b 54 68 69 73 20  62 6c 6f 63 6b 20 63 68  |.:;This block ch|
00000a70  65 63 6b 73 20 69 66 20  6d 6f 64 75 6c 65 20 69  |ecks if module i|
00000a80  73 20 62 65 69 6e 67 20  74 75 72 6e 65 64 20 6f  |s being turned o|
00000a90  6e 20 6f 72 20 6f 66 66  0d 02 a8 04 0d 02 b2 51  |n or off.......Q|
00000aa0  2e 68 69 64 65 5f 72 65  6d 6f 76 65 20 20 20 20  |.hide_remove    |
00000ab0  4c 44 52 20 72 31 32 2c  5b 72 31 32 5d 20 20 20  |LDR r12,[r12]   |
00000ac0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000ad0  3b 67 65 74 20 61 64 64  72 65 73 73 20 6f 66 20  |;get address of |
00000ae0  52 4d 41 20 77 6f 72 6b  73 70 61 63 65 0d 02 bc  |RMA workspace...|
00000af0  4f 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |O               |
00000b00  20 4c 44 52 42 20 72 32  2c 5b 72 30 5d 2c 23 31  | LDRB r2,[r0],#1|
00000b10  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000b20  20 3b 67 65 74 20 31 73  74 20 6c 65 74 74 65 72  | ;get 1st letter|
00000b30  20 61 66 74 65 72 20 2a  68 69 64 65 0d 02 c6 49  | after *hide...I|
00000b40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000b50  84 52 20 72 32 2c 72 32  2c 23 33 32 20 20 20 20  |.R r2,r2,#32    |
00000b60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00000b70  63 6f 6e 76 65 72 74 20  74 6f 20 6c 6f 77 65 72  |convert to lower|
00000b80  20 63 61 73 65 0d 02 d0  43 20 20 20 20 20 20 20  | case...C       |
00000b90  20 20 20 20 20 20 20 20  20 43 4d 50 20 72 32 2c  |         CMP r2,|
00000ba0  23 97 22 6f 22 20 20 20  20 20 20 20 20 20 20 20  |#."o"           |
00000bb0  20 20 20 20 20 20 20 3b  69 73 20 74 68 69 73 20  |       ;is this |
00000bc0  61 6e 20 27 6f 27 20 3f  0d 02 da 4e 20 20 20 20  |an 'o' ?...N    |
00000bd0  20 20 20 20 20 20 20 20  20 20 20 20 42 4e 45 20  |            BNE |
00000be0  6e 6f 74 5f 6f 6e 6f 66  66 20 20 20 20 20 20 20  |not_onoff       |
00000bf0  20 20 20 20 20 20 20 20  20 20 20 20 3b 69 66 20  |            ;if |
00000c00  6e 6f 74 20 74 68 65 6e  20 67 61 72 62 61 67 65  |not then garbage|
00000c10  20 74 79 70 65 64 0d 02  e4 4f 20 20 20 20 20 20  | typed...O      |
00000c20  20 20 20 20 20 20 20 20  20 20 4c 44 52 42 20 72  |          LDRB r|
00000c30  32 2c 5b 72 30 5d 2c 23  31 20 20 20 20 20 20 20  |2,[r0],#1       |
00000c40  20 20 20 20 20 20 20 20  20 20 3b 67 65 74 20 32  |          ;get 2|
00000c50  6e 64 20 6c 65 74 74 65  72 20 61 66 74 65 72 20  |nd letter after |
00000c60  2a 68 69 64 65 0d 02 ee  49 20 20 20 20 20 20 20  |*hide...I       |
00000c70  20 20 20 20 20 20 20 20  20 84 52 20 72 32 2c 72  |         .R r2,r|
00000c80  32 2c 23 33 32 20 20 20  20 20 20 20 20 20 20 20  |2,#32           |
00000c90  20 20 20 20 20 20 20 20  3b 63 6f 6e 76 65 72 74  |        ;convert|
00000ca0  20 74 6f 20 6c 6f 77 65  72 20 63 61 73 65 0d 02  | to lower case..|
00000cb0  f8 43 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.C              |
00000cc0  20 20 43 4d 50 20 72 32  2c 23 97 22 6e 22 20 20  |  CMP r2,#."n"  |
00000cd0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000ce0  3b 69 73 20 74 68 69 73  20 61 6e 20 27 6e 27 20  |;is this an 'n' |
00000cf0  3f 0d 03 02 51 20 20 20  20 20 20 20 20 20 20 20  |?...Q           |
00000d00  20 20 20 20 20 42 45 51  20 69 6e 73 74 61 6c 6c  |     BEQ install|
00000d10  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000d20  20 20 20 20 20 3b 69 66  20 73 6f 20 74 68 65 6e  |     ;if so then|
00000d30  20 6d 6f 64 75 6c 65 20  74 75 72 6e 69 6e 67 20  | module turning |
00000d40  6f 6e 0d 03 0c 4e 20 20  20 20 20 20 20 20 20 20  |on...N          |
00000d50  20 20 20 20 20 20 43 4d  50 20 72 32 2c 23 97 22  |      CMP r2,#."|
00000d60  66 22 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |f"              |
00000d70  20 20 20 20 3b 69 66 20  6e 6f 74 2c 20 69 73 20  |    ;if not, is |
00000d80  69 74 20 74 75 72 6e 69  6e 67 20 6f 66 66 20 3f  |it turning off ?|
00000d90  0d 03 16 4e 20 20 20 20  20 20 20 20 20 20 20 20  |...N            |
00000da0  20 20 20 20 42 4e 45 20  6e 6f 74 5f 6f 6e 6f 66  |    BNE not_onof|
00000db0  66 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |f               |
00000dc0  20 20 20 20 3b 69 66 20  6e 6f 74 20 74 68 65 6e  |    ;if not then|
00000dd0  20 67 61 72 62 61 67 65  20 74 79 70 65 64 0d 03  | garbage typed..|
00000de0  20 4f 20 20 20 20 20 20  20 20 20 20 20 20 20 20  | O              |
00000df0  20 20 4c 44 52 42 20 72  32 2c 5b 72 30 5d 2c 23  |  LDRB r2,[r0],#|
00000e00  31 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |1               |
00000e10  20 20 3b 67 65 74 20 33  72 64 20 6c 65 74 74 65  |  ;get 3rd lette|
00000e20  72 20 61 66 74 65 72 20  2a 68 69 64 65 0d 03 2a  |r after *hide..*|
00000e30  49 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |I               |
00000e40  20 84 52 20 72 32 2c 72  32 2c 23 33 32 20 20 20  | .R r2,r2,#32   |
00000e50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000e60  3b 63 6f 6e 76 65 72 74  20 74 6f 20 6c 6f 77 65  |;convert to lowe|
00000e70  72 20 63 61 73 65 0d 03  34 43 20 20 20 20 20 20  |r case..4C      |
00000e80  20 20 20 20 20 20 20 20  20 20 43 4d 50 20 72 32  |          CMP r2|
00000e90  2c 23 97 22 66 22 20 20  20 20 20 20 20 20 20 20  |,#."f"          |
00000ea0  20 20 20 20 20 20 20 20  3b 69 73 20 74 68 69 73  |        ;is this|
00000eb0  20 61 6e 20 27 66 27 20  3f 0d 03 3e 4e 20 20 20  | an 'f' ?..>N   |
00000ec0  20 20 20 20 20 20 20 20  20 20 20 20 20 42 45 51  |             BEQ|
00000ed0  20 72 65 6d 6f 76 65 20  20 20 20 20 20 20 20 20  | remove         |
00000ee0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 69 66  |             ;if|
00000ef0  20 73 6f 2c 20 6d 6f 64  75 6c 65 20 74 75 72 6e  | so, module turn|
00000f00  69 6e 67 20 6f 66 66 0d  03 48 04 0d 03 52 36 3b  |ing off..H...R6;|
00000f10  54 68 69 73 20 72 6f 75  74 69 6e 65 20 64 65 61  |This routine dea|
00000f20  6c 73 20 77 69 74 68 20  67 61 72 62 61 67 65 20  |ls with garbage |
00000f30  74 79 70 65 64 20 61 66  74 65 72 20 2a 68 69 64  |typed after *hid|
00000f40  65 0d 03 5c 04 0d 03 66  4f 2e 6e 6f 74 5f 6f 6e  |e..\...fO.not_on|
00000f50  6f 66 66 20 20 20 20 20  20 41 44 52 20 72 30 2c  |off      ADR r0,|
00000f60  68 69 64 65 5f 6f 6e 6f  66 66 20 20 20 20 20 20  |hide_onoff      |
00000f70  20 20 20 20 20 20 20 20  20 3b 67 65 74 20 61 64  |         ;get ad|
00000f80  64 72 65 73 73 20 6f 66  20 65 72 72 6f 72 20 62  |dress of error b|
00000f90  6c 6f 63 6b 0d 03 70 42  20 20 20 20 20 20 20 20  |lock..pB        |
00000fa0  20 20 20 20 20 20 20 20  84 52 20 72 31 34 2c 72  |        .R r14,r|
00000fb0  31 34 2c 23 31 3c 3c 32  38 20 20 20 20 20 20 20  |14,#1<<28       |
00000fc0  20 20 20 20 20 20 20 3b  63 61 75 73 65 20 61 6e  |       ;cause an|
00000fd0  20 65 72 72 6f 72 0d 03  7a 50 20 20 20 20 20 20  | error..zP      |
00000fe0  20 20 20 20 20 20 20 20  20 20 4d 4f 56 53 20 70  |          MOVS p|
00000ff0  63 2c 72 31 34 20 20 20  20 20 20 20 20 20 20 20  |c,r14           |
00001000  20 20 20 20 20 20 20 20  20 20 3b 71 75 69 74 20  |          ;quit |
00001010  72 6f 75 74 69 6e 65 20  6b 65 65 70 69 6e 67 20  |routine keeping |
00001020  73 74 61 74 75 73 0d 03  84 04 0d 03 8e 23 3b 54  |status.......#;T|
00001030  68 69 73 20 69 73 20 74  68 65 20 6d 6f 64 75 6c  |his is the modul|
00001040  65 20 65 72 72 6f 72 20  62 6c 6f 63 6b 0d 03 98  |e error block...|
00001050  04 0d 03 a2 22 2e 68 69  64 65 5f 6f 6e 6f 66 66  |....".hide_onoff|
00001060  20 20 20 20 20 45 51 55  44 20 26 30 30 31 32 33  |     EQUD &00123|
00001070  34 35 36 0d 03 ac 39 20  20 20 20 20 20 20 20 20  |456...9         |
00001080  20 20 20 20 20 20 20 45  51 55 53 20 22 2a 48 69  |       EQUS "*Hi|
00001090  64 65 20 6e 65 65 64 73  20 4f 4e 20 6f 72 20 4f  |de needs ON or O|
000010a0  46 46 20 61 66 74 65 72  20 69 74 22 0d 03 b6 1a  |FF after it"....|
000010b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000010c0  45 51 55 42 20 30 0d 03  c0 19 20 20 20 20 20 20  |EQUB 0....      |
000010d0  20 20 20 20 20 20 20 20  20 20 41 4c 49 47 4e 0d  |          ALIGN.|
000010e0  03 ca 04 0d 03 d4 37 3b  54 68 69 73 20 62 6c 6f  |......7;This blo|
000010f0  63 6b 20 63 6f 6e 74 61  69 6e 73 20 6d 6f 64 75  |ck contains modu|
00001100  6c 65 20 66 6c 61 67 73  20 61 6e 64 20 6d 6f 75  |le flags and mou|
00001110  73 65 20 63 6f 2d 6f 72  64 73 0d 03 de 34 3b 68  |se co-ords...4;h|
00001120  69 64 65 65 72 5f 6f 6e  66 66 20 74 65 6c 6c 73  |ideer_onff tells|
00001130  20 74 68 65 20 6d 6f 64  75 6c 65 20 69 66 20 69  | the module if i|
00001140  74 20 69 73 20 6f 6e 20  6f 72 20 6f 66 66 0d 03  |t is on or off..|
00001150  e8 4e 3b 6d 6f 75 73 65  5f 6f 6e 6f 66 66 20 74  |.N;mouse_onoff t|
00001160  65 6c 6c 73 20 74 68 65  20 6d 6f 64 75 6c 65 20  |ells the module |
00001170  69 66 20 74 68 65 20 70  6f 69 6e 74 65 72 20 69  |if the pointer i|
00001180  73 20 63 75 72 72 65 6e  74 6c 79 20 64 69 73 70  |s currently disp|
00001190  6c 61 79 65 64 20 6f 72  20 6e 6f 74 0d 03 f2 31  |layed or not...1|
000011a0  3b 6d 6f 75 73 65 5f 78  79 20 68 6f 6c 64 73 20  |;mouse_xy holds |
000011b0  74 68 65 20 73 75 6d 6e  20 6f 66 20 74 68 65 20  |the sumn of the |
000011c0  6d 6f 75 73 65 20 63 6f  2d 6f 72 64 73 0d 03 fc  |mouse co-ords...|
000011d0  04 0d 04 06 48 2e 68 69  64 65 5f 6f 6e 6f 66 66  |....H.hide_onoff|
000011e0  20 20 20 20 20 45 51 55  44 20 30 20 20 20 20 20  |     EQUD 0     |
000011f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001200  20 20 20 20 20 3b 30 20  66 6f 72 20 6f 66 66 2c  |     ;0 for off,|
00001210  20 31 20 66 6f 72 20 6f  6e 0d 04 10 49 2e 6d 6f  | 1 for on...I.mo|
00001220  75 73 65 5f 6f 6e 6f 66  66 20 20 20 20 45 51 55  |use_onoff    EQU|
00001230  44 20 31 20 20 20 20 20  20 20 20 20 20 20 20 20  |D 1             |
00001240  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 31 20  |             ;1 |
00001250  66 6f 72 20 6f 66 66 2c  20 2d 30 20 66 6f 72 20  |for off, -0 for |
00001260  6f 6e 0d 04 1a 49 2e 6d  6f 75 73 65 5f 78 79 20  |on...I.mouse_xy |
00001270  20 20 20 20 20 20 45 51  55 44 20 30 20 20 20 20  |      EQUD 0    |
00001280  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001290  20 20 20 20 20 20 3b 73  75 6d 20 6f 66 20 6d 6f  |      ;sum of mo|
000012a0  75 73 65 20 63 6f 2d 6f  72 64 73 0d 04 24 04 0d  |use co-ords..$..|
000012b0  04 2e 31 3b 54 68 69 73  20 72 6f 75 74 69 6e 65  |..1;This routine|
000012c0  20 69 73 20 74 68 65 20  6d 6f 64 75 6c 65 20 69  | is the module i|
000012d0  6e 69 74 69 61 6c 69 73  69 6e 67 20 63 6f 64 65  |nitialising code|
000012e0  0d 04 38 04 0d 04 42 4a  2e 69 6e 69 74 69 61 6c  |..8...BJ.initial|
000012f0  69 73 65 20 20 20 20 20  53 54 4d 46 44 20 28 73  |ise     STMFD (s|
00001300  70 29 21 2c 7b 72 31 34  7d 20 20 20 20 20 20 20  |p)!,{r14}       |
00001310  20 20 20 20 20 20 20 3b  70 72 65 73 65 72 76 65  |       ;preserve|
00001320  20 6c 69 6e 6b 20 6f 6e  20 73 74 61 63 6b 0d 04  | link on stack..|
00001330  4c 51 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |LQ              |
00001340  20 20 4d 4f 56 20 72 31  2c 72 31 32 20 20 20 20  |  MOV r1,r12    |
00001350  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001360  20 3b 67 65 74 20 63 6f  70 79 20 6f 66 20 77 6f  | ;get copy of wo|
00001370  72 6b 73 70 61 63 65 20  61 64 64 72 65 73 73 0d  |rkspace address.|
00001380  04 56 4d 20 20 20 20 20  20 20 20 20 20 20 20 20  |.VM             |
00001390  20 20 20 4c 44 52 20 72  31 32 2c 5b 72 31 32 5d  |   LDR r12,[r12]|
000013a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000013b0  20 20 3b 67 65 74 20 63  6f 6e 74 65 6e 74 73 20  |  ;get contents |
000013c0  6f 66 20 77 6f 72 6b 73  70 61 63 65 0d 04 60 4e  |of workspace..`N|
000013d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000013e0  43 4d 50 20 72 31 32 2c  23 30 20 20 20 20 20 20  |CMP r12,#0      |
000013f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00001400  69 73 20 74 68 65 20 6d  6f 64 75 6c 65 20 61 6c  |is the module al|
00001410  72 65 61 64 79 20 6f 6e  20 3f 0d 04 6a 4b 20 20  |ready on ?..jK  |
00001420  20 20 20 20 20 20 20 20  20 20 20 20 20 20 4c 44  |              LD|
00001430  4d 4e 45 46 44 20 28 73  70 29 21 2c 7b 70 63 7d  |MNEFD (sp)!,{pc}|
00001440  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 69 66  |             ;if|
00001450  20 73 6f 20 74 68 65 6e  20 71 75 69 74 20 72 6f  | so then quit ro|
00001460  75 74 69 6e 65 0d 04 74  51 20 20 20 20 20 20 20  |utine..tQ       |
00001470  20 20 20 20 20 20 20 20  20 4d 4f 56 20 72 30 2c  |         MOV r0,|
00001480  23 36 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |#6              |
00001490  20 20 20 20 20 20 20 20  3b 73 65 74 20 72 30 20  |        ;set r0 |
000014a0  74 6f 20 63 6c 61 69 6d  20 52 4d 41 20 77 6f 72  |to claim RMA wor|
000014b0  6b 73 70 61 63 65 0d 04  7e 4d 20 20 20 20 20 20  |kspace..~M      |
000014c0  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 72 33  |          MOV r3|
000014d0  2c 23 30 20 20 20 20 20  20 20 20 20 20 20 20 20  |,#0             |
000014e0  20 20 20 20 20 20 20 20  20 3b 52 4d 41 20 77 6f  |         ;RMA wo|
000014f0  72 6b 73 70 61 63 65 20  73 69 7a 65 20 28 6e 6f  |rkspace size (no|
00001500  6e 65 29 0d 04 88 47 20  20 20 20 20 20 20 20 20  |ne)...G         |
00001510  20 20 20 20 20 20 20 53  57 49 20 22 58 4f 53 5f  |       SWI "XOS_|
00001520  4d 6f 64 75 6c 65 22 20  20 20 20 20 20 20 20 20  |Module"         |
00001530  20 20 20 20 20 20 3b 63  6c 61 69 6d 20 52 4d 41  |      ;claim RMA|
00001540  20 77 6f 72 6b 73 70 61  63 65 0d 04 92 1f 20 20  | workspace....  |
00001550  20 20 20 20 20 20 20 20  20 20 20 20 20 20 53 54  |              ST|
00001560  52 20 72 32 2c 5b 72 31  5d 0d 04 9c 1e 20 20 20  |R r2,[r1]....   |
00001570  20 20 20 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |             MOV|
00001580  20 72 31 32 2c 72 32 0d  04 a6 40 20 20 20 20 20  | r12,r2...@     |
00001590  20 20 20 20 20 20 20 20  20 20 20 4c 44 4d 46 44  |           LDMFD|
000015a0  20 28 73 70 29 21 2c 7b  70 63 7d 20 20 20 20 20  | (sp)!,{pc}     |
000015b0  20 20 20 20 20 20 20 20  20 20 3b 71 75 69 74 20  |          ;quit |
000015c0  72 6f 75 74 69 6e 65 0d  04 b0 04 0d 04 ba 34 3b  |routine.......4;|
000015d0  54 68 69 73 20 72 6f 75  74 69 6e 65 20 74 69 64  |This routine tid|
000015e0  69 65 73 20 74 68 65 20  6d 6f 64 75 6c 65 20 75  |ies the module u|
000015f0  70 20 77 68 65 6e 20 71  75 69 74 74 69 6e 67 0d  |p when quitting.|
00001600  04 c4 04 0d 04 ce 4b 2e  66 69 6e 69 73 68 20 20  |......K.finish  |
00001610  20 20 20 20 20 20 20 53  54 4d 46 44 20 28 73 70  |       STMFD (sp|
00001620  29 21 2c 7b 72 31 2d 72  34 2c 72 31 34 7d 20 20  |)!,{r1-r4,r14}  |
00001630  20 20 20 20 20 20 20 3b  70 72 65 73 65 72 76 65  |       ;preserve|
00001640  20 6c 69 6e 6b 20 6f 6e  20 73 74 61 63 6b 0d 04  | link on stack..|
00001650  d8 4e 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.N              |
00001660  20 20 4c 44 52 20 72 31  32 2c 5b 72 31 32 5d 20  |  LDR r12,[r12] |
00001670  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001680  20 20 3b 67 65 74 20 63  6f 6e 74 65 6e 74 73 20  |  ;get contents |
00001690  6f 66 20 77 6f 72 6b 73  70 61 63 65 0d 04 e2 51  |of workspace...Q|
000016a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000016b0  42 4c 20 72 65 6d 6f 76  65 20 20 20 20 20 20 20  |BL remove       |
000016c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000016d0  3b 67 6f 74 6f 20 72 6f  75 74 69 6e 65 20 74 75  |;goto routine tu|
000016e0  72 6e 20 6d 6f 64 75 6c  65 20 6f 66 66 0d 04 ec  |rn module off...|
000016f0  51 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |Q               |
00001700  20 4d 4f 56 20 72 30 2c  23 37 20 20 20 20 20 20  | MOV r0,#7      |
00001710  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001720  20 3b 73 65 74 20 72 30  20 66 6f 72 20 72 65 6c  | ;set r0 for rel|
00001730  65 61 73 65 20 52 4d 41  20 73 70 61 63 65 0d 04  |ease RMA space..|
00001740  f6 50 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.P              |
00001750  20 20 4d 4f 56 20 72 32  2c 72 31 32 20 20 20 20  |  MOV r2,r12    |
00001760  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001770  20 20 3b 73 65 74 20 72  32 20 74 6f 20 77 6f 72  |  ;set r2 to wor|
00001780  6b 73 70 61 63 65 20 61  64 64 72 65 73 73 0d 05  |kspace address..|
00001790  00 4d 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.M              |
000017a0  20 20 53 57 49 4e 45 20  22 58 4f 53 5f 4d 6f 64  |  SWINE "XOS_Mod|
000017b0  75 6c 65 22 20 20 20 20  20 20 20 20 20 20 20 20  |ule"            |
000017c0  20 20 3b 66 72 65 65 20  75 70 20 6d 6f 64 75 6c  |  ;free up modul|
000017d0  65 20 77 6f 72 6b 73 70  61 63 65 0d 05 0a 41 20  |e workspace...A |
000017e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 4c  |               L|
000017f0  44 4d 46 44 20 28 73 70  29 21 2c 7b 72 31 2d 72  |DMFD (sp)!,{r1-r|
00001800  34 2c 70 63 7d 20 20 20  20 20 20 20 20 20 20 3b  |4,pc}          ;|
00001810  71 75 69 74 20 72 6f 75  74 69 6e 65 0d 05 14 04  |quit routine....|
00001820  0d 05 1e 35 3b 54 68 69  73 20 72 6f 75 74 69 6e  |...5;This routin|
00001830  65 20 64 65 61 6c 73 20  77 69 74 68 20 74 68 65  |e deals with the|
00001840  20 6d 6f 64 75 6c 65 20  73 65 72 76 69 63 65 20  | module service |
00001850  63 61 6c 6c 73 0d 05 28  04 0d 05 32 4c 2e 73 65  |calls..(...2L.se|
00001860  72 76 69 63 65 5f 63 61  6c 6c 20 20 20 43 4d 50  |rvice_call   CMP|
00001870  20 72 31 2c 23 33 39 20  20 20 20 20 20 20 20 20  | r1,#39         |
00001880  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 68 61  |             ;ha|
00001890  73 20 63 6f 6d 70 75 74  65 72 20 62 65 65 6e 20  |s computer been |
000018a0  72 65 73 65 74 0d 05 3c  4c 20 20 20 20 20 20 20  |reset..<L       |
000018b0  20 20 20 20 20 20 20 20  20 4d 4f 56 4e 45 20 70  |         MOVNE p|
000018c0  63 2c 72 31 34 20 20 20  20 20 20 20 20 20 20 20  |c,r14           |
000018d0  20 20 20 20 20 20 20 20  20 3b 69 66 20 73 6f 20  |         ;if so |
000018e0  74 68 65 6e 20 71 75 69  74 20 72 6f 75 74 69 6e  |then quit routin|
000018f0  65 0d 05 46 43 20 20 20  20 20 20 20 20 20 20 20  |e..FC           |
00001900  20 20 20 20 20 53 54 4d  46 44 20 28 73 70 29 21  |     STMFD (sp)!|
00001910  2c 7b 72 30 7d 20 20 20  20 20 20 20 20 20 20 20  |,{r0}           |
00001920  20 20 20 20 20 3b 73 74  6f 72 65 20 72 65 67 69  |     ;store regi|
00001930  73 74 65 72 0d 05 50 50  20 20 20 20 20 20 20 20  |ster..PP        |
00001940  20 20 20 20 20 20 20 20  4d 4f 56 20 72 30 2c 23  |        MOV r0,#|
00001950  30 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0               |
00001960  20 20 20 20 20 20 20 20  3b 6f 6e 2f 6f 66 66 20  |        ;on/off |
00001970  66 6c 61 67 20 74 6f 20  6f 66 66 20 6f 6e 20 72  |flag to off on r|
00001980  65 73 65 74 0d 05 5a 44  20 20 20 20 20 20 20 20  |eset..ZD        |
00001990  20 20 20 20 20 20 20 20  53 54 52 20 72 30 2c 68  |        STR r0,h|
000019a0  69 64 65 5f 6f 6e 6f 66  66 20 20 20 20 20 20 20  |ide_onoff       |
000019b0  20 20 20 20 20 20 20 20  3b 73 74 6f 72 65 20 69  |        ;store i|
000019c0  6e 20 6d 65 6d 6f 72 79  0d 05 64 41 20 20 20 20  |n memory..dA    |
000019d0  20 20 20 20 20 20 20 20  20 20 20 20 4c 44 4d 46  |            LDMF|
000019e0  44 20 28 73 70 29 21 2c  7b 72 30 7d 20 20 20 20  |D (sp)!,{r0}    |
000019f0  20 20 20 20 20 20 20 20  20 20 20 20 3b 67 65 74  |            ;get|
00001a00  20 72 65 67 69 73 74 65  72 0d 05 6e 41 20 20 20  | register..nA   |
00001a10  20 20 20 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |             MOV|
00001a20  20 70 63 2c 72 31 34 20  20 20 20 20 20 20 20 20  | pc,r14         |
00001a30  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 71 75  |             ;qu|
00001a40  69 74 20 72 6f 75 74 69  6e 65 0d 05 78 04 0d 05  |it routine..x...|
00001a50  82 25 3b 54 68 69 73 20  72 6f 75 74 69 6e 65 20  |.%;This routine |
00001a60  74 75 72 6e 73 20 74 68  65 20 6d 6f 64 75 6c 65  |turns the module|
00001a70  20 6f 6e 0d 05 8c 04 0d  05 96 4b 2e 69 6e 73 74  | on.......K.inst|
00001a80  61 6c 6c 20 20 20 20 20  20 20 20 53 54 4d 46 44  |all        STMFD|
00001a90  20 28 73 70 29 21 2c 7b  72 30 2d 72 31 32 2c 72  | (sp)!,{r0-r12,r|
00001aa0  31 34 7d 20 20 20 20 20  20 20 20 3b 70 72 65 73  |14}        ;pres|
00001ab0  65 72 76 65 20 6c 69 6e  6b 20 6f 6e 20 73 74 61  |erve link on sta|
00001ac0  63 6b 0d 05 a0 48 20 20  20 20 20 20 20 20 20 20  |ck...H          |
00001ad0  20 20 20 20 20 20 4c 44  52 20 72 30 2c 68 69 64  |      LDR r0,hid|
00001ae0  65 5f 6f 6e 6f 66 66 20  20 20 20 20 20 20 20 20  |e_onoff         |
00001af0  20 20 20 20 20 20 3b 67  65 74 20 6d 65 6d 6f 72  |      ;get memor|
00001b00  79 20 6c 6f 63 61 74 69  6f 6e 0d 05 aa 4b 20 20  |y location...K  |
00001b10  20 20 20 20 20 20 20 20  20 20 20 20 20 20 43 4d  |              CM|
00001b20  50 20 72 30 2c 23 30 20  20 20 20 20 20 20 20 20  |P r0,#0         |
00001b30  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 69  |              ;i|
00001b40  73 20 6d 6f 64 75 6c 65  20 61 6c 72 65 61 64 79  |s module already|
00001b50  20 6f 6e 20 3f 0d 05 b4  4c 20 20 20 20 20 20 20  | on ?...L       |
00001b60  20 20 20 20 20 20 20 20  20 4c 44 4d 4e 45 46 44  |         LDMNEFD|
00001b70  20 28 73 70 29 21 2c 7b  72 30 2d 72 31 32 2c 70  | (sp)!,{r0-r12,p|
00001b80  63 7d 20 20 20 20 20 20  20 3b 69 66 20 73 6f 20  |c}       ;if so |
00001b90  74 68 65 6e 20 71 75 69  74 20 72 6f 75 74 69 6e  |then quit routin|
00001ba0  65 0d 05 be 4f 20 20 20  20 20 20 20 20 20 20 20  |e...O           |
00001bb0  20 20 20 20 20 4d 56 4e  20 72 30 2c 23 30 20 20  |     MVN r0,#0  |
00001bc0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001bd0  20 20 20 20 20 3b 69 66  20 6e 6f 74 20 74 68 65  |     ;if not the|
00001be0  6e 20 74 75 72 6e 20 6d  6f 64 75 6c 65 20 6f 6e  |n turn module on|
00001bf0  0d 05 c8 44 20 20 20 20  20 20 20 20 20 20 20 20  |...D            |
00001c00  20 20 20 20 53 54 52 20  72 30 2c 68 69 64 65 5f  |    STR r0,hide_|
00001c10  6f 6e 6f 66 66 20 20 20  20 20 20 20 20 20 20 20  |onoff           |
00001c20  20 20 20 20 3b 73 74 6f  72 65 20 69 6e 20 6d 65  |    ;store in me|
00001c30  6d 6f 72 79 0d 05 d2 4f  20 20 20 20 20 20 20 20  |mory...O        |
00001c40  20 20 20 20 20 20 20 20  4d 4f 56 20 72 32 2c 72  |        MOV r2,r|
00001c50  31 32 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |12              |
00001c60  20 20 20 20 20 20 20 20  3b 72 31 32 20 77 61 6e  |        ;r12 wan|
00001c70  74 65 64 20 6f 6e 20 76  65 63 74 6f 72 20 73 74  |ted on vector st|
00001c80  61 72 74 0d 05 dc 50 20  20 20 20 20 20 20 20 20  |art...P         |
00001c90  20 20 20 20 20 20 20 4d  4f 56 20 52 39 2c 70 63  |       MOV R9,pc|
00001ca0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001cb0  20 20 20 20 20 20 20 3b  6b 65 65 70 20 63 75 72  |       ;keep cur|
00001cc0  72 65 6e 74 20 70 72 6f  63 65 73 73 6f 72 20 6d  |rent processor m|
00001cd0  6f 64 65 0d 05 e6 4f 20  20 20 20 20 20 20 20 20  |ode...O         |
00001ce0  20 20 20 20 20 20 20 84  52 20 52 38 2c 52 39 2c  |       .R R8,R9,|
00001cf0  23 33 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |#3              |
00001d00  20 20 20 20 20 20 3b 6d  6f 76 65 20 74 6f 20 72  |      ;move to r|
00001d10  38 2c 20 73 65 6c 65 63  74 20 53 56 43 20 6d 6f  |8, select SVC mo|
00001d20  64 65 0d 05 f0 43 20 20  20 20 20 20 20 20 20 20  |de...C          |
00001d30  20 20 20 20 20 20 54 45  51 50 20 52 38 2c 23 30  |      TEQP R8,#0|
00001d40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001d50  20 20 20 20 20 20 3b 65  6e 74 65 72 20 53 56 43  |      ;enter SVC|
00001d60  20 6d 6f 64 65 0d 05 fa  51 20 20 20 20 20 20 20  | mode...Q       |
00001d70  20 20 20 20 20 20 20 20  20 4d 4f 56 4e 56 20 72  |         MOVNV r|
00001d80  30 2c 72 30 20 20 20 20  20 20 20 20 20 20 20 20  |0,r0            |
00001d90  20 20 20 20 20 20 20 20  20 3b 4e 4f 2d 4f 50 20  |         ;NO-OP |
00001da0  74 6f 20 73 79 6e 63 20  72 65 67 69 73 74 65 72  |to sync register|
00001db0  20 62 61 6e 6b 73 0d 06  04 4e 20 20 20 20 20 20  | banks...N      |
00001dc0  20 20 20 20 20 20 20 20  20 20 53 54 4d 46 44 20  |          STMFD |
00001dd0  28 73 70 29 21 2c 7b 72  31 34 7d 20 20 20 20 20  |(sp)!,{r14}     |
00001de0  20 20 20 20 20 20 20 20  20 20 3b 6b 65 65 70 20  |          ;keep |
00001df0  72 31 34 2d 53 56 43 20  6f 6e 20 53 56 43 20 73  |r14-SVC on SVC s|
00001e00  74 61 63 6b 0d 06 0e 4c  20 20 20 20 20 20 20 20  |tack...L        |
00001e10  20 20 20 20 20 20 20 20  4d 4f 56 20 72 30 2c 23  |        MOV r0,#|
00001e20  31 36 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |16              |
00001e30  20 20 20 20 20 20 20 20  3b 6e 75 6d 62 65 72 20  |        ;number |
00001e40  66 6f 72 20 65 76 65 6e  74 20 76 65 63 74 6f 72  |for event vector|
00001e50  0d 06 18 4f 20 20 20 20  20 20 20 20 20 20 20 20  |...O            |
00001e60  20 20 20 20 41 44 52 20  72 31 2c 6b 65 79 73 20  |    ADR r1,keys |
00001e70  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001e80  20 20 20 20 3b 61 64 64  72 65 73 73 20 6f 66 20  |    ;address of |
00001e90  72 6f 75 74 69 6e 65 20  74 6f 20 63 61 6c 6c 0d  |routine to call.|
00001ea0  06 22 4e 20 20 20 20 20  20 20 20 20 20 20 20 20  |."N             |
00001eb0  20 20 20 53 57 49 20 22  58 4f 53 5f 43 6c 61 69  |   SWI "XOS_Clai|
00001ec0  6d 22 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |m"              |
00001ed0  20 20 20 3b 63 6f 6d 70  75 74 65 72 20 63 68 65  |   ;computer che|
00001ee0  63 6b 73 20 66 6f 72 20  65 76 65 6e 74 0d 06 2c  |cks for event..,|
00001ef0  50 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |P               |
00001f00  20 4d 4f 56 20 72 30 2c  23 74 69 6d 65 72 20 20  | MOV r0,#timer  |
00001f10  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001f20  20 3b 63 65 6e 74 69 2d  73 65 63 6f 6e 64 73 20  | ;centi-seconds |
00001f30  62 65 74 77 65 65 6e 20  63 68 65 63 6b 0d 06 36  |between check..6|
00001f40  4f 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |O               |
00001f50  20 41 44 52 20 72 31 2c  6d 6f 75 73 65 20 20 20  | ADR r1,mouse   |
00001f60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001f70  20 3b 61 64 64 72 65 73  73 20 6f 66 20 72 6f 75  | ;address of rou|
00001f80  74 69 6e 65 20 74 6f 20  63 61 6c 6c 0d 06 40 4e  |tine to call..@N|
00001f90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00001fa0  53 57 49 20 22 58 4f 53  5f 43 61 6c 6c 45 76 65  |SWI "XOS_CallEve|
00001fb0  72 79 22 20 20 20 20 20  20 20 20 20 20 20 20 20  |ry"             |
00001fc0  3b 63 6f 6d 70 75 74 65  72 20 63 68 65 63 6b 73  |;computer checks|
00001fd0  20 66 6f 72 20 65 76 65  6e 74 0d 06 4a 4e 20 20  | for event..JN  |
00001fe0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 4d 4f  |              MO|
00001ff0  56 20 72 30 2c 23 31 34  20 20 20 20 20 20 20 20  |V r0,#14        |
00002000  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 6e  |              ;n|
00002010  65 78 74 20 33 20 6c 69  6e 65 73 20 64 6f 20 2a  |ext 3 lines do *|
00002020  46 58 20 31 34 2c 31 31  0d 06 54 4b 20 20 20 20  |FX 14,11..TK    |
00002030  20 20 20 20 20 20 20 20  20 20 20 20 4d 4f 56 20  |            MOV |
00002040  72 31 2c 23 31 31 20 20  20 20 20 20 20 20 20 20  |r1,#11          |
00002050  20 20 20 20 20 20 20 20  20 20 20 20 3b 77 68 69  |            ;whi|
00002060  63 68 20 65 6e 61 62 6c  65 73 20 63 68 65 63 6b  |ch enables check|
00002070  69 6e 67 0d 06 5e 48 20  20 20 20 20 20 20 20 20  |ing..^H         |
00002080  20 20 20 20 20 20 20 53  57 49 20 22 58 4f 53 5f  |       SWI "XOS_|
00002090  42 79 74 65 22 20 20 20  20 20 20 20 20 20 20 20  |Byte"           |
000020a0  20 20 20 20 20 20 20 3b  66 6f 72 20 6b 65 79 20  |       ;for key |
000020b0  70 72 65 73 73 20 65 76  65 6e 74 0d 06 68 4f 20  |press event..hO |
000020c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 4c  |               L|
000020d0  44 4d 46 44 20 28 73 70  29 21 2c 7b 72 31 34 7d  |DMFD (sp)!,{r14}|
000020e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
000020f0  67 65 74 20 72 31 34 2d  53 56 43 20 66 72 6f 6d  |get r14-SVC from|
00002100  20 53 56 43 20 73 74 61  63 6b 0d 06 72 50 20 20  | SVC stack..rP  |
00002110  20 20 20 20 20 20 20 20  20 20 20 20 20 20 54 45  |              TE|
00002120  51 50 20 52 39 2c 23 30  20 20 20 20 20 20 20 20  |QP R9,#0        |
00002130  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 67  |              ;g|
00002140  65 74 20 6f 72 69 67 69  6e 61 6c 20 70 72 6f 63  |et original proc|
00002150  65 73 73 6f 72 20 6d 6f  64 65 0d 06 7c 51 20 20  |essor mode..|Q  |
00002160  20 20 20 20 20 20 20 20  20 20 20 20 20 20 4d 4f  |              MO|
00002170  56 4e 56 20 72 30 2c 72  30 20 20 20 20 20 20 20  |VNV r0,r0       |
00002180  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 4e  |              ;N|
00002190  4f 2d 4f 50 20 74 6f 20  73 79 6e 63 20 72 65 67  |O-OP to sync reg|
000021a0  69 73 74 65 72 20 62 61  6e 6b 73 0d 06 86 41 20  |ister banks...A |
000021b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 4c  |               L|
000021c0  44 4d 46 44 20 28 73 70  29 21 2c 7b 72 30 2d 72  |DMFD (sp)!,{r0-r|
000021d0  31 32 2c 70 63 7d 20 20  20 20 20 20 20 20 20 3b  |12,pc}         ;|
000021e0  71 75 69 74 20 72 6f 75  74 69 6e 65 0d 06 90 04  |quit routine....|
000021f0  0d 06 9a 26 3b 54 68 69  73 20 72 6f 75 74 69 6e  |...&;This routin|
00002200  65 20 74 75 72 6e 73 20  74 68 65 20 6d 6f 64 75  |e turns the modu|
00002210  6c 65 20 6f 66 66 0d 06  a4 04 0d 06 ae 4b 2e 72  |le off.......K.r|
00002220  65 6d 6f 76 65 20 20 20  20 20 20 20 20 20 53 54  |emove         ST|
00002230  4d 46 44 20 28 73 70 29  21 2c 7b 72 30 2d 72 31  |MFD (sp)!,{r0-r1|
00002240  32 2c 72 31 34 7d 20 20  20 20 20 20 20 20 3b 70  |2,r14}        ;p|
00002250  72 65 73 65 72 76 65 20  6c 69 6e 6b 20 6f 6e 20  |reserve link on |
00002260  73 74 61 63 6b 0d 06 b8  48 20 20 20 20 20 20 20  |stack...H       |
00002270  20 20 20 20 20 20 20 20  20 4c 44 52 20 72 30 2c  |         LDR r0,|
00002280  68 69 64 65 5f 6f 6e 6f  66 66 20 20 20 20 20 20  |hide_onoff      |
00002290  20 20 20 20 20 20 20 20  20 3b 67 65 74 20 6d 65  |         ;get me|
000022a0  6d 6f 72 79 20 6c 6f 63  61 74 69 6f 6e 0d 06 c2  |mory location...|
000022b0  4c 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |L               |
000022c0  20 43 4d 50 20 72 30 2c  23 30 20 20 20 20 20 20  | CMP r0,#0      |
000022d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000022e0  20 3b 69 73 20 6d 6f 64  75 6c 65 20 61 6c 72 65  | ;is module alre|
000022f0  61 64 79 20 6f 66 66 20  3f 0d 06 cc 4c 20 20 20  |ady off ?...L   |
00002300  20 20 20 20 20 20 20 20  20 20 20 20 20 4c 44 4d  |             LDM|
00002310  45 51 46 44 20 28 73 70  29 21 2c 7b 72 30 2d 72  |EQFD (sp)!,{r0-r|
00002320  31 32 2c 70 63 7d 20 20  20 20 20 20 20 3b 69 66  |12,pc}       ;if|
00002330  20 73 6f 20 74 68 65 6e  20 71 75 69 74 20 72 6f  | so then quit ro|
00002340  75 74 69 6e 65 0d 06 d6  47 20 20 20 20 20 20 20  |utine...G       |
00002350  20 20 20 20 20 20 20 20  20 4d 4f 56 20 72 30 2c  |         MOV r0,|
00002360  23 30 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |#0              |
00002370  20 20 20 20 20 20 20 20  20 3b 6f 6e 2f 6f 66 66  |         ;on/off|
00002380  20 66 6c 61 67 20 74 6f  20 6f 66 66 0d 06 e0 44  | flag to off...D|
00002390  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000023a0  53 54 52 20 72 30 2c 68  69 64 65 5f 6f 6e 6f 66  |STR r0,hide_onof|
000023b0  66 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |f               |
000023c0  3b 73 74 6f 72 65 20 69  6e 20 6d 65 6d 6f 72 79  |;store in memory|
000023d0  0d 06 ea 50 20 20 20 20  20 20 20 20 20 20 20 20  |...P            |
000023e0  20 20 20 20 4d 4f 56 20  52 39 2c 70 63 20 20 20  |    MOV R9,pc   |
000023f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002400  20 20 20 20 3b 6b 65 65  70 20 63 75 72 72 65 6e  |    ;keep curren|
00002410  74 20 70 72 6f 63 65 73  73 6f 72 20 6d 6f 64 65  |t processor mode|
00002420  0d 06 f4 4f 20 20 20 20  20 20 20 20 20 20 20 20  |...O            |
00002430  20 20 20 20 84 52 20 52  38 2c 52 39 2c 23 33 20  |    .R R8,R9,#3 |
00002440  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002450  20 20 20 3b 6d 6f 76 65  20 74 6f 20 72 38 2c 20  |   ;move to r8, |
00002460  73 65 6c 65 63 74 20 53  56 43 20 6d 6f 64 65 0d  |select SVC mode.|
00002470  06 fe 43 20 20 20 20 20  20 20 20 20 20 20 20 20  |..C             |
00002480  20 20 20 54 45 51 50 20  52 38 2c 23 30 20 20 20  |   TEQP R8,#0   |
00002490  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000024a0  20 20 20 3b 65 6e 74 65  72 20 53 56 43 20 6d 6f  |   ;enter SVC mo|
000024b0  64 65 0d 07 08 51 20 20  20 20 20 20 20 20 20 20  |de...Q          |
000024c0  20 20 20 20 20 20 4d 4f  56 4e 56 20 72 30 2c 72  |      MOVNV r0,r|
000024d0  30 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0               |
000024e0  20 20 20 20 20 20 3b 4e  4f 2d 4f 50 20 74 6f 20  |      ;NO-OP to |
000024f0  73 79 6e 63 20 72 65 67  69 73 74 65 72 20 62 61  |sync register ba|
00002500  6e 6b 73 0d 07 12 4e 20  20 20 20 20 20 20 20 20  |nks...N         |
00002510  20 20 20 20 20 20 20 53  54 4d 46 44 20 28 73 70  |       STMFD (sp|
00002520  29 21 2c 7b 72 31 34 7d  20 20 20 20 20 20 20 20  |)!,{r14}        |
00002530  20 20 20 20 20 20 20 3b  6b 65 65 70 20 72 31 34  |       ;keep r14|
00002540  2d 53 56 43 20 6f 6e 20  53 56 43 20 73 74 61 63  |-SVC on SVC stac|
00002550  6b 0d 07 1c 4e 20 20 20  20 20 20 20 20 20 20 20  |k...N           |
00002560  20 20 20 20 20 4d 4f 56  20 72 30 2c 23 31 33 20  |     MOV r0,#13 |
00002570  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002580  20 20 20 20 20 3b 6e 65  78 74 20 33 20 6c 69 6e  |     ;next 3 lin|
00002590  65 73 20 64 6f 20 2a 46  58 20 31 33 2c 31 31 0d  |es do *FX 13,11.|
000025a0  07 26 4c 20 20 20 20 20  20 20 20 20 20 20 20 20  |.&L             |
000025b0  20 20 20 4d 4f 56 20 72  31 2c 23 31 31 20 20 20  |   MOV r1,#11   |
000025c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000025d0  20 20 20 3b 77 68 69 63  68 20 64 69 73 61 62 6c  |   ;which disabl|
000025e0  65 73 20 63 68 65 63 6b  69 6e 67 0d 07 30 48 20  |es checking..0H |
000025f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 53  |               S|
00002600  57 49 20 22 58 4f 53 5f  42 79 74 65 22 20 20 20  |WI "XOS_Byte"   |
00002610  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00002620  66 6f 72 20 6b 65 79 20  70 72 65 73 73 20 65 76  |for key press ev|
00002630  65 6e 74 0d 07 3a 4c 20  20 20 20 20 20 20 20 20  |ent..:L         |
00002640  20 20 20 20 20 20 20 4d  4f 56 20 72 30 2c 23 31  |       MOV r0,#1|
00002650  36 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |6               |
00002660  20 20 20 20 20 20 20 3b  6e 75 6d 62 65 72 20 66  |       ;number f|
00002670  6f 72 20 65 76 65 6e 74  20 76 65 63 74 6f 72 0d  |or event vector.|
00002680  07 44 51 20 20 20 20 20  20 20 20 20 20 20 20 20  |.DQ             |
00002690  20 20 20 4d 4f 56 20 72  32 2c 72 31 32 20 20 20  |   MOV r2,r12   |
000026a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000026b0  20 20 20 3b 72 31 32 20  77 61 6e 74 65 64 20 6f  |   ;r12 wanted o|
000026c0  6e 20 76 65 63 74 6f 72  20 72 65 6c 65 61 73 65  |n vector release|
000026d0  0d 07 4e 51 20 20 20 20  20 20 20 20 20 20 20 20  |..NQ            |
000026e0  20 20 20 20 41 44 52 20  72 31 2c 6b 65 79 73 20  |    ADR r1,keys |
000026f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002700  20 20 20 20 3b 61 64 64  72 65 73 73 20 6f 66 20  |    ;address of |
00002710  72 6f 75 74 69 6e 65 20  74 6f 20 72 65 6d 6f 76  |routine to remov|
00002720  65 0d 07 58 4b 20 20 20  20 20 20 20 20 20 20 20  |e..XK           |
00002730  20 20 20 20 20 53 57 49  20 22 58 4f 53 5f 52 65  |     SWI "XOS_Re|
00002740  6c 65 61 73 65 22 20 20  20 20 20 20 20 20 20 20  |lease"          |
00002750  20 20 20 20 20 3b 63 61  6e 63 65 6c 20 63 68 65  |     ;cancel che|
00002760  63 6b 20 66 6f 72 20 65  76 65 6e 74 0d 07 62 51  |ck for event..bQ|
00002770  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002780  41 44 52 20 72 30 2c 6d  6f 75 73 65 20 20 20 20  |ADR r0,mouse    |
00002790  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000027a0  3b 61 64 64 72 65 73 73  20 6f 66 20 72 6f 75 74  |;address of rout|
000027b0  69 6e 65 20 74 6f 20 72  65 6d 6f 76 65 0d 07 6c  |ine to remove..l|
000027c0  1e 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
000027d0  20 4d 4f 56 20 72 31 2c  72 31 32 0d 07 76 4b 20  | MOV r1,r12..vK |
000027e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 53  |               S|
000027f0  57 49 20 22 58 4f 53 5f  52 65 6d 6f 76 65 54 69  |WI "XOS_RemoveTi|
00002800  63 6b 65 72 45 76 65 6e  74 22 20 20 20 20 20 3b  |ckerEvent"     ;|
00002810  63 61 6e 63 65 6c 20 63  68 65 63 6b 20 66 6f 72  |cancel check for|
00002820  20 65 76 65 6e 74 0d 07  80 4d 20 20 20 20 20 20  | event...M      |
00002830  20 20 20 20 20 20 20 20  20 20 4c 44 4d 46 44 20  |          LDMFD |
00002840  28 73 70 29 21 2c 7b 72  31 34 7d 20 20 20 20 20  |(sp)!,{r14}     |
00002850  20 20 20 20 20 20 20 20  20 20 3b 67 65 74 20 72  |          ;get r|
00002860  31 34 2d 53 56 43 20 6f  6e 20 53 56 43 20 73 74  |14-SVC on SVC st|
00002870  61 63 6b 0d 07 8a 50 20  20 20 20 20 20 20 20 20  |ack...P         |
00002880  20 20 20 20 20 20 20 54  45 51 50 20 52 39 2c 23  |       TEQP R9,#|
00002890  30 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0               |
000028a0  20 20 20 20 20 20 20 3b  67 65 74 20 6f 72 69 67  |       ;get orig|
000028b0  69 6e 61 6c 20 70 72 6f  63 65 73 73 6f 72 20 6d  |inal processor m|
000028c0  6f 64 65 0d 07 94 51 20  20 20 20 20 20 20 20 20  |ode...Q         |
000028d0  20 20 20 20 20 20 20 4d  4f 56 4e 56 20 72 30 2c  |       MOVNV r0,|
000028e0  72 30 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |r0              |
000028f0  20 20 20 20 20 20 20 3b  4e 4f 2d 4f 50 20 74 6f  |       ;NO-OP to|
00002900  20 73 79 6e 63 20 72 65  67 69 73 74 65 72 20 62  | sync register b|
00002910  61 6e 6b 73 0d 07 9e 49  20 20 20 20 20 20 20 20  |anks...I        |
00002920  20 20 20 20 20 20 20 20  4d 4f 56 20 72 30 2c 23  |        MOV r0,#|
00002930  31 30 36 20 20 20 20 20  20 20 20 20 20 20 20 20  |106             |
00002940  20 20 20 20 20 20 20 20  3b 6e 65 78 74 20 33 20  |        ;next 3 |
00002950  6c 69 6e 65 73 20 70 65  72 66 6f 72 6d 0d 07 a8  |lines perform...|
00002960  4e 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |N               |
00002970  20 4d 4f 56 20 72 31 2c  23 31 20 20 20 20 20 20  | MOV r1,#1      |
00002980  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002990  20 3b 2a 46 58 20 31 30  36 2c 31 20 74 75 72 6e  | ;*FX 106,1 turn|
000029a0  69 6e 67 20 70 6f 69 6e  74 65 72 0d 07 b2 37 20  |ing pointer...7 |
000029b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 53  |               S|
000029c0  57 49 20 22 58 4f 53 5f  42 79 74 65 22 20 20 20  |WI "XOS_Byte"   |
000029d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
000029e0  6f 6e 0d 07 bc 4e 20 20  20 20 20 20 20 20 20 20  |on...N          |
000029f0  20 20 20 20 20 20 4d 4f  56 20 72 31 2c 23 31 20  |      MOV r1,#1 |
00002a00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002a10  20 20 20 20 20 20 3b 74  65 6c 6c 20 6d 6f 64 75  |      ;tell modu|
00002a20  6c 65 20 70 6f 69 6e 74  65 72 20 69 73 20 6f 6e  |le pointer is on|
00002a30  0d 07 c6 4a 20 20 20 20  20 20 20 20 20 20 20 20  |...J            |
00002a40  20 20 20 20 53 54 52 20  72 31 2c 6d 6f 75 73 65  |    STR r1,mouse|
00002a50  5f 6f 6e 6f 66 66 20 20  20 20 20 20 20 20 20 20  |_onoff          |
00002a60  20 20 20 20 3b 73 74 6f  72 65 20 76 61 6c 75 65  |    ;store value|
00002a70  20 69 6e 20 6d 65 6d 6f  72 79 0d 07 d0 41 20 20  | in memory...A  |
00002a80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 4c 44  |              LD|
00002a90  4d 46 44 20 28 73 70 29  21 2c 7b 72 30 2d 72 31  |MFD (sp)!,{r0-r1|
00002aa0  32 2c 70 63 7d 20 20 20  20 20 20 20 20 20 3b 71  |2,pc}         ;q|
00002ab0  75 69 74 20 72 6f 75 74  69 6e 65 0d 07 da 04 0d  |uit routine.....|
00002ac0  07 e4 49 3b 54 68 69 73  20 72 6f 75 74 69 6e 65  |..I;This routine|
00002ad0  20 63 68 65 63 6b 73 20  66 6f 72 20 6b 65 79 20  | checks for key |
00002ae0  70 72 65 73 73 69 6e 67  20 65 76 65 6e 74 20 61  |pressing event a|
00002af0  6e 64 20 74 75 72 6e 73  20 74 68 65 20 70 6f 69  |nd turns the poi|
00002b00  6e 74 65 72 20 6f 66 66  0d 07 ee 04 0d 07 f8 4e  |nter off.......N|
00002b10  2e 6b 65 79 73 20 20 20  20 20 20 20 20 20 20 20  |.keys           |
00002b20  43 4d 50 20 72 30 2c 23  31 31 20 20 20 20 20 20  |CMP r0,#11      |
00002b30  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002b40  3b 63 68 65 63 6b 20 66  6f 72 20 6b 65 79 20 70  |;check for key p|
00002b50  72 65 73 73 20 65 76 65  6e 74 0d 08 02 45 20 20  |ress event...E  |
00002b60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 4d 4f  |              MO|
00002b70  56 4e 45 53 20 70 63 2c  72 31 34 20 20 20 20 20  |VNES pc,r14     |
00002b80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 69  |              ;i|
00002b90  66 20 6e 6f 74 20 74 68  65 6e 20 71 75 69 74 0d  |f not then quit.|
00002ba0  08 0c 47 20 20 20 20 20  20 20 20 20 20 20 20 20  |..G             |
00002bb0  20 20 20 43 4d 50 20 72  32 2c 23 31 31 32 20 20  |   CMP r2,#112  |
00002bc0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002bd0  20 20 20 3b 69 73 20 69  74 20 6d 6f 75 73 65 20  |   ;is it mouse |
00002be0  73 65 6c 65 63 74 0d 08  16 46 20 20 20 20 20 20  |select...F      |
00002bf0  20 20 20 20 20 20 20 20  20 20 ec 51 53 20 70 63  |          .QS pc|
00002c00  2c 72 31 34 20 20 20 20  20 20 20 20 20 20 20 20  |,r14            |
00002c10  20 20 20 20 20 20 20 3b  69 66 20 73 6f 20 64 6f  |       ;if so do|
00002c20  6e 27 74 20 74 75 72 6e  20 6f 66 66 0d 08 20 45  |n't turn off.. E|
00002c30  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002c40  43 4d 50 20 72 32 2c 23  31 31 33 20 20 20 20 20  |CMP r2,#113     |
00002c50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002c60  3b 69 73 20 69 74 20 6d  6f 75 73 65 20 6d 65 6e  |;is it mouse men|
00002c70  75 0d 08 2a 46 20 20 20  20 20 20 20 20 20 20 20  |u..*F           |
00002c80  20 20 20 20 20 ec 51 53  20 70 63 2c 72 31 34 20  |     .QS pc,r14 |
00002c90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002ca0  20 20 3b 69 66 20 73 6f  20 64 6f 6e 27 74 20 74  |  ;if so don't t|
00002cb0  75 72 6e 20 6f 66 66 0d  08 34 47 20 20 20 20 20  |urn off..4G     |
00002cc0  20 20 20 20 20 20 20 20  20 20 20 43 4d 50 20 72  |           CMP r|
00002cd0  32 2c 23 31 31 34 20 20  20 20 20 20 20 20 20 20  |2,#114          |
00002ce0  20 20 20 20 20 20 20 20  20 20 20 3b 69 73 20 69  |           ;is i|
00002cf0  74 20 6d 6f 75 73 65 20  61 64 6a 75 73 74 0d 08  |t mouse adjust..|
00002d00  3e 46 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |>F              |
00002d10  20 20 ec 51 53 20 70 63  2c 72 31 34 20 20 20 20  |  .QS pc,r14    |
00002d20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00002d30  69 66 20 73 6f 20 64 6f  6e 27 74 20 74 75 72 6e  |if so don't turn|
00002d40  20 6f 66 66 0d 08 48 4d  20 20 20 20 20 20 20 20  | off..HM        |
00002d50  20 20 20 20 20 20 20 20  53 54 4d 46 44 20 28 73  |        STMFD (s|
00002d60  70 29 21 2c 7b 72 30 2d  72 31 32 2c 72 31 34 7d  |p)!,{r0-r12,r14}|
00002d70  20 20 20 20 20 20 20 20  3b 73 74 6f 72 65 20 72  |        ;store r|
00002d80  65 67 69 73 74 65 72 73  20 61 6e 64 20 6c 69 6e  |egisters and lin|
00002d90  6b 0d 08 52 50 20 20 20  20 20 20 20 20 20 20 20  |k..RP           |
00002da0  20 20 20 20 20 4d 4f 56  20 52 39 2c 70 63 20 20  |     MOV R9,pc  |
00002db0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002dc0  20 20 20 20 20 3b 6b 65  65 70 20 63 75 72 72 65  |     ;keep curre|
00002dd0  6e 74 20 70 72 6f 63 65  73 73 6f 72 20 6d 6f 64  |nt processor mod|
00002de0  65 0d 08 5c 4f 20 20 20  20 20 20 20 20 20 20 20  |e..\O           |
00002df0  20 20 20 20 20 84 52 20  52 38 2c 52 39 2c 23 33  |     .R R8,R9,#3|
00002e00  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002e10  20 20 20 20 3b 6d 6f 76  65 20 74 6f 20 72 38 2c  |    ;move to r8,|
00002e20  20 73 65 6c 65 63 74 20  53 56 43 20 6d 6f 64 65  | select SVC mode|
00002e30  0d 08 66 43 20 20 20 20  20 20 20 20 20 20 20 20  |..fC            |
00002e40  20 20 20 20 54 45 51 50  20 52 38 2c 23 30 20 20  |    TEQP R8,#0  |
00002e50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00002e60  20 20 20 20 3b 65 6e 74  65 72 20 53 56 43 20 6d  |    ;enter SVC m|
00002e70  6f 64 65 0d 08 70 51 20  20 20 20 20 20 20 20 20  |ode..pQ         |
00002e80  20 20 20 20 20 20 20 4d  4f 56 4e 56 20 72 30 2c  |       MOVNV r0,|
00002e90  72 30 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |r0              |
00002ea0  20 20 20 20 20 20 20 3b  4e 4f 2d 4f 50 20 74 6f  |       ;NO-OP to|
00002eb0  20 73 79 6e 63 20 72 65  67 69 73 74 65 72 20 62  | sync register b|
00002ec0  61 6e 6b 73 0d 08 7a 4e  20 20 20 20 20 20 20 20  |anks..zN        |
00002ed0  20 20 20 20 20 20 20 20  53 54 4d 46 44 20 28 73  |        STMFD (s|
00002ee0  70 29 21 2c 7b 72 31 34  7d 20 20 20 20 20 20 20  |p)!,{r14}       |
00002ef0  20 20 20 20 20 20 20 20  3b 6b 65 65 70 20 72 31  |        ;keep r1|
00002f00  34 2d 53 56 43 20 6f 6e  20 53 56 43 20 73 74 61  |4-SVC on SVC sta|
00002f10  63 6b 0d 08 84 48 20 20  20 20 20 20 20 20 20 20  |ck...H          |
00002f20  20 20 20 20 20 20 4c 44  52 20 72 31 2c 6d 6f 75  |      LDR r1,mou|
00002f30  73 65 5f 6f 6e 6f 66 66  20 20 20 20 20 20 20 20  |se_onoff        |
00002f40  20 20 20 20 20 20 3b 67  65 74 20 76 61 6c 75 65  |      ;get value|
00002f50  20 69 6e 20 6d 65 6d 6f  72 79 0d 08 8e 51 20 20  | in memory...Q  |
00002f60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 43 4d  |              CM|
00002f70  50 20 72 31 2c 23 30 20  20 20 20 20 20 20 20 20  |P r1,#0         |
00002f80  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 69  |              ;i|
00002f90  73 20 74 68 65 20 70 6f  69 6e 74 65 72 20 61 6c  |s the pointer al|
00002fa0  72 65 61 64 79 20 6f 66  66 20 3f 0d 08 98 47 20  |ready off ?...G |
00002fb0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 42  |               B|
00002fc0  45 51 20 6a 75 6d 70 5f  6b 65 79 73 20 20 20 20  |EQ jump_keys    |
00002fd0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00002fe0  69 66 20 73 6f 20 71 75  69 74 20 72 6f 75 74 69  |if so quit routi|
00002ff0  6e 65 0d 08 a2 4f 20 20  20 20 20 20 20 20 20 20  |ne...O          |
00003000  20 20 20 20 20 20 4d 4f  56 20 72 31 2c 23 30 20  |      MOV r1,#0 |
00003010  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003020  20 20 20 20 20 20 3b 74  65 6c 6c 20 6d 6f 64 75  |      ;tell modu|
00003030  6c 65 20 70 6f 69 6e 74  65 72 20 69 73 20 6f 66  |le pointer is of|
00003040  66 0d 08 ac 4a 20 20 20  20 20 20 20 20 20 20 20  |f...J           |
00003050  20 20 20 20 20 53 54 52  20 72 31 2c 6d 6f 75 73  |     STR r1,mous|
00003060  65 5f 6f 6e 6f 66 66 20  20 20 20 20 20 20 20 20  |e_onoff         |
00003070  20 20 20 20 20 3b 73 74  6f 72 65 20 76 61 6c 75  |     ;store valu|
00003080  65 20 69 6e 20 6d 65 6d  6f 72 79 0d 08 b6 4e 20  |e in memory...N |
00003090  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 53  |               S|
000030a0  57 49 20 22 58 4f 53 5f  4d 6f 75 73 65 22 20 20  |WI "XOS_Mouse"  |
000030b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
000030c0  67 65 74 20 63 75 72 72  65 6e 74 20 6d 6f 75 73  |get current mous|
000030d0  65 20 63 6f 2d 6f 72 64  73 0d 08 c0 50 20 20 20  |e co-ords...P   |
000030e0  20 20 20 20 20 20 20 20  20 20 20 20 20 41 44 44  |             ADD|
000030f0  20 72 31 2c 72 30 2c 72  31 20 20 20 20 20 20 20  | r1,r0,r1       |
00003100  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 61 64  |             ;ad|
00003110  64 20 78 20 61 6e 64 20  79 20 63 6f 6f 72 64 73  |d x and y coords|
00003120  20 74 6f 67 65 74 68 65  72 0d 08 ca 4c 20 20 20  | together...L   |
00003130  20 20 20 20 20 20 20 20  20 20 20 20 20 53 54 52  |             STR|
00003140  20 72 31 2c 6d 6f 75 73  65 5f 78 79 20 20 20 20  | r1,mouse_xy    |
00003150  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 73 74  |             ;st|
00003160  6f 72 65 20 63 6f 2d 6f  72 64 73 20 69 6e 20 6d  |ore co-ords in m|
00003170  65 6d 6f 72 79 0d 08 d4  49 20 20 20 20 20 20 20  |emory...I       |
00003180  20 20 20 20 20 20 20 20  20 4d 4f 56 20 72 30 2c  |         MOV r0,|
00003190  23 31 30 36 20 20 20 20  20 20 20 20 20 20 20 20  |#106            |
000031a0  20 20 20 20 20 20 20 20  20 3b 6e 65 78 74 20 33  |         ;next 3|
000031b0  20 6c 69 6e 65 73 20 70  65 72 66 6f 72 6d 0d 08  | lines perform..|
000031c0  de 4e 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.N              |
000031d0  20 20 4d 4f 56 20 72 31  2c 23 30 20 20 20 20 20  |  MOV r1,#0     |
000031e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000031f0  20 20 3b 2a 46 58 20 31  30 36 2c 30 20 74 75 72  |  ;*FX 106,0 tur|
00003200  6e 69 6e 67 20 70 6f 69  6e 74 65 72 0d 08 e8 38  |ning pointer...8|
00003210  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003220  53 57 49 20 22 58 4f 53  5f 42 79 74 65 22 20 20  |SWI "XOS_Byte"  |
00003230  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003240  3b 6f 66 66 0d 08 f2 4f  2e 6a 75 6d 70 5f 6b 65  |;off...O.jump_ke|
00003250  79 73 20 20 20 20 20 20  4c 44 4d 46 44 20 28 73  |ys      LDMFD (s|
00003260  70 29 21 2c 7b 72 31 34  7d 20 20 20 20 20 20 20  |p)!,{r14}       |
00003270  20 20 20 20 20 20 20 20  3b 67 65 74 20 72 31 34  |        ;get r14|
00003280  2d 53 56 43 20 66 72 6f  6d 20 53 56 43 20 73 74  |-SVC from SVC st|
00003290  61 63 6b 0d 08 fc 50 20  20 20 20 20 20 20 20 20  |ack...P         |
000032a0  20 20 20 20 20 20 20 54  45 51 50 20 52 39 2c 23  |       TEQP R9,#|
000032b0  30 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |0               |
000032c0  20 20 20 20 20 20 20 3b  67 65 74 20 6f 72 69 67  |       ;get orig|
000032d0  69 6e 61 6c 20 70 72 6f  63 65 73 73 6f 72 20 6d  |inal processor m|
000032e0  6f 64 65 0d 09 06 51 20  20 20 20 20 20 20 20 20  |ode...Q         |
000032f0  20 20 20 20 20 20 20 4d  4f 56 4e 56 20 72 30 2c  |       MOVNV r0,|
00003300  72 30 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |r0              |
00003310  20 20 20 20 20 20 20 3b  4e 4f 2d 4f 50 20 74 6f  |       ;NO-OP to|
00003320  20 73 79 6e 63 20 72 65  67 69 73 74 65 72 20 62  | sync register b|
00003330  61 6e 6b 73 0d 09 10 4b  20 20 20 20 20 20 20 20  |anks...K        |
00003340  20 20 20 20 20 20 20 20  4c 44 4d 46 44 20 28 73  |        LDMFD (s|
00003350  70 29 21 2c 7b 72 30 2d  72 31 32 2c 72 31 34 7d  |p)!,{r0-r12,r14}|
00003360  20 20 20 20 20 20 20 20  3b 67 65 74 20 72 65 67  |        ;get reg|
00003370  69 73 74 65 72 73 20 61  6e 64 20 6c 69 6e 6b 0d  |isters and link.|
00003380  09 1a 50 20 20 20 20 20  20 20 20 20 20 20 20 20  |..P             |
00003390  20 20 20 4d 4f 56 53 20  70 63 2c 72 31 34 20 20  |   MOVS pc,r14  |
000033a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000033b0  20 20 20 3b 71 75 69 74  20 72 6f 75 74 69 6e 65  |   ;quit routine|
000033c0  20 6b 65 65 70 69 6e 67  20 73 74 61 74 75 73 0d  | keeping status.|
000033d0  09 24 04 0d 09 2e 47 3b  54 68 69 73 20 72 6f 75  |.$....G;This rou|
000033e0  74 69 6e 65 20 63 68 65  63 6b 73 20 66 6f 72 20  |tine checks for |
000033f0  6d 6f 75 73 65 20 6d 6f  76 65 6d 65 6e 74 20 65  |mouse movement e|
00003400  76 65 72 79 20 27 74 69  6d 65 72 27 20 63 65 6e  |very 'timer' cen|
00003410  74 69 2d 73 65 63 6f 6e  64 73 0d 09 38 04 0d 09  |ti-seconds..8...|
00003420  42 4d 2e 6d 6f 75 73 65  20 20 20 20 20 20 20 20  |BM.mouse        |
00003430  20 20 53 54 4d 46 44 20  28 73 70 29 21 2c 7b 72  |  STMFD (sp)!,{r|
00003440  30 2d 72 31 32 2c 72 31  34 7d 20 20 20 20 20 20  |0-r12,r14}      |
00003450  20 20 3b 73 74 6f 72 65  20 72 65 67 69 73 74 65  |  ;store registe|
00003460  72 73 20 61 6e 64 20 6c  69 6e 6b 0d 09 4c 50 20  |rs and link..LP |
00003470  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 4d  |               M|
00003480  4f 56 20 52 39 2c 70 63  20 20 20 20 20 20 20 20  |OV R9,pc        |
00003490  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
000034a0  6b 65 65 70 20 63 75 72  72 65 6e 74 20 70 72 6f  |keep current pro|
000034b0  63 65 73 73 6f 72 20 6d  6f 64 65 0d 09 56 4f 20  |cessor mode..VO |
000034c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 84  |               .|
000034d0  52 20 52 38 2c 52 39 2c  23 33 20 20 20 20 20 20  |R R8,R9,#3      |
000034e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 6d  |              ;m|
000034f0  6f 76 65 20 74 6f 20 72  38 2c 20 73 65 6c 65 63  |ove to r8, selec|
00003500  74 20 53 56 43 20 6d 6f  64 65 0d 09 60 43 20 20  |t SVC mode..`C  |
00003510  20 20 20 20 20 20 20 20  20 20 20 20 20 20 54 45  |              TE|
00003520  51 50 20 52 38 2c 23 30  20 20 20 20 20 20 20 20  |QP R8,#0        |
00003530  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 65  |              ;e|
00003540  6e 74 65 72 20 53 56 43  20 6d 6f 64 65 0d 09 6a  |nter SVC mode..j|
00003550  51 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |Q               |
00003560  20 4d 4f 56 4e 56 20 72  30 2c 72 30 20 20 20 20  | MOVNV r0,r0    |
00003570  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003580  20 3b 4e 4f 2d 4f 50 20  74 6f 20 73 79 6e 63 20  | ;NO-OP to sync |
00003590  72 65 67 69 73 74 65 72  20 62 61 6e 6b 73 0d 09  |register banks..|
000035a0  74 4e 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |tN              |
000035b0  20 20 53 54 4d 46 44 20  28 73 70 29 21 2c 7b 72  |  STMFD (sp)!,{r|
000035c0  31 34 7d 20 20 20 20 20  20 20 20 20 20 20 20 20  |14}             |
000035d0  20 20 3b 6b 65 65 70 20  72 31 34 2d 53 56 43 20  |  ;keep r14-SVC |
000035e0  6f 6e 20 53 56 43 20 73  74 61 63 6b 0d 09 7e 48  |on SVC stack..~H|
000035f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003600  4c 44 52 20 72 31 2c 6d  6f 75 73 65 5f 6f 6e 6f  |LDR r1,mouse_ono|
00003610  66 66 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |ff              |
00003620  3b 67 65 74 20 76 61 6c  75 65 20 69 6e 20 6d 65  |;get value in me|
00003630  6d 6f 72 79 0d 09 88 50  20 20 20 20 20 20 20 20  |mory...P        |
00003640  20 20 20 20 20 20 20 20  43 4d 50 20 72 31 2c 23  |        CMP r1,#|
00003650  31 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |1               |
00003660  20 20 20 20 20 20 20 20  3b 69 73 20 74 68 65 20  |        ;is the |
00003670  70 6f 69 6e 74 65 72 20  61 6c 72 65 61 64 79 20  |pointer already |
00003680  6f 6e 20 3f 0d 09 92 47  20 20 20 20 20 20 20 20  |on ?...G        |
00003690  20 20 20 20 20 20 20 20  42 45 51 20 6a 75 6d 70  |        BEQ jump|
000036a0  5f 6d 6f 75 73 65 20 20  20 20 20 20 20 20 20 20  |_mouse          |
000036b0  20 20 20 20 20 20 20 20  3b 69 66 20 73 6f 20 71  |        ;if so q|
000036c0  75 69 74 20 72 6f 75 74  69 6e 65 0d 09 9c 4e 20  |uit routine...N |
000036d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 53  |               S|
000036e0  57 49 20 22 58 4f 53 5f  4d 6f 75 73 65 22 20 20  |WI "XOS_Mouse"  |
000036f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00003700  67 65 74 20 63 75 72 72  65 6e 74 20 6d 6f 75 73  |get current mous|
00003710  65 20 63 6f 2d 6f 72 64  73 0d 09 a6 50 20 20 20  |e co-ords...P   |
00003720  20 20 20 20 20 20 20 20  20 20 20 20 20 41 44 44  |             ADD|
00003730  20 72 31 2c 72 30 2c 72  31 20 20 20 20 20 20 20  | r1,r0,r1       |
00003740  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 61 64  |             ;ad|
00003750  64 20 78 20 61 6e 64 20  79 20 63 6f 6f 72 64 73  |d x and y coords|
00003760  20 74 6f 67 65 74 68 65  72 0d 09 b0 48 20 20 20  | together...H   |
00003770  20 20 20 20 20 20 20 20  20 20 20 20 20 4c 44 52  |             LDR|
00003780  20 72 30 2c 6d 6f 75 73  65 5f 78 79 20 20 20 20  | r0,mouse_xy    |
00003790  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 67 65  |             ;ge|
000037a0  74 20 76 61 6c 75 65 20  69 6e 20 6d 65 6d 6f 72  |t value in memor|
000037b0  79 0d 09 ba 50 20 20 20  20 20 20 20 20 20 20 20  |y...P           |
000037c0  20 20 20 20 20 43 4d 50  53 20 72 32 2c 23 30 20  |     CMPS r2,#0 |
000037d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000037e0  20 20 20 20 20 3b 68 61  76 65 20 62 75 74 74 6f  |     ;have butto|
000037f0  6e 73 20 62 65 65 6e 20  70 72 65 73 73 65 64 20  |ns been pressed |
00003800  3f 0d 09 c4 4a 20 20 20  20 20 20 20 20 20 20 20  |?...J           |
00003810  20 20 20 20 20 43 4d 50  45 51 53 20 72 30 2c 72  |     CMPEQS r0,r|
00003820  31 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |1               |
00003830  20 20 20 20 20 3b 68 61  73 20 74 68 65 20 6d 6f  |     ;has the mo|
00003840  75 73 65 20 6d 6f 76 65  64 20 3f 0d 09 ce 4d 20  |use moved ?...M |
00003850  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 42  |               B|
00003860  45 51 20 6a 75 6d 70 5f  6d 6f 75 73 65 20 20 20  |EQ jump_mouse   |
00003870  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00003880  69 66 20 6e 6f 74 20 74  68 65 6e 20 71 75 69 74  |if not then quit|
00003890  20 72 6f 75 74 69 6e 65  0d 09 d8 49 20 20 20 20  | routine...I    |
000038a0  20 20 20 20 20 20 20 20  20 20 20 20 4d 4f 56 20  |            MOV |
000038b0  72 30 2c 23 31 30 36 20  20 20 20 20 20 20 20 20  |r0,#106         |
000038c0  20 20 20 20 20 20 20 20  20 20 20 20 3b 6e 65 78  |            ;nex|
000038d0  74 20 33 20 6c 69 6e 65  73 20 70 65 72 66 6f 72  |t 3 lines perfor|
000038e0  6d 0d 09 e2 4e 20 20 20  20 20 20 20 20 20 20 20  |m...N           |
000038f0  20 20 20 20 20 4d 4f 56  20 72 31 2c 23 31 20 20  |     MOV r1,#1  |
00003900  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003910  20 20 20 20 20 3b 2a 46  58 20 31 30 36 2c 31 20  |     ;*FX 106,1 |
00003920  74 75 72 6e 69 6e 67 20  70 6f 69 6e 74 65 72 0d  |turning pointer.|
00003930  09 ec 37 20 20 20 20 20  20 20 20 20 20 20 20 20  |..7             |
00003940  20 20 20 53 57 49 20 22  58 4f 53 5f 42 79 74 65  |   SWI "XOS_Byte|
00003950  22 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |"               |
00003960  20 20 20 3b 6f 6e 0d 09  f6 4e 20 20 20 20 20 20  |   ;on...N      |
00003970  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 72 31  |          MOV r1|
00003980  2c 23 31 20 20 20 20 20  20 20 20 20 20 20 20 20  |,#1             |
00003990  20 20 20 20 20 20 20 20  20 20 3b 74 65 6c 6c 20  |          ;tell |
000039a0  6d 6f 64 75 6c 65 20 70  6f 69 6e 74 65 72 20 69  |module pointer i|
000039b0  73 20 6f 6e 0d 0a 00 4a  20 20 20 20 20 20 20 20  |s on...J        |
000039c0  20 20 20 20 20 20 20 20  53 54 52 20 72 31 2c 6d  |        STR r1,m|
000039d0  6f 75 73 65 5f 6f 6e 6f  66 66 20 20 20 20 20 20  |ouse_onoff      |
000039e0  20 20 20 20 20 20 20 20  3b 73 74 6f 72 65 20 76  |        ;store v|
000039f0  61 6c 75 65 20 69 6e 20  6d 65 6d 6f 72 79 0d 0a  |alue in memory..|
00003a00  0a 4f 2e 6a 75 6d 70 5f  6d 6f 75 73 65 20 20 20  |.O.jump_mouse   |
00003a10  20 20 4c 44 4d 46 44 20  28 73 70 29 21 2c 7b 72  |  LDMFD (sp)!,{r|
00003a20  31 34 7d 20 20 20 20 20  20 20 20 20 20 20 20 20  |14}             |
00003a30  20 20 3b 67 65 74 20 72  31 34 2d 53 56 43 20 66  |  ;get r14-SVC f|
00003a40  72 6f 6d 20 53 56 43 20  73 74 61 63 6b 0d 0a 14  |rom SVC stack...|
00003a50  50 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |P               |
00003a60  20 54 45 51 50 20 52 39  2c 23 30 20 20 20 20 20  | TEQP R9,#0     |
00003a70  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003a80  20 3b 67 65 74 20 6f 72  69 67 69 6e 61 6c 20 70  | ;get original p|
00003a90  72 6f 63 65 73 73 6f 72  20 6d 6f 64 65 0d 0a 1e  |rocessor mode...|
00003aa0  51 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |Q               |
00003ab0  20 4d 4f 56 4e 56 20 72  30 2c 72 30 20 20 20 20  | MOVNV r0,r0    |
00003ac0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00003ad0  20 3b 4e 4f 2d 4f 50 20  74 6f 20 73 79 6e 63 20  | ;NO-OP to sync |
00003ae0  72 65 67 69 73 74 65 72  20 62 61 6e 6b 73 0d 0a  |register banks..|
00003af0  28 4b 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |(K              |
00003b00  20 20 4c 44 4d 46 44 20  28 73 70 29 21 2c 7b 72  |  LDMFD (sp)!,{r|
00003b10  30 2d 72 31 32 2c 72 31  34 7d 20 20 20 20 20 20  |0-r12,r14}      |
00003b20  20 20 3b 67 65 74 20 72  65 67 69 73 74 65 72 73  |  ;get registers|
00003b30  20 61 6e 64 20 6c 69 6e  6b 0d 0a 32 50 20 20 20  | and link..2P   |
00003b40  20 20 20 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |             MOV|
00003b50  53 20 70 63 2c 72 31 34  20 20 20 20 20 20 20 20  |S pc,r14        |
00003b60  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 71 75  |             ;qu|
00003b70  69 74 20 72 6f 75 74 69  6e 65 20 6b 65 65 70 69  |it routine keepi|
00003b80  6e 67 20 73 74 61 74 75  73 0d 0a 3c 04 0d 0a 46  |ng status..<...F|
00003b90  05 5d 0d 0a 50 0b ed 20  70 61 73 73 25 0d 0a 5a  |.]..P.. pass%..Z|
00003ba0  04 0d 0a 64 41 f4 20 53  61 76 65 20 74 68 65 20  |...dA. Save the |
00003bb0  6d 6f 64 75 6c 65 20 61  73 20 50 74 72 48 69 64  |module as PtrHid|
00003bc0  65 20 61 6e 64 20 73 65  74 20 69 74 27 73 20 66  |e and set it's f|
00003bd0  69 6c 65 20 74 79 70 65  20 74 6f 20 6d 6f 64 75  |ile type to modu|
00003be0  6c 65 0d 0a 6e 04 0d 0a  78 26 ff 20 22 53 41 56  |le..n...x&. "SAV|
00003bf0  45 20 50 74 72 48 69 64  65 20 22 2b c3 7e 63 6f  |E PtrHide "+.~co|
00003c00  64 65 25 2b 22 2b 22 2b  c3 7e 50 25 0d 0a 82 1b  |de%+"+"+.~P%....|
00003c10  ff 20 22 53 45 54 54 59  50 45 20 50 74 72 48 69  |. "SETTYPE PtrHi|
00003c20  64 65 20 46 46 41 22 0d  ff                       |de FFA"..|
00003c29