home *** CD-ROM | disk | FTP | other *** search
/ norge.freeshell.org (192.94.73.8) / 192.94.73.8.tar / 192.94.73.8 / pub / computers / pcjr / screen / ZANSI.LZH / ZANSI_I.ASM < prev    next >
Assembly Source File  |  1986-11-29  |  3KB  |  85 lines

  1. ;------ zansi_i.asm ----------------------------------------------
  2. ; Zephyr ANSI terminal driver.
  3. ;    Copyright (C) 1986, Thomas Hanlin III, Springfield VA.
  4. ;    Based on original code for NANSI by Daniel Kegel, Pasadena, CA.
  5. ;------------------------------------------------------------------------
  6. ; Contains code only needed at initialization time.
  7.  
  8.  
  9.         ; to zansi.asm
  10.         public  dosfn0
  11.  
  12.         ; from zansi.asm
  13.         extrn   break_handler:near
  14.         extrn   int_29:near
  15.         extrn   req_ptr:dword
  16.  
  17.         ; from zansi_p.asm
  18.         extrn   param_buffer:word       ; adr of first byte free for params
  19.         extrn   param_end:word          ; adr of last byte used for params
  20.         extrn   redef_end:word          ; adr of last used byte for redefs
  21.  
  22.  
  23. code    segment byte public 'CODE'
  24.         assume  cs:code, ds:code
  25.  
  26. ;-------- dos function # 0 : init driver ---------------------
  27. ; Initializes device driver interrupts and buffers, then
  28. ; passes ending address of the device driver to DOS.
  29. ; Since this code is only used once, the buffer can be set up on top
  30. ; of it to save RAM.
  31.  
  32. dosfn0  proc    near
  33.         ; Install BIOS keyboard break handler.
  34.         xor     ax,ax
  35.         mov     ds,ax
  36.         mov     bx,6Ch
  37.         mov     word ptr [BX],offset break_handler
  38.         mov     [BX+02],cs
  39.         ; Install INT 29 quick putchar.
  40.         mov     bx,0a4h
  41.         mov     word ptr [bx],offset int_29
  42.         mov     [bx+2],cs
  43.  
  44.         push    cs
  45.         pop     ds
  46.         push    cs
  47.         pop     es                      ; es=cs so we can use stosb
  48.         cld                             ; make sure stosb increments di
  49.  
  50.         ; Calculate addresses of start and end of parameter/redef buffer.
  51.         ; The buffer occupies the same area of memory as this code!
  52.         ; ANSI parameters are accumulated at the lower end, and
  53.         ; keyboard redefinitions are stored at the upper end; the variable
  54.         ; param_end is the last byte used by params (changes as redefs added);
  55.         ; redef_end is the last word used by redefinitions.
  56.         mov     di,offset dosfn0
  57.         mov     param_buffer,di
  58.         add     di,512
  59.         mov     param_end,di    ; addr of last byte in free area
  60.         inc     di
  61.  
  62.         ; Build the default redefinition table:
  63.         ;       control-printscreen -> control-P
  64.         ; (Must be careful not to overwrite ourselves here!)
  65.         mov     al,16           ; control P
  66.         stosb
  67.         mov     ax,7200h        ; control-printscreen
  68.         stosw
  69.         mov     ax,1            ; length field
  70.         mov     redef_end, di   ; address of last used word in table
  71.         stosw
  72.  
  73.         xor     ax,ax
  74.         ; Return ending address of this device driver, with status in AX.
  75.         lds     si,req_ptr
  76.         mov     14[si],di
  77.         mov     16[si],cs
  78.         ; Return exit status in ax.
  79.         ret
  80.  
  81. dosfn0  endp
  82.  
  83. code    ends
  84.         end                             ; of zansi_i.asm
  85.