diff --git a/zsnes/src/cpu/65816dc.inc b/zsnes/src/cpu/65816dc.inc index 5cb04e0b..4323f1a7 100644 --- a/zsnes/src/cpu/65816dc.inc +++ b/zsnes/src/cpu/65816dc.inc @@ -52,21 +52,21 @@ EXTSYM dmadata %macro restoredl 0 mov dword[flagnz],0 test dl,80h - jz near %%noneg + jz %%noneg or dword[flagnz],10000h %%noneg test dl,2h - jnz near %%zero + jnz %%zero or dword[flagnz],1 %%zero mov dword[flagc],0 test dl,01h - jz near %%nocarry + jz %%nocarry mov dword[flagc],0FFh %%nocarry mov dword[flago],0 test dl,40h - jz near %%nov + jz %%nov mov dword[flago],0FFh %%nov %endmacro @@ -799,25 +799,21 @@ COPemulmode sub ebx,[initaddrl] add bx,2 mov [xpc],bx - - mov cx,[xs] - mov al,[xpb] - call membank0w8 - - dec cx - or cx,word[stackor] - mov al,[xpc+1] - call membank0w8 - - dec cx - or cx,word[stackor] - mov al,[xpc] - call membank0w8 - - dec cx - or cx,word[stackor] - - mov [xs],cx + mov eax,[wramdata] + mov bx,[xs] + mov cl,[xpb] + mov [eax+ebx],cl + dec bx + or bx,word[stackor] + mov cl,[xpc+1] + mov [eax+ebx],cl + dec bx + or bx,word[stackor] + mov cl,[xpc] + mov [eax+ebx],cl + dec bx + or bx,word[stackor] + mov [xs],bx xor eax,eax xor bh,bh mov ax,[esi] @@ -842,25 +838,20 @@ COPemulmode sub ebx,[initaddrl] inc bx mov [xpc],bx - - mov cx,[xs] - mov al,[xpc+1] - call membank0w8 - - dec cx - or cx,word[stackor] - mov al,[xpc] - call membank0w8 - - dec cx - or cx,word[stackor] - + mov eax,[wramdata] + mov bx,[xs] + mov cl,[xpc+1] + mov [eax+ebx],cl + dec bx + or bx,word[stackor] + mov cl,[xpc] + mov [eax+ebx],cl + dec bx + or bx,word[stackor] xor eax,eax - mov [xs],cx - + mov [xs],bx mov ax,[esi] xor bh,bh - mov [xpc],ax mov bl,[xpb] test eax,8000h @@ -894,23 +885,17 @@ COPemulmode sub ebx,[initaddrl] inc bx mov [xpc],bx - - mov cx,[xs] - mov al,[xpc+1] - call membank0w8 - - dec cx - or cx,word[stackor] - mov al,[xpc] - call membank0w8 - - dec cx - or cx,word[stackor] - - xor eax,eax - mov [xs],cx - - + mov eax,[wramdata] + mov bx,[xs] + mov cl,[xpc+1] + mov [eax+ebx],cl + dec bx + or bx,word[stackor] + mov cl,[xpc] + mov [eax+ebx],cl + dec bx + or bx,word[stackor] + mov [xs],bx xor eax,eax xor bh,bh mov cx,[esi] @@ -1228,21 +1213,21 @@ COPemulmode %endmacro %macro POPMacroP 0 - mov cx,[xs] - inc cx - and cx,word[stackand] - call membank0r8 - mov [xs],cx - + mov eax,[wramdata] + mov bx,[xs] + inc bx + and bx,word[stackand] + mov cl,[eax+ebx] + mov [xs],bx xor bh,bh - mov dl,al + mov dl,cl restoredl test byte[xe],01h jnz near .emul mov bl,dl mov edi,[tableadc+ebx*4] test dl,00010000b - jnz near .setx + jnz .setx endloop .setx mov byte[xx+1],0 @@ -1319,55 +1304,41 @@ COPemulmode %endmacro %macro RTIMacro 0 - mov byte[doirqnext],0 cmp byte[nmistatus],3 - jne near .nodis658162 + jne .nodis658162 test byte[curexecstate],01h - jz near .nodis65816 + jz .nodis65816 and byte[curexecstate],0FEh call changeexecloop .nodis65816 cmp byte[curexecstate],0 - jne near .nn + jne .nn xor dh,dh .nn .nodis658162 mov byte[curnmi],0 test byte[xe],1 jne near emulRTI - - mov cx,[xs] - inc cx - and cx,word[stackand] - call membank0r8 - mov [xs],cx - - mov dl,al + mov eax,[wramdata] + mov bx,[xs] + inc bx + and bx,word[stackand] + mov dl,[eax+ebx] restoredl - - mov cx,[xs] - inc cx - and cx,word[stackand] - xor eax,eax - call membank0r8 - mov [xpc],al - - inc cx - and cx,word[stackand] - xor eax,eax - call membank0r8 - mov [xpc+1],al - - inc cx - and cx,word[stackand] - xor eax,eax - call membank0r8 + inc bx + and bx,word[stackand] + mov cl,[eax+ebx] + inc bx + and bx,word[stackand] + mov ch,[eax+ebx] + inc bx + and bx,word[stackand] + mov al,[eax+ebx] mov [xpb],al - mov [xs],cx - + mov [xs],bx xor bh,bh xor eax,eax - mov ax,[xpc] + mov ax,cx mov bl,dl mov edi,[tableadc+ebx*4] mov bl,[xpb] @@ -1387,7 +1358,7 @@ COPemulmode mov [initaddrl],esi add esi,eax test dl,00010000b - jnz near .setx + jnz .setx endloop .setx mov byte[xx+1],0 @@ -1410,40 +1381,29 @@ COPemulmode endloop emulRTI - mov cx,[xs] - inc cx - and cx,word[stackand] - call membank0r8 - mov [xs],cx - - mov dl,al + mov eax,[wramdata] + mov bx,[xs] + inc bx + and bx,word[stackand] + mov dl,[eax+ebx] or dl,00110000b restoredl - - mov cx,[xs] - inc cx - and cx,word[stackand] - xor eax,eax - call membank0r8 - mov [xpc],al - - inc cx - and cx,word[stackand] - xor eax,eax - call membank0r8 - mov [xpc+1],al - mov [xs],cx - - + inc bx + and bx,word[stackand] + mov cl,[eax+ebx] + inc bx + and bx,word[stackand] + mov ch,[eax+ebx] + mov [xs],bx xor bh,bh xor eax,eax - mov ax,[xpc] + mov ax,cx mov bl,dl mov edi,[tableadc+ebx*4] xor bl,bl mov [xpc],ax test eax,8000h - jz near .loweraddr + jz .loweraddr mov esi,[snesmmap+ebx*4] mov [initaddrl],esi add esi,eax @@ -1456,49 +1416,27 @@ emulRTI %endmacro %macro RTLMacro 0 - - mov cx,[xs] - inc cx - and cx,word[stackand] - xor eax,eax - call membank0r8 - mov [xpc],al - - inc cx - and cx,word[stackand] - xor eax,eax - call membank0r8 - mov [xpc+1],al - - inc cx - and cx,word[stackand] - xor eax,eax - call membank0r8 + mov eax,[wramdata] + mov bx,[xs] + inc bx + and bx,word[stackand] + mov cl,[eax+ebx] + inc bx + and bx,word[stackand] + mov ch,[eax+ebx] + inc bx + and bx,word[stackand] + mov al,[eax+ebx] mov [xpb],al - -; inc bx -; and bx,word[stackand] -; mov cl,[eax+ebx] - -; inc bx -; and bx,word[stackand] -; mov ch,[eax+ebx] - -; inc bx -; and bx,word[stackand] -; mov al,[eax+ebx] - -; mov [xpb],al - - mov [xs],cx + mov [xs],bx xor bh,bh xor eax,eax - mov ax,[xpc] + mov ax,cx inc ax mov bl,[xpb] mov [xpc],ax test eax,8000h - jz near .loweraddr + jz .loweraddr mov esi,[snesmmap+ebx*4] mov [initaddrl],esi add esi,eax @@ -1511,27 +1449,23 @@ emulRTI %endmacro %macro RTSMacro 0 - - mov cx,[xs] - inc cx - and cx,word[stackand] - call membank0r8 - mov [xpc],al - - inc cx - and cx,word[stackand] - call membank0r8 - mov [xpc+1],al - - mov [xs],cx + mov eax,[wramdata] + mov bx,[xs] + inc bx + and bx,word[stackand] + mov cl,[eax+ebx] + inc bx + and bx,word[stackand] + mov ch,[eax+ebx] + mov [xs],bx xor bh,bh xor eax,eax - mov ax,[xpc] + mov ax,cx inc ax mov [xpc],ax mov bl,[xpb] test eax,8000h - jz near .loweraddr + jz .loweraddr mov esi,[snesmmap+ebx*4] mov [initaddrl],esi add esi,eax