The Programmer's Guide to TRSDOS Version 6 - Tim Mann's Home ...
The Programmer's Guide to TRSDOS Version 6 - Tim Mann's Home ...
The Programmer's Guide to TRSDOS Version 6 - Tim Mann's Home ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
EX DE,HL ;Destination address <strong>to</strong> DE<br />
LD HL,MODDCB-MODEND<br />
ADD HL,DE ;Relocate one address<br />
LD (RX01),HL<br />
LD HL,MODEND ;Last byte of module<br />
LD BC,LENGTH ;Length of filter<br />
LDDR<br />
EX DE,HL ;Move new HIGH$ <strong>to</strong> HL<br />
LD A,@HIGH$ ;Set new HIGH$ in<strong>to</strong> the system<br />
RST 40<br />
INC HL ;Bump <strong>to</strong> filter entry<br />
LD (IX+0),40H.OR.7 ;Stuff TYPE byte<br />
LD (IX+1),L<br />
LD (IX+2),H ;Install addr in<strong>to</strong> DCB<br />
LD HL,0 ;Successful...<br />
RET<br />
;<br />
PRMERR LD HL,PRMERR$<br />
DB 0DDH<br />
VIASET LD HL,VIASET$<br />
DB 0DDH<br />
NOMEM LD HL,NOMEM$<br />
LD A,@LOGOT<br />
RST 40<br />
LD HL,-1 ;Indicate extended error<br />
RET<br />
;<br />
HELLO$ DB LF,'TRAP filter <strong>to</strong> trap a character code',CR<br />
PRMERR$ DB 'Bad parameters!',CR<br />
NOMEM$ DB 'High memory is not available!',CR<br />
VIASET$ DB 'Must install via SET!',CR<br />
;<br />
PRMTBL$ DB 80H<br />
DB 80H.OR.20H.OR.10H.OR.4<br />
DB 'CHAR' ;Parameter word<br />
CRESP DB 0 ;Response byte<br />
DW CPARM+1 ;S<strong>to</strong>rage address<br />
NOP ;Table end indica<strong>to</strong>r<br />
;<br />
;*****<br />
; Actual FILTER routine <strong>to</strong> shift up <strong>to</strong> HIGH$<br />
;*****<br />
TRAP JR START<br />
OLDHI DW $-$ ;HIGH$ before filtering<br />
DB MODDCB-TRAP-5<br />
DB 'TRAP'<br />
MODDCB DW $-$ ;Loaded with DCB pointer<br />
DW 0<br />
;<br />
START JR NZ,OUTP1 ;Go if not PUT<br />
LD A,C<br />
TRAPBYT SUB 0 ;Space for trap char<br />
RET Z ;Back with Z & A=0 if trapped<br />
OUTP1 PUSH IX ;Save current pointer<br />
LD IX,(MODDCB) ;P/u this module's DCB<br />
RX01 EQU $-2<br />
LD A,@CHNIO ;Chain <strong>to</strong> the next<br />
RST 40<br />
POP IX<br />
MODEND RET<br />
LENGTH EQU $-TRAP<br />
END BEGIN<br />
8-37