home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS - Coast to Coast
/
simteldosarchivecoasttocoast2.iso
/
asmutil
/
dos32v12.zip
/
MACROS.386
< prev
next >
Wrap
Text File
|
1993-10-13
|
5KB
|
215 lines
;-----------------------------------------------------------------------
;
; 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