Files
ZSNES/zsnes/src/macros.mac
2005-01-19 22:52:38 +00:00

159 lines
2.8 KiB
Plaintext

;Copyright (C) 1997-2005 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
;
;http://www.zsnes.com
;http://sourceforge.net/projects/zsnes
;
;This program is free software; you can redistribute it and/or
;modify it under the terms of the GNU General Public License
;as published by the Free Software Foundation; either
;version 2 of the License, or (at your option) any later
;version.
;
;This program is distributed in the hope that it will be useful,
;but WITHOUT ANY WARRANTY; without even the implied warranty of
;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;GNU General Public License for more details.
;
;You should have received a copy of the GNU General Public License
;along with this program; if not, write to the Free Software
;Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
bits 32
section .text
; Zsnes required macros
%define ZVERSION '1.42'
%ifdef ELF
%imacro newsym 1
GLOBAL %1
%1:
%endmacro
%imacro newsym 2+
GLOBAL %1
%1: %2
%endmacro
%define EXTSYM EXTERN
%macro ALIGN32 0
times ($$-$) & 1Fh nop ; Long word alignment
%endmacro
%macro ALIGN16 0
times ($$-$) & 1Fh nop ; Long word alignment
%endmacro
%else
%imacro newsym 1
GLOBAL _%1
_%1:
%1:
%endmacro
%imacro newsym 2+
GLOBAL _%1
_%1:
%1: %2
%endmacro
%macro ALIGN32 0
times ($$-$) & 1Fh nop ; Long word alignment
%endmacro
%macro ALIGN16 0
times ($$-$) & 1Fh nop ; Long word alignment
%endmacro
%imacro extsym 1-*
%rep %0
EXTERN _%1
%define %1 _%1
%rotate 1
%endrep
%endmacro
%endif
; macro more or less similar to STUB_FUNCTION
; you can call it without argument,
; or with a string arg which will be displayed
%macro STUB_ASM 0-1 "STUB_ASM"
%ifndef __PRINTF__
%define __PRINTF__
EXTSYM printf
%endif
[section .data]
%%string: db %1, 0
%%strformat: db '%s in %s line %u',13, 10,0
%%filename: db __FILE__, 0
__SECT__
;stubasm:
pushad
mov eax, __LINE__
push eax
mov eax, %%filename
push eax
mov eax, %%string
push eax
mov eax, %%strformat
push eax
call printf
add esp, 16
popad
%endmacro
; same as above but prints the string
; whose address is the argument to the macros
%macro STUB_ASM_STR 1
%ifndef __PRINTF__
%define __PRINTF__
EXTSYM printf
%endif
[section .data]
%%strformat: db '%s in %s line %u',13, 10,0
%%filename: db __FILE__, 0
__SECT__
;stubasm:
pushad
mov eax, __LINE__
push eax
mov eax, %%filename
push eax
mov eax, %1
push eax
mov eax, %%strformat
push eax
call printf
add esp, 16
popad
%endmacro
; same as above but prints a number
%macro STUB_ASM_INT 1
%ifndef __PRINTF__
%define __PRINTF__
EXTSYM printf
%endif
[section .data]
%%strformat: db '%x in %s line %u',13, 10,0
%%filename: db __FILE__, 0
__SECT__
;stubasm:
pushad
mov eax, __LINE__
push eax
mov eax, %%filename
push eax
mov eax, %1
push eax
mov eax, %%strformat
push eax
call printf
add esp, 16
popad
%endmacro