summaryrefslogtreecommitdiffstats
path: root/private/mvdm/dos/v86/h/dos.inc
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--private/mvdm/dos/v86/h/dos.inc524
1 files changed, 524 insertions, 0 deletions
diff --git a/private/mvdm/dos/v86/h/dos.inc b/private/mvdm/dos/v86/h/dos.inc
new file mode 100644
index 000000000..593b7c29c
--- /dev/null
+++ b/private/mvdm/dos/v86/h/dos.inc
@@ -0,0 +1,524 @@
+; DOS Interface Macros - Version 1.0 - for Microsoft Macro Assembler 5.0
+; (C) Copyright Microsoft Corporation, 1987, 1988.
+
+.XCREF
+.XLIST
+IF1
+; Internal
+__LdAdr MACRO reg, adr
+ IF (.TYPE (adr)) AND 00010000b ;; Register
+ mov reg, adr
+ ELSEIF (.TYPE (adr)) AND 00000100b ;; Constant
+ mov reg, adr
+ ELSEIF TYPE (adr) EQ 1 ;; Bytes
+ mov reg, OFFSET adr
+ ELSEIF TYPE (adr) EQ 2 ;; Near pointer
+ mov reg, adr
+ ELSEIF TYPE (adr) EQ 4 ;; Far pointer
+ lds reg, adr
+ ELSE
+ .ERR
+ %OUT Illegal argument
+ ENDIF
+ENDM
+
+; Internal
+__LdSeg MACRO dest, src
+ IFIDNI <src>, <es> ;; Segment register
+ mov ax, src
+ mov dest, ax
+ ELSEIFIDNI <src>, <ss>
+ mov ax, src
+ mov dest, ax
+ ELSEIFIDNI <src>, <ds>
+ mov ax, src
+ mov dest, ax
+ ELSEIFIDNI <src>, <ds>
+ mov ax, src
+ mov dest, ax
+ ELSEIF (.TYPE (src)) AND 00000100b ;; Constant
+ mov ax, src
+ mov dest, ax
+ ELSE ;; Memory or general register
+ mov dest, src
+ ENDIF
+ENDM
+
+; 01h, 07h, 08h, 0Ch
+@GetKey MACRO echo, cc, clear
+ LOCAL funct, disp
+ IFDIF <echo>, <0>
+ IFDIF <cc>, <0>
+ funct = 01h
+ ELSE
+ funct = 07h
+ disp = 02h
+ ENDIF
+ ELSE
+ IFDIF <cc>, <0>
+ funct = 08h
+ ELSE
+ funct = 07h
+ ENDIF
+ ENDIF
+ IFB <clear>
+ mov ah, funct
+ ELSE
+ IFIDN <clear>, <0>
+ mov ah, funct
+ ELSE
+ mov ah, 0Ch
+ mov al, funct
+ ENDIF
+ ENDIF
+ int 21h
+ IFDEF disp
+ mov dl, al
+ mov ah, disp
+ int 21h
+ ENDIF
+ENDM
+
+; 0Ah
+@GetStr MACRO ofset, terminator, limit, segmnt
+ __LdAdr dx, <ofset>
+ IFNB <segmnt>
+ __LdSeg ds, <segmnt>
+ ENDIF
+ mov ah, 0Ah
+ mov si, dx
+ IFNB <limit>
+ mov BYTE PTR [si], limit
+ ENDIF
+ int 21h
+ inc si
+ mov bl, [si]
+ sub bh, bh
+ inc si
+ IFNB <terminator>
+ mov BYTE PTR [bx+si], terminator
+ ENDIF
+ENDM
+
+; 02h
+@DispCh MACRO ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8, ch9, ch10
+ mov ah, 02h
+ IRP char, <ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8, ch9, ch10>
+ IFB <char>
+ EXITM
+ ENDIF
+ mov dl, char
+ int 21h
+ ENDM
+ENDM
+
+; 05h
+@PrtCh MACRO ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8, ch9, ch10
+ mov ah, 05h
+ IRP char, <ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8, ch9, ch10>
+ IFB <char>
+ EXITM
+ ENDIF
+ mov dl, char
+ int 21h
+ ENDM
+ENDM
+
+; 09h
+@DispStr MACRO ofset, segmnt
+ __LdAdr dx, <ofset>
+ IFNB <segmnt>
+ __LdSeg ds, <segmnt>
+ ENDIF
+ mov ah, 9
+ int 21h
+ENDM
+
+; 3Fh
+@Read MACRO ofset, bytes, handle, segmnt
+ IFNB <handle>
+ mov bx, handle
+ ELSE
+ sub bx, bx
+ ENDIF
+ mov cx, bytes
+ __LdAdr dx, <ofset>
+ IFNB <segmnt>
+ __LdSeg ds, <segmnt>
+ ENDIF
+ mov ah, 3Fh
+ int 21h
+ENDM
+
+; 40h
+@Write MACRO ofset, bytes, handle, segmnt
+ IFNB <handle>
+ mov bx, handle
+ ELSE
+ mov bx, 1
+ ENDIF
+ mov cx, bytes
+ __LdAdr dx, <ofset>
+ IFNB <segmnt>
+ __LdSeg ds, <segmnt>
+ ENDIF
+ mov ah, 40h
+ int 21h
+ENDM
+
+; 3Ch
+@MakFil MACRO path, atrib, segmnt, kind
+ IFB <atrib>
+ sub cx, cx
+ ELSE
+ mov cx, atrib
+ ENDIF
+ __LdAdr dx, <path>
+ IFNB <segmnt>
+ __LdSeg ds, <segmnt>
+ ENDIF
+ IFIDNI <kind>, <tmp>
+ mov ah, 5Ah
+ ELSEIFIDNI <kind>, <new>
+ mov ah, 5Bh
+ ELSE
+ mov ah, 3Ch
+ ENDIF
+ int 21h
+ENDM
+
+; 3Dh
+@OpenFil MACRO path, access, segmnt
+ __LdAdr dx, <path>
+ IFNB <segmnt>
+ __LdSeg ds, <segmnt>
+ ENDIF
+ mov ax, 3D00h + (access AND 0FFh)
+ int 21h
+ENDM
+
+; 3Eh
+@ClosFil MACRO handle
+ mov bx, handle
+ mov ah, 3Eh
+ int 21h
+ENDM
+
+; 41h
+@DelFil MACRO path, segmnt
+ __LdAdr dx, <path>
+ IFNB <segmnt>
+ __LdSeg ds, <segmnt>
+ ENDIF
+ mov ah, 41h
+ int 21h
+ENDM
+
+; 56h
+@MoveFil MACRO old, new, segold, segnew
+ __LdAdr dx, <old>
+ __LdAdr di, <new>
+ IFNB <segold>
+ __LdSeg ds, <segold>
+ ENDIF
+ IFNB <segnew>
+ __LdSeg es, <segnew>
+ ENDIF
+ mov ah, 56h
+ int 21h
+ENDM
+
+; 4Eh
+@GetFirst MACRO path, atrib, segmnt
+ IFNB <atrib>
+ mov cx, atrib
+ ELSE
+ sub cx, cx
+ ENDIF
+ __LdAdr dx, <path>
+ IFNB <segmnt>
+ __LdSeg ds, <segmnt>
+ ENDIF
+ mov ah, 4Eh
+ int 21h
+ENDM
+
+; 4Fh
+@GetNext MACRO
+ mov ah, 4Fh
+ int 21h
+ENDM
+
+; 2Fh
+@GetDTA MACRO
+ mov ah, 2Fh
+ int 21h
+ENDM
+
+; 1Ah
+@SetDTA MACRO buffer, segmnt
+ __LdAdr dx, <buffer>
+ IFNB <segmnt>
+ __LdSeg ds, <segmnt>
+ ENDIF
+ mov ah, 1Ah
+ int 21h
+ENDM
+
+; Internal
+__LdDub MACRO dub
+ IF TYPE (dub) EQ 2
+ sub cx, cx
+ mov dx, dub
+ ELSEIF TYPE (dub) EQ 4
+ mov cx, dub[2]
+ mov dx, dub[0]
+ ELSEIF TYPE (dub) EQ 0
+ sub cx, cx
+ mov dx, dub
+ ELSE
+ .ERR
+ %OUT Illegal argument
+ ENDIF
+ENDM
+
+; 42h
+@GetFilSz MACRO handle
+ mov bx, handle
+ sub cx, cx
+ sub dx, dx
+ mov ax, 4202h
+ int 21h
+ push dx
+ push ax
+ sub dx, dx
+ mov ax, 4200h
+ int 21h
+ pop ax
+ pop dx
+ENDM
+
+; 42h
+@MovePtrAbs MACRO handle, distance
+ IFNB <distance>
+ __LdDub <distance>
+ ENDIF
+ mov bx, handle
+ mov ax, 4200h
+ int 21h
+ENDM
+
+; 42h
+@MovePtrRel MACRO handle, distance
+ IFNB <distance>
+ __LdDub <distance>
+ ENDIF
+ mov bx, handle
+ mov ax, 4201h
+ int 21h
+ENDM
+
+; 39h
+@MkDir MACRO path, segmnt
+ __LdAdr dx, <path>
+ IFNB <segmnt>
+ __LdSeg ds, <segmnt>
+ ENDIF
+ mov ah, 39h
+ int 21h
+ENDM
+
+; 3Ah
+@RmDir MACRO path, segmnt
+ __LdAdr dx, <path>
+ IFNB <segmnt>
+ __LdSeg ds, <segmnt>
+ ENDIF
+ mov ah, 3Ah
+ int 21h
+ENDM
+
+; 3Bh
+@ChDir MACRO path, segmnt
+ __LdAdr dx, <path>
+ IFNB <segmnt>
+ __LdSeg ds, <segmnt>
+ ENDIF
+ mov ah, 3Bh
+ int 21h
+ENDM
+
+; 47h
+@GetDir MACRO buffer, drive, segmnt
+ IFNB <drive>
+ mov dl, drive
+ ELSE
+ sub dl, dl
+ ENDIF
+ __LdAdr si, <buffer>
+ IFNB <segmnt>
+ __LdSeg ds, <segmnt>
+ ENDIF
+ mov ah, 47h
+ int 21h
+ENDM
+
+; 19h
+@GetDrv MACRO
+ mov ah, 19h
+ int 21h
+ENDM
+
+; 0Eh
+@SetDrv MACRO drive
+ mov dl, drive
+ mov ah, 0Eh
+ int 21h
+ENDM
+
+; 36h
+@ChkDrv MACRO drive
+ IFNB <drive>
+ mov dl, drive
+ ELSE
+ sub dl, dl
+ ENDIF
+ mov ah, 36h
+ int 21h
+ENDM
+
+; 4Ch
+@Exit MACRO return
+ IFB <return>
+ mov ah, 4Ch
+ ELSE
+ mov ax, 4C00h + (return AND 0FFh)
+ ENDIF
+ int 21h
+ENDM
+
+; 4Bh
+@Exec MACRO path, parms, segpath, segparms, overlay
+ __LdAdr dx, <path>
+ __LdAdr bx, <parms>
+ IFNB <segpath>
+ __LdSeg ds, <segpath>
+ ENDIF
+ IFNB <segparms>
+ __LdSeg es, <segparms>
+ ENDIF
+ IFB <overlay>
+ mov ax, 4B00h
+ ELSE
+ mov ax, 4B03h
+ ENDIF
+ int 21h
+ENDM
+
+; 4Dh
+@GetRet MACRO
+ mov ah, 4Dh
+ int 21h
+ENDM
+
+; 31h
+@TSR MACRO paragraphs, return
+ mov dx, paragraphs
+ IFB <return>
+ mov ah, 31h
+ ELSE
+ mov ax, 3100h + (return AND 0FFh)
+ ENDIF
+ int 21h
+ENDM
+
+; 49h
+@FreeBlok MACRO segmnt
+ IFNB <segmnt>
+ __LdSeg es, <segmnt>
+ ENDIF
+ mov ah, 49h
+ int 21h
+ENDM
+
+; 48h
+@GetBlok MACRO graphs
+ LOCAL tryit
+ mov bx, graphs
+ tryit: mov ah, 48h
+ int 21h
+ jc tryit
+ENDM
+
+; 4Ah
+@ModBlok MACRO graphs, segmnt
+ IFNB <segmnt>
+ __LdSeg es, <segmnt>
+ ENDIF
+ mov bx, graphs
+ mov ah, 4Ah
+ int 21h
+ENDM
+
+; 2Ah
+@GetDate MACRO
+ mov ah, 2Ah
+ int 21h
+ENDM
+
+; 2Bh
+@SetDate MACRO month, day, year
+ mov cx, year
+ mov dh, month
+ mov dl, day
+ mov ah, 2Bh
+ int 21h
+ENDM
+
+; 2Ch
+@GetTime MACRO
+ mov ah, 2Ch
+ int 21h
+ENDM
+
+; 2Dh
+@SetTime MACRO hour, minutes, seconds, hundredths
+ mov ch, hour
+ mov cl, minutes
+ mov dh, seconds
+ mov dl, hundredths
+ mov ah, 2Dh
+ int 21h
+ENDM
+
+; 30h
+@GetVer MACRO
+ mov ah, 30h
+ int 21h
+ENDM
+
+; 35h
+@GetInt MACRO interrupt
+ mov ax, 3500h + (interrupt AND 0FFh)
+ int 21h
+ENDM
+
+; 25h
+@SetInt MACRO interrupt, vector, segmnt
+ IF TYPE (vector) GE 0FFFEh
+ mov dx, OFFSET vector
+ mov ax, SEG vector
+ mov ds, ax
+ ELSE
+ __LdAdr dx, <vector>
+ IFNB <segmnt>
+ __LdSeg ds, <segmnt>
+ ENDIF
+ ENDIF
+ mov ax, 2500h + (interrupt AND 0FFh)
+ int 21h
+ENDM
+
+ENDIF ; Pass 1
+.CREF
+.LIST