diff options
Diffstat (limited to '')
-rw-r--r-- | private/mvdm/dos/v86/h/dos.inc | 524 |
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 |