diff options
Diffstat (limited to 'standard.mac')
-rw-r--r-- | standard.mac | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/standard.mac b/standard.mac new file mode 100644 index 0000000..a3e8eea --- /dev/null +++ b/standard.mac @@ -0,0 +1,189 @@ +;; -------------------------------------------------------------------------- +;; +;; Copyright 1996-2009 The NASM Authors - All Rights Reserved +;; See the file AUTHORS included with the NASM distribution for +;; the specific copyright holders. +;; +;; Redistribution and use in source and binary forms, with or without +;; modification, are permitted provided that the following +;; conditions are met: +;; +;; * Redistributions of source code must retain the above copyright +;; notice, this list of conditions and the following disclaimer. +;; * Redistributions in binary form must reproduce the above +;; copyright notice, this list of conditions and the following +;; disclaimer in the documentation and/or other materials provided +;; with the distribution. +;; +;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +;; CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +;; INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +;; MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +;; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +;; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +;; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +;; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +;; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +;; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +;; OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +;; EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +;; +;; -------------------------------------------------------------------------- + +; Standard macro set for NASM -*- nasm -*- + +; Macros to make NASM ignore some TASM directives before the first include +; directive. + + %idefine IDEAL + %idefine JUMPS + %idefine P386 + %idefine P486 + %idefine P586 + %idefine END + +; This is a magic token which indicates the end of the TASM macros +*END*TASM*MACROS* + +; Note that although some user-level forms of directives are defined +; here, not all of them are: the user-level form of a format-specific +; directive should be defined in the module for that directive. + +; These three need to be defined, though the actual definitions will +; be constantly updated during preprocessing. +%define __FILE__ +%define __LINE__ +%define __BITS__ + +%define __SECT__ ; it ought to be defined, even if as nothing + +%imacro section 1+.nolist +%define __SECT__ [section %1] + __SECT__ +%endmacro +%imacro segment 1+.nolist +%define __SECT__ [segment %1] + __SECT__ +%endmacro + +%imacro absolute 1+.nolist +%define __SECT__ [absolute %1] + __SECT__ +%endmacro + +%imacro struc 1-2.nolist 0 +%push +%define %$strucname %1 +[absolute %2] +%$strucname: ; allow definition of `.member' to work sanely +%endmacro +%imacro endstruc 0.nolist +%{$strucname}_size equ ($-%$strucname) +%pop +__SECT__ +%endmacro + +%imacro istruc 1.nolist +%push +%define %$strucname %1 +%$strucstart: +%endmacro +%imacro at 1-2+.nolist + times (%1-%$strucname)-($-%$strucstart) db 0 + %2 +%endmacro +%imacro iend 0.nolist + times %{$strucname}_size-($-%$strucstart) db 0 +%pop +%endmacro + +%imacro align 1-2+.nolist nop + times (((%1) - (($-$$) % (%1))) % (%1)) %2 +%endmacro +%imacro alignb 1-2+.nolist + %ifempty %2 + resb (((%1) - (($-$$) % (%1))) % (%1)) + %else + times (((%1) - (($-$$) % (%1))) % (%1)) %2 + %endif +%endmacro + +%imacro extern 1-*.nolist +%rep %0 +[extern %1] +%rotate 1 +%endrep +%endmacro + +%imacro bits 1+.nolist +[bits %1] +%endmacro + +%imacro use16 0.nolist +[bits 16] +%endmacro +%imacro use32 0.nolist +[bits 32] +%endmacro +%imacro use64 0.nolist +[bits 64] +%endmacro + +%imacro global 1-*.nolist +%rep %0 +[global %1] +%rotate 1 +%endrep +%endmacro + +%imacro common 1-*.nolist +%rep %0 +[common %1] +%rotate 1 +%endrep +%endmacro + +%imacro cpu 1+.nolist +[cpu %1] +%endmacro + +%define __FLOAT_DAZ__ nodaz +%define __FLOAT_ROUND__ near +; __FLOAT__ contains the whole floating-point configuration so it can +; be saved and restored +%define __FLOAT__ __FLOAT_DAZ__,__FLOAT_ROUND__ +%imacro float 1-*.nolist +%rep %0 +[float %1] +%ifidni %1,daz +%define __FLOAT_DAZ__ daz +%elifidni %1,nodaz +%define __FLOAT_DAZ__ nodaz +%elifidni %1,near +%define __FLOAT_ROUND__ near +%elifidni %1,up +%define __FLOAT_ROUND__ up +%elifidni %1,down +%define __FLOAT_ROUND__ down +%elifidni %1,zero +%define __FLOAT_ROUND__ zero +%elifidni %1,default +%define __FLOAT_DAZ__ nodaz +%define __FLOAT_ROUND__ near +%endif +%rotate 1 +%endrep +%endmacro + +%imacro default 1+.nolist +[default %1] +%endmacro + +%imacro incbin 1-2+.nolist 0 +%push +%pathsearch %$dep %1 +%depend %$dep + %? %$dep,%2 +%pop +%endmacro |