home *** CD-ROM | disk | FTP | other *** search
/ High Voltage Shareware / high1.zip / high1 / DIR13 / DOS32V12.ZIP / MACROS.386 < prev    next >
Text File  |  1993-10-13  |  5KB  |  215 lines

  1. ;-----------------------------------------------------------------------
  2. ;
  3. ;        USFUL MACROS FOR YOUR PROTECTED MODE PROGRAM
  4. ;
  5. ; Writen By Adam Seychell
  6. ;
  7. ;They include
  8. ;
  9. ; FILE I/O:
  10. ;    OPEN_FILE f#,'filename'
  11. ;       READ_FILE f#, segment ,
  12. ;
  13. ;
  14. ;-----------------------------------------------------------------------
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22. ;-----------------------------------------------------------------------
  23. ;           OPEN  FILE
  24. ; Open     <path\filename>
  25. ;-----------------------------------------------------------------------
  26. Open macro X, FileName , nameSEG , nameOFS
  27. local skip_opfi
  28.     IFB <nameSEG>
  29.             mov Real_DS, SEG file_to_open&X
  30.             lea dx,file_to_open&X    ; DS:DX    points to file name
  31.         ELSE
  32.                 mov ax,nameSEG
  33.             mov Real_DS,ax
  34.                 mov dx,nameOFS
  35.         ENDIF
  36.         mov ax,3D02h        ; open a file function
  37.     dosint 21h
  38.         mov FileHandle&X , AX
  39.         jmp  skip_opfi
  40. file_to_open&X  db FileName,0
  41. FileHandle&X    dw 0
  42. skip_opfi:
  43. endm
  44.  
  45.  
  46.  
  47.  
  48. ;-----------------------------------------------------------------------
  49. ;           CREATE  FILE
  50. ; create_file     <path\filename>
  51. ;-----------------------------------------------------------------------
  52. Create macro X, FileName , nameSEG , nameOFS
  53. local skip_crfi
  54.     jmp skip_crfi
  55. file_to_open&X  db FileName,0
  56. FileHandle&X    dw 0
  57. skip_crfi:
  58.     IFB <nameSEG>
  59.             mov  word ptr Real_DS,SEG file_to_open&X
  60.             lea dx,file_to_open&X    ; DS:DX    points to file name
  61.         ELSE
  62.                 mov ax,nameSEG
  63.             mov  word ptr Real_DS,ax
  64.                 mov dx,nameOFS
  65.         ENDIF
  66.         mov ax,3C02h        ; creat a file function
  67.         mov cx,0
  68.     dosint 21h
  69.         mov FileHandle&X , AX
  70. endm
  71.  
  72.  
  73.  
  74.  
  75. ;-----------------------------------------------------------------------
  76. ;           CLOSE
  77. ; close    <path\filename>
  78. ;-----------------------------------------------------------------------
  79. Close  macro  X
  80.         mov ah,03Eh         ; close a file function
  81.         mov BX,FileHandle&X
  82.     dosint 21h
  83. endm
  84.  
  85.  
  86. ;-----------------------------------------------------------------------
  87. ;           READ
  88. ; read
  89. ;-----------------------------------------------------------------------
  90. BlockRead  macro  X ,BUFFER_SEG, BUFFER_OFS, BYTE_COUNT
  91.         mov BX,FileHandle&X
  92.         mov cx,BYTE_COUNT
  93.     mov dx,offset BUFFER_OFS    ;  DS:DX points to buffer
  94.         mov ax,BUFFER_SEG
  95.     mov word ptr Real_DS,ax
  96.         mov ah,03Fh         ; read_handle file function
  97.        dosint 21h
  98. endm
  99.  
  100.  
  101. ;-----------------------------------------------------------------------
  102. ;           WRITE
  103. ; write_file
  104. ;-----------------------------------------------------------------------
  105. BlockWrite  macro  X ,BUFFER_SEG, BUFFER_OFS, BYTE_COUNT
  106.         mov BX,FileHandle&X
  107.         mov cx,BYTE_COUNT
  108.     mov dx,offset BUFFER_OFS    ;  DS:DX points to buffer
  109.         mov ax,BUFFER_SEG
  110.     mov word ptr Real_DS,ax
  111.         mov ah,040h         ; write handle file function
  112.        dosint 21h
  113. endm
  114.  
  115.  
  116. file_SEEK MACRO IT,PLACELO,PLACEHI
  117. ;SEEK  CX:DX = offset from START of new file position
  118.    MOV  DX,PLACELO
  119.    MOV  CX,PLACEHI
  120.    MOV  AH,42H
  121.    MOV  AL,0
  122.    MOV  BX,FILEHANDLE&IT
  123.    DOSINT  21H
  124. ENDM
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133. Writeln MACRO STRING_,COLOR3_S
  134. LOCAL TEXT3_S
  135. local skip_wrln
  136.         IFB <COLOR3_S>
  137.         mov     ah,07
  138.     ELSE
  139.                 MOV    AH,COLOR3_S
  140.         ENDIF
  141.  
  142.         push edx
  143.     mov    EDX,offset TEXT3_S
  144.         push    offset skip_wrln
  145.         JMP    TEXT
  146. TEXT3_S DB STRING_,10,13,36
  147. skip_wrln:
  148.         pop edx
  149. ENDM
  150.  
  151. Write MACRO STRING_, COLOR5_T
  152. LOCAL TEXT5_T , TEXT5_Jmp
  153.         IFB <COLOR5_T>
  154.         mov     ah,07
  155.     ELSE
  156.                 MOV    AH,COLOR5_T
  157.         ENDIF
  158.  
  159.         push edx
  160.     MOV    EDX,OFFSET TEXT5_T
  161.         push    offset TEXT5_Jmp
  162.     JMP    TEXT
  163. TEXT5_T DB STRING_,36
  164. TEXT5_Jmp:        pop edx
  165. ENDM
  166.  
  167.  
  168. CRTC        equ    3D4h
  169. SEQ        EQU    3C4h
  170. GC        EQU    3CEh
  171. ATTR        EQU    3C0h
  172.  
  173.     
  174. ;═══════════════════════════════════════════════════════════════════════════
  175. ;        MACROS FOR     VGA    REGISTERS
  176. ;═══════════════════════════════════════════════════════════════════════════
  177.  
  178. inp    MACRO    port
  179.     mov    dx,port        ;; Read a byte from port 'port' into al
  180.     in    al,dx
  181. ENDM
  182.  
  183. outp    MACRO    port, value
  184.     mov    dx,port        ;; Write a byte to port 'port'
  185.     mov    al,value
  186.     out    dx,al
  187. ENDM
  188.  
  189. rdindx    MACRO    port, index
  190.     mov    dx,port        ;; Read register 'port' index 'index'
  191.     mov    al,index
  192.     out    dx,al
  193.     inc    dx
  194.     in    al,dx        ;; Result in AL
  195. ENDM
  196.  
  197. wrindx    MACRO    port, index, val
  198.     mov    al,index    ;; Write 'port' index 'index' with 'val'
  199.     mov    ah,val
  200.     mov    dx,port
  201.     out    dx,ax
  202. ENDM
  203.  
  204. modindx    MACRO    port, index, mask, nvw
  205.     mov    dx,port
  206.     mov    al,index
  207.     out    dx,al
  208.     inc    dx
  209.     in    al,dx            ;; Read the old value
  210.     and    al,not mask        ;; Mask out bits to be changed
  211.     or    al,nvw            ;; Or in the changed bits
  212.     out    dx,al            ;; Write the value back again
  213. ENDM
  214.  
  215.