home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
assemblr
/
library
/
sampler0
/
dos.mac
< prev
next >
Wrap
Text File
|
1987-05-16
|
12KB
|
640 lines
;
; DOS Macros
;
; These macros define the interfaces to DOS. This aids in making calls
; to DOS from other assembly language routines. These macros provide the
; complete interface to the particular DOS function.
;
;
; LOADREG
;
; This macro is an "inner" macro for use by the DOS interface macros. It
; allows the caller of a macro to specify a register or a literal value as the
; parameter to the macro. This macro loads the correct register specified by
; the macro with the literal value or from the register specified. It will
; also not generate any code if the register that was passed to the calling
; macro was where that macro wanted the value.
;
loadreg macro destreg,source
ifdif <destreg>,<source>
mov destreg,source
endif
endm
;
; LDROFF
;
; This macro is an "inner" macro for use by the DOS interface macros. It
; allows the caller of a macro to specify a register or a literal value as the
; parameter to the macro. This macro loads the correct register specified by
; the macro with the offset of a particular memory location. Or it will load
; the correct register from another register, depending on what the user had
; coded on the original macro. This macro will not generate any code if the
; register that was passed to the calling macro was where that macro wanted the
; value.
;
ldroff macro destreg,source,src2
ifdif <destreg>,<source>
ifidn <source>,<offset>
lea destreg,src2
else
loadreg destreg,source
endif
endif
endm
;
dosfn macro fncnum
mov ah,fncnum
int 21h
endm
;
; TERMINATE
;
; This macro issues a 'program terminate' interrupt to DOS. It will
; cause the currently executing program to return to DOS. This is the normal
; way to exit from DOS.
;
terminate macro
int 20h
endm
;
; ABSDSKRD
;
; This macro performs an 'absolute disk read' interrupt to DOS. It will
; read the specified number of sectors from diskette. The data will be read
; into the data area that the user specifies.
;
absdskrd macro drive,numsectrs,lrecnum,transoff
loadreg al,drive
loadreg cx,numsectrs
loadreg dx,lrecnum
ldroff bx,transoff
int 25h
pop bx
endm
;
; ABSDSKWR
;
; This macro performs an 'absolute disk write' interrupt to DOS. It will
; write the specified number of sectors to diskette. The data will be written
; from the data area that the user specifies.
;
absdskwr macro drive,numsectrs,lrecnum,transoff
loadreg al,drive
loadreg cx,numsectrs
loadreg dx,lrecnum
ldroff bx,transoff
int 26h
pop bx
endm
;
; STAYRES
;
; This macro performs a 'terminate but stay resident' interrupt to DOS.
; It will cause the caller to return to DOS but the space for the program will
; remain allocated.
;
stayres macro endaddr
ldroff dx,endaddr
int 27h
endm
;
; KBDIN
;
; This macro requests a character from the keyboard. The character is
; echoed on the CRT.
;
kbdin macro
dosfn 1
endm
;
; DSPOUT
;
; This macro outputs a character to the CRT.
;
dspout macro outchr
loadreg dl,outchr
dosfn 2
endm
;
; AUXIN
;
; This macro inputs a character from the auxilary input device.
;
auxin macro
dosfn 3
endm
;
; AUXOUT
;
; This macro outputs a character to the auxilary output device.
;
auxout macro outchr
loadreg dl,outchr
dosfn 4
endm
;
; PRNOUT
;
; This macro outputs a character to the first printer.
;
prnout macro outchr
loadreg dl,outchr
dosfn 5
endm
;
; CONSIO
;
;
; This macro issues a 'direct console I/O' interrupt to DOS. If no
; argument is supplied to this macro, console input will be performed.
; otherwise console output will be performed.
;
consio macro outchr
ifb <outchr>
mov dl,0ffh
else
loadreg dl,outchr
endif
dosfn 6
endm
;
; CONIONE
;
; This macro issues a 'direct console I/O with no echo' interrupt to DOS.
; If no argument is supplied to this macro, console input will be performed, the
; character input from the keyboard will not be echoed. Otherwise console
; output will be performed.
;
conione macro outchr
ifb <outchr>
mov dl,0ffh
else
loadreg dl,outchr
endif
dosfn 7
endm
;
; KBDINE
;
; This macro gets a character from the keyboard and returns it. The
; character is not echoed on the screen.
;
kbdine macro
dosfn 8
endm
;
; PRNSTR
;
; This macro will issue a 'print string' interrupt to DOS. It will print
; the string whose offset is passed to the macro. It is assumed that DS
; contains the segment value for the string. The string must terminate with
; a '$' character.
;
prnstr macro p1,p2
ldroff dx,p1,p2
dosfn 9
endm
;
; BKBDIN
;
; This macro will issue a 'buffered keyboard input' interrupt to DOS.
; The offset of where the buffer is located is passed to the macro. It is
; assumed that DS constains the segment which contains the buffer. The first
; byte of the buffer must be the length of the buffer - 2. The second byte is
; filled in and contains the number of characters read in. The characters read
; in are placed starting at the third byte of the buffer.
;
bkbdin macro p1,p2
ldroff dx,p1,p2
dosfn 0ah
endm
;
; CHKBDST
;
; This macro will issue a 'check keyboard status' interrupt to DOS. The
; result is that upon return AL will contain 0FFH if there is a character
; available at the keyboard, otherwise it will contain 00H.
;
chkbdst macro
dosfn 0bh
endm
;
; CKBIKF
;
; This macro will issue a 'clear keyboard buffer and invoke keyboard
; function' interrupt to DOS. Forces system to wait until a character is
; actually typed.
;
ckbikf macro
dosfn 0ch
endm
;
; DSKRSET
;
; This macro will issue a disk reset interrupt to DOS.
;
dskrset macro
dosfn 0dh
endm
;
; SELDSK
;
; This macro will issue a select disk interrupt to DOS. The drive
; specified will become the defualt drive.
;
seldsk macro drive
ldreg al,drive
dosfn 0eh
endm
;
; FCBOPEN
;
; This macro will issue an open file interrupt to DOS.
;
fcbopen macro p1,p2
ldroff dx,p1,p2
dosfn 0fh
endm
;
; FCBCLOSE
;
; This macro will issue a close file interrupt to DOS.
;
fcbclose macro p1,p2
ldroff dx,p1,p2
dosfn 10h
endm
;
; FCBSRCH1
;
; This macro will issue a search for first entry interrupt to DOS.
;
fcbsrch1 macro p1,p2
ldroff dx,p1,p2
dosfn 11h
endm
;
; FCBSRCHN
;
; This macro will issue a search for next entry interrupt to DOS.
;
fcbsrchn macro p1,p2
ldroff dx,p1,p2
dosfn 12h
endm
;
; FCBDEL
;
; This macro will issue a delete file interrupt to DOS.
;
fcbdel macro p1,p2
ldroff dx,p1,p2
dosfn 13h
endm
;
; FCBSEQRD
;
; This macro will issue a sequential read interrupt to DOS.
;
fcbseqrd macro p1,p2
ldroff dx,p1,p2
dosfn 14h
endm
;
; FCBSEQWR
;
; This macro will issue a sequential write interrupt to DOS.
;
fcbseqwr macro p1,p2
ldroff dx,p1,p2
dosfn 15h
endm
;
; FCBCRE
;
; This macro will issue a file create interrupt to DOS.
;
fcbcre macro p1,p2
ldroff dx,p1,p2
dosfn 16h
endm
;
; FCBRENAME
;
; This macro will issue a file rename interrupt to DOS.
;
fcbrename macro p1,p2
ldroff dx,p1,p2
dosfn 17h
endm
;
curdsk macro
dosfn 19h
endm
;
setdta macro p1,p2
ldroff dx,p1,p2
dosfn 1ah
endm
;
getfat macro
dosfn 1bh
endm
;
getsfat macro drive
loadreg dl,drive
dosfn 1ch
endm
;
rndrd macro p1,p2
ldroff dx,p1,p2
dosfn 21h
endm
;
rndwr macro p1,p2
ldroff dx,p1,p2
dosfn 22h
endm
;
fcbsize macro p1,p2
ldroff dx,p1,p2
dosfn 23h
endm
;
setrrfld macro p1,p2
ldroff dx,p1,p2
dosfn 24h
endm
;
setivec macro ivec,p1,p2
loadreg al,ivec
ldroff dx,p1,p2
dosfn 25h
endm
;
crepsp macro p1,p2
ldroff dx,p1,p2
dosfn 26h
endm
;
rblkrd macro cnt,p1,p2
loadreg cx,cnt
ldroff dx,p1,p2
dosfn 27h
endm
;
rblkwr macro cnt,p1,p2
loadreg cx,cnt
ldroff dx,p1,p2
dosfn 28h
endm
;
prsfn macro p1,p2,p3,p4
ldroff si,p1,p2
ifidn <p1>,<offset>
ldroff di,p3,p4
else
ldroff di,p2,p3
endif
dosfn 29h
endm
;
getdate macro
dosfn 2ah
endm
;
setdate macro
dosfn 2bh
endm
;
gettime macro
dosfn 2ch
endm
;
settime macro
dosfn 2dh
endm
;
srverify macro verify
loadreg al,verify
sub dl,dl
dosfn 2eh
endm
;
setverify macro
srverify 1
endm
;
resetverify macro
srverify 0
endm
;
getdta macro
dosfn 2fh
endm
;
getvernm macro
dosfn 30h
endm
;
keep macro rc,size
loadreg al,rc
loadreg dx,size
dosfn 31h
endm
;
cbchk macro setflg,stateflg
loadreg al,setflg
loadreg dl,stateflg
dosfn 33h
endm
;
getivec macro vecnum
loadreg al,vecnum
dosfn 35h
endm
;
gdfreesp macro drive
loadreg dl,drive
dosfn 36h
endm
;
cntrydep macro p1,p2
ldroff dx,p1,p2
sub al,al
dosfn 38h
endm
;
mkdir macro p1,p2
ldroff dx,p1,p2
dosfn 39h
endm
;
rmdir macro p1,p2
ldroff dx,p1,p2
dosfn 3ah
endm
;
chdir macro p1,p2
ldroff dx,p1,p2
dosfn 3bh
endm
;
creat macro acc,p1,p2
loadreg cx,acc
ldroff dx,p1,p2
dosfn 3ch
endm
;
openfile macro access,p1,p2
loadreg al,access
ldroff dx,p1,p2
dosfn 3dh
endm
;
open macro access,p1,p2
ifidn <access>,<r>
openfile 0,p1,p2
else
ifidn <access>,<w>
openfile 1,p1,p2
else
ifidn <access>,<u>
openfile 2,p1,p2
endif
endif
endif
endm
;
close macro file
loadreg bx,file
dosfn 3eh
endm
;
read macro file,numbytes,p1,p2
loadreg bx,file
loadreg cx,numbytes
ldroff dx,p1,p2
dosfn 3fh
endm
;
write macro file,numbytes,p1,p2
loadreg bx,file
loadreg cx,numbytes
ldroff dx,p1,p2
dosfn 40h
endm
;
unlink macro p1,p2
ldroff dx,p1,p2
dosfn 41h
endm
;
lseek macro file,mode,hipos,lopos
loadreg bx,file
loadreg al,mode
loadreg cx,hipos
loadreg dx,lopos
dosfn 42h
endm
;
chmod macro mode,attr,p1,p2
loadreg al,mode
loadreg cx,attr
ldroff dx,p1,p2
dosfn 43h
endm
;
ioctl macro fc,file
loadreg al,fc
loadreg bx,file
dosfn 44h
endm
;
dup macro file
loadreg bx,file
dosfn 45h
endm
;
fdup macro file1,file2
loadreg bx,file1
loadreg cx,file2
dosfn 46h
endm
;
gcurdir macro drive,p1,p2
loadreg dl,drive
ldroff si,p1,p2
dosfn 47h
endm
;
alloc macro size
loadreg bx,size
dosfn 48h
endm
;
free macro ptr
loadreg es,ptr
dosfn 49h
endm
;
setblock macro ptr,size
loadreg es,ptr
loadreg bx,size
dosfn 4ah
endm
;
exec macro fc,p1,p2,p3,p4
ldroff dx,p1,p2
ifidn <p1>,<offset>
ldroff bx,p3,p4
else
ldroff bx,p2,p3
endif
loadreg al,fc
dosfn 4bh
endm
;
exit macro rc
loadreg al,rc
dosfn 4ch
endm
;
wait macro
dosfn 4dh
endm
;
fndfile1 macro attr,p1,p2
loadreg cx,attr
ldroff dx,p1,p2
dosfn 4eh
endm
;
fndfilen macro
dosfn 4fh
endm
;
rename macro p1,p2,p3,p4
ldroff dx,p1,p2
ifidn <p1>,<offset>
ldroff di,p3,p4
else
ldroff di,p2,p3
endif
dosfn 56h
endm
;
getftime macro file
loadreg bx,file
sub al,al
dosfn 57h
endm
;
setftime macro file,date,time
loadreg bx,file
loadreg dx,date
loadreg cx,time
mov al,1
dosfn 57h
endm