From 94ed60af40942c8763b227913da0ef6584a70f47 Mon Sep 17 00:00:00 2001 From: grinvader <> Date: Thu, 15 Sep 2005 00:12:00 +0000 Subject: [PATCH] Little source cleanup --- zsnes/src/cpu/spc700.asm | 3999 +++++++++++++++++++------------------- 1 file changed, 1963 insertions(+), 2036 deletions(-) diff --git a/zsnes/src/cpu/spc700.asm b/zsnes/src/cpu/spc700.asm index a010b514..5f15b4e7 100644 --- a/zsnes/src/cpu/spc700.asm +++ b/zsnes/src/cpu/spc700.asm @@ -41,9 +41,9 @@ SECTION .data ALIGN32 -;spcBuffer times 65536*4 db 0 ; The buffer of brr blocks... 4 bits -> 16 bits -;spcRamcmp times 65536 db 0 ; SPC Ram compare buffer -;spcPrevbf times 65536 db 0 ; SPC PrevX compare buffer +;spcBuffer times 65536*4 db 0 ; The buffer of brr blocks... 4 bits -> 16 bits +;spcRamcmp times 65536 db 0 ; SPC Ram compare buffer +;spcPrevbf times 65536 db 0 ; SPC PrevX compare buffer NEWSYM SPCRAM, times 65472 db 0FFh ; Pointer to the SPC's RAM ; copy #1 ; THE SPC ROM :) @@ -54,32 +54,32 @@ NEWSYM SPCRAM, times 65472 db 0FFh ; Pointer to the SPC's RAM db 0AAh,0BBh,0CCh,0DDh,0EEh,0FFh,000h,011h,022h,033h,044h,055h,066h,077h,088h,099h NEWSYM spcPCRam, - dd 0 ; Program Counter (with SPCRAM added) + dd 0 ; Program Counter (with SPCRAM added) NEWSYM spcA, - db 0 ; The A register (general purpose) - db 0 - db 0 - db 0 + db 0 ; The A register (general purpose) + db 0 + db 0 + db 0 NEWSYM spcX, - db 0 ; The X register (general purpose) - db 0 - db 0 - db 0 + db 0 ; The X register (general purpose) + db 0 + db 0 + db 0 NEWSYM spcY, - db 0 ; The Y register (general purpose) - db 0 - db 0 - db 0 + db 0 ; The Y register (general purpose) + db 0 + db 0 + db 0 NEWSYM spcP, - db 0 ; The processor status byte (Removed for each flags) - db 0 ; NZ are not always processed... - db 0 - db 0 + db 0 ; The processor status byte (Removed for each flags) + db 0 ; NZ are not always processed... + db 0 + db 0 NEWSYM spcNZ, - db 0 ; The processor NZ flag (little speed up hack :) ) - db 0 - db 0 - db 0 + db 0 ; The processor NZ flag (little speed up hack :) ) + db 0 + db 0 + db 0 ;spcNF db 0 ; The Negative Flag 128 or 127 @@ -88,10 +88,10 @@ NEWSYM spcNZ, ;spcUF db 0 ; The Unused Flag ? 16 or 239 ;spcHCF db 0 ; The Half Carry Flag 8 or 247 ;spcIF db 0 ; The interrupt flag 4 or 251 -;spcZF db 0 ; The Zero Flag 2 or 253 -;spcCF db 0 ; The Carry Flag 1 or 254 +;spcZF db 0 ; The Zero Flag 2 or 253 +;spcCF db 0 ; The Carry Flag 1 or 254 -NEWSYM spcS, dd 1FFh ; The stack pointer (always from 100 to 1FF) (added Ram) +NEWSYM spcS, dd 1FFh ; The stack pointer (always from 100 to 1FF) (added Ram) NEWSYM spcRamDP, dd 0 ; The direct page pointer NEWSYM spcCycle, dd 0 ; The Cycle Counter NEWSYM reg1read, db 0 ; read from 65816 @@ -198,422 +198,352 @@ SECTION .text ; 2 8khz, 1 64khz NEWSYM updatetimer -; inc dword[timer2upd] -; cmp dword[timer2upd],400 -; jne .nowrap -; mov dword[timer2upd],0 +; inc dword[timer2upd] +; cmp dword[timer2upd],400 +; jne .nowrap +; mov dword[timer2upd],0 ;.nowrap ;.again -; mov eax,dword[timer2upd] -; shr eax,6 -; shl eax,6 -; cmp eax,dword[timer2upd] -; je near .noin2d +; mov eax,dword[timer2upd] +; shr eax,6 +; shl eax,6 +; cmp eax,dword[timer2upd] +; je near .noin2d .another - xor byte[timrcall],01h - test byte[timrcall],01h - jz near .notimer - test byte[timeron],1 - jz .noin0 - dec byte[timinl0] - jnz .noin0 - inc byte[SPCRAM+0FDh] - mov al,[timincr0] - mov [timinl0],al - cmp byte[SPCRAM+0FDh],1 - jne .noin0 -; cmp byte[spchalted],0 -; jz .noin0 - reenablespc - mov dword[cycpbl],0 + xor byte[timrcall],01h + test byte[timrcall],01h + jz near .notimer + test byte[timeron],1 + jz .noin0 + dec byte[timinl0] + jnz .noin0 + inc byte[SPCRAM+0FDh] + mov al,[timincr0] + mov [timinl0],al + cmp byte[SPCRAM+0FDh],1 + jne .noin0 +; cmp byte[spchalted],0 +; jz .noin0 + reenablespc + mov dword[cycpbl],0 .noin0 - test byte[timeron],2 - jz .noin1 - dec byte[timinl1] - jnz .noin1 - inc byte[SPCRAM+0FEh] - mov al,[timincr1] - mov [timinl1],al - cmp byte[SPCRAM+0FEh],1 - jne .noin1 -; cmp byte[spchalted+1],0 -; jz .noin1 - reenablespc - mov dword[cycpbl],0 + test byte[timeron],2 + jz .noin1 + dec byte[timinl1] + jnz .noin1 + inc byte[SPCRAM+0FEh] + mov al,[timincr1] + mov [timinl1],al + cmp byte[SPCRAM+0FEh],1 + jne .noin1 +; cmp byte[spchalted+1],0 +; jz .noin1 + reenablespc + mov dword[cycpbl],0 .noin1 .notimer - test byte[timeron],4 - jz near .noin2d2 - dec byte[timinl2] - jnz .noin2 - inc byte[SPCRAM+0FFh] - mov al,[timincr2] - mov [timinl2],al - cmp byte[SPCRAM+0FFh],1 - jne .noin2 -; cmp byte[spchalted+2],0 -; jz .noin2 - reenablespc - mov dword[cycpbl],0 + test byte[timeron],4 + jz near .noin2d2 + dec byte[timinl2] + jnz .noin2 + inc byte[SPCRAM+0FFh] + mov al,[timincr2] + mov [timinl2],al + cmp byte[SPCRAM+0FFh],1 + jne .noin2 +; cmp byte[spchalted+2],0 +; jz .noin2 + reenablespc + mov dword[cycpbl],0 .noin2 - dec byte[timinl2] - jnz .noin2b - inc byte[SPCRAM+0FFh] - mov al,[timincr2] - mov [timinl2],al - cmp byte[SPCRAM+0FFh],1 - jne .noin2b -; cmp byte[spchalted+2],0 -; jz .noin2b - reenablespc - mov dword[cycpbl],0 + dec byte[timinl2] + jnz .noin2b + inc byte[SPCRAM+0FFh] + mov al,[timincr2] + mov [timinl2],al + cmp byte[SPCRAM+0FFh],1 + jne .noin2b +; cmp byte[spchalted+2],0 +; jz .noin2b + reenablespc + mov dword[cycpbl],0 .noin2b - dec byte[timinl2] - jnz .noin2c - inc byte[SPCRAM+0FFh] - mov al,[timincr2] - mov [timinl2],al - cmp byte[SPCRAM+0FFh],1 - jne .noin2c -; cmp byte[spchalted+2],0 -; jz .noin2c - reenablespc - mov dword[cycpbl],0 + dec byte[timinl2] + jnz .noin2c + inc byte[SPCRAM+0FFh] + mov al,[timincr2] + mov [timinl2],al + cmp byte[SPCRAM+0FFh],1 + jne .noin2c +; cmp byte[spchalted+2],0 +; jz .noin2c + reenablespc + mov dword[cycpbl],0 .noin2c - dec byte[timinl2] - jnz .noin2d - inc byte[SPCRAM+0FFh] - mov al,[timincr2] - mov [timinl2],al - cmp byte[SPCRAM+0FFh],1 - jne .noin2d -; cmp byte[spchalted+2],0 -; jz .noin2d - reenablespc - mov dword[cycpbl],0 + dec byte[timinl2] + jnz .noin2d + inc byte[SPCRAM+0FFh] + mov al,[timincr2] + mov [timinl2],al + cmp byte[SPCRAM+0FFh],1 + jne .noin2d +; cmp byte[spchalted+2],0 +; jz .noin2d + reenablespc + mov dword[cycpbl],0 .noin2d .noin2d2 -; inc dword[timer2upd] -; cmp dword[timer2upd],31 -; jne .nowrap -; mov dword[timer2upd],0 -; jmp .again +; inc dword[timer2upd] +; cmp dword[timer2upd],31 +; jne .nowrap +; mov dword[timer2upd],0 +; jmp .again ;.nowrap - inc dword[timer2upd] - cmp dword[timer2upd],60 - jne .noanother - mov dword[timer2upd],0 - jmp .another + inc dword[timer2upd] + cmp dword[timer2upd],60 + jne .noanother + mov dword[timer2upd],0 + jmp .another .noanother - ret + ret ; SPC Write Registers ; DO NOT MODIFY DX OR ECX! NEWSYM SPCRegF0 - mov [SPCRAM+0F0h],al - ret + mov [SPCRAM+0F0h],al + ret NEWSYM SPCRegF1 - cmp byte[disablespcclr],1 - je .No23Clear - test al,10h - jz .No01Clear - mov byte[SPCRAM+0F4h],0 - mov byte[SPCRAM+0F5h],0 + cmp byte[disablespcclr],1 + je .No23Clear + test al,10h + jz .No01Clear + mov byte[SPCRAM+0F4h],0 + mov byte[SPCRAM+0F5h],0 .No01Clear - test al,20h - jz .No23Clear - mov byte[SPCRAM+0F6h],0 - mov byte[SPCRAM+0F7h],0 + test al,20h + jz .No23Clear + mov byte[SPCRAM+0F6h],0 + mov byte[SPCRAM+0F7h],0 .No23Clear - cmp byte[SPCSkipXtraROM],1 - je near .AfterNoROM - test al,80h - jz .NoROM - push eax - push ebx - xor eax,eax + cmp byte[SPCSkipXtraROM],1 + je near .AfterNoROM + test al,80h + jz .NoROM + push eax + push ebx + xor eax,eax .loopa - mov bl,[SPCROM+eax] - mov [SPCRAM+0FFC0h+eax],bl - inc eax - cmp eax,040h - jne .loopa - pop ebx - pop eax - jmp .AfterNoROM + mov bl,[SPCROM+eax] + mov [SPCRAM+0FFC0h+eax],bl + inc eax + cmp eax,040h + jne .loopa + pop ebx + pop eax + jmp .AfterNoROM .NoROM - push eax - push ebx - xor eax,eax + push eax + push ebx + xor eax,eax .loopb - mov bl,[spcextraram+eax] - mov [SPCRAM+0FFC0h+eax],bl - inc eax - cmp eax,040h - jne .loopb - pop ebx - pop eax + mov bl,[spcextraram+eax] + mov [SPCRAM+0FFC0h+eax],bl + inc eax + cmp eax,040h + jne .loopb + pop ebx + pop eax .AfterNoROM - mov [SPCRAM+0F1h],al - and al,0Fh - mov [timeron],al - ret + mov [SPCRAM+0F1h],al + and al,0Fh + mov [timeron],al + ret NEWSYM SPCRegF2 - mov [SPCRAM+0F2h],al - push eax - push ebx - xor eax,eax - mov al,[SPCRAM+0F2h] - mov bl,[DSPMem+eax] - mov [SPCRAM+0F3h],bl - pop ebx - pop eax - ret + mov [SPCRAM+0F2h],al + push eax + push ebx + xor eax,eax + mov al,[SPCRAM+0F2h] + mov bl,[DSPMem+eax] + mov [SPCRAM+0F3h],bl + pop ebx + pop eax + ret NEWSYM SPCRegF3 - push ebx - xor ebx,ebx - mov bl,[SPCRAM+0F2h] - and bl,07fh - call dword near [dspWptr+ebx*4] - pop ebx - mov [SPCRAM+ebx],al - ret + push ebx + xor ebx,ebx + mov bl,[SPCRAM+0F2h] + and bl,07fh + call dword near [dspWptr+ebx*4] + pop ebx + mov [SPCRAM+ebx],al + ret NEWSYM SPCRegF4 - mov [reg1read],al - inc dword[spc700read] - ret + mov [reg1read],al + inc dword[spc700read] + ret NEWSYM SPCRegF5 - mov [reg2read],al - inc dword[spc700read] - ret + mov [reg2read],al + inc dword[spc700read] + ret NEWSYM SPCRegF6 - mov [reg3read],al - inc dword[spc700read] - ret + mov [reg3read],al + inc dword[spc700read] + ret NEWSYM SPCRegF7 - mov [reg4read],al - inc dword[spc700read] - ret + mov [reg4read],al + inc dword[spc700read] + ret NEWSYM SPCRegF8 - mov [SPCRAM+ebx],al - ret + mov [SPCRAM+ebx],al + ret NEWSYM SPCRegF9 - mov [SPCRAM+ebx],al - ret + mov [SPCRAM+ebx],al + ret NEWSYM SPCRegFA - mov [timincr0],al - test byte[timinl0],0FFh - jne .nowrite - mov [timinl0],al + mov [timincr0],al + test byte[timinl0],0FFh + jne .nowrite + mov [timinl0],al .nowrite - mov [SPCRAM+ebx],al - ret + mov [SPCRAM+ebx],al + ret NEWSYM SPCRegFB - mov [timincr1],al - test byte[timinl1],0FFh - jne .nowrite - mov [timinl1],al + mov [timincr1],al + test byte[timinl1],0FFh + jne .nowrite + mov [timinl1],al .nowrite - mov [SPCRAM+ebx],al - ret + mov [SPCRAM+ebx],al + ret NEWSYM SPCRegFC - mov [timincr2],al - test byte[timinl2],0FFh - jne .nowrite - mov [timinl2],al + mov [timincr2],al + test byte[timinl2],0FFh + jne .nowrite + mov [timinl2],al .nowrite - mov [SPCRAM+ebx],al - ret + mov [SPCRAM+ebx],al + ret NEWSYM SPCRegFD - ret + ret NEWSYM SPCRegFE - ret + ret NEWSYM SPCRegFF - ret + ret ; SPC Read Registers ; DO NOT MODIFY ANY REG! ; return data true al NEWSYM RSPCRegF0 - mov al,[SPCRAM+0f0h] - ret + mov al,[SPCRAM+0f0h] + ret NEWSYM RSPCRegF1 - mov al,[SPCRAM+0f1h] - ret + mov al,[SPCRAM+0f1h] + ret NEWSYM RSPCRegF2 - mov al,[SPCRAM+0f2h] - ret + mov al,[SPCRAM+0f2h] + ret NEWSYM RSPCRegF3 - mov al,[SPCRAM+0f3h] - ret - -%ifdef SPCDUMP -SECTION .bss -ALIGNB 4 -NEWSYM SPCSave_start, resd 2 -NEWSYM SPCSave_buffer, resb 4 -NEWSYM SPCSave_ports, resb 4 -SECTION .text - -EXTSYM SPCSave_dump, SPCSave_handle, Write_File - -%macro spcdump 1 - cmp byte[SPCSave_dump], 1 - jne %%nodump - - inc dword[SPCSave_buffer] - cmp [SPCSave_ports+%1], al - je %%nodump - mov [SPCSave_ports+%1], al - pushad - mov byte[SPCSave_buffer+2], %1 - mov [SPCSave_buffer+3], al - mov ebx, [SPCSave_handle] - mov ecx, 4 - mov edx, SPCSave_buffer - call Write_File - xor eax, eax - mov [SPCSave_buffer], eax - - popad -%%nodump -%endmacro -%endif - + mov al,[SPCRAM+0f3h] + ret NEWSYM RSPCRegF4 - mov al,[SPCRAM+0f4h] -%ifdef SPCDUMP - spcdump 0 -%endif - ret + mov al,[SPCRAM+0f4h] + ret NEWSYM RSPCRegF5 - mov al,[SPCRAM+0f5h] -%ifdef SPCDUMP - spcdump 1 -%endif - ret + mov al,[SPCRAM+0f5h] + ret NEWSYM RSPCRegF6 - mov al,[SPCRAM+0f6h] -%ifdef SPCDUMP - spcdump 2 -%endif - ret + mov al,[SPCRAM+0f6h] + ret NEWSYM RSPCRegF7 - mov al,[SPCRAM+0f7h] -%ifdef SPCDUMP - spcdump 3 -%endif - ret + mov al,[SPCRAM+0f7h] + ret NEWSYM RSPCRegF8 - mov al,0 ;[SPCRAM+0f8h] - ret + mov al,0 ;[SPCRAM+0f8h] + ret NEWSYM RSPCRegF9 - mov al,0 ;[SPCRAM+0f9h] - ret + mov al,0 ;[SPCRAM+0f9h] + ret NEWSYM RSPCRegFA - mov al,[SPCRAM+0fah] - ret + mov al,[SPCRAM+0fah] + ret NEWSYM RSPCRegFB - mov al,[SPCRAM+0fbh] - ret + mov al,[SPCRAM+0fbh] + ret NEWSYM RSPCRegFC - mov al,[SPCRAM+0fch] - ret + mov al,[SPCRAM+0fch] + ret %macro skipmacro 1 .spcnextskip - test byte[timeron],1<<%1 - je .ret - cmp byte[timincr0+%1],0 - je .ret - ;cmp byte[SpeedHack],0 - ;je .ret - inc byte[spcnumread+%1] - cmp byte[spcnumread+%1],8h - je near haltspc + test byte[timeron],1<<%1 + je .ret + cmp byte[timincr0+%1],0 + je .ret + ;cmp byte[SpeedHack],0 + ;je .ret + inc byte[spcnumread+%1] + cmp byte[spcnumread+%1],8h + je near haltspc .ret ret %endmacro ALIGN16 NEWSYM haltspc - cmp byte[SPC700sh],1 - je .nochangestate - mov dword[cycpbl],0FFFFFFFFh - test byte[curexecstate],02h - jz .nochangestate - and byte[curexecstate],0FDh - push ebx + cmp byte[SPC700sh],1 + je .nochangestate + mov dword[cycpbl],0FFFFFFFFh + test byte[curexecstate],02h + jz .nochangestate + and byte[curexecstate],0FDh + push ebx - mov ebx,[spcnumread] - mov [spchalted],ebx + mov ebx,[spcnumread] + mov [spchalted],ebx - xor ebx,ebx - mov bl,dl - mov edi,[tableadb+ebx*4] - pop ebx + xor ebx,ebx + mov bl,dl + mov edi,[tableadb+ebx*4] + pop ebx .nochangestate - mov dword[spcnumread],0 - ret + mov dword[spcnumread],0 + ret NEWSYM RSPCRegFD - mov al,[SPCRAM+0fdh] - and al,0Fh - cmp byte[SPCRAM+0fdh],0 - je .spcnextskip - mov byte[SPCRAM+0fdh],0 - mov byte[spcnumread],0 - ret - skipmacro 0 + mov al,[SPCRAM+0fdh] + and al,0Fh + cmp byte[SPCRAM+0fdh],0 + je .spcnextskip + mov byte[SPCRAM+0fdh],0 + mov byte[spcnumread],0 + ret + skipmacro 0 NEWSYM RSPCRegFE - mov al,[SPCRAM+0feh] - and al,0Fh - cmp byte[SPCRAM+0feh],0 - je .spcnextskip - mov byte[SPCRAM+0feh],0 - mov byte[spcnumread],0 - ret - skipmacro 1 + mov al,[SPCRAM+0feh] + and al,0Fh + cmp byte[SPCRAM+0feh],0 + je .spcnextskip + mov byte[SPCRAM+0feh],0 + mov byte[spcnumread],0 + ret + skipmacro 1 NEWSYM RSPCRegFF - mov al,[SPCRAM+0ffh] - and al,0Fh - cmp byte[SPCRAM+0ffh],0 - je .spcnextskip - mov byte[SPCRAM+0ffh],0 - mov byte[spcnumread],0 - ret - skipmacro 2 - -%if 0 -NEWSYM spcnextskip - inc byte[spcnumread] - cmp byte[spcnumread],5 - je near haltspc - ret - -NEWSYM haltspc - cmp byte[SPC700sh],1 - je .nochangestate - mov dword[cycpbl],0FFFFFFFFh - test byte[curexecstate],02h - jz .nochangestate - and byte[curexecstate],0FDh - push ebx - xor ebx,ebx - mov bl,dl - mov edi,[tableadb+ebx*4] - pop ebx -.nochangestate - mov byte[spcnumread],0 - ret -%endif + mov al,[SPCRAM+0ffh] + and al,0Fh + cmp byte[SPCRAM+0ffh],0 + je .spcnextskip + mov byte[SPCRAM+0ffh],0 + mov byte[spcnumread],0 + ret + skipmacro 2 SECTION .data NEWSYM spcnumread, dd 0 @@ -694,7 +624,7 @@ SECTION .text jz .nohf or byte[spcP],8 .nohf -ret + ret %endmacro %macro SPCSetFlagnvhzcnoret 0 @@ -732,1942 +662,1942 @@ ret ;************************************************ ; Misc Opcodes ;************************************************ -NEWSYM Op00 ; NOP - ret -NEWSYM OpEF ; SLEEP standby SLEEP mode ......... - dec ebp - ret -NEWSYM OpFF ; STOP standby STOP mode ......... - inc dword[spc700read] - dec ebp - ret -NEWSYM Op9F ; XCN A A(7-4) <-> A(3-0) N......Z. - ror byte[spcA],4 - mov al,[spcA] - mov [spcNZ],al - ret +NEWSYM Op00 ; NOP + ret +NEWSYM OpEF ; SLEEP standby SLEEP mode ......... + dec ebp + ret +NEWSYM OpFF ; STOP standby STOP mode ......... + inc dword[spc700read] + dec ebp + ret +NEWSYM Op9F ; XCN A A(7-4) <-> A(3-0) N......Z. + ror byte[spcA],4 + mov al,[spcA] + mov [spcNZ],al + ret ;************************************************ ; Branch Stuff ;************************************************ -NEWSYM Op10 ; BPL Branch on N=0 - test byte[spcNZ],128 - jz .branch - spcbrancher -NEWSYM Op30 ; BMI Branch on N=1 - test byte[spcNZ],128 - jnz .branch - spcbrancher -NEWSYM Op50 ; BVC Branch on V=0 - test byte[spcP],64 - jz .branch - spcbrancher -NEWSYM Op70 ; BVS Branch on V=1 - test byte[spcP],64 - jnz .branch - spcbrancher -NEWSYM Op90 ; BCC Branc on c=0 - test byte[spcP],1 - jz .branch - spcbrancher -NEWSYM OpB0 ; BCS Branch on C=1 - test byte[spcP],1 - jnz .branch - spcbrancher -NEWSYM OpD0 ; BNE branch on Z=0 - test byte[spcNZ],255 - jnz .branch - spcbrancher -NEWSYM OpF0 ; BEQ Branch on Z=1 - test byte[spcNZ],0FFh - jz .branch - spcbrancher -NEWSYM Op2F ; BRA rel branch always ... - movsx ebx,byte[ebp] - inc ebp - add ebp,ebx - ret +NEWSYM Op10 ; BPL Branch on N=0 + test byte[spcNZ],128 + jz .branch + spcbrancher +NEWSYM Op30 ; BMI Branch on N=1 + test byte[spcNZ],128 + jnz .branch + spcbrancher +NEWSYM Op50 ; BVC Branch on V=0 + test byte[spcP],64 + jz .branch + spcbrancher +NEWSYM Op70 ; BVS Branch on V=1 + test byte[spcP],64 + jnz .branch + spcbrancher +NEWSYM Op90 ; BCC Branc on c=0 + test byte[spcP],1 + jz .branch + spcbrancher +NEWSYM OpB0 ; BCS Branch on C=1 + test byte[spcP],1 + jnz .branch + spcbrancher +NEWSYM OpD0 ; BNE branch on Z=0 + test byte[spcNZ],255 + jnz .branch + spcbrancher +NEWSYM OpF0 ; BEQ Branch on Z=1 + test byte[spcNZ],0FFh + jz .branch + spcbrancher +NEWSYM Op2F ; BRA rel branch always ... + movsx ebx,byte[ebp] + inc ebp + add ebp,ebx + ret ;************************************************ ; Clear/Set Flag bits ;************************************************ -; CLRP 20 1 2 clear direct page flag ..0..... -NEWSYM Op20 ; CLRP Clear direct page flag - and byte[spcP],11011111b - mov dword[spcRamDP],SPCRAM - ret -; SETP 40 1 2 set dorect page flag ..1..0.. -NEWSYM Op40 ; SETP Set Direct Page Flag (Also clear interupt flag?) - or byte[spcP],00100000b - and byte[spcP],11111011b - mov dword[spcRamDP],SPCRAM - add dword[spcRamDP],100h - ret -; CLRC 60 1 2 clear carry flag .......0 -NEWSYM Op60 ; CLRC Clear carry flag - and byte[spcP],11111110b - ret -; SETC 80 1 2 set carry flag .......1 -NEWSYM Op80 ; SETC Set carry flag - or byte[spcP],00000001b - ret -; EI A0 1 3 set interrup enable flag .....1.. -NEWSYM OpA0 ; EI set interrupt flag - or byte[spcP],00000100b - ret -; DI C0 1 3 clear interrup enable flag .....0.. -NEWSYM OpC0 ; DI clear interrupt flag - and byte[spcP],11111011b - ret -; CLRV E0 1 2 clear V and H .0..0... -NEWSYM OpE0 ; CLRV clear V and H - and byte[spcP],10110111b - ret -; NOTC ED 1 3 complement carry flag .......C -NEWSYM OpED ; NOTC complement carry flag .......C - xor byte[spcP],00000001b - ret +; CLRP 20 1 2 clear direct page flag ..0..... +NEWSYM Op20 ; CLRP Clear direct page flag + and byte[spcP],11011111b + mov dword[spcRamDP],SPCRAM + ret +; SETP 40 1 2 set dorect page flag ..1..0.. +NEWSYM Op40 ; SETP Set Direct Page Flag (Also clear interupt flag?) + or byte[spcP],00100000b + and byte[spcP],11111011b + mov dword[spcRamDP],SPCRAM + add dword[spcRamDP],100h + ret +; CLRC 60 1 2 clear carry flag .......0 +NEWSYM Op60 ; CLRC Clear carry flag + and byte[spcP],11111110b + ret +; SETC 80 1 2 set carry flag .......1 +NEWSYM Op80 ; SETC Set carry flag + or byte[spcP],00000001b + ret +; EI A0 1 3 set interrup enable flag .....1.. +NEWSYM OpA0 ; EI set interrupt flag + or byte[spcP],00000100b + ret +; DI C0 1 3 clear interrup enable flag .....0.. +NEWSYM OpC0 ; DI clear interrupt flag + and byte[spcP],11111011b + ret +; CLRV E0 1 2 clear V and H .0..0... +NEWSYM OpE0 ; CLRV clear V and H + and byte[spcP],10110111b + ret +; NOTC ED 1 3 complement carry flag .......C +NEWSYM OpED ; NOTC complement carry flag .......C + xor byte[spcP],00000001b + ret ;************************************************ ; TCALL instructions (Verified) ;************************************************ -NEWSYM Op01 ; TCALL 0 - spctcall 30 -NEWSYM Op11 ; TCALL 1 - spctcall 28 -NEWSYM Op21 ; TCALL 2 - spctcall 26 -NEWSYM Op31 ; TCALL 3 - spctcall 24 -NEWSYM Op41 ; TCALL 4 - spctcall 22 -NEWSYM Op51 ; TCALL 5 - spctcall 20 -NEWSYM Op61 ; TCALL 6 - spctcall 18 -NEWSYM Op71 ; TCALL 7 - spctcall 16 -NEWSYM Op81 ; TCALL 8 - spctcall 14 -NEWSYM Op91 ; TCALL 9 - spctcall 12 -NEWSYM OpA1 ; TCALL A - spctcall 10 -NEWSYM OpB1 ; TCALL B - spctcall 08 -NEWSYM OpC1 ; TCALL C - spctcall 06 -NEWSYM OpD1 ; TCALL D - spctcall 04 -NEWSYM OpE1 ; TCALL E - spctcall 02 -NEWSYM OpF1 ; TCALL F - spctcall 00 +NEWSYM Op01 ; TCALL 0 + spctcall 30 +NEWSYM Op11 ; TCALL 1 + spctcall 28 +NEWSYM Op21 ; TCALL 2 + spctcall 26 +NEWSYM Op31 ; TCALL 3 + spctcall 24 +NEWSYM Op41 ; TCALL 4 + spctcall 22 +NEWSYM Op51 ; TCALL 5 + spctcall 20 +NEWSYM Op61 ; TCALL 6 + spctcall 18 +NEWSYM Op71 ; TCALL 7 + spctcall 16 +NEWSYM Op81 ; TCALL 8 + spctcall 14 +NEWSYM Op91 ; TCALL 9 + spctcall 12 +NEWSYM OpA1 ; TCALL A + spctcall 10 +NEWSYM OpB1 ; TCALL B + spctcall 08 +NEWSYM OpC1 ; TCALL C + spctcall 06 +NEWSYM OpD1 ; TCALL D + spctcall 04 +NEWSYM OpE1 ; TCALL E + spctcall 02 +NEWSYM OpF1 ; TCALL F + spctcall 00 ;************************************************ ; SET1 instructions (Verified) ;************************************************ -NEWSYM Op02 ; SET1 direct page bit 0 - set1 1 -NEWSYM Op22 ; SET1 direct page bit 1 - set1 2 -NEWSYM Op42 ; SET1 direct page bit 2 - set1 4 -NEWSYM Op62 ; SET1 direct page bit 3 - set1 8 -NEWSYM Op82 ; SET1 direct page bit 4 - set1 16 -NEWSYM OpA2 ; SET1 direct page bit 5 - set1 32 -NEWSYM OpC2 ; SET1 direct page bit 6 - set1 64 -NEWSYM OpE2 ; SET1 direct page bit 7 - set1 128 +NEWSYM Op02 ; SET1 direct page bit 0 + set1 1 +NEWSYM Op22 ; SET1 direct page bit 1 + set1 2 +NEWSYM Op42 ; SET1 direct page bit 2 + set1 4 +NEWSYM Op62 ; SET1 direct page bit 3 + set1 8 +NEWSYM Op82 ; SET1 direct page bit 4 + set1 16 +NEWSYM OpA2 ; SET1 direct page bit 5 + set1 32 +NEWSYM OpC2 ; SET1 direct page bit 6 + set1 64 +NEWSYM OpE2 ; SET1 direct page bit 7 + set1 128 ;************************************************ ; CLR1 instructions (Verified) ;************************************************ -NEWSYM Op12 ; CLR1 direct page bit 0 - clr1 255-1 -NEWSYM Op32 ; CLR1 direct page bit 1 - clr1 255-2 -NEWSYM Op52 ; CLR1 direct page bit 2 - clr1 255-4 -NEWSYM Op72 ; CLR1 direct page bit 3 - clr1 255-8 -NEWSYM Op92 ; CLR1 direct page bit 4 - clr1 255-16 -NEWSYM OpB2 ; CLR1 direct page bit 5 - clr1 255-32 -NEWSYM OpD2 ; CLR1 direct page bit 6 - clr1 255-64 -NEWSYM OpF2 ; CLR1 direct page bit 7 - clr1 255-128 +NEWSYM Op12 ; CLR1 direct page bit 0 + clr1 255-1 +NEWSYM Op32 ; CLR1 direct page bit 1 + clr1 255-2 +NEWSYM Op52 ; CLR1 direct page bit 2 + clr1 255-4 +NEWSYM Op72 ; CLR1 direct page bit 3 + clr1 255-8 +NEWSYM Op92 ; CLR1 direct page bit 4 + clr1 255-16 +NEWSYM OpB2 ; CLR1 direct page bit 5 + clr1 255-32 +NEWSYM OpD2 ; CLR1 direct page bit 6 + clr1 255-64 +NEWSYM OpF2 ; CLR1 direct page bit 7 + clr1 255-128 ;************************************************ ; BBS instructions (Verified) ;************************************************ -NEWSYM Op03 ; BBS direct page bit 0 - bbs 1 -NEWSYM Op23 ; BBS direct page bit 1 - bbs 2 -NEWSYM Op43 ; BBS direct page bit 2 - bbs 4 -NEWSYM Op63 ; BBS direct page bit 3 - bbs 8 -NEWSYM Op83 ; BBS direct page bit 4 - bbs 16 -NEWSYM OpA3 ; BBS direct page bit 5 - bbs 32 -NEWSYM OpC3 ; BBS direct page bit 6 - bbs 64 -NEWSYM OpE3 ; BBS direct page bit 7 - bbs 128 +NEWSYM Op03 ; BBS direct page bit 0 + bbs 1 +NEWSYM Op23 ; BBS direct page bit 1 + bbs 2 +NEWSYM Op43 ; BBS direct page bit 2 + bbs 4 +NEWSYM Op63 ; BBS direct page bit 3 + bbs 8 +NEWSYM Op83 ; BBS direct page bit 4 + bbs 16 +NEWSYM OpA3 ; BBS direct page bit 5 + bbs 32 +NEWSYM OpC3 ; BBS direct page bit 6 + bbs 64 +NEWSYM OpE3 ; BBS direct page bit 7 + bbs 128 ;************************************************ ; BBC instructions (Verified) ;************************************************ -NEWSYM Op13 ; BBC direct page bit 0 - bbc 1 -NEWSYM Op33 ; BBC direct page bit 1 - bbc 2 -NEWSYM Op53 ; BBC direct page bit 2 - bbc 4 -NEWSYM Op73 ; BBC direct page bit 3 - bbc 8 -NEWSYM Op93 ; BBC direct page bit 4 - bbc 16 -NEWSYM OpB3 ; BBC direct page bit 5 - bbc 32 -NEWSYM OpD3 ; BBC direct page bit 6 - bbc 64 -NEWSYM OpF3 ; BBC direct page bit 7 - bbc 128 +NEWSYM Op13 ; BBC direct page bit 0 + bbc 1 +NEWSYM Op33 ; BBC direct page bit 1 + bbc 2 +NEWSYM Op53 ; BBC direct page bit 2 + bbc 4 +NEWSYM Op73 ; BBC direct page bit 3 + bbc 8 +NEWSYM Op93 ; BBC direct page bit 4 + bbc 16 +NEWSYM OpB3 ; BBC direct page bit 5 + bbc 32 +NEWSYM OpD3 ; BBC direct page bit 6 + bbc 64 +NEWSYM OpF3 ; BBC direct page bit 7 + bbc 128 ;************************************************ ; OR A,instructions ;************************************************ -NEWSYM Op04 ; OR A,dp A <- A OR (dp) N.....Z. - SPCaddr_DP - SPC_OR_A -NEWSYM Op14 ; OR A,dp+X A <- A OR (dp+X) N.....Z. - SPCaddr_DP_X - SPC_OR_A -NEWSYM Op05 ; OR A,labs A <- A OR (abs) N.....Z. - SPCaddr_LABS - SPC_OR_A -NEWSYM Op15 ; OR A,labs+x A <- A OR (abs+X) N.....Z. - SPCaddr_LABS_X - SPC_OR_A -NEWSYM Op06 ; OR A,(X) A <- A OR (X) N.....Z. - SPCaddr__X_ - SPC_OR_A -NEWSYM Op16 ; OR A,labs+Y A <- A OR (abs+Y) N......Z. - SPCaddr_LABS_Y - SPC_OR_A -NEWSYM Op07 ; OR A,(dp+X) A <- A OR ((dp+X+1)(dp+X)) N......Z. - SPCaddr_bDP_Xb - SPC_OR_A -NEWSYM Op17 ; OR A,(dp)+Y A <- A OR ((dp+1)(dp)+Y) N......Z. - SPCaddr_bDPb_Y - SPC_OR_A -NEWSYM Op08 ; OR A,#inm A <- A OR inm N......Z. - mov al,[ebp] - inc ebp - SPC_OR_A +NEWSYM Op04 ; OR A,dp A <- A OR (dp) N.....Z. + SPCaddr_DP + SPC_OR_A +NEWSYM Op14 ; OR A,dp+X A <- A OR (dp+X) N.....Z. + SPCaddr_DP_X + SPC_OR_A +NEWSYM Op05 ; OR A,labs A <- A OR (abs) N.....Z. + SPCaddr_LABS + SPC_OR_A +NEWSYM Op15 ; OR A,labs+x A <- A OR (abs+X) N.....Z. + SPCaddr_LABS_X + SPC_OR_A +NEWSYM Op06 ; OR A,(X) A <- A OR (X) N.....Z. + SPCaddr__X_ + SPC_OR_A +NEWSYM Op16 ; OR A,labs+Y A <- A OR (abs+Y) N......Z. + SPCaddr_LABS_Y + SPC_OR_A +NEWSYM Op07 ; OR A,(dp+X) A <- A OR ((dp+X+1)(dp+X)) N......Z. + SPCaddr_bDP_Xb + SPC_OR_A +NEWSYM Op17 ; OR A,(dp)+Y A <- A OR ((dp+1)(dp)+Y) N......Z. + SPCaddr_bDPb_Y + SPC_OR_A +NEWSYM Op08 ; OR A,#inm A <- A OR inm N......Z. + mov al,[ebp] + inc ebp + SPC_OR_A ;************************************************ ; AND A, instructions ;************************************************ -NEWSYM Op24 ; AND A,dp A <- A AND (dp) N.....Z. - SPCaddr_DP - SPC_AND_A -NEWSYM Op34 ; AND A,dp+x A <- A AND (dp+X) N.....Z. - SPCaddr_DP_X - SPC_AND_A -NEWSYM Op25 ; AND A,labs A <- A AND (abs) N.....Z. - SPCaddr_LABS - SPC_AND_A -NEWSYM Op35 ; AND A,labs+X A <- A AND (abs+X) N.....Z. - SPCaddr_LABS_X - SPC_AND_A -NEWSYM Op26 ; AND A,(X) A <- A AND (X) N......Z. - SPCaddr__X_ - SPC_AND_A -NEWSYM Op36 ; AND A,labs+Y A <- A AND (abs+Y) N......Z. - SPCaddr_LABS_Y - SPC_AND_A -NEWSYM Op27 ; AND A,(dp+X) A <- A AND ((dp+X+1)(dp+X)) N......Z. - SPCaddr_bDP_Xb - SPC_AND_A -NEWSYM Op37 ; AND A,(dp)+Y A <- A AND ((dp+1)(dp)+Y) N......Z. - SPCaddr_bDPb_Y - SPC_AND_A -NEWSYM Op28 ; AND A,#inm A <- A AND inm N......Z. - mov al,[ebp] - inc ebp - SPC_AND_A +NEWSYM Op24 ; AND A,dp A <- A AND (dp) N.....Z. + SPCaddr_DP + SPC_AND_A +NEWSYM Op34 ; AND A,dp+x A <- A AND (dp+X) N.....Z. + SPCaddr_DP_X + SPC_AND_A +NEWSYM Op25 ; AND A,labs A <- A AND (abs) N.....Z. + SPCaddr_LABS + SPC_AND_A +NEWSYM Op35 ; AND A,labs+X A <- A AND (abs+X) N.....Z. + SPCaddr_LABS_X + SPC_AND_A +NEWSYM Op26 ; AND A,(X) A <- A AND (X) N......Z. + SPCaddr__X_ + SPC_AND_A +NEWSYM Op36 ; AND A,labs+Y A <- A AND (abs+Y) N......Z. + SPCaddr_LABS_Y + SPC_AND_A +NEWSYM Op27 ; AND A,(dp+X) A <- A AND ((dp+X+1)(dp+X)) N......Z. + SPCaddr_bDP_Xb + SPC_AND_A +NEWSYM Op37 ; AND A,(dp)+Y A <- A AND ((dp+1)(dp)+Y) N......Z. + SPCaddr_bDPb_Y + SPC_AND_A +NEWSYM Op28 ; AND A,#inm A <- A AND inm N......Z. + mov al,[ebp] + inc ebp + SPC_AND_A ;************************************************ ; EOR A, instructions ;************************************************ -NEWSYM Op44 ; EOR A,dp A <- A EOR (dp) N.....Z. - SPCaddr_DP - SPC_EOR_A -NEWSYM Op54 ; EOR A,dp+x A <- A EOR (dp+X) N.....Z. - SPCaddr_DP_X - SPC_EOR_A -NEWSYM Op45 ; EOR A,labs A <- A EOR (abs) N.....Z. - SPCaddr_LABS - SPC_EOR_A -NEWSYM Op55 ; EOR A,labs+X A <- A EOR (abs+X) N.....Z. - SPCaddr_LABS_X - SPC_EOR_A -NEWSYM Op46 ; EOR A,(X) A <- A EOR (X) N......Z. - SPCaddr__X_ - SPC_EOR_A -NEWSYM Op56 ; EOR A,labs+Y A <- A EOR (abs+Y) N......Z. - SPCaddr_LABS_Y - SPC_EOR_A -NEWSYM Op47 ; EOR A,(dp+X) A <- A EOR ((dp+X+1)(dp+X)) N......Z. - SPCaddr_bDP_Xb - SPC_EOR_A -NEWSYM Op57 ; EOR A,(dp)+Y A <- A EOR ((dp+1)(dp)+Y) N......Z. - SPCaddr_bDPb_Y - SPC_EOR_A -NEWSYM Op48 ; EOR A,#inm A <- A EOR inm N......Z. - mov al,[ebp] - inc ebp - SPC_EOR_A +NEWSYM Op44 ; EOR A,dp A <- A EOR (dp) N.....Z. + SPCaddr_DP + SPC_EOR_A +NEWSYM Op54 ; EOR A,dp+x A <- A EOR (dp+X) N.....Z. + SPCaddr_DP_X + SPC_EOR_A +NEWSYM Op45 ; EOR A,labs A <- A EOR (abs) N.....Z. + SPCaddr_LABS + SPC_EOR_A +NEWSYM Op55 ; EOR A,labs+X A <- A EOR (abs+X) N.....Z. + SPCaddr_LABS_X + SPC_EOR_A +NEWSYM Op46 ; EOR A,(X) A <- A EOR (X) N......Z. + SPCaddr__X_ + SPC_EOR_A +NEWSYM Op56 ; EOR A,labs+Y A <- A EOR (abs+Y) N......Z. + SPCaddr_LABS_Y + SPC_EOR_A +NEWSYM Op47 ; EOR A,(dp+X) A <- A EOR ((dp+X+1)(dp+X)) N......Z. + SPCaddr_bDP_Xb + SPC_EOR_A +NEWSYM Op57 ; EOR A,(dp)+Y A <- A EOR ((dp+1)(dp)+Y) N......Z. + SPCaddr_bDPb_Y + SPC_EOR_A +NEWSYM Op48 ; EOR A,#inm A <- A EOR inm N......Z. + mov al,[ebp] + inc ebp + SPC_EOR_A ;************************************************ ; CMP A, instructions ;************************************************ -NEWSYM Op64 ; CMP A,dp A-(dp) N.....ZC - SPCaddr_DP - SPC_CMP_A -NEWSYM Op74 ; CMP A,dp+x A-(dp+X) N.....ZC - SPCaddr_DP_X - SPC_CMP_A -NEWSYM Op65 ; CMP A,labs A-(abs) N.....ZC - SPCaddr_LABS - SPC_CMP_A -NEWSYM Op75 ; CMP A,labs+X A-(abs+X) N.....ZC - SPCaddr_LABS_X - SPC_CMP_A -NEWSYM Op66 ; CMP A,(X) A-(X) N......ZC - SPCaddr__X_ - SPC_CMP_A -NEWSYM Op76 ; CMP A,labs+Y A-(abs+Y) N......ZC - SPCaddr_LABS_Y - SPC_CMP_A -NEWSYM Op67 ; CMP A,(dp+X) A-((dp+X+1)(dp+X)) N......ZC - SPCaddr_bDP_Xb - SPC_CMP_A -NEWSYM Op77 ; CMP A,(dp)+Y A-((dp+1)(dp)+Y) N......ZC - SPCaddr_bDPb_Y - SPC_CMP_A -NEWSYM Op68 ; CMP A,#inm A-inm N......ZC - mov al,[ebp] - inc ebp - SPC_CMP_A +NEWSYM Op64 ; CMP A,dp A-(dp) N.....ZC + SPCaddr_DP + SPC_CMP_A +NEWSYM Op74 ; CMP A,dp+x A-(dp+X) N.....ZC + SPCaddr_DP_X + SPC_CMP_A +NEWSYM Op65 ; CMP A,labs A-(abs) N.....ZC + SPCaddr_LABS + SPC_CMP_A +NEWSYM Op75 ; CMP A,labs+X A-(abs+X) N.....ZC + SPCaddr_LABS_X + SPC_CMP_A +NEWSYM Op66 ; CMP A,(X) A-(X) N......ZC + SPCaddr__X_ + SPC_CMP_A +NEWSYM Op76 ; CMP A,labs+Y A-(abs+Y) N......ZC + SPCaddr_LABS_Y + SPC_CMP_A +NEWSYM Op67 ; CMP A,(dp+X) A-((dp+X+1)(dp+X)) N......ZC + SPCaddr_bDP_Xb + SPC_CMP_A +NEWSYM Op77 ; CMP A,(dp)+Y A-((dp+1)(dp)+Y) N......ZC + SPCaddr_bDPb_Y + SPC_CMP_A +NEWSYM Op68 ; CMP A,#inm A-inm N......ZC + mov al,[ebp] + inc ebp + SPC_CMP_A ;************************************************ ; ADC A, instructions ;************************************************ -NEWSYM Op84 ; ADC A,dp A <- A+(dp)+C NV..H.ZC - SPCaddr_DP - SPC_ADC_A -NEWSYM Op94 ; ADC A,dp+x A <- A+(dp+X)+C NV..H.ZC - SPCaddr_DP_X - SPC_ADC_A -NEWSYM Op85 ; ADC A,labs A <- A+(abs)+C NV..H.ZC - SPCaddr_LABS - SPC_ADC_A -NEWSYM Op95 ; ADC A,labs+X A <- A+(abs+X)+C NV..H.ZC - SPCaddr_LABS_X - SPC_ADC_A -NEWSYM Op86 ; ADC A,(X) A <- A+(X)+C NV..H..ZC - SPCaddr__X_ - SPC_ADC_A -NEWSYM Op96 ; ADC A,labs+Y A <- A+(abs+Y)+C NV..H..ZC - SPCaddr_LABS_Y - SPC_ADC_A -NEWSYM Op87 ; ADC A,(dp+X) A <- A+((dp+X+1)(dp+X)) NV..H..ZC - SPCaddr_bDP_Xb - SPC_ADC_A -NEWSYM Op97 ; ADC A,(dp)+Y A <- A+((dp+1)(dp)+Y) NV..H..ZC - SPCaddr_bDPb_Y - SPC_ADC_A -NEWSYM Op88 ; ADC A,#inm A <- A+inm+C NV..H..ZC - mov al,[ebp] - inc ebp - SPC_ADC_A +NEWSYM Op84 ; ADC A,dp A <- A+(dp)+C NV..H.ZC + SPCaddr_DP + SPC_ADC_A +NEWSYM Op94 ; ADC A,dp+x A <- A+(dp+X)+C NV..H.ZC + SPCaddr_DP_X + SPC_ADC_A +NEWSYM Op85 ; ADC A,labs A <- A+(abs)+C NV..H.ZC + SPCaddr_LABS + SPC_ADC_A +NEWSYM Op95 ; ADC A,labs+X A <- A+(abs+X)+C NV..H.ZC + SPCaddr_LABS_X + SPC_ADC_A +NEWSYM Op86 ; ADC A,(X) A <- A+(X)+C NV..H..ZC + SPCaddr__X_ + SPC_ADC_A +NEWSYM Op96 ; ADC A,labs+Y A <- A+(abs+Y)+C NV..H..ZC + SPCaddr_LABS_Y + SPC_ADC_A +NEWSYM Op87 ; ADC A,(dp+X) A <- A+((dp+X+1)(dp+X)) NV..H..ZC + SPCaddr_bDP_Xb + SPC_ADC_A +NEWSYM Op97 ; ADC A,(dp)+Y A <- A+((dp+1)(dp)+Y) NV..H..ZC + SPCaddr_bDPb_Y + SPC_ADC_A +NEWSYM Op88 ; ADC A,#inm A <- A+inm+C NV..H..ZC + mov al,[ebp] + inc ebp + SPC_ADC_A ;************************************************ ; SBC A, instructions ;************************************************ -NEWSYM OpA4 ; SBC A,dp A <- A-(dp)-!C NV..H.ZC - SPCaddr_DP - SPC_SBC_A -NEWSYM OpB4 ; SBC A,dp+x A <- A-(dp+X)-!C NV..H.ZC - SPCaddr_DP_X - SPC_SBC_A -NEWSYM OpA5 ; SBC A,labs A <- A-(abs)-!C NV..H.ZC - SPCaddr_LABS - SPC_SBC_A -NEWSYM OpB5 ; SBC A,labs+x A <- A-(abs+X)-!C NV..H.ZC - SPCaddr_LABS_X - SPC_SBC_A -NEWSYM OpA6 ; SBC A,(X) A <- A-(X)-!C NV..H..ZC - SPCaddr__X_ - SPC_SBC_A -NEWSYM OpB6 ; SBC A,labs+Y A <- A-(abs+Y)-!C NV..H..ZC - SPCaddr_LABS_Y - SPC_SBC_A -NEWSYM OpA7 ; SBC A,(dp+X) A <- A-((dp+X+1)(dp+X))-!C NV..H..ZC - SPCaddr_bDP_Xb - SPC_SBC_A -NEWSYM OpB7 ; SBC A,(dp)+Y A <- A-((dp+1)(dp)+Y)-!C NV..H..ZC - SPCaddr_bDPb_Y - SPC_SBC_A -NEWSYM OpA8 ; SBC A,#inm A <- A-inm-!C NV..H..ZC - mov al,[ebp] - inc ebp - SPC_SBC_A +NEWSYM OpA4 ; SBC A,dp A <- A-(dp)-!C NV..H.ZC + SPCaddr_DP + SPC_SBC_A +NEWSYM OpB4 ; SBC A,dp+x A <- A-(dp+X)-!C NV..H.ZC + SPCaddr_DP_X + SPC_SBC_A +NEWSYM OpA5 ; SBC A,labs A <- A-(abs)-!C NV..H.ZC + SPCaddr_LABS + SPC_SBC_A +NEWSYM OpB5 ; SBC A,labs+x A <- A-(abs+X)-!C NV..H.ZC + SPCaddr_LABS_X + SPC_SBC_A +NEWSYM OpA6 ; SBC A,(X) A <- A-(X)-!C NV..H..ZC + SPCaddr__X_ + SPC_SBC_A +NEWSYM OpB6 ; SBC A,labs+Y A <- A-(abs+Y)-!C NV..H..ZC + SPCaddr_LABS_Y + SPC_SBC_A +NEWSYM OpA7 ; SBC A,(dp+X) A <- A-((dp+X+1)(dp+X))-!C NV..H..ZC + SPCaddr_bDP_Xb + SPC_SBC_A +NEWSYM OpB7 ; SBC A,(dp)+Y A <- A-((dp+1)(dp)+Y)-!C NV..H..ZC + SPCaddr_bDPb_Y + SPC_SBC_A +NEWSYM OpA8 ; SBC A,#inm A <- A-inm-!C NV..H..ZC + mov al,[ebp] + inc ebp + SPC_SBC_A ;************************************************ ; MOV A, instructions ;************************************************ -NEWSYM OpE4 ; MOV A,dp A <- (dp) N......Z - SPCaddr_DP - SPC_MOV_A -NEWSYM OpF4 ; MOV A,dp+x A <- (dp+X) N......Z - SPCaddr_DP_X - SPC_MOV_A -NEWSYM OpE5 ; MOV A,labs A <- (abs) N......Z - SPCaddr_LABS - SPC_MOV_A -NEWSYM OpF5 ; MOV A,labs+X A <- (abs+X) N......Z - SPCaddr_LABS_X - SPC_MOV_A -NEWSYM OpE6 ; MOV A,(X) A <- (X) N......Z - SPCaddr__X_ - SPC_MOV_A -NEWSYM OpF6 ; MOV A,labs+Y A <- (abs+Y) N......Z - SPCaddr_LABS_Y - SPC_MOV_A -NEWSYM OpE7 ; MOV A,(dp+X) A <- ((dp+X+1)(dp+X)) N......Z - SPCaddr_bDP_Xb - SPC_MOV_A -NEWSYM OpF7 ; MOV A,(dp)+Y A <- ((dp+1)(dp)+Y) N......Z - SPCaddr_bDPb_Y - SPC_MOV_A -NEWSYM OpE8 ; MOV A,#inm A <- inm N......Z - mov al,[ebp] - inc ebp - SPC_MOV_A +NEWSYM OpE4 ; MOV A,dp A <- (dp) N......Z + SPCaddr_DP + SPC_MOV_A +NEWSYM OpF4 ; MOV A,dp+x A <- (dp+X) N......Z + SPCaddr_DP_X + SPC_MOV_A +NEWSYM OpE5 ; MOV A,labs A <- (abs) N......Z + SPCaddr_LABS + SPC_MOV_A +NEWSYM OpF5 ; MOV A,labs+X A <- (abs+X) N......Z + SPCaddr_LABS_X + SPC_MOV_A +NEWSYM OpE6 ; MOV A,(X) A <- (X) N......Z + SPCaddr__X_ + SPC_MOV_A +NEWSYM OpF6 ; MOV A,labs+Y A <- (abs+Y) N......Z + SPCaddr_LABS_Y + SPC_MOV_A +NEWSYM OpE7 ; MOV A,(dp+X) A <- ((dp+X+1)(dp+X)) N......Z + SPCaddr_bDP_Xb + SPC_MOV_A +NEWSYM OpF7 ; MOV A,(dp)+Y A <- ((dp+1)(dp)+Y) N......Z + SPCaddr_bDPb_Y + SPC_MOV_A +NEWSYM OpE8 ; MOV A,#inm A <- inm N......Z + mov al,[ebp] + inc ebp + SPC_MOV_A ;************************************************ ; DP,#imm instructions ;************************************************ %macro spcgetdp_imm 0 - mov bl,[ebp+1] - mov ah,[ebp] - add ebx,[spcRamDP] - ReadByte2 - add ebp,2 + mov bl,[ebp+1] + mov ah,[ebp] + add ebx,[spcRamDP] + ReadByte2 + add ebp,2 %endmacro -NEWSYM OpB8 ; SBC dp,#inm (dp) <- (dp)-inm-!C NV..H..ZC - spcgetdp_imm ; bl<-[ebp+1], ah<-[ebp], ebx+[spcRamDP],Readbyte,ebp+2 - mov cl,[spcP] - xor cl,1 - shr cl,1 - sbb al,ah - cmc - SPCSetFlagnvhzcnoret - WriteByte - ret +NEWSYM OpB8 ; SBC dp,#inm (dp) <- (dp)-inm-!C NV..H..ZC + spcgetdp_imm ; bl<-[ebp+1], ah<-[ebp], ebx+[spcRamDP],Readbyte,ebp+2 + mov cl,[spcP] + xor cl,1 + shr cl,1 + sbb al,ah + cmc + SPCSetFlagnvhzcnoret + WriteByte + ret -NEWSYM Op98 ; ADC dp,#inm (dp) <- (dp)+inm+C NV..H..ZC - spcgetdp_imm ; bl<-[ebp+1], ah<-[ebp], ebx+[spcRamDP],Readbyte,ebp+2 - mov cl,[spcP] - shr cl,1 - adc al,ah - SPCSetFlagnvhzcnoret - WriteByte - ret +NEWSYM Op98 ; ADC dp,#inm (dp) <- (dp)+inm+C NV..H..ZC + spcgetdp_imm ; bl<-[ebp+1], ah<-[ebp], ebx+[spcRamDP],Readbyte,ebp+2 + mov cl,[spcP] + shr cl,1 + adc al,ah + SPCSetFlagnvhzcnoret + WriteByte + ret -NEWSYM Op78 ; CMP dp,#inm (dp)-inm N......ZC - mov bl,[ebp+1] - mov ah,[ebp] - add ebx,[spcRamDP] - ReadByte - add ebp,2 - cmp al,ah - cmc - SPCSetFlagnzcnoret - ret +NEWSYM Op78 ; CMP dp,#inm (dp)-inm N......ZC + mov bl,[ebp+1] + mov ah,[ebp] + add ebx,[spcRamDP] + ReadByte + add ebp,2 + cmp al,ah + cmc + SPCSetFlagnzcnoret + ret -NEWSYM Op58 ; EOR dp,#inm (dp) <- (dp) EOR inm N......Z. - spcgetdp_imm ; bl<-[ebp+1], ah<-[ebp], ebx+[spcRamDP],Readbyte,ebp+2 - xor al,ah - mov [spcNZ], al - WriteByte - ret +NEWSYM Op58 ; EOR dp,#inm (dp) <- (dp) EOR inm N......Z. + spcgetdp_imm ; bl<-[ebp+1], ah<-[ebp], ebx+[spcRamDP],Readbyte,ebp+2 + xor al,ah + mov [spcNZ], al + WriteByte + ret -NEWSYM Op38 ; AND dp,#inm (dp) <- (dp) AND inm N......Z. - spcgetdp_imm ; bl<-[ebp+1], ah<-[ebp], ebx+[spcRamDP],Readbyte,ebp+2 - and al,ah - mov [spcNZ], al - WriteByte - ret +NEWSYM Op38 ; AND dp,#inm (dp) <- (dp) AND inm N......Z. + spcgetdp_imm ; bl<-[ebp+1], ah<-[ebp], ebx+[spcRamDP],Readbyte,ebp+2 + and al,ah + mov [spcNZ], al + WriteByte + ret -NEWSYM Op18 ; OR dp,#inm (dp) <- (dp) OR inm N......Z. - spcgetdp_imm ; bl<-[ebp+1], ah<-[ebp], ebx+[spcRamDP],Readbyte,ebp+2 - or al,ah - mov [spcNZ],al - WriteByte - ret +NEWSYM Op18 ; OR dp,#inm (dp) <- (dp) OR inm N......Z. + spcgetdp_imm ; bl<-[ebp+1], ah<-[ebp], ebx+[spcRamDP],Readbyte,ebp+2 + or al,ah + mov [spcNZ],al + WriteByte + ret ;************************************************ ; DP(D),DP(S) instructions ;************************************************ %macro spcaddrDPbDb_DPbSb 1 - xor ecx,ecx - mov bl,[ebp+1] - mov cl,[ebp] - add ebx,[spcRamDP] - add ebp,2 - add ecx,[spcRamDP] - push ebx - ReadByte - mov ebx,ecx - mov cl,al + xor ecx,ecx + mov bl,[ebp+1] + mov cl,[ebp] + add ebx,[spcRamDP] + add ebp,2 + add ecx,[spcRamDP] + push ebx + ReadByte + mov ebx,ecx + mov cl,al %1 - ReadByte - mov ah,al - mov al,cl - pop ebx + ReadByte + mov ah,al + mov al,cl + pop ebx %endmacro -NEWSYM Op09 ; OR dp(d),dp(s) (dp(d))<-(dp(d)) OR (dp(s)) N......Z. - spcaddrDPbDb_DPbSb Op09b: - or al,ah - mov [spcNZ], al - WriteByte - xor ecx,ecx - ret +NEWSYM Op09 ; OR dp(d),dp(s) (dp(d))<-(dp(d)) OR (dp(s)) N......Z. + spcaddrDPbDb_DPbSb Op09b: + or al,ah + mov [spcNZ], al + WriteByte + xor ecx,ecx + ret -NEWSYM Op29 ; AND dp(d),dp(s) (dp(d))<-(dp(d)) AND (dp(s)) N......Z. - spcaddrDPbDb_DPbSb Op29b: - and al,ah - mov [spcNZ], al - WriteByte - xor ecx,ecx - ret +NEWSYM Op29 ; AND dp(d),dp(s) (dp(d))<-(dp(d)) AND (dp(s)) N......Z. + spcaddrDPbDb_DPbSb Op29b: + and al,ah + mov [spcNZ], al + WriteByte + xor ecx,ecx + ret -NEWSYM Op49 ; EOR dp(d),dp(s) (dp(d))<-(dp(d)) EOR (dp(s)) N......Z. - spcaddrDPbDb_DPbSb Op49b: - xor al,ah - mov [spcNZ], al - WriteByte - xor ecx,ecx - ret +NEWSYM Op49 ; EOR dp(d),dp(s) (dp(d))<-(dp(d)) EOR (dp(s)) N......Z. + spcaddrDPbDb_DPbSb Op49b: + xor al,ah + mov [spcNZ], al + WriteByte + xor ecx,ecx + ret -NEWSYM Op69 ; CMP dp(d),dp(s) (dp(d))-(dp(s)) N......ZC - spcaddrDPbDb_DPbSb Op69b: - cmp al,ah - cmc - SPCSetFlagnzcnoret - xor ecx,ecx - ret +NEWSYM Op69 ; CMP dp(d),dp(s) (dp(d))-(dp(s)) N......ZC + spcaddrDPbDb_DPbSb Op69b: + cmp al,ah + cmc + SPCSetFlagnzcnoret + xor ecx,ecx + ret -NEWSYM Op89 ; ADC dp(d),dp(s) (dp(d))<-(dp(d))+(dp(s))+C NV..H..ZC - spcaddrDPbDb_DPbSb Op89b - mov cl,[spcP] - shr cl,1 - adc al,ah - SPCSetFlagnvhzcnoret - WriteByte - xor ecx,ecx - ret +NEWSYM Op89 ; ADC dp(d),dp(s) (dp(d))<-(dp(d))+(dp(s))+C NV..H..ZC + spcaddrDPbDb_DPbSb Op89b + mov cl,[spcP] + shr cl,1 + adc al,ah + SPCSetFlagnvhzcnoret + WriteByte + xor ecx,ecx + ret -NEWSYM OpA9 ; SBC dp(d),dp(s) (dp(d))<-(dp(d))-(dp(s))-!C NV..H..ZC - spcaddrDPbDb_DPbSb OpA9b - mov cl,[spcP] - xor cl,1 - shr cl,1 - sbb al,ah - cmc - SPCSetFlagnvhzcnoret - WriteByte - xor ecx,ecx - ret +NEWSYM OpA9 ; SBC dp(d),dp(s) (dp(d))<-(dp(d))-(dp(s))-!C NV..H..ZC + spcaddrDPbDb_DPbSb OpA9b + mov cl,[spcP] + xor cl,1 + shr cl,1 + sbb al,ah + cmc + SPCSetFlagnvhzcnoret + WriteByte + xor ecx,ecx + ret -NEWSYM OpFA ; MOV dp(d),dp(s) (dp(d)) <- (dp(s)) ........ - xor ecx,ecx - mov bl,[ebp+1] - mov cl,[ebp] - add ebx,[spcRamDP] - add ecx,[spcRamDP] - add ebp,2 - push ebx - mov ebx,ecx - ReadByte - pop ebx - WriteByte - xor ecx,ecx - ret +NEWSYM OpFA ; MOV dp(d),dp(s) (dp(d)) <- (dp(s)) ........ + xor ecx,ecx + mov bl,[ebp+1] + mov cl,[ebp] + add ebx,[spcRamDP] + add ecx,[spcRamDP] + add ebp,2 + push ebx + mov ebx,ecx + ReadByte + pop ebx + WriteByte + xor ecx,ecx + ret ;************************************************ ; (X),(Y) instructions ;************************************************ %macro spcaddrDPbXb_bYb 1 - mov bl,[spcY] - add ebx,[spcRamDP] - ReadByte - xor ebx,ebx - mov ah,al - mov bl,[spcX] - add ebx,[spcRamDP] + mov bl,[spcY] + add ebx,[spcRamDP] + ReadByte + xor ebx,ebx + mov ah,al + mov bl,[spcX] + add ebx,[spcRamDP] %1 - ReadByte + ReadByte %endmacro -NEWSYM Op19 ; OR (X),(Y) (X) <- (X) OR (Y) N......Z. - spcaddrDPbXb_bYb Op19b: - or al, ah - mov [spcNZ],al - WriteByte - ret +NEWSYM Op19 ; OR (X),(Y) (X) <- (X) OR (Y) N......Z. + spcaddrDPbXb_bYb Op19b: + or al, ah + mov [spcNZ],al + WriteByte + ret -NEWSYM Op39 ; AND (X),(Y) (X) <- (X) AND (Y) N......Z. - spcaddrDPbXb_bYb Op39b: - and al, ah - mov [spcNZ],al - WriteByte - ret +NEWSYM Op39 ; AND (X),(Y) (X) <- (X) AND (Y) N......Z. + spcaddrDPbXb_bYb Op39b: + and al, ah + mov [spcNZ],al + WriteByte + ret -NEWSYM Op59 ; EOR (X),(Y) (X) <- (X) EOR (Y) N......Z. - spcaddrDPbXb_bYb Op59b: - xor al, ah - mov [spcNZ],al - WriteByte - ret +NEWSYM Op59 ; EOR (X),(Y) (X) <- (X) EOR (Y) N......Z. + spcaddrDPbXb_bYb Op59b: + xor al, ah + mov [spcNZ],al + WriteByte + ret -NEWSYM Op79 ; CMP (X),(Y) (X)-(Y) N......ZC - spcaddrDPbXb_bYb Op79b: - cmp al, ah - cmc - SPCSetFlagnzc +NEWSYM Op79 ; CMP (X),(Y) (X)-(Y) N......ZC + spcaddrDPbXb_bYb Op79b: + cmp al, ah + cmc + SPCSetFlagnzc -NEWSYM Op99 ; ADC (X),(Y) (X) <- (X)+(Y)+C NV..H..ZC - spcaddrDPbXb_bYb Op99b: - mov cl,[spcP] - shr cl,1 - adc al,ah - SPCSetFlagnvhzcnoret - WriteByte - ret +NEWSYM Op99 ; ADC (X),(Y) (X) <- (X)+(Y)+C NV..H..ZC + spcaddrDPbXb_bYb Op99b: + mov cl,[spcP] + shr cl,1 + adc al,ah + SPCSetFlagnvhzcnoret + WriteByte + ret -NEWSYM OpB9 ; SBC (X),(Y) (X) <- (X)-(Y)-!C NV..H..ZC - spcaddrDPbXb_bYb OpB9b: - mov cl,[spcP] - xor cl,1 - shr cl,1 - sbb al,ah - cmc - SPCSetFlagnvhzcnoret - WriteByte - ret +NEWSYM OpB9 ; SBC (X),(Y) (X) <- (X)-(Y)-!C NV..H..ZC + spcaddrDPbXb_bYb OpB9b: + mov cl,[spcP] + xor cl,1 + shr cl,1 + sbb al,ah + cmc + SPCSetFlagnvhzcnoret + WriteByte + ret ;************************************************ ; MOV ,A instructions (Verified) ;************************************************ -NEWSYM OpC4 ; MOV dp,A A -> (dp) ........ - mov bl,[ebp] - mov al, [spcA] - add ebx,[spcRamDP] - inc ebp - WriteByte - ret +NEWSYM OpC4 ; MOV dp,A A -> (dp) ........ + mov bl,[ebp] + mov al, [spcA] + add ebx,[spcRamDP] + inc ebp + WriteByte + ret -NEWSYM OpD4 ; MOV dp+x,A A -> (dp+X) ........ - mov bl,[ebp] - add bl,[spcX] - mov al, [spcA] - add ebx,[spcRamDP] - inc ebp - WriteByte - ret +NEWSYM OpD4 ; MOV dp+x,A A -> (dp+X) ........ + mov bl,[ebp] + add bl,[spcX] + mov al, [spcA] + add ebx,[spcRamDP] + inc ebp + WriteByte + ret -NEWSYM OpC5 ; MOV labs,A A -> (abs) ........ - mov bx,[ebp] - mov al, [spcA] - add ebp,2 - add ebx,SPCRAM - WriteByte - ret +NEWSYM OpC5 ; MOV labs,A A -> (abs) ........ + mov bx,[ebp] + mov al, [spcA] + add ebp,2 + add ebx,SPCRAM + WriteByte + ret -NEWSYM OpD5 ; MOV labs+X,A A -> (abs+X) ........ - mov bl,[spcX] - add bx,[ebp] - mov al, [spcA] - add ebp,2 - add ebx,SPCRAM - WriteByte - ret +NEWSYM OpD5 ; MOV labs+X,A A -> (abs+X) ........ + mov bl,[spcX] + add bx,[ebp] + mov al, [spcA] + add ebp,2 + add ebx,SPCRAM + WriteByte + ret -NEWSYM OpC6 ; MOV (X),A A -> (X) ........ - mov bl,[spcX] - add ebx,[spcRamDP] - mov al, [spcA] - WriteByte - ret +NEWSYM OpC6 ; MOV (X),A A -> (X) ........ + mov bl,[spcX] + add ebx,[spcRamDP] + mov al, [spcA] + WriteByte + ret -NEWSYM OpD6 ; MOV labs+Y,A A -> (abs+Y) ........ - mov bl,[spcY] - mov al, [spcA] - add bx,[ebp] - add ebp,2 - add ebx,SPCRAM - WriteByte - ret +NEWSYM OpD6 ; MOV labs+Y,A A -> (abs+Y) ........ + mov bl,[spcY] + mov al, [spcA] + add bx,[ebp] + add ebp,2 + add ebx,SPCRAM + WriteByte + ret -NEWSYM OpC7 ; MOV (dp+X),A A -> ((dp+X+1)(dp+X)) ........ - mov bl,[ebp] - add bl,[spcX] - xor eax,eax - add ebx,[spcRamDP] - inc ebp - mov ax, [ebx] - mov ebx,eax - add ebx,SPCRAM - mov al, [spcA] - WriteByte - ret +NEWSYM OpC7 ; MOV (dp+X),A A -> ((dp+X+1)(dp+X)) ........ + mov bl,[ebp] + add bl,[spcX] + xor eax,eax + add ebx,[spcRamDP] + inc ebp + mov ax, [ebx] + mov ebx,eax + add ebx,SPCRAM + mov al, [spcA] + WriteByte + ret -NEWSYM OpD7 ; MOV (dp)+Y,A A -> ((dp+1)(dp)+Y) ........ - mov bl,[ebp] - xor eax,eax - add ebx,[spcRamDP] - inc ebp - mov ax, [ebx] - add ax,[spcY] - mov ebx,eax - add ebx,SPCRAM - mov al, [spcA] - WriteByte - ret +NEWSYM OpD7 ; MOV (dp)+Y,A A -> ((dp+1)(dp)+Y) ........ + mov bl,[ebp] + xor eax,eax + add ebx,[spcRamDP] + inc ebp + mov ax, [ebx] + add ax,[spcY] + mov ebx,eax + add ebx,SPCRAM + mov al, [spcA] + WriteByte + ret ;************************************************ ; MOV instructions (Verified) ;************************************************ -NEWSYM OpD8 ; MOV dp,X X -> (dp) ........ - mov bl,[ebp] - mov al, [spcX] - add ebx,[spcRamDP] - inc ebp - WriteByte - ret +NEWSYM OpD8 ; MOV dp,X X -> (dp) ........ + mov bl,[ebp] + mov al, [spcX] + add ebx,[spcRamDP] + inc ebp + WriteByte + ret -NEWSYM OpF8 ; MOV X,dp X <- (dp) N......Z - mov bl,[ebp] - inc ebp - add ebx,[spcRamDP] - ReadByte - mov [spcX], al - mov [spcNZ],al - ret +NEWSYM OpF8 ; MOV X,dp X <- (dp) N......Z + mov bl,[ebp] + inc ebp + add ebx,[spcRamDP] + ReadByte + mov [spcX], al + mov [spcNZ],al + ret -NEWSYM OpC9 ; MOV labs,X X -> (abs) ........ - mov bx,[ebp] - mov al, [spcX] - add ebp,2 - add ebx,SPCRAM - WriteByte - ret +NEWSYM OpC9 ; MOV labs,X X -> (abs) ........ + mov bx,[ebp] + mov al, [spcX] + add ebp,2 + add ebx,SPCRAM + WriteByte + ret -NEWSYM OpE9 ; MOV X,labs X <- (abs) N......Z - mov bx,[ebp] - add ebx,SPCRAM - ReadByte - add ebp,2 - mov [spcX], al - mov [spcNZ],al - ret +NEWSYM OpE9 ; MOV X,labs X <- (abs) N......Z + mov bx,[ebp] + add ebx,SPCRAM + ReadByte + add ebp,2 + mov [spcX], al + mov [spcNZ],al + ret -NEWSYM OpD9 ; MOV dp+Y,X X -> (dp+Y) ........ - mov bl,[ebp] - mov al, [spcX] - add bl,[spcY] - inc ebp - add ebx,[spcRamDP] - WriteByte - ret +NEWSYM OpD9 ; MOV dp+Y,X X -> (dp+Y) ........ + mov bl,[ebp] + mov al, [spcX] + add bl,[spcY] + inc ebp + add ebx,[spcRamDP] + WriteByte + ret -NEWSYM OpF9 ; MOV X,dp+Y X <- (dp+Y) N......Z - mov bl,[ebp] - add bl,[spcY] - inc ebp - add ebx,[spcRamDP] - ReadByte - mov [spcX], al - mov [spcNZ],al - ret +NEWSYM OpF9 ; MOV X,dp+Y X <- (dp+Y) N......Z + mov bl,[ebp] + add bl,[spcY] + inc ebp + add ebx,[spcRamDP] + ReadByte + mov [spcX], al + mov [spcNZ],al + ret -NEWSYM OpCB ; MOV dp,Y Y -> (dp) ........ - mov bl,[ebp] - mov al, [spcY] - add ebx,[spcRamDP] - inc ebp - WriteByte - ret +NEWSYM OpCB ; MOV dp,Y Y -> (dp) ........ + mov bl,[ebp] + mov al, [spcY] + add ebx,[spcRamDP] + inc ebp + WriteByte + ret -NEWSYM OpEB ; MOV Y,dp Y <- (dp) N......Z - mov bl,[ebp] - add ebx,[spcRamDP] - inc ebp - ReadByte - mov [spcY], al - mov [spcNZ],al - ret +NEWSYM OpEB ; MOV Y,dp Y <- (dp) N......Z + mov bl,[ebp] + add ebx,[spcRamDP] + inc ebp + ReadByte + mov [spcY], al + mov [spcNZ],al + ret -NEWSYM OpDB ; MOV dp+X,Y X -> (dp+X) ........ - mov bl,[ebp] - add bl,[spcX] - mov al, [spcY] - add ebx,[spcRamDP] - inc ebp - WriteByte - ret +NEWSYM OpDB ; MOV dp+X,Y X -> (dp+X) ........ + mov bl,[ebp] + add bl,[spcX] + mov al, [spcY] + add ebx,[spcRamDP] + inc ebp + WriteByte + ret -NEWSYM OpFB ; MOV Y,dp+X Y <- (dp+X) N......Z - mov bl,[ebp] - add bl,[spcX] - inc ebp - add ebx,[spcRamDP] - ReadByte - mov [spcY], al - mov [spcNZ],al - ret +NEWSYM OpFB ; MOV Y,dp+X Y <- (dp+X) N......Z + mov bl,[ebp] + add bl,[spcX] + inc ebp + add ebx,[spcRamDP] + ReadByte + mov [spcY], al + mov [spcNZ],al + ret -NEWSYM OpCC ; MOV labs,Y Y -> (abs) ........ - mov bx,[ebp] - mov al, [spcY] - add ebp,2 - add ebx,SPCRAM - WriteByte - ret +NEWSYM OpCC ; MOV labs,Y Y -> (abs) ........ + mov bx,[ebp] + mov al, [spcY] + add ebp,2 + add ebx,SPCRAM + WriteByte + ret -NEWSYM OpEC ; MOV Y,labs Y <- (abs) N......Z - mov bx,[ebp] - add ebx,SPCRAM - ReadByte - add ebp,2 - mov [spcY],al - mov [spcNZ],al - ret +NEWSYM OpEC ; MOV Y,labs Y <- (abs) N......Z + mov bx,[ebp] + add ebx,SPCRAM + ReadByte + add ebp,2 + mov [spcY],al + mov [spcNZ],al + ret -NEWSYM Op5D ; MOV X,A X <- A N......Z - mov al,[spcA] - mov [spcX],al - mov [spcNZ],al - ret +NEWSYM Op5D ; MOV X,A X <- A N......Z + mov al,[spcA] + mov [spcX],al + mov [spcNZ],al + ret -NEWSYM Op7D ; MOV A,X A <- X N......Z - mov al,[spcX] - mov [spcA],al - mov [spcNZ],al - ret +NEWSYM Op7D ; MOV A,X A <- X N......Z + mov al,[spcX] + mov [spcA],al + mov [spcNZ],al + ret -NEWSYM Op8D ; MOV Y,#inm Y <- inm N......Z - mov bl,[ebp] - mov [spcY],bl - inc ebp - mov [spcNZ],bl - ret +NEWSYM Op8D ; MOV Y,#inm Y <- inm N......Z + mov bl,[ebp] + mov [spcY],bl + inc ebp + mov [spcNZ],bl + ret -NEWSYM OpCD ; MOV X,#inm X <- inm N......Z - mov bl,[ebp] - mov [spcX],bl - inc ebp - mov [spcNZ],bl - ret +NEWSYM OpCD ; MOV X,#inm X <- inm N......Z + mov bl,[ebp] + mov [spcX],bl + inc ebp + mov [spcNZ],bl + ret -NEWSYM Op8F ; MOV dp,#inm (dp) <- inm ........ - mov bl,[ebp+1] - mov al,[ebp] - add ebx,[spcRamDP] - add ebp,2 - WriteByte - ret +NEWSYM Op8F ; MOV dp,#inm (dp) <- inm ........ + mov bl,[ebp+1] + mov al,[ebp] + add ebx,[spcRamDP] + add ebp,2 + WriteByte + ret -NEWSYM Op9D ; MOV X,SP X <- SP N......Z - mov al,[spcS] - mov [spcX],al - mov [spcNZ],al - ret +NEWSYM Op9D ; MOV X,SP X <- SP N......Z + mov al,[spcS] + mov [spcX],al + mov [spcNZ],al + ret -NEWSYM OpBD ; MOV SP,X SP <- X ........ - mov al,[spcX] - mov [spcS],al - ret +NEWSYM OpBD ; MOV SP,X SP <- X ........ + mov al,[spcX] + mov [spcS],al + ret -NEWSYM OpDD ; MOV A,Y A <- Y N......Z - mov al,[spcY] - mov [spcA],al - mov [spcNZ],al - ret +NEWSYM OpDD ; MOV A,Y A <- Y N......Z + mov al,[spcY] + mov [spcA],al + mov [spcNZ],al + ret -NEWSYM OpFD ; MOV Y,A Y <- A N......Z - mov al,[spcA] - mov [spcY],al - mov [spcNZ],al - ret +NEWSYM OpFD ; MOV Y,A Y <- A N......Z + mov al,[spcA] + mov [spcY],al + mov [spcNZ],al + ret -NEWSYM OpAF ; MOV (X)+,A A -> (X) with auto inc ........ - mov bl,[spcX] - add ebx,[spcRamDP] - mov al, [spcA] - inc byte[spcX] - WriteByte - ret +NEWSYM OpAF ; MOV (X)+,A A -> (X) with auto inc ........ + mov bl,[spcX] + add ebx,[spcRamDP] + mov al, [spcA] + inc byte[spcX] + WriteByte + ret -NEWSYM OpBF ; MOV A,(X)+ A <- (X) with auto inc N......Z - mov bl,[spcX] - add ebx,[spcRamDP] - ReadByte - inc byte[spcX] - mov [spcA],al - mov [spcNZ],al - ret +NEWSYM OpBF ; MOV A,(X)+ A <- (X) with auto inc N......Z + mov bl,[spcX] + add ebx,[spcRamDP] + ReadByte + inc byte[spcX] + mov [spcA],al + mov [spcNZ],al + ret ;************************************************ ; CMP instructions (Verified) ;************************************************ -NEWSYM OpC8 ; CMP X,#inm X-inm N......ZC - mov bl,[ebp] - inc ebp - cmp [spcX],bl - cmc - SPCSetFlagnzc +NEWSYM OpC8 ; CMP X,#inm X-inm N......ZC + mov bl,[ebp] + inc ebp + cmp [spcX],bl + cmc + SPCSetFlagnzc -NEWSYM OpAD ; CMP Y,#inm Y-inm N......ZC - mov bl,[ebp] - inc ebp - cmp [spcY],bl - cmc - SPCSetFlagnzc +NEWSYM OpAD ; CMP Y,#inm Y-inm N......ZC + mov bl,[ebp] + inc ebp + cmp [spcY],bl + cmc + SPCSetFlagnzc -NEWSYM Op1E ; CMP X,labs X-(abs) N......ZC - mov bx,[ebp] - add ebp,2 - add ebx,SPCRAM - ReadByte - cmp byte[spcX], al - cmc - SPCSetFlagnzc +NEWSYM Op1E ; CMP X,labs X-(abs) N......ZC + mov bx,[ebp] + add ebp,2 + add ebx,SPCRAM + ReadByte + cmp byte[spcX], al + cmc + SPCSetFlagnzc -NEWSYM Op3E ; CMP X,dp X-(dp) N......ZC - mov bl,[ebp] - add ebx,[spcRamDP] - inc ebp - ReadByte - cmp byte[spcX], al - cmc - SPCSetFlagnzc +NEWSYM Op3E ; CMP X,dp X-(dp) N......ZC + mov bl,[ebp] + add ebx,[spcRamDP] + inc ebp + ReadByte + cmp byte[spcX], al + cmc + SPCSetFlagnzc -NEWSYM Op5E ; CMP Y,labs Y-(abs) N......ZC - mov bx,[ebp] - add ebx,SPCRAM - ReadByte - add ebp,2 - cmp byte[spcY], al - cmc - SPCSetFlagnzc +NEWSYM Op5E ; CMP Y,labs Y-(abs) N......ZC + mov bx,[ebp] + add ebx,SPCRAM + ReadByte + add ebp,2 + cmp byte[spcY], al + cmc + SPCSetFlagnzc -NEWSYM Op7E ; CMP Y,dp Y-(dp) N......ZC - mov bl,[ebp] - add ebx,[spcRamDP] - inc ebp - ReadByte - cmp byte[spcY], al - cmc - SPCSetFlagnzc +NEWSYM Op7E ; CMP Y,dp Y-(dp) N......ZC + mov bl,[ebp] + add ebx,[spcRamDP] + inc ebp + ReadByte + cmp byte[spcY], al + cmc + SPCSetFlagnzc ;************************************************ ; Word Instructions (Verified) ;************************************************ -NEWSYM Op1A ; DECW dp Decrement dp memory pair N......Z. - mov bl,[ebp] - add ebx,[spcRamDP] - inc ebp - inc ebx - ReadByte2 - mov ah,al - dec ebx +NEWSYM Op1A ; DECW dp Decrement dp memory pair N......Z. + mov bl,[ebp] + add ebx,[spcRamDP] + inc ebp + inc ebx + ReadByte2 + mov ah,al + dec ebx NEWSYM Op1AB - ReadByte2 - dec ax - test ax,8000h - jnz .YesNeg - cmp ax,0000h - je .YesZero - mov byte[spcNZ],1 - jmp .SkipFlag + ReadByte2 + dec ax + test ax,8000h + jnz .YesNeg + cmp ax,0000h + je .YesZero + mov byte[spcNZ],1 + jmp .SkipFlag .YesNeg - mov byte[spcNZ],80h - jmp .SkipFlag + mov byte[spcNZ],80h + jmp .SkipFlag .YesZero - mov byte[spcNZ],0 + mov byte[spcNZ],0 .SkipFlag - push ebx - WriteByte - pop ebx + push ebx + WriteByte + pop ebx NEWSYM Op1Ab - inc ebx - mov al,ah - WriteByte - ret + inc ebx + mov al,ah + WriteByte + ret -NEWSYM Op3A ; INCW dp Increment dp memory pair N......Z. - mov bl,[ebp] - add ebx,[spcRamDP] - inc ebp - inc ebx - ReadByte2 - mov ah,al - dec ebx +NEWSYM Op3A ; INCW dp Increment dp memory pair N......Z. + mov bl,[ebp] + add ebx,[spcRamDP] + inc ebp + inc ebx + ReadByte2 + mov ah,al + dec ebx NEWSYM Op3AB - ReadByte2 - inc ax - test ax,8000h - jnz .YesNeg - cmp ax,0000h - je .YesZero - mov byte[spcNZ],1 - jmp .SkipFlag + ReadByte2 + inc ax + test ax,8000h + jnz .YesNeg + cmp ax,0000h + je .YesZero + mov byte[spcNZ],1 + jmp .SkipFlag .YesNeg - mov byte[spcNZ],80h - jmp .SkipFlag + mov byte[spcNZ],80h + jmp .SkipFlag .YesZero - mov byte[spcNZ],0 + mov byte[spcNZ],0 .SkipFlag - push ebx - WriteByte - pop ebx + push ebx + WriteByte + pop ebx NEWSYM Op3Ab - inc ebx - mov al,ah - WriteByte - ret + inc ebx + mov al,ah + WriteByte + ret ; looks like there is the Carry flag checked in op5a.. -NEWSYM Op5A ; CMPW YA,dp YA - (dp+1)(dp) N......ZC - mov bl,[ebp] - add ebx,[spcRamDP] - inc ebp - inc ebx - ReadByte2 - mov ah,al - dec ebx +NEWSYM Op5A ; CMPW YA,dp YA - (dp+1)(dp) N......ZC + mov bl,[ebp] + add ebx,[spcRamDP] + inc ebp + inc ebx + ReadByte2 + mov ah,al + dec ebx NEWSYM Op5AB - ReadByte - mov bl,[spcA] - mov bh,[spcY] - cmp bx,ax - cmc - SPCSetFlagnzc + ReadByte + mov bl,[spcA] + mov bh,[spcY] + cmp bx,ax + cmc + SPCSetFlagnzc -NEWSYM Op7A ; ADDW YA,dp YA <- YA + (dp+1)(dp) NV..H..ZC - mov bl,[ebp] - add ebx,[spcRamDP] - inc ebp - inc ebx - ReadByte2 - mov ah,al - dec ebx +NEWSYM Op7A ; ADDW YA,dp YA <- YA + (dp+1)(dp) NV..H..ZC + mov bl,[ebp] + add ebx,[spcRamDP] + inc ebp + inc ebx + ReadByte2 + mov ah,al + dec ebx NEWSYM Op7AB - ReadByte - mov bl,[spcA] - mov bh,[spcY] - add bx,ax - mov [spcA],bl - mov [spcY],bh - SPCSetFlagnvhzc + ReadByte + mov bl,[spcA] + mov bh,[spcY] + add bx,ax + mov [spcA],bl + mov [spcY],bh + SPCSetFlagnvhzc -NEWSYM Op9A ; SUBW YA,dp YA <- YA - (dp+1)(dp) NV..H..ZC - mov bl,[ebp] - add ebx,[spcRamDP] - inc ebp - inc ebx - ReadByte2 - mov ah,al - dec ebx +NEWSYM Op9A ; SUBW YA,dp YA <- YA - (dp+1)(dp) NV..H..ZC + mov bl,[ebp] + add ebx,[spcRamDP] + inc ebp + inc ebx + ReadByte2 + mov ah,al + dec ebx NEWSYM Op9AB - ReadByte - mov bl,[spcA] - mov bh,[spcY] - sub bx,ax - cmc - mov [spcA],bl - mov [spcY],bh - SPCSetFlagnvhzc + ReadByte + mov bl,[spcA] + mov bh,[spcY] + sub bx,ax + cmc + mov [spcA],bl + mov [spcY],bh + SPCSetFlagnvhzc -NEWSYM OpBA ; MOVW YA,dp YA - (dp+1)(dp) N......Z. - mov bl,[ebp] - add ebx,[spcRamDP] - inc ebp - inc ebx - ReadByte2 - mov ah,al - dec ebx +NEWSYM OpBA ; MOVW YA,dp YA - (dp+1)(dp) N......Z. + mov bl,[ebp] + add ebx,[spcRamDP] + inc ebp + inc ebx + ReadByte2 + mov ah,al + dec ebx NEWSYM OpBAb - ReadByte - mov [spcA],al - mov [spcY],ah - test ax,8000h - jnz .YesNeg - cmp ax,0000h - je .YesZero - mov byte[spcNZ],1 - ret + ReadByte + mov [spcA],al + mov [spcY],ah + test ax,8000h + jnz .YesNeg + cmp ax,0000h + je .YesZero + mov byte[spcNZ],1 + ret .YesNeg - mov byte[spcNZ],80h - ret + mov byte[spcNZ],80h + ret .YesZero - mov byte[spcNZ],0 - ret + mov byte[spcNZ],0 + ret -NEWSYM OpDA ; MOVW dp,YA (dp+1)(dp) - YA ......... - mov bl,[ebp] - mov al,[spcA] - add ebx,[spcRamDP] - inc ebp - push ebx - WriteByte - pop ebx - inc ebx - mov al,[spcY] +NEWSYM OpDA ; MOVW dp,YA (dp+1)(dp) - YA ......... + mov bl,[ebp] + mov al,[spcA] + add ebx,[spcRamDP] + inc ebp + push ebx + WriteByte + pop ebx + inc ebx + mov al,[spcY] NEWSYM OpDAb - WriteByte - ret + WriteByte + ret ;************************************************ ; mem.bit instructions (Verified) ;************************************************ %macro spcaddrmembit 0 - mov bx,[ebp] + mov bx,[ebp] - mov cl,bh - add ebp,2 - shr cl,5 - and bx,1FFFh + mov cl,bh + add ebp,2 + shr cl,5 + and bx,1FFFh -; mov cl,bl -; add ebp,2 -; shr bx,3 -; and cl,00000111b +; mov cl,bl +; add ebp,2 +; shr bx,3 +; and cl,00000111b - add ebx,SPCRAM - ReadByte - shr al,cl - and al,01h + add ebx,SPCRAM + ReadByte + shr al,cl + and al,01h %endmacro -NEWSYM Op0A ; OR1 C,mem.bit C <- C OR (mem.bit) ........C - spcaddrmembit - or [spcP],al - ret +NEWSYM Op0A ; OR1 C,mem.bit C <- C OR (mem.bit) ........C + spcaddrmembit + or [spcP],al + ret -NEWSYM Op2A ; OR1 C,/mem.bit C <- C OR !(mem.bit) ........C - spcaddrmembit - xor al,01h - or [spcP],al - ret +NEWSYM Op2A ; OR1 C,/mem.bit C <- C OR !(mem.bit) ........C + spcaddrmembit + xor al,01h + or [spcP],al + ret -NEWSYM Op4A ; AND1 C,mem.bit C <- C AND (mem.bit) ........C - mov bx,[ebp] +NEWSYM Op4A ; AND1 C,mem.bit C <- C AND (mem.bit) ........C + mov bx,[ebp] - mov cl,bh - add ebp,2 - shr cl,5 - and bx,1FFFh + mov cl,bh + add ebp,2 + shr cl,5 + and bx,1FFFh -; mov cl,bl -; add ebp,2 -; shr bx,3 -; and cl,00000111b +; mov cl,bl +; add ebp,2 +; shr bx,3 +; and cl,00000111b - add ebx,SPCRAM - ReadByte - shr al,cl - or al,0FEh - and [spcP],al - ret + add ebx,SPCRAM + ReadByte + shr al,cl + or al,0FEh + and [spcP],al + ret -NEWSYM Op6A ; AND1 C,/mem.bit C <- C AND !(mem.bit) ........C - mov bx,[ebp] +NEWSYM Op6A ; AND1 C,/mem.bit C <- C AND !(mem.bit) ........C + mov bx,[ebp] - mov cl,bh - add ebp,2 - shr cl,5 - and bx,1FFFh + mov cl,bh + add ebp,2 + shr cl,5 + and bx,1FFFh -; mov cl,bl -; add ebp,2 -; shr bx,3 -; and cl,00000111b +; mov cl,bl +; add ebp,2 +; shr bx,3 +; and cl,00000111b - add ebx,SPCRAM - ReadByte - shr al,cl - or al,0FEh - xor al,01h - and [spcP],al - ret + add ebx,SPCRAM + ReadByte + shr al,cl + or al,0FEh + xor al,01h + and [spcP],al + ret -NEWSYM Op8A ; EOR1 C,mem.bit C <- C EOR (mem.bit) ........C - spcaddrmembit - xor [spcP],al - ret +NEWSYM Op8A ; EOR1 C,mem.bit C <- C EOR (mem.bit) ........C + spcaddrmembit + xor [spcP],al + ret -NEWSYM OpAA ; MOV1 C,mem.bit C <- (mem.bit) - spcaddrmembit - and byte[spcP],0FEh - or [spcP],al - ret +NEWSYM OpAA ; MOV1 C,mem.bit C <- (mem.bit) + spcaddrmembit + and byte[spcP],0FEh + or [spcP],al + ret -NEWSYM OpCA ; MOV1 mem.bit,C C -> (mem.bit) ......... - mov bx,[ebp] - mov al,[spcP] +NEWSYM OpCA ; MOV1 mem.bit,C C -> (mem.bit) ......... + mov bx,[ebp] + mov al,[spcP] - mov cl,bh - mov ah,01h - shr cl,5 - and bx,1FFFh + mov cl,bh + mov ah,01h + shr cl,5 + and bx,1FFFh -; mov cl,bl -; mov ah,01h -; and cl,00000111b -; shr bx,3 +; mov cl,bl +; mov ah,01h +; and cl,00000111b +; shr bx,3 - shl ah,cl - and al,01h - add ebp,2 - shl al,cl - add ebx,SPCRAM - ; al = carry flag positioned in correct location, ah = 1 positioned - mov cl,al - xor ah,0FFh - ReadByte2 - and al,ah - or al,cl - WriteByte - ret + shl ah,cl + and al,01h + add ebp,2 + shl al,cl + add ebx,SPCRAM + ; al = carry flag positioned in correct location, ah = 1 positioned + mov cl,al + xor ah,0FFh + ReadByte2 + and al,ah + or al,cl + WriteByte + ret -NEWSYM OpEA ; NOT1 mem.bit complement (mem.bit) ......... - mov bx,[ebp] +NEWSYM OpEA ; NOT1 mem.bit complement (mem.bit) ......... + mov bx,[ebp] - mov cl,bh - mov ah,01h - shr cl,5 - and bx,1FFFh + mov cl,bh + mov ah,01h + shr cl,5 + and bx,1FFFh -; mov cl,bl -; mov ah,01h -; and cl,00000111b -; shr bx,3 +; mov cl,bl +; mov ah,01h +; and cl,00000111b +; shr bx,3 - shl ah,cl - add ebp,2 - add ebx,SPCRAM - ReadByte2 - xor al,ah - WriteByte - ret + shl ah,cl + add ebp,2 + add ebx,SPCRAM + ReadByte2 + xor al,ah + WriteByte + ret ;************************************************ ; Shift Instructions (Verified) ;************************************************ -NEWSYM Op0B ; ASL dp C << (dp) <<0 N......ZC - mov bl,[ebp] - add ebx,[spcRamDP] - inc ebp - ReadByte2 - shl al,1 - SPCSetFlagnzcnoret - WriteByte - ret +NEWSYM Op0B ; ASL dp C << (dp) <<0 N......ZC + mov bl,[ebp] + add ebx,[spcRamDP] + inc ebp + ReadByte2 + shl al,1 + SPCSetFlagnzcnoret + WriteByte + ret -NEWSYM Op4B ; LSR dp 0 >> (dp) <> (dp) <> (dp+X) <> (dp+X) <> (abs) <> (abs) <> A <> A <> (dp) <> (dp) <> (dp+X) <> (dp+X) <> (abs) <> (abs) <> A <> A <