Home » Archimedes archive » Archimedes World » AW-1991-05.adf » May91 » !AWMay91/Goodies/PD/!PrBuffer/ModSrcCode
!AWMay91/Goodies/PD/!PrBuffer/ModSrcCode
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-1991-05.adf » May91 |
Filename: | !AWMay91/Goodies/PD/!PrBuffer/ModSrcCode |
Read OK: | ✔ |
File size: | 4C61 bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM > src 20REM Printer Buffer program. 30REM Anton Carver. 24/9/88 - 28/9/88, 21/9/89 - 25/9/89. 31REM see also 'ReadMe' and 'CopyRight'. 40 50REM define global register names. 60pc= 15 : ln= 14 : sp= 13 70rBufferNo= 1 : rWorkSpace= 12 80 90REM define useful immediate constants. 100iCFlag= 1<<29 : iVFlag= 1<<28 110iPrinter= 3 : iDefaultSize= 8*1024 : iCodeSize= &1000 120iInsNo= &14 : iRemNo= &15 : iCnpNo= &16 : iErrorBase= &1000 130 140REM define workspace offsets. 150oSpace= 0 : oPlace= 4 : oLook= 8 : oEnd= 12 : oSize= 16 : opc= 20 160oEscape= 24 : oOldAddress= 28 : oOld12 = 32 : oBuffer= 36 170 180DIM lCode iCodeSize 220FOR pass= 0 TO 2 STEP 2 230P%= lCode 240[ OPT pass 260.lStart 270FNheader 280FNfinal ; Finalisation code. 290FNinit ; Initialisation code. 300FNservice ; Service Call Handler. 310FNescape ; Handle Escape 320FNnobuffer ; *NoBuffer 330FNflush ; *Flush 340FNbuffer ; *Buffer 350FNremove ; RemV code. 360FNcount ; CnpV code. 370FNclaim ; OS_Claim, OS_Release Vectors. 380FNinsert ; InsV code. 390.lEnd 400] 410NEXT 420*SET Pbuf$name PrintBuf 430OSCLI"SAVE <Pbuf$name> "+STR$~lStart+" "+STR$~(lEnd+4) 440*SetType <Pbuf$name> &ffa 450END 451 460DEF FNheader 470[ OPT pass 471; Module Header Block 480.lHeader 490EQUD 0 ; no start code 500EQUD (lInit-lStart) ; Initialisation Code 510EQUD (lFinal-lStart) ; Finialistion Code 520EQUD (lService-lStart) ; Service Entry, RESET 530EQUD (lModuleTitle-lStart) ; Module Title 540EQUD (lModuleHelp-lStart) ; Module Help 550EQUD (lKeywords-lStart) ; Keywords block 560EQUD 0 570EQUD 0 580EQUD 0 590EQUD 0 600.lModuleTitle 610EQUS "PrinterBuffer" 620EQUD 0 630ALIGN 640.lModuleHelp 650EQUS "Printer Buffer"+CHR$(9)+"1.00 (01 Oct 1989) Anton Carver" 660EQUB 0 670ALIGN 680.lKeywords 690EQUS "Buffer" 700EQUB 0 710ALIGN 720EQUD (lBufferCode-lStart) 730EQUW 0 ; min parameters 740EQUW 1 ; max parameters 750EQUD (lBufferSyntax-lStart) 760EQUD (lBufferHelp-lStart) 770 780EQUS "NoBuffer" 790EQUB 0 800ALIGN 810EQUD (lNoBufferCode-lStart) 820EQUW 0 ; min parameters 830EQUW 0 ; max parameters 840EQUD (lNoBufferSyntax-lStart) 850EQUD (lNoBufferHelp-lStart) 860 870EQUS "Flush" 880EQUB 0 890ALIGN 900EQUD (lFlushCode-lStart) 910EQUW 0 ; min parameters 920EQUW 0 ; max parameters 930EQUD (lFlushSyntax-lStart) 940EQUD (lFlushHelp-lStart) 950EQUD 0 ; keyword table terminator 960.lBufferSyntax 970EQUS "Syntax:"+CHR$(9)+"*Buffer [<size>[k]]"+CHR$(13) 980EQUB 0 990ALIGN 1000.lBufferHelp 1010EQUS "*Buffer used to create a printer buffer of specified size. " 1020EQUS "The default buffer size is 8k." 1030EQUS CHR$(13)+"Syntax:"+CHR$(9)+"*Buffer [<size>[k]]"+CHR$(13) 1040EQUB 0 1050ALIGN 1060.lNoBufferSyntax 1070EQUS "Syntax:"+CHR$(9)+"*NoBuffer"+CHR$(13) 1080EQUB 0 1090ALIGN 1100.lNoBufferHelp 1110EQUS "*NoBuffer deselects the previously created buffer and frees " 1120EQUS "the memory."+CHR$(13) 1130EQUB 0 1140ALIGN 1150.lFlushSyntax 1160EQUS "Syntax:"+CHR$(9)+"*Flush"+CHR$(13) 1170EQUB 0 1180.lFlushHelp 1190EQUS "*Flush clears current contents of the buffer without deselecting " 1200EQUS "it. Use this to clear information you no longer want to print. " 1210EQUS "It is exactly equivalent to: " 1220EQUS "*FX"+CHR$(31)+"21"+CHR$(31)+"3"+CHR$(13) 1230EQUB 0 1240ALIGN 1250] 1260="" 1270DEF FNescape 1280[ OPT pass 1281; Trap escape flag it, then pass to old handler. 1282; Used to prevent Escape from clearing the buffer. 1283; entry - r11 bit 6=1 -> escape 1284; r12 - pointer to workspace 1290.lEscape 1300STR r0, [sp, #-4] ; forge r0 onto stack. 1301AND r0, r11, #(1<<6) ; r11 bit 6=1 -> escape. 1302TEQ r0, #0 1310MOVNE r0, #1 ; if escape then flag. 1320STRNE r0, [r12, #oEscape] 1330LDR r0, [r12, #oOldAddress] ; 1340STMFD (sp)!, {r0} ; forge old address onto stack 1350SUB sp, sp, #4 ; 1360LDR r12, [r12, #oOld12] ; load old value of r12 1370LDMFD (sp)!, {r0, pc} ; pass to old handler 1380] 1390="" 1400DEF FNservice 1410[ OPT pass 1411; Service call reclaims the vectors after a non-fatal reset. 1412; entry - r12 - pointer to the private word. 1420.lService 1430STMFD (sp)!, {r0, r5, ln} 1440TEQ r1, #&27 ; reset 1450LDMNEFD (sp)!, {r0, r5, pc}^ 1460LDR r5, [r12] 1470BL lClaim_Vector 1480LDMFD (sp)!, {r0, r5, pc}^ 1490] 1500="" 1510DEF FNinit 1520LOCAL rTmp, rWorkSpace 1530rTmp=3 : rWorkSpace= 2 1540[ OPT pass 1550; Entry - r12 - pointer to private word. 1560; r10 - pointer to arg. 1570; Exit - V=1 -> error - r0 - error pointer. 1580; Purpose- Initialise module. 1590.lInit 1600STMFD (sp)!, {r1, r5, r6, ln} ; store registers. 1610LDR r5, [r12] ; r12 is a pointer to the private word 1620TEQ r5, #0 ; private word<>0 -> Tidy. 1630BNE lTidy 1640MOV r1, r10 ; r10 is pointer to arg. 1650MOV r6, #iDefaultSize 1660LDRB r0, [r1] ; r1 pointers to arg. 1670CMP r0, #32 ; char>=32 -> arg. 1680BLHS lEvaluate_Arg 1690LDMVSFD (sp)!, {r1, r5, r6, pc} ; return if error. 1700TEQ r6, #0 1710LDMEQFD (sp)!, {r1, r5, r6, pc} ; return if no space required. 1720BL lClaim_Space 1730LDMVSFD (sp)!, {r1, r5, r6, pc} ; return if error. 1740BL lClaim_Vector 1750LDMFD (sp)!, {r1, r5, r6, pc} ; return. 1760.lTidy 1770LDR r6, [r5, #oSize] 1780BL lClaim_Vector 1790LDMFD (sp)!, {r1, r5, r6, pc} 1800 1801; Find the value of the [<size>[k]] argument default 8k. 1810; Entry - r1 - pointer to arg. 1820; Exit - r6 - size in bytes. or V=1 -> error - r0 - error pointer. 1830.lEvaluate_Arg 1840STMFD (sp)!, {r0, r2, ln} 1850MOV r0, #10 ; conversion in base 10. 1860ORR r0, r0, #(1<<29) ; bit 29 indicates limit in r2. 1870MOV r2, #4096 ; values bigger then 4096 are silly. 1880SWI "XOS_ReadUnsigned" 1890ADDVS sp, sp, #4 1900LDMVSFD (sp)!, {r2, pc} ; return if error. 1910MOV r6, r2, ASL #10 ; r6 in bytes, r2 in kbytes. 1920LDRB r0, [r1], #1 ; r0= char. 1930CMP r0, #33 1940BLO lCheckTail 1950TEQ r0, #ASC("K") 1960BEQ lCheckTail 1970TEQ r0, #ASC("k") 1980BNE lArgError 1990.lCheckTail 2000TEQ r0, #13 2010LDMEQFD (sp)!, {r0, r2, pc} ; found <cr> -> terminate. 2020LDRB r0, [r1], #1 2030CMP r0, #33 2040BLO lCheckTail ; okay if char<33, else error. 2050.lArgError 2060ADR r0, lArgErrorBlock ; set error pointer. 2070SWI "XOS_GenerateError" ; V=1 - indicates error. 2080ADD sp, sp, #4 2090LDMFD (sp)!, {r2, pc} 2100.lArgErrorBlock 2110EQUD iErrorBase+0 2120EQUS "Argument Syntax: <size>[k]" 2130EQUB 0 2140ALIGN 2141 2142; Claim Space for the buffer and initialise values 2150; Entry - r6 - size of buffer in bytes. 2160; r12 - pointer the private word. 2170; Exit - V=1, r0 - pointer to error block. 2171; r5 - workspace pointer 2180.lClaim_Space 2190STMFD (sp)!, {r2, r3, ln} 2200ADD r3, r6, #oBuffer ; workspace= buffersize+other 2210MOV r0, #6 ; claim workspace 2220SWI "XOS_Module" 2230LDMVSFD (sp)!, {r2, r3, pc} ; return on error. 2240STR r2, [r12] ; private word = workspace pointer 2250MOV r5, r2 ; r5, is returned value. 2260MOV rTmp, #oBuffer ; Find address of buffer start. 2270STR rTmp, [rWorkSpace, #oPlace] ; Store this in place to insert. 2280STR rTmp, [rWorkSpace, #oLook] ; Store this in place to look. 2290ADD rTmp, rTmp, r6 ; End= Start + Size. 2300STR rTmp, [rWorkSpace, #oEnd] ; Store this in end of buffer. 2310STR r6, [rWorkSpace, #oSize] ; Store Size of buffer. 2320STR r6, [rWorkSpace, #oSpace] ; Store this in amount of space. 2330MOV rTmp, #0 ; Reset escape flag. 2340STR rTmp, [rWorkSpace, #oEscape] 2350LDMFD (sp)!, {r2, r3, pc} 2370] 2380="" 2390DEF FNbuffer 2400[ OPT pass 2401; Code for the *Buffer [<size>[k]] command. 2410; Entry - r1 - no. of args 2420; r0 - pointer to args. 2421; r12 - pointer to workspace 2430.lBufferCode 2440STMFD (sp)!, {r1, r6, ln} 2450BL lNoBufferCode ; deallocate any previous buffer. 2460LDMVSFD (sp)!, {r1, r6, pc} 2470MOV r6, #iDefaultSize 2480TEQ r1, #0 ; r1 is number of args. 2490MOVNE r1, r0 2500BLNE lEvaluate_Arg 2510LDMVSFD (sp)!, {r1, r6, pc} 2520TEQ r6, #0 2530LDMEQFD (sp)!, {r1, r6, pc} ; if size=0 do not claim. 2540BL lClaim_Space 2550LDMVSFD (sp)!, {r1, r6, pc} 2560BL lClaim_Vector 2570LDMFD (sp)!, {r1, r6, pc} 2580] 2590="" 2600DEF FNfinal 2610[ OPT pass 2611; Finialisation Code, called by *RMKill, *RMClear, *RMTidy. etc. 2620; Entry - r10 - fatality indicator, r10=0 means non-fatal 2630; r12 - pointer to the private word. 2631; Exit - r0 = ? 2640.lFinal 2650STMFD (sp)!, {r1, r2, r5, ln} 2660TEQ r10, #0 2670BEQ lNon_Fatal 2680MOV r0, #152 ; examine buffer. 2690MOV r1, #3 2700SWI "XOS_Byte" 2710LDMVSFD (sp)!, {r1, r2, r5, pc} 2720BCC lInUseError ; the buffer is not empty. 2730.lNon_Fatal 2740LDR r5, [r12] ; r5 is workspace pointer. 2750TEQ r5, #0 2760BLNE lRestore_Vector ; only if workspace exists. 2770LDMFD (sp)!, {r1, r2, r5, pc} 2780.lInUseError 2790SWI "XOS_GenerateError" 2800ADR r0, lInUseErrorBlock 2810LDMFD (sp)!, {r1, r2, r5, pc} 2820.lInUseErrorBlock 2830EQUD iErrorBase+1 2840EQUS "Printer Buffer currently in use (*Flush will clear)." 2850EQUB 0 2860ALIGN 2870; 2880] 2890="" 2900DEF FNnobuffer 2910[ OPT pass 2911; Code for the *NoBuffer command 2912; Entry - r12 - pointer to workspace. 2920.lNoBufferCode 2930STMFD (sp)!, {r0, r1, r2, r10, ln} 2940MOV r10, #1 2950BL lFinal 2960ADDVS sp, sp, #4 ; pop r0 so not restored 2970LDMVSFD (sp)!, {r1, r2, r10, pc} ; return if error. 2980LDR r2, [r12] ; get workspace pointer. 2990TEQ r2, #0 3000LDMEQFD (sp)!, {r0, r1, r2, r10, pc} ; return if no workspace. 3010.lRestore_Space 3020MOV r0, #7 ; free workspace. 3030SWI "XOS_Module" 3040MOV r2, #0 3050STR r2, [r12] ; reset value of private word. 3060ADDVS sp, sp, #4 ; pop r0 so not restored. 3070LDMVSFD (sp)!, {r1, r2, r10, pc} 3080LDMFD (sp)!, {r0, r1, r2, r10, pc} 3090] 3100="" 3110DEF FNflush 3120[ OPT pass 3121; Code for the *Flush command. Equivalent to *FX 21,3. 3130.lFlushCode 3140STMFD (sp)!, {r0, r1, ln} 3150MOV r0, #21 3160MOV r1, #3 3170SWI "XOS_Byte" 3180LDMVCFD (sp)!, {r0, r1, pc} 3190ADD sp, sp, #4 3200LDMFD (sp)!, {r1, pc} 3210] 3220="" 3230DEF FNinsert 3240LOCAL rChar, rReturn, rPlace, rSpace, rEnd 3250rChar= 0 : rReturn= 2 3260rPlace= 3 : rSpace= rPlace : rEnd= 4 3270[ OPT pass 3280; InsV - Insert Vector Code. 3290; Entry - r0= char to insert, r1= buffer no. 3300; Exit - r2= ?, C=1 insertion failed. 3310.lInsV 3320 TEQ rBufferNo, #iPrinter ; Insert in Printer Buffer? 3330 MOVNES pc, ln ; No, Pass on. 3340.lInsert 3350 LDMFD (sp)!, {rReturn} ; Get Return Address. 3360 STMFD (sp)!, {rSpace} ; Push Register. 3370 LDR rSpace, [rWorkSpace,#oSpace] ; Load Space in Buffer. 3380 TEQ rSpace, #0 ; How much space in Buffer? 3390 LDMFD (sp)!, {rSpace} ; Restore Register. 3400 ORREQS pc, rReturn, #iCFlag ; No Space, Return with Carry Set. 3410 STMFD (sp)!, {rPlace, rEnd} ; Push Registers. 3420 LDR rPlace, [rWorkSpace, #oPlace] ; Load Registers, Place. 3430 LDR rEnd, [rWorkSpace, #oEnd] ; End. 3440 BIC rReturn, rReturn, #iCFlag ; Clear Carry flag for Return. 3450 STRB rChar, [rWorkSpace, rPlace] ; Store Character in Buffer. 3460 ADD rPlace, rPlace, #1 ; 3470 TEQ rPlace, rEnd ; Are we at end of Buffer. 3480 MOVEQ rPlace, #oBuffer ; Yes, go back to start. 3490 STR rPlace, [rWorkSpace, #oPlace] ; Store new place. 3500 LDR rSpace, [rWorkSpace, #oSpace] ; Load amount of space. 3510 SUB rSpace, rSpace, #1 ; Decrement space. 3520 STR rSpace, [rWorkSpace, #oSpace] ; Store new space. 3530 LDMFD (sp)!, {rPlace, rEnd} ; Restore Registers. 3540 MOVS pc, rReturn ; Return with Carry Clear. 3550] 3560="" 3570DEF FNremove 3580LOCAL rExamine, rRemoved, rSpace, rLook, rEnd 3590rExamine= 0 : rRemoved= 2 3600rSpace= 1 : rLook= rSpace : rEnd= 4 3610[ OPT pass 3620; RemV - Remove/Examine Vector code. 3630; Entry - r1= buffer no., V=1 means examine, V=0 means remove. 3640; Exit - r2= char returned or examined, C=1 buffer was empty. 3650.lRemV 3660 STR pc, [rWorkSpace, #opc] ; store away PSR. 3670 TEQ rBufferNo, #iPrinter ; Remove from Printer Buffer? 3680 MOVNES pc, ln ; No, Pass on. 3690.lRemFunction 3700 STMFD (sp)!, {rSpace,rEnd} ; Push Register. 3710 LDR rSpace, [rWorkSpace, #oSpace] ; Load amount of space. 3720 LDR rEnd, [rWorkSpace, #oSize] 3730 TEQ rSpace, rEnd ; Space=Size -> Empty 3740 BNE lnot_empty 3750 LDR rSpace, [sp,#8] ; forge C set on stack. 3760 ORR rSpace, rSpace, #iCFlag 3770 STR rSpace, [sp,#8] 3780 LDMEQFD (sp)!, {rSpace, rEnd, pc}^ ; Return if empty, C=1. 3790 3800.lnot_empty 3810 LDR rSpace, [sp,#8] ; forge C clear on stack. 3820 BIC rSpace, rSpace, #iCFlag 3830 STR rSpace, [sp,#8] 3840 LDR rLook, [rWorkSpace, #opc] ; get PSR on entry 3850 TEQP pc, rLook 3860 BVC lRemove ; If V=0 then branch to Remove. 3870 LDR rLook, [rWorkSpace, #oLook] ; Load pointer to char to remove. 3880 LDRB rExamine, [rWorkSpace, rLook] ; Load char value. 3890 MOV rRemoved, rExamine 3900 LDMFD (sp)!, {rSpace, rEnd, pc}^ 3910 ; Remove Character. 3920.lRemove 3930 LDR rLook, [rWorkSpace, #oLook] ; Load pointer to char to remove. 3940 LDR rEnd, [rWorkSpace, #oEnd] ; Load pointer to end of buffer. 3950 LDRB rRemoved, [rWorkSpace, rLook] ; Load char value, and remove. 3960 ADD rLook, rLook, #1 ; increment look pointer 3970 MOV rExamine, rRemoved 3980 TEQ rLook, rEnd ; Are we at end of Buffer? 3990 MOVEQ rLook, #oBuffer ; Yes, go back to start. 4000 STR rLook, [rWorkSpace, #oLook] ; Save new place to look. 4010 LDR rSpace, [rWorkSpace, #oSpace] ; Load amount of space in buffer. 4020 ADD rSpace, rSpace, #1 ; Inc. space - one less char. 4030 STR rSpace, [rWorkSpace, #oSpace] ; Save amount of space. 4040 LDMFD (sp)!, {rSpace, rEnd, pc}^ ; Restore Registers. 4050] 4060="" 4070DEF FNcount 4080LOCAL rCountL, rCountH, rSize, rSpace, rTmp, iBot8 4090rCountL= 1 : rCountH= 2 4100rSpace= rCountL : rSize= rCountH : rTmp= 0 4110iBot8= &FF 4120[ OPT pass 4130; CnpV - Count/Purge Vector Code. 4140; Entry - r1= buffer no., V=0 -> count, C=0 -> entries, C=1 -> space 4150; V=1 -> purge. 4160; Exit - r0= ?, if V=0 then r1= count (bottom 8); r2= count (top 24). 4170.lCnpV 4180 STR pc, [rWorkSpace, #opc] 4190 TEQ rBufferNo, #iPrinter ; Count/Purge Printer Buffer? 4200 MOVNES pc, ln ; No, Pass on. 4210.lCnpFunction 4220 LDR r0, [rWorkSpace, #opc] ; store PSR 4230 TEQP pc, r0 4240 BVS lPurge ; if V=1 then branch to purge. 4250 4260.lCount ; Count entries/space. 4270 LDR rCountL, [rWorkSpace, #oSpace] ; Load amount of space. 4280 BLCC lEntry ; if C=0 then subroutine entries. 4290 MOV rCountH, rCountL, ASR #8 ; Get top 24 bits of count. 4300 AND rCountL, rCountL, #iBot8 ; Get bottom 8 bits of count. 4310 LDMFD (sp)!, {pc}^ ; Get Return Address. 4320 4330.lEntry ; Count entries. 4340 LDR rSize, [rWorkSpace, #oSize] ; Load size of buffer. 4350 SUB rCountL, rSize, rSpace ; Entries= Size - Space. 4360 MOV pc, ln ; Return. 4370 4380.lPurge ; Purge Buffer. 4390 LDR rTmp, [rWorkSpace, #oEscape] 4400 TEQ rTmp, #0 ; Do not flush buffer if vector.. 4401 MOV rTmp, #0 ; ..called by escape handler! 4402 STR rTmp, [rWorkSpace, #oEscape] 4410 LDMNEFD (sp)!, {pc}^ ; return if Escape Condition. 4430 MOV rTmp, #oBuffer ; Find address of buffer start. 4440 STR rTmp, [rWorkSpace, #oPlace] ; Store this in place to insert. 4450 STR rTmp, [rWorkSpace, #oLook] ; Store this in place to look. 4460 LDR rTmp, [rWorkSpace, #oSize] ; Find Size of buffer. 4470 STR rTmp, [rWorkSpace, #oSpace] ; Store this in amount of space. 4480 LDMFD (sp)!, {pc}^ ; Return. 4490] 4500="" 4510DEF FNclaim 4520LOCAL rVector, rAddress, rGive, rWorkSpace 4530rVector= 0 : rAddress= 1 : rGive= 2 4540rTmp= rVector : rWorkSpace= 5 4550[ OPT pass 4560; Entry - r5 - pointer to workspace 4570; Claim - Code to Claim the vectors, initialise the buffer. 4580.lClaim_Vector 4590 STMFD (sp)!, {rAddress, rGive, ln} 4600 MOV r0, #9 4610 ADR r1, lEscape 4620 MOV r2, rWorkSpace 4630 SWI "XOS_ChangeEnvironment" ; Claim escape handler. 4640 LDMVSFD (sp)!, {rAddress, rGive, pc} 4650 STR r1, [rWorkSpace, #oOldAddress] 4660 STR r2, [rWorkSpace, #oOld12] ; Store old escape handler. 4670 MOV rVector, #iInsNo 4680 ADR rAddress, lInsV 4690 MOV rGive, rWorkSpace 4700 SWI "XOS_Claim" ; Claim InsV. 4710 LDMVSFD (sp)!, {rAddress, rGive, pc} 4720 MOV rVector, #iRemNo 4730 ADR rAddress, lRemV 4740 MOV rGive, rWorkSpace 4750 SWI "XOS_Claim" ; Claim RemV. 4760 LDMVSFD (sp)!, {rAddress, rGive, pc} 4770 MOV rVector, #iCnpNo 4780 ADR rAddress, lCnpV 4790 MOV rGive, rWorkSpace 4800 SWI "XOS_Claim" ; Claim CnpV. 4810 LDMFD (sp)!, {rAddress, rGive, pc} 4820; Restore - Code to restore the vectors to use previous buffer. 4830.lRestore_Vector 4840 STMFD (sp)!, {rAddress, rGive, ln} 4850 MOV r0, #9 4860 LDR r1, [rWorkSpace, #oOldAddress] 4870 LDR r2, [rWorkSpace, #oOld12] 4880 SWI "XOS_ChangeEnvironment" ; Restore escape handler. 4890 LDMVSFD (sp)!, {rAddress, rGive, pc} 4900 MOV rVector, #iInsNo 4910 ADR rAddress, lInsV 4920 MOV rGive, rWorkSpace 4930 SWI "XOS_Release" ; Release InsV. 4940 LDMVSFD (sp)!, {rAddress, rGive, pc} 4950 MOV rVector, #iRemNo 4960 ADR rAddress, lRemV 4970 MOV rGive, rWorkSpace 4980 SWI "XOS_Release" ; Release RemV. 4990 LDMVSFD (sp)!, {rAddress, rGive, pc} 5000 MOV rVector, #iCnpNo 5010 ADR rAddress, lCnpV 5020 MOV rGive, rWorkSpace 5030 SWI "XOS_Release" ; Release CnpV. 5040 LDMFD (sp)!, {rAddress, rGive, pc} 5050] 5060=""
� > src � Printer Buffer program. 9� Anton Carver. 24/9/88 - 28/9/88, 21/9/89 - 25/9/89. (� see also 'ReadMe' and 'CopyRight'. ( 2#� define global register names. <pc= 15 : ln= 14 : sp= 13 F!rBufferNo= 1 : rWorkSpace= 12 P Z(� define useful immediate constants. d!iCFlag= 1<<29 : iVFlag= 1<<28 n9iPrinter= 3 : iDefaultSize= 8*1024 : iCodeSize= &1000 x?iInsNo= &14 : iRemNo= &15 : iCnpNo= &16 : iErrorBase= &1000 � �� define workspace offsets. �EoSpace= 0 : oPlace= 4 : oLook= 8 : oEnd= 12 : oSize= 16 : opc= 20 �=oEscape= 24 : oOldAddress= 28 : oOld12 = 32 : oBuffer= 36 � �� lCode iCodeSize �� pass= 0 � 2 � 2 � P%= lCode �[ OPT pass .lStart �header ;�final ; Finalisation code. "=�init ; Initialisation code. ,>�service ; Service Call Handler. 66�escape ; Handle Escape @2�nobuffer ; *NoBuffer J/�flush ; *Flush T0�buffer ; *Buffer ^3�remove ; RemV code. h3�count ; CnpV code. rF�claim ; OS_Claim, OS_Release Vectors. |3�insert ; InsV code. � .lEnd �] �� �*SET Pbuf$name PrintBuf �0�"SAVE <Pbuf$name> "+�~lStart+" "+�~(lEnd+4) �*SetType <Pbuf$name> &ffa �� � � � �header �[ OPT pass �; Module Header Block �.lHeader �EQUD 0 ; no start code �=EQUD (lInit-lStart) ; Initialisation Code �;EQUD (lFinal-lStart) ; Finialistion Code >EQUD (lService-lStart) ; Service Entry, RESET 6EQUD (lModuleTitle-lStart) ; Module Title 5EQUD (lModuleHelp-lStart) ; Module Help &8EQUD (lKeywords-lStart) ; Keywords block 0EQUD 0 :EQUD 0 DEQUD 0 NEQUD 0 X.lModuleTitle bEQUS "PrinterBuffer" lEQUD 0 v ALIGN �.lModuleHelp �BEQUS "Printer Buffer"+�(9)+"1.00 (01 Oct 1989) Anton Carver" �EQUB 0 � ALIGN �.lKeywords �EQUS "Buffer" �EQUB 0 � ALIGN �EQUD (lBufferCode-lStart) �8EQUW 0 ; min parameters �8EQUW 1 ; max parameters � EQUD (lBufferSyntax-lStart) �EQUD (lBufferHelp-lStart) EQUS "NoBuffer" EQUB 0 ALIGN * EQUD (lNoBufferCode-lStart) 48EQUW 0 ; min parameters >8EQUW 0 ; max parameters H"EQUD (lNoBufferSyntax-lStart) R EQUD (lNoBufferHelp-lStart) \ fEQUS "Flush" pEQUB 0 z ALIGN �EQUD (lFlushCode-lStart) �8EQUW 0 ; min parameters �8EQUW 0 ; max parameters �EQUD (lFlushSyntax-lStart) �EQUD (lFlushHelp-lStart) �BEQUD 0 ; keyword table terminator �.lBufferSyntax �4EQUS "Syntax:"+�(9)+"*Buffer [<size>[k]]"+�(13) �EQUB 0 � ALIGN �.lBufferHelp �GEQUS "*Buffer used to create a printer buffer of specified size. " �*EQUS "The default buffer size is 8k." :EQUS �(13)+"Syntax:"+�(9)+"*Buffer [<size>[k]]"+�(13) EQUB 0 ALIGN $.lNoBufferSyntax .*EQUS "Syntax:"+�(9)+"*NoBuffer"+�(13) 8EQUB 0 B ALIGN L.lNoBufferHelp VHEQUS "*NoBuffer deselects the previously created buffer and frees " `EQUS "the memory."+�(13) jEQUB 0 t ALIGN ~.lFlushSyntax �'EQUS "Syntax:"+�(9)+"*Flush"+�(13) �EQUB 0 �.lFlushHelp �MEQUS "*Flush clears current contents of the buffer without deselecting " �KEQUS "it. Use this to clear information you no longer want to print. " �)EQUS "It is exactly equivalent to: " �*EQUS "*FX"+�(31)+"21"+�(31)+"3"+�(13) �EQUB 0 � ALIGN �] �="" � � �escape [ OPT pass 4; Trap escape flag it, then pass to old handler. 6; Used to prevent Escape from clearing the buffer. #; entry - r11 bit 6=1 -> escape (; r12 - pointer to workspace .lEscape >STR r0, [sp, #-4] ; forge r0 onto stack. >� r0, r11, #(1<<6) ; r11 bit 6=1 -> escape. TEQ r0, #0 >MOVNE r0, #1 ; if escape then flag. (STRNE r0, [r12, #oEscape] 2)LDR r0, [r12, #oOldAddress] ; <FSTMFD (sp)!, {r0} ; forge old address onto stack F)SUB sp, sp, #4 ; P?LDR r12, [r12, #oOld12] ; load old value of r12 Z=LDMFD (sp)!, {r0, pc} ; pass to old handler d] n="" x� �service �[ OPT pass �@; Service call reclaims the vectors after a non-fatal reset. �0; entry - r12 - pointer to the private word. � .lService �STMFD (sp)!, {r0, r5, ln} �/TEQ r1, #&27 ; reset �!LDMNEFD (sp)!, {r0, r5, pc}^ �LDR r5, [r12] �BL lClaim_Vector �LDMFD (sp)!, {r0, r5, pc}^ �] �="" �� �init �� rTmp, rWorkSpace �rTmp=3 : rWorkSpace= 2 [ OPT pass -; Entry - r12 - pointer to private word. $; r10 - pointer to arg. "1; Exit - V=1 -> error - r0 - error pointer. ,!; Purpose- Initialise module. 6 .lInit @:STMFD (sp)!, {r1, r5, r6, ln} ; store registers. JNLDR r5, [r12] ; r12 is a pointer to the private word TBTEQ r5, #0 ; private word<>0 -> Tidy. ^BNE lTidy h@MOV r1, r10 ; r10 is pointer to arg. rMOV r6, #iDefaultSize |=LDRB r0, [r1] ; r1 pointers to arg. �:CMP r0, #32 ; char>=32 -> arg. �BLHS lEvaluate_Arg �:LDMVSFD (sp)!, {r1, r5, r6, pc} ; return if error. �TEQ r6, #0 �FLDMEQFD (sp)!, {r1, r5, r6, pc} ; return if no space required. �BL lClaim_Space �:LDMVSFD (sp)!, {r1, r5, r6, pc} ; return if error. �BL lClaim_Vector �1LDMFD (sp)!, {r1, r5, r6, pc} ; return. � .lTidy �LDR r6, [r5, #oSize] �BL lClaim_Vector �"LDMFD (sp)!, {r1, r5, r6, pc} <; Find the value of the [<size>[k]] argument default 8k. "; Entry - r1 - pointer to arg. G; Exit - r6 - size in bytes. or V=1 -> error - r0 - error pointer. &.lEvaluate_Arg 0STMFD (sp)!, {r0, r2, ln} :@MOV r0, #10 ; conversion in base 10. DF�R r0, r0, #(1<<29) ; bit 29 indicates limit in r2. NLMOV r2, #4096 ; values bigger then 4096 are silly. XSWI "XOS_ReadUnsigned" bADDVS sp, sp, #4 l:LDMVSFD (sp)!, {r2, pc} ; return if error. vDMOV r6, r2, ASL #10 ; r6 in bytes, r2 in kbytes. �3LDRB r0, [r1], #1 ; r0= char. �CMP r0, #33 �BLO lCheckTail �TEQ r0, #�("K") �BEQ lCheckTail �TEQ r0, #�("k") �BNE lArgError �.lCheckTail �TEQ r0, #13 �BLDMEQFD (sp)!, {r0, r2, pc} ; found <cr> -> terminate. �LDRB r0, [r1], #1 �CMP r0, #33 �FBLO lCheckTail ; okay if char<33, else error. .lArgError <ADR r0, lArgErrorBlock ; set error pointer. @SWI "XOS_GenerateError" ; V=1 - indicates error. ADD sp, sp, #4 *LDMFD (sp)!, {r2, pc} 4.lArgErrorBlock >EQUD iErrorBase+0 H&EQUS "Argument Syntax: <size>[k]" REQUB 0 \ ALIGN ] ^6; Claim Space for the buffer and initialise values f+; Entry - r6 - size of buffer in bytes. p-; r12 - pointer the private word. z/; Exit - V=1, r0 - pointer to error block. {$; r5 - workspace pointer �.lClaim_Space �STMFD (sp)!, {r2, r3, ln} �EADD r3, r6, #oBuffer ; workspace= buffersize+other �9MOV r0, #6 ; claim workspace �SWI "XOS_Module" �:LDMVSFD (sp)!, {r2, r3, pc} ; return on error. �JSTR r2, [r12] ; private word = workspace pointer �@MOV r5, r2 ; r5, is returned value. �GMOV rTmp, #oBuffer ; Find address of buffer start. �HSTR rTmp, [rWorkSpace, #oPlace] ; Store this in place to insert. �FSTR rTmp, [rWorkSpace, #oLook] ; Store this in place to look. �<ADD rTmp, rTmp, r6 ; End= Start + Size. �FSTR rTmp, [rWorkSpace, #oEnd] ; Store this in end of buffer. ?STR r6, [rWorkSpace, #oSize] ; Store Size of buffer. HSTR r6, [rWorkSpace, #oSpace] ; Store this in amount of space. <MOV rTmp, #0 ; Reset escape flag. $&STR rTmp, [rWorkSpace, #oEscape] .LDMFD (sp)!, {r2, r3, pc} B] L="" V � �buffer `[ OPT pass a/; Code for the *Buffer [<size>[k]] command. j; Entry - r1 - no. of args t#; r0 - pointer to args. u(; r12 - pointer to workspace ~.lBufferCode �STMFD (sp)!, {r1, r6, ln} �IBL lNoBufferCode ; deallocate any previous buffer. �LDMVSFD (sp)!, {r1, r6, pc} �MOV r6, #iDefaultSize �?TEQ r1, #0 ; r1 is number of args. �MOVNE r1, r0 �BLNE lEvaluate_Arg �LDMVSFD (sp)!, {r1, r6, pc} �TEQ r6, #0 �ALDMEQFD (sp)!, {r1, r6, pc} ; if size=0 do not claim. �BL lClaim_Space �LDMVSFD (sp)!, {r1, r6, pc} BL lClaim_Vector LDMFD (sp)!, {r1, r6, pc} ] ="" (� �final 2[ OPT pass 3D; Finialisation Code, called by *RMKill, *RMClear, *RMTidy. etc. <=; Entry - r10 - fatality indicator, r10=0 means non-fatal F0; r12 - pointer to the private word. G; Exit - r0 = ? P.lFinal Z!STMFD (sp)!, {r1, r2, r5, ln} dTEQ r10, #0 nBEQ lNon_Fatal x9MOV r0, #152 ; examine buffer. �MOV r1, #3 �SWI "XOS_Byte" �#LDMVSFD (sp)!, {r1, r2, r5, pc} �BBCC lInUseError ; the buffer is not empty. �.lNon_Fatal �BLDR r5, [r12] ; r5 is workspace pointer. �TEQ r5, #0 �CBLNE lRestore_Vector ; only if workspace exists. �!LDMFD (sp)!, {r1, r2, r5, pc} �.lInUseError �SWI "XOS_GenerateError" �ADR r0, lInUseErrorBlock �!LDMFD (sp)!, {r1, r2, r5, pc} .lInUseErrorBlock EQUD iErrorBase+1 @EQUS "Printer Buffer currently in use (*Flush will clear)." "EQUB 0 , ALIGN 6; @] J="" T� �nobuffer ^[ OPT pass _$; Code for the *NoBuffer command `); Entry - r12 - pointer to workspace. h.lNoBufferCode r&STMFD (sp)!, {r0, r1, r2, r10, ln} |MOV r10, #1 �BL lFinal �CADDVS sp, sp, #4 ; pop r0 so not restored �=LDMVSFD (sp)!, {r1, r2, r10, pc} ; return if error. �CLDR r2, [r12] ; get workspace pointer. �TEQ r2, #0 �DLDMEQFD (sp)!, {r0, r1, r2, r10, pc} ; return if no workspace. �.lRestore_Space �<MOV r0, #7 ; free workspace. �SWI "XOS_Module" �MOV r2, #0 �ISTR r2, [r12] ; reset value of private word. �DADDVS sp, sp, #4 ; pop r0 so not restored. �$LDMVSFD (sp)!, {r1, r2, r10, pc} &LDMFD (sp)!, {r0, r1, r2, r10, pc} ] ="" &� �flush 0[ OPT pass 1:; Code for the *Flush command. Equivalent to *FX 21,3. :.lFlushCode DSTMFD (sp)!, {r0, r1, ln} NMOV r0, #21 XMOV r1, #3 bSWI "XOS_Byte" lLDMVCFD (sp)!, {r0, r1, pc} vADD sp, sp, #4 �LDMFD (sp)!, {r1, pc} �] �="" � � �insert �*� rChar, rReturn, rPlace, rSpace, rEnd �rChar= 0 : rReturn= 2 �(rPlace= 3 : rSpace= rPlace : rEnd= 4 �[ OPT pass �!; InsV - Insert Vector Code. �0; Entry - r0= char to insert, r1= buffer no. �*; Exit - r2= ?, C=1 insertion failed. � .lInsV �G TEQ rBufferNo, #iPrinter ; Insert in Printer Buffer? : MOVNES pc, ln ; No, Pass on. .lInsert A LDMFD (sp)!, {rReturn} ; Get Return Address. < STMFD (sp)!, {rSpace} ; Push Register. *C LDR rSpace, [rWorkSpace,#oSpace] ; Load Space in Buffer. 4G TEQ rSpace, #0 ; How much space in Buffer? >? LDMFD (sp)!, {rSpace} ; Restore Register. HM �REQS pc, rReturn, #iCFlag ; No Space, Return with Carry Set. R= STMFD (sp)!, {rPlace, rEnd} ; Push Registers. \D LDR rPlace, [rWorkSpace, #oPlace] ; Load Registers, Place. fB LDR rEnd, [rWorkSpace, #oEnd] ; End. pJ BIC rReturn, rReturn, #iCFlag ; Clear Carry flag for Return. zH STRB rChar, [rWorkSpace, rPlace] ; Store Character in Buffer. �- ADD rPlace, rPlace, #1 ; �F TEQ rPlace, rEnd ; Are we at end of Buffer. �A �Q rPlace, #oBuffer ; Yes, go back to start. �> STR rPlace, [rWorkSpace, #oPlace] ; Store new place. �C LDR rSpace, [rWorkSpace, #oSpace] ; Load amount of space. �> SUB rSpace, rSpace, #1 ; Decrement space. �> STR rSpace, [rWorkSpace, #oSpace] ; Store new space. �@ LDMFD (sp)!, {rPlace, rEnd} ; Restore Registers. �F MOVS pc, rReturn ; Return with Carry Clear. �] �="" � � �remove �-� rExamine, rRemoved, rSpace, rLook, rEnd rExamine= 0 : rRemoved= 2 'rSpace= 1 : rLook= rSpace : rEnd= 4 [ OPT pass $); RemV - Remove/Examine Vector code. .B; Entry - r1= buffer no., V=1 means examine, V=0 means remove. 8B; Exit - r2= char returned or examined, C=1 buffer was empty. B .lRemV L> STR pc, [rWorkSpace, #opc] ; store away PSR. VJ TEQ rBufferNo, #iPrinter ; Remove from Printer Buffer? `; MOVNES pc, ln ; No, Pass on. j.lRemFunction t= STMFD (sp)!, {rSpace,rEnd} ; Push Register. ~D LDR rSpace, [rWorkSpace, #oSpace] ; Load amount of space. �' LDR rEnd, [rWorkSpace, #oSize] �B TEQ rSpace, rEnd ; Space=Size -> Empty � BNE lnot_empty �D LDR rSpace, [sp,#8] ; forge C set on stack. �# �R rSpace, rSpace, #iCFlag � STR rSpace, [sp,#8] �D LDMEQFD (sp)!, {rSpace, rEnd, pc}^ ; Return if empty, C=1. � �.lnot_empty �F LDR rSpace, [sp,#8] ; forge C clear on stack. �$ BIC rSpace, rSpace, #iCFlag � STR rSpace, [sp,#8] ? LDR rLook, [rWorkSpace, #opc] ; get PSR on entry TEQP pc, rLook L BVC lRemove ; If V=0 then branch to Remove. N LDR rLook, [rWorkSpace, #oLook] ; Load pointer to char to remove. (? LDRB rExamine, [rWorkSpace, rLook] ; Load char value. 2 MOV rRemoved, rExamine <' LDMFD (sp)!, {rSpace, rEnd, pc}^ F@ ; Remove Character. P.lRemove ZN LDR rLook, [rWorkSpace, #oLook] ; Load pointer to char to remove. dM LDR rEnd, [rWorkSpace, #oEnd] ; Load pointer to end of buffer. nK LDRB rRemoved, [rWorkSpace, rLook] ; Load char value, and remove. xE ADD rLook, rLook, #1 ; increment look pointer � MOV rExamine, rRemoved �G TEQ rLook, rEnd ; Are we at end of Buffer? �B �Q rLook, #oBuffer ; Yes, go back to start. �F STR rLook, [rWorkSpace, #oLook] ; Save new place to look. �N LDR rSpace, [rWorkSpace, #oSpace] ; Load amount of space in buffer. �J ADD rSpace, rSpace, #1 ; Inc. space - one less char. �D STR rSpace, [rWorkSpace, #oSpace] ; Save amount of space. �A LDMFD (sp)!, {rSpace, rEnd, pc}^ ; Restore Registers. �] �="" �� �count �2� rCountL, rCountH, rSize, rSpace, rTmp, iBot8 �rCountL= 1 : rCountH= 2 .rSpace= rCountL : rSize= rCountH : rTmp= 0 iBot8= &FF [ OPT pass "&; CnpV - Count/Purge Vector Code. ,H; Entry - r1= buffer no., V=0 -> count, C=0 -> entries, C=1 -> space 6+; V=1 -> purge. @J; Exit - r0= ?, if V=0 then r1= count (bottom 8); r2= count (top 24). J .lCnpV T# STR pc, [rWorkSpace, #opc] ^H TEQ rBufferNo, #iPrinter ; Count/Purge Printer Buffer? h9 MOVNES pc, ln ; No, Pass on. r.lCnpFunction |6 LDR r0, [rWorkSpace, #opc] ; store PSR � TEQP pc, r0 �I BVS lPurge ; if V=1 then branch to purge. � �A.lCount ; Count entries/space. �C LDR rCountL, [rWorkSpace, #oSpace] ; Load amount of space. �L BLCC lEntry ; if C=0 then subroutine entries. �F MOV rCountH, rCountL, ASR #8 ; Get top 24 bits of count. �F � rCountL, rCountL, #iBot8 ; Get bottom 8 bits of count. �@ LDMFD (sp)!, {pc}^ ; Get Return Address. � �;.lEntry ; Count entries. �A LDR rSize, [rWorkSpace, #oSize] ; Load size of buffer. �C SUB rCountL, rSize, rSpace ; Entries= Size - Space. 4 MOV pc, ln ; Return. :.lPurge ; Purge Buffer. &) LDR rTmp, [rWorkSpace, #oEscape] 0L TEQ rTmp, #0 ; Do not flush buffer if vector.. 1H MOV rTmp, #0 ; ..called by escape handler! 2) STR rTmp, [rWorkSpace, #oEscape] :H LDMNEFD (sp)!, {pc}^ ; return if Escape Condition. NJ MOV rTmp, #oBuffer ; Find address of buffer start. XK STR rTmp, [rWorkSpace, #oPlace] ; Store this in place to insert. bI STR rTmp, [rWorkSpace, #oLook] ; Store this in place to look. lA LDR rTmp, [rWorkSpace, #oSize] ; Find Size of buffer. vK STR rTmp, [rWorkSpace, #oSpace] ; Store this in amount of space. �4 LDMFD (sp)!, {pc}^ ; Return. �] �="" �� �claim �*� rVector, rAddress, rGive, rWorkSpace �'rVector= 0 : rAddress= 1 : rGive= 2 �!rTmp= rVector : rWorkSpace= 5 �[ OPT pass �'; Entry - r5 - pointer to workspace �?; Claim - Code to Claim the vectors, initialise the buffer. �.lClaim_Vector �) STMFD (sp)!, {rAddress, rGive, ln} � MOV r0, #9 ADR r1, lEscape MOV r2, rWorkSpace B SWI "XOS_ChangeEnvironment" ; Claim escape handler. ) LDMVSFD (sp)!, {rAddress, rGive, pc} *+ STR r1, [rWorkSpace, #oOldAddress] 4F STR r2, [rWorkSpace, #oOld12] ; Store old escape handler. > MOV rVector, #iInsNo H ADR rAddress, lInsV R MOV rGive, rWorkSpace \8 SWI "XOS_Claim" ; Claim InsV. f) LDMVSFD (sp)!, {rAddress, rGive, pc} p MOV rVector, #iRemNo z ADR rAddress, lRemV � MOV rGive, rWorkSpace �8 SWI "XOS_Claim" ; Claim RemV. �) LDMVSFD (sp)!, {rAddress, rGive, pc} � MOV rVector, #iCnpNo � ADR rAddress, lCnpV � MOV rGive, rWorkSpace �8 SWI "XOS_Claim" ; Claim CnpV. �) LDMFD (sp)!, {rAddress, rGive, pc} �C; Restore - Code to restore the vectors to use previous buffer. �.lRestore_Vector �) STMFD (sp)!, {rAddress, rGive, ln} � MOV r0, #9 �+ LDR r1, [rWorkSpace, #oOldAddress] & LDR r2, [rWorkSpace, #oOld12] D SWI "XOS_ChangeEnvironment" ; Restore escape handler. ) LDMVSFD (sp)!, {rAddress, rGive, pc} $ MOV rVector, #iInsNo . ADR rAddress, lInsV 8 MOV rGive, rWorkSpace B: SWI "XOS_Release" ; Release InsV. L) LDMVSFD (sp)!, {rAddress, rGive, pc} V MOV rVector, #iRemNo ` ADR rAddress, lRemV j MOV rGive, rWorkSpace t: SWI "XOS_Release" ; Release RemV. ~) LDMVSFD (sp)!, {rAddress, rGive, pc} � MOV rVector, #iCnpNo � ADR rAddress, lCnpV � MOV rGive, rWorkSpace �: SWI "XOS_Release" ; Release CnpV. �) LDMFD (sp)!, {rAddress, rGive, pc} �] �="" �
00000000 0d 00 0a 0b f4 20 3e 20 73 72 63 0d 00 14 1d f4 |..... > src.....| 00000010 20 50 72 69 6e 74 65 72 20 42 75 66 66 65 72 20 | Printer Buffer | 00000020 70 72 6f 67 72 61 6d 2e 0d 00 1e 39 f4 20 41 6e |program....9. An| 00000030 74 6f 6e 20 43 61 72 76 65 72 2e 20 32 34 2f 39 |ton Carver. 24/9| 00000040 2f 38 38 20 2d 20 32 38 2f 39 2f 38 38 2c 20 32 |/88 - 28/9/88, 2| 00000050 31 2f 39 2f 38 39 20 2d 20 32 35 2f 39 2f 38 39 |1/9/89 - 25/9/89| 00000060 2e 0d 00 1f 28 f4 20 73 65 65 20 61 6c 73 6f 20 |....(. see also | 00000070 27 52 65 61 64 4d 65 27 20 61 6e 64 20 27 43 6f |'ReadMe' and 'Co| 00000080 70 79 52 69 67 68 74 27 2e 0d 00 28 04 0d 00 32 |pyRight'...(...2| 00000090 23 f4 20 64 65 66 69 6e 65 20 67 6c 6f 62 61 6c |#. define global| 000000a0 20 72 65 67 69 73 74 65 72 20 6e 61 6d 65 73 2e | register names.| 000000b0 0d 00 3c 1c 70 63 3d 20 31 35 20 3a 20 6c 6e 3d |..<.pc= 15 : ln=| 000000c0 20 31 34 20 3a 20 73 70 3d 20 31 33 0d 00 46 21 | 14 : sp= 13..F!| 000000d0 72 42 75 66 66 65 72 4e 6f 3d 20 31 20 3a 20 72 |rBufferNo= 1 : r| 000000e0 57 6f 72 6b 53 70 61 63 65 3d 20 31 32 0d 00 50 |WorkSpace= 12..P| 000000f0 04 0d 00 5a 28 f4 20 64 65 66 69 6e 65 20 75 73 |...Z(. define us| 00000100 65 66 75 6c 20 69 6d 6d 65 64 69 61 74 65 20 63 |eful immediate c| 00000110 6f 6e 73 74 61 6e 74 73 2e 0d 00 64 21 69 43 46 |onstants...d!iCF| 00000120 6c 61 67 3d 20 31 3c 3c 32 39 20 3a 20 69 56 46 |lag= 1<<29 : iVF| 00000130 6c 61 67 3d 20 31 3c 3c 32 38 0d 00 6e 39 69 50 |lag= 1<<28..n9iP| 00000140 72 69 6e 74 65 72 3d 20 33 20 3a 20 69 44 65 66 |rinter= 3 : iDef| 00000150 61 75 6c 74 53 69 7a 65 3d 20 38 2a 31 30 32 34 |aultSize= 8*1024| 00000160 20 3a 20 69 43 6f 64 65 53 69 7a 65 3d 20 26 31 | : iCodeSize= &1| 00000170 30 30 30 0d 00 78 3f 69 49 6e 73 4e 6f 3d 20 26 |000..x?iInsNo= &| 00000180 31 34 20 3a 20 69 52 65 6d 4e 6f 3d 20 26 31 35 |14 : iRemNo= &15| 00000190 20 3a 20 69 43 6e 70 4e 6f 3d 20 26 31 36 20 3a | : iCnpNo= &16 :| 000001a0 20 69 45 72 72 6f 72 42 61 73 65 3d 20 26 31 30 | iErrorBase= &10| 000001b0 30 30 0d 00 82 04 0d 00 8c 1f f4 20 64 65 66 69 |00......... defi| 000001c0 6e 65 20 77 6f 72 6b 73 70 61 63 65 20 6f 66 66 |ne workspace off| 000001d0 73 65 74 73 2e 0d 00 96 45 6f 53 70 61 63 65 3d |sets....EoSpace=| 000001e0 20 30 20 3a 20 6f 50 6c 61 63 65 3d 20 34 20 3a | 0 : oPlace= 4 :| 000001f0 20 6f 4c 6f 6f 6b 3d 20 38 20 3a 20 6f 45 6e 64 | oLook= 8 : oEnd| 00000200 3d 20 31 32 20 3a 20 6f 53 69 7a 65 3d 20 31 36 |= 12 : oSize= 16| 00000210 20 3a 20 6f 70 63 3d 20 32 30 0d 00 a0 3d 6f 45 | : opc= 20...=oE| 00000220 73 63 61 70 65 3d 20 32 34 20 3a 20 6f 4f 6c 64 |scape= 24 : oOld| 00000230 41 64 64 72 65 73 73 3d 20 32 38 20 3a 20 6f 4f |Address= 28 : oO| 00000240 6c 64 31 32 20 3d 20 33 32 20 3a 20 6f 42 75 66 |ld12 = 32 : oBuf| 00000250 66 65 72 3d 20 33 36 0d 00 aa 04 0d 00 b4 15 de |fer= 36.........| 00000260 20 6c 43 6f 64 65 20 69 43 6f 64 65 53 69 7a 65 | lCode iCodeSize| 00000270 0d 00 dc 15 e3 20 70 61 73 73 3d 20 30 20 b8 20 |..... pass= 0 . | 00000280 32 20 88 20 32 0d 00 e6 0d 50 25 3d 20 6c 43 6f |2 . 2....P%= lCo| 00000290 64 65 0d 00 f0 0e 5b 20 4f 50 54 20 70 61 73 73 |de....[ OPT pass| 000002a0 0d 01 04 0b 2e 6c 53 74 61 72 74 0d 01 0e 0b a4 |.....lStart.....| 000002b0 68 65 61 64 65 72 0d 01 18 3b a4 66 69 6e 61 6c |header...;.final| 000002c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000002d0 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 46 | ; F| 000002e0 69 6e 61 6c 69 73 61 74 69 6f 6e 20 63 6f 64 65 |inalisation code| 000002f0 2e 0d 01 22 3d a4 69 6e 69 74 20 20 20 20 20 20 |..."=.init | 00000300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000310 20 20 20 20 20 20 20 20 3b 20 49 6e 69 74 69 61 | ; Initia| 00000320 6c 69 73 61 74 69 6f 6e 20 63 6f 64 65 2e 0d 01 |lisation code...| 00000330 2c 3e a4 73 65 72 76 69 63 65 20 20 20 20 20 20 |,>.service | 00000340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000350 20 20 20 20 20 3b 20 53 65 72 76 69 63 65 20 43 | ; Service C| 00000360 61 6c 6c 20 48 61 6e 64 6c 65 72 2e 0d 01 36 36 |all Handler...66| 00000370 a4 65 73 63 61 70 65 20 20 20 20 20 20 20 20 20 |.escape | 00000380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000390 20 20 20 3b 20 48 61 6e 64 6c 65 20 45 73 63 61 | ; Handle Esca| 000003a0 70 65 0d 01 40 32 a4 6e 6f 62 75 66 66 65 72 20 |pe..@2.nobuffer | 000003b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000003c0 20 20 20 20 20 20 20 20 20 3b 20 2a 4e 6f 42 75 | ; *NoBu| 000003d0 66 66 65 72 0d 01 4a 2f a4 66 6c 75 73 68 20 20 |ffer..J/.flush | 000003e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000003f0 20 20 20 20 20 20 20 20 20 20 20 3b 20 2a 46 6c | ; *Fl| 00000400 75 73 68 0d 01 54 30 a4 62 75 66 66 65 72 20 20 |ush..T0.buffer | 00000410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000420 20 20 20 20 20 20 20 20 20 20 3b 20 2a 42 75 66 | ; *Buf| 00000430 66 65 72 0d 01 5e 33 a4 72 65 6d 6f 76 65 20 20 |fer..^3.remove | 00000440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000450 20 20 20 20 20 20 20 20 20 20 3b 20 52 65 6d 56 | ; RemV| 00000460 20 63 6f 64 65 2e 0d 01 68 33 a4 63 6f 75 6e 74 | code...h3.count| 00000470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000480 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 43 | ; C| 00000490 6e 70 56 20 63 6f 64 65 2e 0d 01 72 46 a4 63 6c |npV code...rF.cl| 000004a0 61 69 6d 20 20 20 20 20 20 20 20 20 20 20 20 20 |aim | 000004b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000004c0 3b 20 4f 53 5f 43 6c 61 69 6d 2c 20 4f 53 5f 52 |; OS_Claim, OS_R| 000004d0 65 6c 65 61 73 65 20 56 65 63 74 6f 72 73 2e 0d |elease Vectors..| 000004e0 01 7c 33 a4 69 6e 73 65 72 74 20 20 20 20 20 20 |.|3.insert | 000004f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000500 20 20 20 20 20 20 3b 20 49 6e 73 56 20 63 6f 64 | ; InsV cod| 00000510 65 2e 0d 01 86 09 2e 6c 45 6e 64 0d 01 90 05 5d |e......lEnd....]| 00000520 0d 01 9a 05 ed 0d 01 a4 1b 2a 53 45 54 20 50 62 |.........*SET Pb| 00000530 75 66 24 6e 61 6d 65 20 50 72 69 6e 74 42 75 66 |uf$name PrintBuf| 00000540 0d 01 ae 30 ff 22 53 41 56 45 20 3c 50 62 75 66 |...0."SAVE <Pbuf| 00000550 24 6e 61 6d 65 3e 20 22 2b c3 7e 6c 53 74 61 72 |$name> "+.~lStar| 00000560 74 2b 22 20 22 2b c3 7e 28 6c 45 6e 64 2b 34 29 |t+" "+.~(lEnd+4)| 00000570 0d 01 b8 1d 2a 53 65 74 54 79 70 65 20 3c 50 62 |....*SetType <Pb| 00000580 75 66 24 6e 61 6d 65 3e 20 26 66 66 61 0d 01 c2 |uf$name> &ffa...| 00000590 05 e0 0d 01 c3 04 0d 01 cc 0d dd 20 a4 68 65 61 |........... .hea| 000005a0 64 65 72 0d 01 d6 0e 5b 20 4f 50 54 20 70 61 73 |der....[ OPT pas| 000005b0 73 0d 01 d7 19 3b 20 4d 6f 64 75 6c 65 20 48 65 |s....; Module He| 000005c0 61 64 65 72 20 42 6c 6f 63 6b 0d 01 e0 0c 2e 6c |ader Block.....l| 000005d0 48 65 61 64 65 72 0d 01 ea 1c 45 51 55 44 20 20 |Header....EQUD | 000005e0 30 20 20 3b 20 6e 6f 20 73 74 61 72 74 20 63 6f |0 ; no start co| 000005f0 64 65 0d 01 f4 3d 45 51 55 44 20 20 28 6c 49 6e |de...=EQUD (lIn| 00000600 69 74 2d 6c 53 74 61 72 74 29 20 20 20 20 20 20 |it-lStart) | 00000610 20 20 20 20 20 20 20 20 20 20 3b 20 49 6e 69 74 | ; Init| 00000620 69 61 6c 69 73 61 74 69 6f 6e 20 43 6f 64 65 0d |ialisation Code.| 00000630 01 fe 3b 45 51 55 44 20 20 28 6c 46 69 6e 61 6c |..;EQUD (lFinal| 00000640 2d 6c 53 74 61 72 74 29 20 20 20 20 20 20 20 20 |-lStart) | 00000650 20 20 20 20 20 20 20 3b 20 46 69 6e 69 61 6c 69 | ; Finiali| 00000660 73 74 69 6f 6e 20 43 6f 64 65 0d 02 08 3e 45 51 |stion Code...>EQ| 00000670 55 44 20 20 28 6c 53 65 72 76 69 63 65 2d 6c 53 |UD (lService-lS| 00000680 74 61 72 74 29 20 20 20 20 20 20 20 20 20 20 20 |tart) | 00000690 20 20 3b 20 53 65 72 76 69 63 65 20 45 6e 74 72 | ; Service Entr| 000006a0 79 2c 20 52 45 53 45 54 0d 02 12 36 45 51 55 44 |y, RESET...6EQUD| 000006b0 20 20 28 6c 4d 6f 64 75 6c 65 54 69 74 6c 65 2d | (lModuleTitle-| 000006c0 6c 53 74 61 72 74 29 20 20 20 20 20 20 20 20 20 |lStart) | 000006d0 3b 20 4d 6f 64 75 6c 65 20 54 69 74 6c 65 0d 02 |; Module Title..| 000006e0 1c 35 45 51 55 44 20 20 28 6c 4d 6f 64 75 6c 65 |.5EQUD (lModule| 000006f0 48 65 6c 70 2d 6c 53 74 61 72 74 29 20 20 20 20 |Help-lStart) | 00000700 20 20 20 20 20 20 3b 20 4d 6f 64 75 6c 65 20 48 | ; Module H| 00000710 65 6c 70 0d 02 26 38 45 51 55 44 20 20 28 6c 4b |elp..&8EQUD (lK| 00000720 65 79 77 6f 72 64 73 2d 6c 53 74 61 72 74 29 20 |eywords-lStart) | 00000730 20 20 20 20 20 20 20 20 20 20 20 3b 20 4b 65 79 | ; Key| 00000740 77 6f 72 64 73 20 62 6c 6f 63 6b 0d 02 30 0b 45 |words block..0.E| 00000750 51 55 44 20 20 30 0d 02 3a 0b 45 51 55 44 20 20 |QUD 0..:.EQUD | 00000760 30 0d 02 44 0b 45 51 55 44 20 20 30 0d 02 4e 0b |0..D.EQUD 0..N.| 00000770 45 51 55 44 20 20 30 0d 02 58 11 2e 6c 4d 6f 64 |EQUD 0..X..lMod| 00000780 75 6c 65 54 69 74 6c 65 0d 02 62 19 45 51 55 53 |uleTitle..b.EQUS| 00000790 20 20 22 50 72 69 6e 74 65 72 42 75 66 66 65 72 | "PrinterBuffer| 000007a0 22 0d 02 6c 0b 45 51 55 44 20 20 30 0d 02 76 09 |"..l.EQUD 0..v.| 000007b0 41 4c 49 47 4e 0d 02 80 10 2e 6c 4d 6f 64 75 6c |ALIGN.....lModul| 000007c0 65 48 65 6c 70 0d 02 8a 42 45 51 55 53 20 20 22 |eHelp...BEQUS "| 000007d0 50 72 69 6e 74 65 72 20 42 75 66 66 65 72 22 2b |Printer Buffer"+| 000007e0 bd 28 39 29 2b 22 31 2e 30 30 20 28 30 31 20 4f |.(9)+"1.00 (01 O| 000007f0 63 74 20 31 39 38 39 29 20 20 41 6e 74 6f 6e 20 |ct 1989) Anton | 00000800 43 61 72 76 65 72 22 0d 02 94 0b 45 51 55 42 20 |Carver"....EQUB | 00000810 20 30 0d 02 9e 09 41 4c 49 47 4e 0d 02 a8 0e 2e | 0....ALIGN.....| 00000820 6c 4b 65 79 77 6f 72 64 73 0d 02 b2 12 45 51 55 |lKeywords....EQU| 00000830 53 20 20 22 42 75 66 66 65 72 22 0d 02 bc 0b 45 |S "Buffer"....E| 00000840 51 55 42 20 20 30 0d 02 c6 09 41 4c 49 47 4e 0d |QUB 0....ALIGN.| 00000850 02 d0 1e 45 51 55 44 20 20 28 6c 42 75 66 66 65 |...EQUD (lBuffe| 00000860 72 43 6f 64 65 2d 6c 53 74 61 72 74 29 0d 02 da |rCode-lStart)...| 00000870 38 45 51 55 57 20 20 30 20 20 20 20 20 20 20 20 |8EQUW 0 | 00000880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000890 20 20 20 20 20 3b 20 6d 69 6e 20 70 61 72 61 6d | ; min param| 000008a0 65 74 65 72 73 0d 02 e4 38 45 51 55 57 20 20 31 |eters...8EQUW 1| 000008b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000008c0 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 6d | ; m| 000008d0 61 78 20 70 61 72 61 6d 65 74 65 72 73 0d 02 ee |ax parameters...| 000008e0 20 45 51 55 44 20 20 28 6c 42 75 66 66 65 72 53 | EQUD (lBufferS| 000008f0 79 6e 74 61 78 2d 6c 53 74 61 72 74 29 0d 02 f8 |yntax-lStart)...| 00000900 1e 45 51 55 44 20 20 28 6c 42 75 66 66 65 72 48 |.EQUD (lBufferH| 00000910 65 6c 70 2d 6c 53 74 61 72 74 29 0d 03 02 04 0d |elp-lStart).....| 00000920 03 0c 14 45 51 55 53 20 20 22 4e 6f 42 75 66 66 |...EQUS "NoBuff| 00000930 65 72 22 0d 03 16 0b 45 51 55 42 20 20 30 0d 03 |er"....EQUB 0..| 00000940 20 09 41 4c 49 47 4e 0d 03 2a 20 45 51 55 44 20 | .ALIGN..* EQUD | 00000950 20 28 6c 4e 6f 42 75 66 66 65 72 43 6f 64 65 2d | (lNoBufferCode-| 00000960 6c 53 74 61 72 74 29 0d 03 34 38 45 51 55 57 20 |lStart)..48EQUW | 00000970 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | 0 | 00000980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00000990 20 6d 69 6e 20 70 61 72 61 6d 65 74 65 72 73 0d | min parameters.| 000009a0 03 3e 38 45 51 55 57 20 20 30 20 20 20 20 20 20 |.>8EQUW 0 | 000009b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000009c0 20 20 20 20 20 20 20 3b 20 6d 61 78 20 70 61 72 | ; max par| 000009d0 61 6d 65 74 65 72 73 0d 03 48 22 45 51 55 44 20 |ameters..H"EQUD | 000009e0 20 28 6c 4e 6f 42 75 66 66 65 72 53 79 6e 74 61 | (lNoBufferSynta| 000009f0 78 2d 6c 53 74 61 72 74 29 0d 03 52 20 45 51 55 |x-lStart)..R EQU| 00000a00 44 20 20 28 6c 4e 6f 42 75 66 66 65 72 48 65 6c |D (lNoBufferHel| 00000a10 70 2d 6c 53 74 61 72 74 29 0d 03 5c 04 0d 03 66 |p-lStart)..\...f| 00000a20 11 45 51 55 53 20 20 22 46 6c 75 73 68 22 0d 03 |.EQUS "Flush"..| 00000a30 70 0b 45 51 55 42 20 20 30 0d 03 7a 09 41 4c 49 |p.EQUB 0..z.ALI| 00000a40 47 4e 0d 03 84 1d 45 51 55 44 20 20 28 6c 46 6c |GN....EQUD (lFl| 00000a50 75 73 68 43 6f 64 65 2d 6c 53 74 61 72 74 29 0d |ushCode-lStart).| 00000a60 03 8e 38 45 51 55 57 20 20 30 20 20 20 20 20 20 |..8EQUW 0 | 00000a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000a80 20 20 20 20 20 20 20 3b 20 6d 69 6e 20 70 61 72 | ; min par| 00000a90 61 6d 65 74 65 72 73 0d 03 98 38 45 51 55 57 20 |ameters...8EQUW | 00000aa0 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | 0 | 00000ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00000ac0 20 6d 61 78 20 70 61 72 61 6d 65 74 65 72 73 0d | max parameters.| 00000ad0 03 a2 1f 45 51 55 44 20 20 28 6c 46 6c 75 73 68 |...EQUD (lFlush| 00000ae0 53 79 6e 74 61 78 2d 6c 53 74 61 72 74 29 0d 03 |Syntax-lStart)..| 00000af0 ac 1d 45 51 55 44 20 20 28 6c 46 6c 75 73 68 48 |..EQUD (lFlushH| 00000b00 65 6c 70 2d 6c 53 74 61 72 74 29 0d 03 b6 42 45 |elp-lStart)...BE| 00000b10 51 55 44 20 20 30 20 20 20 20 20 20 20 20 20 20 |QUD 0 | 00000b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000b30 20 20 20 3b 20 6b 65 79 77 6f 72 64 20 74 61 62 | ; keyword tab| 00000b40 6c 65 20 74 65 72 6d 69 6e 61 74 6f 72 0d 03 c0 |le terminator...| 00000b50 12 2e 6c 42 75 66 66 65 72 53 79 6e 74 61 78 0d |..lBufferSyntax.| 00000b60 03 ca 34 45 51 55 53 20 20 22 53 79 6e 74 61 78 |..4EQUS "Syntax| 00000b70 3a 22 2b bd 28 39 29 2b 22 2a 42 75 66 66 65 72 |:"+.(9)+"*Buffer| 00000b80 20 5b 3c 73 69 7a 65 3e 5b 6b 5d 5d 22 2b bd 28 | [<size>[k]]"+.(| 00000b90 31 33 29 0d 03 d4 0b 45 51 55 42 20 20 30 0d 03 |13)....EQUB 0..| 00000ba0 de 09 41 4c 49 47 4e 0d 03 e8 10 2e 6c 42 75 66 |..ALIGN.....lBuf| 00000bb0 66 65 72 48 65 6c 70 0d 03 f2 47 45 51 55 53 20 |ferHelp...GEQUS | 00000bc0 20 22 2a 42 75 66 66 65 72 20 75 73 65 64 20 74 | "*Buffer used t| 00000bd0 6f 20 63 72 65 61 74 65 20 61 20 70 72 69 6e 74 |o create a print| 00000be0 65 72 20 62 75 66 66 65 72 20 6f 66 20 73 70 65 |er buffer of spe| 00000bf0 63 69 66 69 65 64 20 73 69 7a 65 2e 20 22 0d 03 |cified size. "..| 00000c00 fc 2a 45 51 55 53 20 20 22 54 68 65 20 64 65 66 |.*EQUS "The def| 00000c10 61 75 6c 74 20 62 75 66 66 65 72 20 73 69 7a 65 |ault buffer size| 00000c20 20 69 73 20 38 6b 2e 22 0d 04 06 3a 45 51 55 53 | is 8k."...:EQUS| 00000c30 20 20 bd 28 31 33 29 2b 22 53 79 6e 74 61 78 3a | .(13)+"Syntax:| 00000c40 22 2b bd 28 39 29 2b 22 2a 42 75 66 66 65 72 20 |"+.(9)+"*Buffer | 00000c50 5b 3c 73 69 7a 65 3e 5b 6b 5d 5d 22 2b bd 28 31 |[<size>[k]]"+.(1| 00000c60 33 29 0d 04 10 0a 45 51 55 42 20 30 0d 04 1a 09 |3)....EQUB 0....| 00000c70 41 4c 49 47 4e 0d 04 24 14 2e 6c 4e 6f 42 75 66 |ALIGN..$..lNoBuf| 00000c80 66 65 72 53 79 6e 74 61 78 0d 04 2e 2a 45 51 55 |ferSyntax...*EQU| 00000c90 53 20 20 22 53 79 6e 74 61 78 3a 22 2b bd 28 39 |S "Syntax:"+.(9| 00000ca0 29 2b 22 2a 4e 6f 42 75 66 66 65 72 22 2b bd 28 |)+"*NoBuffer"+.(| 00000cb0 31 33 29 0d 04 38 0b 45 51 55 42 20 20 30 0d 04 |13)..8.EQUB 0..| 00000cc0 42 09 41 4c 49 47 4e 0d 04 4c 12 2e 6c 4e 6f 42 |B.ALIGN..L..lNoB| 00000cd0 75 66 66 65 72 48 65 6c 70 0d 04 56 48 45 51 55 |ufferHelp..VHEQU| 00000ce0 53 20 20 22 2a 4e 6f 42 75 66 66 65 72 20 64 65 |S "*NoBuffer de| 00000cf0 73 65 6c 65 63 74 73 20 74 68 65 20 70 72 65 76 |selects the prev| 00000d00 69 6f 75 73 6c 79 20 63 72 65 61 74 65 64 20 62 |iously created b| 00000d10 75 66 66 65 72 20 61 6e 64 20 66 72 65 65 73 20 |uffer and frees | 00000d20 22 0d 04 60 1d 45 51 55 53 20 20 22 74 68 65 20 |"..`.EQUS "the | 00000d30 6d 65 6d 6f 72 79 2e 22 2b bd 28 31 33 29 0d 04 |memory."+.(13)..| 00000d40 6a 0b 45 51 55 42 20 20 30 0d 04 74 09 41 4c 49 |j.EQUB 0..t.ALI| 00000d50 47 4e 0d 04 7e 11 2e 6c 46 6c 75 73 68 53 79 6e |GN..~..lFlushSyn| 00000d60 74 61 78 0d 04 88 27 45 51 55 53 20 20 22 53 79 |tax...'EQUS "Sy| 00000d70 6e 74 61 78 3a 22 2b bd 28 39 29 2b 22 2a 46 6c |ntax:"+.(9)+"*Fl| 00000d80 75 73 68 22 2b bd 28 31 33 29 0d 04 92 0b 45 51 |ush"+.(13)....EQ| 00000d90 55 42 20 20 30 0d 04 9c 0f 2e 6c 46 6c 75 73 68 |UB 0.....lFlush| 00000da0 48 65 6c 70 0d 04 a6 4d 45 51 55 53 20 20 22 2a |Help...MEQUS "*| 00000db0 46 6c 75 73 68 20 63 6c 65 61 72 73 20 63 75 72 |Flush clears cur| 00000dc0 72 65 6e 74 20 63 6f 6e 74 65 6e 74 73 20 6f 66 |rent contents of| 00000dd0 20 74 68 65 20 62 75 66 66 65 72 20 77 69 74 68 | the buffer with| 00000de0 6f 75 74 20 64 65 73 65 6c 65 63 74 69 6e 67 20 |out deselecting | 00000df0 22 0d 04 b0 4b 45 51 55 53 20 20 22 69 74 2e 20 |"...KEQUS "it. | 00000e00 55 73 65 20 74 68 69 73 20 74 6f 20 63 6c 65 61 |Use this to clea| 00000e10 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 79 6f |r information yo| 00000e20 75 20 6e 6f 20 6c 6f 6e 67 65 72 20 77 61 6e 74 |u no longer want| 00000e30 20 74 6f 20 70 72 69 6e 74 2e 20 22 0d 04 ba 29 | to print. "...)| 00000e40 45 51 55 53 20 20 22 49 74 20 69 73 20 65 78 61 |EQUS "It is exa| 00000e50 63 74 6c 79 20 65 71 75 69 76 61 6c 65 6e 74 20 |ctly equivalent | 00000e60 74 6f 3a 20 22 0d 04 c4 2a 45 51 55 53 20 20 22 |to: "...*EQUS "| 00000e70 2a 46 58 22 2b bd 28 33 31 29 2b 22 32 31 22 2b |*FX"+.(31)+"21"+| 00000e80 bd 28 33 31 29 2b 22 33 22 2b bd 28 31 33 29 0d |.(31)+"3"+.(13).| 00000e90 04 ce 0b 45 51 55 42 20 20 30 0d 04 d8 09 41 4c |...EQUB 0....AL| 00000ea0 49 47 4e 0d 04 e2 05 5d 0d 04 ec 07 3d 22 22 0d |IGN....]....="".| 00000eb0 04 f6 0d dd 20 a4 65 73 63 61 70 65 0d 05 00 0e |.... .escape....| 00000ec0 5b 20 4f 50 54 20 70 61 73 73 0d 05 01 34 3b 20 |[ OPT pass...4; | 00000ed0 54 72 61 70 20 65 73 63 61 70 65 20 66 6c 61 67 |Trap escape flag| 00000ee0 20 69 74 2c 20 74 68 65 6e 20 70 61 73 73 20 74 | it, then pass t| 00000ef0 6f 20 6f 6c 64 20 68 61 6e 64 6c 65 72 2e 0d 05 |o old handler...| 00000f00 02 36 3b 20 55 73 65 64 20 74 6f 20 70 72 65 76 |.6; Used to prev| 00000f10 65 6e 74 20 45 73 63 61 70 65 20 66 72 6f 6d 20 |ent Escape from | 00000f20 63 6c 65 61 72 69 6e 67 20 74 68 65 20 62 75 66 |clearing the buf| 00000f30 66 65 72 2e 0d 05 03 23 3b 20 65 6e 74 72 79 20 |fer....#; entry | 00000f40 2d 20 72 31 31 20 62 69 74 20 36 3d 31 20 2d 3e |- r11 bit 6=1 ->| 00000f50 20 65 73 63 61 70 65 0d 05 04 28 3b 20 20 20 20 | escape...(; | 00000f60 20 20 20 20 20 72 31 32 20 2d 20 70 6f 69 6e 74 | r12 - point| 00000f70 65 72 20 74 6f 20 77 6f 72 6b 73 70 61 63 65 0d |er to workspace.| 00000f80 05 0a 0c 2e 6c 45 73 63 61 70 65 0d 05 14 3e 53 |....lEscape...>S| 00000f90 54 52 20 20 20 72 30 2c 20 5b 73 70 2c 20 23 2d |TR r0, [sp, #-| 00000fa0 34 5d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |4] | 00000fb0 20 20 20 3b 20 66 6f 72 67 65 20 72 30 20 6f 6e | ; forge r0 on| 00000fc0 74 6f 20 73 74 61 63 6b 2e 0d 05 15 3e 80 20 20 |to stack....>. | 00000fd0 20 72 30 2c 20 72 31 31 2c 20 23 28 31 3c 3c 36 | r0, r11, #(1<<6| 00000fe0 29 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b |) ;| 00000ff0 20 72 31 31 20 62 69 74 20 36 3d 31 20 2d 3e 20 | r11 bit 6=1 -> | 00001000 65 73 63 61 70 65 2e 0d 05 16 10 54 45 51 20 20 |escape.....TEQ | 00001010 20 72 30 2c 20 23 30 0d 05 1e 3e 4d 4f 56 4e 45 | r0, #0...>MOVNE| 00001020 20 72 30 2c 20 23 31 20 20 20 20 20 20 20 20 20 | r0, #1 | 00001030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00001040 20 69 66 20 65 73 63 61 70 65 20 74 68 65 6e 20 | if escape then | 00001050 66 6c 61 67 2e 0d 05 28 1d 53 54 52 4e 45 20 72 |flag...(.STRNE r| 00001060 30 2c 20 5b 72 31 32 2c 20 23 6f 45 73 63 61 70 |0, [r12, #oEscap| 00001070 65 5d 0d 05 32 29 4c 44 52 20 20 20 72 30 2c 20 |e]..2)LDR r0, | 00001080 5b 72 31 32 2c 20 23 6f 4f 6c 64 41 64 64 72 65 |[r12, #oOldAddre| 00001090 73 73 5d 20 20 20 20 20 20 20 3b 0d 05 3c 46 53 |ss] ;..<FS| 000010a0 54 4d 46 44 20 28 73 70 29 21 2c 20 7b 72 30 7d |TMFD (sp)!, {r0}| 000010b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000010c0 20 20 20 3b 20 66 6f 72 67 65 20 6f 6c 64 20 61 | ; forge old a| 000010d0 64 64 72 65 73 73 20 6f 6e 74 6f 20 73 74 61 63 |ddress onto stac| 000010e0 6b 0d 05 46 29 53 55 42 20 20 20 73 70 2c 20 73 |k..F)SUB sp, s| 000010f0 70 2c 20 23 34 20 20 20 20 20 20 20 20 20 20 20 |p, #4 | 00001100 20 20 20 20 20 20 20 20 20 3b 0d 05 50 3f 4c 44 | ;..P?LD| 00001110 52 20 20 20 72 31 32 2c 20 5b 72 31 32 2c 20 23 |R r12, [r12, #| 00001120 6f 4f 6c 64 31 32 5d 20 20 20 20 20 20 20 20 20 |oOld12] | 00001130 20 20 3b 20 6c 6f 61 64 20 6f 6c 64 20 76 61 6c | ; load old val| 00001140 75 65 20 6f 66 20 72 31 32 0d 05 5a 3d 4c 44 4d |ue of r12..Z=LDM| 00001150 46 44 20 28 73 70 29 21 2c 20 7b 72 30 2c 20 70 |FD (sp)!, {r0, p| 00001160 63 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |c} | 00001170 20 3b 20 70 61 73 73 20 74 6f 20 6f 6c 64 20 68 | ; pass to old h| 00001180 61 6e 64 6c 65 72 0d 05 64 05 5d 0d 05 6e 07 3d |andler..d.]..n.=| 00001190 22 22 0d 05 78 0e dd 20 a4 73 65 72 76 69 63 65 |""..x.. .service| 000011a0 0d 05 82 0e 5b 20 4f 50 54 20 70 61 73 73 0d 05 |....[ OPT pass..| 000011b0 83 40 3b 20 53 65 72 76 69 63 65 20 63 61 6c 6c |.@; Service call| 000011c0 20 72 65 63 6c 61 69 6d 73 20 74 68 65 20 76 65 | reclaims the ve| 000011d0 63 74 6f 72 73 20 61 66 74 65 72 20 61 20 6e 6f |ctors after a no| 000011e0 6e 2d 66 61 74 61 6c 20 72 65 73 65 74 2e 0d 05 |n-fatal reset...| 000011f0 84 30 3b 20 65 6e 74 72 79 20 2d 20 72 31 32 20 |.0; entry - r12 | 00001200 2d 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 |- pointer to the| 00001210 20 70 72 69 76 61 74 65 20 77 6f 72 64 2e 0d 05 | private word...| 00001220 8c 0d 2e 6c 53 65 72 76 69 63 65 0d 05 96 1d 53 |...lService....S| 00001230 54 4d 46 44 20 28 73 70 29 21 2c 20 7b 72 30 2c |TMFD (sp)!, {r0,| 00001240 20 72 35 2c 20 6c 6e 7d 0d 05 a0 2f 54 45 51 20 | r5, ln}.../TEQ | 00001250 20 20 72 31 2c 20 23 26 32 37 20 20 20 20 20 20 | r1, #&27 | 00001260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001270 3b 20 72 65 73 65 74 0d 05 aa 21 4c 44 4d 4e 45 |; reset...!LDMNE| 00001280 46 44 20 20 28 73 70 29 21 2c 20 7b 72 30 2c 20 |FD (sp)!, {r0, | 00001290 72 35 2c 20 70 63 7d 5e 0d 05 b4 13 4c 44 52 20 |r5, pc}^....LDR | 000012a0 20 20 72 35 2c 20 5b 72 31 32 5d 0d 05 be 17 42 | r5, [r12]....B| 000012b0 4c 20 20 20 20 6c 43 6c 61 69 6d 5f 56 65 63 74 |L lClaim_Vect| 000012c0 6f 72 0d 05 c8 1e 4c 44 4d 46 44 20 28 73 70 29 |or....LDMFD (sp)| 000012d0 21 2c 20 7b 72 30 2c 20 72 35 2c 20 70 63 7d 5e |!, {r0, r5, pc}^| 000012e0 0d 05 d2 05 5d 0d 05 dc 07 3d 22 22 0d 05 e6 0b |....]....=""....| 000012f0 dd 20 a4 69 6e 69 74 0d 05 f0 16 ea 20 72 54 6d |. .init..... rTm| 00001300 70 2c 20 72 57 6f 72 6b 53 70 61 63 65 0d 05 fa |p, rWorkSpace...| 00001310 1a 72 54 6d 70 3d 33 20 3a 20 72 57 6f 72 6b 53 |.rTmp=3 : rWorkS| 00001320 70 61 63 65 3d 20 32 0d 06 04 0e 5b 20 4f 50 54 |pace= 2....[ OPT| 00001330 20 70 61 73 73 0d 06 0e 2d 3b 20 45 6e 74 72 79 | pass...-; Entry| 00001340 20 20 2d 20 72 31 32 20 2d 20 70 6f 69 6e 74 65 | - r12 - pointe| 00001350 72 20 74 6f 20 70 72 69 76 61 74 65 20 77 6f 72 |r to private wor| 00001360 64 2e 0d 06 18 24 3b 20 20 20 20 20 20 20 20 20 |d....$; | 00001370 20 72 31 30 20 2d 20 70 6f 69 6e 74 65 72 20 74 | r10 - pointer t| 00001380 6f 20 61 72 67 2e 0d 06 22 31 3b 20 45 78 69 74 |o arg..."1; Exit| 00001390 20 20 20 2d 20 56 3d 31 20 2d 3e 20 65 72 72 6f | - V=1 -> erro| 000013a0 72 20 2d 20 72 30 20 2d 20 65 72 72 6f 72 20 70 |r - r0 - error p| 000013b0 6f 69 6e 74 65 72 2e 0d 06 2c 21 3b 20 50 75 72 |ointer...,!; Pur| 000013c0 70 6f 73 65 2d 20 49 6e 69 74 69 61 6c 69 73 65 |pose- Initialise| 000013d0 20 6d 6f 64 75 6c 65 2e 0d 06 36 0a 2e 6c 49 6e | module...6..lIn| 000013e0 69 74 0d 06 40 3a 53 54 4d 46 44 20 20 20 20 28 |it..@:STMFD (| 000013f0 73 70 29 21 2c 20 7b 72 31 2c 20 72 35 2c 20 72 |sp)!, {r1, r5, r| 00001400 36 2c 20 6c 6e 7d 20 20 20 20 3b 20 73 74 6f 72 |6, ln} ; stor| 00001410 65 20 72 65 67 69 73 74 65 72 73 2e 0d 06 4a 4e |e registers...JN| 00001420 4c 44 52 20 20 20 20 20 20 72 35 2c 20 5b 72 31 |LDR r5, [r1| 00001430 32 5d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |2] | 00001440 20 20 20 20 3b 20 72 31 32 20 69 73 20 61 20 70 | ; r12 is a p| 00001450 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 70 72 |ointer to the pr| 00001460 69 76 61 74 65 20 77 6f 72 64 0d 06 54 42 54 45 |ivate word..TBTE| 00001470 51 20 20 20 20 20 20 72 35 2c 20 23 30 20 20 20 |Q r5, #0 | 00001480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001490 20 20 3b 20 70 72 69 76 61 74 65 20 77 6f 72 64 | ; private word| 000014a0 3c 3e 30 20 2d 3e 20 54 69 64 79 2e 0d 06 5e 12 |<>0 -> Tidy...^.| 000014b0 42 4e 45 20 20 20 20 20 20 6c 54 69 64 79 0d 06 |BNE lTidy..| 000014c0 68 40 4d 4f 56 20 20 20 20 20 20 72 31 2c 20 72 |h@MOV r1, r| 000014d0 31 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |10 | 000014e0 20 20 20 20 20 20 3b 20 72 31 30 20 69 73 20 70 | ; r10 is p| 000014f0 6f 69 6e 74 65 72 20 74 6f 20 61 72 67 2e 0d 06 |ointer to arg...| 00001500 72 1e 4d 4f 56 20 20 20 20 20 20 72 36 2c 20 23 |r.MOV r6, #| 00001510 69 44 65 66 61 75 6c 74 53 69 7a 65 0d 06 7c 3d |iDefaultSize..|=| 00001520 4c 44 52 42 20 20 20 20 20 72 30 2c 20 5b 72 31 |LDRB r0, [r1| 00001530 5d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |] | 00001540 20 20 20 20 3b 20 72 31 20 70 6f 69 6e 74 65 72 | ; r1 pointer| 00001550 73 20 74 6f 20 61 72 67 2e 0d 06 86 3a 43 4d 50 |s to arg....:CMP| 00001560 20 20 20 20 20 20 72 30 2c 20 23 33 32 20 20 20 | r0, #32 | 00001570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001580 20 3b 20 63 68 61 72 3e 3d 33 32 20 2d 3e 20 61 | ; char>=32 -> a| 00001590 72 67 2e 0d 06 90 1a 42 4c 48 53 20 20 20 20 20 |rg.....BLHS | 000015a0 6c 45 76 61 6c 75 61 74 65 5f 41 72 67 0d 06 9a |lEvaluate_Arg...| 000015b0 3a 4c 44 4d 56 53 46 44 20 20 28 73 70 29 21 2c |:LDMVSFD (sp)!,| 000015c0 20 7b 72 31 2c 20 72 35 2c 20 72 36 2c 20 70 63 | {r1, r5, r6, pc| 000015d0 7d 20 20 20 20 3b 20 72 65 74 75 72 6e 20 69 66 |} ; return if| 000015e0 20 65 72 72 6f 72 2e 0d 06 a4 13 54 45 51 20 20 | error.....TEQ | 000015f0 20 20 20 20 72 36 2c 20 23 30 0d 06 ae 46 4c 44 | r6, #0...FLD| 00001600 4d 45 51 46 44 20 20 28 73 70 29 21 2c 20 7b 72 |MEQFD (sp)!, {r| 00001610 31 2c 20 72 35 2c 20 72 36 2c 20 70 63 7d 20 20 |1, r5, r6, pc} | 00001620 20 20 3b 20 72 65 74 75 72 6e 20 69 66 20 6e 6f | ; return if no| 00001630 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 2e | space required.| 00001640 0d 06 b8 19 42 4c 20 20 20 20 20 20 20 6c 43 6c |....BL lCl| 00001650 61 69 6d 5f 53 70 61 63 65 0d 06 c2 3a 4c 44 4d |aim_Space...:LDM| 00001660 56 53 46 44 20 20 28 73 70 29 21 2c 20 7b 72 31 |VSFD (sp)!, {r1| 00001670 2c 20 72 35 2c 20 72 36 2c 20 70 63 7d 20 20 20 |, r5, r6, pc} | 00001680 20 3b 20 72 65 74 75 72 6e 20 69 66 20 65 72 72 | ; return if err| 00001690 6f 72 2e 0d 06 cc 1a 42 4c 20 20 20 20 20 20 20 |or.....BL | 000016a0 6c 43 6c 61 69 6d 5f 56 65 63 74 6f 72 0d 06 d6 |lClaim_Vector...| 000016b0 31 4c 44 4d 46 44 20 20 20 20 28 73 70 29 21 2c |1LDMFD (sp)!,| 000016c0 20 7b 72 31 2c 20 72 35 2c 20 72 36 2c 20 70 63 | {r1, r5, r6, pc| 000016d0 7d 20 20 20 20 3b 20 72 65 74 75 72 6e 2e 0d 06 |} ; return...| 000016e0 e0 0a 2e 6c 54 69 64 79 0d 06 ea 1b 4c 44 52 20 |...lTidy....LDR | 000016f0 20 20 20 72 36 2c 20 5b 72 35 2c 20 23 6f 53 69 | r6, [r5, #oSi| 00001700 7a 65 5d 0d 06 f4 18 42 4c 20 20 20 20 20 6c 43 |ze]....BL lC| 00001710 6c 61 69 6d 5f 56 65 63 74 6f 72 0d 06 fe 22 4c |laim_Vector..."L| 00001720 44 4d 46 44 20 20 28 73 70 29 21 2c 20 7b 72 31 |DMFD (sp)!, {r1| 00001730 2c 20 72 35 2c 20 72 36 2c 20 70 63 7d 0d 07 08 |, r5, r6, pc}...| 00001740 04 0d 07 09 3c 3b 20 46 69 6e 64 20 74 68 65 20 |....<; Find the | 00001750 76 61 6c 75 65 20 6f 66 20 74 68 65 20 5b 3c 73 |value of the [<s| 00001760 69 7a 65 3e 5b 6b 5d 5d 20 61 72 67 75 6d 65 6e |ize>[k]] argumen| 00001770 74 20 64 65 66 61 75 6c 74 20 38 6b 2e 0d 07 12 |t default 8k....| 00001780 22 3b 20 45 6e 74 72 79 20 2d 20 72 31 20 2d 20 |"; Entry - r1 - | 00001790 70 6f 69 6e 74 65 72 20 74 6f 20 61 72 67 2e 0d |pointer to arg..| 000017a0 07 1c 47 3b 20 45 78 69 74 20 20 2d 20 72 36 20 |..G; Exit - r6 | 000017b0 2d 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 2e |- size in bytes.| 000017c0 20 6f 72 20 56 3d 31 20 2d 3e 20 65 72 72 6f 72 | or V=1 -> error| 000017d0 20 2d 20 72 30 20 2d 20 65 72 72 6f 72 20 70 6f | - r0 - error po| 000017e0 69 6e 74 65 72 2e 0d 07 26 12 2e 6c 45 76 61 6c |inter...&..lEval| 000017f0 75 61 74 65 5f 41 72 67 0d 07 30 1d 53 54 4d 46 |uate_Arg..0.STMF| 00001800 44 20 28 73 70 29 21 2c 20 7b 72 30 2c 20 72 32 |D (sp)!, {r0, r2| 00001810 2c 20 6c 6e 7d 0d 07 3a 40 4d 4f 56 20 20 20 72 |, ln}..:@MOV r| 00001820 30 2c 20 23 31 30 20 20 20 20 20 20 20 20 20 20 |0, #10 | 00001830 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 63 | ; c| 00001840 6f 6e 76 65 72 73 69 6f 6e 20 69 6e 20 62 61 73 |onversion in bas| 00001850 65 20 31 30 2e 0d 07 44 46 84 52 20 20 20 72 30 |e 10...DF.R r0| 00001860 2c 20 72 30 2c 20 23 28 31 3c 3c 32 39 29 20 20 |, r0, #(1<<29) | 00001870 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 62 69 | ; bi| 00001880 74 20 32 39 20 69 6e 64 69 63 61 74 65 73 20 6c |t 29 indicates l| 00001890 69 6d 69 74 20 69 6e 20 72 32 2e 0d 07 4e 4c 4d |imit in r2...NLM| 000018a0 4f 56 20 20 20 72 32 2c 20 23 34 30 39 36 20 20 |OV r2, #4096 | 000018b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000018c0 20 20 20 3b 20 76 61 6c 75 65 73 20 62 69 67 67 | ; values bigg| 000018d0 65 72 20 74 68 65 6e 20 34 30 39 36 20 61 72 65 |er then 4096 are| 000018e0 20 73 69 6c 6c 79 2e 0d 07 58 1c 53 57 49 20 20 | silly...X.SWI | 000018f0 20 22 58 4f 53 5f 52 65 61 64 55 6e 73 69 67 6e | "XOS_ReadUnsign| 00001900 65 64 22 0d 07 62 14 41 44 44 56 53 20 73 70 2c |ed"..b.ADDVS sp,| 00001910 20 73 70 2c 20 23 34 0d 07 6c 3a 4c 44 4d 56 53 | sp, #4..l:LDMVS| 00001920 46 44 20 28 73 70 29 21 2c 20 7b 72 32 2c 20 70 |FD (sp)!, {r2, p| 00001930 63 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 3b |c} ;| 00001940 20 72 65 74 75 72 6e 20 69 66 20 65 72 72 6f 72 | return if error| 00001950 2e 0d 07 76 44 4d 4f 56 20 20 20 72 36 2c 20 72 |...vDMOV r6, r| 00001960 32 2c 20 41 53 4c 20 23 31 30 20 20 20 20 20 20 |2, ASL #10 | 00001970 20 20 20 20 20 20 20 20 20 3b 20 72 36 20 69 6e | ; r6 in| 00001980 20 62 79 74 65 73 2c 20 72 32 20 69 6e 20 6b 62 | bytes, r2 in kb| 00001990 79 74 65 73 2e 0d 07 80 33 4c 44 52 42 20 20 72 |ytes....3LDRB r| 000019a0 30 2c 20 5b 72 31 5d 2c 20 23 31 20 20 20 20 20 |0, [r1], #1 | 000019b0 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 72 | ; r| 000019c0 30 3d 20 63 68 61 72 2e 0d 07 8a 11 43 4d 50 20 |0= char.....CMP | 000019d0 20 20 72 30 2c 20 23 33 33 0d 07 94 14 42 4c 4f | r0, #33....BLO| 000019e0 20 20 20 6c 43 68 65 63 6b 54 61 69 6c 0d 07 9e | lCheckTail...| 000019f0 15 54 45 51 20 20 20 72 30 2c 20 23 97 28 22 4b |.TEQ r0, #.("K| 00001a00 22 29 0d 07 a8 14 42 45 51 20 20 20 6c 43 68 65 |")....BEQ lChe| 00001a10 63 6b 54 61 69 6c 0d 07 b2 15 54 45 51 20 20 20 |ckTail....TEQ | 00001a20 72 30 2c 20 23 97 28 22 6b 22 29 0d 07 bc 13 42 |r0, #.("k")....B| 00001a30 4e 45 20 20 20 6c 41 72 67 45 72 72 6f 72 0d 07 |NE lArgError..| 00001a40 c6 0f 2e 6c 43 68 65 63 6b 54 61 69 6c 0d 07 d0 |...lCheckTail...| 00001a50 11 54 45 51 20 20 20 72 30 2c 20 23 31 33 0d 07 |.TEQ r0, #13..| 00001a60 da 42 4c 44 4d 45 51 46 44 20 20 28 73 70 29 21 |.BLDMEQFD (sp)!| 00001a70 2c 20 7b 72 30 2c 20 72 32 2c 20 70 63 7d 20 20 |, {r0, r2, pc} | 00001a80 20 20 20 20 20 20 3b 20 66 6f 75 6e 64 20 3c 63 | ; found <c| 00001a90 72 3e 20 2d 3e 20 74 65 72 6d 69 6e 61 74 65 2e |r> -> terminate.| 00001aa0 0d 07 e4 16 4c 44 52 42 20 20 72 30 2c 20 5b 72 |....LDRB r0, [r| 00001ab0 31 5d 2c 20 23 31 0d 07 ee 11 43 4d 50 20 20 20 |1], #1....CMP | 00001ac0 72 30 2c 20 23 33 33 0d 07 f8 46 42 4c 4f 20 20 |r0, #33...FBLO | 00001ad0 20 6c 43 68 65 63 6b 54 61 69 6c 20 20 20 20 20 | lCheckTail | 00001ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00001af0 20 6f 6b 61 79 20 69 66 20 63 68 61 72 3c 33 33 | okay if char<33| 00001b00 2c 20 65 6c 73 65 20 65 72 72 6f 72 2e 0d 08 02 |, else error....| 00001b10 0e 2e 6c 41 72 67 45 72 72 6f 72 0d 08 0c 3c 41 |..lArgError...<A| 00001b20 44 52 20 20 20 72 30 2c 20 6c 41 72 67 45 72 72 |DR r0, lArgErr| 00001b30 6f 72 42 6c 6f 63 6b 20 20 20 20 20 20 20 20 20 |orBlock | 00001b40 20 20 20 3b 20 73 65 74 20 65 72 72 6f 72 20 70 | ; set error p| 00001b50 6f 69 6e 74 65 72 2e 0d 08 16 40 53 57 49 20 20 |ointer....@SWI | 00001b60 20 22 58 4f 53 5f 47 65 6e 65 72 61 74 65 45 72 | "XOS_GenerateEr| 00001b70 72 6f 72 22 20 20 20 20 20 20 20 20 20 20 20 3b |ror" ;| 00001b80 20 56 3d 31 20 2d 20 69 6e 64 69 63 61 74 65 73 | V=1 - indicates| 00001b90 20 65 72 72 6f 72 2e 0d 08 20 14 41 44 44 20 20 | error... .ADD | 00001ba0 20 73 70 2c 20 73 70 2c 20 23 34 0d 08 2a 19 4c | sp, sp, #4..*.L| 00001bb0 44 4d 46 44 20 28 73 70 29 21 2c 20 7b 72 32 2c |DMFD (sp)!, {r2,| 00001bc0 20 70 63 7d 0d 08 34 13 2e 6c 41 72 67 45 72 72 | pc}..4..lArgErr| 00001bd0 6f 72 42 6c 6f 63 6b 0d 08 3e 16 45 51 55 44 20 |orBlock..>.EQUD | 00001be0 20 69 45 72 72 6f 72 42 61 73 65 2b 30 0d 08 48 | iErrorBase+0..H| 00001bf0 26 45 51 55 53 20 20 22 41 72 67 75 6d 65 6e 74 |&EQUS "Argument| 00001c00 20 53 79 6e 74 61 78 3a 20 3c 73 69 7a 65 3e 5b | Syntax: <size>[| 00001c10 6b 5d 22 0d 08 52 0b 45 51 55 42 20 20 30 0d 08 |k]"..R.EQUB 0..| 00001c20 5c 09 41 4c 49 47 4e 0d 08 5d 04 0d 08 5e 36 3b |\.ALIGN..]...^6;| 00001c30 20 43 6c 61 69 6d 20 53 70 61 63 65 20 66 6f 72 | Claim Space for| 00001c40 20 74 68 65 20 62 75 66 66 65 72 20 61 6e 64 20 | the buffer and | 00001c50 69 6e 69 74 69 61 6c 69 73 65 20 76 61 6c 75 65 |initialise value| 00001c60 73 0d 08 66 2b 3b 20 45 6e 74 72 79 20 2d 20 72 |s..f+; Entry - r| 00001c70 36 20 2d 20 73 69 7a 65 20 6f 66 20 62 75 66 66 |6 - size of buff| 00001c80 65 72 20 69 6e 20 62 79 74 65 73 2e 0d 08 70 2d |er in bytes...p-| 00001c90 3b 20 20 20 20 20 20 20 20 20 72 31 32 20 2d 20 |; r12 - | 00001ca0 70 6f 69 6e 74 65 72 20 74 68 65 20 70 72 69 76 |pointer the priv| 00001cb0 61 74 65 20 77 6f 72 64 2e 0d 08 7a 2f 3b 20 45 |ate word...z/; E| 00001cc0 78 69 74 20 20 2d 20 56 3d 31 2c 20 72 30 20 2d |xit - V=1, r0 -| 00001cd0 20 70 6f 69 6e 74 65 72 20 74 6f 20 65 72 72 6f | pointer to erro| 00001ce0 72 20 62 6c 6f 63 6b 2e 0d 08 7b 24 3b 20 20 20 |r block...{$; | 00001cf0 20 20 20 20 20 20 72 35 20 2d 20 77 6f 72 6b 73 | r5 - works| 00001d00 70 61 63 65 20 70 6f 69 6e 74 65 72 0d 08 84 11 |pace pointer....| 00001d10 2e 6c 43 6c 61 69 6d 5f 53 70 61 63 65 0d 08 8e |.lClaim_Space...| 00001d20 1d 53 54 4d 46 44 20 28 73 70 29 21 2c 20 7b 72 |.STMFD (sp)!, {r| 00001d30 32 2c 20 72 33 2c 20 6c 6e 7d 0d 08 98 45 41 44 |2, r3, ln}...EAD| 00001d40 44 20 20 20 72 33 2c 20 72 36 2c 20 23 6f 42 75 |D r3, r6, #oBu| 00001d50 66 66 65 72 20 20 20 20 20 20 20 20 20 20 20 20 |ffer | 00001d60 20 20 3b 20 77 6f 72 6b 73 70 61 63 65 3d 20 62 | ; workspace= b| 00001d70 75 66 66 65 72 73 69 7a 65 2b 6f 74 68 65 72 0d |uffersize+other.| 00001d80 08 a2 39 4d 4f 56 20 20 20 72 30 2c 20 23 36 20 |..9MOV r0, #6 | 00001d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001da0 20 20 20 20 20 20 20 3b 20 63 6c 61 69 6d 20 77 | ; claim w| 00001db0 6f 72 6b 73 70 61 63 65 0d 08 ac 16 53 57 49 20 |orkspace....SWI | 00001dc0 20 20 22 58 4f 53 5f 4d 6f 64 75 6c 65 22 0d 08 | "XOS_Module"..| 00001dd0 b6 3a 4c 44 4d 56 53 46 44 20 28 73 70 29 21 2c |.:LDMVSFD (sp)!,| 00001de0 20 7b 72 32 2c 20 72 33 2c 20 70 63 7d 20 20 20 | {r2, r3, pc} | 00001df0 20 20 20 20 20 20 3b 20 72 65 74 75 72 6e 20 6f | ; return o| 00001e00 6e 20 65 72 72 6f 72 2e 0d 08 c0 4a 53 54 52 20 |n error....JSTR | 00001e10 20 20 72 32 2c 20 5b 72 31 32 5d 20 20 20 20 20 | r2, [r12] | 00001e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00001e30 3b 20 70 72 69 76 61 74 65 20 77 6f 72 64 20 3d |; private word =| 00001e40 20 77 6f 72 6b 73 70 61 63 65 20 70 6f 69 6e 74 | workspace point| 00001e50 65 72 0d 08 ca 40 4d 4f 56 20 20 20 72 35 2c 20 |er...@MOV r5, | 00001e60 72 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |r2 | 00001e70 20 20 20 20 20 20 20 20 20 20 3b 20 72 35 2c 20 | ; r5, | 00001e80 69 73 20 72 65 74 75 72 6e 65 64 20 76 61 6c 75 |is returned valu| 00001e90 65 2e 0d 08 d4 47 4d 4f 56 20 20 20 72 54 6d 70 |e....GMOV rTmp| 00001ea0 2c 20 23 6f 42 75 66 66 65 72 20 20 20 20 20 20 |, #oBuffer | 00001eb0 20 20 20 20 20 20 20 20 20 20 3b 20 46 69 6e 64 | ; Find| 00001ec0 20 61 64 64 72 65 73 73 20 6f 66 20 62 75 66 66 | address of buff| 00001ed0 65 72 20 73 74 61 72 74 2e 0d 08 de 48 53 54 52 |er start....HSTR| 00001ee0 20 20 20 72 54 6d 70 2c 20 5b 72 57 6f 72 6b 53 | rTmp, [rWorkS| 00001ef0 70 61 63 65 2c 20 23 6f 50 6c 61 63 65 5d 20 20 |pace, #oPlace] | 00001f00 20 3b 20 53 74 6f 72 65 20 74 68 69 73 20 69 6e | ; Store this in| 00001f10 20 70 6c 61 63 65 20 74 6f 20 69 6e 73 65 72 74 | place to insert| 00001f20 2e 0d 08 e8 46 53 54 52 20 20 20 72 54 6d 70 2c |....FSTR rTmp,| 00001f30 20 5b 72 57 6f 72 6b 53 70 61 63 65 2c 20 23 6f | [rWorkSpace, #o| 00001f40 4c 6f 6f 6b 5d 20 20 20 20 3b 20 53 74 6f 72 65 |Look] ; Store| 00001f50 20 74 68 69 73 20 69 6e 20 70 6c 61 63 65 20 74 | this in place t| 00001f60 6f 20 6c 6f 6f 6b 2e 0d 08 f2 3c 41 44 44 20 20 |o look....<ADD | 00001f70 20 72 54 6d 70 2c 20 72 54 6d 70 2c 20 72 36 20 | rTmp, rTmp, r6 | 00001f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00001f90 20 45 6e 64 3d 20 53 74 61 72 74 20 2b 20 53 69 | End= Start + Si| 00001fa0 7a 65 2e 0d 08 fc 46 53 54 52 20 20 20 72 54 6d |ze....FSTR rTm| 00001fb0 70 2c 20 5b 72 57 6f 72 6b 53 70 61 63 65 2c 20 |p, [rWorkSpace, | 00001fc0 23 6f 45 6e 64 5d 20 20 20 20 20 3b 20 53 74 6f |#oEnd] ; Sto| 00001fd0 72 65 20 74 68 69 73 20 69 6e 20 65 6e 64 20 6f |re this in end o| 00001fe0 66 20 62 75 66 66 65 72 2e 0d 09 06 3f 53 54 52 |f buffer....?STR| 00001ff0 20 20 20 72 36 2c 20 5b 72 57 6f 72 6b 53 70 61 | r6, [rWorkSpa| 00002000 63 65 2c 20 23 6f 53 69 7a 65 5d 20 20 20 20 20 |ce, #oSize] | 00002010 20 3b 20 53 74 6f 72 65 20 53 69 7a 65 20 6f 66 | ; Store Size of| 00002020 20 62 75 66 66 65 72 2e 0d 09 10 48 53 54 52 20 | buffer....HSTR | 00002030 20 20 72 36 2c 20 5b 72 57 6f 72 6b 53 70 61 63 | r6, [rWorkSpac| 00002040 65 2c 20 23 6f 53 70 61 63 65 5d 20 20 20 20 20 |e, #oSpace] | 00002050 3b 20 53 74 6f 72 65 20 74 68 69 73 20 69 6e 20 |; Store this in | 00002060 61 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 2e |amount of space.| 00002070 0d 09 1a 3c 4d 4f 56 20 20 20 72 54 6d 70 2c 20 |...<MOV rTmp, | 00002080 23 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |#0 | 00002090 20 20 20 20 20 20 20 20 3b 20 52 65 73 65 74 20 | ; Reset | 000020a0 65 73 63 61 70 65 20 66 6c 61 67 2e 0d 09 24 26 |escape flag...$&| 000020b0 53 54 52 20 20 20 72 54 6d 70 2c 20 5b 72 57 6f |STR rTmp, [rWo| 000020c0 72 6b 53 70 61 63 65 2c 20 23 6f 45 73 63 61 70 |rkSpace, #oEscap| 000020d0 65 5d 0d 09 2e 1d 4c 44 4d 46 44 20 28 73 70 29 |e]....LDMFD (sp)| 000020e0 21 2c 20 7b 72 32 2c 20 72 33 2c 20 70 63 7d 0d |!, {r2, r3, pc}.| 000020f0 09 42 05 5d 0d 09 4c 07 3d 22 22 0d 09 56 0d dd |.B.]..L.=""..V..| 00002100 20 a4 62 75 66 66 65 72 0d 09 60 0e 5b 20 4f 50 | .buffer..`.[ OP| 00002110 54 20 70 61 73 73 0d 09 61 2f 3b 20 43 6f 64 65 |T pass..a/; Code| 00002120 20 66 6f 72 20 74 68 65 20 2a 42 75 66 66 65 72 | for the *Buffer| 00002130 20 5b 3c 73 69 7a 65 3e 5b 6b 5d 5d 20 63 6f 6d | [<size>[k]] com| 00002140 6d 61 6e 64 2e 0d 09 6a 1e 3b 20 45 6e 74 72 79 |mand...j.; Entry| 00002150 20 2d 20 72 31 20 2d 20 6e 6f 2e 20 6f 66 20 61 | - r1 - no. of a| 00002160 72 67 73 0d 09 74 23 3b 20 20 20 20 20 20 20 20 |rgs..t#; | 00002170 20 72 30 20 2d 20 70 6f 69 6e 74 65 72 20 74 6f | r0 - pointer to| 00002180 20 61 72 67 73 2e 0d 09 75 28 3b 20 20 20 20 20 | args...u(; | 00002190 20 20 20 20 72 31 32 20 2d 20 70 6f 69 6e 74 65 | r12 - pointe| 000021a0 72 20 74 6f 20 77 6f 72 6b 73 70 61 63 65 0d 09 |r to workspace..| 000021b0 7e 10 2e 6c 42 75 66 66 65 72 43 6f 64 65 0d 09 |~..lBufferCode..| 000021c0 88 1d 53 54 4d 46 44 20 28 73 70 29 21 2c 20 7b |..STMFD (sp)!, {| 000021d0 72 31 2c 20 72 36 2c 20 6c 6e 7d 0d 09 92 49 42 |r1, r6, ln}...IB| 000021e0 4c 20 20 20 20 6c 4e 6f 42 75 66 66 65 72 43 6f |L lNoBufferCo| 000021f0 64 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |de | 00002200 20 20 20 3b 20 64 65 61 6c 6c 6f 63 61 74 65 20 | ; deallocate | 00002210 61 6e 79 20 70 72 65 76 69 6f 75 73 20 62 75 66 |any previous buf| 00002220 66 65 72 2e 0d 09 9c 1f 4c 44 4d 56 53 46 44 20 |fer.....LDMVSFD | 00002230 28 73 70 29 21 2c 20 7b 72 31 2c 20 72 36 2c 20 |(sp)!, {r1, r6, | 00002240 70 63 7d 0d 09 a6 1b 4d 4f 56 20 20 20 72 36 2c |pc}....MOV r6,| 00002250 20 23 69 44 65 66 61 75 6c 74 53 69 7a 65 0d 09 | #iDefaultSize..| 00002260 b0 3f 54 45 51 20 20 20 72 31 2c 20 23 30 20 20 |.?TEQ r1, #0 | 00002270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002280 20 20 20 20 20 20 3b 20 72 31 20 69 73 20 6e 75 | ; r1 is nu| 00002290 6d 62 65 72 20 6f 66 20 61 72 67 73 2e 0d 09 ba |mber of args....| 000022a0 10 4d 4f 56 4e 45 20 72 31 2c 20 72 30 0d 09 c4 |.MOVNE r1, r0...| 000022b0 17 42 4c 4e 45 20 20 6c 45 76 61 6c 75 61 74 65 |.BLNE lEvaluate| 000022c0 5f 41 72 67 0d 09 ce 1f 4c 44 4d 56 53 46 44 20 |_Arg....LDMVSFD | 000022d0 28 73 70 29 21 2c 20 7b 72 31 2c 20 72 36 2c 20 |(sp)!, {r1, r6, | 000022e0 70 63 7d 0d 09 d8 10 54 45 51 20 20 20 72 36 2c |pc}....TEQ r6,| 000022f0 20 23 30 0d 09 e2 41 4c 44 4d 45 51 46 44 20 28 | #0...ALDMEQFD (| 00002300 73 70 29 21 2c 20 7b 72 31 2c 20 72 36 2c 20 70 |sp)!, {r1, r6, p| 00002310 63 7d 20 20 20 20 20 20 20 20 20 3b 20 69 66 20 |c} ; if | 00002320 73 69 7a 65 3d 30 20 64 6f 20 6e 6f 74 20 63 6c |size=0 do not cl| 00002330 61 69 6d 2e 0d 09 ec 16 42 4c 20 20 20 20 6c 43 |aim.....BL lC| 00002340 6c 61 69 6d 5f 53 70 61 63 65 0d 09 f6 1f 4c 44 |laim_Space....LD| 00002350 4d 56 53 46 44 20 28 73 70 29 21 2c 20 7b 72 31 |MVSFD (sp)!, {r1| 00002360 2c 20 72 36 2c 20 70 63 7d 0d 0a 00 17 42 4c 20 |, r6, pc}....BL | 00002370 20 20 20 6c 43 6c 61 69 6d 5f 56 65 63 74 6f 72 | lClaim_Vector| 00002380 0d 0a 0a 1d 4c 44 4d 46 44 20 28 73 70 29 21 2c |....LDMFD (sp)!,| 00002390 20 7b 72 31 2c 20 72 36 2c 20 70 63 7d 0d 0a 14 | {r1, r6, pc}...| 000023a0 05 5d 0d 0a 1e 07 3d 22 22 0d 0a 28 0c dd 20 a4 |.]....=""..(.. .| 000023b0 66 69 6e 61 6c 0d 0a 32 0e 5b 20 4f 50 54 20 70 |final..2.[ OPT p| 000023c0 61 73 73 0d 0a 33 44 3b 20 46 69 6e 69 61 6c 69 |ass..3D; Finiali| 000023d0 73 61 74 69 6f 6e 20 43 6f 64 65 2c 20 63 61 6c |sation Code, cal| 000023e0 6c 65 64 20 62 79 20 2a 52 4d 4b 69 6c 6c 2c 20 |led by *RMKill, | 000023f0 2a 52 4d 43 6c 65 61 72 2c 20 2a 52 4d 54 69 64 |*RMClear, *RMTid| 00002400 79 2e 20 65 74 63 2e 0d 0a 3c 3d 3b 20 45 6e 74 |y. etc...<=; Ent| 00002410 72 79 20 2d 20 72 31 30 20 2d 20 66 61 74 61 6c |ry - r10 - fatal| 00002420 69 74 79 20 69 6e 64 69 63 61 74 6f 72 2c 20 72 |ity indicator, r| 00002430 31 30 3d 30 20 6d 65 61 6e 73 20 6e 6f 6e 2d 66 |10=0 means non-f| 00002440 61 74 61 6c 0d 0a 46 30 3b 20 20 20 20 20 20 20 |atal..F0; | 00002450 20 20 72 31 32 20 2d 20 70 6f 69 6e 74 65 72 20 | r12 - pointer | 00002460 74 6f 20 74 68 65 20 70 72 69 76 61 74 65 20 77 |to the private w| 00002470 6f 72 64 2e 0d 0a 47 14 3b 20 45 78 69 74 20 20 |ord...G.; Exit | 00002480 2d 20 72 30 20 3d 20 3f 0d 0a 50 0b 2e 6c 46 69 |- r0 = ?..P..lFi| 00002490 6e 61 6c 0d 0a 5a 21 53 54 4d 46 44 20 28 73 70 |nal..Z!STMFD (sp| 000024a0 29 21 2c 20 7b 72 31 2c 20 72 32 2c 20 72 35 2c |)!, {r1, r2, r5,| 000024b0 20 6c 6e 7d 0d 0a 64 11 54 45 51 20 20 20 72 31 | ln}..d.TEQ r1| 000024c0 30 2c 20 23 30 0d 0a 6e 14 42 45 51 20 20 20 6c |0, #0..n.BEQ l| 000024d0 4e 6f 6e 5f 46 61 74 61 6c 0d 0a 78 39 4d 4f 56 |Non_Fatal..x9MOV| 000024e0 20 20 20 72 30 2c 20 23 31 35 32 20 20 20 20 20 | r0, #152 | 000024f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002500 20 3b 20 65 78 61 6d 69 6e 65 20 62 75 66 66 65 | ; examine buffe| 00002510 72 2e 0d 0a 82 10 4d 4f 56 20 20 20 72 31 2c 20 |r.....MOV r1, | 00002520 23 33 0d 0a 8c 14 53 57 49 20 20 20 22 58 4f 53 |#3....SWI "XOS| 00002530 5f 42 79 74 65 22 0d 0a 96 23 4c 44 4d 56 53 46 |_Byte"...#LDMVSF| 00002540 44 20 28 73 70 29 21 2c 20 7b 72 31 2c 20 72 32 |D (sp)!, {r1, r2| 00002550 2c 20 72 35 2c 20 70 63 7d 0d 0a a0 42 42 43 43 |, r5, pc}...BBCC| 00002560 20 20 20 6c 49 6e 55 73 65 45 72 72 6f 72 20 20 | lInUseError | 00002570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002580 20 3b 20 74 68 65 20 62 75 66 66 65 72 20 69 73 | ; the buffer is| 00002590 20 6e 6f 74 20 65 6d 70 74 79 2e 0d 0a aa 0f 2e | not empty......| 000025a0 6c 4e 6f 6e 5f 46 61 74 61 6c 0d 0a b4 42 4c 44 |lNon_Fatal...BLD| 000025b0 52 20 20 20 72 35 2c 20 5b 72 31 32 5d 20 20 20 |R r5, [r12] | 000025c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000025d0 20 20 3b 20 72 35 20 69 73 20 77 6f 72 6b 73 70 | ; r5 is worksp| 000025e0 61 63 65 20 70 6f 69 6e 74 65 72 2e 0d 0a be 10 |ace pointer.....| 000025f0 54 45 51 20 20 20 72 35 2c 20 23 30 0d 0a c8 43 |TEQ r5, #0...C| 00002600 42 4c 4e 45 20 20 6c 52 65 73 74 6f 72 65 5f 56 |BLNE lRestore_V| 00002610 65 63 74 6f 72 20 20 20 20 20 20 20 20 20 20 20 |ector | 00002620 20 20 20 20 3b 20 6f 6e 6c 79 20 69 66 20 77 6f | ; only if wo| 00002630 72 6b 73 70 61 63 65 20 65 78 69 73 74 73 2e 0d |rkspace exists..| 00002640 0a d2 21 4c 44 4d 46 44 20 28 73 70 29 21 2c 20 |..!LDMFD (sp)!, | 00002650 7b 72 31 2c 20 72 32 2c 20 72 35 2c 20 70 63 7d |{r1, r2, r5, pc}| 00002660 0d 0a dc 10 2e 6c 49 6e 55 73 65 45 72 72 6f 72 |.....lInUseError| 00002670 0d 0a e6 1d 53 57 49 20 20 20 22 58 4f 53 5f 47 |....SWI "XOS_G| 00002680 65 6e 65 72 61 74 65 45 72 72 6f 72 22 0d 0a f0 |enerateError"...| 00002690 1f 41 44 52 20 20 20 20 72 30 2c 20 6c 49 6e 55 |.ADR r0, lInU| 000026a0 73 65 45 72 72 6f 72 42 6c 6f 63 6b 0d 0a fa 21 |seErrorBlock...!| 000026b0 4c 44 4d 46 44 20 28 73 70 29 21 2c 20 7b 72 31 |LDMFD (sp)!, {r1| 000026c0 2c 20 72 32 2c 20 72 35 2c 20 70 63 7d 0d 0b 04 |, r2, r5, pc}...| 000026d0 15 2e 6c 49 6e 55 73 65 45 72 72 6f 72 42 6c 6f |..lInUseErrorBlo| 000026e0 63 6b 0d 0b 0e 16 45 51 55 44 20 20 69 45 72 72 |ck....EQUD iErr| 000026f0 6f 72 42 61 73 65 2b 31 0d 0b 18 40 45 51 55 53 |orBase+1...@EQUS| 00002700 20 20 22 50 72 69 6e 74 65 72 20 42 75 66 66 65 | "Printer Buffe| 00002710 72 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 |r currently in u| 00002720 73 65 20 28 2a 46 6c 75 73 68 20 77 69 6c 6c 20 |se (*Flush will | 00002730 63 6c 65 61 72 29 2e 22 0d 0b 22 0b 45 51 55 42 |clear)."..".EQUB| 00002740 20 20 30 0d 0b 2c 09 41 4c 49 47 4e 0d 0b 36 05 | 0..,.ALIGN..6.| 00002750 3b 0d 0b 40 05 5d 0d 0b 4a 07 3d 22 22 0d 0b 54 |;..@.]..J.=""..T| 00002760 0f dd 20 a4 6e 6f 62 75 66 66 65 72 0d 0b 5e 0e |.. .nobuffer..^.| 00002770 5b 20 4f 50 54 20 70 61 73 73 0d 0b 5f 24 3b 20 |[ OPT pass.._$; | 00002780 43 6f 64 65 20 66 6f 72 20 74 68 65 20 2a 4e 6f |Code for the *No| 00002790 42 75 66 66 65 72 20 63 6f 6d 6d 61 6e 64 0d 0b |Buffer command..| 000027a0 60 29 3b 20 45 6e 74 72 79 20 2d 20 72 31 32 20 |`); Entry - r12 | 000027b0 2d 20 70 6f 69 6e 74 65 72 20 74 6f 20 77 6f 72 |- pointer to wor| 000027c0 6b 73 70 61 63 65 2e 0d 0b 68 12 2e 6c 4e 6f 42 |kspace...h..lNoB| 000027d0 75 66 66 65 72 43 6f 64 65 0d 0b 72 26 53 54 4d |ufferCode..r&STM| 000027e0 46 44 20 28 73 70 29 21 2c 20 7b 72 30 2c 20 72 |FD (sp)!, {r0, r| 000027f0 31 2c 20 72 32 2c 20 72 31 30 2c 20 6c 6e 7d 0d |1, r2, r10, ln}.| 00002800 0b 7c 11 4d 4f 56 20 20 20 72 31 30 2c 20 23 31 |.|.MOV r10, #1| 00002810 0d 0b 86 10 42 4c 20 20 20 20 6c 46 69 6e 61 6c |....BL lFinal| 00002820 0d 0b 90 43 41 44 44 56 53 20 73 70 2c 20 73 70 |...CADDVS sp, sp| 00002830 2c 20 23 34 20 20 20 20 20 20 20 20 20 20 20 20 |, #4 | 00002840 20 20 20 20 20 20 20 20 20 20 20 3b 20 70 6f 70 | ; pop| 00002850 20 72 30 20 73 6f 20 6e 6f 74 20 72 65 73 74 6f | r0 so not resto| 00002860 72 65 64 0d 0b 9a 3d 4c 44 4d 56 53 46 44 20 28 |red...=LDMVSFD (| 00002870 73 70 29 21 2c 20 7b 72 31 2c 20 72 32 2c 20 72 |sp)!, {r1, r2, r| 00002880 31 30 2c 20 70 63 7d 20 20 20 20 20 20 20 3b 20 |10, pc} ; | 00002890 72 65 74 75 72 6e 20 69 66 20 65 72 72 6f 72 2e |return if error.| 000028a0 0d 0b a4 43 4c 44 52 20 20 20 72 32 2c 20 5b 72 |...CLDR r2, [r| 000028b0 31 32 5d 20 20 20 20 20 20 20 20 20 20 20 20 20 |12] | 000028c0 20 20 20 20 20 20 20 20 20 20 20 3b 20 67 65 74 | ; get| 000028d0 20 77 6f 72 6b 73 70 61 63 65 20 70 6f 69 6e 74 | workspace point| 000028e0 65 72 2e 0d 0b ae 10 54 45 51 20 20 20 72 32 2c |er.....TEQ r2,| 000028f0 20 23 30 0d 0b b8 44 4c 44 4d 45 51 46 44 20 28 | #0...DLDMEQFD (| 00002900 73 70 29 21 2c 20 7b 72 30 2c 20 72 31 2c 20 72 |sp)!, {r0, r1, r| 00002910 32 2c 20 72 31 30 2c 20 70 63 7d 20 20 20 3b 20 |2, r10, pc} ; | 00002920 72 65 74 75 72 6e 20 69 66 20 6e 6f 20 77 6f 72 |return if no wor| 00002930 6b 73 70 61 63 65 2e 0d 0b c2 13 2e 6c 52 65 73 |kspace......lRes| 00002940 74 6f 72 65 5f 53 70 61 63 65 0d 0b cc 3c 4d 4f |tore_Space...<MO| 00002950 56 20 20 20 72 30 2c 20 23 37 20 20 20 20 20 20 |V r0, #7 | 00002960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002970 20 20 20 20 20 3b 20 66 72 65 65 20 77 6f 72 6b | ; free work| 00002980 73 70 61 63 65 2e 0d 0b d6 16 53 57 49 20 20 20 |space.....SWI | 00002990 22 58 4f 53 5f 4d 6f 64 75 6c 65 22 0d 0b e0 10 |"XOS_Module"....| 000029a0 4d 4f 56 20 20 20 72 32 2c 20 23 30 0d 0b ea 49 |MOV r2, #0...I| 000029b0 53 54 52 20 20 20 72 32 2c 20 5b 72 31 32 5d 20 |STR r2, [r12] | 000029c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000029d0 20 20 20 20 20 20 20 3b 20 72 65 73 65 74 20 76 | ; reset v| 000029e0 61 6c 75 65 20 6f 66 20 70 72 69 76 61 74 65 20 |alue of private | 000029f0 77 6f 72 64 2e 0d 0b f4 44 41 44 44 56 53 20 73 |word....DADDVS s| 00002a00 70 2c 20 73 70 2c 20 23 34 20 20 20 20 20 20 20 |p, sp, #4 | 00002a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002a20 3b 20 70 6f 70 20 72 30 20 73 6f 20 6e 6f 74 20 |; pop r0 so not | 00002a30 72 65 73 74 6f 72 65 64 2e 0d 0b fe 24 4c 44 4d |restored....$LDM| 00002a40 56 53 46 44 20 28 73 70 29 21 2c 20 7b 72 31 2c |VSFD (sp)!, {r1,| 00002a50 20 72 32 2c 20 72 31 30 2c 20 70 63 7d 0d 0c 08 | r2, r10, pc}...| 00002a60 26 4c 44 4d 46 44 20 28 73 70 29 21 2c 20 7b 72 |&LDMFD (sp)!, {r| 00002a70 30 2c 20 72 31 2c 20 72 32 2c 20 72 31 30 2c 20 |0, r1, r2, r10, | 00002a80 70 63 7d 0d 0c 12 05 5d 0d 0c 1c 07 3d 22 22 0d |pc}....]....="".| 00002a90 0c 26 0c dd 20 a4 66 6c 75 73 68 0d 0c 30 0e 5b |.&.. .flush..0.[| 00002aa0 20 4f 50 54 20 70 61 73 73 0d 0c 31 3a 3b 20 43 | OPT pass..1:; C| 00002ab0 6f 64 65 20 66 6f 72 20 74 68 65 20 2a 46 6c 75 |ode for the *Flu| 00002ac0 73 68 20 63 6f 6d 6d 61 6e 64 2e 20 45 71 75 69 |sh command. Equi| 00002ad0 76 61 6c 65 6e 74 20 74 6f 20 2a 46 58 20 32 31 |valent to *FX 21| 00002ae0 2c 33 2e 0d 0c 3a 0f 2e 6c 46 6c 75 73 68 43 6f |,3...:..lFlushCo| 00002af0 64 65 0d 0c 44 1d 53 54 4d 46 44 20 28 73 70 29 |de..D.STMFD (sp)| 00002b00 21 2c 20 7b 72 30 2c 20 72 31 2c 20 6c 6e 7d 0d |!, {r0, r1, ln}.| 00002b10 0c 4e 11 4d 4f 56 20 20 20 72 30 2c 20 23 32 31 |.N.MOV r0, #21| 00002b20 0d 0c 58 10 4d 4f 56 20 20 20 72 31 2c 20 23 33 |..X.MOV r1, #3| 00002b30 0d 0c 62 14 53 57 49 20 20 20 22 58 4f 53 5f 42 |..b.SWI "XOS_B| 00002b40 79 74 65 22 0d 0c 6c 1f 4c 44 4d 56 43 46 44 20 |yte"..l.LDMVCFD | 00002b50 28 73 70 29 21 2c 20 7b 72 30 2c 20 72 31 2c 20 |(sp)!, {r0, r1, | 00002b60 70 63 7d 0d 0c 76 14 41 44 44 20 20 20 73 70 2c |pc}..v.ADD sp,| 00002b70 20 73 70 2c 20 23 34 0d 0c 80 19 4c 44 4d 46 44 | sp, #4....LDMFD| 00002b80 20 28 73 70 29 21 2c 20 7b 72 31 2c 20 70 63 7d | (sp)!, {r1, pc}| 00002b90 0d 0c 8a 05 5d 0d 0c 94 07 3d 22 22 0d 0c 9e 0d |....]....=""....| 00002ba0 dd 20 a4 69 6e 73 65 72 74 0d 0c a8 2a ea 20 72 |. .insert...*. r| 00002bb0 43 68 61 72 2c 20 72 52 65 74 75 72 6e 2c 20 72 |Char, rReturn, r| 00002bc0 50 6c 61 63 65 2c 20 72 53 70 61 63 65 2c 20 72 |Place, rSpace, r| 00002bd0 45 6e 64 0d 0c b2 19 72 43 68 61 72 3d 20 30 20 |End....rChar= 0 | 00002be0 3a 20 72 52 65 74 75 72 6e 3d 20 32 0d 0c bc 28 |: rReturn= 2...(| 00002bf0 72 50 6c 61 63 65 3d 20 33 20 3a 20 72 53 70 61 |rPlace= 3 : rSpa| 00002c00 63 65 3d 20 72 50 6c 61 63 65 20 3a 20 72 45 6e |ce= rPlace : rEn| 00002c10 64 3d 20 34 0d 0c c6 0e 5b 20 4f 50 54 20 70 61 |d= 4....[ OPT pa| 00002c20 73 73 0d 0c d0 21 3b 20 49 6e 73 56 20 20 2d 20 |ss...!; InsV - | 00002c30 49 6e 73 65 72 74 20 56 65 63 74 6f 72 20 43 6f |Insert Vector Co| 00002c40 64 65 2e 0d 0c da 30 3b 20 45 6e 74 72 79 20 2d |de....0; Entry -| 00002c50 20 72 30 3d 20 63 68 61 72 20 74 6f 20 69 6e 73 | r0= char to ins| 00002c60 65 72 74 2c 20 72 31 3d 20 62 75 66 66 65 72 20 |ert, r1= buffer | 00002c70 6e 6f 2e 0d 0c e4 2a 3b 20 45 78 69 74 20 20 2d |no....*; Exit -| 00002c80 20 72 32 3d 20 3f 2c 20 43 3d 31 20 69 6e 73 65 | r2= ?, C=1 inse| 00002c90 72 74 69 6f 6e 20 66 61 69 6c 65 64 2e 0d 0c ee |rtion failed....| 00002ca0 0a 2e 6c 49 6e 73 56 0d 0c f8 47 20 54 45 51 20 |..lInsV...G TEQ | 00002cb0 20 20 20 20 72 42 75 66 66 65 72 4e 6f 2c 20 23 | rBufferNo, #| 00002cc0 69 50 72 69 6e 74 65 72 20 20 20 20 20 20 20 20 |iPrinter | 00002cd0 20 20 20 3b 20 49 6e 73 65 72 74 20 69 6e 20 50 | ; Insert in P| 00002ce0 72 69 6e 74 65 72 20 42 75 66 66 65 72 3f 0d 0d |rinter Buffer?..| 00002cf0 02 3a 20 4d 4f 56 4e 45 53 20 20 70 63 2c 20 6c |.: MOVNES pc, l| 00002d00 6e 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |n | 00002d10 20 20 20 20 20 20 20 20 20 20 3b 20 4e 6f 2c 20 | ; No, | 00002d20 50 61 73 73 20 6f 6e 2e 0d 0d 0c 0c 2e 6c 49 6e |Pass on......lIn| 00002d30 73 65 72 74 0d 0d 16 41 20 4c 44 4d 46 44 20 20 |sert...A LDMFD | 00002d40 20 28 73 70 29 21 2c 20 7b 72 52 65 74 75 72 6e | (sp)!, {rReturn| 00002d50 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |} | 00002d60 3b 20 47 65 74 20 52 65 74 75 72 6e 20 41 64 64 |; Get Return Add| 00002d70 72 65 73 73 2e 0d 0d 20 3c 20 53 54 4d 46 44 20 |ress... < STMFD | 00002d80 20 20 28 73 70 29 21 2c 20 7b 72 53 70 61 63 65 | (sp)!, {rSpace| 00002d90 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |} | 00002da0 20 3b 20 50 75 73 68 20 52 65 67 69 73 74 65 72 | ; Push Register| 00002db0 2e 0d 0d 2a 43 20 4c 44 52 20 20 20 20 20 72 53 |...*C LDR rS| 00002dc0 70 61 63 65 2c 20 5b 72 57 6f 72 6b 53 70 61 63 |pace, [rWorkSpac| 00002dd0 65 2c 23 6f 53 70 61 63 65 5d 20 20 20 3b 20 4c |e,#oSpace] ; L| 00002de0 6f 61 64 20 53 70 61 63 65 20 69 6e 20 42 75 66 |oad Space in Buf| 00002df0 66 65 72 2e 0d 0d 34 47 20 54 45 51 20 20 20 20 |fer...4G TEQ | 00002e00 20 72 53 70 61 63 65 2c 20 23 30 20 20 20 20 20 | rSpace, #0 | 00002e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002e20 3b 20 48 6f 77 20 6d 75 63 68 20 73 70 61 63 65 |; How much space| 00002e30 20 69 6e 20 42 75 66 66 65 72 3f 0d 0d 3e 3f 20 | in Buffer?..>? | 00002e40 4c 44 4d 46 44 20 20 20 28 73 70 29 21 2c 20 7b |LDMFD (sp)!, {| 00002e50 72 53 70 61 63 65 7d 20 20 20 20 20 20 20 20 20 |rSpace} | 00002e60 20 20 20 20 20 20 20 3b 20 52 65 73 74 6f 72 65 | ; Restore| 00002e70 20 52 65 67 69 73 74 65 72 2e 0d 0d 48 4d 20 84 | Register...HM .| 00002e80 52 45 51 53 20 20 70 63 2c 20 72 52 65 74 75 72 |REQS pc, rRetur| 00002e90 6e 2c 20 23 69 43 46 6c 61 67 20 20 20 20 20 20 |n, #iCFlag | 00002ea0 20 20 20 20 20 3b 20 4e 6f 20 53 70 61 63 65 2c | ; No Space,| 00002eb0 20 52 65 74 75 72 6e 20 77 69 74 68 20 43 61 72 | Return with Car| 00002ec0 72 79 20 53 65 74 2e 0d 0d 52 3d 20 53 54 4d 46 |ry Set...R= STMF| 00002ed0 44 20 20 20 28 73 70 29 21 2c 20 7b 72 50 6c 61 |D (sp)!, {rPla| 00002ee0 63 65 2c 20 72 45 6e 64 7d 20 20 20 20 20 20 20 |ce, rEnd} | 00002ef0 20 20 20 3b 20 50 75 73 68 20 52 65 67 69 73 74 | ; Push Regist| 00002f00 65 72 73 2e 0d 0d 5c 44 20 4c 44 52 20 20 20 20 |ers...\D LDR | 00002f10 20 72 50 6c 61 63 65 2c 20 5b 72 57 6f 72 6b 53 | rPlace, [rWorkS| 00002f20 70 61 63 65 2c 20 23 6f 50 6c 61 63 65 5d 20 20 |pace, #oPlace] | 00002f30 3b 20 4c 6f 61 64 20 52 65 67 69 73 74 65 72 73 |; Load Registers| 00002f40 2c 20 50 6c 61 63 65 2e 0d 0d 66 42 20 4c 44 52 |, Place...fB LDR| 00002f50 20 20 20 20 20 72 45 6e 64 2c 20 5b 72 57 6f 72 | rEnd, [rWor| 00002f60 6b 53 70 61 63 65 2c 20 23 6f 45 6e 64 5d 20 20 |kSpace, #oEnd] | 00002f70 20 20 20 20 3b 20 20 20 20 20 20 20 20 20 20 20 | ; | 00002f80 20 20 20 20 20 20 45 6e 64 2e 0d 0d 70 4a 20 42 | End...pJ B| 00002f90 49 43 20 20 20 20 20 72 52 65 74 75 72 6e 2c 20 |IC rReturn, | 00002fa0 72 52 65 74 75 72 6e 2c 20 23 69 43 46 6c 61 67 |rReturn, #iCFlag| 00002fb0 20 20 20 20 20 20 3b 20 43 6c 65 61 72 20 43 61 | ; Clear Ca| 00002fc0 72 72 79 20 66 6c 61 67 20 66 6f 72 20 52 65 74 |rry flag for Ret| 00002fd0 75 72 6e 2e 0d 0d 7a 48 20 53 54 52 42 20 20 20 |urn...zH STRB | 00002fe0 20 72 43 68 61 72 2c 20 5b 72 57 6f 72 6b 53 70 | rChar, [rWorkSp| 00002ff0 61 63 65 2c 20 72 50 6c 61 63 65 5d 20 20 20 20 |ace, rPlace] | 00003000 3b 20 53 74 6f 72 65 20 43 68 61 72 61 63 74 65 |; Store Characte| 00003010 72 20 69 6e 20 42 75 66 66 65 72 2e 0d 0d 84 2d |r in Buffer....-| 00003020 20 41 44 44 20 20 20 20 20 72 50 6c 61 63 65 2c | ADD rPlace,| 00003030 20 72 50 6c 61 63 65 2c 20 23 31 20 20 20 20 20 | rPlace, #1 | 00003040 20 20 20 20 20 20 20 20 3b 0d 0d 8e 46 20 54 45 | ;...F TE| 00003050 51 20 20 20 20 20 72 50 6c 61 63 65 2c 20 72 45 |Q rPlace, rE| 00003060 6e 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |nd | 00003070 20 20 20 20 20 3b 20 41 72 65 20 77 65 20 61 74 | ; Are we at| 00003080 20 65 6e 64 20 6f 66 20 42 75 66 66 65 72 2e 0d | end of Buffer..| 00003090 0d 98 41 20 ec 51 20 20 20 72 50 6c 61 63 65 2c |..A .Q rPlace,| 000030a0 20 23 6f 42 75 66 66 65 72 20 20 20 20 20 20 20 | #oBuffer | 000030b0 20 20 20 20 20 20 20 20 3b 20 59 65 73 2c 20 67 | ; Yes, g| 000030c0 6f 20 62 61 63 6b 20 74 6f 20 73 74 61 72 74 2e |o back to start.| 000030d0 0d 0d a2 3e 20 53 54 52 20 20 20 20 20 72 50 6c |...> STR rPl| 000030e0 61 63 65 2c 20 5b 72 57 6f 72 6b 53 70 61 63 65 |ace, [rWorkSpace| 000030f0 2c 20 23 6f 50 6c 61 63 65 5d 20 20 3b 20 53 74 |, #oPlace] ; St| 00003100 6f 72 65 20 6e 65 77 20 70 6c 61 63 65 2e 0d 0d |ore new place...| 00003110 ac 43 20 4c 44 52 20 20 20 20 20 72 53 70 61 63 |.C LDR rSpac| 00003120 65 2c 20 5b 72 57 6f 72 6b 53 70 61 63 65 2c 20 |e, [rWorkSpace, | 00003130 23 6f 53 70 61 63 65 5d 20 20 3b 20 4c 6f 61 64 |#oSpace] ; Load| 00003140 20 61 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 | amount of space| 00003150 2e 0d 0d b6 3e 20 53 55 42 20 20 20 20 20 72 53 |....> SUB rS| 00003160 70 61 63 65 2c 20 72 53 70 61 63 65 2c 20 23 31 |pace, rSpace, #1| 00003170 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 44 | ; D| 00003180 65 63 72 65 6d 65 6e 74 20 73 70 61 63 65 2e 0d |ecrement space..| 00003190 0d c0 3e 20 53 54 52 20 20 20 20 20 72 53 70 61 |..> STR rSpa| 000031a0 63 65 2c 20 5b 72 57 6f 72 6b 53 70 61 63 65 2c |ce, [rWorkSpace,| 000031b0 20 23 6f 53 70 61 63 65 5d 20 20 3b 20 53 74 6f | #oSpace] ; Sto| 000031c0 72 65 20 6e 65 77 20 73 70 61 63 65 2e 0d 0d ca |re new space....| 000031d0 40 20 4c 44 4d 46 44 20 20 20 28 73 70 29 21 2c |@ LDMFD (sp)!,| 000031e0 20 7b 72 50 6c 61 63 65 2c 20 72 45 6e 64 7d 20 | {rPlace, rEnd} | 000031f0 20 20 20 20 20 20 20 20 20 3b 20 52 65 73 74 6f | ; Resto| 00003200 72 65 20 52 65 67 69 73 74 65 72 73 2e 0d 0d d4 |re Registers....| 00003210 46 20 4d 4f 56 53 20 20 20 20 70 63 2c 20 72 52 |F MOVS pc, rR| 00003220 65 74 75 72 6e 20 20 20 20 20 20 20 20 20 20 20 |eturn | 00003230 20 20 20 20 20 20 20 20 20 3b 20 52 65 74 75 72 | ; Retur| 00003240 6e 20 77 69 74 68 20 43 61 72 72 79 20 43 6c 65 |n with Carry Cle| 00003250 61 72 2e 0d 0d de 05 5d 0d 0d e8 07 3d 22 22 0d |ar.....]....="".| 00003260 0d f2 0d dd 20 a4 72 65 6d 6f 76 65 0d 0d fc 2d |.... .remove...-| 00003270 ea 20 72 45 78 61 6d 69 6e 65 2c 20 72 52 65 6d |. rExamine, rRem| 00003280 6f 76 65 64 2c 20 72 53 70 61 63 65 2c 20 72 4c |oved, rSpace, rL| 00003290 6f 6f 6b 2c 20 72 45 6e 64 0d 0e 06 1d 72 45 78 |ook, rEnd....rEx| 000032a0 61 6d 69 6e 65 3d 20 30 20 3a 20 72 52 65 6d 6f |amine= 0 : rRemo| 000032b0 76 65 64 3d 20 32 0d 0e 10 27 72 53 70 61 63 65 |ved= 2...'rSpace| 000032c0 3d 20 31 20 3a 20 72 4c 6f 6f 6b 3d 20 72 53 70 |= 1 : rLook= rSp| 000032d0 61 63 65 20 3a 20 72 45 6e 64 3d 20 34 0d 0e 1a |ace : rEnd= 4...| 000032e0 0e 5b 20 4f 50 54 20 70 61 73 73 0d 0e 24 29 3b |.[ OPT pass..$);| 000032f0 20 52 65 6d 56 20 20 2d 20 52 65 6d 6f 76 65 2f | RemV - Remove/| 00003300 45 78 61 6d 69 6e 65 20 56 65 63 74 6f 72 20 63 |Examine Vector c| 00003310 6f 64 65 2e 0d 0e 2e 42 3b 20 45 6e 74 72 79 20 |ode....B; Entry | 00003320 2d 20 72 31 3d 20 62 75 66 66 65 72 20 6e 6f 2e |- r1= buffer no.| 00003330 2c 20 56 3d 31 20 6d 65 61 6e 73 20 65 78 61 6d |, V=1 means exam| 00003340 69 6e 65 2c 20 56 3d 30 20 6d 65 61 6e 73 20 72 |ine, V=0 means r| 00003350 65 6d 6f 76 65 2e 0d 0e 38 42 3b 20 45 78 69 74 |emove...8B; Exit| 00003360 20 20 2d 20 72 32 3d 20 63 68 61 72 20 72 65 74 | - r2= char ret| 00003370 75 72 6e 65 64 20 6f 72 20 65 78 61 6d 69 6e 65 |urned or examine| 00003380 64 2c 20 43 3d 31 20 62 75 66 66 65 72 20 77 61 |d, C=1 buffer wa| 00003390 73 20 65 6d 70 74 79 2e 0d 0e 42 0a 2e 6c 52 65 |s empty...B..lRe| 000033a0 6d 56 0d 0e 4c 3e 20 53 54 52 20 20 20 20 20 70 |mV..L> STR p| 000033b0 63 2c 20 5b 72 57 6f 72 6b 53 70 61 63 65 2c 20 |c, [rWorkSpace, | 000033c0 23 6f 70 63 5d 20 20 20 20 20 20 20 20 20 20 3b |#opc] ;| 000033d0 20 73 74 6f 72 65 20 61 77 61 79 20 50 53 52 2e | store away PSR.| 000033e0 0d 0e 56 4a 20 54 45 51 20 20 20 20 20 72 42 75 |..VJ TEQ rBu| 000033f0 66 66 65 72 4e 6f 2c 20 23 69 50 72 69 6e 74 65 |fferNo, #iPrinte| 00003400 72 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 |r ; R| 00003410 65 6d 6f 76 65 20 66 72 6f 6d 20 50 72 69 6e 74 |emove from Print| 00003420 65 72 20 42 75 66 66 65 72 3f 0d 0e 60 3b 20 4d |er Buffer?..`; M| 00003430 4f 56 4e 45 53 20 20 70 63 2c 20 6c 6e 20 20 20 |OVNES pc, ln | 00003440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003450 20 20 20 20 20 20 20 3b 20 4e 6f 2c 20 50 61 73 | ; No, Pas| 00003460 73 20 6f 6e 2e 0d 0e 6a 11 2e 6c 52 65 6d 46 75 |s on...j..lRemFu| 00003470 6e 63 74 69 6f 6e 0d 0e 74 3d 20 53 54 4d 46 44 |nction..t= STMFD| 00003480 20 20 20 28 73 70 29 21 2c 20 7b 72 53 70 61 63 | (sp)!, {rSpac| 00003490 65 2c 72 45 6e 64 7d 20 20 20 20 20 20 20 20 20 |e,rEnd} | 000034a0 20 20 20 3b 20 50 75 73 68 20 52 65 67 69 73 74 | ; Push Regist| 000034b0 65 72 2e 0d 0e 7e 44 20 4c 44 52 20 20 20 20 20 |er...~D LDR | 000034c0 72 53 70 61 63 65 2c 20 5b 72 57 6f 72 6b 53 70 |rSpace, [rWorkSp| 000034d0 61 63 65 2c 20 23 6f 53 70 61 63 65 5d 20 20 20 |ace, #oSpace] | 000034e0 3b 20 4c 6f 61 64 20 61 6d 6f 75 6e 74 20 6f 66 |; Load amount of| 000034f0 20 73 70 61 63 65 2e 0d 0e 88 27 20 4c 44 52 20 | space....' LDR | 00003500 20 20 20 20 72 45 6e 64 2c 20 5b 72 57 6f 72 6b | rEnd, [rWork| 00003510 53 70 61 63 65 2c 20 23 6f 53 69 7a 65 5d 0d 0e |Space, #oSize]..| 00003520 92 42 20 54 45 51 20 20 20 20 20 72 53 70 61 63 |.B TEQ rSpac| 00003530 65 2c 20 72 45 6e 64 20 20 20 20 20 20 20 20 20 |e, rEnd | 00003540 20 20 20 20 20 20 20 20 20 20 20 3b 20 53 70 61 | ; Spa| 00003550 63 65 3d 53 69 7a 65 20 2d 3e 20 45 6d 70 74 79 |ce=Size -> Empty| 00003560 0d 0e 9c 17 20 42 4e 45 20 20 20 20 20 6c 6e 6f |.... BNE lno| 00003570 74 5f 65 6d 70 74 79 0d 0e a6 44 20 4c 44 52 20 |t_empty...D LDR | 00003580 20 20 20 20 72 53 70 61 63 65 2c 20 5b 73 70 2c | rSpace, [sp,| 00003590 23 38 5d 20 20 20 20 20 20 20 20 20 20 20 20 20 |#8] | 000035a0 20 20 20 20 3b 20 66 6f 72 67 65 20 43 20 73 65 | ; forge C se| 000035b0 74 20 6f 6e 20 73 74 61 63 6b 2e 0d 0e b0 23 20 |t on stack....# | 000035c0 84 52 20 20 20 20 20 72 53 70 61 63 65 2c 20 72 |.R rSpace, r| 000035d0 53 70 61 63 65 2c 20 23 69 43 46 6c 61 67 0d 0e |Space, #iCFlag..| 000035e0 ba 1c 20 53 54 52 20 20 20 20 20 72 53 70 61 63 |.. STR rSpac| 000035f0 65 2c 20 5b 73 70 2c 23 38 5d 0d 0e c4 44 20 4c |e, [sp,#8]...D L| 00003600 44 4d 45 51 46 44 20 28 73 70 29 21 2c 20 7b 72 |DMEQFD (sp)!, {r| 00003610 53 70 61 63 65 2c 20 72 45 6e 64 2c 20 70 63 7d |Space, rEnd, pc}| 00003620 5e 20 20 20 20 20 20 3b 20 52 65 74 75 72 6e 20 |^ ; Return | 00003630 69 66 20 65 6d 70 74 79 2c 20 43 3d 31 2e 0d 0e |if empty, C=1...| 00003640 ce 04 0d 0e d8 0f 2e 6c 6e 6f 74 5f 65 6d 70 74 |.......lnot_empt| 00003650 79 0d 0e e2 46 20 4c 44 52 20 20 20 20 20 72 53 |y...F LDR rS| 00003660 70 61 63 65 2c 20 5b 73 70 2c 23 38 5d 20 20 20 |pace, [sp,#8] | 00003670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 00003680 66 6f 72 67 65 20 43 20 63 6c 65 61 72 20 6f 6e |forge C clear on| 00003690 20 73 74 61 63 6b 2e 0d 0e ec 24 20 42 49 43 20 | stack....$ BIC | 000036a0 20 20 20 20 72 53 70 61 63 65 2c 20 72 53 70 61 | rSpace, rSpa| 000036b0 63 65 2c 20 23 69 43 46 6c 61 67 0d 0e f6 1c 20 |ce, #iCFlag.... | 000036c0 53 54 52 20 20 20 20 20 72 53 70 61 63 65 2c 20 |STR rSpace, | 000036d0 5b 73 70 2c 23 38 5d 0d 0f 00 3f 20 4c 44 52 20 |[sp,#8]...? LDR | 000036e0 20 20 20 20 72 4c 6f 6f 6b 2c 20 5b 72 57 6f 72 | rLook, [rWor| 000036f0 6b 53 70 61 63 65 2c 20 23 6f 70 63 5d 20 20 20 |kSpace, #opc] | 00003700 20 20 20 20 3b 20 67 65 74 20 50 53 52 20 6f 6e | ; get PSR on| 00003710 20 65 6e 74 72 79 0d 0f 0a 16 20 54 45 51 50 20 | entry.... TEQP | 00003720 20 20 20 70 63 2c 20 72 4c 6f 6f 6b 0d 0f 14 4c | pc, rLook...L| 00003730 20 42 56 43 20 20 20 20 20 6c 52 65 6d 6f 76 65 | BVC lRemove| 00003740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003750 20 20 20 20 20 20 20 20 20 3b 20 49 66 20 56 3d | ; If V=| 00003760 30 20 74 68 65 6e 20 62 72 61 6e 63 68 20 74 6f |0 then branch to| 00003770 20 52 65 6d 6f 76 65 2e 0d 0f 1e 4e 20 4c 44 52 | Remove....N LDR| 00003780 20 20 20 20 20 72 4c 6f 6f 6b 2c 20 5b 72 57 6f | rLook, [rWo| 00003790 72 6b 53 70 61 63 65 2c 20 23 6f 4c 6f 6f 6b 5d |rkSpace, #oLook]| 000037a0 20 20 20 20 20 3b 20 4c 6f 61 64 20 70 6f 69 6e | ; Load poin| 000037b0 74 65 72 20 74 6f 20 63 68 61 72 20 74 6f 20 72 |ter to char to r| 000037c0 65 6d 6f 76 65 2e 0d 0f 28 3f 20 4c 44 52 42 20 |emove...(? LDRB | 000037d0 20 20 20 72 45 78 61 6d 69 6e 65 2c 20 5b 72 57 | rExamine, [rW| 000037e0 6f 72 6b 53 70 61 63 65 2c 20 72 4c 6f 6f 6b 5d |orkSpace, rLook]| 000037f0 20 20 20 3b 20 4c 6f 61 64 20 63 68 61 72 20 76 | ; Load char v| 00003800 61 6c 75 65 2e 0d 0f 32 1f 20 4d 4f 56 20 20 20 |alue...2. MOV | 00003810 20 20 72 52 65 6d 6f 76 65 64 2c 20 72 45 78 61 | rRemoved, rExa| 00003820 6d 69 6e 65 0d 0f 3c 27 20 4c 44 4d 46 44 20 20 |mine..<' LDMFD | 00003830 20 28 73 70 29 21 2c 20 7b 72 53 70 61 63 65 2c | (sp)!, {rSpace,| 00003840 20 72 45 6e 64 2c 20 70 63 7d 5e 0d 0f 46 40 20 | rEnd, pc}^..F@ | 00003850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | * 00003870 20 20 20 20 20 20 20 20 3b 20 52 65 6d 6f 76 65 | ; Remove| 00003880 20 43 68 61 72 61 63 74 65 72 2e 0d 0f 50 0c 2e | Character...P..| 00003890 6c 52 65 6d 6f 76 65 0d 0f 5a 4e 20 4c 44 52 20 |lRemove..ZN LDR | 000038a0 20 20 20 20 72 4c 6f 6f 6b 2c 20 5b 72 57 6f 72 | rLook, [rWor| 000038b0 6b 53 70 61 63 65 2c 20 23 6f 4c 6f 6f 6b 5d 20 |kSpace, #oLook] | 000038c0 20 20 20 20 3b 20 4c 6f 61 64 20 70 6f 69 6e 74 | ; Load point| 000038d0 65 72 20 74 6f 20 63 68 61 72 20 74 6f 20 72 65 |er to char to re| 000038e0 6d 6f 76 65 2e 0d 0f 64 4d 20 4c 44 52 20 20 20 |move...dM LDR | 000038f0 20 20 72 45 6e 64 2c 20 5b 72 57 6f 72 6b 53 70 | rEnd, [rWorkSp| 00003900 61 63 65 2c 20 23 6f 45 6e 64 5d 20 20 20 20 20 |ace, #oEnd] | 00003910 20 20 3b 20 4c 6f 61 64 20 70 6f 69 6e 74 65 72 | ; Load pointer| 00003920 20 74 6f 20 65 6e 64 20 6f 66 20 62 75 66 66 65 | to end of buffe| 00003930 72 2e 0d 0f 6e 4b 20 4c 44 52 42 20 20 20 20 72 |r...nK LDRB r| 00003940 52 65 6d 6f 76 65 64 2c 20 5b 72 57 6f 72 6b 53 |Removed, [rWorkS| 00003950 70 61 63 65 2c 20 72 4c 6f 6f 6b 5d 20 20 20 3b |pace, rLook] ;| 00003960 20 4c 6f 61 64 20 63 68 61 72 20 76 61 6c 75 65 | Load char value| 00003970 2c 20 61 6e 64 20 72 65 6d 6f 76 65 2e 0d 0f 78 |, and remove...x| 00003980 45 20 41 44 44 20 20 20 20 20 72 4c 6f 6f 6b 2c |E ADD rLook,| 00003990 20 72 4c 6f 6f 6b 2c 20 23 31 20 20 20 20 20 20 | rLook, #1 | 000039a0 20 20 20 20 20 20 20 20 20 20 3b 20 69 6e 63 72 | ; incr| 000039b0 65 6d 65 6e 74 20 6c 6f 6f 6b 20 70 6f 69 6e 74 |ement look point| 000039c0 65 72 0d 0f 82 1f 20 4d 4f 56 20 20 20 20 20 72 |er.... MOV r| 000039d0 45 78 61 6d 69 6e 65 2c 20 72 52 65 6d 6f 76 65 |Examine, rRemove| 000039e0 64 0d 0f 8c 47 20 54 45 51 20 20 20 20 20 72 4c |d...G TEQ rL| 000039f0 6f 6f 6b 2c 20 72 45 6e 64 20 20 20 20 20 20 20 |ook, rEnd | 00003a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 00003a10 41 72 65 20 77 65 20 61 74 20 65 6e 64 20 6f 66 |Are we at end of| 00003a20 20 42 75 66 66 65 72 3f 0d 0f 96 42 20 ec 51 20 | Buffer?...B .Q | 00003a30 20 20 72 4c 6f 6f 6b 2c 20 23 6f 42 75 66 66 65 | rLook, #oBuffe| 00003a40 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |r | 00003a50 20 20 3b 20 59 65 73 2c 20 67 6f 20 62 61 63 6b | ; Yes, go back| 00003a60 20 74 6f 20 73 74 61 72 74 2e 0d 0f a0 46 20 53 | to start....F S| 00003a70 54 52 20 20 20 20 20 72 4c 6f 6f 6b 2c 20 5b 72 |TR rLook, [r| 00003a80 57 6f 72 6b 53 70 61 63 65 2c 20 23 6f 4c 6f 6f |WorkSpace, #oLoo| 00003a90 6b 5d 20 20 20 20 20 3b 20 53 61 76 65 20 6e 65 |k] ; Save ne| 00003aa0 77 20 70 6c 61 63 65 20 74 6f 20 6c 6f 6f 6b 2e |w place to look.| 00003ab0 0d 0f aa 4e 20 4c 44 52 20 20 20 20 20 72 53 70 |...N LDR rSp| 00003ac0 61 63 65 2c 20 5b 72 57 6f 72 6b 53 70 61 63 65 |ace, [rWorkSpace| 00003ad0 2c 20 23 6f 53 70 61 63 65 5d 20 20 20 3b 20 4c |, #oSpace] ; L| 00003ae0 6f 61 64 20 61 6d 6f 75 6e 74 20 6f 66 20 73 70 |oad amount of sp| 00003af0 61 63 65 20 69 6e 20 62 75 66 66 65 72 2e 0d 0f |ace in buffer...| 00003b00 b4 4a 20 41 44 44 20 20 20 20 20 72 53 70 61 63 |.J ADD rSpac| 00003b10 65 2c 20 72 53 70 61 63 65 2c 20 23 31 20 20 20 |e, rSpace, #1 | 00003b20 20 20 20 20 20 20 20 20 20 20 20 3b 20 49 6e 63 | ; Inc| 00003b30 2e 20 73 70 61 63 65 20 2d 20 6f 6e 65 20 6c 65 |. space - one le| 00003b40 73 73 20 63 68 61 72 2e 0d 0f be 44 20 53 54 52 |ss char....D STR| 00003b50 20 20 20 20 20 72 53 70 61 63 65 2c 20 5b 72 57 | rSpace, [rW| 00003b60 6f 72 6b 53 70 61 63 65 2c 20 23 6f 53 70 61 63 |orkSpace, #oSpac| 00003b70 65 5d 20 20 20 3b 20 53 61 76 65 20 61 6d 6f 75 |e] ; Save amou| 00003b80 6e 74 20 6f 66 20 73 70 61 63 65 2e 0d 0f c8 41 |nt of space....A| 00003b90 20 4c 44 4d 46 44 20 20 20 28 73 70 29 21 2c 20 | LDMFD (sp)!, | 00003ba0 7b 72 53 70 61 63 65 2c 20 72 45 6e 64 2c 20 70 |{rSpace, rEnd, p| 00003bb0 63 7d 5e 20 20 20 20 20 20 3b 20 52 65 73 74 6f |c}^ ; Resto| 00003bc0 72 65 20 52 65 67 69 73 74 65 72 73 2e 0d 0f d2 |re Registers....| 00003bd0 05 5d 0d 0f dc 07 3d 22 22 0d 0f e6 0c dd 20 a4 |.]....=""..... .| 00003be0 63 6f 75 6e 74 0d 0f f0 32 ea 20 72 43 6f 75 6e |count...2. rCoun| 00003bf0 74 4c 2c 20 72 43 6f 75 6e 74 48 2c 20 72 53 69 |tL, rCountH, rSi| 00003c00 7a 65 2c 20 72 53 70 61 63 65 2c 20 72 54 6d 70 |ze, rSpace, rTmp| 00003c10 2c 20 69 42 6f 74 38 0d 0f fa 1b 72 43 6f 75 6e |, iBot8....rCoun| 00003c20 74 4c 3d 20 31 20 3a 20 72 43 6f 75 6e 74 48 3d |tL= 1 : rCountH=| 00003c30 20 32 0d 10 04 2e 72 53 70 61 63 65 3d 20 72 43 | 2....rSpace= rC| 00003c40 6f 75 6e 74 4c 20 3a 20 72 53 69 7a 65 3d 20 72 |ountL : rSize= r| 00003c50 43 6f 75 6e 74 48 20 3a 20 72 54 6d 70 3d 20 30 |CountH : rTmp= 0| 00003c60 0d 10 0e 0e 69 42 6f 74 38 3d 20 26 46 46 0d 10 |....iBot8= &FF..| 00003c70 18 0e 5b 20 4f 50 54 20 70 61 73 73 0d 10 22 26 |..[ OPT pass.."&| 00003c80 3b 20 43 6e 70 56 20 20 2d 20 43 6f 75 6e 74 2f |; CnpV - Count/| 00003c90 50 75 72 67 65 20 56 65 63 74 6f 72 20 43 6f 64 |Purge Vector Cod| 00003ca0 65 2e 0d 10 2c 48 3b 20 45 6e 74 72 79 20 2d 20 |e...,H; Entry - | 00003cb0 72 31 3d 20 62 75 66 66 65 72 20 6e 6f 2e 2c 20 |r1= buffer no., | 00003cc0 56 3d 30 20 2d 3e 20 63 6f 75 6e 74 2c 20 43 3d |V=0 -> count, C=| 00003cd0 30 20 2d 3e 20 65 6e 74 72 69 65 73 2c 20 43 3d |0 -> entries, C=| 00003ce0 31 20 2d 3e 20 73 70 61 63 65 0d 10 36 2b 3b 20 |1 -> space..6+; | 00003cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003d00 20 20 20 20 20 20 20 20 56 3d 31 20 2d 3e 20 70 | V=1 -> p| 00003d10 75 72 67 65 2e 0d 10 40 4a 3b 20 45 78 69 74 20 |urge...@J; Exit | 00003d20 20 2d 20 72 30 3d 20 3f 2c 20 69 66 20 56 3d 30 | - r0= ?, if V=0| 00003d30 20 74 68 65 6e 20 72 31 3d 20 63 6f 75 6e 74 20 | then r1= count | 00003d40 28 62 6f 74 74 6f 6d 20 38 29 3b 20 72 32 3d 20 |(bottom 8); r2= | 00003d50 63 6f 75 6e 74 20 28 74 6f 70 20 32 34 29 2e 0d |count (top 24)..| 00003d60 10 4a 0a 2e 6c 43 6e 70 56 0d 10 54 23 20 53 54 |.J..lCnpV..T# ST| 00003d70 52 20 20 20 20 20 70 63 2c 20 5b 72 57 6f 72 6b |R pc, [rWork| 00003d80 53 70 61 63 65 2c 20 23 6f 70 63 5d 0d 10 5e 48 |Space, #opc]..^H| 00003d90 20 54 45 51 20 20 20 20 20 72 42 75 66 66 65 72 | TEQ rBuffer| 00003da0 4e 6f 2c 20 23 69 50 72 69 6e 74 65 72 20 20 20 |No, #iPrinter | 00003db0 20 20 20 20 20 20 20 3b 20 43 6f 75 6e 74 2f 50 | ; Count/P| 00003dc0 75 72 67 65 20 50 72 69 6e 74 65 72 20 42 75 66 |urge Printer Buf| 00003dd0 66 65 72 3f 0d 10 68 39 20 4d 4f 56 4e 45 53 20 |fer?..h9 MOVNES | 00003de0 20 70 63 2c 20 6c 6e 20 20 20 20 20 20 20 20 20 | pc, ln | 00003df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00003e00 20 4e 6f 2c 20 50 61 73 73 20 6f 6e 2e 0d 10 72 | No, Pass on...r| 00003e10 11 2e 6c 43 6e 70 46 75 6e 63 74 69 6f 6e 0d 10 |..lCnpFunction..| 00003e20 7c 36 20 4c 44 52 20 20 20 20 20 72 30 2c 20 5b ||6 LDR r0, [| 00003e30 72 57 6f 72 6b 53 70 61 63 65 2c 20 23 6f 70 63 |rWorkSpace, #opc| 00003e40 5d 20 20 20 20 20 20 20 20 3b 20 73 74 6f 72 65 |] ; store| 00003e50 20 50 53 52 0d 10 86 13 20 54 45 51 50 20 20 20 | PSR.... TEQP | 00003e60 20 70 63 2c 20 72 30 0d 10 90 49 20 42 56 53 20 | pc, r0...I BVS | 00003e70 20 20 20 20 6c 50 75 72 67 65 20 20 20 20 20 20 | lPurge | 00003e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003e90 20 20 3b 20 69 66 20 56 3d 31 20 74 68 65 6e 20 | ; if V=1 then | 00003ea0 62 72 61 6e 63 68 20 74 6f 20 70 75 72 67 65 2e |branch to purge.| 00003eb0 0d 10 9a 04 0d 10 a4 41 2e 6c 43 6f 75 6e 74 20 |.......A.lCount | 00003ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00003ee0 20 43 6f 75 6e 74 20 65 6e 74 72 69 65 73 2f 73 | Count entries/s| 00003ef0 70 61 63 65 2e 0d 10 ae 43 20 4c 44 52 20 20 20 |pace....C LDR | 00003f00 20 20 72 43 6f 75 6e 74 4c 2c 20 5b 72 57 6f 72 | rCountL, [rWor| 00003f10 6b 53 70 61 63 65 2c 20 23 6f 53 70 61 63 65 5d |kSpace, #oSpace]| 00003f20 20 3b 20 4c 6f 61 64 20 61 6d 6f 75 6e 74 20 6f | ; Load amount o| 00003f30 66 20 73 70 61 63 65 2e 0d 10 b8 4c 20 42 4c 43 |f space....L BLC| 00003f40 43 20 20 20 20 6c 45 6e 74 72 79 20 20 20 20 20 |C lEntry | 00003f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00003f60 20 20 20 3b 20 69 66 20 43 3d 30 20 74 68 65 6e | ; if C=0 then| 00003f70 20 73 75 62 72 6f 75 74 69 6e 65 20 65 6e 74 72 | subroutine entr| 00003f80 69 65 73 2e 0d 10 c2 46 20 4d 4f 56 20 20 20 20 |ies....F MOV | 00003f90 20 72 43 6f 75 6e 74 48 2c 20 72 43 6f 75 6e 74 | rCountH, rCount| 00003fa0 4c 2c 20 41 53 52 20 23 38 20 20 20 20 20 20 3b |L, ASR #8 ;| 00003fb0 20 47 65 74 20 74 6f 70 20 32 34 20 62 69 74 73 | Get top 24 bits| 00003fc0 20 6f 66 20 63 6f 75 6e 74 2e 0d 10 cc 46 20 80 | of count....F .| 00003fd0 20 20 20 20 20 72 43 6f 75 6e 74 4c 2c 20 72 43 | rCountL, rC| 00003fe0 6f 75 6e 74 4c 2c 20 23 69 42 6f 74 38 20 20 20 |ountL, #iBot8 | 00003ff0 20 20 20 3b 20 47 65 74 20 62 6f 74 74 6f 6d 20 | ; Get bottom | 00004000 38 20 62 69 74 73 20 6f 66 20 63 6f 75 6e 74 2e |8 bits of count.| 00004010 0d 10 d6 40 20 4c 44 4d 46 44 20 20 20 28 73 70 |...@ LDMFD (sp| 00004020 29 21 2c 20 7b 70 63 7d 5e 20 20 20 20 20 20 20 |)!, {pc}^ | 00004030 20 20 20 20 20 20 20 20 20 20 20 3b 20 47 65 74 | ; Get| 00004040 20 52 65 74 75 72 6e 20 41 64 64 72 65 73 73 2e | Return Address.| 00004050 0d 10 e0 04 0d 10 ea 3b 2e 6c 45 6e 74 72 79 20 |.......;.lEntry | 00004060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b | ;| 00004080 20 43 6f 75 6e 74 20 65 6e 74 72 69 65 73 2e 0d | Count entries..| 00004090 10 f4 41 20 4c 44 52 20 20 20 20 20 72 53 69 7a |..A LDR rSiz| 000040a0 65 2c 20 5b 72 57 6f 72 6b 53 70 61 63 65 2c 20 |e, [rWorkSpace, | 000040b0 23 6f 53 69 7a 65 5d 20 20 20 3b 20 4c 6f 61 64 |#oSize] ; Load| 000040c0 20 73 69 7a 65 20 6f 66 20 62 75 66 66 65 72 2e | size of buffer.| 000040d0 0d 10 fe 43 20 53 55 42 20 20 20 20 20 72 43 6f |...C SUB rCo| 000040e0 75 6e 74 4c 2c 20 72 53 69 7a 65 2c 20 72 53 70 |untL, rSize, rSp| 000040f0 61 63 65 20 20 20 20 20 20 20 20 3b 20 45 6e 74 |ace ; Ent| 00004100 72 69 65 73 3d 20 53 69 7a 65 20 2d 20 53 70 61 |ries= Size - Spa| 00004110 63 65 2e 0d 11 08 34 20 4d 4f 56 20 20 20 20 20 |ce....4 MOV | 00004120 70 63 2c 20 6c 6e 20 20 20 20 20 20 20 20 20 20 |pc, ln | 00004130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 00004140 52 65 74 75 72 6e 2e 0d 11 12 04 0d 11 1c 3a 2e |Return........:.| 00004150 6c 50 75 72 67 65 20 20 20 20 20 20 20 20 20 20 |lPurge | 00004160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004170 20 20 20 20 20 20 3b 20 50 75 72 67 65 20 42 75 | ; Purge Bu| 00004180 66 66 65 72 2e 0d 11 26 29 20 4c 44 52 20 20 20 |ffer...&) LDR | 00004190 20 20 72 54 6d 70 2c 20 5b 72 57 6f 72 6b 53 70 | rTmp, [rWorkSp| 000041a0 61 63 65 2c 20 23 6f 45 73 63 61 70 65 5d 0d 11 |ace, #oEscape]..| 000041b0 30 4c 20 54 45 51 20 20 20 20 20 72 54 6d 70 2c |0L TEQ rTmp,| 000041c0 20 23 30 20 20 20 20 20 20 20 20 20 20 20 20 20 | #0 | 000041d0 20 20 20 20 20 20 20 20 20 3b 20 44 6f 20 6e 6f | ; Do no| 000041e0 74 20 66 6c 75 73 68 20 62 75 66 66 65 72 20 69 |t flush buffer i| 000041f0 66 20 76 65 63 74 6f 72 2e 2e 0d 11 31 48 20 4d |f vector....1H M| 00004200 4f 56 20 20 20 20 20 72 54 6d 70 2c 20 23 30 20 |OV rTmp, #0 | 00004210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004220 20 20 20 20 20 3b 20 2e 2e 63 61 6c 6c 65 64 20 | ; ..called | 00004230 62 79 20 65 73 63 61 70 65 20 68 61 6e 64 6c 65 |by escape handle| 00004240 72 21 0d 11 32 29 20 53 54 52 20 20 20 20 20 72 |r!..2) STR r| 00004250 54 6d 70 2c 20 5b 72 57 6f 72 6b 53 70 61 63 65 |Tmp, [rWorkSpace| 00004260 2c 20 23 6f 45 73 63 61 70 65 5d 0d 11 3a 48 20 |, #oEscape]..:H | 00004270 4c 44 4d 4e 45 46 44 20 28 73 70 29 21 2c 20 7b |LDMNEFD (sp)!, {| 00004280 70 63 7d 5e 20 20 20 20 20 20 20 20 20 20 20 20 |pc}^ | 00004290 20 20 20 20 20 20 3b 20 72 65 74 75 72 6e 20 69 | ; return i| 000042a0 66 20 45 73 63 61 70 65 20 43 6f 6e 64 69 74 69 |f Escape Conditi| 000042b0 6f 6e 2e 0d 11 4e 4a 20 4d 4f 56 20 20 20 20 20 |on...NJ MOV | 000042c0 72 54 6d 70 2c 20 23 6f 42 75 66 66 65 72 20 20 |rTmp, #oBuffer | 000042d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 000042e0 46 69 6e 64 20 61 64 64 72 65 73 73 20 6f 66 20 |Find address of | 000042f0 62 75 66 66 65 72 20 73 74 61 72 74 2e 0d 11 58 |buffer start...X| 00004300 4b 20 53 54 52 20 20 20 20 20 72 54 6d 70 2c 20 |K STR rTmp, | 00004310 5b 72 57 6f 72 6b 53 70 61 63 65 2c 20 23 6f 50 |[rWorkSpace, #oP| 00004320 6c 61 63 65 5d 20 20 20 3b 20 53 74 6f 72 65 20 |lace] ; Store | 00004330 74 68 69 73 20 69 6e 20 70 6c 61 63 65 20 74 6f |this in place to| 00004340 20 69 6e 73 65 72 74 2e 0d 11 62 49 20 53 54 52 | insert...bI STR| 00004350 20 20 20 20 20 72 54 6d 70 2c 20 5b 72 57 6f 72 | rTmp, [rWor| 00004360 6b 53 70 61 63 65 2c 20 23 6f 4c 6f 6f 6b 5d 20 |kSpace, #oLook] | 00004370 20 20 20 3b 20 53 74 6f 72 65 20 74 68 69 73 20 | ; Store this | 00004380 69 6e 20 70 6c 61 63 65 20 74 6f 20 6c 6f 6f 6b |in place to look| 00004390 2e 0d 11 6c 41 20 4c 44 52 20 20 20 20 20 72 54 |...lA LDR rT| 000043a0 6d 70 2c 20 5b 72 57 6f 72 6b 53 70 61 63 65 2c |mp, [rWorkSpace,| 000043b0 20 23 6f 53 69 7a 65 5d 20 20 20 20 3b 20 46 69 | #oSize] ; Fi| 000043c0 6e 64 20 53 69 7a 65 20 6f 66 20 62 75 66 66 65 |nd Size of buffe| 000043d0 72 2e 0d 11 76 4b 20 53 54 52 20 20 20 20 20 72 |r...vK STR r| 000043e0 54 6d 70 2c 20 5b 72 57 6f 72 6b 53 70 61 63 65 |Tmp, [rWorkSpace| 000043f0 2c 20 23 6f 53 70 61 63 65 5d 20 20 20 3b 20 53 |, #oSpace] ; S| 00004400 74 6f 72 65 20 74 68 69 73 20 69 6e 20 61 6d 6f |tore this in amo| 00004410 75 6e 74 20 6f 66 20 73 70 61 63 65 2e 0d 11 80 |unt of space....| 00004420 34 20 4c 44 4d 46 44 20 20 20 28 73 70 29 21 2c |4 LDMFD (sp)!,| 00004430 20 7b 70 63 7d 5e 20 20 20 20 20 20 20 20 20 20 | {pc}^ | 00004440 20 20 20 20 20 20 20 20 3b 20 52 65 74 75 72 6e | ; Return| 00004450 2e 0d 11 8a 05 5d 0d 11 94 07 3d 22 22 0d 11 9e |.....]....=""...| 00004460 0c dd 20 a4 63 6c 61 69 6d 0d 11 a8 2a ea 20 72 |.. .claim...*. r| 00004470 56 65 63 74 6f 72 2c 20 72 41 64 64 72 65 73 73 |Vector, rAddress| 00004480 2c 20 72 47 69 76 65 2c 20 72 57 6f 72 6b 53 70 |, rGive, rWorkSp| 00004490 61 63 65 0d 11 b2 27 72 56 65 63 74 6f 72 3d 20 |ace...'rVector= | 000044a0 30 20 3a 20 72 41 64 64 72 65 73 73 3d 20 31 20 |0 : rAddress= 1 | 000044b0 3a 20 72 47 69 76 65 3d 20 32 0d 11 bc 21 72 54 |: rGive= 2...!rT| 000044c0 6d 70 3d 20 72 56 65 63 74 6f 72 20 3a 20 72 57 |mp= rVector : rW| 000044d0 6f 72 6b 53 70 61 63 65 3d 20 35 0d 11 c6 0e 5b |orkSpace= 5....[| 000044e0 20 4f 50 54 20 70 61 73 73 0d 11 d0 27 3b 20 45 | OPT pass...'; E| 000044f0 6e 74 72 79 20 2d 20 72 35 20 2d 20 70 6f 69 6e |ntry - r5 - poin| 00004500 74 65 72 20 74 6f 20 77 6f 72 6b 73 70 61 63 65 |ter to workspace| 00004510 0d 11 da 3f 3b 20 43 6c 61 69 6d 20 2d 20 43 6f |...?; Claim - Co| 00004520 64 65 20 74 6f 20 43 6c 61 69 6d 20 74 68 65 20 |de to Claim the | 00004530 76 65 63 74 6f 72 73 2c 20 69 6e 69 74 69 61 6c |vectors, initial| 00004540 69 73 65 20 74 68 65 20 62 75 66 66 65 72 2e 0d |ise the buffer..| 00004550 11 e4 12 2e 6c 43 6c 61 69 6d 5f 56 65 63 74 6f |....lClaim_Vecto| 00004560 72 0d 11 ee 29 20 53 54 4d 46 44 20 20 20 28 73 |r...) STMFD (s| 00004570 70 29 21 2c 20 7b 72 41 64 64 72 65 73 73 2c 20 |p)!, {rAddress, | 00004580 72 47 69 76 65 2c 20 6c 6e 7d 0d 11 f8 13 20 4d |rGive, ln}.... M| 00004590 4f 56 20 20 20 20 20 72 30 2c 20 23 39 0d 12 02 |OV r0, #9...| 000045a0 18 20 41 44 52 20 20 20 20 20 72 31 2c 20 6c 45 |. ADR r1, lE| 000045b0 73 63 61 70 65 0d 12 0c 1b 20 4d 4f 56 20 20 20 |scape.... MOV | 000045c0 20 20 72 32 2c 20 72 57 6f 72 6b 53 70 61 63 65 | r2, rWorkSpace| 000045d0 0d 12 16 42 20 53 57 49 20 20 20 20 20 22 58 4f |...B SWI "XO| 000045e0 53 5f 43 68 61 6e 67 65 45 6e 76 69 72 6f 6e 6d |S_ChangeEnvironm| 000045f0 65 6e 74 22 20 20 20 20 20 20 20 3b 20 43 6c 61 |ent" ; Cla| 00004600 69 6d 20 65 73 63 61 70 65 20 68 61 6e 64 6c 65 |im escape handle| 00004610 72 2e 0d 12 20 29 20 4c 44 4d 56 53 46 44 20 28 |r... ) LDMVSFD (| 00004620 73 70 29 21 2c 20 7b 72 41 64 64 72 65 73 73 2c |sp)!, {rAddress,| 00004630 20 72 47 69 76 65 2c 20 70 63 7d 0d 12 2a 2b 20 | rGive, pc}..*+ | 00004640 53 54 52 20 20 20 20 20 72 31 2c 20 5b 72 57 6f |STR r1, [rWo| 00004650 72 6b 53 70 61 63 65 2c 20 23 6f 4f 6c 64 41 64 |rkSpace, #oOldAd| 00004660 64 72 65 73 73 5d 0d 12 34 46 20 53 54 52 20 20 |dress]..4F STR | 00004670 20 20 20 72 32 2c 20 5b 72 57 6f 72 6b 53 70 61 | r2, [rWorkSpa| 00004680 63 65 2c 20 23 6f 4f 6c 64 31 32 5d 20 20 20 20 |ce, #oOld12] | 00004690 20 3b 20 53 74 6f 72 65 20 6f 6c 64 20 65 73 63 | ; Store old esc| 000046a0 61 70 65 20 68 61 6e 64 6c 65 72 2e 0d 12 3e 1d |ape handler...>.| 000046b0 20 4d 4f 56 20 20 20 20 20 72 56 65 63 74 6f 72 | MOV rVector| 000046c0 2c 20 23 69 49 6e 73 4e 6f 0d 12 48 1c 20 41 44 |, #iInsNo..H. AD| 000046d0 52 20 20 20 20 20 72 41 64 64 72 65 73 73 2c 20 |R rAddress, | 000046e0 6c 49 6e 73 56 0d 12 52 1e 20 4d 4f 56 20 20 20 |lInsV..R. MOV | 000046f0 20 20 72 47 69 76 65 2c 20 72 57 6f 72 6b 53 70 | rGive, rWorkSp| 00004700 61 63 65 0d 12 5c 38 20 53 57 49 20 20 20 20 20 |ace..\8 SWI | 00004710 22 58 4f 53 5f 43 6c 61 69 6d 22 20 20 20 20 20 |"XOS_Claim" | 00004720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 00004730 43 6c 61 69 6d 20 49 6e 73 56 2e 0d 12 66 29 20 |Claim InsV...f) | 00004740 4c 44 4d 56 53 46 44 20 28 73 70 29 21 2c 20 7b |LDMVSFD (sp)!, {| 00004750 72 41 64 64 72 65 73 73 2c 20 72 47 69 76 65 2c |rAddress, rGive,| 00004760 20 70 63 7d 0d 12 70 1d 20 4d 4f 56 20 20 20 20 | pc}..p. MOV | 00004770 20 72 56 65 63 74 6f 72 2c 20 23 69 52 65 6d 4e | rVector, #iRemN| 00004780 6f 0d 12 7a 1c 20 41 44 52 20 20 20 20 20 72 41 |o..z. ADR rA| 00004790 64 64 72 65 73 73 2c 20 6c 52 65 6d 56 0d 12 84 |ddress, lRemV...| 000047a0 1e 20 4d 4f 56 20 20 20 20 20 72 47 69 76 65 2c |. MOV rGive,| 000047b0 20 72 57 6f 72 6b 53 70 61 63 65 0d 12 8e 38 20 | rWorkSpace...8 | 000047c0 53 57 49 20 20 20 20 20 22 58 4f 53 5f 43 6c 61 |SWI "XOS_Cla| 000047d0 69 6d 22 20 20 20 20 20 20 20 20 20 20 20 20 20 |im" | 000047e0 20 20 20 20 20 20 3b 20 43 6c 61 69 6d 20 52 65 | ; Claim Re| 000047f0 6d 56 2e 0d 12 98 29 20 4c 44 4d 56 53 46 44 20 |mV....) LDMVSFD | 00004800 28 73 70 29 21 2c 20 7b 72 41 64 64 72 65 73 73 |(sp)!, {rAddress| 00004810 2c 20 72 47 69 76 65 2c 20 70 63 7d 0d 12 a2 1d |, rGive, pc}....| 00004820 20 4d 4f 56 20 20 20 20 20 72 56 65 63 74 6f 72 | MOV rVector| 00004830 2c 20 23 69 43 6e 70 4e 6f 0d 12 ac 1c 20 41 44 |, #iCnpNo.... AD| 00004840 52 20 20 20 20 20 72 41 64 64 72 65 73 73 2c 20 |R rAddress, | 00004850 6c 43 6e 70 56 0d 12 b6 1e 20 4d 4f 56 20 20 20 |lCnpV.... MOV | 00004860 20 20 72 47 69 76 65 2c 20 72 57 6f 72 6b 53 70 | rGive, rWorkSp| 00004870 61 63 65 0d 12 c0 38 20 53 57 49 20 20 20 20 20 |ace...8 SWI | 00004880 22 58 4f 53 5f 43 6c 61 69 6d 22 20 20 20 20 20 |"XOS_Claim" | 00004890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 | ; | 000048a0 43 6c 61 69 6d 20 43 6e 70 56 2e 0d 12 ca 29 20 |Claim CnpV....) | 000048b0 4c 44 4d 46 44 20 20 20 28 73 70 29 21 2c 20 7b |LDMFD (sp)!, {| 000048c0 72 41 64 64 72 65 73 73 2c 20 72 47 69 76 65 2c |rAddress, rGive,| 000048d0 20 70 63 7d 0d 12 d4 43 3b 20 52 65 73 74 6f 72 | pc}...C; Restor| 000048e0 65 20 2d 20 43 6f 64 65 20 74 6f 20 72 65 73 74 |e - Code to rest| 000048f0 6f 72 65 20 74 68 65 20 76 65 63 74 6f 72 73 20 |ore the vectors | 00004900 74 6f 20 75 73 65 20 70 72 65 76 69 6f 75 73 20 |to use previous | 00004910 62 75 66 66 65 72 2e 0d 12 de 14 2e 6c 52 65 73 |buffer......lRes| 00004920 74 6f 72 65 5f 56 65 63 74 6f 72 0d 12 e8 29 20 |tore_Vector...) | 00004930 53 54 4d 46 44 20 20 20 28 73 70 29 21 2c 20 7b |STMFD (sp)!, {| 00004940 72 41 64 64 72 65 73 73 2c 20 72 47 69 76 65 2c |rAddress, rGive,| 00004950 20 6c 6e 7d 0d 12 f2 13 20 4d 4f 56 20 20 20 20 | ln}.... MOV | 00004960 20 72 30 2c 20 23 39 0d 12 fc 2b 20 4c 44 52 20 | r0, #9...+ LDR | 00004970 20 20 20 20 72 31 2c 20 5b 72 57 6f 72 6b 53 70 | r1, [rWorkSp| 00004980 61 63 65 2c 20 23 6f 4f 6c 64 41 64 64 72 65 73 |ace, #oOldAddres| 00004990 73 5d 0d 13 06 26 20 4c 44 52 20 20 20 20 20 72 |s]...& LDR r| 000049a0 32 2c 20 5b 72 57 6f 72 6b 53 70 61 63 65 2c 20 |2, [rWorkSpace, | 000049b0 23 6f 4f 6c 64 31 32 5d 0d 13 10 44 20 53 57 49 |#oOld12]...D SWI| 000049c0 20 20 20 20 20 22 58 4f 53 5f 43 68 61 6e 67 65 | "XOS_Change| 000049d0 45 6e 76 69 72 6f 6e 6d 65 6e 74 22 20 20 20 20 |Environment" | 000049e0 20 20 20 3b 20 52 65 73 74 6f 72 65 20 65 73 63 | ; Restore esc| 000049f0 61 70 65 20 68 61 6e 64 6c 65 72 2e 0d 13 1a 29 |ape handler....)| 00004a00 20 4c 44 4d 56 53 46 44 20 28 73 70 29 21 2c 20 | LDMVSFD (sp)!, | 00004a10 7b 72 41 64 64 72 65 73 73 2c 20 72 47 69 76 65 |{rAddress, rGive| 00004a20 2c 20 70 63 7d 0d 13 24 1d 20 4d 4f 56 20 20 20 |, pc}..$. MOV | 00004a30 20 20 72 56 65 63 74 6f 72 2c 20 23 69 49 6e 73 | rVector, #iIns| 00004a40 4e 6f 0d 13 2e 1c 20 41 44 52 20 20 20 20 20 72 |No.... ADR r| 00004a50 41 64 64 72 65 73 73 2c 20 6c 49 6e 73 56 0d 13 |Address, lInsV..| 00004a60 38 1e 20 4d 4f 56 20 20 20 20 20 72 47 69 76 65 |8. MOV rGive| 00004a70 2c 20 72 57 6f 72 6b 53 70 61 63 65 0d 13 42 3a |, rWorkSpace..B:| 00004a80 20 53 57 49 20 20 20 20 20 22 58 4f 53 5f 52 65 | SWI "XOS_Re| 00004a90 6c 65 61 73 65 22 20 20 20 20 20 20 20 20 20 20 |lease" | 00004aa0 20 20 20 20 20 20 20 3b 20 52 65 6c 65 61 73 65 | ; Release| 00004ab0 20 49 6e 73 56 2e 0d 13 4c 29 20 4c 44 4d 56 53 | InsV...L) LDMVS| 00004ac0 46 44 20 28 73 70 29 21 2c 20 7b 72 41 64 64 72 |FD (sp)!, {rAddr| 00004ad0 65 73 73 2c 20 72 47 69 76 65 2c 20 70 63 7d 0d |ess, rGive, pc}.| 00004ae0 13 56 1d 20 4d 4f 56 20 20 20 20 20 72 56 65 63 |.V. MOV rVec| 00004af0 74 6f 72 2c 20 23 69 52 65 6d 4e 6f 0d 13 60 1c |tor, #iRemNo..`.| 00004b00 20 41 44 52 20 20 20 20 20 72 41 64 64 72 65 73 | ADR rAddres| 00004b10 73 2c 20 6c 52 65 6d 56 0d 13 6a 1e 20 4d 4f 56 |s, lRemV..j. MOV| 00004b20 20 20 20 20 20 72 47 69 76 65 2c 20 72 57 6f 72 | rGive, rWor| 00004b30 6b 53 70 61 63 65 0d 13 74 3a 20 53 57 49 20 20 |kSpace..t: SWI | 00004b40 20 20 20 22 58 4f 53 5f 52 65 6c 65 61 73 65 22 | "XOS_Release"| 00004b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00004b60 20 3b 20 52 65 6c 65 61 73 65 20 52 65 6d 56 2e | ; Release RemV.| 00004b70 0d 13 7e 29 20 4c 44 4d 56 53 46 44 20 28 73 70 |..~) LDMVSFD (sp| 00004b80 29 21 2c 20 7b 72 41 64 64 72 65 73 73 2c 20 72 |)!, {rAddress, r| 00004b90 47 69 76 65 2c 20 70 63 7d 0d 13 88 1d 20 4d 4f |Give, pc}.... MO| 00004ba0 56 20 20 20 20 20 72 56 65 63 74 6f 72 2c 20 23 |V rVector, #| 00004bb0 69 43 6e 70 4e 6f 0d 13 92 1c 20 41 44 52 20 20 |iCnpNo.... ADR | 00004bc0 20 20 20 72 41 64 64 72 65 73 73 2c 20 6c 43 6e | rAddress, lCn| 00004bd0 70 56 0d 13 9c 1e 20 4d 4f 56 20 20 20 20 20 72 |pV.... MOV r| 00004be0 47 69 76 65 2c 20 72 57 6f 72 6b 53 70 61 63 65 |Give, rWorkSpace| 00004bf0 0d 13 a6 3a 20 53 57 49 20 20 20 20 20 22 58 4f |...: SWI "XO| 00004c00 53 5f 52 65 6c 65 61 73 65 22 20 20 20 20 20 20 |S_Release" | 00004c10 20 20 20 20 20 20 20 20 20 20 20 3b 20 52 65 6c | ; Rel| 00004c20 65 61 73 65 20 43 6e 70 56 2e 0d 13 b0 29 20 4c |ease CnpV....) L| 00004c30 44 4d 46 44 20 20 20 28 73 70 29 21 2c 20 7b 72 |DMFD (sp)!, {r| 00004c40 41 64 64 72 65 73 73 2c 20 72 47 69 76 65 2c 20 |Address, rGive, | 00004c50 70 63 7d 0d 13 ba 05 5d 0d 13 c4 07 3d 22 22 0d |pc}....]....="".| 00004c60 ff |.| 00004c61