home *** CD-ROM | disk | FTP | other *** search
- ;-----------------------------------------------------------------------
- ;
- ; USFUL MACROS FOR YOUR PROTECTED MODE PROGRAM
- ;
- ; Writen By Adam Seychell
- ;
- ;They include
- ;
- ; FILE I/O:
- ; OPEN_FILE f#,'filename'
- ; READ_FILE f#, segment ,
- ;
- ;
- ;-----------------------------------------------------------------------
-
-
-
-
-
-
-
- ;-----------------------------------------------------------------------
- ; OPEN FILE
- ; Open <path\filename>
- ;-----------------------------------------------------------------------
- Open macro X, FileName , nameSEG , nameOFS
- local skip_opfi
- IFB <nameSEG>
- mov Real_DS, SEG file_to_open&X
- lea dx,file_to_open&X ; DS:DX points to file name
- ELSE
- mov ax,nameSEG
- mov Real_DS,ax
- mov dx,nameOFS
- ENDIF
- mov ax,3D02h ; open a file function
- dosint 21h
- mov FileHandle&X , AX
- jmp skip_opfi
- file_to_open&X db FileName,0
- FileHandle&X dw 0
- skip_opfi:
- endm
-
-
-
-
- ;-----------------------------------------------------------------------
- ; CREATE FILE
- ; create_file <path\filename>
- ;-----------------------------------------------------------------------
- Create macro X, FileName , nameSEG , nameOFS
- local skip_crfi
- jmp skip_crfi
- file_to_open&X db FileName,0
- FileHandle&X dw 0
- skip_crfi:
- IFB <nameSEG>
- mov word ptr Real_DS,SEG file_to_open&X
- lea dx,file_to_open&X ; DS:DX points to file name
- ELSE
- mov ax,nameSEG
- mov word ptr Real_DS,ax
- mov dx,nameOFS
- ENDIF
- mov ax,3C02h ; creat a file function
- mov cx,0
- dosint 21h
- mov FileHandle&X , AX
- endm
-
-
-
-
- ;-----------------------------------------------------------------------
- ; CLOSE
- ; close <path\filename>
- ;-----------------------------------------------------------------------
- Close macro X
- mov ah,03Eh ; close a file function
- mov BX,FileHandle&X
- dosint 21h
- endm
-
-
- ;-----------------------------------------------------------------------
- ; READ
- ; read
- ;-----------------------------------------------------------------------
- BlockRead macro X ,BUFFER_SEG, BUFFER_OFS, BYTE_COUNT
- mov BX,FileHandle&X
- mov cx,BYTE_COUNT
- mov dx,offset BUFFER_OFS ; DS:DX points to buffer
- mov ax,BUFFER_SEG
- mov word ptr Real_DS,ax
- mov ah,03Fh ; read_handle file function
- dosint 21h
- endm
-
-
- ;-----------------------------------------------------------------------
- ; WRITE
- ; write_file
- ;-----------------------------------------------------------------------
- BlockWrite macro X ,BUFFER_SEG, BUFFER_OFS, BYTE_COUNT
- mov BX,FileHandle&X
- mov cx,BYTE_COUNT
- mov dx,offset BUFFER_OFS ; DS:DX points to buffer
- mov ax,BUFFER_SEG
- mov word ptr Real_DS,ax
- mov ah,040h ; write handle file function
- dosint 21h
- endm
-
-
- file_SEEK MACRO IT,PLACELO,PLACEHI
- ;SEEK CX:DX = offset from START of new file position
- MOV DX,PLACELO
- MOV CX,PLACEHI
- MOV AH,42H
- MOV AL,0
- MOV BX,FILEHANDLE&IT
- DOSINT 21H
- ENDM
-
-
-
-
-
-
-
-
- Writeln MACRO STRING_,COLOR3_S
- LOCAL TEXT3_S
- local skip_wrln
- IFB <COLOR3_S>
- mov ah,07
- ELSE
- MOV AH,COLOR3_S
- ENDIF
-
- push edx
- mov EDX,offset TEXT3_S
- push offset skip_wrln
- JMP TEXT
- TEXT3_S DB STRING_,10,13,36
- skip_wrln:
- pop edx
- ENDM
-
- Write MACRO STRING_, COLOR5_T
- LOCAL TEXT5_T , TEXT5_Jmp
- IFB <COLOR5_T>
- mov ah,07
- ELSE
- MOV AH,COLOR5_T
- ENDIF
-
- push edx
- MOV EDX,OFFSET TEXT5_T
- push offset TEXT5_Jmp
- JMP TEXT
- TEXT5_T DB STRING_,36
- TEXT5_Jmp: pop edx
- ENDM
-
-
- CRTC equ 3D4h
- SEQ EQU 3C4h
- GC EQU 3CEh
- ATTR EQU 3C0h
-
-
- ;═══════════════════════════════════════════════════════════════════════════
- ; MACROS FOR VGA REGISTERS
- ;═══════════════════════════════════════════════════════════════════════════
-
- inp MACRO port
- mov dx,port ;; Read a byte from port 'port' into al
- in al,dx
- ENDM
-
- outp MACRO port, value
- mov dx,port ;; Write a byte to port 'port'
- mov al,value
- out dx,al
- ENDM
-
- rdindx MACRO port, index
- mov dx,port ;; Read register 'port' index 'index'
- mov al,index
- out dx,al
- inc dx
- in al,dx ;; Result in AL
- ENDM
-
- wrindx MACRO port, index, val
- mov al,index ;; Write 'port' index 'index' with 'val'
- mov ah,val
- mov dx,port
- out dx,ax
- ENDM
-
- modindx MACRO port, index, mask, nvw
- mov dx,port
- mov al,index
- out dx,al
- inc dx
- in al,dx ;; Read the old value
- and al,not mask ;; Mask out bits to be changed
- or al,nvw ;; Or in the changed bits
- out dx,al ;; Write the value back again
- ENDM
-
-