home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / trl14db.zip / TRLSRC.EXE / TR_DBASE.ASM < prev    next >
Assembly Source File  |  1990-10-22  |  4KB  |  212 lines

  1. ; trdbase.asm
  2. ;
  3. ; by Alastair Dallas, Ralph Davis, Tom Rettig, and Leonard Zerman
  4. ;
  5. ; Placed in the public domain by Tom Rettig Associates, 10/22/1990.
  6. ;
  7.  
  8.    public   doit          ; execute function call
  9.    public   getvec        ; fetch INT vector
  10.    public   pv_int        ; service trpass interrupt
  11.    public   setvec        ; set INT vector
  12.    public   tr_int        ; service trlib interrupt
  13.  
  14.    ; C functions defined in trlib.c:
  15.    extrn   callfunc:far   ; process trlib call
  16.    extrn   trpass:far     ; process trpass call
  17.    extrn   trret:far      ; process trret call
  18.  
  19.    ; data defined in trlib.c:
  20.    extrn   pstk:byte
  21.    extrn   pcount:word
  22.  
  23.    ; Lattice environmental variables (defined in Lattice's c.asm):
  24.    extrn   _mneed:dword   ; minimum heap size (redefined in trlib.c)
  25.    extrn   _psp:dword     ; address of PSP
  26.    extrn   _tsize:word    ; total size in paragraphs
  27.  
  28.  
  29. DOS   equ   21h   ; DOS interrupt vector
  30.  
  31.  
  32. dgroup  group   dataseg
  33. dataseg segment word public 'data'
  34.  
  35. reg_ax   dw   ?
  36. reg_bx   dw   ?
  37. reg_cx   dw   ?
  38. reg_dx   dw   ?
  39. reg_bp   dw   ?
  40. reg_sp   dw   ?
  41. reg_si   dw   ?
  42. reg_di   dw   ?
  43. reg_ds   dw   ?
  44. reg_es   dw   ?
  45. reg_ss   dw   ?
  46.  
  47. dataseg ends
  48.  
  49.  
  50. codeseg segment byte
  51.         assume  cs:codeseg,ds:dgroup
  52.  
  53.  
  54. ;------------------------------------------------
  55. doit   proc   far
  56. ; execute function call
  57. ; entry: <sp+4> = function address
  58.  
  59.    ; swap ret addr and func arg:
  60.    ; stack on entry:   revised stack:
  61.    ;   func.seg  (ax)     ret.seg  (cx)
  62.    ;   func.off  (bx)     ret.off  (dx)
  63.    ;   ret.seg   (cx)     func.seg (ax)
  64.    ;   ret.off   (dx)     func.off (bx)
  65.     
  66.    pop    dx
  67.    pop    cx
  68.    pop    bx
  69.    pop    ax
  70.  
  71.    push   cx
  72.    push   dx
  73.    push   ax
  74.    push   bx
  75.    
  76.    ret
  77.  
  78. doit   endp
  79.  
  80.  
  81. ;------------------------------------------------
  82. getvec   proc   far
  83. ; get INT vector
  84. ; entry: <sp+4> = vector number
  85. ; exit: vector in AX:BX
  86.  
  87.    push   bp
  88.    mov    bp,sp
  89.    
  90.    mov    al,[bp+6]   ; vector number
  91.    mov    ah,35h      ; get vector
  92.    int    DOS         ; vector in es:bx
  93.  
  94.    mov    ax,bx
  95.    mov    bx,es
  96.  
  97.    pop    bp
  98.    ret
  99.  
  100. getvec   endp
  101.  
  102.  
  103. ;------------------------------------------------
  104. pv_int   proc   far
  105. ; service trpass interrupt
  106. ; entry: DS:BX = variable address
  107. ;        AL = 0 for parameter variable, AL = 1 for return variable
  108.  
  109.    push   ds
  110.    push   bx
  111.  
  112.    mov    bx,dgroup
  113.    mov    ds,bx
  114.  
  115.    and    ax,ax
  116.    jz     pv1
  117.  
  118.    call   trret
  119.    jmp    pvx
  120. pv1:
  121.    call   trpass
  122. pvx:
  123.    add    sp,4
  124.    iret
  125.  
  126. pv_int    endp
  127.  
  128.  
  129. ;------------------------------------------------
  130. setvec   proc   far
  131. ; set INT vector
  132. ; entry: <sp+4> = vector number
  133. ;        <sp+6> = new vector
  134.  
  135.    push   bp
  136.    mov    bp,sp
  137.  
  138.    mov    al,[bp+6]   ; vector number
  139.    mov    ah,25h      ; set vector
  140.    
  141.    push   ds          ; preserve ds for Lattice
  142.    lds    dx,[bp+8]   ; offset address
  143.    int    DOS
  144.    pop    ds
  145.  
  146.    pop    bp
  147.    ret
  148.  
  149. setvec    endp
  150.  
  151.  
  152. ;------------------------------------------------
  153. ; temporary storage
  154. save_ds   dw   ?
  155. save_ax   dw   ?
  156.  
  157. tr_int   proc   far
  158. ; service trlib interrupt
  159. ; entry: DS:BX = function name asciiz string
  160.  
  161.    mov    cs:save_ds,ds
  162.    mov    cs:save_ax,ax
  163.  
  164.    mov    ax,dgroup
  165.    mov    ds,ax
  166.  
  167.    mov    ax,cs:save_ax
  168.    mov    reg_ax,ax
  169.    mov    reg_bx,bx
  170.    mov    reg_cx,cx
  171.    mov    reg_dx,dx
  172.    mov    reg_bp,bp
  173.    mov    reg_sp,sp
  174.    mov    reg_si,si
  175.    mov    reg_di,di
  176.  
  177.    mov    ax,cs:save_ds
  178.    mov    reg_ds,ax
  179.    mov    reg_es,es
  180.    mov    reg_ss,ss
  181.  
  182.    push   ax           ; original ds
  183.    push   bx
  184.    call   callfunc
  185.    add    sp,2
  186.  
  187.    mov    ax,reg_ax
  188.    mov    bx,reg_bx
  189.    mov    cx,reg_cx
  190.    mov    dx,reg_dx
  191.    mov    bp,reg_bp
  192.    mov    sp,reg_sp
  193.    mov    si,reg_si
  194.    mov    di,reg_di
  195.    mov    es,reg_es
  196.    mov    ss,reg_ss
  197.    mov    ds,reg_ds
  198.    
  199.    push   ax
  200.    mov    al,20h
  201.    out    20h,al      ; end of interrupt signal
  202.    pop    ax
  203.  
  204.    iret
  205.  
  206. tr_int    endp
  207.  
  208. codeseg   ends
  209.  
  210.    END
  211.  
  212.