54 lines
1.3 KiB
NASM
54 lines
1.3 KiB
NASM
;
|
||
; CALL_DOS.ASM
|
||
;
|
||
; A program to call DOS from Artek Ada
|
||
; (C) 1985, 86, 87 Artek Corporation
|
||
;
|
||
; Author : V. Thorsteinsson
|
||
;
|
||
; As per the Artek Calling Convention rev. 2,
|
||
; SI points to parameters and DI points to local
|
||
; variables at entry. BP must not be modified.
|
||
; SS, ES, and DS all point to the data segment
|
||
; and must be preserved.
|
||
; The frames of statically enclosing subprograms
|
||
; cannot be accessed. Static data also cannot
|
||
; be accessed.
|
||
;
|
||
CGROUP GROUP CODE
|
||
CODE SEGMENT 'CODE'
|
||
ASSUME CS:CGROUP, DS:NOTHING, ES:NOTHING
|
||
;
|
||
DOSCALL PROC FAR
|
||
MOV BX, [SI] ; Load the address of REGS (parameter)
|
||
PUSH BP
|
||
PUSH ES
|
||
PUSH BX
|
||
MOV AX, [BX]
|
||
MOV CX, [BX+4]
|
||
MOV DX, [BX+6]
|
||
MOV SI, [BX+8]
|
||
LES DI, [BX+10]
|
||
MOV BX, [BX+2]
|
||
INT 21h
|
||
MOV BP, BX
|
||
POP BX
|
||
MOV [BX], AX
|
||
MOV [BX+2], BP
|
||
MOV [BX+4], CX
|
||
MOV [BX+6], DX
|
||
MOV [BX+8], SI
|
||
MOV [BX+10], DI
|
||
MOV [BX+12], ES
|
||
PUSHF
|
||
POP AX
|
||
MOV [BX+14], AX ; Set flags
|
||
POP ES
|
||
POP BP
|
||
DOSCALL ENDP
|
||
;
|
||
CODE ENDS
|
||
|
||
END DOSCALL
|
||
|
||
|