summaryrefslogtreecommitdiff
path: root/misc/c16.mac
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2002-04-30 20:52:49 +0000
committerH. Peter Anvin <hpa@zytor.com>2002-04-30 20:52:49 +0000
commit76690a12ad212d1f77cd1f71d7ac5a9de6eaefb6 (patch)
tree6d1fe5322184b3e53a9378ce65f6a95f05b59f28 /misc/c16.mac
parent6768eb71d8debde65562619c938b997aea1bd9f9 (diff)
downloadnasm-76690a12ad212d1f77cd1f71d7ac5a9de6eaefb6.tar.gz
nasm-76690a12ad212d1f77cd1f71d7ac5a9de6eaefb6.tar.bz2
nasm-76690a12ad212d1f77cd1f71d7ac5a9de6eaefb6.zip
NASM 0.96
Diffstat (limited to 'misc/c16.mac')
-rw-r--r--misc/c16.mac37
1 files changed, 37 insertions, 0 deletions
diff --git a/misc/c16.mac b/misc/c16.mac
new file mode 100644
index 0000000..86e6bf9
--- /dev/null
+++ b/misc/c16.mac
@@ -0,0 +1,37 @@
+; 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
+%else
+%assign %$arg 4
+%endif
+%define %$procname %1
+%endmacro
+
+%imacro arg 0-1 2 ; used with the argument name as a label
+ equ %$arg
+%assign %$arg %1+%$arg
+%endmacro
+
+%imacro endproc 0
+%ifnctx proc
+%error Mismatched `endproc'/`proc'
+%else
+ mov sp,bp
+ pop bp
+%ifdef PASCAL
+ retf %$arg
+%elifdef FARCODE
+ retf
+%else
+ retn
+%endif
+__end_%$procname: ; useful for calculating function size
+%pop
+%endif
+%endmacro