/* Allow ".name" identifiers */\r
OPTION DOTNAME\r
\r
+#ifdef _M_IX86\r
.686P\r
.XMM\r
.MODEL FLAT\r
ASSUME CS:NOTHING, DS:NOTHING, ES:NOTHING, FS:NOTHING, GS:NOTHING\r
+#endif\r
\r
/* Hex numbers need to be in 01ABh format */\r
#define HEX(x) 0##x##h\r
\r
/* To avoid reverse syntax we provide a new macro .PROC, replacing PROC... */\r
.PROC MACRO name\r
- name PROC FRAME\r
- _name:\r
+__current_function_name EQU %name\r
+#ifdef _M_IX86\r
+ %name PROC\r
+#else\r
+ %name PROC FRAME\r
+#endif\r
ENDM\r
+#define FUNC .PROC\r
\r
/* ... and .ENDP, replacing ENDP */\r
-.ENDP MACRO name\r
- name ENDP\r
+.ENDP MACRO\r
+ %__current_function_name ENDP\r
+ENDM\r
+#define ENDFUNC .ENDP\r
+\r
+/* check http://msdn.microsoft.com/en-us/library/9c9k076y%28VS.80%29.aspx\r
+ and http://msdn.microsoft.com/en-us/library/ms679352%28VS.85%29.aspx */\r
+FPO MACRO cdwLocals, cdwParams, cbProlog, cbRegs, fUseBP, cbFrame\r
+ .FPO (cdwLocals, cdwParams, cbProlog, cbRegs, fUseBP, cbFrame)\r
ENDM\r
\r
/* MASM doesn't have an ASCII macro */\r
-.ASCII MACRO text\r
+.ASCII MACRO text:VARARG\r
+ DB text\r
+ENDM\r
+.ascii MACRO text:VARARG\r
DB text\r
ENDM\r
\r
/* MASM doesn't have an ASCIZ macro */\r
-.ASCIZ MACRO text\r
- DB text, 0\r
+.ASCIZ MACRO text:VARARG\r
+ DB text\r
+ DB 0\r
ENDM\r
-\r
-#define lgdt lgdt fword ptr ds:\r
-\r
-#define lidt lidt fword ptr ds:\r
-\r
-ljmp MACRO segment, offset\r
+.asciz MACRO text:VARARG\r
+ DB text\r
DB 0\r
ENDM\r
\r
.code16 MACRO\r
ASSUME nothing\r
.text SEGMENT use16\r
+ .586P\r
ENDM\r
\r
.endcode16 MACRO\r
ORG value\r
ENDM\r
\r
-.fill MACRO repeat, size, value\r
-// FIXME\r
+.fill MACRO count, size, value\r
+ REPEAT count\r
+ if (size EQ 1)\r
+ DB value\r
+ elseif (size EQ 2)\r
+ DW value\r
+ elseif (size EQ 4)\r
+ DD value\r
+ endif\r
+ ENDM\r
+ENDM\r
+\r
+.space MACRO count\r
+ DB 0 DUP (count)\r
ENDM\r
\r
ljmp MACRO segment, offset\r
-// FIXME\r
+ DB 0EAh\r
+ DD offset\r
+ DW segment\r
+ENDM\r
+\r
+ljmp16 MACRO segment, offset\r
+ DB 0EAh\r
+ DW offset\r
+ DW segment\r
+ENDM\r
+\r
+data32 MACRO opcode:VARARG\r
+ DB 66h\r
+ opcode\r
ENDM\r
\r
UNIMPLEMENTED MACRO name\r
ENDM\r
\r
+absolute MACRO address\r
+ __absolute__address__ = address\r
+ENDM\r
+\r
+resb MACRO name, size\r
+ name = __absolute__address__\r
+ __absolute__address__ = __absolute__address__ + size\r
+ENDM\r
+\r
+\r
/* We need this to distinguish repeat from macros */\r
#define ENDR ENDM\r
\r
+#define CR 13\r
+#define LF 10\r
+#define NUL 0\r
+\r
#else /***********************************************************************/\r
\r
/* Force intel syntax */\r
/* To avoid reverse syntax we provide a new macro .PROC, replacing PROC... */\r
.macro .PROC name\r
.func \name\r
+#ifdef _X86_\r
+ /* x86 gas expects a label with _ prefix */\r
+ _\name:\r
+#endif\r
\name:\r
.cfi_startproc\r
.equ cfa_current_offset, -8\r
.endm\r
+#define FUNC .PROC\r
\r
/* ... and .ENDP, replacing ENDP */\r
-.macro .ENDP name\r
+.macro .ENDP\r
.cfi_endproc\r
.endfunc\r
.endm\r
+#define ENDFUNC .ENDP\r
\r
/* MASM compatible PUBLIC */\r
.macro PUBLIC symbol\r
jmp far ptr \segment:\offset\r
.endm\r
\r
+.macro ljmp16 segment, offset\r
+ jmp far ptr \segment:\offset\r
+.endm\r
+\r
/* MASM compatible EXTERN */\r
.macro EXTERN name\r
.endm\r
.text\r
.endm\r
\r
+/* check http://msdn.microsoft.com/en-us/library/9c9k076y%28VS.80%29.aspx\r
+ and http://msdn.microsoft.com/en-us/library/ms679352%28VS.85%29.aspx */\r
+.macro FPO cdwLocals, cdwParams, cbProlog, cbRegs, fUseBP, cbFrame\r
+ /* dummy */\r
+.endm\r
+\r
/* Macros for x64 stack unwind OPs */\r
\r
.macro .allocstack size\r
.macro .endprolog\r
.endm\r
\r
+.macro absolute address\r
+ __absolute__address__ = \address\r
+ENDM\r
+\r
+.macro resb name, size\r
+ \name = __absolute__address__\r
+ __absolute__address__ = __absolute__address__ + \size\r
+ENDM\r
+\r
.macro UNIMPLEMENTED2 file, line, func\r
\r
jmp 3f\r
#define else .else\r
#define elseif .elseif\r
\r
+#define CR "\r"\r
+#define LF "\n"\r
+#define NUL "\0"\r
+\r
#endif\r
+\r
+/* Common definitions for FPO macro\r
+ see http://msdn.microsoft.com/en-us/library/ms679352%28VS.85%29.aspx */\r
+#define FRAME_FPO 0\r
+#define FRAME_TRAP 1\r
+#define FRAME_TSS 2\r
+#define FRAME_NONFPO 3\r