home *** CD-ROM | disk | FTP | other *** search
- PAGE ,132
- TITLE TYPEAHEAD - Expands type ahead buffer to 128 characters
- SUBTTL Clifford J. Vander Yacht
- ;
- ; From PC WORLD Vol 6 No 4
- ;
- ; Assemble with MASM
- ; Link
- ; Exe2Bin TYPEAHED.EXE TYPEAHED.SYS
- ;
- ; Place in CONFIG.SYS
- ; Reboot system
- ;
- ;
- Chars EQU 128
- Bytes EQU Chars*2
- ;
- IOPacket STRUC
- IO_CMDLEN DB ?
- IO_UNIT DB ?
- IO_CMD DB ?
- IO_STATUS DW ?
- DB 8 DUP(?)
- IO_MEDIA DB ?
- IO_ADDRESS DW ?
- DW ?
- IO_COUNT DW ?
- IO_START DW ?
- IOPacket ENDS
- ;
- ;
- DATA SEGMENT AT 40H
- ORG 001AH
- BUFFER_HEAD DW ?
- BUFFER_TAIL DW ?
- ORG 0080H
- BUFFER_START DW ?
- BUFFER_END DW ?
- DATA ENDS
- ;
- ;
- CSEG SEGMENT
- ASSUME CS:CSEG, DS:NOTHING, ES:NOTHING
- ORG 0000H ;Device drivers origin
- ;
- ;
- Prefix DD -1
- DW 8000H
- DW Strat
- DW Intr
- DB 'TYPEAHD' ;hex 02 so you can't access
- ; the device by accident
- ;
- NewBuff EQU $ ;Buffer start
- EndBuff EQU $+Bytes ;Buffer end
- ;
- ; END OF STAY RESIDENT PORTION
- ;
- THMess DB 'Too high in memory! No ',07H
- Message DB 'TYPEAHED installed',0DH,0AH,'$'
- Packet DD 0 ;Request packet address
- ;
- ; Initialization / Installation routines
- ;
- Strat PROC FAR
- mov WORD PTR Packet,BX ;Save Packet info
- mov WORD PTR Packet+2,ES
- RET
- ;
- ;
- Intr:
- push AX
- push BX
- push CX
- push DX
- push DS
- ;
- push CS
- pop AX ;From this segment address,
- sub AX,SEG DATA ; subtract the DATA address
- add AX,(Endbuff-Prefix+0FFH)/16 ;and add buff size
- push AX
- cmp AX,1000H ;Within 64K segment?
- JNB TooHigh
- sub AX,(Endbuff-Prefix+0FFH)/16 ;Get segment diff
- mov CL,4 ;convert to byte difference
- SHL AX,CL
- mov BX,SEG DATA ;Change info in DATA segment
- mov DS,BX
- ASSUME DS:DATA
- add AX,OFFSET NewBuff+0FFH ;offset of beginning
- and AX,0FF00H ;drop last byte(DOS2.XX fix??)
- mov BUFFER_HEAD,AX ;put into buffer pointers
- mov BUFFER_TAIL,AX
- mov BUFFER_START,AX ;and buffer addresses
- add AX,Bytes
- mov BUFFER_END,AX ; for buffer end address
- mov DX,OFFSET Message ;OK
- JMP SHORT Installed
- TooHigh:
- mov DX,OFFSET THMess ;too high message
- Installed:
- push CS
- pop DS
- ASSUME DS:CSEG
- mov AH,9
- INT 21H
- pop AX ;From highest segment
- and AX,0FFF0H ; rounded down
- push CS
- pop BX ; and this segment address
- sub BX,SEG DATA ; less the DATA segment
- sub AX,BX ; find the paragraphs used
- mov CL,4 ;Convert to bytes
- shl AX,CL ; to save for buffer
- lds BX,DWORD PTR Packet
- mov [BX+IO_ADDRESS],AX ;Set memory request
- push CS
- pop AX
- mov [BX+IO_ADDRESS+2],AX
- mov [BX+IO_STATUS],0100H ;Set done bits
- ;
- pop DS
- pop DX
- pop CX
- pop BX
- pop AX
- RET
- ;
- Strat ENDP
- ;
- ;
- CSEG ENDS
- END