Memmapping port step 1 - easier to read, still a lot to do. Power on w/ clear SRAM now works with SA-1 games. Reverted chips/sa1proc.asm to rev 1.42 because all recent work only breaks HnK3 (the SMRPG fix is due to pagefault's subscreen/windowing logic fixes).

This commit is contained in:
grinvader
2005-04-02 09:18:53 +00:00
parent 18ee239d33
commit a102f11b41
14 changed files with 863 additions and 1202 deletions

View File

@@ -3229,50 +3229,6 @@ NEWSYM SA1UpdateDPage
pop eax
ret
NEWSYM GenerateBank0Table
mov eax,Bank0datr8
writetobank0table membank0r8ram,20h
writetobank0table membank0r8reg,28h
writetobank0table membank0r8inv,17h
writetobank0table membank0r8chip,1Fh
writetobank0table membank0r8rom,81h
writetobank0table membank0r8romram,1h
mov eax,Bank0datw8
writetobank0table membank0w8ram,20h
writetobank0table membank0w8reg,28h
writetobank0table membank0w8inv,17h
writetobank0table membank0w8chip,1Fh
writetobank0table membank0w8rom,81h
writetobank0table membank0w8romram,1h
mov eax,Bank0datr16
writetobank0table membank0r16ram,1Fh
writetobank0table membank0r16ramh,1
writetobank0table membank0r16reg,28h
writetobank0table membank0r16inv,17h
writetobank0table membank0r16chip,1Fh
writetobank0table membank0r16rom,81h
writetobank0table membank0r16romram,1h
mov eax,Bank0datw16
writetobank0table membank0w16ram,1Fh
writetobank0table membank0w16ramh,1
writetobank0table membank0w16reg,28h
writetobank0table membank0w16inv,17h
writetobank0table membank0w16chip,1Fh
writetobank0table membank0w16rom,81h
writetobank0table membank0w16romram,1h
ret
NEWSYM GenerateBank0TableSA1
mov eax,Bank0datr8
writetobank0table membank0r8ramSA1,20h
mov eax,Bank0datw8
writetobank0table membank0w8ramSA1,20h
mov eax,Bank0datr16
writetobank0table membank0r16ramSA1,20h
mov eax,Bank0datw16
writetobank0table membank0w16ramSA1,20h
ret
; SA1 Stuff
NEWSYM membank0r8ramSA1 ; 0000-1FFF
cmp byte[SA1Status],0

432
zsnes/src/cpu/memtable.c Normal file
View File

@@ -0,0 +1,432 @@
/*
Copyright (C) 1997-2005 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
http://www.zsnes.com
http://sourceforge.net/projects/zsnes
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.
*/
#ifdef __LINUX__
#include "gblhdr.h"
#define DIR_SLASH "/"
#else
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#define DIR_SLASH "\\"
#endif
#include "gblvars.h"
extern unsigned int Curtableaddr, tableA[256];
void PrepareOffset()
{
Curtableaddr -= (unsigned int)tableA;
}
void ResetOffset()
{
Curtableaddr += (unsigned int)tableA;
}
extern unsigned int snesmmap[256], snesmap2[256];
void BankSwitchSDD1C (unsigned char bankval, unsigned int offset)
{
unsigned int curbankval = bankval, i;
curbankval &= 7;
curbankval <<= 20;
curbankval += (unsigned int)romdata;
for (i=0; i<16 ; i++)
{
snesmap2[offset+i] = curbankval;
snesmmap[offset+i] = curbankval;
curbankval += 0x10000;
}
}
extern unsigned char SDD1BankA, SDD1BankB, SDD1BankC, SDD1BankD;
void UpdateBanksSDD1()
{
if (SDD1BankA)
{
BankSwitchSDD1C(SDD1BankA, 0x0C0);
BankSwitchSDD1C(SDD1BankB, 0x0D0);
BankSwitchSDD1C(SDD1BankC, 0x0E0);
BankSwitchSDD1C(SDD1BankD, 0x0F0);
}
}
extern void (*Bank0datr8[256])(), (*Bank0datr16[256])(), (*Bank0datw8[256])();
extern void (*Bank0datw16[256])(), *DPageR8, *DPageR16, *DPageW8, *DPageW16;
extern unsigned int xdb, xpb, xs, xx, xy, xd;
extern unsigned short oamaddrt, xat, xst, xdt, xxt, xyt;
extern unsigned char xdbt, xpbt;
void UpdateDPageC()
{
DPageR8 = Bank0datr8[(xd >> 8) & 0xFF];
DPageR16 = Bank0datr16[(xd >> 8) & 0xFF];
DPageW8 = Bank0datw8[(xd >> 8) & 0xFF];
DPageW16 = Bank0datw16[(xd >> 8) & 0xFF];
}
extern unsigned int SA1xd;
extern void *SA1DPageR8, *SA1DPageR16, *SA1DPageW8, *SA1DPageW16;
void SA1UpdateDPageC()
{
SA1DPageR8 = Bank0datr8[(SA1xd >> 8) & 0xFF];
SA1DPageR16 = Bank0datr16[(SA1xd >> 8) & 0xFF];
SA1DPageW8 = Bank0datw8[(SA1xd >> 8) & 0xFF];
SA1DPageW16 = Bank0datw16[(SA1xd >> 8) & 0xFF];
}
void unpackfunct()
{
oamaddrt = (oamaddr & 0xFFFF);
xat = (xa & 0xFFFF);
xdbt = (xdb & 0xFF);
xpbt = (xpb & 0xFF);
xst = (xs & 0xFFFF);
xdt = (xd & 0xFFFF);
xxt = (xx & 0xFFFF);
xyt = (xy & 0xFFFF);
}
#define bit_test(byte, checkbit) (byte & (1 << checkbit)) ? 1 : 0
extern unsigned int GlobalVL, GlobalVR, EchoVL, EchoVR, EchoRate[16], MaxEcho;
extern unsigned int EchoFB, NoiseSpeeds[32], dspPAdj, NoiseInc, bg1ptrx;
extern unsigned int bg1ptry, bg2ptrx, bg2ptry, bg3ptrx, bg3ptry, bg4ptrx;
extern unsigned int bg4ptry;
extern signed int FIRTAPVal0, FIRTAPVal1, FIRTAPVal2, FIRTAPVal3, FIRTAPVal4;
extern signed int FIRTAPVal5, FIRTAPVal6, FIRTAPVal7;
extern unsigned short VolumeConvTable[32768], bg1ptr, bg1ptrb, bg1ptrc;
extern unsigned short bg2ptr, bg2ptrb, bg2ptrc, bg3ptr, bg3ptrb, bg3ptrc;
extern unsigned short bg4ptr, bg4ptrb, bg4ptrc;
extern unsigned char VolumeTableb[256], MusicVol, Voice0Status;
extern unsigned char Voice1Status, Voice2Status, Voice3Status, Voice4Status;
extern unsigned char Voice5Status, Voice6Status, Voice7Status, Voice0Noise;
extern unsigned char Voice1Noise, Voice2Noise, Voice3Noise, Voice4Noise;
extern unsigned char Voice5Noise, Voice6Noise, Voice7Noise, bgtilesz;
extern unsigned char BG116x16t, BG216x16t, BG316x16t, BG416x16t, vramincby8on;
extern unsigned char vramincr;
extern void (**regptw)();
void reg2118();
void reg2118inc();
void reg2118inc8();
void reg2118inc8inc();
void reg2119();
void reg2119inc();
void reg2119inc8();
void reg2119inc8inc();
void repackfunct()
{
signed char val;
unsigned char block;
// Global/Echo Volumes
GlobalVL = (VolumeConvTable[(MusicVol << 8) + VolumeTableb[DSPMem[0x0C]]] & 0xFF);
GlobalVR = (VolumeConvTable[(MusicVol << 8) + VolumeTableb[DSPMem[0x1C]]] & 0xFF);
EchoVL = (VolumeConvTable[(MusicVol << 8) + VolumeTableb[DSPMem[0x2C]]] & 0xFF);
EchoVR = (VolumeConvTable[(MusicVol << 8) + VolumeTableb[DSPMem[0x3C]]] & 0xFF);
// Echo Values
MaxEcho = EchoRate[(DSPMem[0x7D] & 0xF)];
EchoFB = VolumeTableb[DSPMem[0x0D]];
// FIR Filter Values
val = DSPMem[0x0F];
FIRTAPVal0 = (signed int)val;
val = DSPMem[0x1F];
FIRTAPVal1 = (signed int)val;
val = DSPMem[0x2F];
FIRTAPVal2 = (signed int)val;
val = DSPMem[0x3F];
FIRTAPVal3 = (signed int)val;
val = DSPMem[0x4F];
FIRTAPVal4 = (signed int)val;
val = DSPMem[0x5F];
FIRTAPVal5 = (signed int)val;
val = DSPMem[0x6F];
FIRTAPVal6 = (signed int)val;
val = DSPMem[0x7F];
FIRTAPVal7 = (signed int)val;
// Noise
block = DSPMem[0x6C];
DSPMem[0x6C] &= 0x7F;
if (block && 0xC0)
{
Voice0Status = Voice1Status = Voice2Status = Voice3Status = 0;
Voice4Status = Voice5Status = Voice6Status = Voice7Status = 0;
}
NoiseInc = (((NoiseSpeeds[(block & 0x1F)] * dspPAdj) >> 17) & 0xFFFFFFFF);
Voice0Noise = bit_test(DSPMem[0x3D], 0);
Voice1Noise = bit_test(DSPMem[0x3D], 1);
Voice2Noise = bit_test(DSPMem[0x3D], 2);
Voice3Noise = bit_test(DSPMem[0x3D], 3);
Voice4Noise = bit_test(DSPMem[0x3D], 4);
Voice5Noise = bit_test(DSPMem[0x3D], 5);
Voice6Noise = bit_test(DSPMem[0x3D], 6);
Voice7Noise = bit_test(DSPMem[0x3D], 7);
bg1ptrx = bg1ptrb - bg1ptr;
bg1ptry = bg1ptrc - bg1ptr;
bg2ptrx = bg2ptrb - bg2ptr;
bg2ptry = bg2ptrc - bg2ptr;
bg3ptrx = bg3ptrb - bg3ptr;
bg3ptry = bg3ptrc - bg3ptr;
bg4ptrx = bg4ptrb - bg4ptr;
bg4ptry = bg4ptrc - bg4ptr;
// 16x16 tiles
BG116x16t = bit_test(bgtilesz, 0);
BG216x16t = bit_test(bgtilesz, 1);
BG316x16t = bit_test(bgtilesz, 2);
BG416x16t = bit_test(bgtilesz, 3);
oamaddr = oamaddrt;
xa = xat;
xdb = xdbt;
xpb = xpbt;
xs = xst;
xd = xdt;
xx = xxt;
xy = xyt;
if (vramincby8on == 1)
{
if (vramincr == 1)
{
regptw[0x2118] = reg2118inc8inc;
regptw[0x2119] = reg2119inc8;
}
else
{
regptw[0x2118] = reg2118inc8;
regptw[0x2119] = reg2119inc8inc;
}
}
else
{
if (vramincr == 1)
{
regptw[0x2118] = reg2118inc;
regptw[0x2119] = reg2119;
}
else
{
regptw[0x2118] = reg2118;
regptw[0x2119] = reg2119inc;
}
}
}
extern void (*memtabler8[256])();
extern void (*memtablew8[256])();
extern void (*memtabler16[256])();
extern void (*memtablew16[256])();
void regaccessbankr8(), regaccessbankr8SA1();
void memaccessbankr8();
void sramaccessbankr8(), SA1RAMaccessbankr8(), SA1RAMaccessbankr8b();
void wramaccessbankr8(), eramaccessbankr8();
void regaccessbankw8(), regaccessbankw8SA1();
void memaccessbankw8();
void sramaccessbankw8(), SA1RAMaccessbankw8(), SA1RAMaccessbankw8b();
void wramaccessbankw8(), eramaccessbankw8();
void regaccessbankr16(), regaccessbankr16SA1();
void memaccessbankr16();
void sramaccessbankr16(), SA1RAMaccessbankr16(), SA1RAMaccessbankr16b();
void wramaccessbankr16(), eramaccessbankr16();
void regaccessbankw16(), regaccessbankw16SA1();
void memaccessbankw16();
void sramaccessbankw16(), SA1RAMaccessbankw16(), SA1RAMaccessbankw16b();
void wramaccessbankw16(), eramaccessbankw16();
/*
rep_stosd is my name for a 'copy <num> times a function pointer <func_ptr> into
a function pointer array <dest>' function, in honour of the almighty asm
instruction rep stosd, which is able to do that (and much more).
Since ZSNES is just full of func pointer arrays, it'll probably come in handy.
*/
void rep_stosd(void (**dest)(), void (*func_ptr), unsigned int num)
{
while (num--) { dest[num] = func_ptr; }
}
void SetAddressingModes()
{
// set 8-bit read memory tables banks
rep_stosd(memtabler8+0x00, regaccessbankr8, 0x40); // 00 - 3F
rep_stosd(memtabler8+0x40, memaccessbankr8, 0x30); // 40 - 6F
rep_stosd(memtabler8+0x70, sramaccessbankr8, 0x08); // 70 - 77
rep_stosd(memtabler8+0x78, memaccessbankr8, 0x06); // 78 - 7D
memtabler8[0x7E] = wramaccessbankr8; // 7E
memtabler8[0x7F] = eramaccessbankr8; // 7F
rep_stosd(memtabler8+0x80, regaccessbankr8, 0x40); // 80 - BF
rep_stosd(memtabler8+0xC0, memaccessbankr8, 0x40); // C0 - FF
// set 8-bit write memory tables banks
rep_stosd(memtablew8+0x00, regaccessbankw8, 0x40); // 00 - 3F
rep_stosd(memtablew8+0x40, memaccessbankw8, 0x30); // 40 - 6F
rep_stosd(memtablew8+0x70, sramaccessbankw8, 0x08); // 70 - 77
rep_stosd(memtablew8+0x78, memaccessbankw8, 0x06); // 78 - 7D
memtablew8[0x7E] = wramaccessbankw8; // 7E
memtablew8[0x7F] = eramaccessbankw8; // 7F
rep_stosd(memtablew8+0x80, regaccessbankw8, 0x40); // 80 - BF
rep_stosd(memtablew8+0xC0, memaccessbankw8, 0x40); // C0 - FF
// set 16-bit read memory tables banks
rep_stosd(memtabler16+0x00, regaccessbankr16, 0x40); // 00 - 3F
rep_stosd(memtabler16+0x40, memaccessbankr16, 0x30); // 40 - 6F
rep_stosd(memtabler16+0x70, sramaccessbankr16, 0x08); // 70 - 77
rep_stosd(memtabler16+0x78, memaccessbankr16, 0x06); // 78 - 7D
memtabler16[0x7E] = wramaccessbankr16; // 7E
memtabler16[0x7F] = eramaccessbankr16; // 7F
rep_stosd(memtabler16+0x80, regaccessbankr16, 0x40); // 80 - BF
rep_stosd(memtabler16+0xC0, memaccessbankr16, 0x40); // C0 - FF
// set 16-bit write memory tables banks
rep_stosd(memtablew16+0x00, regaccessbankw16, 0x40); // 00 - 3F
rep_stosd(memtablew16+0x40, memaccessbankw16, 0x30); // 40 - 6F
rep_stosd(memtablew16+0x70, sramaccessbankw16, 0x08); // 70 - 77
rep_stosd(memtablew16+0x78, memaccessbankw16, 0x06); // 78 - 7D
memtablew16[0x7E] = wramaccessbankw16; // 7E
memtablew16[0x7F] = eramaccessbankw16; // 7F
rep_stosd(memtablew16+0x80, regaccessbankw16, 0x40); // 80 - BF
rep_stosd(memtablew16+0xC0, memaccessbankw16, 0x40); // C0 - FF
}
void SetAddressingModesSA1()
{
// set 8-bit read memory tables banks
rep_stosd(memtabler8+0x00, regaccessbankr8SA1, 0x40); // 00 - 3F
rep_stosd(memtabler8+0x40, SA1RAMaccessbankr8, 0x20); // 40 - 5F
rep_stosd(memtabler8+0x60, SA1RAMaccessbankr8b, 0x10); // 60 - 6F
rep_stosd(memtabler8+0x70, sramaccessbankr8, 0x08); // 70 - 77
rep_stosd(memtabler8+0x78, memaccessbankr8, 0x06); // 78 - 7D
memtabler8[0x7E] = wramaccessbankr8; // 7E
memtabler8[0x7F] = eramaccessbankr8; // 7F
rep_stosd(memtabler8+0x80, regaccessbankr8SA1, 0x40); // 80 - BF
rep_stosd(memtabler8+0xC0, memaccessbankr8, 0x40); // C0 - FF
// set 8-bit write memory tables banks
rep_stosd(memtablew8+0x00, regaccessbankw8SA1, 0x40); // 00 - 3F
rep_stosd(memtablew8+0x40, SA1RAMaccessbankw8, 0x20); // 40 - 5F
rep_stosd(memtablew8+0x60, SA1RAMaccessbankw8b, 0x10); // 60 - 6F
rep_stosd(memtablew8+0x70, sramaccessbankw8, 0x08); // 70 - 77
rep_stosd(memtablew8+0x78, memaccessbankw8, 0x06); // 78 - 7D
memtablew8[0x7E] = wramaccessbankw8; // 7E
memtablew8[0x7F] = eramaccessbankw8; // 7F
rep_stosd(memtablew8+0x80, regaccessbankw8SA1, 0x40); // 80 - BF
rep_stosd(memtablew8+0xC0, memaccessbankw8, 0x40); // C0 - FF
// set 16-bit read memory tables banks
rep_stosd(memtabler16+0x00, regaccessbankr16SA1, 0x40); // 00 - 3F
rep_stosd(memtabler16+0x40, SA1RAMaccessbankr16, 0x20); // 40 - 5F
rep_stosd(memtabler16+0x60, SA1RAMaccessbankr16b, 0x10); // 60 - 6F
rep_stosd(memtabler16+0x70, sramaccessbankr16, 0x08); // 70 - 77
rep_stosd(memtabler16+0x78, memaccessbankr16, 0x06); // 78 - 7D
memtabler16[0x7E] = wramaccessbankr16; // 7E
memtabler16[0x7F] = eramaccessbankr16; // 7F
rep_stosd(memtabler16+0x80, regaccessbankr16SA1, 0x40); // 80 - BF
rep_stosd(memtabler16+0xC0, memaccessbankr16, 0x40); // C0 - FF
// set 16-bit write memory tables banks
rep_stosd(memtablew16+0x00, regaccessbankw16SA1, 0x40); // 00 - 3F
rep_stosd(memtablew16+0x40, SA1RAMaccessbankw16, 0x20); // 40 - 5F
rep_stosd(memtablew16+0x60, SA1RAMaccessbankw16b, 0x10); // 60 - 6F
rep_stosd(memtablew16+0x70, sramaccessbankw16, 0x08); // 70 - 77
rep_stosd(memtablew16+0x78, memaccessbankw16, 0x06); // 78 - 7D
memtablew16[0x7E] = wramaccessbankw16; // 7E
memtablew16[0x7F] = eramaccessbankw16; // 7F
rep_stosd(memtablew16+0x80, regaccessbankw16SA1, 0x40); // 80 - BF
rep_stosd(memtablew16+0xC0, memaccessbankw16, 0x40); // C0 - FF
}
void membank0r8ram(), membank0r8ramSA1();
void membank0r8reg(), membank0r8inv(), membank0r8chip();
void membank0r8rom(), membank0r8romram();
void membank0w8ram(), membank0w8ramSA1();
void membank0w8reg(), membank0w8inv(), membank0w8chip();
void membank0w8rom(), membank0w8romram();
void membank0r16ram(), membank0r16ramSA1();
void membank0r16reg(), membank0r16inv(), membank0r16chip();
void membank0r16rom(), membank0r16romram();
void membank0w16ram(), membank0w16ramSA1();
void membank0w16reg(), membank0w16inv(), membank0w16chip();
void membank0w16rom(), membank0w16romram();
void GenerateBank0Table()
{
rep_stosd(Bank0datr8+0x00, membank0r8ram, 0x20); // 00 - 1F
rep_stosd(Bank0datr8+0x20, membank0r8reg, 0x28); // 20 - 47
rep_stosd(Bank0datr8+0x48, membank0r8inv, 0x17); // 48 - 5E
rep_stosd(Bank0datr8+0x5F, membank0r8chip, 0x1F); // 5F - 7D
rep_stosd(Bank0datr8+0x7E, membank0r8rom, 0x81); // 7E - FE
Bank0datr8[0xFF] = membank0r8romram; // FF
rep_stosd(Bank0datw8+0x00, membank0w8ram, 0x20); // 00 - 1F
rep_stosd(Bank0datw8+0x20, membank0w8reg, 0x28); // 20 - 47
rep_stosd(Bank0datw8+0x48, membank0w8inv, 0x17); // 48 - 5E
rep_stosd(Bank0datw8+0x5F, membank0w8chip, 0x1F); // 5F - 7D
rep_stosd(Bank0datw8+0x7E, membank0w8rom, 0x81); // 7E - FE
Bank0datw8[0xFF] = membank0w8romram; // FF
rep_stosd(Bank0datr16+0x00, membank0r16ram, 0x20); // 00 - 1F
rep_stosd(Bank0datr16+0x20, membank0r16reg, 0x28); // 20 - 47
rep_stosd(Bank0datr16+0x48, membank0r16inv, 0x17); // 48 - 5E
rep_stosd(Bank0datr16+0x5F, membank0r16chip, 0x1F); // 5F - 7D
rep_stosd(Bank0datr16+0x7E, membank0r16rom, 0x81); // 7E - FE
Bank0datr16[0xFF] = membank0r16romram; // FF
rep_stosd(Bank0datw16+0x00, membank0w16ram, 0x20); // 00 - 1F
rep_stosd(Bank0datw16+0x20, membank0w16reg, 0x28); // 20 - 47
rep_stosd(Bank0datw16+0x48, membank0w16inv, 0x17); // 48 - 5E
rep_stosd(Bank0datw16+0x5F, membank0w16chip, 0x1F); // 5F - 7D
rep_stosd(Bank0datw16+0x7E, membank0w16rom, 0x81); // 7E - FE
Bank0datw16[0xFF] = membank0w16romram; // FF
}
void GenerateBank0TableSA1()
{
rep_stosd(Bank0datr8, membank0r8ramSA1, 0x20); // 00 - 1F
rep_stosd(Bank0datw8, membank0w8ramSA1, 0x20); // 00 - 1F
rep_stosd(Bank0datr16, membank0r16ramSA1, 0x20); // 00 - 1F
rep_stosd(Bank0datw16, membank0w16ramSA1, 0x20); // 00 - 1F
}

View File

@@ -20,9 +20,6 @@
%include "macros.mac"
EXTSYM eramaccessbankr16,eramaccessbankr8,eramaccessbankw16
EXTSYM eramaccessbankw8,memaccessbankr16,memaccessbankr8
EXTSYM memaccessbankw16,memaccessbankw8
EXTSYM mosjmptab,mosdraw10,mosdraw11,mosdraw12,mosdraw13
EXTSYM mosdraw14,mosdraw15,mosdraw16,mosdraw2,mosdraw3
EXTSYM mosdraw4,mosdraw5,mosdraw6,mosdraw7,mosdraw8
@@ -43,16 +40,7 @@ EXTSYM mosjmptab16bntms,mosdraw1016bntms,mosdraw1116bntms,mosdraw1216bntms,mosdr
EXTSYM mosdraw1416bntms,mosdraw1516bntms,mosdraw1616bntms,mosdraw216bntms,mosdraw316bntms
EXTSYM mosdraw416bntms,mosdraw516bntms,mosdraw616bntms,mosdraw716bntms,mosdraw816bntms
EXTSYM mosdraw916bntms
EXTSYM regaccessbankr16,regaccessbankw16,regaccessbankw8
EXTSYM sramaccessbankr16,sramaccessbankr8,sramaccessbankw16
EXTSYM sramaccessbankw8,tableA,tableB,tableC,tableD,tableE
EXTSYM tableF,tableG,tableH,wramaccessbankr16
EXTSYM wramaccessbankr8,wramaccessbankw16,wramaccessbankw8
EXTSYM regaccessbankr8SA1,regaccessbankr16SA1,regaccessbankw8SA1
EXTSYM regaccessbankw16SA1,SA1RAMaccessbankr8,SA1RAMaccessbankr16
EXTSYM SA1RAMaccessbankw8,SA1RAMaccessbankw16
EXTSYM SA1RAMaccessbankr8b,SA1RAMaccessbankr16b
EXTSYM SA1RAMaccessbankw8b,SA1RAMaccessbankw16b
EXTSYM tableA,tableB,tableC,tableD,tableE,tableF,tableG,tableH
EXTSYM DPageR8,DPageW8,DPageR16,DPageW16
EXTSYM SDD1Enable
EXTSYM JoyAOrig,JoyANow,JoyBOrig,JoyBNow,JoyCOrig,JoyCNow,JoyDOrig,JoyDNow
@@ -77,12 +65,12 @@ section .data
;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
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-bit
;memtabler16 times 256 dd 0 ; Memory Bank Locations for reading 16-bit
;memtablew16 times 256 dd 0 ; Memory Bank Locations for reading 16-bit
section .text
@@ -332,286 +320,6 @@ NEWSYM inittable
pop es
ret
NEWSYM SetAddressingModes
; set 8-bit read memory tables
mov edi,memtabler8
; banks 0-3Fh
mov eax,regaccessbankr8
mov ecx,$40
rep stosd
; banks 40-6Fh
mov eax,memaccessbankr8
mov ecx,$30
rep stosd
; bank 70-77h
mov eax,sramaccessbankr8
mov ecx,8
rep stosd
; bank 78-7D
mov eax,memaccessbankr8
mov ecx,6
rep stosd
; bank 7E
mov eax,wramaccessbankr8
stosd
; bank 7F
mov eax,eramaccessbankr8
stosd
; banks 80-BF
mov eax,regaccessbankr8
mov ecx,$40
rep stosd
; banks C0-FFh
mov eax,memaccessbankr8
mov ecx,$40
rep stosd
; set 8-bit write memory tables
mov edi,memtablew8
; banks 0-3Fh
mov eax,regaccessbankw8
mov ecx,$40
rep stosd
; banks 40-6Fh
mov eax,memaccessbankw8
mov ecx,$30
rep stosd
; bank 70-77h
mov eax,sramaccessbankw8
mov ecx,8
rep stosd
; bank 78-7D
mov eax,memaccessbankw8
mov ecx,6
rep stosd
; bank 7E
mov eax,wramaccessbankw8
stosd
; bank 7F
mov eax,eramaccessbankw8
stosd
; banks 80-BF
mov eax,regaccessbankw8
mov ecx,$40
rep stosd
; banks C0-FFh
mov eax,memaccessbankw8
mov ecx,$40
rep stosd
; set 16-bit read memory tables
mov edi,memtabler16
; banks 0-3Fh
mov eax,regaccessbankr16
mov ecx,$40
rep stosd
; banks 40-6Fh
mov eax,memaccessbankr16
mov ecx,$30
rep stosd
; bank 70-77h
mov eax,sramaccessbankr16
mov ecx,8
rep stosd
; bank 78-7D
mov eax,memaccessbankr16
mov ecx,6
rep stosd
; bank 7E
mov eax,wramaccessbankr16
stosd
; bank 7F
mov eax,eramaccessbankr16
stosd
; banks 80-BF
mov eax,regaccessbankr16
mov ecx,$40
rep stosd
; banks C0-FFh
mov eax,memaccessbankr16
mov ecx,$40
rep stosd
; set 16-bit write memory tables
mov edi,memtablew16
; banks 0-3Fh
mov eax,regaccessbankw16
mov ecx,$40
rep stosd
; banks 40-6Fh
mov eax,memaccessbankw16
mov ecx,$30
rep stosd
; bank 70-77h
mov eax,sramaccessbankw16
mov ecx,8
rep stosd
; bank 78-7D
mov eax,memaccessbankw16
mov ecx,6
rep stosd
; bank 7E
mov eax,wramaccessbankw16
stosd
; bank 7F
mov eax,eramaccessbankw16
stosd
; banks 80-BF
mov eax,regaccessbankw16
mov ecx,$40
rep stosd
; banks C0-FFh
mov eax,memaccessbankw16
mov ecx,$40
rep stosd
ret
NEWSYM SetAddressingModesSA1
; set 8-bit read memory tables
mov edi,memtabler8
; banks 0-3Fh
mov eax,regaccessbankr8SA1
mov ecx,$40
rep stosd
; banks 40-6Fh
mov eax,SA1RAMaccessbankr8
mov ecx,$20
rep stosd
mov eax,SA1RAMaccessbankr8b
mov ecx,$10
rep stosd
; bank 70-77h
mov eax,sramaccessbankr8
mov ecx,8
rep stosd
; bank 78-7D
mov eax,memaccessbankr8
mov ecx,6
rep stosd
; bank 7E
mov eax,wramaccessbankr8
stosd
; bank 7F
mov eax,eramaccessbankr8
stosd
; banks 80-BF
mov eax,regaccessbankr8SA1
mov ecx,$40
rep stosd
; banks C0-FFh
mov eax,memaccessbankr8
mov ecx,$40
rep stosd
; set 8-bit write memory tables
mov edi,memtablew8
; banks 0-3Fh
mov eax,regaccessbankw8SA1
mov ecx,$40
rep stosd
; banks 40-6Fh
mov eax,SA1RAMaccessbankw8
mov ecx,$20
rep stosd
mov eax,SA1RAMaccessbankw8b
mov ecx,$10
rep stosd
; bank 70-77h
mov eax,sramaccessbankw8
mov ecx,8
rep stosd
; bank 78-7D
mov eax,memaccessbankw8
mov ecx,6
rep stosd
; bank 7E
mov eax,wramaccessbankw8
stosd
; bank 7F
mov eax,eramaccessbankw8
stosd
; banks 80-BF
mov eax,regaccessbankw8SA1
mov ecx,$40
rep stosd
; banks C0-FFh
mov eax,memaccessbankw8
mov ecx,$40
rep stosd
; set 16-bit read memory tables
mov edi,memtabler16
; banks 0-3Fh
mov eax,regaccessbankr16SA1
mov ecx,$40
rep stosd
; banks 40-6Fh
mov eax,SA1RAMaccessbankr16
mov ecx,$20
rep stosd
mov eax,SA1RAMaccessbankr16b
mov ecx,$10
rep stosd
; bank 70-77h
mov eax,sramaccessbankr16
mov ecx,8
rep stosd
; bank 78-7D
mov eax,memaccessbankr16
mov ecx,6
rep stosd
; bank 7E
mov eax,wramaccessbankr16
stosd
; bank 7F
mov eax,eramaccessbankr16
stosd
; banks 80-BF
mov eax,regaccessbankr16SA1
mov ecx,$40
rep stosd
; banks C0-FFh
mov eax,memaccessbankr16
mov ecx,$40
rep stosd
; set 16-bit write memory tables
mov edi,memtablew16
; banks 0-3Fh
mov eax,regaccessbankw16SA1
mov ecx,$40
rep stosd
; banks 40-6Fh
mov eax,SA1RAMaccessbankw16
mov ecx,$20
rep stosd
mov eax,SA1RAMaccessbankw16b
mov ecx,$10
rep stosd
; bank 70-77h
mov eax,sramaccessbankw16
mov ecx,8
rep stosd
; bank 78-7D
mov eax,memaccessbankw16
mov ecx,6
rep stosd
; bank 7E
mov eax,wramaccessbankw16
stosd
; bank 7F
mov eax,eramaccessbankw16
stosd
; banks 80-BF
mov eax,regaccessbankw16SA1
mov ecx,$40
rep stosd
; banks C0-FFh
mov eax,memaccessbankw16
mov ecx,$40
rep stosd
ret
eopINVALID
ret
@@ -637,22 +345,22 @@ NEWSYM cpucycle
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
; | 2 8 | 2 6 | 2 8 | 2 4 | 2 5 | 2 3 | 2 5 | 2 6 | 1 3 | 2 2 | 1 2 | 1 4 | 3 6 | 3 4 | 3 6 | 4 5 |
; | 2 2 | 2 5 | 2 5 | 2 7 | 2 5 | 2 4 | 2 6 | 2 6 | 1 2 | 3 4 | 1 2 | 1 2 | 3 6 | 3 4 | 3 7 | 4 5 |
; | 3 6 | 2 6 | 4 8 | 2 4 | 2 3 | 2 3 | 2 5 | 2 6 | 1 4 | 2 2 | 1 2 | 1 5 | 3 4 | 3 4 | 3 6 | 4 5 |
; | 2 2 | 2 5 | 2 5 | 2 7 | 2 4 | 2 4 | 2 6 | 2 6 | 1 2 | 3 4 | 1 2 | 1 2 | 3 4 | 3 4 | 3 7 | 4 5 |
; | 1 7 | 2 6 | 2 2 | 2 4 | 3 7 | 2 3 | 2 5 | 2 6 | 1 3 | 2 2 | 1 2 | 1 3 | 3 3 | 3 4 | 3 6 | 4 5 |
; | 2 2 | 2 5 | 2 5 | 2 7 | 3 7 | 2 4 | 2 6 | 2 6 | 1 2 | 3 4 | 1 3 | 1 2 | 4 4 | 3 4 | 3 7 | 4 5 |
; | 1 6 | 2 6 | 3 6 | 2 4 | 2 3 | 2 3 | 2 5 | 2 6 | 1 4 | 2 2 | 1 2 | 1 6 | 3 5 | 3 4 | 3 6 | 4 5 |
; | 2 2 | 2 5 | 2 5 | 2 7 | 2 4 | 2 4 | 2 6 | 2 6 | 1 2 | 3 4 | 1 4 | 1 2 | 3 6 | 3 4 | 3 7 | 4 5 |
; | 2 2 | 2 6 | 3 3 | 2 4 | 2 3 | 2 3 | 2 3 | 2 6 | 1 2 | 2 2 | 1 2 | 1 3 | 3 4 | 3 4 | 3 4 | 4 5 |
; | 2 2 | 2 6 | 2 5 | 2 7 | 2 4 | 2 4 | 2 4 | 2 6 | 1 2 | 3 5 | 1 2 | 1 2 | 3 4 | 3 5 | 3 5 | 4 5 |
; | 2 2 | 2 6 | 2 2 | 2 4 | 2 3 | 2 3 | 2 3 | 2 6 | 1 2 | 2 2 | 1 2 | 1 4 | 3 4 | 3 4 | 3 4 | 4 5 |
; | 2 2 | 2 5 | 2 5 | 2 7 | 2 4 | 2 4 | 2 4 | 2 6 | 1 2 | 3 4 | 1 2 | 1 2 | 3 4 | 3 4 | 3 4 | 4 5 |
; | 2 2 | 2 6 | 2 3 | 2 4 | 2 3 | 2 3 | 2 5 | 2 6 | 1 2 | 2 2 | 1 2 | 1 3 | 3 4 | 3 4 | 3 4 | 4 5 |
; | 2 2 | 2 5 | 2 5 | 2 7 | 2 6 | 2 4 | 2 6 | 2 6 | 1 2 | 3 4 | 1 3 | 1 3 | 3 6 | 3 4 | 3 7 | 4 5 |
; | 2 2 | 2 6 | 2 3 | 2 4 | 2 3 | 2 3 | 2 5 | 2 6 | 1 2 | 2 2 | 1 2 | 1 3 | 3 4 | 3 4 | 3 6 | 4 5 |
; | 2 2 | 2 5 | 2 5 | 2 7 | 3 5 | 2 4 | 2 6 | 2 6 | 1 2 | 3 4 | 1 4 | 1 2 | 3 6 | 3 4 | 3 7 | 4 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 | 45
section .text
@@ -919,7 +627,7 @@ NEWSYM settables
mov dword[edi+0FDh*4],COpFDm8nd
mov dword[edi+0FEh*4],COpFEm8
mov dword[edi+0FFh*4],COpFFm8nd
ret
ret
NEWSYM settablem16
mov dword[edi+01h*4],COp01m16
@@ -1193,5 +901,3 @@ NEWSYM settableDm16
mov dword[edi+0FDh*4],COpFDm16d
mov dword[edi+0FFh*4],COpFFm16d
ret