home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame / HallofFameCDROM.cdr / open / typeahed.lzh / TYPEAHED.ASM next >
Assembly Source File  |  1988-04-04  |  4KB  |  135 lines

  1. PAGE ,132
  2. TITLE  TYPEAHEAD - Expands type ahead buffer to 128 characters
  3. SUBTTL Clifford J. Vander Yacht
  4. ;
  5. ;             From PC WORLD Vol 6 No 4
  6. ;
  7. ;             Assemble with MASM
  8. ;             Link
  9. ;             Exe2Bin TYPEAHED.EXE TYPEAHED.SYS
  10. ;
  11. ;             Place in CONFIG.SYS
  12. ;             Reboot system
  13. ;
  14. ;
  15. Chars         EQU       128
  16. Bytes         EQU       Chars*2
  17. ;
  18. IOPacket      STRUC
  19. IO_CMDLEN     DB        ?
  20. IO_UNIT       DB        ?
  21. IO_CMD        DB        ?
  22. IO_STATUS     DW        ?
  23.               DB        8 DUP(?)
  24. IO_MEDIA      DB        ?
  25. IO_ADDRESS    DW        ?
  26.               DW        ?
  27. IO_COUNT      DW        ?
  28. IO_START      DW        ?
  29. IOPacket      ENDS
  30. ;
  31. ;
  32. DATA          SEGMENT AT 40H
  33.               ORG       001AH
  34. BUFFER_HEAD   DW        ?
  35. BUFFER_TAIL   DW        ?
  36.               ORG       0080H
  37. BUFFER_START  DW        ?
  38. BUFFER_END    DW        ?
  39. DATA          ENDS
  40. ;
  41. ;
  42. CSEG          SEGMENT
  43.               ASSUME    CS:CSEG, DS:NOTHING, ES:NOTHING
  44.               ORG       0000H                    ;Device drivers origin
  45. ;
  46. ;
  47. Prefix        DD        -1
  48.               DW        8000H
  49.               DW        Strat
  50.               DW        Intr
  51.               DB        'TYPEAHD'     ;hex 02 so you can't access
  52. ;                                      the device by accident
  53. ;
  54. NewBuff       EQU       $                        ;Buffer start
  55. EndBuff       EQU       $+Bytes                  ;Buffer end
  56. ;
  57. ;             END OF STAY RESIDENT PORTION
  58. ;
  59. THMess        DB        'Too high in memory! No ',07H
  60. Message       DB        'TYPEAHED installed',0DH,0AH,'$'
  61. Packet        DD        0                        ;Request packet address
  62. ;
  63. ;             Initialization / Installation routines
  64. ;
  65. Strat         PROC      FAR
  66.               mov       WORD PTR Packet,BX       ;Save Packet info
  67.               mov       WORD PTR Packet+2,ES
  68.               RET
  69. ;
  70. ;
  71. Intr:
  72.               push      AX
  73.               push      BX
  74.               push      CX
  75.               push      DX
  76.               push      DS
  77. ;
  78.               push      CS
  79.               pop       AX             ;From this segment address,
  80.               sub       AX,SEG DATA    ;  subtract the DATA address
  81.               add       AX,(Endbuff-Prefix+0FFH)/16 ;and add buff size
  82.               push      AX
  83.               cmp       AX,1000H       ;Within 64K segment?
  84.               JNB       TooHigh
  85.               sub       AX,(Endbuff-Prefix+0FFH)/16 ;Get segment diff
  86.               mov       CL,4           ;convert to byte difference
  87.               SHL       AX,CL
  88.               mov       BX,SEG DATA    ;Change info in DATA segment
  89.               mov       DS,BX
  90.               ASSUME    DS:DATA
  91.               add       AX,OFFSET NewBuff+0FFH   ;offset of beginning
  92.               and       AX,0FF00H      ;drop last byte(DOS2.XX fix??)
  93.               mov       BUFFER_HEAD,AX ;put into buffer pointers
  94.               mov       BUFFER_TAIL,AX
  95.               mov       BUFFER_START,AX     ;and buffer addresses
  96.               add       AX,Bytes
  97.               mov       BUFFER_END,AX       ; for buffer end address
  98.               mov       DX,OFFSET Message   ;OK
  99.               JMP       SHORT Installed
  100. TooHigh:
  101.               mov       DX,OFFSET THMess    ;too high message
  102. Installed:
  103.               push      CS
  104.               pop       DS
  105.               ASSUME    DS:CSEG
  106.               mov       AH,9
  107.               INT       21H
  108.               pop       AX             ;From highest segment
  109.               and       AX,0FFF0H      ; rounded down
  110.               push      CS
  111.               pop       BX             ; and this segment address
  112.               sub       BX,SEG DATA    ; less the DATA segment
  113.               sub       AX,BX          ; find the paragraphs used
  114.               mov       CL,4           ;Convert to bytes
  115.               shl       AX,CL          ; to save for buffer
  116.               lds       BX,DWORD PTR Packet
  117.               mov       [BX+IO_ADDRESS],AX  ;Set memory request
  118.               push      CS
  119.               pop       AX
  120.               mov       [BX+IO_ADDRESS+2],AX
  121.               mov       [BX+IO_STATUS],0100H     ;Set done bits
  122. ;
  123.               pop       DS
  124.               pop       DX
  125.               pop       CX
  126.               pop       BX
  127.               pop       AX
  128.               RET
  129. ;
  130. Strat         ENDP
  131. ;
  132. ;
  133. CSEG          ENDS
  134.               END
  135.