10
20
30 :
40 OSBYTE=&FFF4
50 mcode%=TOP+&1800:HIMEM=mcode%
60 FOR P=0 TO 1
70 O%=mcode%:P%=&8000
80 [OPT P*3+4
90 BRK:BRK:BRK
100 JMP serv
110 EQUB &C2
120 EQUB copy-&8000
130 EQUB 10
140 EQUS "Error Trap":BRK:EQUS "0.00 (13 Aug 1987)"
150 .copy
160 BRK:EQUS "(C)J.G.Harston":BRK
170 \
180 .serv
190 CMP #6:BEQ errors:RTS
200 \
210 .errors
220 TYA:PHA
230 LDA &FD:STA &F6
240 LDA &FE:STA &F7
250 LDX #0:LDY #255:LDA #186:JSR OSBYTE
260 TXA:TAY:JSR &FFB9
270 \ A has error number
280 LDY #0:STA &A8
290 LDA #table AND 255:STA &A9
300 LDA #table DIV 256:STA &AA
310 .loop
320 LDA (&A9),Y:BEQ exit
330 CMP &A8:BEQ found
340 .loop2
350 INY:LDA (&A9),Y:BNE loop2
360 TYA:SEC:ADC &A9:STA &A9
370 LDA #0:ADC &AA:STA &AA
380 LDY #0:BEQ loop
390 JMP exit
400 .found
410 LDY #1
420 .loop3
430 LDA (&A9),Y:STA &101,Y
440 INY:CMP #0:BNE loop3
450 LDA #1:STA &FD:STA &FE
460 .exit
470 PLA:TAY:LDX &F4:LDA #6:RTS
480 .table
490 EQUB 17:EQUS "That was the ESCAPE key!":BRK
500 EQUB 214:EQUS "You must be crazy if you're trying to find that file":BRK
510 EQUB 251:EQUS "16 function keys not enough for you?":BRK
520 EQUB 254:EQUS "Check your spelling and parameters":BRK
530 EQUB 250:EQUS "Hold on, let me finish with the key first":BRK
540 EQUB 198:EQUS "You've no more disk space left!":BRK
550 EQUB 4:EQUS "Mistake - Check that spelling":BRK
560 EQUB 21:EQUS "-ve root - you know they are impossible":BRK
570 EQUB 25:EQUS "Bad MODE - don't do it in a PROC, or when there's no memory":BRK
580 EQUB 26:EQUS "No such variable - You probably spelt it wrong":BRK
590 EQUB 247:EQUS "Sigma OS 4.00":BRK
600 :
610 :
620 BRK
630 ]NEXT
640 PRINT"SAVE ROM ";~mcode%;" ";~O%+1