29.12.2012 Views

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 ...

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!