Blame misc/c16.mac

Packit c1f960
; NASM macro set to make interfacing to 16-bit programs easier -*- nasm -*-
Packit c1f960
Packit c1f960
Packit c1f960
Packit c1f960
%imacro proc 1			; begin a procedure definition
Packit c1f960
Packit c1f960
%push proc
Packit c1f960
Packit c1f960
	  global %1
Packit c1f960
Packit c1f960
%1:	  push bp
Packit c1f960
Packit c1f960
	  mov bp,sp
Packit c1f960
Packit c1f960
%ifdef FARCODE PASCAL		; arguments may start at bp+4 or bp+6
Packit c1f960
Packit c1f960
%assign %$arg 6
Packit c1f960
Packit c1f960
%define %$firstarg 6
Packit c1f960
Packit c1f960
%else
Packit c1f960
Packit c1f960
%assign %$arg 4
Packit c1f960
Packit c1f960
%define %$firstarg 4
Packit c1f960
Packit c1f960
%endif
Packit c1f960
Packit c1f960
%define %$procname %1
Packit c1f960
Packit c1f960
%endmacro
Packit c1f960
Packit c1f960
Packit c1f960
Packit c1f960
%imacro arg 0-1 2		; used with the argument name as a label
Packit c1f960
Packit c1f960
%00	  equ %$arg
Packit c1f960
Packit c1f960
				; we could possibly be adding some
Packit c1f960
Packit c1f960
				; debug information at this point...?
Packit c1f960
Packit c1f960
%assign %$arg %1+%$arg
Packit c1f960
Packit c1f960
%endmacro
Packit c1f960
Packit c1f960
Packit c1f960
Packit c1f960
%imacro endproc 0
Packit c1f960
Packit c1f960
%ifnctx proc
Packit c1f960
Packit c1f960
%error Mismatched `endproc'/`proc'
Packit c1f960
Packit c1f960
%else
Packit c1f960
Packit c1f960
          mov sp,bp
Packit c1f960
Packit c1f960
          pop bp
Packit c1f960
Packit c1f960
%ifdef PASCAL
Packit c1f960
Packit c1f960
          retf %$arg - %$firstarg
Packit c1f960
Packit c1f960
%elifdef FARCODE
Packit c1f960
Packit c1f960
	  retf
Packit c1f960
Packit c1f960
%else
Packit c1f960
Packit c1f960
	  retn
Packit c1f960
Packit c1f960
%endif
Packit c1f960
Packit c1f960
__end_%$procname:		; useful for calculating function size
Packit c1f960
Packit c1f960
%pop
Packit c1f960
Packit c1f960
%endif
Packit c1f960
Packit c1f960
%endmacro
Packit c1f960