aboutsummaryrefslogtreecommitdiffstats
path: root/misc/c16.mac
diff options
context:
space:
mode:
Diffstat (limited to 'misc/c16.mac')
-rw-r--r--misc/c16.mac49
1 files changed, 47 insertions, 2 deletions
diff --git a/misc/c16.mac b/misc/c16.mac
index 86e6bf92..50b5d5ee 100644
--- a/misc/c16.mac
+++ b/misc/c16.mac
@@ -1,37 +1,82 @@
; NASM macro set to make interfacing to 16-bit programs easier -*- nasm -*-
+
+
%imacro proc 1 ; begin a procedure definition
+
%push proc
+
global %1
+
%1: push bp
+
mov bp,sp
+
%ifdef FARCODE PASCAL ; arguments may start at bp+4 or bp+6
+
%assign %$arg 6
+
+%define %$firstarg 6
+
%else
+
%assign %$arg 4
+
+%define %$firstarg 4
+
%endif
+
%define %$procname %1
+
%endmacro
+
+
%imacro arg 0-1 2 ; used with the argument name as a label
- equ %$arg
+
+%00 equ %$arg
+
+ ; we could possibly be adding some
+
+ ; debug information at this point...?
+
%assign %$arg %1+%$arg
+
%endmacro
+
+
%imacro endproc 0
+
%ifnctx proc
+
%error Mismatched `endproc'/`proc'
+
%else
+
mov sp,bp
+
pop bp
+
%ifdef PASCAL
- retf %$arg
+
+ retf %$arg - %$firstarg
+
%elifdef FARCODE
+
retf
+
%else
+
retn
+
%endif
+
__end_%$procname: ; useful for calculating function size
+
%pop
+
%endif
+
%endmacro
+