📄 table.asm
字号:
;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach );;http://www.zsnes.com;http://sourceforge.net/projects/zsnes;https://zsnes.bountysource.com;;This program is free software; you can redistribute it and/or;modify it under the terms of the GNU General Public License;version 2 as published by the Free Software Foundation.;;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.%include "macros.mac"EXTSYM mosjmptab,mosdraw10,mosdraw11,mosdraw12,mosdraw13EXTSYM mosdraw14,mosdraw15,mosdraw16,mosdraw2,mosdraw3EXTSYM mosdraw4,mosdraw5,mosdraw6,mosdraw7,mosdraw8EXTSYM mosdraw9,ngpalcon2b,ngpalcon4bEXTSYM mosjmptab16b,mosdraw1016b,mosdraw1116b,mosdraw1216b,mosdraw1316bEXTSYM mosdraw1416b,mosdraw1516b,mosdraw1616b,mosdraw216b,mosdraw316bEXTSYM mosdraw416b,mosdraw516b,mosdraw616b,mosdraw716b,mosdraw816bEXTSYM mosdraw916bEXTSYM mosjmptab16bt,mosdraw1016bt,mosdraw1116bt,mosdraw1216bt,mosdraw1316btEXTSYM mosdraw1416bt,mosdraw1516bt,mosdraw1616bt,mosdraw216bt,mosdraw316btEXTSYM mosdraw416bt,mosdraw516bt,mosdraw616bt,mosdraw716bt,mosdraw816btEXTSYM mosdraw916btEXTSYM mosjmptab16btms,mosdraw1016btms,mosdraw1116btms,mosdraw1216btms,mosdraw1316btmsEXTSYM mosdraw1416btms,mosdraw1516btms,mosdraw1616btms,mosdraw216btms,mosdraw316btmsEXTSYM mosdraw416btms,mosdraw516btms,mosdraw616btms,mosdraw716btms,mosdraw816btmsEXTSYM mosdraw916btmsEXTSYM mosjmptab16bntms,mosdraw1016bntms,mosdraw1116bntms,mosdraw1216bntms,mosdraw1316bntmsEXTSYM mosdraw1416bntms,mosdraw1516bntms,mosdraw1616bntms,mosdraw216bntms,mosdraw316bntmsEXTSYM mosdraw416bntms,mosdraw516bntms,mosdraw616bntms,mosdraw716bntms,mosdraw816bntmsEXTSYM mosdraw916bntmsEXTSYM tableA,tableB,tableC,tableD,tableE,tableF,tableG,tableHEXTSYM DPageR8,DPageW8,DPageR16,DPageW16EXTSYM SDD1EnableEXTSYM JoyAOrig,JoyANow,JoyBOrig,JoyBNow,JoyCOrig,JoyCNow,JoyDOrig,JoyDNow%include "cpu/65816d.inc"%include "cpu/address.inc"%include "cpu/addrni.inc"%include "cpu/e65816.inc"%include "cpu/regs.mac"%include "cpu/regsw.mac"%include "cpu/regs.inc" ; start problem here%include "cpu/regsw.inc"section .data; global variables;tableA times 256 dd 0 ; Table addresses (M:0,X:0,D:0);tableB times 256 dd 0 ; Table addresses (M:1,X:0,D:0);tableC times 256 dd 0 ; Table addresses (M:0,X:1,D:0);tableD times 256 dd 0 ; Table addresses (M:1,X:1,D:0);tableE times 256 dd 0 ; Table addresses (M:0,X:0,D:1);tableF times 256 dd 0 ; Table addresses (M:1,X:0,D:1);tableG times 256 dd 0 ; Table addresses (M:0,X:1,D:1);tableH times 256 dd 0 ; Table addresses (M:1,X:1,D:1)NEWSYM addrmdef, times 27 dd 0 ; Address modes;tablead times 256 dd 0 ; Table address location according to P;memtabler8 times 256 dd 0 ; Memory Bank Locations for reading 8-bit;memtablew8 times 256 dd 0 ; Memory Bank Locations for writing 8-bit;memtabler16 times 256 dd 0 ; Memory Bank Locations for reading 16-bit;memtablew16 times 256 dd 0 ; Memory Bank Locations for reading 16-bitsection .text;*******************************************************; Generate OpCode Table;*******************************************************NEWSYM inittable ; set up mosaic mov dword[mosjmptab],mosdraw2 mov dword[mosjmptab+4],mosdraw3 mov dword[mosjmptab+8],mosdraw4 mov dword[mosjmptab+12],mosdraw5 mov dword[mosjmptab+16],mosdraw6 mov dword[mosjmptab+20],mosdraw7 mov dword[mosjmptab+24],mosdraw8 mov dword[mosjmptab+28],mosdraw9 mov dword[mosjmptab+32],mosdraw10 mov dword[mosjmptab+36],mosdraw11 mov dword[mosjmptab+40],mosdraw12 mov dword[mosjmptab+44],mosdraw13 mov dword[mosjmptab+48],mosdraw14 mov dword[mosjmptab+52],mosdraw15 mov dword[mosjmptab+56],mosdraw16 mov dword[mosjmptab16b],mosdraw216b mov dword[mosjmptab16b+4],mosdraw316b mov dword[mosjmptab16b+8],mosdraw416b mov dword[mosjmptab16b+12],mosdraw516b mov dword[mosjmptab16b+16],mosdraw616b mov dword[mosjmptab16b+20],mosdraw716b mov dword[mosjmptab16b+24],mosdraw816b mov dword[mosjmptab16b+28],mosdraw916b mov dword[mosjmptab16b+32],mosdraw1016b mov dword[mosjmptab16b+36],mosdraw1116b mov dword[mosjmptab16b+40],mosdraw1216b mov dword[mosjmptab16b+44],mosdraw1316b mov dword[mosjmptab16b+48],mosdraw1416b mov dword[mosjmptab16b+52],mosdraw1516b mov dword[mosjmptab16b+56],mosdraw1616b mov dword[mosjmptab16bt],mosdraw216bt mov dword[mosjmptab16bt+4],mosdraw316bt mov dword[mosjmptab16bt+8],mosdraw416bt mov dword[mosjmptab16bt+12],mosdraw516bt mov dword[mosjmptab16bt+16],mosdraw616bt mov dword[mosjmptab16bt+20],mosdraw716bt mov dword[mosjmptab16bt+24],mosdraw816bt mov dword[mosjmptab16bt+28],mosdraw916bt mov dword[mosjmptab16bt+32],mosdraw1016bt mov dword[mosjmptab16bt+36],mosdraw1116bt mov dword[mosjmptab16bt+40],mosdraw1216bt mov dword[mosjmptab16bt+44],mosdraw1316bt mov dword[mosjmptab16bt+48],mosdraw1416bt mov dword[mosjmptab16bt+52],mosdraw1516bt mov dword[mosjmptab16bt+56],mosdraw1616bt mov dword[mosjmptab16btms],mosdraw216btms mov dword[mosjmptab16btms+4],mosdraw316btms mov dword[mosjmptab16btms+8],mosdraw416btms mov dword[mosjmptab16btms+12],mosdraw516btms mov dword[mosjmptab16btms+16],mosdraw616btms mov dword[mosjmptab16btms+20],mosdraw716btms mov dword[mosjmptab16btms+24],mosdraw816btms mov dword[mosjmptab16btms+28],mosdraw916btms mov dword[mosjmptab16btms+32],mosdraw1016btms mov dword[mosjmptab16btms+36],mosdraw1116btms mov dword[mosjmptab16btms+40],mosdraw1216btms mov dword[mosjmptab16btms+44],mosdraw1316btms mov dword[mosjmptab16btms+48],mosdraw1416btms mov dword[mosjmptab16btms+52],mosdraw1516btms mov dword[mosjmptab16btms+56],mosdraw1616btms mov dword[mosjmptab16bntms],mosdraw216bntms mov dword[mosjmptab16bntms+4],mosdraw316bntms mov dword[mosjmptab16bntms+8],mosdraw416bntms mov dword[mosjmptab16bntms+12],mosdraw516bntms mov dword[mosjmptab16bntms+16],mosdraw616bntms mov dword[mosjmptab16bntms+20],mosdraw716bntms mov dword[mosjmptab16bntms+24],mosdraw816bntms mov dword[mosjmptab16bntms+28],mosdraw916bntms mov dword[mosjmptab16bntms+32],mosdraw1016bntms mov dword[mosjmptab16bntms+36],mosdraw1116bntms mov dword[mosjmptab16bntms+40],mosdraw1216bntms mov dword[mosjmptab16bntms+44],mosdraw1316bntms mov dword[mosjmptab16bntms+48],mosdraw1416bntms mov dword[mosjmptab16bntms+52],mosdraw1516bntms mov dword[mosjmptab16bntms+56],mosdraw1616bntms ; set ngpalcon4b mov ecx,20h xor eax,eax.loopng mov bl,al shr bl,2 shl bl,4 mov dl,bl mov dh,bl shl edx,16 mov dl,bl mov dh,bl mov [ngpalcon4b+eax*4],edx inc eax dec ecx jnz .loopng ; set ngpalcon2b mov ecx,20h xor eax,eax.loopngb mov bl,al shr bl,2 shl bl,2 mov dl,bl mov dh,bl shl edx,16 mov dl,bl mov dh,bl mov [ngpalcon2b+eax*4],edx inc eax dec ecx jnz .loopngb ; set tablead (NVMXDIZC) ( MXD ) push es xor ecx,ecx xor al,al mov cx,256 mov edi,tablead.loopa test al,08h ; D flag jnz .decon test al,10h ; X flag jnz .xon test al,20h ; M flag jnz .mon mov esi,tableA jmp .done.mon mov esi,tableB jmp .done.xon test al,20h ; M flag jnz .mon2 mov esi,tableC jmp .done.mon2 mov esi,tableD jmp .done.decon test al,10h ; X flag jnz .xon3 test al,20h ; M flag jnz .mon3 mov esi,tableE jmp .done.mon3 mov esi,tableF jmp .done.xon3 test al,20h jnz .mon4 mov esi,tableG jmp .done.mon4 mov esi,tableH.done inc al push eax mov eax,esi stosd pop eax dec ecx jnz .loopa ; Set CPU addresses ; First, set all addresses to invalid mov eax,eopINVALID mov edi,tableA mov ecx,256 rep stosd mov edi,tableB mov ecx,256 rep stosd mov edi,tableC mov ecx,256 rep stosd mov edi,tableD mov ecx,256 rep stosd mov edi,tableE mov ecx,256 rep stosd mov edi,tableF mov ecx,256 rep stosd mov edi,tableG mov ecx,256 rep stosd mov edi,tableH mov ecx,256 rep stosd mov edi,tableA call settables mov edi,tableB call settables mov edi,tableC call settables mov edi,tableD call settables mov edi,tableE call settables mov edi,tableF call settables mov edi,tableG call settables mov edi,tableH call settables ; set proper functions mov edi,tableA ; Table addresses (M:0,X:0,D:0) call settablem16 mov edi,tableA call settablex16 mov edi,tableB ; Table addresses (M:1,X:0,D:0) call settablex16 mov edi,tableC ; Table addresses (M:0,X:1,D:0) call settablem16 mov edi,tableE ; Table addresses (M:0,X:0,D:1) call settablem16 mov edi,tableE call settableDm16 mov edi,tableE call settablex16 mov edi,tableF ; Table addresses (M:1,X:0,D:1) call settablex16 mov edi,tableF call settableDm8 mov edi,tableG ; Table addresses (M:0,X:1,D:1) call settablem16 mov edi,tableG call settableDm16 mov edi,tableH ; Table addresses (M:1,X:1,D:1) call settableDm8 pop es reteopINVALID retsection .data;*******************************************************; Cpu Cycles Sets the CPU cycle table;*******************************************************NEWSYM cpucycle db 8, 6, 8, 4, 5, 3, 5, 6, 3, 2, 2, 4, 6, 4, 6, 5 db 2, 5, 5, 7, 5, 4, 6, 6, 2, 4, 2, 2, 6, 4, 7, 5 db 6, 6, 8, 4, 3, 3, 5, 6, 4, 2, 2, 5, 4, 4, 6, 5 db 2, 5, 5, 7, 4, 4, 6, 6, 2, 4, 2, 2, 4, 4, 7, 5 db 7, 6, 2, 4, 7, 3, 5, 6, 3, 2, 2, 3, 3, 4, 6, 5 db 2, 5, 5, 7, 7, 4, 6, 6, 2, 4, 3, 2, 4, 4, 7, 5 db 6, 6, 6, 4, 3, 3, 5, 6, 4, 2, 2, 6, 5, 4, 6, 5 db 2, 5, 5, 7, 4, 4, 6, 6, 2, 4, 4, 2, 6, 4, 7, 5 db 2, 6, 3, 4, 3, 3, 3, 6, 2, 2, 2, 3, 4, 4, 4, 5 db 2, 6, 5, 7, 4, 4, 4, 6, 2, 5, 2, 2, 4, 5, 5, 5 db 2, 6, 2, 4, 3, 3, 3, 6, 2, 2, 2, 4, 4, 4, 4, 5 db 2, 5, 5, 7, 4, 4, 4, 6, 2, 4, 2, 2, 4, 4, 4, 5 db 2, 6, 3, 4, 3, 3, 5, 6, 2, 2, 2, 3, 4, 4, 4, 5 db 2, 5, 5, 7, 6, 4, 6, 6, 2, 4, 3, 3, 6, 4, 7, 5 db 2, 6, 3, 4, 3, 3, 5, 6, 2, 2, 2, 3, 4, 4, 6, 5 db 2, 5, 5, 7, 5, 4, 6, 6, 2, 4, 4, 2, 6, 4, 7, 5; 28 | 26 | 28 | 24 | 25 | 23 | 25 | 26 | 13 | 22 | 12 | 14 | 36 | 34 | 36 | 45; 22 | 25 | 25 | 27 | 25 | 24 | 26 | 26 | 12 | 34 | 12 | 12 | 36 | 34 | 37 | 45; 36 | 26 | 48 | 24 | 23 | 23 | 25 | 26 | 14 | 22 | 12 | 15 | 34 | 34 | 36 | 45; 22 | 25 | 25 | 27 | 24 | 24 | 26 | 26 | 12 | 34 | 12 | 12 | 34 | 34 | 37 | 45; 17 | 26 | 22 | 24 | 37 | 23 | 25 | 26 | 13 | 22 | 12 | 13 | 33 | 34 | 36 | 45; 22 | 25 | 25 | 27 | 37 | 24 | 26 | 26 | 12 | 34 | 13 | 12 | 44 | 34 | 37 | 45; 16 | 26 | 36 | 24 | 23 | 23 | 25 | 26 | 14 | 22 | 12 | 16 | 35 | 34 | 36 | 45; 22 | 25 | 25 | 27 | 24 | 24 | 26 | 26 | 12 | 34 | 14 | 12 | 36 | 34 | 37 | 45; 22 | 26 | 33 | 24 | 23 | 23 | 23 | 26 | 12 | 22 | 12 | 13 | 34 | 34 | 34 | 45; 22 | 26 | 25 | 27 | 24 | 24 | 24 | 26 | 12 | 35 | 12 | 12 | 34 | 35 | 35 | 45; 22 | 26 | 22 | 24 | 23 | 23 | 23 | 26 | 12 | 22 | 12 | 14 | 34 | 34 | 34 | 45; 22 | 25 | 25 | 27 | 24 | 24 | 24 | 26 | 12 | 34 | 12 | 12 | 34 | 34 | 34 | 45; 22 | 26 | 23 | 24 | 23 | 23 | 25 | 26 | 12 | 22 | 12 | 13 | 34 | 34 | 34 | 45; 22 | 25 | 25 | 27 | 26 | 24 | 26 | 26 | 12 | 34 | 13 | 13 | 36 | 34 | 37 | 45; 22 | 26 | 23 | 24 | 23 | 23 | 25 | 26 | 12 | 22 | 12 | 13 | 34 | 34 | 36 | 45; 22 | 25 | 25 | 27 | 35 | 24 | 26 | 26 | 12 | 34 | 14 | 12 | 36 | 34 | 37 | 45section .text;*******************************************************; Set Tables Sets the opcode tables according to EDI;*******************************************************; This function sets all the non-multiple entriesNEWSYM settables ;row 0 mov dword[edi+00h*4],COp00 mov dword[edi+01h*4],COp01m8 mov dword[edi+02h*4],COp02 mov dword[edi+03h*4],COp03m8 mov dword[edi+04h*4],COp04m8 mov dword[edi+05h*4],COp05m8 mov dword[edi+06h*4],COp06m8 mov dword[edi+07h*4],COp07m8 mov dword[edi+08h*4],COp08 mov dword[edi+09h*4],COp09m8 mov dword[edi+0Ah*4],COp0Am8 mov dword[edi+0Bh*4],COp0B mov dword[edi+0Ch*4],COp0Cm8 mov dword[edi+0Dh*4],COp0Dm8 mov dword[edi+0Eh*4],COp0Em8 mov dword[edi+0Fh*4],COp0Fm8 mov dword[edi+10h*4],COp10 mov dword[edi+11h*4],COp11m8 mov dword[edi+12h*4],COp12m8 mov dword[edi+13h*4],COp13m8 mov dword[edi+14h*4],COp14m8 mov dword[edi+15h*4],COp15m8 mov dword[edi+16h*4],COp16m8 mov dword[edi+17h*4],COp17m8 mov dword[edi+18h*4],COp18 mov dword[edi+19h*4],COp19m8 mov dword[edi+1Ah*4],COp1Am8 mov dword[edi+1Bh*4],COp1B mov dword[edi+1Ch*4],COp1Cm8 mov dword[edi+1Dh*4],COp1Dm8 mov dword[edi+1Eh*4],COp1Em8 mov dword[edi+1Fh*4],COp1Fm8 mov dword[edi+20h*4],COp20 mov dword[edi+21h*4],COp21m8 mov dword[edi+22h*4],COp22 mov dword[edi+23h*4],COp23m8 mov dword[edi+24h*4],COp24m8 mov dword[edi+25h*4],COp25m8 mov dword[edi+26h*4],COp26m8 mov dword[edi+27h*4],COp27m8 mov dword[edi+28h*4],COp28 mov dword[edi+29h*4],COp29m8 mov dword[edi+2Ah*4],COp2Am8 mov dword[edi+2Bh*4],COp2B mov dword[edi+2Ch*4],COp2Cm8 mov dword[edi+2Dh*4],COp2Dm8 mov dword[edi+2Eh*4],COp2Em8 mov dword[edi+2Fh*4],COp2Fm8 mov dword[edi+30h*4],COp30 mov dword[edi+31h*4],COp31m8 mov dword[edi+32h*4],COp32m8 mov dword[edi+33h*4],COp33m8 mov dword[edi+34h*4],COp34m8 mov dword[edi+35h*4],COp35m8 mov dword[edi+36h*4],COp36m8 mov dword[edi+37h*4],COp37m8 mov dword[edi+38h*4],COp38 mov dword[edi+39h*4],COp39m8 mov dword[edi+3Ah*4],COp3Am8 mov dword[edi+3Bh*4],COp3B mov dword[edi+3Ch*4],COp3Cm8 mov dword[edi+3Dh*4],COp3Dm8 mov dword[edi+3Eh*4],COp3Em8 mov dword[edi+3Fh*4],COp3Fm8 mov dword[edi+40h*4],COp40 mov dword[edi+41h*4],COp41m8 mov dword[edi+42h*4],COp42 mov dword[edi+43h*4],COp43m8 mov dword[edi+44h*4],COp44 mov dword[edi+45h*4],COp45m8 mov dword[edi+46h*4],COp46m8 mov dword[edi+47h*4],COp47m8 mov dword[edi+48h*4],COp48m8 mov dword[edi+49h*4],COp49m8 mov dword[edi+4Ah*4],COp4Am8 mov dword[edi+4Bh*4],COp4B mov dword[edi+4Ch*4],COp4C mov dword[edi+4Dh*4],COp4Dm8 mov dword[edi+4Eh*4],COp4Em8 mov dword[edi+4Fh*4],COp4Fm8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -