Home » Archimedes archive » Zipped Apps » 1st Word Plus » WP/programs/hoare/IntSrc

WP/programs/hoare/IntSrc

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 » Zipped Apps » 1st Word Plus
Filename: WP/programs/hoare/IntSrc
Read OK:
File size: 2E5A bytes
Load address: 0000
Exec address: 0000
File contents
   10REM  >$.IntSrc
   20REM  Author Steve Hoare
   30REM  January 1989
   40REM  Source code for Interrupt module
   50
   60DIM Space &1000
   70FOR I%=4 TO 7 STEP 3
   80P%=0:O%=Space
   90[OPT I%
  100   EQUD 0;      Start
  110   EQUD Init
  120   EQUD Final
  130   EQUD Service
  140   EQUD Title
  150   EQUD Help
  160   EQUD Table
  170   EQUD 0;      SWI stuff (not needed)
  180   EQUD 0;      SWI stuff
  190   EQUD 0;      SWI stuff
  200   EQUD 0;      SWI stuff
  210.Help
  220   EQUS "Prog interrupt":EQUB 9:EQUS "1.00 (15 Jan 1989)"
  230   EQUB 0
  240.Title
  250   EQUS "IntModule"
  260   EQUB 0
  270   ALIGN
  280.Table
  290   EQUS "Interrupt"
  300   EQUB 0
  310   ALIGN
  320   EQUD Interrupt
  330   EQUD &FF0001         ;  at least 1 parameter, no maximum, not GSTransed
  340   EQUD InterruptSyn
  350   EQUD InterruptHelp
  360   EQUS "Freeze"
  370   EQUB 0
  380   ALIGN
  390   EQUD Freeze
  400   EQUD 0
  410   EQUD FreezeSyn
  420   EQUD FreezeHelp
  430   EQUD 0;              End of command table
  440
  450.InterruptHelp
  460   EQUS "*Interrupt sets up a routine to stop an application with a key press and perform a specified *command":EQUW &D0A
  470   EQUS "If no command is given *commands can be typed during the interruption":EQUW &D0A
  480   EQUS "*Interrupt <key> Freeze - waits until the space bar is pressed & released":EQUW &D0A
  490   EQUS "*Interrupt -1 disables the interrupt routine":EQUW &D0A
  500.InterruptSyn
  510   EQUS "Syntax: *Interrupt <ASCII code> [<*command>]"
  520   EQUB 0
  530   ALIGN
  540
  550.FreezeHelp
  560   EQUS "*Freeze stops processing until the spacebar is pressed and released":EQUW &D0A
  570.FreezeSyn
  580   EQUS "Syntax: *Freeze":EQUB 0
  590   ALIGN
  600
  610.Freeze
  620   STMFD R13!,{R0-R3,R14}
  630   MOV R0,#129
  640.FreezeLoop1
  650   MVN R1,#98
  660   MOV R2,#255
  670   SWI "OS_Byte"
  680   CMP R1,#255
  690   CMPEQ R2,#255
  700   BNE FreezeLoop1
  710.FreezeLoop2
  720   MVN R1,#98
  730   MOV R2,#255
  740   SWI "OS_Byte"
  750   CMP R1,#255
  760   CMPEQ R2,#255
  770   BEQ FreezeLoop2
  780   MOV R0,#21
  790   MOV R1,#0
  800   SWI "OS_Byte"
  810   LDMFD R13!,{R0-R3,PC}
  820
  830.Service
  840   CMP R1,#&27      \ Is this post reset
  850   MOVNE PC,R14     \ Return if not
  860   STMFD R13!,{R0-R2,R14}
  870   LDRB R0,Active
  880   CMP R0,#128
  890   SUBCS R0,R0,#128
  900   STRB R0,Active  \ If active during reset then clear active flag
  910   MOV R0,#0
  920   STRB R0,Claimed  \ Reset flags to indicate
  930   STRB R0,Enabled  \ loss of control
  940   B CheckState     \ Reclaim vector and enable event
  950
  960.Init
  970   STMFD R13!,{R0-R2,R14}
  980   LDRB R0,Claimed
  990.CheckState
 1000   CMP R0,#255
 1010   BEQ Init1       \ Vector already claimed
 1020   MOV R0,#255
 1030   STRB R0,Claimed
 1040   MOV R0,#16 \ Event vector
 1050   ADR R1,EventEntry
 1060   MOV R2,#0
 1070   SWI "OS_Claim"
 1080.Init1
 1090   LDRB R0,Enabled
 1100   CMP R0,#255
 1110   LDMEQFD R13!,{PC} \ Event already enabled
 1120   MOV R0,#255
 1130   STRB R0,Enabled
 1140   MOV R0,#14 \ Enable event
 1150   MOV R1,#2  \ Keyboard input event
 1160   SWI "OS_Byte"
 1170   LDMFD R13!,{R0-R2,PC}
 1180
 1190.Final
 1200   STMFD R13!,{R14}
 1210   LDRB R0,Enabled
 1220   CMP R0,#255
 1230   BNE Final1   \ Already disabled
 1240   MOV R0,#0
 1250   STRB R0,Enabled
 1260   MOV R0,#13 \ Disable event
 1270   MOV R1,#2  \ Keyboard input event
 1280   SWI "OS_Byte"
 1290.Final1
 1300   LDRB R0,Claimed
 1310   CMP R0,#255
 1320   LDMNEFD R13!,{PC} \ Vector already released
 1330   MOV R0,#0
 1340   STRB R0,Claimed
 1350   MOV R0,#16 \ Event vector
 1360   ADR R1,EventEntry
 1370   MOV R2,#0
 1380   SWI "OS_Release"
 1390   LDMFD R13!,{PC}
 1400
 1410.Interrupt
 1420   STMFD R13!,{R0-R4,R14}
 1430   MOV R3,R0
 1440   MOV R4,R1
 1450   ADR R0,Buffer
 1460.Int1
 1470   LDRB R1,[R3],#1 \ Get next byte of command
 1480   CMP R1,#32      \ Is it a space?
 1490   MOVEQ R1,#13    \ If so convert to CR
 1500   STRB R1,[R0],#1 \ Store in buffer
 1510   CMP R1,#13
 1520   BNE Int1        \ Not at end so get next byte
 1530   ADR R0,Buffer
 1540   ADR R1,RegStore
 1550   MOV R2,#63
 1560   SWI "XOS_EvaluateExpression"
 1570   BVS Int5
 1580   CMP R1,#0      \ Is it an integer?
 1590   BEQ Int2       \ Yes so continue
 1600.Int3
 1610   ADR R0,CodeErr
 1620.Int5
 1630   LDMFD R13!,{R1-R5}
 1640   B Error
 1650.Int2
 1660   CMP R2,#256
 1670   BCC Int4      \ Valid code number
 1680   CMN R2,#1     \ Is it -1?
 1690   BNE Int3      \ No so not valid parameter
 1700   LDRB R1,Active
 1710   MOV R0,#0
 1720   CMP R1,#128
 1730   MOVCS R0,#128
 1740   STRB R0,Active  \ Clear the active flag
 1750   LDMFD R13!,{R0-R4,PC}
 1760.Int4
 1770   ADR R1,Code
 1780   STRB R2,[R1]   \ Store the keycode required
 1790   LDRB R1,Active
 1800   AND R1,R1,#128
 1810   ADD R1,R1,#1
 1820   CMP R4,#1      \ Only one parameter?
 1830   ADDNE R1,R1,#1
 1840   STRB R1,Active
 1850   LDMEQFD R13!,{R0-R4,PC} \ If no other param then end
 1860   MOV R0,R3
 1870   ADR R1,Command
 1880.ComMove1
 1890   LDRB R2,[R0],#1
 1900   STRB R2,[R1],#1
 1910   CMP R2,#13
 1920   BNE ComMove1
 1930   LDMFD R13!,{R0-R4,PC}
 1940
 1950.CodeErr
 1960   EQUD 67745
 1970   EQUS "Bad keycode parameter"
 1980   EQUB 0
 1990   ALIGN
 2000
 2010.Error
 2020   MOV R1,PC
 2030   ORR R1,R1,#1<<28 \ Set "V" flag bit
 2040   TEQP R1,#0
 2050   LDMFD R13!,{PC}
 2060
 2070.Claimed
 2080   EQUB 0 \ set to 255 when module has claimed event vector
 2090.Enabled
 2100   EQUB 0 \ set to 255 when module has enabled event
 2110   ALIGN
 2120
 2130.EventEntry
 2140   STMFD R13!,{R7,R14}
 2150   LDRB R7,Code
 2160   CMP R7,R2
 2170   LDMNEFD R13!,{R7,PC} \ Not our key so pass on
 2180   LDRB R7,Active
 2190   CMP R7,#1           \ Are we active and
 2200   CMPNE R7,#2         \ not busy already?
 2210   LDMNEFD R13!,{R7,PC} \ No, so pass on
 2220   STMFD R13!,{R0,R1,R6}
 2230   MOV R6,PC
 2240   ORR R7,R6,#3
 2250   TEQP R7,#0  \ Enter SVC mode
 2260   MOVNV R0,R0
 2270   STMFD R13!,{R14} \ Store SVC mode link
 2280   ADR R0,RegStore
 2290   ADR R1,Return
 2300   SWI "OS_CallBack"
 2310   SWI "OS_SetCallBack"
 2320   LDMFD R13!,{R14} \ Restore SVC mode link
 2330   TEQP R6,#0       \ Restore original mode
 2340   MOVNV R0,R0
 2350   LDMFD R13!,{R0,R1,R6,R7,PC}
 2360
 2370.Active
 2380   EQUD 0   \ 0=Not active,1=enter commands,2=execute specified command - 128 added to current value while actually processing
 2390.Code
 2400   EQUD 0   \ Storage for keycode required
 2410
 2420.Buffer
 2430   ]
 2440
 2450P%+=256:O%+=256
 2460Command=P%
 2470P%+=256:O%+=256
 2480RegStore=P%
 2490P%+=64:O%+=64
 2500[OPT I%
 2510.Return
 2520   LDRB R0,Active
 2530   ADD R0,R0,#128
 2540   STRB R0,Active   \ Change active flag to indicate busy
 2550   MOV R1,PC
 2560   BIC R1,R1,#1<<27 \ Clear interrupt flag
 2570   ORR R1,R1,#3     \ Set SVC mode
 2580   TEQP R1,#0       \ Enter SVC mode
 2590   MOVNV R1,R1
 2600   CMP R0,#129
 2610   BEQ EnterCommand \ Commands to be typed in
 2620   ADR R0,Command   \ else execute selected command
 2630   SWI "XOS_CLI"
 2640   SWIVS 256+7+(1<<17) \ Beep if error occurred
 2650   B Finish
 2660.EnterCommand    \ Prepare screen for command entry
 2670   MOV R0,#117
 2680   SWI "XOS_Byte"
 2690   STRB R1,VduStatus
 2700   MOV R0,#3
 2710   MOV R1,#%1010100 \ Disable printer, Spool and RS423
 2720   SWI "XOS_Byte"
 2730   STRB R1,Streams
 2740   MOV R0,#165
 2750   SWI "XOS_Byte"
 2760   STRB R1,CursorPos
 2770   STRB R2,CursorPos+1
 2780   MOV R0,#218
 2790   MOV R1,#0
 2800   MOV R2,#0
 2810   SWI "XOS_Byte"  \ Clear VDU Q
 2820   MOV R0,#0
 2830   MOV R1,#16
 2840   SWI "XOS_ReadPalette"
 2850   STR R2,Colours
 2860   STR R3,Colours+4
 2870   MOV R0,#1
 2880   SWI "XOS_ReadPalette"
 2890   STR R2,Colours+8
 2900   STR R3,Colours+12
 2910   ADR R0,VduBlock
 2920   ADR R1,Window
 2930   SWI "XOS_ReadVduVariables"
 2940   LDR R0,ScreenWidth
 2950   STRB R0,NewSettings+4
 2960   MOV R0,#1
 2970   LDR R3,ScreenSize
 2980   MOV R1,R3,LSR #1
 2990   SWI "XOS_ClaimScreenMemory"
 3000   MOVCS R2,#0
 3010   STR R2,ScreenClaimed    \ Set flag to indicate if screen memory found
 3020   BCS VduSequence
 3030   LDR R1,ScreenStart
 3040   MOV R3,R3,LSR #1
 3050.ScreenLoop1
 3060   LDMIA R1!,{R4-R11}
 3070   STMIA R2!,{R4-R11}
 3080   SUBS R3,R3,#32
 3090   BHI ScreenLoop1
 3100.VduSequence
 3110   ADR R0,NewSettings
 3120   ADR R1,Terminator
 3130   SUB R1,R1,R0
 3140   SWI "OS_WriteN"
 3150
 3160.ECLoop
 3170   SWI "OS_WriteS"
 3180   EQUD &002A0A0D
 3190   ADR R0,Buffer
 3200   MOV R1,#254
 3210   MOV R2,#32
 3220   MOV R3,#255
 3230   SWI "XOS_ReadLine"
 3240   BCS EscError
 3250   BVS PrintError
 3260   CMP R1,#0
 3270   BEQ TidyUp
 3280   SWI "XOS_CLI"
 3290   BVS PrintError
 3300   B ECLoop
 3310.VduBlock        \ Used as input block for OS_ReadVduVariables
 3320   EQUD 132
 3330   EQUD 133
 3340   EQUD 134
 3350   EQUD 135
 3360   EQUD 149
 3370   EQUD 155
 3380   EQUD 156
 3390   EQUD 159
 3400   EQUD 160
 3410   EQUD 1
 3420   EQUD 7
 3430   EQUD -1
 3440.Colours        \ Used to store application VDU variable settings
 3450   EQUD 0
 3460   EQUD 0
 3470   EQUD 0
 3480   EQUD 0
 3490.Window
 3500   EQUD 0
 3510   EQUD 0
 3520   EQUD 0
 3530   EQUD 0
 3540.ScreenStart
 3550   EQUD 0
 3560.LogCols
 3570   EQUD 0
 3580   EQUD 0
 3590.Tints
 3600   EQUD 0
 3610   EQUD 0
 3620.ScreenWidth
 3630   EQUD 0
 3640.ScreenSize
 3650   EQUD 0
 3660.ScreenClaimed
 3670   EQUD 0
 3680.VduStatus
 3690   EQUB 0
 3700.CursorPos
 3710   EQUW 0
 3720.Streams
 3730   EQUB 0
 3740.NewSettings    \  Contains VDU codes to set up command entry screen
 3750   EQUB 6 \ Re enable VDU
 3760   EQUB 28 \ Set text window
 3770   EQUB 0
 3780   EQUB 12
 3790   EQUB 0  \ updated by program
 3800   EQUB 0
 3810   EQUB 19  \ Define col 0 as blue
 3820   EQUB 0
 3830   EQUD 4
 3840   EQUB 19  \ Define col 1 as white
 3850   EQUB 1
 3860   EQUD 7
 3870   EQUB 15 \ Set paged mode
 3880   EQUB 4  \ Use text cursor
 3890   EQUB 17 \ Select Text colour 1
 3900   EQUB 1
 3910   EQUB 17 \ Select background colour 0
 3920   EQUB 128
 3930   EQUB 12 \ CLS
 3940.Terminator
 3950   STMFD R13!,{R0,R14}
 3960   MOV R0,#8
 3970.TermLoop
 3980   SWI 256
 3990   SUBS R0,R0,#1
 4000   BNE TermLoop
 4010   LDMFD R13!,{R0,PC}
 4020
 4030.TidyUp            \ Resets application VDU variables and restores screen
 4040   ADR R3,Colours
 4050   MOV R1,#4
 4060   MOV R2,#12
 4070.TLoop1
 4080   SWI 256+19
 4090   MOV R0,R2,LSR #3
 4100   SWI "OS_WriteC"
 4110   ADD R0,R3,R2
 4120   SWI "OS_WriteN"
 4130   SUBS R2,R2,#4
 4140   BPL TLoop1
 4150   MOV R2,#4
 4160   ADR R3,Tints
 4170.TLoop2
 4180   SWI 256+23
 4190   SWI 256+17
 4200   MOV R0,R2,LSR #2
 4210   SWI "OS_WriteC"
 4220   LDR R0,[R3,R2]
 4230   SWI "OS_WriteC"
 4240   BL Terminator
 4250   SUBS R2,R2,#4
 4260   BPL TLoop2
 4270   LDRB R0,LogCols
 4280   SWI 256+17
 4290   SWI "OS_WriteC"
 4300   LDRB R0,LogCols+4
 4310   ADD R0,R0,#128
 4320   SWI 256+17
 4330   SWI "OS_WriteC"
 4340   SWI 256+28
 4350   ADR R1,Window
 4360   MOV R2,#4
 4370.TLoop3
 4380   LDRB R0,[R1],#4
 4390   SWI "OS_WriteC"
 4400   SUBS R2,R2,#1
 4410   BNE TLoop3
 4420   SWI 256+31
 4430   LDRB R0,CursorPos
 4440   SWI "OS_WriteC"
 4450   LDRB R0,CursorPos+1
 4460   SWI "OS_WriteC"
 4470   LDRB R3,VduStatus
 4480   TST R3,#1  \ Printer enabled bit
 4490   SWINE 256+2
 4500   TST R3,#4 \ Paged mode bit
 4510   SWIEQ 256+15 \ Not set so clear paged mode
 4520   TST R3,#32  \ VDU5 bit
 4530   SWINE 256+5
 4540   TST R3,#128 \ Disabled by VDU 21 bit
 4550   SWINE 256+21
 4560   LDRB R1,Streams
 4570   MOV R0,#3
 4580   SWI "OS_Byte"
 4590   LDR R1,ScreenClaimed
 4600   CMP R1,#0
 4610   BEQ Wimp
 4620   LDR R2,ScreenStart
 4630   LDR R3,ScreenSize
 4640   MOV R3,R3,LSR #1
 4650.TLoop4
 4660   LDMIA R1!,{R4-R11}
 4670   STMIA R2!,{R4-R11}
 4680   SUBS R3,R3,#32
 4690   BHI TLoop4
 4700   MOV R0,#0
 4710   SWI "OS_ClaimScreenMemory"
 4720   B Finish
 4730.Wimp
 4740   MVN R0,#0
 4750   MOV R1,#0
 4760   MOV R2,#0
 4770   MOV R3,#1280
 4780   SUB R3,R3,#1
 4790   MOV R4,#1024
 4800   SUB R4,R4,#1
 4810   SWI "XWimp_ForceRedraw"
 4820
 4830.Finish
 4840   MOV R0,PC
 4850   ORR R0,R0,#1<<27 \ Set interrupt flag
 4860   TEQP R0,#0       \ Write to flag
 4870   LDRB R0,Active
 4880   SUB R0,R0,#128  \ Restore active flag
 4890   STRB R0,Active
 4900   ADR R14,RegStore
 4910   LDMIA R14,{R0-R14}^
 4920   LDR R14,[R14,#15*4]
 4930   MOVS PC,R14
 4940
 4950.EscapeS
 4960   EQUD 17
 4970   EQUS "Escape"
 4980   EQUB 0
 4990   ALIGN
 5000.EscError
 5010   MOV R0,#124
 5020   SWI "XOS_Byte" \ Clear Escape condition
 5030   ADR R0,EscapeS
 5040.PrintError
 5050   ADD R0,R0,#4
 5060   SWI "OS_NewLine"
 5070   SWI "OS_Write0"
 5080   B ECLoop
 5090]
 5100NEXT
 5110OSCLI("SAVE IntModule "+STR$~Space+"+"+STR$~P%)
 5120OSCLI("SETTYPE IntModule FFA")

�  >$.IntSrc
�  Author Steve Hoare
�  January 1989
('�  Source code for Interrupt module
2
<� Space &1000
F� I%=4 � 7 � 3
PP%=0:O%=Space
Z[OPT I%
d   EQUD 0;      Start
n   EQUD Init
x   EQUD Final
�   EQUD Service
�   EQUD Title
�   EQUD Help
�   EQUD Table
�*   EQUD 0;      SWI stuff (not needed)
�   EQUD 0;      SWI stuff
�   EQUD 0;      SWI stuff
�   EQUD 0;      SWI stuff
�	.Help
�=   EQUS "Prog interrupt":EQUB 9:EQUS "1.00 (15 Jan 1989)"
�
   EQUB 0
�
.Title
�   EQUS "IntModule"

   EQUB 0
   ALIGN

.Table
"   EQUS "Interrupt"
,
   EQUB 0
6   ALIGN
@   EQUD Interrupt
JN   EQUD &FF0001         ;  at least 1 parameter, no maximum, not GSTransed
T   EQUD InterruptSyn
^   EQUD InterruptHelp
h   EQUS "Freeze"
r
   EQUB 0
|   ALIGN
�   EQUD Freeze
�
   EQUD 0
�   EQUD FreezeSyn
�   EQUD FreezeHelp
�0   EQUD 0;              End of command table
�
�.InterruptHelp
�}   EQUS "*Interrupt sets up a routine to stop an application with a key press and perform a specified *command":EQUW &D0A
�]   EQUS "If no command is given *commands can be typed during the interruption":EQUW &D0A
�a   EQUS "*Interrupt <key> Freeze - waits until the space bar is pressed & released":EQUW &D0A
�D   EQUS "*Interrupt -1 disables the interrupt routine":EQUW &D0A
�.InterruptSyn
�:   EQUS "Syntax: *Interrupt <ASCII code> [<*command>]"

   EQUB 0
   ALIGN

&.FreezeHelp
0[   EQUS "*Freeze stops processing until the spacebar is pressed and released":EQUW &D0A
:.FreezeSyn
D$   EQUS "Syntax: *Freeze":EQUB 0
N   ALIGN
X
b.Freeze
l   STMFD R13!,{R0-R3,R14}
v   MOV R0,#129
�.FreezeLoop1
�   MVN R1,#98
�   MOV R2,#255
�   SWI "OS_Byte"
�   CMP R1,#255
�   CMPEQ R2,#255
�   BNE FreezeLoop1
�.FreezeLoop2
�   MVN R1,#98
�   MOV R2,#255
�   SWI "OS_Byte"
�   CMP R1,#255
�   CMPEQ R2,#255
   BEQ FreezeLoop2
   MOV R0,#21
   MOV R1,#0
    SWI "OS_Byte"
*   LDMFD R13!,{R0-R3,PC}
4
>.Service
H,   CMP R1,#&27      \ Is this post reset
R'   MOVNE PC,R14     \ Return if not
\   STMFD R13!,{R0-R2,R14}
f   LDRB R0,Active
p   CMP R0,#128
z   SUBCS R0,R0,#128
�F   STRB R0,Active  \ If active during reset then clear active flag
�   MOV R0,#0
�1   STRB R0,Claimed  \ Reset flags to indicate
�)   STRB R0,Enabled  \ loss of control
�9   B CheckState     \ Reclaim vector and enable event
�
�	.Init
�   STMFD R13!,{R0-R2,R14}
�   LDRB R0,Claimed
�.CheckState
�   CMP R0,#255
�/   BEQ Init1       \ Vector already claimed
�   MOV R0,#255
   STRB R0,Claimed
    MOV R0,#16 \ Event vector
   ADR R1,EventEntry
$   MOV R2,#0
.   SWI "OS_Claim"
8
.Init1
B   LDRB R0,Enabled
L   CMP R0,#255
V0   LDMEQFD R13!,{PC} \ Event already enabled
`   MOV R0,#255
j   STRB R0,Enabled
t    MOV R0,#14 \ Enable event
~(   MOV R1,#2  \ Keyboard input event
�   SWI "OS_Byte"
�   LDMFD R13!,{R0-R2,PC}
�
�
.Final
�   STMFD R13!,{R14}
�   LDRB R0,Enabled
�   CMP R0,#255
�&   BNE Final1   \ Already disabled
�   MOV R0,#0
�   STRB R0,Enabled
�!   MOV R0,#13 \ Disable event
�(   MOV R1,#2  \ Keyboard input event
   SWI "OS_Byte"

.Final1
   LDRB R0,Claimed
   CMP R0,#255
(2   LDMNEFD R13!,{PC} \ Vector already released
2   MOV R0,#0
<   STRB R0,Claimed
F    MOV R0,#16 \ Event vector
P   ADR R1,EventEntry
Z   MOV R2,#0
d   SWI "OS_Release"
n   LDMFD R13!,{PC}
x
�.Interrupt
�   STMFD R13!,{R0-R4,R14}
�   MOV R3,R0
�   MOV R4,R1
�   ADR R0,Buffer
�	.Int1
�1   LDRB R1,[R3],#1 \ Get next byte of command
�'   CMP R1,#32      \ Is it a space?
�)   �Q R1,#13    \ If so convert to CR
�(   STRB R1,[R0],#1 \ Store in buffer
�   CMP R1,#13
�4   BNE Int1        \ Not at end so get next byte
�   ADR R0,Buffer
   ADR R1,RegStore
   MOV R2,#63
#   SWI "XOS_EvaluateExpression"
"   BVS Int5
,)   CMP R1,#0      \ Is it an integer?
6'   BEQ Int2       \ Yes so continue
@	.Int3
J   ADR R0,CodeErr
T	.Int5
^   LDMFD R13!,{R1-R5}
h   B Error
r	.Int2
|   CMP R2,#256
�(   BCC Int4      \ Valid code number
�    CMN R2,#1     \ Is it -1?
�0   BNE Int3      \ No so not valid parameter
�   LDRB R1,Active
�   MOV R0,#0
�   CMP R1,#128
�   MOVCS R0,#128
�.   STRB R0,Active  \ Clear the active flag
�   LDMFD R13!,{R0-R4,PC}
�	.Int4
�   ADR R1,Code
�2   STRB R2,[R1]   \ Store the keycode required
�   LDRB R1,Active
   � R1,R1,#128
   ADD R1,R1,#1
+   CMP R4,#1      \ Only one parameter?
&   ADDNE R1,R1,#1
0   STRB R1,Active
:;   LDMEQFD R13!,{R0-R4,PC} \ If no other param then end
D   MOV R0,R3
N   ADR R1,Command
X
.ComMove1
b   LDRB R2,[R0],#1
l   STRB R2,[R1],#1
v   CMP R2,#13
�   BNE ComMove1
�   LDMFD R13!,{R0-R4,PC}
�
�.CodeErr
�   EQUD 67745
�#   EQUS "Bad keycode parameter"
�
   EQUB 0
�   ALIGN
�
�
.Error
�   MOV R1,PC
�)   �R R1,R1,#1<<28 \ Set "V" flag bit
�   TEQP R1,#0
   LDMFD R13!,{PC}

.Claimed
 ?   EQUB 0 \ set to 255 when module has claimed event vector
*.Enabled
48   EQUB 0 \ set to 255 when module has enabled event
>   ALIGN
H
R.EventEntry
\   STMFD R13!,{R7,R14}
f   LDRB R7,Code
p   CMP R7,R2
z4   LDMNEFD R13!,{R7,PC} \ Not our key so pass on
�   LDRB R7,Active
�.   CMP R7,#1           \ Are we active and
�.   CMPNE R7,#2         \ not busy already?
�,   LDMNEFD R13!,{R7,PC} \ No, so pass on
�   STMFD R13!,{R0,R1,R6}
�   MOV R6,PC
�   �R R7,R6,#3
�#   TEQP R7,#0  \ Enter SVC mode
�   MOVNV R0,R0
�-   STMFD R13!,{R14} \ Store SVC mode link
�   ADR R0,RegStore
�   ADR R1,Return
�   SWI "OS_CallBack"
	   SWI "OS_SetCallBack"
	/   LDMFD R13!,{R14} \ Restore SVC mode link
	/   TEQP R6,#0       \ Restore original mode
	$   MOVNV R0,R0
	."   LDMFD R13!,{R0,R1,R6,R7,PC}
	8
	B.Active
	L�   EQUD 0   \ 0=Not active,1=enter commands,2=execute specified command - 128 added to current value while actually processing
	V	.Code
	`.   EQUD 0   \ Storage for keycode required
	j
	t.Buffer
	~   ]
	�
	�P%+=256:O%+=256
	�Command=P%
	�P%+=256:O%+=256
	�RegStore=P%
	�P%+=64:O%+=64
	�[OPT I%
	�.Return
	�   LDRB R0,Active
	�   ADD R0,R0,#128
	�=   STRB R0,Active   \ Change active flag to indicate busy
	�   MOV R1,PC
.   BIC R1,R1,#1<<27 \ Clear interrupt flag

%   �R R1,R1,#3     \ Set SVC mode
(   TEQP R1,#0       \ Enter SVC mode
   MOVNV R1,R1
(   CMP R0,#129
21   BEQ EnterCommand \ Commands to be typed in
<7   ADR R0,Command   \ else execute selected command
F   SWI "XOS_CLI"
P3   SWIVS 256+7+(1<<17) \ Beep if error occurred
Z   B Finish
d7.EnterCommand    \ Prepare screen for command entry
n   MOV R0,#117
x   SWI "XOS_Byte"
�   STRB R1,VduStatus
�   MOV R0,#3
�:   MOV R1,#%1010100 \ Disable printer, Spool and RS423
�   SWI "XOS_Byte"
�   STRB R1,Streams
�   MOV R0,#165
�   SWI "XOS_Byte"
�   STRB R1,CursorPos
�   STRB R2,CursorPos+1
�   MOV R0,#218
�   MOV R1,#0
�   MOV R2,#0
�"   SWI "XOS_Byte"  \ Clear � Q
   MOV R0,#0
   MOV R1,#16
   SWI "XOS_ReadPalette"
"   STR R2,Colours
,   STR R3,Colours+4
6   MOV R0,#1
@   SWI "XOS_ReadPalette"
J   STR R2,Colours+8
T   STR R3,Colours+12
^   ADR R0,VduBlock
h   ADR R1,Window
r!   SWI "XOS_ReadVduVariables"
|   LDR R0,ScreenWidth
�   STRB R0,NewSettings+4
�   MOV R0,#1
�   LDR R3,ScreenSize
�   MOV R1,R3,LSR #1
�"   SWI "XOS_ClaimScreenMemory"
�   MOVCS R2,#0
�L   STR R2,ScreenClaimed    \ Set flag to indicate if screen memory found
�   BCS VduSequence
�   LDR R1,ScreenStart
�   MOV R3,R3,LSR #1
�.ScreenLoop1
�   LDMIA R1!,{R4-R11}
�   STMIA R2!,{R4-R11}
   SUBS R3,R3,#32
   BHI ScreenLoop1
.VduSequence
&   ADR R0,NewSettings
0   ADR R1,Terminator
:   SUB R1,R1,R0
D   SWI "OS_WriteN"
N
X.ECLoop
b   SWI "OS_WriteS"
l   EQUD &002A0A0D
v   ADR R0,Buffer
�   MOV R1,#254
�   MOV R2,#32
�   MOV R3,#255
�   SWI "XOS_ReadLine"
�   BCS EscError
�   BVS PrintError
�   CMP R1,#0
�   BEQ TidyUp
�   SWI "XOS_CLI"
�   BVS PrintError
�   B ECLoop
�B.VduBlock        \ Used as input block for OS_ReadVduVariables
�   EQUD 132

   EQUD 133

   EQUD 134

   EQUD 135

    EQUD 149

*   EQUD 155

4   EQUD 156

>   EQUD 159

H   EQUD 160

R
   EQUD 1

\
   EQUD 7

f   EQUD -1

pC.Colours        \ Used to store application � variable settings

z
   EQUD 0

�
   EQUD 0

�
   EQUD 0

�
   EQUD 0

�.Window

�
   EQUD 0

�
   EQUD 0

�
   EQUD 0

�
   EQUD 0

�.ScreenStart

�
   EQUD 0

�.LogCols

�
   EQUD 0

�
   EQUD 0

.Tints

   EQUD 0

   EQUD 0
$.ScreenWidth
.
   EQUD 0
8.ScreenSize
B
   EQUD 0
L.ScreenClaimed
V
   EQUD 0
`.VduStatus
j
   EQUB 0
t.CursorPos
~
   EQUW 0
�.Streams
�
   EQUB 0
�F.NewSettings    \  Contains � codes to set up command entry screen
�   EQUB 6 \ Re enable �
�    EQUB 28 \ Set text window
�
   EQUB 0
�   EQUB 12
�#   EQUB 0  \ updated by program
�
   EQUB 0
�&   EQUB 19  \ Define col 0 as blue
�
   EQUB 0
�
   EQUD 4
'   EQUB 19  \ Define col 1 as white


   EQUB 1

   EQUD 7
   EQUB 15 \ Set paged mode
(    EQUB 4  \ Use text cursor
2%   EQUB 17 \ Select Text colour 1
<
   EQUB 1
F+   EQUB 17 \ Select background colour 0
P   EQUB 128
Z   EQUB 12 \ �
d.Terminator
n   STMFD R13!,{R0,R14}
x   MOV R0,#8
�
.TermLoop
�   SWI 256
�   SUBS R0,R0,#1
�   BNE TermLoop
�   LDMFD R13!,{R0,PC}
�
�K.TidyUp            \ Resets application � variables and restores screen
�   ADR R3,Colours
�   MOV R1,#4
�   MOV R2,#12
�.TLoop1
�   SWI 256+19
�   MOV R0,R2,LSR #3
   SWI "OS_WriteC"
   ADD R0,R3,R2
   SWI "OS_WriteN"
"   SUBS R2,R2,#4
,   BPL TLoop1
6   MOV R2,#4
@   ADR R3,Tints
J.TLoop2
T   SWI 256+23
^   SWI 256+17
h   MOV R0,R2,LSR #2
r   SWI "OS_WriteC"
|   LDR R0,[R3,R2]
�   SWI "OS_WriteC"
�   BL Terminator
�   SUBS R2,R2,#4
�   BPL TLoop2
�   LDRB R0,LogCols
�   SWI 256+17
�   SWI "OS_WriteC"
�   LDRB R0,LogCols+4
�   ADD R0,R0,#128
�   SWI 256+17
�   SWI "OS_WriteC"
�   SWI 256+28
�   ADR R1,Window
   MOV R2,#4
.TLoop3
   LDRB R0,[R1],#4
&   SWI "OS_WriteC"
0   SUBS R2,R2,#1
:   BNE TLoop3
D   SWI 256+31
N   LDRB R0,CursorPos
X   SWI "OS_WriteC"
b   LDRB R0,CursorPos+1
l   SWI "OS_WriteC"
v   LDRB R3,VduStatus
�'   TST R3,#1  \ Printer enabled bit
�   SWINE 256+2
�!   TST R3,#4 \ Paged mode bit
�1   SWIEQ 256+15 \ Not set so clear paged mode
�   TST R3,#32  \ �5 bit
�   SWINE 256+5
�)   TST R3,#128 \ Disabled by � 21 bit
�   SWINE 256+21
�   LDRB R1,Streams
�   MOV R0,#3
�   SWI "OS_Byte"
�   LDR R1,ScreenClaimed
�   CMP R1,#0
   BEQ Wimp
   LDR R2,ScreenStart
   LDR R3,ScreenSize
    MOV R3,R3,LSR #1
*.TLoop4
4   LDMIA R1!,{R4-R11}
>   STMIA R2!,{R4-R11}
H   SUBS R3,R3,#32
R   BHI TLoop4
\   MOV R0,#0
f!   SWI "OS_ClaimScreenMemory"
p   B Finish
z	.Wimp
�   MVN R0,#0
�   MOV R1,#0
�   MOV R2,#0
�   MOV R3,#1280
�   SUB R3,R3,#1
�   MOV R4,#1024
�   SUB R4,R4,#1
�   SWI "XWimp_ForceRedraw"
�
�.Finish
�   MOV R0,PC
�+   �R R0,R0,#1<<27 \ Set interrupt flag
�'   TEQP R0,#0       \ Write to flag
   LDRB R0,Active
,   SUB R0,R0,#128  \ Restore active flag
   STRB R0,Active
$   ADR R14,RegStore
.   LDMIA R14,{R0-R14}^
8   LDR R14,[R14,#15*4]
B   MOVS PC,R14
L
V.EscapeS
`   EQUD 17
j   EQUS "Escape"
t
   EQUB 0
~   ALIGN
�
.EscError
�   MOV R0,#124
�.   SWI "XOS_Byte" \ Clear Escape condition
�   ADR R0,EscapeS
�.PrintError
�   ADD R0,R0,#4
�   SWI "OS_NewLine"
�   SWI "OS_Write0"
�   B ECLoop
�]
��
�)�("SAVE IntModule "+�~Space+"+"+�~P%)
�("SETTYPE IntModule FFA")
�
00000000  0d 00 0a 10 f4 20 20 3e  24 2e 49 6e 74 53 72 63  |.....  >$.IntSrc|
00000010  0d 00 14 19 f4 20 20 41  75 74 68 6f 72 20 53 74  |.....  Author St|
00000020  65 76 65 20 48 6f 61 72  65 0d 00 1e 13 f4 20 20  |eve Hoare.....  |
00000030  4a 61 6e 75 61 72 79 20  31 39 38 39 0d 00 28 27  |January 1989..('|
00000040  f4 20 20 53 6f 75 72 63  65 20 63 6f 64 65 20 66  |.  Source code f|
00000050  6f 72 20 49 6e 74 65 72  72 75 70 74 20 6d 6f 64  |or Interrupt mod|
00000060  75 6c 65 0d 00 32 04 0d  00 3c 11 de 20 53 70 61  |ule..2...<.. Spa|
00000070  63 65 20 26 31 30 30 30  0d 00 46 12 e3 20 49 25  |ce &1000..F.. I%|
00000080  3d 34 20 b8 20 37 20 88  20 33 0d 00 50 11 50 25  |=4 . 7 . 3..P.P%|
00000090  3d 30 3a 4f 25 3d 53 70  61 63 65 0d 00 5a 0b 5b  |=0:O%=Space..Z.[|
000000a0  4f 50 54 20 49 25 0d 00  64 19 20 20 20 45 51 55  |OPT I%..d.   EQU|
000000b0  44 20 30 3b 20 20 20 20  20 20 53 74 61 72 74 0d  |D 0;      Start.|
000000c0  00 6e 10 20 20 20 45 51  55 44 20 49 6e 69 74 0d  |.n.   EQUD Init.|
000000d0  00 78 11 20 20 20 45 51  55 44 20 46 69 6e 61 6c  |.x.   EQUD Final|
000000e0  0d 00 82 13 20 20 20 45  51 55 44 20 53 65 72 76  |....   EQUD Serv|
000000f0  69 63 65 0d 00 8c 11 20  20 20 45 51 55 44 20 54  |ice....   EQUD T|
00000100  69 74 6c 65 0d 00 96 10  20 20 20 45 51 55 44 20  |itle....   EQUD |
00000110  48 65 6c 70 0d 00 a0 11  20 20 20 45 51 55 44 20  |Help....   EQUD |
00000120  54 61 62 6c 65 0d 00 aa  2a 20 20 20 45 51 55 44  |Table...*   EQUD|
00000130  20 30 3b 20 20 20 20 20  20 53 57 49 20 73 74 75  | 0;      SWI stu|
00000140  66 66 20 28 6e 6f 74 20  6e 65 65 64 65 64 29 0d  |ff (not needed).|
00000150  00 b4 1d 20 20 20 45 51  55 44 20 30 3b 20 20 20  |...   EQUD 0;   |
00000160  20 20 20 53 57 49 20 73  74 75 66 66 0d 00 be 1d  |   SWI stuff....|
00000170  20 20 20 45 51 55 44 20  30 3b 20 20 20 20 20 20  |   EQUD 0;      |
00000180  53 57 49 20 73 74 75 66  66 0d 00 c8 1d 20 20 20  |SWI stuff....   |
00000190  45 51 55 44 20 30 3b 20  20 20 20 20 20 53 57 49  |EQUD 0;      SWI|
000001a0  20 73 74 75 66 66 0d 00  d2 09 2e 48 65 6c 70 0d  | stuff.....Help.|
000001b0  00 dc 3d 20 20 20 45 51  55 53 20 22 50 72 6f 67  |..=   EQUS "Prog|
000001c0  20 69 6e 74 65 72 72 75  70 74 22 3a 45 51 55 42  | interrupt":EQUB|
000001d0  20 39 3a 45 51 55 53 20  22 31 2e 30 30 20 28 31  | 9:EQUS "1.00 (1|
000001e0  35 20 4a 61 6e 20 31 39  38 39 29 22 0d 00 e6 0d  |5 Jan 1989)"....|
000001f0  20 20 20 45 51 55 42 20  30 0d 00 f0 0a 2e 54 69  |   EQUB 0.....Ti|
00000200  74 6c 65 0d 00 fa 17 20  20 20 45 51 55 53 20 22  |tle....   EQUS "|
00000210  49 6e 74 4d 6f 64 75 6c  65 22 0d 01 04 0d 20 20  |IntModule"....  |
00000220  20 45 51 55 42 20 30 0d  01 0e 0c 20 20 20 41 4c  | EQUB 0....   AL|
00000230  49 47 4e 0d 01 18 0a 2e  54 61 62 6c 65 0d 01 22  |IGN.....Table.."|
00000240  17 20 20 20 45 51 55 53  20 22 49 6e 74 65 72 72  |.   EQUS "Interr|
00000250  75 70 74 22 0d 01 2c 0d  20 20 20 45 51 55 42 20  |upt"..,.   EQUB |
00000260  30 0d 01 36 0c 20 20 20  41 4c 49 47 4e 0d 01 40  |0..6.   ALIGN..@|
00000270  15 20 20 20 45 51 55 44  20 49 6e 74 65 72 72 75  |.   EQUD Interru|
00000280  70 74 0d 01 4a 4e 20 20  20 45 51 55 44 20 26 46  |pt..JN   EQUD &F|
00000290  46 30 30 30 31 20 20 20  20 20 20 20 20 20 3b 20  |F0001         ; |
000002a0  20 61 74 20 6c 65 61 73  74 20 31 20 70 61 72 61  | at least 1 para|
000002b0  6d 65 74 65 72 2c 20 6e  6f 20 6d 61 78 69 6d 75  |meter, no maximu|
000002c0  6d 2c 20 6e 6f 74 20 47  53 54 72 61 6e 73 65 64  |m, not GSTransed|
000002d0  0d 01 54 18 20 20 20 45  51 55 44 20 49 6e 74 65  |..T.   EQUD Inte|
000002e0  72 72 75 70 74 53 79 6e  0d 01 5e 19 20 20 20 45  |rruptSyn..^.   E|
000002f0  51 55 44 20 49 6e 74 65  72 72 75 70 74 48 65 6c  |QUD InterruptHel|
00000300  70 0d 01 68 14 20 20 20  45 51 55 53 20 22 46 72  |p..h.   EQUS "Fr|
00000310  65 65 7a 65 22 0d 01 72  0d 20 20 20 45 51 55 42  |eeze"..r.   EQUB|
00000320  20 30 0d 01 7c 0c 20 20  20 41 4c 49 47 4e 0d 01  | 0..|.   ALIGN..|
00000330  86 12 20 20 20 45 51 55  44 20 46 72 65 65 7a 65  |..   EQUD Freeze|
00000340  0d 01 90 0d 20 20 20 45  51 55 44 20 30 0d 01 9a  |....   EQUD 0...|
00000350  15 20 20 20 45 51 55 44  20 46 72 65 65 7a 65 53  |.   EQUD FreezeS|
00000360  79 6e 0d 01 a4 16 20 20  20 45 51 55 44 20 46 72  |yn....   EQUD Fr|
00000370  65 65 7a 65 48 65 6c 70  0d 01 ae 30 20 20 20 45  |eezeHelp...0   E|
00000380  51 55 44 20 30 3b 20 20  20 20 20 20 20 20 20 20  |QUD 0;          |
00000390  20 20 20 20 45 6e 64 20  6f 66 20 63 6f 6d 6d 61  |    End of comma|
000003a0  6e 64 20 74 61 62 6c 65  0d 01 b8 04 0d 01 c2 12  |nd table........|
000003b0  2e 49 6e 74 65 72 72 75  70 74 48 65 6c 70 0d 01  |.InterruptHelp..|
000003c0  cc 7d 20 20 20 45 51 55  53 20 22 2a 49 6e 74 65  |.}   EQUS "*Inte|
000003d0  72 72 75 70 74 20 73 65  74 73 20 75 70 20 61 20  |rrupt sets up a |
000003e0  72 6f 75 74 69 6e 65 20  74 6f 20 73 74 6f 70 20  |routine to stop |
000003f0  61 6e 20 61 70 70 6c 69  63 61 74 69 6f 6e 20 77  |an application w|
00000400  69 74 68 20 61 20 6b 65  79 20 70 72 65 73 73 20  |ith a key press |
00000410  61 6e 64 20 70 65 72 66  6f 72 6d 20 61 20 73 70  |and perform a sp|
00000420  65 63 69 66 69 65 64 20  2a 63 6f 6d 6d 61 6e 64  |ecified *command|
00000430  22 3a 45 51 55 57 20 26  44 30 41 0d 01 d6 5d 20  |":EQUW &D0A...] |
00000440  20 20 45 51 55 53 20 22  49 66 20 6e 6f 20 63 6f  |  EQUS "If no co|
00000450  6d 6d 61 6e 64 20 69 73  20 67 69 76 65 6e 20 2a  |mmand is given *|
00000460  63 6f 6d 6d 61 6e 64 73  20 63 61 6e 20 62 65 20  |commands can be |
00000470  74 79 70 65 64 20 64 75  72 69 6e 67 20 74 68 65  |typed during the|
00000480  20 69 6e 74 65 72 72 75  70 74 69 6f 6e 22 3a 45  | interruption":E|
00000490  51 55 57 20 26 44 30 41  0d 01 e0 61 20 20 20 45  |QUW &D0A...a   E|
000004a0  51 55 53 20 22 2a 49 6e  74 65 72 72 75 70 74 20  |QUS "*Interrupt |
000004b0  3c 6b 65 79 3e 20 46 72  65 65 7a 65 20 2d 20 77  |<key> Freeze - w|
000004c0  61 69 74 73 20 75 6e 74  69 6c 20 74 68 65 20 73  |aits until the s|
000004d0  70 61 63 65 20 62 61 72  20 69 73 20 70 72 65 73  |pace bar is pres|
000004e0  73 65 64 20 26 20 72 65  6c 65 61 73 65 64 22 3a  |sed & released":|
000004f0  45 51 55 57 20 26 44 30  41 0d 01 ea 44 20 20 20  |EQUW &D0A...D   |
00000500  45 51 55 53 20 22 2a 49  6e 74 65 72 72 75 70 74  |EQUS "*Interrupt|
00000510  20 2d 31 20 64 69 73 61  62 6c 65 73 20 74 68 65  | -1 disables the|
00000520  20 69 6e 74 65 72 72 75  70 74 20 72 6f 75 74 69  | interrupt routi|
00000530  6e 65 22 3a 45 51 55 57  20 26 44 30 41 0d 01 f4  |ne":EQUW &D0A...|
00000540  11 2e 49 6e 74 65 72 72  75 70 74 53 79 6e 0d 01  |..InterruptSyn..|
00000550  fe 3a 20 20 20 45 51 55  53 20 22 53 79 6e 74 61  |.:   EQUS "Synta|
00000560  78 3a 20 2a 49 6e 74 65  72 72 75 70 74 20 3c 41  |x: *Interrupt <A|
00000570  53 43 49 49 20 63 6f 64  65 3e 20 5b 3c 2a 63 6f  |SCII code> [<*co|
00000580  6d 6d 61 6e 64 3e 5d 22  0d 02 08 0d 20 20 20 45  |mmand>]"....   E|
00000590  51 55 42 20 30 0d 02 12  0c 20 20 20 41 4c 49 47  |QUB 0....   ALIG|
000005a0  4e 0d 02 1c 04 0d 02 26  0f 2e 46 72 65 65 7a 65  |N......&..Freeze|
000005b0  48 65 6c 70 0d 02 30 5b  20 20 20 45 51 55 53 20  |Help..0[   EQUS |
000005c0  22 2a 46 72 65 65 7a 65  20 73 74 6f 70 73 20 70  |"*Freeze stops p|
000005d0  72 6f 63 65 73 73 69 6e  67 20 75 6e 74 69 6c 20  |rocessing until |
000005e0  74 68 65 20 73 70 61 63  65 62 61 72 20 69 73 20  |the spacebar is |
000005f0  70 72 65 73 73 65 64 20  61 6e 64 20 72 65 6c 65  |pressed and rele|
00000600  61 73 65 64 22 3a 45 51  55 57 20 26 44 30 41 0d  |ased":EQUW &D0A.|
00000610  02 3a 0e 2e 46 72 65 65  7a 65 53 79 6e 0d 02 44  |.:..FreezeSyn..D|
00000620  24 20 20 20 45 51 55 53  20 22 53 79 6e 74 61 78  |$   EQUS "Syntax|
00000630  3a 20 2a 46 72 65 65 7a  65 22 3a 45 51 55 42 20  |: *Freeze":EQUB |
00000640  30 0d 02 4e 0c 20 20 20  41 4c 49 47 4e 0d 02 58  |0..N.   ALIGN..X|
00000650  04 0d 02 62 0b 2e 46 72  65 65 7a 65 0d 02 6c 1d  |...b..Freeze..l.|
00000660  20 20 20 53 54 4d 46 44  20 52 31 33 21 2c 7b 52  |   STMFD R13!,{R|
00000670  30 2d 52 33 2c 52 31 34  7d 0d 02 76 12 20 20 20  |0-R3,R14}..v.   |
00000680  4d 4f 56 20 52 30 2c 23  31 32 39 0d 02 80 10 2e  |MOV R0,#129.....|
00000690  46 72 65 65 7a 65 4c 6f  6f 70 31 0d 02 8a 11 20  |FreezeLoop1.... |
000006a0  20 20 4d 56 4e 20 52 31  2c 23 39 38 0d 02 94 12  |  MVN R1,#98....|
000006b0  20 20 20 4d 4f 56 20 52  32 2c 23 32 35 35 0d 02  |   MOV R2,#255..|
000006c0  9e 14 20 20 20 53 57 49  20 22 4f 53 5f 42 79 74  |..   SWI "OS_Byt|
000006d0  65 22 0d 02 a8 12 20 20  20 43 4d 50 20 52 31 2c  |e"....   CMP R1,|
000006e0  23 32 35 35 0d 02 b2 14  20 20 20 43 4d 50 45 51  |#255....   CMPEQ|
000006f0  20 52 32 2c 23 32 35 35  0d 02 bc 16 20 20 20 42  | R2,#255....   B|
00000700  4e 45 20 46 72 65 65 7a  65 4c 6f 6f 70 31 0d 02  |NE FreezeLoop1..|
00000710  c6 10 2e 46 72 65 65 7a  65 4c 6f 6f 70 32 0d 02  |...FreezeLoop2..|
00000720  d0 11 20 20 20 4d 56 4e  20 52 31 2c 23 39 38 0d  |..   MVN R1,#98.|
00000730  02 da 12 20 20 20 4d 4f  56 20 52 32 2c 23 32 35  |...   MOV R2,#25|
00000740  35 0d 02 e4 14 20 20 20  53 57 49 20 22 4f 53 5f  |5....   SWI "OS_|
00000750  42 79 74 65 22 0d 02 ee  12 20 20 20 43 4d 50 20  |Byte"....   CMP |
00000760  52 31 2c 23 32 35 35 0d  02 f8 14 20 20 20 43 4d  |R1,#255....   CM|
00000770  50 45 51 20 52 32 2c 23  32 35 35 0d 03 02 16 20  |PEQ R2,#255.... |
00000780  20 20 42 45 51 20 46 72  65 65 7a 65 4c 6f 6f 70  |  BEQ FreezeLoop|
00000790  32 0d 03 0c 11 20 20 20  4d 4f 56 20 52 30 2c 23  |2....   MOV R0,#|
000007a0  32 31 0d 03 16 10 20 20  20 4d 4f 56 20 52 31 2c  |21....   MOV R1,|
000007b0  23 30 0d 03 20 14 20 20  20 53 57 49 20 22 4f 53  |#0.. .   SWI "OS|
000007c0  5f 42 79 74 65 22 0d 03  2a 1c 20 20 20 4c 44 4d  |_Byte"..*.   LDM|
000007d0  46 44 20 52 31 33 21 2c  7b 52 30 2d 52 33 2c 50  |FD R13!,{R0-R3,P|
000007e0  43 7d 0d 03 34 04 0d 03  3e 0c 2e 53 65 72 76 69  |C}..4...>..Servi|
000007f0  63 65 0d 03 48 2c 20 20  20 43 4d 50 20 52 31 2c  |ce..H,   CMP R1,|
00000800  23 26 32 37 20 20 20 20  20 20 5c 20 49 73 20 74  |#&27      \ Is t|
00000810  68 69 73 20 70 6f 73 74  20 72 65 73 65 74 0d 03  |his post reset..|
00000820  52 27 20 20 20 4d 4f 56  4e 45 20 50 43 2c 52 31  |R'   MOVNE PC,R1|
00000830  34 20 20 20 20 20 5c 20  52 65 74 75 72 6e 20 69  |4     \ Return i|
00000840  66 20 6e 6f 74 0d 03 5c  1d 20 20 20 53 54 4d 46  |f not..\.   STMF|
00000850  44 20 52 31 33 21 2c 7b  52 30 2d 52 32 2c 52 31  |D R13!,{R0-R2,R1|
00000860  34 7d 0d 03 66 15 20 20  20 4c 44 52 42 20 52 30  |4}..f.   LDRB R0|
00000870  2c 41 63 74 69 76 65 0d  03 70 12 20 20 20 43 4d  |,Active..p.   CM|
00000880  50 20 52 30 2c 23 31 32  38 0d 03 7a 17 20 20 20  |P R0,#128..z.   |
00000890  53 55 42 43 53 20 52 30  2c 52 30 2c 23 31 32 38  |SUBCS R0,R0,#128|
000008a0  0d 03 84 46 20 20 20 53  54 52 42 20 52 30 2c 41  |...F   STRB R0,A|
000008b0  63 74 69 76 65 20 20 5c  20 49 66 20 61 63 74 69  |ctive  \ If acti|
000008c0  76 65 20 64 75 72 69 6e  67 20 72 65 73 65 74 20  |ve during reset |
000008d0  74 68 65 6e 20 63 6c 65  61 72 20 61 63 74 69 76  |then clear activ|
000008e0  65 20 66 6c 61 67 0d 03  8e 10 20 20 20 4d 4f 56  |e flag....   MOV|
000008f0  20 52 30 2c 23 30 0d 03  98 31 20 20 20 53 54 52  | R0,#0...1   STR|
00000900  42 20 52 30 2c 43 6c 61  69 6d 65 64 20 20 5c 20  |B R0,Claimed  \ |
00000910  52 65 73 65 74 20 66 6c  61 67 73 20 74 6f 20 69  |Reset flags to i|
00000920  6e 64 69 63 61 74 65 0d  03 a2 29 20 20 20 53 54  |ndicate...)   ST|
00000930  52 42 20 52 30 2c 45 6e  61 62 6c 65 64 20 20 5c  |RB R0,Enabled  \|
00000940  20 6c 6f 73 73 20 6f 66  20 63 6f 6e 74 72 6f 6c  | loss of control|
00000950  0d 03 ac 39 20 20 20 42  20 43 68 65 63 6b 53 74  |...9   B CheckSt|
00000960  61 74 65 20 20 20 20 20  5c 20 52 65 63 6c 61 69  |ate     \ Reclai|
00000970  6d 20 76 65 63 74 6f 72  20 61 6e 64 20 65 6e 61  |m vector and ena|
00000980  62 6c 65 20 65 76 65 6e  74 0d 03 b6 04 0d 03 c0  |ble event.......|
00000990  09 2e 49 6e 69 74 0d 03  ca 1d 20 20 20 53 54 4d  |..Init....   STM|
000009a0  46 44 20 52 31 33 21 2c  7b 52 30 2d 52 32 2c 52  |FD R13!,{R0-R2,R|
000009b0  31 34 7d 0d 03 d4 16 20  20 20 4c 44 52 42 20 52  |14}....   LDRB R|
000009c0  30 2c 43 6c 61 69 6d 65  64 0d 03 de 0f 2e 43 68  |0,Claimed.....Ch|
000009d0  65 63 6b 53 74 61 74 65  0d 03 e8 12 20 20 20 43  |eckState....   C|
000009e0  4d 50 20 52 30 2c 23 32  35 35 0d 03 f2 2f 20 20  |MP R0,#255.../  |
000009f0  20 42 45 51 20 49 6e 69  74 31 20 20 20 20 20 20  | BEQ Init1      |
00000a00  20 5c 20 56 65 63 74 6f  72 20 61 6c 72 65 61 64  | \ Vector alread|
00000a10  79 20 63 6c 61 69 6d 65  64 0d 03 fc 12 20 20 20  |y claimed....   |
00000a20  4d 4f 56 20 52 30 2c 23  32 35 35 0d 04 06 16 20  |MOV R0,#255.... |
00000a30  20 20 53 54 52 42 20 52  30 2c 43 6c 61 69 6d 65  |  STRB R0,Claime|
00000a40  64 0d 04 10 20 20 20 20  4d 4f 56 20 52 30 2c 23  |d...    MOV R0,#|
00000a50  31 36 20 5c 20 45 76 65  6e 74 20 76 65 63 74 6f  |16 \ Event vecto|
00000a60  72 0d 04 1a 18 20 20 20  41 44 52 20 52 31 2c 45  |r....   ADR R1,E|
00000a70  76 65 6e 74 45 6e 74 72  79 0d 04 24 10 20 20 20  |ventEntry..$.   |
00000a80  4d 4f 56 20 52 32 2c 23  30 0d 04 2e 15 20 20 20  |MOV R2,#0....   |
00000a90  53 57 49 20 22 4f 53 5f  43 6c 61 69 6d 22 0d 04  |SWI "OS_Claim"..|
00000aa0  38 0a 2e 49 6e 69 74 31  0d 04 42 16 20 20 20 4c  |8..Init1..B.   L|
00000ab0  44 52 42 20 52 30 2c 45  6e 61 62 6c 65 64 0d 04  |DRB R0,Enabled..|
00000ac0  4c 12 20 20 20 43 4d 50  20 52 30 2c 23 32 35 35  |L.   CMP R0,#255|
00000ad0  0d 04 56 30 20 20 20 4c  44 4d 45 51 46 44 20 52  |..V0   LDMEQFD R|
00000ae0  31 33 21 2c 7b 50 43 7d  20 5c 20 45 76 65 6e 74  |13!,{PC} \ Event|
00000af0  20 61 6c 72 65 61 64 79  20 65 6e 61 62 6c 65 64  | already enabled|
00000b00  0d 04 60 12 20 20 20 4d  4f 56 20 52 30 2c 23 32  |..`.   MOV R0,#2|
00000b10  35 35 0d 04 6a 16 20 20  20 53 54 52 42 20 52 30  |55..j.   STRB R0|
00000b20  2c 45 6e 61 62 6c 65 64  0d 04 74 20 20 20 20 4d  |,Enabled..t    M|
00000b30  4f 56 20 52 30 2c 23 31  34 20 5c 20 45 6e 61 62  |OV R0,#14 \ Enab|
00000b40  6c 65 20 65 76 65 6e 74  0d 04 7e 28 20 20 20 4d  |le event..~(   M|
00000b50  4f 56 20 52 31 2c 23 32  20 20 5c 20 4b 65 79 62  |OV R1,#2  \ Keyb|
00000b60  6f 61 72 64 20 69 6e 70  75 74 20 65 76 65 6e 74  |oard input event|
00000b70  0d 04 88 14 20 20 20 53  57 49 20 22 4f 53 5f 42  |....   SWI "OS_B|
00000b80  79 74 65 22 0d 04 92 1c  20 20 20 4c 44 4d 46 44  |yte"....   LDMFD|
00000b90  20 52 31 33 21 2c 7b 52  30 2d 52 32 2c 50 43 7d  | R13!,{R0-R2,PC}|
00000ba0  0d 04 9c 04 0d 04 a6 0a  2e 46 69 6e 61 6c 0d 04  |.........Final..|
00000bb0  b0 17 20 20 20 53 54 4d  46 44 20 52 31 33 21 2c  |..   STMFD R13!,|
00000bc0  7b 52 31 34 7d 0d 04 ba  16 20 20 20 4c 44 52 42  |{R14}....   LDRB|
00000bd0  20 52 30 2c 45 6e 61 62  6c 65 64 0d 04 c4 12 20  | R0,Enabled.... |
00000be0  20 20 43 4d 50 20 52 30  2c 23 32 35 35 0d 04 ce  |  CMP R0,#255...|
00000bf0  26 20 20 20 42 4e 45 20  46 69 6e 61 6c 31 20 20  |&   BNE Final1  |
00000c00  20 5c 20 41 6c 72 65 61  64 79 20 64 69 73 61 62  | \ Already disab|
00000c10  6c 65 64 0d 04 d8 10 20  20 20 4d 4f 56 20 52 30  |led....   MOV R0|
00000c20  2c 23 30 0d 04 e2 16 20  20 20 53 54 52 42 20 52  |,#0....   STRB R|
00000c30  30 2c 45 6e 61 62 6c 65  64 0d 04 ec 21 20 20 20  |0,Enabled...!   |
00000c40  4d 4f 56 20 52 30 2c 23  31 33 20 5c 20 44 69 73  |MOV R0,#13 \ Dis|
00000c50  61 62 6c 65 20 65 76 65  6e 74 0d 04 f6 28 20 20  |able event...(  |
00000c60  20 4d 4f 56 20 52 31 2c  23 32 20 20 5c 20 4b 65  | MOV R1,#2  \ Ke|
00000c70  79 62 6f 61 72 64 20 69  6e 70 75 74 20 65 76 65  |yboard input eve|
00000c80  6e 74 0d 05 00 14 20 20  20 53 57 49 20 22 4f 53  |nt....   SWI "OS|
00000c90  5f 42 79 74 65 22 0d 05  0a 0b 2e 46 69 6e 61 6c  |_Byte".....Final|
00000ca0  31 0d 05 14 16 20 20 20  4c 44 52 42 20 52 30 2c  |1....   LDRB R0,|
00000cb0  43 6c 61 69 6d 65 64 0d  05 1e 12 20 20 20 43 4d  |Claimed....   CM|
00000cc0  50 20 52 30 2c 23 32 35  35 0d 05 28 32 20 20 20  |P R0,#255..(2   |
00000cd0  4c 44 4d 4e 45 46 44 20  52 31 33 21 2c 7b 50 43  |LDMNEFD R13!,{PC|
00000ce0  7d 20 5c 20 56 65 63 74  6f 72 20 61 6c 72 65 61  |} \ Vector alrea|
00000cf0  64 79 20 72 65 6c 65 61  73 65 64 0d 05 32 10 20  |dy released..2. |
00000d00  20 20 4d 4f 56 20 52 30  2c 23 30 0d 05 3c 16 20  |  MOV R0,#0..<. |
00000d10  20 20 53 54 52 42 20 52  30 2c 43 6c 61 69 6d 65  |  STRB R0,Claime|
00000d20  64 0d 05 46 20 20 20 20  4d 4f 56 20 52 30 2c 23  |d..F    MOV R0,#|
00000d30  31 36 20 5c 20 45 76 65  6e 74 20 76 65 63 74 6f  |16 \ Event vecto|
00000d40  72 0d 05 50 18 20 20 20  41 44 52 20 52 31 2c 45  |r..P.   ADR R1,E|
00000d50  76 65 6e 74 45 6e 74 72  79 0d 05 5a 10 20 20 20  |ventEntry..Z.   |
00000d60  4d 4f 56 20 52 32 2c 23  30 0d 05 64 17 20 20 20  |MOV R2,#0..d.   |
00000d70  53 57 49 20 22 4f 53 5f  52 65 6c 65 61 73 65 22  |SWI "OS_Release"|
00000d80  0d 05 6e 16 20 20 20 4c  44 4d 46 44 20 52 31 33  |..n.   LDMFD R13|
00000d90  21 2c 7b 50 43 7d 0d 05  78 04 0d 05 82 0e 2e 49  |!,{PC}..x......I|
00000da0  6e 74 65 72 72 75 70 74  0d 05 8c 1d 20 20 20 53  |nterrupt....   S|
00000db0  54 4d 46 44 20 52 31 33  21 2c 7b 52 30 2d 52 34  |TMFD R13!,{R0-R4|
00000dc0  2c 52 31 34 7d 0d 05 96  10 20 20 20 4d 4f 56 20  |,R14}....   MOV |
00000dd0  52 33 2c 52 30 0d 05 a0  10 20 20 20 4d 4f 56 20  |R3,R0....   MOV |
00000de0  52 34 2c 52 31 0d 05 aa  14 20 20 20 41 44 52 20  |R4,R1....   ADR |
00000df0  52 30 2c 42 75 66 66 65  72 0d 05 b4 09 2e 49 6e  |R0,Buffer.....In|
00000e00  74 31 0d 05 be 31 20 20  20 4c 44 52 42 20 52 31  |t1...1   LDRB R1|
00000e10  2c 5b 52 33 5d 2c 23 31  20 5c 20 47 65 74 20 6e  |,[R3],#1 \ Get n|
00000e20  65 78 74 20 62 79 74 65  20 6f 66 20 63 6f 6d 6d  |ext byte of comm|
00000e30  61 6e 64 0d 05 c8 27 20  20 20 43 4d 50 20 52 31  |and...'   CMP R1|
00000e40  2c 23 33 32 20 20 20 20  20 20 5c 20 49 73 20 69  |,#32      \ Is i|
00000e50  74 20 61 20 73 70 61 63  65 3f 0d 05 d2 29 20 20  |t a space?...)  |
00000e60  20 ec 51 20 52 31 2c 23  31 33 20 20 20 20 5c 20  | .Q R1,#13    \ |
00000e70  49 66 20 73 6f 20 63 6f  6e 76 65 72 74 20 74 6f  |If so convert to|
00000e80  20 43 52 0d 05 dc 28 20  20 20 53 54 52 42 20 52  | CR...(   STRB R|
00000e90  31 2c 5b 52 30 5d 2c 23  31 20 5c 20 53 74 6f 72  |1,[R0],#1 \ Stor|
00000ea0  65 20 69 6e 20 62 75 66  66 65 72 0d 05 e6 11 20  |e in buffer.... |
00000eb0  20 20 43 4d 50 20 52 31  2c 23 31 33 0d 05 f0 34  |  CMP R1,#13...4|
00000ec0  20 20 20 42 4e 45 20 49  6e 74 31 20 20 20 20 20  |   BNE Int1     |
00000ed0  20 20 20 5c 20 4e 6f 74  20 61 74 20 65 6e 64 20  |   \ Not at end |
00000ee0  73 6f 20 67 65 74 20 6e  65 78 74 20 62 79 74 65  |so get next byte|
00000ef0  0d 05 fa 14 20 20 20 41  44 52 20 52 30 2c 42 75  |....   ADR R0,Bu|
00000f00  66 66 65 72 0d 06 04 16  20 20 20 41 44 52 20 52  |ffer....   ADR R|
00000f10  31 2c 52 65 67 53 74 6f  72 65 0d 06 0e 11 20 20  |1,RegStore....  |
00000f20  20 4d 4f 56 20 52 32 2c  23 36 33 0d 06 18 23 20  | MOV R2,#63...# |
00000f30  20 20 53 57 49 20 22 58  4f 53 5f 45 76 61 6c 75  |  SWI "XOS_Evalu|
00000f40  61 74 65 45 78 70 72 65  73 73 69 6f 6e 22 0d 06  |ateExpression"..|
00000f50  22 0f 20 20 20 42 56 53  20 49 6e 74 35 0d 06 2c  |".   BVS Int5..,|
00000f60  29 20 20 20 43 4d 50 20  52 31 2c 23 30 20 20 20  |)   CMP R1,#0   |
00000f70  20 20 20 5c 20 49 73 20  69 74 20 61 6e 20 69 6e  |   \ Is it an in|
00000f80  74 65 67 65 72 3f 0d 06  36 27 20 20 20 42 45 51  |teger?..6'   BEQ|
00000f90  20 49 6e 74 32 20 20 20  20 20 20 20 5c 20 59 65  | Int2       \ Ye|
00000fa0  73 20 73 6f 20 63 6f 6e  74 69 6e 75 65 0d 06 40  |s so continue..@|
00000fb0  09 2e 49 6e 74 33 0d 06  4a 15 20 20 20 41 44 52  |..Int3..J.   ADR|
00000fc0  20 52 30 2c 43 6f 64 65  45 72 72 0d 06 54 09 2e  | R0,CodeErr..T..|
00000fd0  49 6e 74 35 0d 06 5e 19  20 20 20 4c 44 4d 46 44  |Int5..^.   LDMFD|
00000fe0  20 52 31 33 21 2c 7b 52  31 2d 52 35 7d 0d 06 68  | R13!,{R1-R5}..h|
00000ff0  0e 20 20 20 42 20 45 72  72 6f 72 0d 06 72 09 2e  |.   B Error..r..|
00001000  49 6e 74 32 0d 06 7c 12  20 20 20 43 4d 50 20 52  |Int2..|.   CMP R|
00001010  32 2c 23 32 35 36 0d 06  86 28 20 20 20 42 43 43  |2,#256...(   BCC|
00001020  20 49 6e 74 34 20 20 20  20 20 20 5c 20 56 61 6c  | Int4      \ Val|
00001030  69 64 20 63 6f 64 65 20  6e 75 6d 62 65 72 0d 06  |id code number..|
00001040  90 20 20 20 20 43 4d 4e  20 52 32 2c 23 31 20 20  |.    CMN R2,#1  |
00001050  20 20 20 5c 20 49 73 20  69 74 20 2d 31 3f 0d 06  |   \ Is it -1?..|
00001060  9a 30 20 20 20 42 4e 45  20 49 6e 74 33 20 20 20  |.0   BNE Int3   |
00001070  20 20 20 5c 20 4e 6f 20  73 6f 20 6e 6f 74 20 76  |   \ No so not v|
00001080  61 6c 69 64 20 70 61 72  61 6d 65 74 65 72 0d 06  |alid parameter..|
00001090  a4 15 20 20 20 4c 44 52  42 20 52 31 2c 41 63 74  |..   LDRB R1,Act|
000010a0  69 76 65 0d 06 ae 10 20  20 20 4d 4f 56 20 52 30  |ive....   MOV R0|
000010b0  2c 23 30 0d 06 b8 12 20  20 20 43 4d 50 20 52 31  |,#0....   CMP R1|
000010c0  2c 23 31 32 38 0d 06 c2  14 20 20 20 4d 4f 56 43  |,#128....   MOVC|
000010d0  53 20 52 30 2c 23 31 32  38 0d 06 cc 2e 20 20 20  |S R0,#128....   |
000010e0  53 54 52 42 20 52 30 2c  41 63 74 69 76 65 20 20  |STRB R0,Active  |
000010f0  5c 20 43 6c 65 61 72 20  74 68 65 20 61 63 74 69  |\ Clear the acti|
00001100  76 65 20 66 6c 61 67 0d  06 d6 1c 20 20 20 4c 44  |ve flag....   LD|
00001110  4d 46 44 20 52 31 33 21  2c 7b 52 30 2d 52 34 2c  |MFD R13!,{R0-R4,|
00001120  50 43 7d 0d 06 e0 09 2e  49 6e 74 34 0d 06 ea 12  |PC}.....Int4....|
00001130  20 20 20 41 44 52 20 52  31 2c 43 6f 64 65 0d 06  |   ADR R1,Code..|
00001140  f4 32 20 20 20 53 54 52  42 20 52 32 2c 5b 52 31  |.2   STRB R2,[R1|
00001150  5d 20 20 20 5c 20 53 74  6f 72 65 20 74 68 65 20  |]   \ Store the |
00001160  6b 65 79 63 6f 64 65 20  72 65 71 75 69 72 65 64  |keycode required|
00001170  0d 06 fe 15 20 20 20 4c  44 52 42 20 52 31 2c 41  |....   LDRB R1,A|
00001180  63 74 69 76 65 0d 07 08  13 20 20 20 80 20 52 31  |ctive....   . R1|
00001190  2c 52 31 2c 23 31 32 38  0d 07 12 13 20 20 20 41  |,R1,#128....   A|
000011a0  44 44 20 52 31 2c 52 31  2c 23 31 0d 07 1c 2b 20  |DD R1,R1,#1...+ |
000011b0  20 20 43 4d 50 20 52 34  2c 23 31 20 20 20 20 20  |  CMP R4,#1     |
000011c0  20 5c 20 4f 6e 6c 79 20  6f 6e 65 20 70 61 72 61  | \ Only one para|
000011d0  6d 65 74 65 72 3f 0d 07  26 15 20 20 20 41 44 44  |meter?..&.   ADD|
000011e0  4e 45 20 52 31 2c 52 31  2c 23 31 0d 07 30 15 20  |NE R1,R1,#1..0. |
000011f0  20 20 53 54 52 42 20 52  31 2c 41 63 74 69 76 65  |  STRB R1,Active|
00001200  0d 07 3a 3b 20 20 20 4c  44 4d 45 51 46 44 20 52  |..:;   LDMEQFD R|
00001210  31 33 21 2c 7b 52 30 2d  52 34 2c 50 43 7d 20 5c  |13!,{R0-R4,PC} \|
00001220  20 49 66 20 6e 6f 20 6f  74 68 65 72 20 70 61 72  | If no other par|
00001230  61 6d 20 74 68 65 6e 20  65 6e 64 0d 07 44 10 20  |am then end..D. |
00001240  20 20 4d 4f 56 20 52 30  2c 52 33 0d 07 4e 15 20  |  MOV R0,R3..N. |
00001250  20 20 41 44 52 20 52 31  2c 43 6f 6d 6d 61 6e 64  |  ADR R1,Command|
00001260  0d 07 58 0d 2e 43 6f 6d  4d 6f 76 65 31 0d 07 62  |..X..ComMove1..b|
00001270  16 20 20 20 4c 44 52 42  20 52 32 2c 5b 52 30 5d  |.   LDRB R2,[R0]|
00001280  2c 23 31 0d 07 6c 16 20  20 20 53 54 52 42 20 52  |,#1..l.   STRB R|
00001290  32 2c 5b 52 31 5d 2c 23  31 0d 07 76 11 20 20 20  |2,[R1],#1..v.   |
000012a0  43 4d 50 20 52 32 2c 23  31 33 0d 07 80 13 20 20  |CMP R2,#13....  |
000012b0  20 42 4e 45 20 43 6f 6d  4d 6f 76 65 31 0d 07 8a  | BNE ComMove1...|
000012c0  1c 20 20 20 4c 44 4d 46  44 20 52 31 33 21 2c 7b  |.   LDMFD R13!,{|
000012d0  52 30 2d 52 34 2c 50 43  7d 0d 07 94 04 0d 07 9e  |R0-R4,PC}.......|
000012e0  0c 2e 43 6f 64 65 45 72  72 0d 07 a8 11 20 20 20  |..CodeErr....   |
000012f0  45 51 55 44 20 36 37 37  34 35 0d 07 b2 23 20 20  |EQUD 67745...#  |
00001300  20 45 51 55 53 20 22 42  61 64 20 6b 65 79 63 6f  | EQUS "Bad keyco|
00001310  64 65 20 70 61 72 61 6d  65 74 65 72 22 0d 07 bc  |de parameter"...|
00001320  0d 20 20 20 45 51 55 42  20 30 0d 07 c6 0c 20 20  |.   EQUB 0....  |
00001330  20 41 4c 49 47 4e 0d 07  d0 04 0d 07 da 0a 2e 45  | ALIGN.........E|
00001340  72 72 6f 72 0d 07 e4 10  20 20 20 4d 4f 56 20 52  |rror....   MOV R|
00001350  31 2c 50 43 0d 07 ee 29  20 20 20 84 52 20 52 31  |1,PC...)   .R R1|
00001360  2c 52 31 2c 23 31 3c 3c  32 38 20 5c 20 53 65 74  |,R1,#1<<28 \ Set|
00001370  20 22 56 22 20 66 6c 61  67 20 62 69 74 0d 07 f8  | "V" flag bit...|
00001380  11 20 20 20 54 45 51 50  20 52 31 2c 23 30 0d 08  |.   TEQP R1,#0..|
00001390  02 16 20 20 20 4c 44 4d  46 44 20 52 31 33 21 2c  |..   LDMFD R13!,|
000013a0  7b 50 43 7d 0d 08 0c 04  0d 08 16 0c 2e 43 6c 61  |{PC}.........Cla|
000013b0  69 6d 65 64 0d 08 20 3f  20 20 20 45 51 55 42 20  |imed.. ?   EQUB |
000013c0  30 20 5c 20 73 65 74 20  74 6f 20 32 35 35 20 77  |0 \ set to 255 w|
000013d0  68 65 6e 20 6d 6f 64 75  6c 65 20 68 61 73 20 63  |hen module has c|
000013e0  6c 61 69 6d 65 64 20 65  76 65 6e 74 20 76 65 63  |laimed event vec|
000013f0  74 6f 72 0d 08 2a 0c 2e  45 6e 61 62 6c 65 64 0d  |tor..*..Enabled.|
00001400  08 34 38 20 20 20 45 51  55 42 20 30 20 5c 20 73  |.48   EQUB 0 \ s|
00001410  65 74 20 74 6f 20 32 35  35 20 77 68 65 6e 20 6d  |et to 255 when m|
00001420  6f 64 75 6c 65 20 68 61  73 20 65 6e 61 62 6c 65  |odule has enable|
00001430  64 20 65 76 65 6e 74 0d  08 3e 0c 20 20 20 41 4c  |d event..>.   AL|
00001440  49 47 4e 0d 08 48 04 0d  08 52 0f 2e 45 76 65 6e  |IGN..H...R..Even|
00001450  74 45 6e 74 72 79 0d 08  5c 1a 20 20 20 53 54 4d  |tEntry..\.   STM|
00001460  46 44 20 52 31 33 21 2c  7b 52 37 2c 52 31 34 7d  |FD R13!,{R7,R14}|
00001470  0d 08 66 13 20 20 20 4c  44 52 42 20 52 37 2c 43  |..f.   LDRB R7,C|
00001480  6f 64 65 0d 08 70 10 20  20 20 43 4d 50 20 52 37  |ode..p.   CMP R7|
00001490  2c 52 32 0d 08 7a 34 20  20 20 4c 44 4d 4e 45 46  |,R2..z4   LDMNEF|
000014a0  44 20 52 31 33 21 2c 7b  52 37 2c 50 43 7d 20 5c  |D R13!,{R7,PC} \|
000014b0  20 4e 6f 74 20 6f 75 72  20 6b 65 79 20 73 6f 20  | Not our key so |
000014c0  70 61 73 73 20 6f 6e 0d  08 84 15 20 20 20 4c 44  |pass on....   LD|
000014d0  52 42 20 52 37 2c 41 63  74 69 76 65 0d 08 8e 2e  |RB R7,Active....|
000014e0  20 20 20 43 4d 50 20 52  37 2c 23 31 20 20 20 20  |   CMP R7,#1    |
000014f0  20 20 20 20 20 20 20 5c  20 41 72 65 20 77 65 20  |       \ Are we |
00001500  61 63 74 69 76 65 20 61  6e 64 0d 08 98 2e 20 20  |active and....  |
00001510  20 43 4d 50 4e 45 20 52  37 2c 23 32 20 20 20 20  | CMPNE R7,#2    |
00001520  20 20 20 20 20 5c 20 6e  6f 74 20 62 75 73 79 20  |     \ not busy |
00001530  61 6c 72 65 61 64 79 3f  0d 08 a2 2c 20 20 20 4c  |already?...,   L|
00001540  44 4d 4e 45 46 44 20 52  31 33 21 2c 7b 52 37 2c  |DMNEFD R13!,{R7,|
00001550  50 43 7d 20 5c 20 4e 6f  2c 20 73 6f 20 70 61 73  |PC} \ No, so pas|
00001560  73 20 6f 6e 0d 08 ac 1c  20 20 20 53 54 4d 46 44  |s on....   STMFD|
00001570  20 52 31 33 21 2c 7b 52  30 2c 52 31 2c 52 36 7d  | R13!,{R0,R1,R6}|
00001580  0d 08 b6 10 20 20 20 4d  4f 56 20 52 36 2c 50 43  |....   MOV R6,PC|
00001590  0d 08 c0 12 20 20 20 84  52 20 52 37 2c 52 36 2c  |....   .R R7,R6,|
000015a0  23 33 0d 08 ca 23 20 20  20 54 45 51 50 20 52 37  |#3...#   TEQP R7|
000015b0  2c 23 30 20 20 5c 20 45  6e 74 65 72 20 53 56 43  |,#0  \ Enter SVC|
000015c0  20 6d 6f 64 65 0d 08 d4  12 20 20 20 4d 4f 56 4e  | mode....   MOVN|
000015d0  56 20 52 30 2c 52 30 0d  08 de 2d 20 20 20 53 54  |V R0,R0...-   ST|
000015e0  4d 46 44 20 52 31 33 21  2c 7b 52 31 34 7d 20 5c  |MFD R13!,{R14} \|
000015f0  20 53 74 6f 72 65 20 53  56 43 20 6d 6f 64 65 20  | Store SVC mode |
00001600  6c 69 6e 6b 0d 08 e8 16  20 20 20 41 44 52 20 52  |link....   ADR R|
00001610  30 2c 52 65 67 53 74 6f  72 65 0d 08 f2 14 20 20  |0,RegStore....  |
00001620  20 41 44 52 20 52 31 2c  52 65 74 75 72 6e 0d 08  | ADR R1,Return..|
00001630  fc 18 20 20 20 53 57 49  20 22 4f 53 5f 43 61 6c  |..   SWI "OS_Cal|
00001640  6c 42 61 63 6b 22 0d 09  06 1b 20 20 20 53 57 49  |lBack"....   SWI|
00001650  20 22 4f 53 5f 53 65 74  43 61 6c 6c 42 61 63 6b  | "OS_SetCallBack|
00001660  22 0d 09 10 2f 20 20 20  4c 44 4d 46 44 20 52 31  |".../   LDMFD R1|
00001670  33 21 2c 7b 52 31 34 7d  20 5c 20 52 65 73 74 6f  |3!,{R14} \ Resto|
00001680  72 65 20 53 56 43 20 6d  6f 64 65 20 6c 69 6e 6b  |re SVC mode link|
00001690  0d 09 1a 2f 20 20 20 54  45 51 50 20 52 36 2c 23  |.../   TEQP R6,#|
000016a0  30 20 20 20 20 20 20 20  5c 20 52 65 73 74 6f 72  |0       \ Restor|
000016b0  65 20 6f 72 69 67 69 6e  61 6c 20 6d 6f 64 65 0d  |e original mode.|
000016c0  09 24 12 20 20 20 4d 4f  56 4e 56 20 52 30 2c 52  |.$.   MOVNV R0,R|
000016d0  30 0d 09 2e 22 20 20 20  4c 44 4d 46 44 20 52 31  |0..."   LDMFD R1|
000016e0  33 21 2c 7b 52 30 2c 52  31 2c 52 36 2c 52 37 2c  |3!,{R0,R1,R6,R7,|
000016f0  50 43 7d 0d 09 38 04 0d  09 42 0b 2e 41 63 74 69  |PC}..8...B..Acti|
00001700  76 65 0d 09 4c 82 20 20  20 45 51 55 44 20 30 20  |ve..L.   EQUD 0 |
00001710  20 20 5c 20 30 3d 4e 6f  74 20 61 63 74 69 76 65  |  \ 0=Not active|
00001720  2c 31 3d 65 6e 74 65 72  20 63 6f 6d 6d 61 6e 64  |,1=enter command|
00001730  73 2c 32 3d 65 78 65 63  75 74 65 20 73 70 65 63  |s,2=execute spec|
00001740  69 66 69 65 64 20 63 6f  6d 6d 61 6e 64 20 2d 20  |ified command - |
00001750  31 32 38 20 61 64 64 65  64 20 74 6f 20 63 75 72  |128 added to cur|
00001760  72 65 6e 74 20 76 61 6c  75 65 20 77 68 69 6c 65  |rent value while|
00001770  20 61 63 74 75 61 6c 6c  79 20 70 72 6f 63 65 73  | actually proces|
00001780  73 69 6e 67 0d 09 56 09  2e 43 6f 64 65 0d 09 60  |sing..V..Code..`|
00001790  2e 20 20 20 45 51 55 44  20 30 20 20 20 5c 20 53  |.   EQUD 0   \ S|
000017a0  74 6f 72 61 67 65 20 66  6f 72 20 6b 65 79 63 6f  |torage for keyco|
000017b0  64 65 20 72 65 71 75 69  72 65 64 0d 09 6a 04 0d  |de required..j..|
000017c0  09 74 0b 2e 42 75 66 66  65 72 0d 09 7e 08 20 20  |.t..Buffer..~.  |
000017d0  20 5d 0d 09 88 04 0d 09  92 13 50 25 2b 3d 32 35  | ]........P%+=25|
000017e0  36 3a 4f 25 2b 3d 32 35  36 0d 09 9c 0e 43 6f 6d  |6:O%+=256....Com|
000017f0  6d 61 6e 64 3d 50 25 0d  09 a6 13 50 25 2b 3d 32  |mand=P%....P%+=2|
00001800  35 36 3a 4f 25 2b 3d 32  35 36 0d 09 b0 0f 52 65  |56:O%+=256....Re|
00001810  67 53 74 6f 72 65 3d 50  25 0d 09 ba 11 50 25 2b  |gStore=P%....P%+|
00001820  3d 36 34 3a 4f 25 2b 3d  36 34 0d 09 c4 0b 5b 4f  |=64:O%+=64....[O|
00001830  50 54 20 49 25 0d 09 ce  0b 2e 52 65 74 75 72 6e  |PT I%.....Return|
00001840  0d 09 d8 15 20 20 20 4c  44 52 42 20 52 30 2c 41  |....   LDRB R0,A|
00001850  63 74 69 76 65 0d 09 e2  15 20 20 20 41 44 44 20  |ctive....   ADD |
00001860  52 30 2c 52 30 2c 23 31  32 38 0d 09 ec 3d 20 20  |R0,R0,#128...=  |
00001870  20 53 54 52 42 20 52 30  2c 41 63 74 69 76 65 20  | STRB R0,Active |
00001880  20 20 5c 20 43 68 61 6e  67 65 20 61 63 74 69 76  |  \ Change activ|
00001890  65 20 66 6c 61 67 20 74  6f 20 69 6e 64 69 63 61  |e flag to indica|
000018a0  74 65 20 62 75 73 79 0d  09 f6 10 20 20 20 4d 4f  |te busy....   MO|
000018b0  56 20 52 31 2c 50 43 0d  0a 00 2e 20 20 20 42 49  |V R1,PC....   BI|
000018c0  43 20 52 31 2c 52 31 2c  23 31 3c 3c 32 37 20 5c  |C R1,R1,#1<<27 \|
000018d0  20 43 6c 65 61 72 20 69  6e 74 65 72 72 75 70 74  | Clear interrupt|
000018e0  20 66 6c 61 67 0d 0a 0a  25 20 20 20 84 52 20 52  | flag...%   .R R|
000018f0  31 2c 52 31 2c 23 33 20  20 20 20 20 5c 20 53 65  |1,R1,#3     \ Se|
00001900  74 20 53 56 43 20 6d 6f  64 65 0d 0a 14 28 20 20  |t SVC mode...(  |
00001910  20 54 45 51 50 20 52 31  2c 23 30 20 20 20 20 20  | TEQP R1,#0     |
00001920  20 20 5c 20 45 6e 74 65  72 20 53 56 43 20 6d 6f  |  \ Enter SVC mo|
00001930  64 65 0d 0a 1e 12 20 20  20 4d 4f 56 4e 56 20 52  |de....   MOVNV R|
00001940  31 2c 52 31 0d 0a 28 12  20 20 20 43 4d 50 20 52  |1,R1..(.   CMP R|
00001950  30 2c 23 31 32 39 0d 0a  32 31 20 20 20 42 45 51  |0,#129..21   BEQ|
00001960  20 45 6e 74 65 72 43 6f  6d 6d 61 6e 64 20 5c 20  | EnterCommand \ |
00001970  43 6f 6d 6d 61 6e 64 73  20 74 6f 20 62 65 20 74  |Commands to be t|
00001980  79 70 65 64 20 69 6e 0d  0a 3c 37 20 20 20 41 44  |yped in..<7   AD|
00001990  52 20 52 30 2c 43 6f 6d  6d 61 6e 64 20 20 20 5c  |R R0,Command   \|
000019a0  20 65 6c 73 65 20 65 78  65 63 75 74 65 20 73 65  | else execute se|
000019b0  6c 65 63 74 65 64 20 63  6f 6d 6d 61 6e 64 0d 0a  |lected command..|
000019c0  46 14 20 20 20 53 57 49  20 22 58 4f 53 5f 43 4c  |F.   SWI "XOS_CL|
000019d0  49 22 0d 0a 50 33 20 20  20 53 57 49 56 53 20 32  |I"..P3   SWIVS 2|
000019e0  35 36 2b 37 2b 28 31 3c  3c 31 37 29 20 5c 20 42  |56+7+(1<<17) \ B|
000019f0  65 65 70 20 69 66 20 65  72 72 6f 72 20 6f 63 63  |eep if error occ|
00001a00  75 72 72 65 64 0d 0a 5a  0f 20 20 20 42 20 46 69  |urred..Z.   B Fi|
00001a10  6e 69 73 68 0d 0a 64 37  2e 45 6e 74 65 72 43 6f  |nish..d7.EnterCo|
00001a20  6d 6d 61 6e 64 20 20 20  20 5c 20 50 72 65 70 61  |mmand    \ Prepa|
00001a30  72 65 20 73 63 72 65 65  6e 20 66 6f 72 20 63 6f  |re screen for co|
00001a40  6d 6d 61 6e 64 20 65 6e  74 72 79 0d 0a 6e 12 20  |mmand entry..n. |
00001a50  20 20 4d 4f 56 20 52 30  2c 23 31 31 37 0d 0a 78  |  MOV R0,#117..x|
00001a60  15 20 20 20 53 57 49 20  22 58 4f 53 5f 42 79 74  |.   SWI "XOS_Byt|
00001a70  65 22 0d 0a 82 18 20 20  20 53 54 52 42 20 52 31  |e"....   STRB R1|
00001a80  2c 56 64 75 53 74 61 74  75 73 0d 0a 8c 10 20 20  |,VduStatus....  |
00001a90  20 4d 4f 56 20 52 30 2c  23 33 0d 0a 96 3a 20 20  | MOV R0,#3...:  |
00001aa0  20 4d 4f 56 20 52 31 2c  23 25 31 30 31 30 31 30  | MOV R1,#%101010|
00001ab0  30 20 5c 20 44 69 73 61  62 6c 65 20 70 72 69 6e  |0 \ Disable prin|
00001ac0  74 65 72 2c 20 53 70 6f  6f 6c 20 61 6e 64 20 52  |ter, Spool and R|
00001ad0  53 34 32 33 0d 0a a0 15  20 20 20 53 57 49 20 22  |S423....   SWI "|
00001ae0  58 4f 53 5f 42 79 74 65  22 0d 0a aa 16 20 20 20  |XOS_Byte"....   |
00001af0  53 54 52 42 20 52 31 2c  53 74 72 65 61 6d 73 0d  |STRB R1,Streams.|
00001b00  0a b4 12 20 20 20 4d 4f  56 20 52 30 2c 23 31 36  |...   MOV R0,#16|
00001b10  35 0d 0a be 15 20 20 20  53 57 49 20 22 58 4f 53  |5....   SWI "XOS|
00001b20  5f 42 79 74 65 22 0d 0a  c8 18 20 20 20 53 54 52  |_Byte"....   STR|
00001b30  42 20 52 31 2c 43 75 72  73 6f 72 50 6f 73 0d 0a  |B R1,CursorPos..|
00001b40  d2 1a 20 20 20 53 54 52  42 20 52 32 2c 43 75 72  |..   STRB R2,Cur|
00001b50  73 6f 72 50 6f 73 2b 31  0d 0a dc 12 20 20 20 4d  |sorPos+1....   M|
00001b60  4f 56 20 52 30 2c 23 32  31 38 0d 0a e6 10 20 20  |OV R0,#218....  |
00001b70  20 4d 4f 56 20 52 31 2c  23 30 0d 0a f0 10 20 20  | MOV R1,#0....  |
00001b80  20 4d 4f 56 20 52 32 2c  23 30 0d 0a fa 22 20 20  | MOV R2,#0..."  |
00001b90  20 53 57 49 20 22 58 4f  53 5f 42 79 74 65 22 20  | SWI "XOS_Byte" |
00001ba0  20 5c 20 43 6c 65 61 72  20 ef 20 51 0d 0b 04 10  | \ Clear . Q....|
00001bb0  20 20 20 4d 4f 56 20 52  30 2c 23 30 0d 0b 0e 11  |   MOV R0,#0....|
00001bc0  20 20 20 4d 4f 56 20 52  31 2c 23 31 36 0d 0b 18  |   MOV R1,#16...|
00001bd0  1c 20 20 20 53 57 49 20  22 58 4f 53 5f 52 65 61  |.   SWI "XOS_Rea|
00001be0  64 50 61 6c 65 74 74 65  22 0d 0b 22 15 20 20 20  |dPalette"..".   |
00001bf0  53 54 52 20 52 32 2c 43  6f 6c 6f 75 72 73 0d 0b  |STR R2,Colours..|
00001c00  2c 17 20 20 20 53 54 52  20 52 33 2c 43 6f 6c 6f  |,.   STR R3,Colo|
00001c10  75 72 73 2b 34 0d 0b 36  10 20 20 20 4d 4f 56 20  |urs+4..6.   MOV |
00001c20  52 30 2c 23 31 0d 0b 40  1c 20 20 20 53 57 49 20  |R0,#1..@.   SWI |
00001c30  22 58 4f 53 5f 52 65 61  64 50 61 6c 65 74 74 65  |"XOS_ReadPalette|
00001c40  22 0d 0b 4a 17 20 20 20  53 54 52 20 52 32 2c 43  |"..J.   STR R2,C|
00001c50  6f 6c 6f 75 72 73 2b 38  0d 0b 54 18 20 20 20 53  |olours+8..T.   S|
00001c60  54 52 20 52 33 2c 43 6f  6c 6f 75 72 73 2b 31 32  |TR R3,Colours+12|
00001c70  0d 0b 5e 16 20 20 20 41  44 52 20 52 30 2c 56 64  |..^.   ADR R0,Vd|
00001c80  75 42 6c 6f 63 6b 0d 0b  68 14 20 20 20 41 44 52  |uBlock..h.   ADR|
00001c90  20 52 31 2c 57 69 6e 64  6f 77 0d 0b 72 21 20 20  | R1,Window..r!  |
00001ca0  20 53 57 49 20 22 58 4f  53 5f 52 65 61 64 56 64  | SWI "XOS_ReadVd|
00001cb0  75 56 61 72 69 61 62 6c  65 73 22 0d 0b 7c 19 20  |uVariables"..|. |
00001cc0  20 20 4c 44 52 20 52 30  2c 53 63 72 65 65 6e 57  |  LDR R0,ScreenW|
00001cd0  69 64 74 68 0d 0b 86 1c  20 20 20 53 54 52 42 20  |idth....   STRB |
00001ce0  52 30 2c 4e 65 77 53 65  74 74 69 6e 67 73 2b 34  |R0,NewSettings+4|
00001cf0  0d 0b 90 10 20 20 20 4d  4f 56 20 52 30 2c 23 31  |....   MOV R0,#1|
00001d00  0d 0b 9a 18 20 20 20 4c  44 52 20 52 33 2c 53 63  |....   LDR R3,Sc|
00001d10  72 65 65 6e 53 69 7a 65  0d 0b a4 17 20 20 20 4d  |reenSize....   M|
00001d20  4f 56 20 52 31 2c 52 33  2c 4c 53 52 20 23 31 0d  |OV R1,R3,LSR #1.|
00001d30  0b ae 22 20 20 20 53 57  49 20 22 58 4f 53 5f 43  |.."   SWI "XOS_C|
00001d40  6c 61 69 6d 53 63 72 65  65 6e 4d 65 6d 6f 72 79  |laimScreenMemory|
00001d50  22 0d 0b b8 12 20 20 20  4d 4f 56 43 53 20 52 32  |"....   MOVCS R2|
00001d60  2c 23 30 0d 0b c2 4c 20  20 20 53 54 52 20 52 32  |,#0...L   STR R2|
00001d70  2c 53 63 72 65 65 6e 43  6c 61 69 6d 65 64 20 20  |,ScreenClaimed  |
00001d80  20 20 5c 20 53 65 74 20  66 6c 61 67 20 74 6f 20  |  \ Set flag to |
00001d90  69 6e 64 69 63 61 74 65  20 69 66 20 73 63 72 65  |indicate if scre|
00001da0  65 6e 20 6d 65 6d 6f 72  79 20 66 6f 75 6e 64 0d  |en memory found.|
00001db0  0b cc 16 20 20 20 42 43  53 20 56 64 75 53 65 71  |...   BCS VduSeq|
00001dc0  75 65 6e 63 65 0d 0b d6  19 20 20 20 4c 44 52 20  |uence....   LDR |
00001dd0  52 31 2c 53 63 72 65 65  6e 53 74 61 72 74 0d 0b  |R1,ScreenStart..|
00001de0  e0 17 20 20 20 4d 4f 56  20 52 33 2c 52 33 2c 4c  |..   MOV R3,R3,L|
00001df0  53 52 20 23 31 0d 0b ea  10 2e 53 63 72 65 65 6e  |SR #1.....Screen|
00001e00  4c 6f 6f 70 31 0d 0b f4  19 20 20 20 4c 44 4d 49  |Loop1....   LDMI|
00001e10  41 20 52 31 21 2c 7b 52  34 2d 52 31 31 7d 0d 0b  |A R1!,{R4-R11}..|
00001e20  fe 19 20 20 20 53 54 4d  49 41 20 52 32 21 2c 7b  |..   STMIA R2!,{|
00001e30  52 34 2d 52 31 31 7d 0d  0c 08 15 20 20 20 53 55  |R4-R11}....   SU|
00001e40  42 53 20 52 33 2c 52 33  2c 23 33 32 0d 0c 12 16  |BS R3,R3,#32....|
00001e50  20 20 20 42 48 49 20 53  63 72 65 65 6e 4c 6f 6f  |   BHI ScreenLoo|
00001e60  70 31 0d 0c 1c 10 2e 56  64 75 53 65 71 75 65 6e  |p1.....VduSequen|
00001e70  63 65 0d 0c 26 19 20 20  20 41 44 52 20 52 30 2c  |ce..&.   ADR R0,|
00001e80  4e 65 77 53 65 74 74 69  6e 67 73 0d 0c 30 18 20  |NewSettings..0. |
00001e90  20 20 41 44 52 20 52 31  2c 54 65 72 6d 69 6e 61  |  ADR R1,Termina|
00001ea0  74 6f 72 0d 0c 3a 13 20  20 20 53 55 42 20 52 31  |tor..:.   SUB R1|
00001eb0  2c 52 31 2c 52 30 0d 0c  44 16 20 20 20 53 57 49  |,R1,R0..D.   SWI|
00001ec0  20 22 4f 53 5f 57 72 69  74 65 4e 22 0d 0c 4e 04  | "OS_WriteN"..N.|
00001ed0  0d 0c 58 0b 2e 45 43 4c  6f 6f 70 0d 0c 62 16 20  |..X..ECLoop..b. |
00001ee0  20 20 53 57 49 20 22 4f  53 5f 57 72 69 74 65 53  |  SWI "OS_WriteS|
00001ef0  22 0d 0c 6c 15 20 20 20  45 51 55 44 20 26 30 30  |"..l.   EQUD &00|
00001f00  32 41 30 41 30 44 0d 0c  76 14 20 20 20 41 44 52  |2A0A0D..v.   ADR|
00001f10  20 52 30 2c 42 75 66 66  65 72 0d 0c 80 12 20 20  | R0,Buffer....  |
00001f20  20 4d 4f 56 20 52 31 2c  23 32 35 34 0d 0c 8a 11  | MOV R1,#254....|
00001f30  20 20 20 4d 4f 56 20 52  32 2c 23 33 32 0d 0c 94  |   MOV R2,#32...|
00001f40  12 20 20 20 4d 4f 56 20  52 33 2c 23 32 35 35 0d  |.   MOV R3,#255.|
00001f50  0c 9e 19 20 20 20 53 57  49 20 22 58 4f 53 5f 52  |...   SWI "XOS_R|
00001f60  65 61 64 4c 69 6e 65 22  0d 0c a8 13 20 20 20 42  |eadLine"....   B|
00001f70  43 53 20 45 73 63 45 72  72 6f 72 0d 0c b2 15 20  |CS EscError.... |
00001f80  20 20 42 56 53 20 50 72  69 6e 74 45 72 72 6f 72  |  BVS PrintError|
00001f90  0d 0c bc 10 20 20 20 43  4d 50 20 52 31 2c 23 30  |....   CMP R1,#0|
00001fa0  0d 0c c6 11 20 20 20 42  45 51 20 54 69 64 79 55  |....   BEQ TidyU|
00001fb0  70 0d 0c d0 14 20 20 20  53 57 49 20 22 58 4f 53  |p....   SWI "XOS|
00001fc0  5f 43 4c 49 22 0d 0c da  15 20 20 20 42 56 53 20  |_CLI"....   BVS |
00001fd0  50 72 69 6e 74 45 72 72  6f 72 0d 0c e4 0f 20 20  |PrintError....  |
00001fe0  20 42 20 45 43 4c 6f 6f  70 0d 0c ee 42 2e 56 64  | B ECLoop...B.Vd|
00001ff0  75 42 6c 6f 63 6b 20 20  20 20 20 20 20 20 5c 20  |uBlock        \ |
00002000  55 73 65 64 20 61 73 20  69 6e 70 75 74 20 62 6c  |Used as input bl|
00002010  6f 63 6b 20 66 6f 72 20  4f 53 5f 52 65 61 64 56  |ock for OS_ReadV|
00002020  64 75 56 61 72 69 61 62  6c 65 73 0d 0c f8 0f 20  |duVariables.... |
00002030  20 20 45 51 55 44 20 31  33 32 0d 0d 02 0f 20 20  |  EQUD 132....  |
00002040  20 45 51 55 44 20 31 33  33 0d 0d 0c 0f 20 20 20  | EQUD 133....   |
00002050  45 51 55 44 20 31 33 34  0d 0d 16 0f 20 20 20 45  |EQUD 134....   E|
00002060  51 55 44 20 31 33 35 0d  0d 20 0f 20 20 20 45 51  |QUD 135.. .   EQ|
00002070  55 44 20 31 34 39 0d 0d  2a 0f 20 20 20 45 51 55  |UD 149..*.   EQU|
00002080  44 20 31 35 35 0d 0d 34  0f 20 20 20 45 51 55 44  |D 155..4.   EQUD|
00002090  20 31 35 36 0d 0d 3e 0f  20 20 20 45 51 55 44 20  | 156..>.   EQUD |
000020a0  31 35 39 0d 0d 48 0f 20  20 20 45 51 55 44 20 31  |159..H.   EQUD 1|
000020b0  36 30 0d 0d 52 0d 20 20  20 45 51 55 44 20 31 0d  |60..R.   EQUD 1.|
000020c0  0d 5c 0d 20 20 20 45 51  55 44 20 37 0d 0d 66 0e  |.\.   EQUD 7..f.|
000020d0  20 20 20 45 51 55 44 20  2d 31 0d 0d 70 43 2e 43  |   EQUD -1..pC.C|
000020e0  6f 6c 6f 75 72 73 20 20  20 20 20 20 20 20 5c 20  |olours        \ |
000020f0  55 73 65 64 20 74 6f 20  73 74 6f 72 65 20 61 70  |Used to store ap|
00002100  70 6c 69 63 61 74 69 6f  6e 20 ef 20 76 61 72 69  |plication . vari|
00002110  61 62 6c 65 20 73 65 74  74 69 6e 67 73 0d 0d 7a  |able settings..z|
00002120  0d 20 20 20 45 51 55 44  20 30 0d 0d 84 0d 20 20  |.   EQUD 0....  |
00002130  20 45 51 55 44 20 30 0d  0d 8e 0d 20 20 20 45 51  | EQUD 0....   EQ|
00002140  55 44 20 30 0d 0d 98 0d  20 20 20 45 51 55 44 20  |UD 0....   EQUD |
00002150  30 0d 0d a2 0b 2e 57 69  6e 64 6f 77 0d 0d ac 0d  |0.....Window....|
00002160  20 20 20 45 51 55 44 20  30 0d 0d b6 0d 20 20 20  |   EQUD 0....   |
00002170  45 51 55 44 20 30 0d 0d  c0 0d 20 20 20 45 51 55  |EQUD 0....   EQU|
00002180  44 20 30 0d 0d ca 0d 20  20 20 45 51 55 44 20 30  |D 0....   EQUD 0|
00002190  0d 0d d4 10 2e 53 63 72  65 65 6e 53 74 61 72 74  |.....ScreenStart|
000021a0  0d 0d de 0d 20 20 20 45  51 55 44 20 30 0d 0d e8  |....   EQUD 0...|
000021b0  0c 2e 4c 6f 67 43 6f 6c  73 0d 0d f2 0d 20 20 20  |..LogCols....   |
000021c0  45 51 55 44 20 30 0d 0d  fc 0d 20 20 20 45 51 55  |EQUD 0....   EQU|
000021d0  44 20 30 0d 0e 06 0a 2e  54 69 6e 74 73 0d 0e 10  |D 0.....Tints...|
000021e0  0d 20 20 20 45 51 55 44  20 30 0d 0e 1a 0d 20 20  |.   EQUD 0....  |
000021f0  20 45 51 55 44 20 30 0d  0e 24 10 2e 53 63 72 65  | EQUD 0..$..Scre|
00002200  65 6e 57 69 64 74 68 0d  0e 2e 0d 20 20 20 45 51  |enWidth....   EQ|
00002210  55 44 20 30 0d 0e 38 0f  2e 53 63 72 65 65 6e 53  |UD 0..8..ScreenS|
00002220  69 7a 65 0d 0e 42 0d 20  20 20 45 51 55 44 20 30  |ize..B.   EQUD 0|
00002230  0d 0e 4c 12 2e 53 63 72  65 65 6e 43 6c 61 69 6d  |..L..ScreenClaim|
00002240  65 64 0d 0e 56 0d 20 20  20 45 51 55 44 20 30 0d  |ed..V.   EQUD 0.|
00002250  0e 60 0e 2e 56 64 75 53  74 61 74 75 73 0d 0e 6a  |.`..VduStatus..j|
00002260  0d 20 20 20 45 51 55 42  20 30 0d 0e 74 0e 2e 43  |.   EQUB 0..t..C|
00002270  75 72 73 6f 72 50 6f 73  0d 0e 7e 0d 20 20 20 45  |ursorPos..~.   E|
00002280  51 55 57 20 30 0d 0e 88  0c 2e 53 74 72 65 61 6d  |QUW 0.....Stream|
00002290  73 0d 0e 92 0d 20 20 20  45 51 55 42 20 30 0d 0e  |s....   EQUB 0..|
000022a0  9c 46 2e 4e 65 77 53 65  74 74 69 6e 67 73 20 20  |.F.NewSettings  |
000022b0  20 20 5c 20 20 43 6f 6e  74 61 69 6e 73 20 ef 20  |  \  Contains . |
000022c0  63 6f 64 65 73 20 74 6f  20 73 65 74 20 75 70 20  |codes to set up |
000022d0  63 6f 6d 6d 61 6e 64 20  65 6e 74 72 79 20 73 63  |command entry sc|
000022e0  72 65 65 6e 0d 0e a6 1b  20 20 20 45 51 55 42 20  |reen....   EQUB |
000022f0  36 20 5c 20 52 65 20 65  6e 61 62 6c 65 20 ef 0d  |6 \ Re enable ..|
00002300  0e b0 20 20 20 20 45 51  55 42 20 32 38 20 5c 20  |..    EQUB 28 \ |
00002310  53 65 74 20 74 65 78 74  20 77 69 6e 64 6f 77 0d  |Set text window.|
00002320  0e ba 0d 20 20 20 45 51  55 42 20 30 0d 0e c4 0e  |...   EQUB 0....|
00002330  20 20 20 45 51 55 42 20  31 32 0d 0e ce 23 20 20  |   EQUB 12...#  |
00002340  20 45 51 55 42 20 30 20  20 5c 20 75 70 64 61 74  | EQUB 0  \ updat|
00002350  65 64 20 62 79 20 70 72  6f 67 72 61 6d 0d 0e d8  |ed by program...|
00002360  0d 20 20 20 45 51 55 42  20 30 0d 0e e2 26 20 20  |.   EQUB 0...&  |
00002370  20 45 51 55 42 20 31 39  20 20 5c 20 44 65 66 69  | EQUB 19  \ Defi|
00002380  6e 65 20 63 6f 6c 20 30  20 61 73 20 62 6c 75 65  |ne col 0 as blue|
00002390  0d 0e ec 0d 20 20 20 45  51 55 42 20 30 0d 0e f6  |....   EQUB 0...|
000023a0  0d 20 20 20 45 51 55 44  20 34 0d 0f 00 27 20 20  |.   EQUD 4...'  |
000023b0  20 45 51 55 42 20 31 39  20 20 5c 20 44 65 66 69  | EQUB 19  \ Defi|
000023c0  6e 65 20 63 6f 6c 20 31  20 61 73 20 77 68 69 74  |ne col 1 as whit|
000023d0  65 0d 0f 0a 0d 20 20 20  45 51 55 42 20 31 0d 0f  |e....   EQUB 1..|
000023e0  14 0d 20 20 20 45 51 55  44 20 37 0d 0f 1e 1f 20  |..   EQUD 7.... |
000023f0  20 20 45 51 55 42 20 31  35 20 5c 20 53 65 74 20  |  EQUB 15 \ Set |
00002400  70 61 67 65 64 20 6d 6f  64 65 0d 0f 28 20 20 20  |paged mode..(   |
00002410  20 45 51 55 42 20 34 20  20 5c 20 55 73 65 20 74  | EQUB 4  \ Use t|
00002420  65 78 74 20 63 75 72 73  6f 72 0d 0f 32 25 20 20  |ext cursor..2%  |
00002430  20 45 51 55 42 20 31 37  20 5c 20 53 65 6c 65 63  | EQUB 17 \ Selec|
00002440  74 20 54 65 78 74 20 63  6f 6c 6f 75 72 20 31 0d  |t Text colour 1.|
00002450  0f 3c 0d 20 20 20 45 51  55 42 20 31 0d 0f 46 2b  |.<.   EQUB 1..F+|
00002460  20 20 20 45 51 55 42 20  31 37 20 5c 20 53 65 6c  |   EQUB 17 \ Sel|
00002470  65 63 74 20 62 61 63 6b  67 72 6f 75 6e 64 20 63  |ect background c|
00002480  6f 6c 6f 75 72 20 30 0d  0f 50 0f 20 20 20 45 51  |olour 0..P.   EQ|
00002490  55 42 20 31 32 38 0d 0f  5a 12 20 20 20 45 51 55  |UB 128..Z.   EQU|
000024a0  42 20 31 32 20 5c 20 db  0d 0f 64 0f 2e 54 65 72  |B 12 \ ...d..Ter|
000024b0  6d 69 6e 61 74 6f 72 0d  0f 6e 1a 20 20 20 53 54  |minator..n.   ST|
000024c0  4d 46 44 20 52 31 33 21  2c 7b 52 30 2c 52 31 34  |MFD R13!,{R0,R14|
000024d0  7d 0d 0f 78 10 20 20 20  4d 4f 56 20 52 30 2c 23  |}..x.   MOV R0,#|
000024e0  38 0d 0f 82 0d 2e 54 65  72 6d 4c 6f 6f 70 0d 0f  |8.....TermLoop..|
000024f0  8c 0e 20 20 20 53 57 49  20 32 35 36 0d 0f 96 14  |..   SWI 256....|
00002500  20 20 20 53 55 42 53 20  52 30 2c 52 30 2c 23 31  |   SUBS R0,R0,#1|
00002510  0d 0f a0 13 20 20 20 42  4e 45 20 54 65 72 6d 4c  |....   BNE TermL|
00002520  6f 6f 70 0d 0f aa 19 20  20 20 4c 44 4d 46 44 20  |oop....   LDMFD |
00002530  52 31 33 21 2c 7b 52 30  2c 50 43 7d 0d 0f b4 04  |R13!,{R0,PC}....|
00002540  0d 0f be 4b 2e 54 69 64  79 55 70 20 20 20 20 20  |...K.TidyUp     |
00002550  20 20 20 20 20 20 20 5c  20 52 65 73 65 74 73 20  |       \ Resets |
00002560  61 70 70 6c 69 63 61 74  69 6f 6e 20 ef 20 76 61  |application . va|
00002570  72 69 61 62 6c 65 73 20  61 6e 64 20 72 65 73 74  |riables and rest|
00002580  6f 72 65 73 20 73 63 72  65 65 6e 0d 0f c8 15 20  |ores screen.... |
00002590  20 20 41 44 52 20 52 33  2c 43 6f 6c 6f 75 72 73  |  ADR R3,Colours|
000025a0  0d 0f d2 10 20 20 20 4d  4f 56 20 52 31 2c 23 34  |....   MOV R1,#4|
000025b0  0d 0f dc 11 20 20 20 4d  4f 56 20 52 32 2c 23 31  |....   MOV R2,#1|
000025c0  32 0d 0f e6 0b 2e 54 4c  6f 6f 70 31 0d 0f f0 11  |2.....TLoop1....|
000025d0  20 20 20 53 57 49 20 32  35 36 2b 31 39 0d 0f fa  |   SWI 256+19...|
000025e0  17 20 20 20 4d 4f 56 20  52 30 2c 52 32 2c 4c 53  |.   MOV R0,R2,LS|
000025f0  52 20 23 33 0d 10 04 16  20 20 20 53 57 49 20 22  |R #3....   SWI "|
00002600  4f 53 5f 57 72 69 74 65  43 22 0d 10 0e 13 20 20  |OS_WriteC"....  |
00002610  20 41 44 44 20 52 30 2c  52 33 2c 52 32 0d 10 18  | ADD R0,R3,R2...|
00002620  16 20 20 20 53 57 49 20  22 4f 53 5f 57 72 69 74  |.   SWI "OS_Writ|
00002630  65 4e 22 0d 10 22 14 20  20 20 53 55 42 53 20 52  |eN"..".   SUBS R|
00002640  32 2c 52 32 2c 23 34 0d  10 2c 11 20 20 20 42 50  |2,R2,#4..,.   BP|
00002650  4c 20 54 4c 6f 6f 70 31  0d 10 36 10 20 20 20 4d  |L TLoop1..6.   M|
00002660  4f 56 20 52 32 2c 23 34  0d 10 40 13 20 20 20 41  |OV R2,#4..@.   A|
00002670  44 52 20 52 33 2c 54 69  6e 74 73 0d 10 4a 0b 2e  |DR R3,Tints..J..|
00002680  54 4c 6f 6f 70 32 0d 10  54 11 20 20 20 53 57 49  |TLoop2..T.   SWI|
00002690  20 32 35 36 2b 32 33 0d  10 5e 11 20 20 20 53 57  | 256+23..^.   SW|
000026a0  49 20 32 35 36 2b 31 37  0d 10 68 17 20 20 20 4d  |I 256+17..h.   M|
000026b0  4f 56 20 52 30 2c 52 32  2c 4c 53 52 20 23 32 0d  |OV R0,R2,LSR #2.|
000026c0  10 72 16 20 20 20 53 57  49 20 22 4f 53 5f 57 72  |.r.   SWI "OS_Wr|
000026d0  69 74 65 43 22 0d 10 7c  15 20 20 20 4c 44 52 20  |iteC"..|.   LDR |
000026e0  52 30 2c 5b 52 33 2c 52  32 5d 0d 10 86 16 20 20  |R0,[R3,R2]....  |
000026f0  20 53 57 49 20 22 4f 53  5f 57 72 69 74 65 43 22  | SWI "OS_WriteC"|
00002700  0d 10 90 14 20 20 20 42  4c 20 54 65 72 6d 69 6e  |....   BL Termin|
00002710  61 74 6f 72 0d 10 9a 14  20 20 20 53 55 42 53 20  |ator....   SUBS |
00002720  52 32 2c 52 32 2c 23 34  0d 10 a4 11 20 20 20 42  |R2,R2,#4....   B|
00002730  50 4c 20 54 4c 6f 6f 70  32 0d 10 ae 16 20 20 20  |PL TLoop2....   |
00002740  4c 44 52 42 20 52 30 2c  4c 6f 67 43 6f 6c 73 0d  |LDRB R0,LogCols.|
00002750  10 b8 11 20 20 20 53 57  49 20 32 35 36 2b 31 37  |...   SWI 256+17|
00002760  0d 10 c2 16 20 20 20 53  57 49 20 22 4f 53 5f 57  |....   SWI "OS_W|
00002770  72 69 74 65 43 22 0d 10  cc 18 20 20 20 4c 44 52  |riteC"....   LDR|
00002780  42 20 52 30 2c 4c 6f 67  43 6f 6c 73 2b 34 0d 10  |B R0,LogCols+4..|
00002790  d6 15 20 20 20 41 44 44  20 52 30 2c 52 30 2c 23  |..   ADD R0,R0,#|
000027a0  31 32 38 0d 10 e0 11 20  20 20 53 57 49 20 32 35  |128....   SWI 25|
000027b0  36 2b 31 37 0d 10 ea 16  20 20 20 53 57 49 20 22  |6+17....   SWI "|
000027c0  4f 53 5f 57 72 69 74 65  43 22 0d 10 f4 11 20 20  |OS_WriteC"....  |
000027d0  20 53 57 49 20 32 35 36  2b 32 38 0d 10 fe 14 20  | SWI 256+28.... |
000027e0  20 20 41 44 52 20 52 31  2c 57 69 6e 64 6f 77 0d  |  ADR R1,Window.|
000027f0  11 08 10 20 20 20 4d 4f  56 20 52 32 2c 23 34 0d  |...   MOV R2,#4.|
00002800  11 12 0b 2e 54 4c 6f 6f  70 33 0d 11 1c 16 20 20  |....TLoop3....  |
00002810  20 4c 44 52 42 20 52 30  2c 5b 52 31 5d 2c 23 34  | LDRB R0,[R1],#4|
00002820  0d 11 26 16 20 20 20 53  57 49 20 22 4f 53 5f 57  |..&.   SWI "OS_W|
00002830  72 69 74 65 43 22 0d 11  30 14 20 20 20 53 55 42  |riteC"..0.   SUB|
00002840  53 20 52 32 2c 52 32 2c  23 31 0d 11 3a 11 20 20  |S R2,R2,#1..:.  |
00002850  20 42 4e 45 20 54 4c 6f  6f 70 33 0d 11 44 11 20  | BNE TLoop3..D. |
00002860  20 20 53 57 49 20 32 35  36 2b 33 31 0d 11 4e 18  |  SWI 256+31..N.|
00002870  20 20 20 4c 44 52 42 20  52 30 2c 43 75 72 73 6f  |   LDRB R0,Curso|
00002880  72 50 6f 73 0d 11 58 16  20 20 20 53 57 49 20 22  |rPos..X.   SWI "|
00002890  4f 53 5f 57 72 69 74 65  43 22 0d 11 62 1a 20 20  |OS_WriteC"..b.  |
000028a0  20 4c 44 52 42 20 52 30  2c 43 75 72 73 6f 72 50  | LDRB R0,CursorP|
000028b0  6f 73 2b 31 0d 11 6c 16  20 20 20 53 57 49 20 22  |os+1..l.   SWI "|
000028c0  4f 53 5f 57 72 69 74 65  43 22 0d 11 76 18 20 20  |OS_WriteC"..v.  |
000028d0  20 4c 44 52 42 20 52 33  2c 56 64 75 53 74 61 74  | LDRB R3,VduStat|
000028e0  75 73 0d 11 80 27 20 20  20 54 53 54 20 52 33 2c  |us...'   TST R3,|
000028f0  23 31 20 20 5c 20 50 72  69 6e 74 65 72 20 65 6e  |#1  \ Printer en|
00002900  61 62 6c 65 64 20 62 69  74 0d 11 8a 12 20 20 20  |abled bit....   |
00002910  53 57 49 4e 45 20 32 35  36 2b 32 0d 11 94 21 20  |SWINE 256+2...! |
00002920  20 20 54 53 54 20 52 33  2c 23 34 20 5c 20 50 61  |  TST R3,#4 \ Pa|
00002930  67 65 64 20 6d 6f 64 65  20 62 69 74 0d 11 9e 31  |ged mode bit...1|
00002940  20 20 20 53 57 49 45 51  20 32 35 36 2b 31 35 20  |   SWIEQ 256+15 |
00002950  5c 20 4e 6f 74 20 73 65  74 20 73 6f 20 63 6c 65  |\ Not set so cle|
00002960  61 72 20 70 61 67 65 64  20 6d 6f 64 65 0d 11 a8  |ar paged mode...|
00002970  1b 20 20 20 54 53 54 20  52 33 2c 23 33 32 20 20  |.   TST R3,#32  |
00002980  5c 20 ef 35 20 62 69 74  0d 11 b2 12 20 20 20 53  |\ .5 bit....   S|
00002990  57 49 4e 45 20 32 35 36  2b 35 0d 11 bc 29 20 20  |WINE 256+5...)  |
000029a0  20 54 53 54 20 52 33 2c  23 31 32 38 20 5c 20 44  | TST R3,#128 \ D|
000029b0  69 73 61 62 6c 65 64 20  62 79 20 ef 20 32 31 20  |isabled by . 21 |
000029c0  62 69 74 0d 11 c6 13 20  20 20 53 57 49 4e 45 20  |bit....   SWINE |
000029d0  32 35 36 2b 32 31 0d 11  d0 16 20 20 20 4c 44 52  |256+21....   LDR|
000029e0  42 20 52 31 2c 53 74 72  65 61 6d 73 0d 11 da 10  |B R1,Streams....|
000029f0  20 20 20 4d 4f 56 20 52  30 2c 23 33 0d 11 e4 14  |   MOV R0,#3....|
00002a00  20 20 20 53 57 49 20 22  4f 53 5f 42 79 74 65 22  |   SWI "OS_Byte"|
00002a10  0d 11 ee 1b 20 20 20 4c  44 52 20 52 31 2c 53 63  |....   LDR R1,Sc|
00002a20  72 65 65 6e 43 6c 61 69  6d 65 64 0d 11 f8 10 20  |reenClaimed.... |
00002a30  20 20 43 4d 50 20 52 31  2c 23 30 0d 12 02 0f 20  |  CMP R1,#0.... |
00002a40  20 20 42 45 51 20 57 69  6d 70 0d 12 0c 19 20 20  |  BEQ Wimp....  |
00002a50  20 4c 44 52 20 52 32 2c  53 63 72 65 65 6e 53 74  | LDR R2,ScreenSt|
00002a60  61 72 74 0d 12 16 18 20  20 20 4c 44 52 20 52 33  |art....   LDR R3|
00002a70  2c 53 63 72 65 65 6e 53  69 7a 65 0d 12 20 17 20  |,ScreenSize.. . |
00002a80  20 20 4d 4f 56 20 52 33  2c 52 33 2c 4c 53 52 20  |  MOV R3,R3,LSR |
00002a90  23 31 0d 12 2a 0b 2e 54  4c 6f 6f 70 34 0d 12 34  |#1..*..TLoop4..4|
00002aa0  19 20 20 20 4c 44 4d 49  41 20 52 31 21 2c 7b 52  |.   LDMIA R1!,{R|
00002ab0  34 2d 52 31 31 7d 0d 12  3e 19 20 20 20 53 54 4d  |4-R11}..>.   STM|
00002ac0  49 41 20 52 32 21 2c 7b  52 34 2d 52 31 31 7d 0d  |IA R2!,{R4-R11}.|
00002ad0  12 48 15 20 20 20 53 55  42 53 20 52 33 2c 52 33  |.H.   SUBS R3,R3|
00002ae0  2c 23 33 32 0d 12 52 11  20 20 20 42 48 49 20 54  |,#32..R.   BHI T|
00002af0  4c 6f 6f 70 34 0d 12 5c  10 20 20 20 4d 4f 56 20  |Loop4..\.   MOV |
00002b00  52 30 2c 23 30 0d 12 66  21 20 20 20 53 57 49 20  |R0,#0..f!   SWI |
00002b10  22 4f 53 5f 43 6c 61 69  6d 53 63 72 65 65 6e 4d  |"OS_ClaimScreenM|
00002b20  65 6d 6f 72 79 22 0d 12  70 0f 20 20 20 42 20 46  |emory"..p.   B F|
00002b30  69 6e 69 73 68 0d 12 7a  09 2e 57 69 6d 70 0d 12  |inish..z..Wimp..|
00002b40  84 10 20 20 20 4d 56 4e  20 52 30 2c 23 30 0d 12  |..   MVN R0,#0..|
00002b50  8e 10 20 20 20 4d 4f 56  20 52 31 2c 23 30 0d 12  |..   MOV R1,#0..|
00002b60  98 10 20 20 20 4d 4f 56  20 52 32 2c 23 30 0d 12  |..   MOV R2,#0..|
00002b70  a2 13 20 20 20 4d 4f 56  20 52 33 2c 23 31 32 38  |..   MOV R3,#128|
00002b80  30 0d 12 ac 13 20 20 20  53 55 42 20 52 33 2c 52  |0....   SUB R3,R|
00002b90  33 2c 23 31 0d 12 b6 13  20 20 20 4d 4f 56 20 52  |3,#1....   MOV R|
00002ba0  34 2c 23 31 30 32 34 0d  12 c0 13 20 20 20 53 55  |4,#1024....   SU|
00002bb0  42 20 52 34 2c 52 34 2c  23 31 0d 12 ca 1e 20 20  |B R4,R4,#1....  |
00002bc0  20 53 57 49 20 22 58 57  69 6d 70 5f 46 6f 72 63  | SWI "XWimp_Forc|
00002bd0  65 52 65 64 72 61 77 22  0d 12 d4 04 0d 12 de 0b  |eRedraw"........|
00002be0  2e 46 69 6e 69 73 68 0d  12 e8 10 20 20 20 4d 4f  |.Finish....   MO|
00002bf0  56 20 52 30 2c 50 43 0d  12 f2 2b 20 20 20 84 52  |V R0,PC...+   .R|
00002c00  20 52 30 2c 52 30 2c 23  31 3c 3c 32 37 20 5c 20  | R0,R0,#1<<27 \ |
00002c10  53 65 74 20 69 6e 74 65  72 72 75 70 74 20 66 6c  |Set interrupt fl|
00002c20  61 67 0d 12 fc 27 20 20  20 54 45 51 50 20 52 30  |ag...'   TEQP R0|
00002c30  2c 23 30 20 20 20 20 20  20 20 5c 20 57 72 69 74  |,#0       \ Writ|
00002c40  65 20 74 6f 20 66 6c 61  67 0d 13 06 15 20 20 20  |e to flag....   |
00002c50  4c 44 52 42 20 52 30 2c  41 63 74 69 76 65 0d 13  |LDRB R0,Active..|
00002c60  10 2c 20 20 20 53 55 42  20 52 30 2c 52 30 2c 23  |.,   SUB R0,R0,#|
00002c70  31 32 38 20 20 5c 20 52  65 73 74 6f 72 65 20 61  |128  \ Restore a|
00002c80  63 74 69 76 65 20 66 6c  61 67 0d 13 1a 15 20 20  |ctive flag....  |
00002c90  20 53 54 52 42 20 52 30  2c 41 63 74 69 76 65 0d  | STRB R0,Active.|
00002ca0  13 24 17 20 20 20 41 44  52 20 52 31 34 2c 52 65  |.$.   ADR R14,Re|
00002cb0  67 53 74 6f 72 65 0d 13  2e 1a 20 20 20 4c 44 4d  |gStore....   LDM|
00002cc0  49 41 20 52 31 34 2c 7b  52 30 2d 52 31 34 7d 5e  |IA R14,{R0-R14}^|
00002cd0  0d 13 38 1a 20 20 20 4c  44 52 20 52 31 34 2c 5b  |..8.   LDR R14,[|
00002ce0  52 31 34 2c 23 31 35 2a  34 5d 0d 13 42 12 20 20  |R14,#15*4]..B.  |
00002cf0  20 4d 4f 56 53 20 50 43  2c 52 31 34 0d 13 4c 04  | MOVS PC,R14..L.|
00002d00  0d 13 56 0c 2e 45 73 63  61 70 65 53 0d 13 60 0e  |..V..EscapeS..`.|
00002d10  20 20 20 45 51 55 44 20  31 37 0d 13 6a 14 20 20  |   EQUD 17..j.  |
00002d20  20 45 51 55 53 20 22 45  73 63 61 70 65 22 0d 13  | EQUS "Escape"..|
00002d30  74 0d 20 20 20 45 51 55  42 20 30 0d 13 7e 0c 20  |t.   EQUB 0..~. |
00002d40  20 20 41 4c 49 47 4e 0d  13 88 0d 2e 45 73 63 45  |  ALIGN.....EscE|
00002d50  72 72 6f 72 0d 13 92 12  20 20 20 4d 4f 56 20 52  |rror....   MOV R|
00002d60  30 2c 23 31 32 34 0d 13  9c 2e 20 20 20 53 57 49  |0,#124....   SWI|
00002d70  20 22 58 4f 53 5f 42 79  74 65 22 20 5c 20 43 6c  | "XOS_Byte" \ Cl|
00002d80  65 61 72 20 45 73 63 61  70 65 20 63 6f 6e 64 69  |ear Escape condi|
00002d90  74 69 6f 6e 0d 13 a6 15  20 20 20 41 44 52 20 52  |tion....   ADR R|
00002da0  30 2c 45 73 63 61 70 65  53 0d 13 b0 0f 2e 50 72  |0,EscapeS.....Pr|
00002db0  69 6e 74 45 72 72 6f 72  0d 13 ba 13 20 20 20 41  |intError....   A|
00002dc0  44 44 20 52 30 2c 52 30  2c 23 34 0d 13 c4 17 20  |DD R0,R0,#4.... |
00002dd0  20 20 53 57 49 20 22 4f  53 5f 4e 65 77 4c 69 6e  |  SWI "OS_NewLin|
00002de0  65 22 0d 13 ce 16 20 20  20 53 57 49 20 22 4f 53  |e"....   SWI "OS|
00002df0  5f 57 72 69 74 65 30 22  0d 13 d8 0f 20 20 20 42  |_Write0"....   B|
00002e00  20 45 43 4c 6f 6f 70 0d  13 e2 05 5d 0d 13 ec 05  | ECLoop....]....|
00002e10  ed 0d 13 f6 29 ff 28 22  53 41 56 45 20 49 6e 74  |....).("SAVE Int|
00002e20  4d 6f 64 75 6c 65 20 22  2b c3 7e 53 70 61 63 65  |Module "+.~Space|
00002e30  2b 22 2b 22 2b c3 7e 50  25 29 0d 14 00 1e ff 28  |+"+"+.~P%).....(|
00002e40  22 53 45 54 54 59 50 45  20 49 6e 74 4d 6f 64 75  |"SETTYPE IntModu|
00002e50  6c 65 20 46 46 41 22 29  0d ff                    |le FFA")..|
00002e5a