blob: 8d1eaf8c770909999e61847bd6c695f61233ea0f [file] [log] [blame]
H. Peter Anvin76690a12002-04-30 20:52:49 +00001; -*- nasm -*-
2; NASM macro file to allow the `bin' output format to generate
3; simple .EXE files by constructing the EXE header by hand.
4; Adapted from a contribution by Yann Guidon <whygee_corp@hol.fr>
5
6%define EXE_stack_size EXE_realstacksize
7
8%macro EXE_begin 0
9 ORG 0E0h
10 section .text
11
12header_start:
13 db 4Dh,5Ah ; EXE file signature
14 dw EXE_allocsize % 512
15 dw (EXE_allocsize + 511) / 512
16 dw 0 ; relocation information: none
17 dw (header_end-header_start)/16 ; header size in paragraphs
18 dw (EXE_absssize + EXE_realstacksize) / 16 ; min extra mem
19 dw (EXE_absssize + EXE_realstacksize) / 16 ; max extra mem
20 dw -10h ; Initial SS (before fixup)
21 dw EXE_endbss + EXE_realstacksize ; Initial SP (1K DPMI+1K STACK)
22 dw 0 ; (no) Checksum
23 dw 100h ; Initial IP - start just after the header
24 dw -10h ; Initial CS (before fixup)
25 dw 0 ; file offset to relocation table: none
26 dw 0 ; (no overlay)
27 align 16,db 0
28header_end:
29
30EXE_startcode:
31 section .data
32EXE_startdata:
33 section .bss
34EXE_startbss:
35%endmacro
36
37%macro EXE_stack 1
38EXE_realstacksize equ %1
39%define EXE_stack_size EXE_bogusstacksize ; defeat EQU in EXE_end
40%endmacro
41
42%macro EXE_end 0
43 section .text
44EXE_endcode:
45 section .data
46EXE_enddata:
47 section .bss
48 alignb 4
49EXE_endbss:
50
51EXE_acodesize equ (EXE_endcode-EXE_startcode+3) & (~3)
52EXE_datasize equ EXE_enddata-EXE_startdata
53EXE_absssize equ (EXE_endbss-EXE_startbss+3) & (~3)
54EXE_allocsize equ EXE_acodesize + EXE_datasize
55
56EXE_stack_size equ 0x800 ; default if nothing else was used
57%endmacro