www.pudn.com > zsnes117b-src.zip > spcdef.inc


;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