summaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
Diffstat (limited to 'misc')
-rw-r--r--misc/c16.mac49
-rw-r--r--misc/c32.mac28
-rw-r--r--misc/exebin.mac57
3 files changed, 131 insertions, 3 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
+
diff --git a/misc/c32.mac b/misc/c32.mac
index a59acfde..f0c116ba 100644
--- a/misc/c32.mac
+++ b/misc/c32.mac
@@ -1,26 +1,52 @@
; NASM macro set to make interfacing to 32-bit programs easier -*- nasm -*-
+
+
%imacro proc 1 ; begin a procedure definition
+
%push proc
+
global %1
+
%1: push ebp
+
mov ebp,esp
+
%assign %$arg 8
+
%define %$procname %1
+
%endmacro
+
+
%imacro arg 0-1 4 ; used with the argument name as a label
- equ %$arg
+
+%00 equ %$arg
+
%assign %$arg %1+%$arg
+
%endmacro
+
+
%imacro endproc 0
+
%ifnctx proc
+
%error Mismatched `endproc'/`proc'
+
%else
+
leave
+
ret
+
__end_%$procname: ; useful for calculating function size
+
%pop
+
%endif
+
%endmacro
+
diff --git a/misc/exebin.mac b/misc/exebin.mac
index 8d1eaf8c..89c68898 100644
--- a/misc/exebin.mac
+++ b/misc/exebin.mac
@@ -1,57 +1,114 @@
; -*- nasm -*-
+
; NASM macro file to allow the `bin' output format to generate
+
; simple .EXE files by constructing the EXE header by hand.
+
; Adapted from a contribution by Yann Guidon <whygee_corp@hol.fr>
+
+
%define EXE_stack_size EXE_realstacksize
+
+
%macro EXE_begin 0
+
ORG 0E0h
+
section .text
+
+
header_start:
+
db 4Dh,5Ah ; EXE file signature
+
dw EXE_allocsize % 512
+
dw (EXE_allocsize + 511) / 512
+
dw 0 ; relocation information: none
+
dw (header_end-header_start)/16 ; header size in paragraphs
+
dw (EXE_absssize + EXE_realstacksize) / 16 ; min extra mem
+
dw (EXE_absssize + EXE_realstacksize) / 16 ; max extra mem
+
dw -10h ; Initial SS (before fixup)
+
dw EXE_endbss + EXE_realstacksize ; Initial SP (1K DPMI+1K STACK)
+
dw 0 ; (no) Checksum
+
dw 100h ; Initial IP - start just after the header
+
dw -10h ; Initial CS (before fixup)
+
dw 0 ; file offset to relocation table: none
+
dw 0 ; (no overlay)
+
align 16,db 0
+
header_end:
+
+
EXE_startcode:
+
section .data
+
EXE_startdata:
+
section .bss
+
EXE_startbss:
+
%endmacro
+
+
%macro EXE_stack 1
+
EXE_realstacksize equ %1
+
%define EXE_stack_size EXE_bogusstacksize ; defeat EQU in EXE_end
+
%endmacro
+
+
%macro EXE_end 0
+
section .text
+
EXE_endcode:
+
section .data
+
EXE_enddata:
+
section .bss
+
alignb 4
+
EXE_endbss:
+
+
EXE_acodesize equ (EXE_endcode-EXE_startcode+3) & (~3)
+
EXE_datasize equ EXE_enddata-EXE_startdata
+
EXE_absssize equ (EXE_endbss-EXE_startbss+3) & (~3)
+
EXE_allocsize equ EXE_acodesize + EXE_datasize
+
+
EXE_stack_size equ 0x800 ; default if nothing else was used
+
%endmacro
+