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