Home » Archimedes archive » Archimedes World » AW Readers Services Special FebMar 92.adf » !ArcWorld/Goodies/TaskKill/TaskKiller
!ArcWorld/Goodies/TaskKill/TaskKiller
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 » Archimedes World » AW Readers Services Special FebMar 92.adf |
Filename: | !ArcWorld/Goodies/TaskKill/TaskKiller |
Read OK: | ✔ |
File size: | 198A bytes |
Load address: | FFFFFB42 |
Exec address: | 86D78294 |
File contents
10REM > TaskKiller 70REM === Manifest definitions === 90R0=0:r0=0 100R1=1:r1=1 110R2=2:r2=2 120R3=3:r3=3 130R4=4:r4=4 140R5=5:r5=5 150R6=6:r6=6 160R7=7:r7=7 170R8=8:r8=8 180R9=9 190R10=10 200R11=11 210R12=12:wp=12 220R13=13:sp=13 230R14=14:lr=14 240R15=15:PC=R15:pc=15:psr=15 381ModHandReason_Claim = 6 382Service_Reset = &27 383EventV = &10 384Event_Keyboard = 11 402SVC_mode=1 410cr%=13 440keytodump = &5E :REM left-ALT 470ctrlkey = &3B :REM left-CTRL 550VIDC =&03400000 570REM Some Workspace offsets 590LastCtrlEvent = 0 600LastDumpEvent = 4 610interlock = 8 630Test_WorkspaceSize= &100 660REM === 680DIM code% 100*1024 700PROCDOIT 720END 740DEFPROCDOIT 760Module_Title$="TaskKiller" 770Module_Help$ =Module_Title$+CHR$9+"0.10 ("+MID$(TIME$,5,LEN("04 Jul 1989"))+")" 780saveas$="$.KillModule" 830REM === 850PRINT"Assembling "+saveas$ 870 REM PROCworkspace 890pass%=0 900FORopt%=0TO2STEP2:REM :opt%=opt% OR 1 910P%=code% 920pass%+=1 930PRINT"Pass ";pass% 970PROClibrary 1010NEXT 1030OSCLI("SAVE "+saveas$+" "+STR$~code%+" "+STR$~P%) 1040OSCLI("SETTYPE "+saveas$+" FFA") 1060ENDPROC 1080DEFPROClibrary 1090[OPTopt% 1110.Module_BaseAddr 1140 EQUD 0 1150 EQUD Test_Init -Module_BaseAddr 1160 EQUD Test_Die -Module_BaseAddr 1170 EQUD Test_Service -Module_BaseAddr 1180 EQUD Test_Title -Module_BaseAddr 1190 EQUD Test_HelpStr -Module_BaseAddr 1200 EQUD 0 1220.Test_Title 1240 EQUS Module_Title$:EQUB 0 1260.Test_HelpStr 1280 EQUS Module_Help$:EQUB 0 1320 ALIGN 1360; r0-r6 may be corrupted 1380.Test_Init 1390 STMFD R13!,{R14} 1410 LDR r2, [r12] ; Coming from hard reset ? 1420 TEQ r2, #0 1430 BNE ll001 1450 MOV r0, #ModHandReason_Claim 1460 MOV r3, #Test_WorkspaceSize 1470 SWI "XOS_Module" 1480 ; 'No room in RMA' is acceptable message 1490 LDMVSFD R13!,{PC} 1500 STR r2, [r12] 1580.ll001 1590 MOV wp, r2 ; Dereference on all resets ! 1610 BL Test_Service_Reset 1620 LDMFD R13!,{PC} 1650.Test_Service 1670 TEQ r1, #Service_Reset 1680 MOVNE pc, lr 1700 LDR wp, [r12] ; Dereference on service 1720.Test_Service_Reset 1730 STMFD R13!,{r0-r2,R14} 1750 MOV r14, #0 1760 STR r14, [R12,#LastCtrlEvent] 1770 STR r14, [R12,#LastDumpEvent] 1790 MOV r0, #EventV 1800 ADR r1, EventCode 1810 BL ClaimVector 1830 MOV r0, #14 ; Enable event 1840 MOV r1, #Event_Keyboard 1850 SWI "XOS_Byte" 1870 MOV r0, #0 1880 STRB r0, [R12,#interlock ] 1890 LDMFD R13!,{r0-r2,PC} 1910; Let Module handler take care of removing our workspace on fatal death 1920; Or shunting it around on Tidy - none of it is absolute 1940.Test_Die 1950 STMFD R13!,{r0-r2,R14} 1970 MOV r0, #13 ; Disable event 1980 MOV r1, #Event_Keyboard 1990 SWI "XOS_Byte" 2010 LDR wp, [r12] ; Dereference on death 2020 MOV r0, #EventV 2030 ADR r1, EventCode 2040 BL DelinkVector 2050 LDMFD R13!,{r0-r2,PC} 2080.ClaimVector 2090 STMFD R13!,{r2,R14} 2110 BL DelinkVector 2120 MOV r2, wp ; Use wp itself - saves dereferencing 2130 SWI "XOS_Claim" ; on actual code entries 2140 LDMFD R13!,{r2,PC}^ 2160.DelinkVector 2170 STMFD R13!,{r0-r2,R14} 2180.ll002 2190 LDMIA R13,{R0,R1} 2200 MOV r2, wp 2210 SWI "XOS_Release" 2220 BVC ll002 2230 CMP PC,#0 2240 LDMFD R13!,{r0-r2,PC} 2260; Entered in some mode or other, probably IRQ 2280.EventCode 2300 CMP r0, #Event_Keyboard 2310 MOVNE pc, lr ; Pass it on if wrong event 2330 ; In r1 = key down = 1, key up = 0 2340 ; r2 = key number 2370 STMFD R13!,{r0-r1,r4-r5,R14} 2410 MOV r14, #ctrlkey 2420 CMP r2, r14 2430 STREQ r1,[R12,#LastCtrlEvent] ; 0 -> key is now up 2440 BEQ ll003 2480 MOV r14, #keytodump 2490 CMP r2, r14 2500 STREQ r1, [R12,#LastDumpEvent] ; 0 -> key is now up 2510; Pass it on if not one of our keys 2520 LDMNEFD R13!,{r0-r1,r4-r5,PC} 2540; Abort on first keystroke if ctrl is down too 2560.ll003 2570 LDR R14,[R12,#LastCtrlEvent] ; Is CTRL key down ? 2580 TEQ r14, #0 2590 LDMEQFD R13!,{r0-r1,r4-r5,PC} ; Ignore 2600 LDR r14, [R12,#LastDumpEvent ] ; Is ALT key down as well ? 2610 TEQ r14, #0 2620 LDMEQFD R13!,{r0-r1,r4-r5,PC} ; Ignore 2640; Into SVC mode so we can call SWI's 2660 MOV r5, psr ; Remember mode + flags 2670 BIC r4, r5, #SVC_mode 2680 TEQP r4, #SVC_mode ; Force SVC mode 2690 MOV R0,R0 2700 STMFD R13!,{R14} \\ lr_svc 2720 MOV r14, #VIDC 2730; Set border cyan 2731 MOV r4,#&40000000 2732 ORR r4,r4,#&CC0 2740 STR r4, [r14] 2760; Set the CallBackHandler up NOW !!! 2780 LDRB r0, [R12,#interlock ] 2790 TEQ r0, #0 2800 BNE ll004 ; [already requested] 2820 ADR r0, CallBackCode 2830 MOV r1, wp 2840 SWI "XOS_AddCallBack" 2850 MOVVC r0, #1 2860 STRVCB r0, [R12,#interlock ] 2870 2880.ll004 2890 LDMFD R13!,{R14} \\ lr_svc 2900 TEQP r5, #0 ; Back to caller's mode 2910 MOV R0,R0 2920 LDMFD R13!,{r0-r1,r4-r5,PC} ; Pass it on 2940; In r0-r6 may be corrupted 2950; wp valid 2960; SVC mode, IRQ enabled 2980.CallBackCode 2990 STMFD R13!, {R14} 3010 MOV r14, #VIDC 3020 MOV r0, #&40000000 ; Set border black 3030 STR r0, [r14] 3050 MOV r0, #0 3060 STRB r0, [R12,#interlock ] 3070 3080 TEQP PC,#0 ; Force User Mode now 3090 MOV R0,R0 ; NOP instruction to allow CPU time to sort itself out 3110 ADR r0 , errblock% 3120 SWI "OS_GenerateError" 3200 LDMFD R13!,{PC} 3230.errblock% 3240 EQUD -1 ; Try 0 instead here 3260 EQUS "Aborted" 3270 EQUB 0 3280 ALIGN 3310.tracename% 3320 EQUS "HostVdu:" 3330 EQUB 0 3340 ALIGN 3370] 3380ENDPROC 3940DEFFNADDR(reg,dest) 3950IF (dest - P% - 8) >=0 THEN 3960 IF (dest - P% - 8) < &10000 THEN 3970 [OPTopt% 3980 ADD reg,PC,#(dest - P% - 8 ) AND &FF 3990 ADD reg,reg,#(dest - P% - 4) AND &FF00 4000 ] 4010 ELSE 4020 IF (dest - P% - 8) < &1000000 THEN 4030 [OPTopt% 4040 ADD reg,PC,#(dest - P% - 8 ) AND &FF 4050 ADD reg,reg,#(dest - P% - 4) AND &FF00 4060 ADD reg,reg,#(dest - P% - 0) AND &FF0000 4070 ] 4080 ELSE 4090 ERROR 0,"ADR out of range" 4100 ENDIF 4110 ENDIF 4120ELSE 4130 IF (0-(dest - P% - 8)) < &10000 THEN 4140 [OPTopt% 4150 SUB reg,PC,#(0-(dest - P% - 8 )) AND &FF 4160 SUB reg,reg,#(0-(dest - P% - 4)) AND &FF00 4170 ] 4180 ELSE 4190 IF (0-(dest - P% - 8)) < &1000000 THEN 4200 [OPTopt% 4210 SUB reg,PC,#(0-(dest - P% - 8 )) AND &FF 4220 SUB reg,reg,#(0-(dest - P% - 4)) AND &FF00 4230 SUB reg,reg,#(0-(dest - P% - 0)) AND &FF0000 4240 ] 4250 ELSE 4260 ERROR 0,"ADR out of range" 4270 ENDIF 4280 ENDIF 4290ENDIF 4300="" 4320END
� > TaskKiller F"� === Manifest definitions === Z R0=0:r0=0 d R1=1:r1=1 n R2=2:r2=2 x R3=3:r3=3 � R4=4:r4=4 � R5=5:r5=5 � R6=6:r6=6 � R7=7:r7=7 � R8=8:r8=8 �R9=9 � R10=10 � R11=11 �R12=12:wp=12 �R13=13:sp=13 �R14=14:lr=14 �R15=15:PC=R15:pc=15:psr=15 }ModHandReason_Claim = 6 ~Service_Reset = &27 EventV = &10 �Event_Keyboard = 11 �SVC_mode=1 � cr%=13 �$keytodump = &5E :� left-ALT �%ctrlkey = &3B :� left-CTRL &VIDC =&03400000 :� Some Workspace offsets NLastCtrlEvent = 0 XLastDumpEvent = 4 binterlock = 8 vTest_WorkspaceSize= &100 � � === �� code% 100*1024 � �DOIT �� � ��DOIT �Module_Title$="TaskKiller" GModule_Help$ =Module_Title$+�9+"0.10 ("+��$,5,�("04 Jul 1989"))+")" saveas$="$.KillModule" > � === R�"Assembling "+saveas$ f � PROCworkspace zpass%=0 �!�opt%=0�2�2:� :opt%=opt% OR 1 �P%=code% �pass%+=1 ��"Pass ";pass% ��library �� +�("SAVE "+saveas$+" "+�~code%+" "+�~P%) �("SETTYPE "+saveas$+" FFA") $� 8 ��library B[OPTopt% V.Module_BaseAddr t EQUD 0 ~( EQUD Test_Init -Module_BaseAddr �( EQUD Test_Die -Module_BaseAddr �( EQUD Test_Service -Module_BaseAddr �( EQUD Test_Title -Module_BaseAddr �( EQUD Test_HelpStr -Module_BaseAddr � EQUD 0 �.Test_Title �! EQUS Module_Title$:EQUB 0 �.Test_HelpStr EQUS Module_Help$:EQUB 0 ( ALIGN P; r0-r6 may be corrupted d.Test_Init n STMFD R13!,{R14} �@ LDR r2, [r12] ; Coming from hard reset ? � TEQ r2, #0 � BNE ll001 �& MOV r0, #ModHandReason_Claim �% MOV r3, #Test_WorkspaceSize � SWI "XOS_Module" �. ; 'No room in RMA' is acceptable message � LDMVSFD R13!,{PC} � STR r2, [r12] , .ll001 6C MOV wp, r2 ; Dereference on all resets ! J BL Test_Service_Reset T LDMFD R13!,{PC} r.Test_Service � TEQ r1, #Service_Reset � MOVNE pc, lr �> LDR wp, [r12] ; Dereference on service �.Test_Service_Reset � STMFD R13!,{r0-r2,R14} � MOV r14, #0 �' STR r14, [R12,#LastCtrlEvent] �' STR r14, [R12,#LastDumpEvent] � MOV r0, #EventV ADR r1, EventCode BL ClaimVector &4 MOV r0, #14 ; Enable event 0! MOV r1, #Event_Keyboard : SWI "XOS_Byte" N MOV r0, #0 X# STRB r0, [R12,#interlock ] b LDMFD R13!,{r0-r2,PC} vK; Let Module handler take care of removing our workspace on fatal death �<; Or shunting it around on Tidy - none of it is absolute � .Test_Die � STMFD R13!,{r0-r2,R14} �5 MOV r0, #13 ; Disable event �! MOV r1, #Event_Keyboard � SWI "XOS_Byte" �< LDR wp, [r12] ; Dereference on death � MOV r0, #EventV � ADR r1, EventCode � BL DelinkVector LDMFD R13!,{r0-r2,PC} .ClaimVector * STMFD R13!,{r2,R14} > BL DelinkVector HA MOV r2, wp ; Use wp itself - saves dereferencing R6 SWI "XOS_Claim" ; on actual code entries \ LDMFD R13!,{r2,PC}^ p.DelinkVector z STMFD R13!,{r0-r2,R14} � .ll002 � LDMIA R13,{R0,R1} � MOV r2, wp � SWI "XOS_Release" � BVC ll002 � CMP PC,#0 � LDMFD R13!,{r0-r2,PC} �1; Entered in some mode or other, probably IRQ �.EventCode �! CMP r0, #Event_Keyboard A MOVNE pc, lr ; Pass it on if wrong event + ; In r1 = key down = 1, key up = 0 $ ; r2 = key number B" STMFD R13!,{r0-r1,r4-r5,R14} j MOV r14, #ctrlkey t CMP r2, r14 ~; STREQ r1,[R12,#LastCtrlEvent] ; 0 -> key is now up � BEQ ll003 � MOV r14, #keytodump � CMP r2, r14 �> STREQ r1, [R12,#LastDumpEvent] ; 0 -> key is now up �'; Pass it on if not one of our keys �# LDMNEFD R13!,{r0-r1,r4-r5,PC} �2; Abort on first keystroke if ctrl is down too .ll003 7 LDR R14,[R12,#LastCtrlEvent] ; Is CTRL key down ? TEQ r14, #0 . LDMEQFD R13!,{r0-r1,r4-r5,PC} ; Ignore (H LDR r14, [R12,#LastDumpEvent ] ; Is ALT key down as well ? 2 TEQ r14, #0 <. LDMEQFD R13!,{r0-r1,r4-r5,PC} ; Ignore P(; Into SVC mode so we can call SWI's d= MOV r5, psr ; Remember mode + flags n BIC r4, r5, #SVC_mode x6 TEQP r4, #SVC_mode ; Force SVC mode � MOV R0,R0 � STMFD R13!,{R14} \\ lr_svc � MOV r14, #VIDC �; Set border cyan � MOV r4,#&40000000 � �R r4,r4,#&CC0 � STR r4, [r14] �(; Set the CallBackHandler up NOW !!! �% LDRB r0, [R12,#interlock ] � TEQ r0, #0 �; BNE ll004 ; [already requested] ADR r0, CallBackCode MOV r1, wp SWI "XOS_AddCallBack" " MOVVC r0, #1 ,$ STRVCB r0, [R12,#interlock ] 6 @ .ll004 J LDMFD R13!,{R14} \\ lr_svc T= TEQP r5, #0 ; Back to caller's mode ^ MOV R0,R0 h0 LDMFD R13!,{r0-r1,r4-r5,PC} ; Pass it on |"; In r0-r6 may be corrupted �; wp valid �!; SVC mode, IRQ enabled �.CallBackCode � STMFD R13!, {R14} � MOV r14, #VIDC �8 MOV r0, #&40000000 ; Set border black � STR r0, [r14] � MOV r0, #0 �# STRB r0, [R12,#interlock ] � ' TEQP PC,#0 ; Force User Mode now H MOV R0,R0 ; NOP instruction to allow CPU time to sort itself out & ADR r0 , errblock% 0 SWI "OS_GenerateError" � LDMFD R13!,{PC} �.errblock% �$ EQUD -1 ; Try 0 instead here � EQUS "Aborted" � EQUB 0 � ALIGN �.tracename% � EQUS "HostVdu:" EQUB 0 ALIGN *] 4� dݤADDR(reg,dest) n� (dest - P% - 8) >=0 � x" � (dest - P% - 8) < &10000 � � [OPTopt% �* ADD reg,PC,#(dest - P% - 8 ) � &FF �, ADD reg,reg,#(dest - P% - 4) � &FF00 � ] � � �$ � (dest - P% - 8) < &1000000 � � [OPTopt% �* ADD reg,PC,#(dest - P% - 8 ) � &FF �, ADD reg,reg,#(dest - P% - 4) � &FF00 �. ADD reg,reg,#(dest - P% - 0) � &FF0000 � ] � � � � 0,"ADR out of range" � � � "& � (0-(dest - P% - 8)) < &10000 � , [OPTopt% 6. SUB reg,PC,#(0-(dest - P% - 8 )) � &FF @0 SUB reg,reg,#(0-(dest - P% - 4)) � &FF00 J ] T � ^( � (0-(dest - P% - 8)) < &1000000 � h [OPTopt% r. SUB reg,PC,#(0-(dest - P% - 8 )) � &FF |0 SUB reg,reg,#(0-(dest - P% - 4)) � &FF00 �2 SUB reg,reg,#(0-(dest - P% - 0)) � &FF0000 � ] � � � � 0,"ADR out of range" � � � � �� �="" �� �
00000000 0d 00 0a 12 f4 20 3e 20 54 61 73 6b 4b 69 6c 6c |..... > TaskKill| 00000010 65 72 0d 00 46 22 f4 20 3d 3d 3d 20 4d 61 6e 69 |er..F". === Mani| 00000020 66 65 73 74 20 64 65 66 69 6e 69 74 69 6f 6e 73 |fest definitions| 00000030 20 3d 3d 3d 0d 00 5a 0d 52 30 3d 30 3a 72 30 3d | ===..Z.R0=0:r0=| 00000040 30 0d 00 64 0d 52 31 3d 31 3a 72 31 3d 31 0d 00 |0..d.R1=1:r1=1..| 00000050 6e 0d 52 32 3d 32 3a 72 32 3d 32 0d 00 78 0d 52 |n.R2=2:r2=2..x.R| 00000060 33 3d 33 3a 72 33 3d 33 0d 00 82 0d 52 34 3d 34 |3=3:r3=3....R4=4| 00000070 3a 72 34 3d 34 0d 00 8c 0d 52 35 3d 35 3a 72 35 |:r4=4....R5=5:r5| 00000080 3d 35 0d 00 96 0d 52 36 3d 36 3a 72 36 3d 36 0d |=5....R6=6:r6=6.| 00000090 00 a0 0d 52 37 3d 37 3a 72 37 3d 37 0d 00 aa 0d |...R7=7:r7=7....| 000000a0 52 38 3d 38 3a 72 38 3d 38 0d 00 b4 08 52 39 3d |R8=8:r8=8....R9=| 000000b0 39 0d 00 be 0a 52 31 30 3d 31 30 0d 00 c8 0a 52 |9....R10=10....R| 000000c0 31 31 3d 31 31 0d 00 d2 10 52 31 32 3d 31 32 3a |11=11....R12=12:| 000000d0 77 70 3d 31 32 0d 00 dc 10 52 31 33 3d 31 33 3a |wp=12....R13=13:| 000000e0 73 70 3d 31 33 0d 00 e6 10 52 31 34 3d 31 34 3a |sp=13....R14=14:| 000000f0 6c 72 3d 31 34 0d 00 f0 1e 52 31 35 3d 31 35 3a |lr=14....R15=15:| 00000100 50 43 3d 52 31 35 3a 70 63 3d 31 35 3a 70 73 72 |PC=R15:pc=15:psr| 00000110 3d 31 35 0d 01 7d 1b 4d 6f 64 48 61 6e 64 52 65 |=15..}.ModHandRe| 00000120 61 73 6f 6e 5f 43 6c 61 69 6d 20 3d 20 36 0d 01 |ason_Claim = 6..| 00000130 7e 17 53 65 72 76 69 63 65 5f 52 65 73 65 74 20 |~.Service_Reset | 00000140 3d 20 26 32 37 0d 01 7f 10 45 76 65 6e 74 56 20 |= &27....EventV | 00000150 3d 20 26 31 30 0d 01 80 17 45 76 65 6e 74 5f 4b |= &10....Event_K| 00000160 65 79 62 6f 61 72 64 20 3d 20 31 31 0d 01 92 0e |eyboard = 11....| 00000170 53 56 43 5f 6d 6f 64 65 3d 31 0d 01 9a 0a 63 72 |SVC_mode=1....cr| 00000180 25 3d 31 33 0d 01 b8 24 6b 65 79 74 6f 64 75 6d |%=13...$keytodum| 00000190 70 20 20 20 3d 20 26 35 45 20 20 20 20 3a f4 20 |p = &5E :. | 000001a0 6c 65 66 74 2d 41 4c 54 0d 01 d6 25 63 74 72 6c |left-ALT...%ctrl| 000001b0 6b 65 79 20 20 20 20 20 3d 20 26 33 42 20 20 20 |key = &3B | 000001c0 20 3a f4 20 6c 65 66 74 2d 43 54 52 4c 0d 02 26 | :. left-CTRL..&| 000001d0 13 56 49 44 43 20 3d 26 30 33 34 30 30 30 30 30 |.VIDC =&03400000| 000001e0 0d 02 3a 1c f4 20 53 6f 6d 65 20 57 6f 72 6b 73 |..:.. Some Works| 000001f0 70 61 63 65 20 6f 66 66 73 65 74 73 0d 02 4e 17 |pace offsets..N.| 00000200 4c 61 73 74 43 74 72 6c 45 76 65 6e 74 20 20 20 |LastCtrlEvent | 00000210 3d 20 30 0d 02 58 17 4c 61 73 74 44 75 6d 70 45 |= 0..X.LastDumpE| 00000220 76 65 6e 74 20 20 20 3d 20 34 0d 02 62 17 69 6e |vent = 4..b.in| 00000230 74 65 72 6c 6f 63 6b 20 20 20 20 20 20 20 3d 20 |terlock = | 00000240 38 0d 02 76 1c 54 65 73 74 5f 57 6f 72 6b 73 70 |8..v.Test_Worksp| 00000250 61 63 65 53 69 7a 65 3d 20 26 31 30 30 0d 02 94 |aceSize= &100...| 00000260 09 f4 20 3d 3d 3d 0d 02 a8 14 de 20 63 6f 64 65 |.. ===..... code| 00000270 25 20 31 30 30 2a 31 30 32 34 0d 02 bc 09 f2 44 |% 100*1024.....D| 00000280 4f 49 54 0d 02 d0 05 e0 0d 02 e4 0a dd f2 44 4f |OIT...........DO| 00000290 49 54 0d 02 f8 1e 4d 6f 64 75 6c 65 5f 54 69 74 |IT....Module_Tit| 000002a0 6c 65 24 3d 22 54 61 73 6b 4b 69 6c 6c 65 72 22 |le$="TaskKiller"| 000002b0 0d 03 02 47 4d 6f 64 75 6c 65 5f 48 65 6c 70 24 |...GModule_Help$| 000002c0 20 3d 4d 6f 64 75 6c 65 5f 54 69 74 6c 65 24 2b | =Module_Title$+| 000002d0 bd 39 2b 22 30 2e 31 30 20 28 22 2b c1 91 24 2c |.9+"0.10 ("+..$,| 000002e0 35 2c a9 28 22 30 34 20 4a 75 6c 20 31 39 38 39 |5,.("04 Jul 1989| 000002f0 22 29 29 2b 22 29 22 0d 03 0c 1a 73 61 76 65 61 |"))+")"....savea| 00000300 73 24 3d 22 24 2e 4b 69 6c 6c 4d 6f 64 75 6c 65 |s$="$.KillModule| 00000310 22 0d 03 3e 09 f4 20 3d 3d 3d 0d 03 52 1a f1 22 |"..>.. ===..R.."| 00000320 41 73 73 65 6d 62 6c 69 6e 67 20 22 2b 73 61 76 |Assembling "+sav| 00000330 65 61 73 24 0d 03 66 14 20 f4 20 50 52 4f 43 77 |eas$..f. . PROCw| 00000340 6f 72 6b 73 70 61 63 65 0d 03 7a 0b 70 61 73 73 |orkspace..z.pass| 00000350 25 3d 30 0d 03 84 21 e3 6f 70 74 25 3d 30 b8 32 |%=0...!.opt%=0.2| 00000360 88 32 3a f4 20 3a 6f 70 74 25 3d 6f 70 74 25 20 |.2:. :opt%=opt% | 00000370 4f 52 20 31 0d 03 8e 0c 50 25 3d 63 6f 64 65 25 |OR 1....P%=code%| 00000380 0d 03 98 0c 70 61 73 73 25 2b 3d 31 0d 03 a2 12 |....pass%+=1....| 00000390 f1 22 50 61 73 73 20 22 3b 70 61 73 73 25 0d 03 |."Pass ";pass%..| 000003a0 ca 0c f2 6c 69 62 72 61 72 79 0d 03 f2 05 ed 0d |...library......| 000003b0 04 06 2b ff 28 22 53 41 56 45 20 22 2b 73 61 76 |..+.("SAVE "+sav| 000003c0 65 61 73 24 2b 22 20 22 2b c3 7e 63 6f 64 65 25 |eas$+" "+.~code%| 000003d0 2b 22 20 22 2b c3 7e 50 25 29 0d 04 10 20 ff 28 |+" "+.~P%)... .(| 000003e0 22 53 45 54 54 59 50 45 20 22 2b 73 61 76 65 61 |"SETTYPE "+savea| 000003f0 73 24 2b 22 20 46 46 41 22 29 0d 04 24 05 e1 0d |s$+" FFA")..$...| 00000400 04 38 0d dd f2 6c 69 62 72 61 72 79 0d 04 42 0c |.8...library..B.| 00000410 5b 4f 50 54 6f 70 74 25 0d 04 56 14 2e 4d 6f 64 |[OPTopt%..V..Mod| 00000420 75 6c 65 5f 42 61 73 65 41 64 64 72 0d 04 74 0c |ule_BaseAddr..t.| 00000430 20 20 45 51 55 44 20 30 0d 04 7e 28 20 20 45 51 | EQUD 0..~( EQ| 00000440 55 44 20 54 65 73 74 5f 49 6e 69 74 20 20 20 20 |UD Test_Init | 00000450 2d 4d 6f 64 75 6c 65 5f 42 61 73 65 41 64 64 72 |-Module_BaseAddr| 00000460 0d 04 88 28 20 20 45 51 55 44 20 54 65 73 74 5f |...( EQUD Test_| 00000470 44 69 65 20 20 20 20 20 2d 4d 6f 64 75 6c 65 5f |Die -Module_| 00000480 42 61 73 65 41 64 64 72 0d 04 92 28 20 20 45 51 |BaseAddr...( EQ| 00000490 55 44 20 54 65 73 74 5f 53 65 72 76 69 63 65 20 |UD Test_Service | 000004a0 2d 4d 6f 64 75 6c 65 5f 42 61 73 65 41 64 64 72 |-Module_BaseAddr| 000004b0 0d 04 9c 28 20 20 45 51 55 44 20 54 65 73 74 5f |...( EQUD Test_| 000004c0 54 69 74 6c 65 20 20 20 2d 4d 6f 64 75 6c 65 5f |Title -Module_| 000004d0 42 61 73 65 41 64 64 72 0d 04 a6 28 20 20 45 51 |BaseAddr...( EQ| 000004e0 55 44 20 54 65 73 74 5f 48 65 6c 70 53 74 72 20 |UD Test_HelpStr | 000004f0 2d 4d 6f 64 75 6c 65 5f 42 61 73 65 41 64 64 72 |-Module_BaseAddr| 00000500 0d 04 b0 0c 20 20 45 51 55 44 20 30 0d 04 c4 0f |.... EQUD 0....| 00000510 2e 54 65 73 74 5f 54 69 74 6c 65 0d 04 d8 21 20 |.Test_Title...! | 00000520 20 45 51 55 53 20 20 20 4d 6f 64 75 6c 65 5f 54 | EQUS Module_T| 00000530 69 74 6c 65 24 3a 45 51 55 42 20 30 0d 04 ec 11 |itle$:EQUB 0....| 00000540 2e 54 65 73 74 5f 48 65 6c 70 53 74 72 0d 05 00 |.Test_HelpStr...| 00000550 20 20 20 45 51 55 53 20 20 20 4d 6f 64 75 6c 65 | EQUS Module| 00000560 5f 48 65 6c 70 24 3a 45 51 55 42 20 30 0d 05 28 |_Help$:EQUB 0..(| 00000570 0b 20 20 41 4c 49 47 4e 0d 05 50 1c 3b 20 72 30 |. ALIGN..P.; r0| 00000580 2d 72 36 20 6d 61 79 20 62 65 20 63 6f 72 72 75 |-r6 may be corru| 00000590 70 74 65 64 0d 05 64 0e 2e 54 65 73 74 5f 49 6e |pted..d..Test_In| 000005a0 69 74 0d 05 6e 16 20 20 53 54 4d 46 44 20 52 31 |it..n. STMFD R1| 000005b0 33 21 2c 7b 52 31 34 7d 0d 05 82 40 20 20 4c 44 |3!,{R14}...@ LD| 000005c0 52 20 20 20 20 20 72 32 2c 20 5b 72 31 32 5d 20 |R r2, [r12] | 000005d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 000005e0 43 6f 6d 69 6e 67 20 66 72 6f 6d 20 68 61 72 64 |Coming from hard| 000005f0 20 72 65 73 65 74 20 3f 0d 05 8c 14 20 20 54 45 | reset ?.... TE| 00000600 51 20 20 20 20 20 72 32 2c 20 23 30 0d 05 96 13 |Q r2, #0....| 00000610 20 20 42 4e 45 20 20 20 20 20 6c 6c 30 30 31 0d | BNE ll001.| 00000620 05 aa 26 20 20 4d 4f 56 20 20 20 20 20 72 30 2c |..& MOV r0,| 00000630 20 23 4d 6f 64 48 61 6e 64 52 65 61 73 6f 6e 5f | #ModHandReason_| 00000640 43 6c 61 69 6d 0d 05 b4 25 20 20 4d 4f 56 20 20 |Claim...% MOV | 00000650 20 20 20 72 33 2c 20 23 54 65 73 74 5f 57 6f 72 | r3, #Test_Wor| 00000660 6b 73 70 61 63 65 53 69 7a 65 0d 05 be 1a 20 20 |kspaceSize.... | 00000670 53 57 49 20 20 20 20 20 22 58 4f 53 5f 4d 6f 64 |SWI "XOS_Mod| 00000680 75 6c 65 22 0d 05 c8 2e 20 20 3b 20 27 4e 6f 20 |ule".... ; 'No | 00000690 72 6f 6f 6d 20 69 6e 20 52 4d 41 27 20 69 73 20 |room in RMA' is | 000006a0 61 63 63 65 70 74 61 62 6c 65 20 6d 65 73 73 61 |acceptable messa| 000006b0 67 65 0d 05 d2 17 20 20 4c 44 4d 56 53 46 44 20 |ge.... LDMVSFD | 000006c0 52 31 33 21 2c 7b 50 43 7d 0d 05 dc 17 20 20 53 |R13!,{PC}.... S| 000006d0 54 52 20 20 20 20 20 72 32 2c 20 5b 72 31 32 5d |TR r2, [r12]| 000006e0 0d 06 2c 0a 2e 6c 6c 30 30 31 0d 06 36 43 20 20 |..,..ll001..6C | 000006f0 4d 4f 56 20 20 20 20 20 77 70 2c 20 72 32 20 20 |MOV wp, r2 | 00000700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000710 3b 20 44 65 72 65 66 65 72 65 6e 63 65 20 6f 6e |; Dereference on| 00000720 20 61 6c 6c 20 72 65 73 65 74 73 20 21 0d 06 4a | all resets !..J| 00000730 20 20 20 42 4c 20 20 20 20 20 20 54 65 73 74 5f | BL Test_| 00000740 53 65 72 76 69 63 65 5f 52 65 73 65 74 0d 06 54 |Service_Reset..T| 00000750 15 20 20 4c 44 4d 46 44 20 52 31 33 21 2c 7b 50 |. LDMFD R13!,{P| 00000760 43 7d 0d 06 72 11 2e 54 65 73 74 5f 53 65 72 76 |C}..r..Test_Serv| 00000770 69 63 65 0d 06 86 20 20 20 54 45 51 20 20 20 20 |ice... TEQ | 00000780 20 72 31 2c 20 23 53 65 72 76 69 63 65 5f 52 65 | r1, #Service_Re| 00000790 73 65 74 0d 06 90 14 20 20 4d 4f 56 4e 45 20 20 |set.... MOVNE | 000007a0 20 70 63 2c 20 6c 72 0d 06 a4 3e 20 20 4c 44 52 | pc, lr...> LDR| 000007b0 20 20 20 20 20 77 70 2c 20 5b 72 31 32 5d 20 20 | wp, [r12] | 000007c0 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 44 | ; D| 000007d0 65 72 65 66 65 72 65 6e 63 65 20 6f 6e 20 73 65 |ereference on se| 000007e0 72 76 69 63 65 0d 06 b8 17 2e 54 65 73 74 5f 53 |rvice.....Test_S| 000007f0 65 72 76 69 63 65 5f 52 65 73 65 74 0d 06 c2 1c |ervice_Reset....| 00000800 20 20 53 54 4d 46 44 20 52 31 33 21 2c 7b 72 30 | STMFD R13!,{r0| 00000810 2d 72 32 2c 52 31 34 7d 0d 06 d6 15 20 20 4d 4f |-r2,R14}.... MO| 00000820 56 20 20 20 20 20 72 31 34 2c 20 23 30 0d 06 e0 |V r14, #0...| 00000830 27 20 20 53 54 52 20 20 20 20 20 72 31 34 2c 20 |' STR r14, | 00000840 5b 52 31 32 2c 23 4c 61 73 74 43 74 72 6c 45 76 |[R12,#LastCtrlEv| 00000850 65 6e 74 5d 0d 06 ea 27 20 20 53 54 52 20 20 20 |ent]...' STR | 00000860 20 20 72 31 34 2c 20 5b 52 31 32 2c 23 4c 61 73 | r14, [R12,#Las| 00000870 74 44 75 6d 70 45 76 65 6e 74 5d 0d 06 fe 19 20 |tDumpEvent].... | 00000880 20 4d 4f 56 20 20 20 20 20 72 30 2c 20 23 45 76 | MOV r0, #Ev| 00000890 65 6e 74 56 0d 07 08 1b 20 20 41 44 52 20 20 20 |entV.... ADR | 000008a0 20 20 72 31 2c 20 45 76 65 6e 74 43 6f 64 65 0d | r1, EventCode.| 000008b0 07 12 19 20 20 42 4c 20 20 20 20 20 20 43 6c 61 |... BL Cla| 000008c0 69 6d 56 65 63 74 6f 72 0d 07 26 34 20 20 4d 4f |imVector..&4 MO| 000008d0 56 20 20 20 20 20 72 30 2c 20 23 31 34 20 20 20 |V r0, #14 | 000008e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 000008f0 45 6e 61 62 6c 65 20 65 76 65 6e 74 0d 07 30 21 |Enable event..0!| 00000900 20 20 4d 4f 56 20 20 20 20 20 72 31 2c 20 23 45 | MOV r1, #E| 00000910 76 65 6e 74 5f 4b 65 79 62 6f 61 72 64 0d 07 3a |vent_Keyboard..:| 00000920 18 20 20 53 57 49 20 20 20 20 20 22 58 4f 53 5f |. SWI "XOS_| 00000930 42 79 74 65 22 0d 07 4e 14 20 20 4d 4f 56 20 20 |Byte"..N. MOV | 00000940 20 20 20 72 30 2c 20 23 30 0d 07 58 23 20 20 53 | r0, #0..X# S| 00000950 54 52 42 20 20 20 20 72 30 2c 20 5b 52 31 32 2c |TRB r0, [R12,| 00000960 23 69 6e 74 65 72 6c 6f 63 6b 20 5d 0d 07 62 1b |#interlock ]..b.| 00000970 20 20 4c 44 4d 46 44 20 52 31 33 21 2c 7b 72 30 | LDMFD R13!,{r0| 00000980 2d 72 32 2c 50 43 7d 0d 07 76 4b 3b 20 4c 65 74 |-r2,PC}..vK; Let| 00000990 20 4d 6f 64 75 6c 65 20 68 61 6e 64 6c 65 72 20 | Module handler | 000009a0 74 61 6b 65 20 63 61 72 65 20 6f 66 20 72 65 6d |take care of rem| 000009b0 6f 76 69 6e 67 20 6f 75 72 20 77 6f 72 6b 73 70 |oving our worksp| 000009c0 61 63 65 20 6f 6e 20 66 61 74 61 6c 20 64 65 61 |ace on fatal dea| 000009d0 74 68 0d 07 80 3c 3b 20 4f 72 20 73 68 75 6e 74 |th...<; Or shunt| 000009e0 69 6e 67 20 69 74 20 61 72 6f 75 6e 64 20 6f 6e |ing it around on| 000009f0 20 54 69 64 79 20 2d 20 6e 6f 6e 65 20 6f 66 20 | Tidy - none of | 00000a00 69 74 20 69 73 20 61 62 73 6f 6c 75 74 65 0d 07 |it is absolute..| 00000a10 94 0d 2e 54 65 73 74 5f 44 69 65 0d 07 9e 1c 20 |...Test_Die.... | 00000a20 20 53 54 4d 46 44 20 52 31 33 21 2c 7b 72 30 2d | STMFD R13!,{r0-| 00000a30 72 32 2c 52 31 34 7d 0d 07 b2 35 20 20 4d 4f 56 |r2,R14}...5 MOV| 00000a40 20 20 20 20 20 72 30 2c 20 23 31 33 20 20 20 20 | r0, #13 | 00000a50 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 44 | ; D| 00000a60 69 73 61 62 6c 65 20 65 76 65 6e 74 0d 07 bc 21 |isable event...!| 00000a70 20 20 4d 4f 56 20 20 20 20 20 72 31 2c 20 23 45 | MOV r1, #E| 00000a80 76 65 6e 74 5f 4b 65 79 62 6f 61 72 64 0d 07 c6 |vent_Keyboard...| 00000a90 18 20 20 53 57 49 20 20 20 20 20 22 58 4f 53 5f |. SWI "XOS_| 00000aa0 42 79 74 65 22 0d 07 da 3c 20 20 4c 44 52 20 20 |Byte"...< LDR | 00000ab0 20 20 20 77 70 2c 20 5b 72 31 32 5d 20 20 20 20 | wp, [r12] | 00000ac0 20 20 20 20 20 20 20 20 20 20 20 3b 20 44 65 72 | ; Der| 00000ad0 65 66 65 72 65 6e 63 65 20 6f 6e 20 64 65 61 74 |eference on deat| 00000ae0 68 0d 07 e4 19 20 20 4d 4f 56 20 20 20 20 20 72 |h.... MOV r| 00000af0 30 2c 20 23 45 76 65 6e 74 56 0d 07 ee 1b 20 20 |0, #EventV.... | 00000b00 41 44 52 20 20 20 20 20 72 31 2c 20 45 76 65 6e |ADR r1, Even| 00000b10 74 43 6f 64 65 0d 07 f8 1a 20 20 42 4c 20 20 20 |tCode.... BL | 00000b20 20 20 20 44 65 6c 69 6e 6b 56 65 63 74 6f 72 0d | DelinkVector.| 00000b30 08 02 1b 20 20 4c 44 4d 46 44 20 52 31 33 21 2c |... LDMFD R13!,| 00000b40 7b 72 30 2d 72 32 2c 50 43 7d 0d 08 20 10 2e 43 |{r0-r2,PC}.. ..C| 00000b50 6c 61 69 6d 56 65 63 74 6f 72 0d 08 2a 19 20 20 |laimVector..*. | 00000b60 53 54 4d 46 44 20 52 31 33 21 2c 7b 72 32 2c 52 |STMFD R13!,{r2,R| 00000b70 31 34 7d 0d 08 3e 1a 20 20 42 4c 20 20 20 20 20 |14}..>. BL | 00000b80 20 44 65 6c 69 6e 6b 56 65 63 74 6f 72 0d 08 48 | DelinkVector..H| 00000b90 41 20 20 4d 4f 56 20 20 20 20 20 72 32 2c 20 77 |A MOV r2, w| 00000ba0 70 20 20 20 20 20 20 20 20 3b 20 55 73 65 20 77 |p ; Use w| 00000bb0 70 20 69 74 73 65 6c 66 20 2d 20 73 61 76 65 73 |p itself - saves| 00000bc0 20 64 65 72 65 66 65 72 65 6e 63 69 6e 67 0d 08 | dereferencing..| 00000bd0 52 36 20 20 53 57 49 20 20 20 20 20 22 58 4f 53 |R6 SWI "XOS| 00000be0 5f 43 6c 61 69 6d 22 20 20 20 20 20 3b 20 6f 6e |_Claim" ; on| 00000bf0 20 61 63 74 75 61 6c 20 63 6f 64 65 20 65 6e 74 | actual code ent| 00000c00 72 69 65 73 0d 08 5c 19 20 20 4c 44 4d 46 44 20 |ries..\. LDMFD | 00000c10 52 31 33 21 2c 7b 72 32 2c 50 43 7d 5e 0d 08 70 |R13!,{r2,PC}^..p| 00000c20 11 2e 44 65 6c 69 6e 6b 56 65 63 74 6f 72 0d 08 |..DelinkVector..| 00000c30 7a 1c 20 20 53 54 4d 46 44 20 52 31 33 21 2c 7b |z. STMFD R13!,{| 00000c40 72 30 2d 72 32 2c 52 31 34 7d 0d 08 84 0a 2e 6c |r0-r2,R14}.....l| 00000c50 6c 30 30 32 0d 08 8e 17 20 20 4c 44 4d 49 41 20 |l002.... LDMIA | 00000c60 52 31 33 2c 7b 52 30 2c 52 31 7d 0d 08 98 14 20 |R13,{R0,R1}.... | 00000c70 20 4d 4f 56 20 20 20 20 20 72 32 2c 20 77 70 0d | MOV r2, wp.| 00000c80 08 a2 1b 20 20 53 57 49 20 20 20 20 20 22 58 4f |... SWI "XO| 00000c90 53 5f 52 65 6c 65 61 73 65 22 0d 08 ac 13 20 20 |S_Release".... | 00000ca0 42 56 43 20 20 20 20 20 6c 6c 30 30 32 0d 08 b6 |BVC ll002...| 00000cb0 13 20 20 43 4d 50 20 20 20 20 20 50 43 2c 23 30 |. CMP PC,#0| 00000cc0 0d 08 c0 1b 20 20 4c 44 4d 46 44 20 52 31 33 21 |.... LDMFD R13!| 00000cd0 2c 7b 72 30 2d 72 32 2c 50 43 7d 0d 08 d4 31 3b |,{r0-r2,PC}...1;| 00000ce0 20 45 6e 74 65 72 65 64 20 69 6e 20 73 6f 6d 65 | Entered in some| 00000cf0 20 6d 6f 64 65 20 6f 72 20 6f 74 68 65 72 2c 20 | mode or other, | 00000d00 70 72 6f 62 61 62 6c 79 20 49 52 51 0d 08 e8 0e |probably IRQ....| 00000d10 2e 45 76 65 6e 74 43 6f 64 65 0d 08 fc 21 20 20 |.EventCode...! | 00000d20 43 4d 50 20 20 20 20 20 72 30 2c 20 23 45 76 65 |CMP r0, #Eve| 00000d30 6e 74 5f 4b 65 79 62 6f 61 72 64 0d 09 06 41 20 |nt_Keyboard...A | 00000d40 20 4d 4f 56 4e 45 20 20 20 70 63 2c 20 6c 72 20 | MOVNE pc, lr | 00000d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000d60 20 3b 20 50 61 73 73 20 69 74 20 6f 6e 20 69 66 | ; Pass it on if| 00000d70 20 77 72 6f 6e 67 20 65 76 65 6e 74 0d 09 1a 2b | wrong event...+| 00000d80 20 20 3b 20 49 6e 20 20 20 20 72 31 20 3d 20 6b | ; In r1 = k| 00000d90 65 79 20 64 6f 77 6e 20 3d 20 31 2c 20 6b 65 79 |ey down = 1, key| 00000da0 20 75 70 20 3d 20 30 0d 09 24 1d 20 20 3b 20 20 | up = 0..$. ; | 00000db0 20 20 20 20 20 72 32 20 3d 20 6b 65 79 20 6e 75 | r2 = key nu| 00000dc0 6d 62 65 72 0d 09 42 22 20 20 53 54 4d 46 44 20 |mber..B" STMFD | 00000dd0 52 31 33 21 2c 7b 72 30 2d 72 31 2c 72 34 2d 72 |R13!,{r0-r1,r4-r| 00000de0 35 2c 52 31 34 7d 0d 09 6a 1b 20 20 4d 4f 56 20 |5,R14}..j. MOV | 00000df0 20 20 20 20 72 31 34 2c 20 23 63 74 72 6c 6b 65 | r14, #ctrlke| 00000e00 79 0d 09 74 15 20 20 43 4d 50 20 20 20 20 20 72 |y..t. CMP r| 00000e10 32 2c 20 72 31 34 0d 09 7e 3b 20 20 53 54 52 45 |2, r14..~; STRE| 00000e20 51 20 20 20 72 31 2c 5b 52 31 32 2c 23 4c 61 73 |Q r1,[R12,#Las| 00000e30 74 43 74 72 6c 45 76 65 6e 74 5d 20 20 3b 20 30 |tCtrlEvent] ; 0| 00000e40 20 2d 3e 20 6b 65 79 20 69 73 20 6e 6f 77 20 75 | -> key is now u| 00000e50 70 0d 09 88 13 20 20 42 45 51 20 20 20 20 20 6c |p.... BEQ l| 00000e60 6c 30 30 33 0d 09 b0 1d 20 20 4d 4f 56 20 20 20 |l003.... MOV | 00000e70 20 20 72 31 34 2c 20 23 6b 65 79 74 6f 64 75 6d | r14, #keytodum| 00000e80 70 0d 09 ba 15 20 20 43 4d 50 20 20 20 20 20 72 |p.... CMP r| 00000e90 32 2c 20 72 31 34 0d 09 c4 3e 20 20 53 54 52 45 |2, r14...> STRE| 00000ea0 51 20 20 20 72 31 2c 20 5b 52 31 32 2c 23 4c 61 |Q r1, [R12,#La| 00000eb0 73 74 44 75 6d 70 45 76 65 6e 74 5d 20 20 20 20 |stDumpEvent] | 00000ec0 3b 20 30 20 2d 3e 20 6b 65 79 20 69 73 20 6e 6f |; 0 -> key is no| 00000ed0 77 20 75 70 0d 09 ce 27 3b 20 50 61 73 73 20 69 |w up...'; Pass i| 00000ee0 74 20 6f 6e 20 69 66 20 6e 6f 74 20 6f 6e 65 20 |t on if not one | 00000ef0 6f 66 20 6f 75 72 20 6b 65 79 73 0d 09 d8 23 20 |of our keys...# | 00000f00 20 4c 44 4d 4e 45 46 44 20 52 31 33 21 2c 7b 72 | LDMNEFD R13!,{r| 00000f10 30 2d 72 31 2c 72 34 2d 72 35 2c 50 43 7d 0d 09 |0-r1,r4-r5,PC}..| 00000f20 ec 32 3b 20 41 62 6f 72 74 20 6f 6e 20 66 69 72 |.2; Abort on fir| 00000f30 73 74 20 6b 65 79 73 74 72 6f 6b 65 20 69 66 20 |st keystroke if | 00000f40 63 74 72 6c 20 69 73 20 64 6f 77 6e 20 74 6f 6f |ctrl is down too| 00000f50 0d 0a 00 0a 2e 6c 6c 30 30 33 0d 0a 0a 37 20 20 |.....ll003...7 | 00000f60 4c 44 52 20 52 31 34 2c 5b 52 31 32 2c 23 4c 61 |LDR R14,[R12,#La| 00000f70 73 74 43 74 72 6c 45 76 65 6e 74 5d 20 3b 20 49 |stCtrlEvent] ; I| 00000f80 73 20 43 54 52 4c 20 6b 65 79 20 64 6f 77 6e 20 |s CTRL key down | 00000f90 3f 0d 0a 14 15 20 20 54 45 51 20 20 20 20 20 72 |?.... TEQ r| 00000fa0 31 34 2c 20 23 30 0d 0a 1e 2e 20 20 4c 44 4d 45 |14, #0.... LDME| 00000fb0 51 46 44 20 52 31 33 21 2c 7b 72 30 2d 72 31 2c |QFD R13!,{r0-r1,| 00000fc0 72 34 2d 72 35 2c 50 43 7d 20 20 20 3b 20 49 67 |r4-r5,PC} ; Ig| 00000fd0 6e 6f 72 65 0d 0a 28 48 20 20 4c 44 52 20 20 20 |nore..(H LDR | 00000fe0 20 20 72 31 34 2c 20 5b 52 31 32 2c 23 4c 61 73 | r14, [R12,#Las| 00000ff0 74 44 75 6d 70 45 76 65 6e 74 20 20 5d 20 20 20 |tDumpEvent ] | 00001000 20 3b 20 49 73 20 41 4c 54 20 6b 65 79 20 64 6f | ; Is ALT key do| 00001010 77 6e 20 61 73 20 77 65 6c 6c 20 3f 0d 0a 32 15 |wn as well ?..2.| 00001020 20 20 54 45 51 20 20 20 20 20 72 31 34 2c 20 23 | TEQ r14, #| 00001030 30 0d 0a 3c 2e 20 20 4c 44 4d 45 51 46 44 20 52 |0..<. LDMEQFD R| 00001040 31 33 21 2c 7b 72 30 2d 72 31 2c 72 34 2d 72 35 |13!,{r0-r1,r4-r5| 00001050 2c 50 43 7d 20 20 20 3b 20 49 67 6e 6f 72 65 0d |,PC} ; Ignore.| 00001060 0a 50 28 3b 20 49 6e 74 6f 20 53 56 43 20 6d 6f |.P(; Into SVC mo| 00001070 64 65 20 73 6f 20 77 65 20 63 61 6e 20 63 61 6c |de so we can cal| 00001080 6c 20 53 57 49 27 73 0d 0a 64 3d 20 20 4d 4f 56 |l SWI's..d= MOV| 00001090 20 20 20 20 20 72 35 2c 20 70 73 72 20 20 20 20 | r5, psr | 000010a0 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 | ; R| 000010b0 65 6d 65 6d 62 65 72 20 6d 6f 64 65 20 2b 20 66 |emember mode + f| 000010c0 6c 61 67 73 0d 0a 6e 1f 20 20 42 49 43 20 20 20 |lags..n. BIC | 000010d0 20 20 72 34 2c 20 72 35 2c 20 23 53 56 43 5f 6d | r4, r5, #SVC_m| 000010e0 6f 64 65 0d 0a 78 36 20 20 54 45 51 50 20 20 20 |ode..x6 TEQP | 000010f0 20 72 34 2c 20 23 53 56 43 5f 6d 6f 64 65 20 20 | r4, #SVC_mode | 00001100 20 20 20 20 20 20 20 20 20 3b 20 46 6f 72 63 65 | ; Force| 00001110 20 53 56 43 20 6d 6f 64 65 0d 0a 82 0f 20 20 4d | SVC mode.... M| 00001120 4f 56 20 52 30 2c 52 30 0d 0a 8c 20 20 20 53 54 |OV R0,R0... ST| 00001130 4d 46 44 20 52 31 33 21 2c 7b 52 31 34 7d 20 5c |MFD R13!,{R14} \| 00001140 5c 20 6c 72 5f 73 76 63 0d 0a a0 18 20 20 4d 4f |\ lr_svc.... MO| 00001150 56 20 20 20 20 20 72 31 34 2c 20 23 56 49 44 43 |V r14, #VIDC| 00001160 0d 0a aa 15 3b 20 53 65 74 20 62 6f 72 64 65 72 |....; Set border| 00001170 20 63 79 61 6e 0d 0a ab 1b 20 20 4d 4f 56 20 20 | cyan.... MOV | 00001180 20 20 20 72 34 2c 23 26 34 30 30 30 30 30 30 30 | r4,#&40000000| 00001190 0d 0a ac 18 20 20 84 52 20 20 20 20 20 72 34 2c |.... .R r4,| 000011a0 72 34 2c 23 26 43 43 30 0d 0a b4 17 20 20 53 54 |r4,#&CC0.... ST| 000011b0 52 20 20 20 20 20 72 34 2c 20 5b 72 31 34 5d 0d |R r4, [r14].| 000011c0 0a c8 28 3b 20 53 65 74 20 74 68 65 20 43 61 6c |..(; Set the Cal| 000011d0 6c 42 61 63 6b 48 61 6e 64 6c 65 72 20 75 70 20 |lBackHandler up | 000011e0 4e 4f 57 20 21 21 21 0d 0a dc 25 20 20 4c 44 52 |NOW !!!...% LDR| 000011f0 42 20 20 20 20 72 30 2c 20 5b 52 31 32 2c 23 69 |B r0, [R12,#i| 00001200 6e 74 65 72 6c 6f 63 6b 20 20 20 5d 0d 0a e6 14 |nterlock ]....| 00001210 20 20 54 45 51 20 20 20 20 20 72 30 2c 20 23 30 | TEQ r0, #0| 00001220 0d 0a f0 3b 20 20 42 4e 45 20 20 20 20 20 6c 6c |...; BNE ll| 00001230 30 30 34 20 20 20 20 20 20 20 20 20 20 20 20 20 |004 | 00001240 20 20 20 20 20 20 3b 20 5b 61 6c 72 65 61 64 79 | ; [already| 00001250 20 72 65 71 75 65 73 74 65 64 5d 0d 0b 04 1e 20 | requested].... | 00001260 20 41 44 52 20 20 20 20 20 72 30 2c 20 43 61 6c | ADR r0, Cal| 00001270 6c 42 61 63 6b 43 6f 64 65 0d 0b 0e 14 20 20 4d |lBackCode.... M| 00001280 4f 56 20 20 20 20 20 72 31 2c 20 77 70 0d 0b 18 |OV r1, wp...| 00001290 1f 20 20 53 57 49 20 20 20 20 20 22 58 4f 53 5f |. SWI "XOS_| 000012a0 41 64 64 43 61 6c 6c 42 61 63 6b 22 0d 0b 22 14 |AddCallBack"..".| 000012b0 20 20 4d 4f 56 56 43 20 20 20 72 30 2c 20 23 31 | MOVVC r0, #1| 000012c0 0d 0b 2c 24 20 20 53 54 52 56 43 42 20 20 72 30 |..,$ STRVCB r0| 000012d0 2c 20 5b 52 31 32 2c 23 69 6e 74 65 72 6c 6f 63 |, [R12,#interloc| 000012e0 6b 20 20 5d 0d 0b 36 05 20 0d 0b 40 0a 2e 6c 6c |k ]..6. ..@..ll| 000012f0 30 30 34 0d 0b 4a 20 20 20 4c 44 4d 46 44 20 52 |004..J LDMFD R| 00001300 31 33 21 2c 7b 52 31 34 7d 20 5c 5c 20 6c 72 5f |13!,{R14} \\ lr_| 00001310 73 76 63 0d 0b 54 3d 20 20 54 45 51 50 20 20 20 |svc..T= TEQP | 00001320 20 72 35 2c 20 23 30 20 20 20 20 20 20 20 20 20 | r5, #0 | 00001330 20 20 20 20 20 20 20 20 20 3b 20 42 61 63 6b 20 | ; Back | 00001340 74 6f 20 63 61 6c 6c 65 72 27 73 20 6d 6f 64 65 |to caller's mode| 00001350 0d 0b 5e 0f 20 20 4d 4f 56 20 52 30 2c 52 30 0d |..^. MOV R0,R0.| 00001360 0b 68 30 20 20 4c 44 4d 46 44 20 52 31 33 21 2c |.h0 LDMFD R13!,| 00001370 7b 72 30 2d 72 31 2c 72 34 2d 72 35 2c 50 43 7d |{r0-r1,r4-r5,PC}| 00001380 20 20 20 3b 20 50 61 73 73 20 69 74 20 6f 6e 0d | ; Pass it on.| 00001390 0b 7c 22 3b 20 49 6e 20 20 20 20 72 30 2d 72 36 |.|"; In r0-r6| 000013a0 20 6d 61 79 20 62 65 20 63 6f 72 72 75 70 74 65 | may be corrupte| 000013b0 64 0d 0b 86 14 3b 20 20 20 20 20 20 20 77 70 20 |d....; wp | 000013c0 76 61 6c 69 64 0d 0b 90 21 3b 20 20 20 20 20 20 |valid...!; | 000013d0 20 53 56 43 20 6d 6f 64 65 2c 20 49 52 51 20 65 | SVC mode, IRQ e| 000013e0 6e 61 62 6c 65 64 0d 0b a4 11 2e 43 61 6c 6c 42 |nabled.....CallB| 000013f0 61 63 6b 43 6f 64 65 0d 0b ae 17 20 20 53 54 4d |ackCode.... STM| 00001400 46 44 20 52 31 33 21 2c 20 7b 52 31 34 7d 0d 0b |FD R13!, {R14}..| 00001410 c2 18 20 20 4d 4f 56 20 20 20 20 20 72 31 34 2c |.. MOV r14,| 00001420 20 23 56 49 44 43 0d 0b cc 38 20 20 4d 4f 56 20 | #VIDC...8 MOV | 00001430 20 20 20 20 72 30 2c 20 23 26 34 30 30 30 30 30 | r0, #&400000| 00001440 30 30 20 20 20 20 20 20 20 20 20 20 3b 20 53 65 |00 ; Se| 00001450 74 20 62 6f 72 64 65 72 20 62 6c 61 63 6b 0d 0b |t border black..| 00001460 d6 17 20 20 53 54 52 20 20 20 20 20 72 30 2c 20 |.. STR r0, | 00001470 5b 72 31 34 5d 0d 0b ea 14 20 20 4d 4f 56 20 20 |[r14].... MOV | 00001480 20 20 20 72 30 2c 20 23 30 0d 0b f4 23 20 20 53 | r0, #0...# S| 00001490 54 52 42 20 20 20 20 72 30 2c 20 5b 52 31 32 2c |TRB r0, [R12,| 000014a0 23 69 6e 74 65 72 6c 6f 63 6b 20 5d 0d 0b fe 05 |#interlock ]....| 000014b0 20 0d 0c 08 27 20 20 54 45 51 50 20 50 43 2c 23 | ...' TEQP PC,#| 000014c0 30 20 20 3b 20 46 6f 72 63 65 20 55 73 65 72 20 |0 ; Force User | 000014d0 4d 6f 64 65 20 6e 6f 77 0d 0c 12 48 20 20 4d 4f |Mode now...H MO| 000014e0 56 20 52 30 2c 52 30 20 20 20 3b 20 4e 4f 50 20 |V R0,R0 ; NOP | 000014f0 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 61 |instruction to a| 00001500 6c 6c 6f 77 20 43 50 55 20 74 69 6d 65 20 74 6f |llow CPU time to| 00001510 20 73 6f 72 74 20 69 74 73 65 6c 66 20 6f 75 74 | sort itself out| 00001520 0d 0c 26 1c 20 20 41 44 52 20 20 20 20 20 72 30 |..&. ADR r0| 00001530 20 2c 20 65 72 72 62 6c 6f 63 6b 25 0d 0c 30 1c | , errblock%..0.| 00001540 20 20 53 57 49 20 22 4f 53 5f 47 65 6e 65 72 61 | SWI "OS_Genera| 00001550 74 65 45 72 72 6f 72 22 0d 0c 80 15 20 20 4c 44 |teError".... LD| 00001560 4d 46 44 20 52 31 33 21 2c 7b 50 43 7d 0d 0c 9e |MFD R13!,{PC}...| 00001570 0e 2e 65 72 72 62 6c 6f 63 6b 25 0d 0c a8 24 20 |..errblock%...$ | 00001580 20 45 51 55 44 20 2d 31 20 20 20 3b 20 54 72 79 | EQUD -1 ; Try| 00001590 20 30 20 69 6e 73 74 65 61 64 20 68 65 72 65 0d | 0 instead here.| 000015a0 0c bc 14 20 20 45 51 55 53 20 22 41 62 6f 72 74 |... EQUS "Abort| 000015b0 65 64 22 0d 0c c6 0c 20 20 45 51 55 42 20 30 0d |ed".... EQUB 0.| 000015c0 0c d0 0b 20 20 41 4c 49 47 4e 0d 0c ee 0f 2e 74 |... ALIGN.....t| 000015d0 72 61 63 65 6e 61 6d 65 25 0d 0c f8 15 20 20 45 |racename%.... E| 000015e0 51 55 53 20 22 48 6f 73 74 56 64 75 3a 22 0d 0d |QUS "HostVdu:"..| 000015f0 02 0c 20 20 45 51 55 42 20 30 0d 0d 0c 0b 20 20 |.. EQUB 0.... | 00001600 41 4c 49 47 4e 0d 0d 2a 05 5d 0d 0d 34 05 e1 0d |ALIGN..*.]..4...| 00001610 0f 64 14 dd a4 41 44 44 52 28 72 65 67 2c 64 65 |.d...ADDR(reg,de| 00001620 73 74 29 0d 0f 6e 1b e7 20 28 64 65 73 74 20 2d |st)..n.. (dest -| 00001630 20 50 25 20 2d 20 38 29 20 3e 3d 30 20 8c 0d 0f | P% - 8) >=0 ...| 00001640 78 22 20 20 e7 20 28 64 65 73 74 20 2d 20 50 25 |x" . (dest - P%| 00001650 20 2d 20 38 29 20 3c 20 26 31 30 30 30 30 20 8c | - 8) < &10000 .| 00001660 0d 0f 82 10 20 20 20 20 5b 4f 50 54 6f 70 74 25 |.... [OPTopt%| 00001670 0d 0f 8c 2a 20 20 20 20 41 44 44 20 72 65 67 2c |...* ADD reg,| 00001680 50 43 2c 23 28 64 65 73 74 20 2d 20 50 25 20 2d |PC,#(dest - P% -| 00001690 20 38 20 29 20 80 20 26 46 46 0d 0f 96 2c 20 20 | 8 ) . &FF..., | 000016a0 20 20 41 44 44 20 72 65 67 2c 72 65 67 2c 23 28 | ADD reg,reg,#(| 000016b0 64 65 73 74 20 2d 20 50 25 20 2d 20 34 29 20 80 |dest - P% - 4) .| 000016c0 20 26 46 46 30 30 0d 0f a0 09 20 20 20 20 5d 0d | &FF00.... ].| 000016d0 0f aa 07 20 20 cc 0d 0f b4 24 20 20 e7 20 28 64 |... ....$ . (d| 000016e0 65 73 74 20 2d 20 50 25 20 2d 20 38 29 20 3c 20 |est - P% - 8) < | 000016f0 26 31 30 30 30 30 30 30 20 8c 0d 0f be 10 20 20 |&1000000 ..... | 00001700 20 20 5b 4f 50 54 6f 70 74 25 0d 0f c8 2a 20 20 | [OPTopt%...* | 00001710 20 20 41 44 44 20 72 65 67 2c 50 43 2c 23 28 64 | ADD reg,PC,#(d| 00001720 65 73 74 20 2d 20 50 25 20 2d 20 38 20 29 20 80 |est - P% - 8 ) .| 00001730 20 26 46 46 0d 0f d2 2c 20 20 20 20 41 44 44 20 | &FF..., ADD | 00001740 72 65 67 2c 72 65 67 2c 23 28 64 65 73 74 20 2d |reg,reg,#(dest -| 00001750 20 50 25 20 2d 20 34 29 20 80 20 26 46 46 30 30 | P% - 4) . &FF00| 00001760 0d 0f dc 2e 20 20 20 20 41 44 44 20 72 65 67 2c |.... ADD reg,| 00001770 72 65 67 2c 23 28 64 65 73 74 20 2d 20 50 25 20 |reg,#(dest - P% | 00001780 2d 20 30 29 20 80 20 26 46 46 30 30 30 30 0d 0f |- 0) . &FF0000..| 00001790 e6 09 20 20 20 20 5d 0d 0f f0 07 20 20 cc 0d 0f |.. ].... ...| 000017a0 fa 1e 20 20 20 20 85 20 30 2c 22 41 44 52 20 6f |.. . 0,"ADR o| 000017b0 75 74 20 6f 66 20 72 61 6e 67 65 22 0d 10 04 07 |ut of range"....| 000017c0 20 20 cd 0d 10 0e 07 20 20 cd 0d 10 18 05 cc 0d | ..... .......| 000017d0 10 22 26 20 20 e7 20 28 30 2d 28 64 65 73 74 20 |."& . (0-(dest | 000017e0 2d 20 50 25 20 2d 20 38 29 29 20 3c 20 26 31 30 |- P% - 8)) < &10| 000017f0 30 30 30 20 8c 0d 10 2c 10 20 20 20 20 5b 4f 50 |000 ...,. [OP| 00001800 54 6f 70 74 25 0d 10 36 2e 20 20 20 20 53 55 42 |Topt%..6. SUB| 00001810 20 72 65 67 2c 50 43 2c 23 28 30 2d 28 64 65 73 | reg,PC,#(0-(des| 00001820 74 20 2d 20 50 25 20 2d 20 38 20 29 29 20 80 20 |t - P% - 8 )) . | 00001830 26 46 46 0d 10 40 30 20 20 20 20 53 55 42 20 72 |&FF..@0 SUB r| 00001840 65 67 2c 72 65 67 2c 23 28 30 2d 28 64 65 73 74 |eg,reg,#(0-(dest| 00001850 20 2d 20 50 25 20 2d 20 34 29 29 20 80 20 26 46 | - P% - 4)) . &F| 00001860 46 30 30 0d 10 4a 09 20 20 20 20 5d 0d 10 54 07 |F00..J. ]..T.| 00001870 20 20 cc 0d 10 5e 28 20 20 e7 20 28 30 2d 28 64 | ...^( . (0-(d| 00001880 65 73 74 20 2d 20 50 25 20 2d 20 38 29 29 20 3c |est - P% - 8)) <| 00001890 20 26 31 30 30 30 30 30 30 20 8c 0d 10 68 10 20 | &1000000 ...h. | 000018a0 20 20 20 5b 4f 50 54 6f 70 74 25 0d 10 72 2e 20 | [OPTopt%..r. | 000018b0 20 20 20 53 55 42 20 72 65 67 2c 50 43 2c 23 28 | SUB reg,PC,#(| 000018c0 30 2d 28 64 65 73 74 20 2d 20 50 25 20 2d 20 38 |0-(dest - P% - 8| 000018d0 20 29 29 20 80 20 26 46 46 0d 10 7c 30 20 20 20 | )) . &FF..|0 | 000018e0 20 53 55 42 20 72 65 67 2c 72 65 67 2c 23 28 30 | SUB reg,reg,#(0| 000018f0 2d 28 64 65 73 74 20 2d 20 50 25 20 2d 20 34 29 |-(dest - P% - 4)| 00001900 29 20 80 20 26 46 46 30 30 0d 10 86 32 20 20 20 |) . &FF00...2 | 00001910 20 53 55 42 20 72 65 67 2c 72 65 67 2c 23 28 30 | SUB reg,reg,#(0| 00001920 2d 28 64 65 73 74 20 2d 20 50 25 20 2d 20 30 29 |-(dest - P% - 0)| 00001930 29 20 80 20 26 46 46 30 30 30 30 0d 10 90 09 20 |) . &FF0000.... | 00001940 20 20 20 5d 0d 10 9a 07 20 20 cc 0d 10 a4 1e 20 | ].... ..... | 00001950 20 20 20 85 20 30 2c 22 41 44 52 20 6f 75 74 20 | . 0,"ADR out | 00001960 6f 66 20 72 61 6e 67 65 22 0d 10 ae 07 20 20 cd |of range".... .| 00001970 0d 10 b8 07 20 20 cd 0d 10 c2 05 cd 0d 10 cc 07 |.... ..........| 00001980 3d 22 22 0d 10 e0 05 e0 0d ff |="".......| 0000198a