;Copyright (C) 1997-2004 ZSNES Team ( zsknight@zsnes.com / _demo_@zsnes.com ) ; ;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.40' %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