154 lines
2.7 KiB
Plaintext
154 lines
2.7 KiB
Plaintext
;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
|