168 lines
3.1 KiB
PHP
168 lines
3.1 KiB
PHP
;Copyright (C) 1997-2001 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.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
; move al at address ebx
|
||
|
||
; branch instructions
|
||
%macro spcbrancher 0
|
||
inc ebp
|
||
ret
|
||
.branch
|
||
movsx ebx,byte [ebp]
|
||
inc ebp
|
||
add ebp,ebx
|
||
ret
|
||
%endmacro
|
||
|
||
; tcall instruction
|
||
%macro spctcall 1
|
||
mov ebx,ebp
|
||
sub ebx,spcRam
|
||
mov eax,[spcS]
|
||
mov [spcRam+eax],bh
|
||
dec byte [spcS]
|
||
mov eax,[spcS]
|
||
mov [spcRam+eax],bl
|
||
dec byte [spcS]
|
||
mov bx,[spcextraram+%1]
|
||
test byte[spcRam+0F1h],80h
|
||
jnz %%finished
|
||
mov bx,[spcRam+0FFC0h+%1]
|
||
%%finished
|
||
add ebx,spcRam
|
||
mov ebp,ebx
|
||
ret
|
||
%endmacro
|
||
|
||
; SET1 instruction
|
||
%macro set1 1
|
||
mov bl,[ebp]
|
||
add ebx,[spcRamDP]
|
||
inc ebp
|
||
push ebx
|
||
ReadByte
|
||
pop ebx
|
||
or al,%1
|
||
WriteByte
|
||
ret
|
||
%endmacro
|
||
|
||
; CLR1 instruction
|
||
%macro clr1 1
|
||
mov bl,[ebp]
|
||
add ebx,[spcRamDP]
|
||
inc ebp
|
||
push ebx
|
||
ReadByte
|
||
pop ebx
|
||
and al,%1
|
||
WriteByte
|
||
ret
|
||
%endmacro
|
||
|
||
; BBS instruction
|
||
%macro bbs 1
|
||
mov bl,[ebp]
|
||
add ebx,[spcRamDP]
|
||
ReadByte
|
||
test al,%1
|
||
jnz .dp0jump
|
||
add ebp,2
|
||
ret
|
||
.dp0jump
|
||
movsx ebx,byte [ebp+1]
|
||
add ebp,ebx
|
||
add ebp,2
|
||
ret
|
||
%endmacro
|
||
|
||
; BBC instruction
|
||
%macro bbc 1
|
||
mov bl,[ebp]
|
||
add ebx,[spcRamDP]
|
||
ReadByte
|
||
test al,%1
|
||
jz .dp0jump
|
||
add ebp,2
|
||
ret
|
||
.dp0jump
|
||
movsx ebx,byte [ebp+1]
|
||
add ebp,ebx
|
||
add ebp,2
|
||
ret
|
||
%endmacro
|
||
|
||
; OR A, instruction
|
||
%macro SPC_OR_A 0
|
||
or byte [spcA], al
|
||
mov al,[spcA]
|
||
mov [spcNZ],al
|
||
ret
|
||
%endmacro
|
||
|
||
; AND A, instruction
|
||
%macro SPC_AND_A 0
|
||
and byte [spcA], al
|
||
mov al,[spcA]
|
||
mov [spcNZ],al
|
||
ret
|
||
%endmacro
|
||
|
||
; EOR A, instruction
|
||
%macro SPC_EOR_A 0
|
||
xor byte [spcA], al
|
||
mov al,[spcA]
|
||
mov [spcNZ],al
|
||
ret
|
||
%endmacro
|
||
|
||
; CMP A, instruction
|
||
%macro SPC_CMP_A 0
|
||
cmp byte [spcA], al
|
||
cmc
|
||
SPCSetFlagnzc
|
||
%endmacro
|
||
|
||
%macro SPC_ADC_A 0
|
||
mov cl,[spcP]
|
||
shr cl,1
|
||
adc byte [spcA], al
|
||
SPCSetFlagnvhzc
|
||
%endmacro
|
||
|
||
%macro SPC_SBC_A 0
|
||
mov cl,[spcP]
|
||
xor cl,1
|
||
shr cl,1
|
||
sbb byte [spcA], al
|
||
cmc
|
||
SPCSetFlagnvhzc
|
||
%endmacro
|
||
|
||
%macro SPC_MOV_A 0
|
||
mov byte [spcA], al
|
||
mov [spcNZ],al
|
||
ret
|
||
%endmacro
|
||
|