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

@@ -39,8 +39,8 @@ CHIPSOBJ=${CHIPDIR}/sfxproc.o ${CHIPDIR}/fxemu2.o ${CHIPDIR}/dsp1proc.o\
CPUOBJ=${CPUDIR}/addrni.o ${CPUDIR}/dma.o ${CPUDIR}/dsp.o ${CPUDIR}/dspproc.o\ CPUOBJ=${CPUDIR}/addrni.o ${CPUDIR}/dma.o ${CPUDIR}/dsp.o ${CPUDIR}/dspproc.o\
${CPUDIR}/execute.o ${CPUDIR}/irq.o ${CPUDIR}/memory.o\ ${CPUDIR}/execute.o ${CPUDIR}/irq.o ${CPUDIR}/memory.o\
${CPUDIR}/spc700.o ${CPUDIR}/stable.o ${CPUDIR}/table.o\ ${CPUDIR}/memtable.o ${CPUDIR}/spc700.o ${CPUDIR}/stable.o\
${CPUDIR}/tableb.o ${CPUDIR}/tablec.o ${CPUDIR}/table.o ${CPUDIR}/tableb.o ${CPUDIR}/tablec.o
GUIOBJ=${GUIDIR}/gui.o ${GUIDIR}/menu.o GUIOBJ=${GUIDIR}/gui.o ${GUIDIR}/menu.o
@@ -148,6 +148,7 @@ ${CPUDIR}/stable.o: ${CPUDIR}/stable.asm ${CPUDIR}/s65816d.inc\
${CPUDIR}/saddress.inc ${CPUDIR}/saddrni.inc ${CPUDIR}/se65816.inc\ ${CPUDIR}/saddress.inc ${CPUDIR}/saddrni.inc ${CPUDIR}/se65816.inc\
macros.mac macros.mac
${CPUDIR}/memory.o: ${CPUDIR}/memory.asm macros.mac ${CPUDIR}/memory.o: ${CPUDIR}/memory.asm macros.mac
${CPUDIR}/memtable.o: ${CPUDIR}/memtable.c
${CPUDIR}/dma.o: ${CPUDIR}/dma.asm macros.mac ${CPUDIR}/dma.o: ${CPUDIR}/dma.asm macros.mac
${DOSDIR}/dosintrf.o: ${DOSDIR}/dosintrf.asm macros.mac ${DOSDIR}/dosintrf.o: ${DOSDIR}/dosintrf.asm macros.mac
vcache.o:vcache.asm macros.mac vcache.o:vcache.asm macros.mac
@@ -234,7 +235,3 @@ clean:
distclean: distclean:
rm -f ${CHIPDIR}/*.o ${CPUDIR}/*.o ${VIDEODIR}/*.o ${NETDIR}/*.o ${GUIDIR}/*.o ${DOSDIR}/*.o ${WINDIR}/*.o ${ZIPDIR}/*.o ${EFFECTSDIR}/*.o ${JMADIR}/*.o *.o @ZSNESEXE@ Makefile config.cache config.log config.status config.h rm -f ${CHIPDIR}/*.o ${CPUDIR}/*.o ${VIDEODIR}/*.o ${NETDIR}/*.o ${GUIDIR}/*.o ${DOSDIR}/*.o ${WINDIR}/*.o ${ZIPDIR}/*.o ${EFFECTSDIR}/*.o ${JMADIR}/*.o *.o @ZSNESEXE@ Makefile config.cache config.log config.status config.h

View File

@@ -26,6 +26,7 @@ source_files = Split("""
cpu/execute.asm cpu/execute.asm
cpu/irq.asm cpu/irq.asm
cpu/memory.asm cpu/memory.asm
cpu/memtable.c
cpu/spc700.asm cpu/spc700.asm
cpu/stable.asm cpu/stable.asm
cpu/table.asm cpu/table.asm

View File

@@ -121,7 +121,7 @@ NEWSYM SA1Swap
; Check if IRQ is executed on SA-1 ; Check if IRQ is executed on SA-1
xor eax,eax xor eax,eax
mov al,dl mov al,dl
add dh,150 add dh,25
mov edi,[SA1tablead+eax*4] mov edi,[SA1tablead+eax*4]
mov byte[SA1Status],1 mov byte[SA1Status],1
test dword[SA1DoIRQ],0FF000003h test dword[SA1DoIRQ],0FF000003h
@@ -157,14 +157,14 @@ NEWSYM SA1Swap
mov dword[snesmap2],eax mov dword[snesmap2],eax
mov edi,[prevedi] mov edi,[prevedi]
xor eax,eax xor eax,eax
add dh,34 add dh,11
inc byte[CurrentExecSA1] inc byte[CurrentExecSA1]
mov byte[SA1Status],0 mov byte[SA1Status],0
add dword[SA1TimerVal],23 add dword[SA1TimerVal],23
ret ret
.speedhack .speedhack
add dh,50 add dh,100
mov bl,[esi] mov bl,[esi]
inc esi inc esi
@@ -191,7 +191,7 @@ NEWSYM SA1Swap
mov byte[SA1Status],0 mov byte[SA1Status],0
add dword[SA1TimerVal],23 add dword[SA1TimerVal],23
; xor dh,dh ; xor dh,dh
add dh,35 mov dh,18
cmp esi,dword[SA1LBound] cmp esi,dword[SA1LBound]
jb .stoph jb .stoph
cmp esi,dword[SA1UBound] cmp esi,dword[SA1UBound]

View File

@@ -3229,50 +3229,6 @@ NEWSYM SA1UpdateDPage
pop eax pop eax
ret 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 ; SA1 Stuff
NEWSYM membank0r8ramSA1 ; 0000-1FFF NEWSYM membank0r8ramSA1 ; 0000-1FFF
cmp byte[SA1Status],0 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" %include "macros.mac"
EXTSYM eramaccessbankr16,eramaccessbankr8,eramaccessbankw16
EXTSYM eramaccessbankw8,memaccessbankr16,memaccessbankr8
EXTSYM memaccessbankw16,memaccessbankw8
EXTSYM mosjmptab,mosdraw10,mosdraw11,mosdraw12,mosdraw13 EXTSYM mosjmptab,mosdraw10,mosdraw11,mosdraw12,mosdraw13
EXTSYM mosdraw14,mosdraw15,mosdraw16,mosdraw2,mosdraw3 EXTSYM mosdraw14,mosdraw15,mosdraw16,mosdraw2,mosdraw3
EXTSYM mosdraw4,mosdraw5,mosdraw6,mosdraw7,mosdraw8 EXTSYM mosdraw4,mosdraw5,mosdraw6,mosdraw7,mosdraw8
@@ -43,16 +40,7 @@ EXTSYM mosjmptab16bntms,mosdraw1016bntms,mosdraw1116bntms,mosdraw1216bntms,mosdr
EXTSYM mosdraw1416bntms,mosdraw1516bntms,mosdraw1616bntms,mosdraw216bntms,mosdraw316bntms EXTSYM mosdraw1416bntms,mosdraw1516bntms,mosdraw1616bntms,mosdraw216bntms,mosdraw316bntms
EXTSYM mosdraw416bntms,mosdraw516bntms,mosdraw616bntms,mosdraw716bntms,mosdraw816bntms EXTSYM mosdraw416bntms,mosdraw516bntms,mosdraw616bntms,mosdraw716bntms,mosdraw816bntms
EXTSYM mosdraw916bntms EXTSYM mosdraw916bntms
EXTSYM regaccessbankr16,regaccessbankw16,regaccessbankw8 EXTSYM tableA,tableB,tableC,tableD,tableE,tableF,tableG,tableH
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 DPageR8,DPageW8,DPageR16,DPageW16 EXTSYM DPageR8,DPageW8,DPageR16,DPageW16
EXTSYM SDD1Enable EXTSYM SDD1Enable
EXTSYM JoyAOrig,JoyANow,JoyBOrig,JoyBNow,JoyCOrig,JoyCNow,JoyDOrig,JoyDNow 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) ;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) ;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) ;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 ;tablead times 256 dd 0 ; Table address location according to P
;memtabler8 times 256 dd 0 ; Memory Bank Locations for reading 8-bit ;memtabler8 times 256 dd 0 ; Memory Bank Locations for reading 8-bit
;memtablew8 times 256 dd 0 ; Memory Bank Locations for writing 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 ;memtabler16 times 256 dd 0 ; Memory Bank Locations for reading 16-bit
;memtablew16 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 section .text
@@ -332,286 +320,6 @@ NEWSYM inittable
pop es pop es
ret 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 eopINVALID
ret 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, 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, 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 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 | ; 28 | 26 | 28 | 24 | 25 | 23 | 25 | 26 | 13 | 22 | 12 | 14 | 36 | 34 | 36 | 45
; | 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 | ; 22 | 25 | 25 | 27 | 25 | 24 | 26 | 26 | 12 | 34 | 12 | 12 | 36 | 34 | 37 | 45
; | 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 | ; 36 | 26 | 48 | 24 | 23 | 23 | 25 | 26 | 14 | 22 | 12 | 15 | 34 | 34 | 36 | 45
; | 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 | ; 22 | 25 | 25 | 27 | 24 | 24 | 26 | 26 | 12 | 34 | 12 | 12 | 34 | 34 | 37 | 45
; | 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 | ; 17 | 26 | 22 | 24 | 37 | 23 | 25 | 26 | 13 | 22 | 12 | 13 | 33 | 34 | 36 | 45
; | 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 | ; 22 | 25 | 25 | 27 | 37 | 24 | 26 | 26 | 12 | 34 | 13 | 12 | 44 | 34 | 37 | 45
; | 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 | ; 16 | 26 | 36 | 24 | 23 | 23 | 25 | 26 | 14 | 22 | 12 | 16 | 35 | 34 | 36 | 45
; | 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 | ; 22 | 25 | 25 | 27 | 24 | 24 | 26 | 26 | 12 | 34 | 14 | 12 | 36 | 34 | 37 | 45
; | 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 | ; 22 | 26 | 33 | 24 | 23 | 23 | 23 | 26 | 12 | 22 | 12 | 13 | 34 | 34 | 34 | 45
; | 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 | ; 22 | 26 | 25 | 27 | 24 | 24 | 24 | 26 | 12 | 35 | 12 | 12 | 34 | 35 | 35 | 45
; | 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 | ; 22 | 26 | 22 | 24 | 23 | 23 | 23 | 26 | 12 | 22 | 12 | 14 | 34 | 34 | 34 | 45
; | 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 | ; 22 | 25 | 25 | 27 | 24 | 24 | 24 | 26 | 12 | 34 | 12 | 12 | 34 | 34 | 34 | 45
; | 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 | ; 22 | 26 | 23 | 24 | 23 | 23 | 25 | 26 | 12 | 22 | 12 | 13 | 34 | 34 | 34 | 45
; | 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 | ; 22 | 25 | 25 | 27 | 26 | 24 | 26 | 26 | 12 | 34 | 13 | 13 | 36 | 34 | 37 | 45
; | 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 | ; 22 | 26 | 23 | 24 | 23 | 23 | 25 | 26 | 12 | 22 | 12 | 13 | 34 | 34 | 36 | 45
; | 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 | ; 22 | 25 | 25 | 27 | 35 | 24 | 26 | 26 | 12 | 34 | 14 | 12 | 36 | 34 | 37 | 45
section .text section .text
@@ -919,7 +627,7 @@ NEWSYM settables
mov dword[edi+0FDh*4],COpFDm8nd mov dword[edi+0FDh*4],COpFDm8nd
mov dword[edi+0FEh*4],COpFEm8 mov dword[edi+0FEh*4],COpFEm8
mov dword[edi+0FFh*4],COpFFm8nd mov dword[edi+0FFh*4],COpFFm8nd
ret ret
NEWSYM settablem16 NEWSYM settablem16
mov dword[edi+01h*4],COp01m16 mov dword[edi+01h*4],COp01m16
@@ -1193,5 +901,3 @@ NEWSYM settableDm16
mov dword[edi+0FDh*4],COpFDm16d mov dword[edi+0FDh*4],COpFDm16d
mov dword[edi+0FFh*4],COpFFm16d mov dword[edi+0FFh*4],COpFFm16d
ret ret

View File

@@ -39,7 +39,7 @@ EXTSYM spcnumread
EXTSYM Curtableaddr,fnamest,procexecloop,stateloader,tableA EXTSYM Curtableaddr,fnamest,procexecloop,stateloader,tableA
EXTSYM vidmemch2 EXTSYM vidmemch2
EXTSYM statesaver EXTSYM statesaver
EXTSYM memtablew8,printhex8,writeon,SetAddressingModesSA1 EXTSYM memtablew8,printhex8,writeon
EXTSYM curcyc,dmadata,execsingle,initaddrl,memtabler8,pdh EXTSYM curcyc,dmadata,execsingle,initaddrl,memtabler8,pdh
EXTSYM regaccessbankr8,selcB800,snesmap2,snesmmap EXTSYM regaccessbankr8,selcB800,snesmap2,snesmmap
EXTSYM ram7f EXTSYM ram7f

View File

@@ -33,12 +33,13 @@ extern unsigned int spcnumread, spchalted, opcd, HIRQCycNext, oamaddr;
extern unsigned int SfxR0, *setaramdata, ramsize, *sram; extern unsigned int SfxR0, *setaramdata, ramsize, *sram;
extern unsigned int tempesi, tempedi, tempedx, tempebp; extern unsigned int tempesi, tempedi, tempedx, tempebp;
extern unsigned int SPCMultA, PHnum2writespc7110reg, PHdspsave2; extern unsigned int SPCMultA, PHnum2writespc7110reg, PHdspsave2;
extern unsigned char sndrot, spcRam[65472]; extern unsigned char sndrot, spcRam[65472], DSPMem[256], SA1Status, *SA1RAMArea;
extern unsigned char DSPMem[256], SA1Status, *SA1RAMArea, DSP1Type, DSP1COp; extern unsigned char DSP1Type, DSP1COp, prevoamptr, BRRBuffer[32], *romdata;
extern unsigned char prevoamptr, BRRBuffer[32], *romdata, curcyc, echoon0; extern unsigned char curcyc, echoon0;
extern unsigned char vidmemch4[4096], vidmemch8[4096], vidmemch2[4096]; extern unsigned char vidmemch4[4096], vidmemch8[4096], vidmemch2[4096];
extern bool C4Enable, SFXEnable, SA1Enable, SPC7110Enable, SETAEnable, spcon, SRAMState; extern bool C4Enable, SFXEnable, SA1Enable, SPC7110Enable, SETAEnable, spcon;
extern bool SRAMState;
extern short C4WFXVal, C41FXVal, Op00Multiplicand, Op04Angle, Op08X, Op18X; extern short C4WFXVal, C41FXVal, Op00Multiplicand, Op04Angle, Op08X, Op18X;
extern short Op28X, Op0CA, Op02FX, Op0AVS, Op06X, Op01m, Op0DX, Op03F, Op14Zr; extern short Op28X, Op0CA, Op02FX, Op0AVS, Op06X, Op01m, Op0DX, Op03F, Op14Zr;

View File

@@ -7219,4 +7219,4 @@ NEWSYM GUIMenuItem, db 'GAME ',0
db 'MISC ',0 db 'MISC ',0
db 25,0 db 25,0
SECTION .text SECTION .text

View File

@@ -24,21 +24,18 @@ EXTSYM DosExit,UpdateDevices,InitSPC,Makemode7Table,MusicRelVol,MusicVol
EXTSYM makesprprtable,romloadskip,start65816,startdebugger,SfxR0 EXTSYM makesprprtable,romloadskip,start65816,startdebugger,SfxR0
EXTSYM showinfogui EXTSYM showinfogui
EXTSYM filefound,inittable,SA1inittable EXTSYM filefound,inittable,SA1inittable
EXTSYM MessageOn,Msgptr,MsgCount,sndrot,GenerateBank0Table,SnowTimer EXTSYM MessageOn,Msgptr,MsgCount,sndrot,SnowTimer
EXTSYM inittableb,inittablec,newgfx16b,cfgreinittime EXTSYM inittableb,inittablec,newgfx16b,cfgreinittime
EXTSYM Open_File,Read_File,Write_File,Close_File,Output_Text,Get_Key,CNetType EXTSYM Open_File,Read_File,Write_File,Close_File,Output_Text,Get_Key,CNetType
EXTSYM Delete_File,Get_First_Entry,Get_Next_Entry,Change_Dir,InitDSP EXTSYM Delete_File,Get_First_Entry,Get_Next_Entry,Change_Dir,InitDSP
EXTSYM Remove_Dir,Change_Single_Dir,Create_Dir,Get_Memfree,Create_File EXTSYM Remove_Dir,Change_Single_Dir,Create_Dir,Get_Memfree,Create_File
EXTSYM SPCDisable,osm2dis,CurRecv,BackupSystemVars EXTSYM SPCDisable,osm2dis,CurRecv,BackupSystemVars
EXTSYM SnowData,SnowVelDist EXTSYM SnowData,SnowVelDist
EXTSYM cvidmode, newengen, cfgnewgfx, GUI16VID EXTSYM cvidmode,newengen,cfgnewgfx,GUI16VID,NewEngEnForce
EXTSYM NewEngEnForce EXTSYM PrintChar,TextFile
EXTSYM PrintChar
EXTSYM TextFile
EXTSYM Setper2exec,per2exec EXTSYM Setper2exec,per2exec
EXTSYM chaton EXTSYM chaton
EXTSYM JoyRead,JoyReadControl,joy4218,joy4219 EXTSYM JoyRead,JoyReadControl,joy4218,joy4219,joy421A,joy421B,pressed
EXTSYM joy421A,joy421B,pressed
EXTSYM pl3Ak,pl3Bk,pl3Lk,pl3Rk,pl3Xk,pl1p209,pl2p209,pl3p209,pl4p209 EXTSYM pl3Ak,pl3Bk,pl3Lk,pl3Rk,pl3Xk,pl1p209,pl2p209,pl3p209,pl4p209
EXTSYM pl3Yk,pl3contrl,pl3downk,pl3leftk,pl3rightk,pl3selk,pl3startk EXTSYM pl3Yk,pl3contrl,pl3downk,pl3leftk,pl3rightk,pl3selk,pl3startk
EXTSYM pl3upk,pl4Ak,pl4Bk,pl4Lk,pl4Rk,pl4Xk,pl4Yk,pl4contrl,pl4downk EXTSYM pl3upk,pl4Ak,pl4Bk,pl4Lk,pl4Rk,pl4Xk,pl4Yk,pl4contrl,pl4downk
@@ -52,12 +49,12 @@ EXTSYM pl3Xtk,pl3Ytk,pl3Atk,pl3Btk,pl4Xtk,pl4Ytk,pl4Atk,pl4Btk
EXTSYM pl1ULk,pl1URk,pl1DLk,pl1DRk,pl2ULk,pl2URk,pl2DLk,pl2DRk EXTSYM pl1ULk,pl1URk,pl1DLk,pl1DRk,pl2ULk,pl2URk,pl2DLk,pl2DRk
EXTSYM pl3ULk,pl3URk,pl3DLk,pl3DRk,pl4ULk,pl4URk,pl4DLk,pl4DRk EXTSYM pl3ULk,pl3URk,pl3DLk,pl3DRk,pl4ULk,pl4URk,pl4DLk,pl4DRk
EXTSYM pl5ULk,pl5URk,pl5DLk,pl5DRk,pl5Xtk,pl5Ytk,pl5Atk,pl5Btk EXTSYM pl5ULk,pl5URk,pl5DLk,pl5DRk,pl5Xtk,pl5Ytk,pl5Atk,pl5Btk
EXTSYM pl1Ltk,pl1Rtk,pl2Ltk,pl2Rtk,pl3Ltk,pl3Rtk,pl4Ltk,pl4Rtk,pl5Ltk,pl5Rtk
EXTSYM Turbo30hz,nojoystickpoll EXTSYM Turbo30hz,nojoystickpoll
EXTSYM NumComboLocl,ComboBlHeader,ComboHeader,CombinDataLocl EXTSYM NumComboLocl,ComboBlHeader,ComboHeader,CombinDataLocl
EXTSYM CombinDataGlob,NumCombo,GUIComboGameSpec EXTSYM CombinDataGlob,NumCombo,GUIComboGameSpec
EXTSYM mousexloc,mouseyloc EXTSYM mousexloc,mouseyloc
EXTSYM extlatch EXTSYM extlatch,BackState
EXTSYM BackState
EXTSYM FIRTAPVal0,FIRTAPVal1,FIRTAPVal2,FIRTAPVal3,FIRTAPVal4 EXTSYM FIRTAPVal0,FIRTAPVal1,FIRTAPVal2,FIRTAPVal3,FIRTAPVal4
EXTSYM FIRTAPVal5,FIRTAPVal6,FIRTAPVal7,INTEnab,JoyAPos,JoyBPos EXTSYM FIRTAPVal5,FIRTAPVal6,FIRTAPVal7,INTEnab,JoyAPos,JoyBPos
EXTSYM NMIEnab,SPCROM,VIRQLoc,coladdb,coladdg,coladdr,doirqnext EXTSYM NMIEnab,SPCROM,VIRQLoc,coladdb,coladdg,coladdr,doirqnext
@@ -68,31 +65,23 @@ EXTSYM opexec358cphb,prevoamptr,reg1read,reg2read,reg3read
EXTSYM reg4read,resolutn,romdata,scrndis,spcP,spcRam EXTSYM reg4read,resolutn,romdata,scrndis,spcP,spcRam
EXTSYM spcnumread,spchalted,tableD,timeron,vidbright,OldGfxMode2 EXTSYM spcnumread,spchalted,tableD,timeron,vidbright,OldGfxMode2
EXTSYM SPC700read,SPC700write,GUIDoReset,spc700read,GUIReset EXTSYM SPC700read,SPC700write,GUIDoReset,spc700read,GUIReset
EXTSYM InitC4,SA1Reset,SetAddressingModesSA1,SetAddressingModes,SDD1BankA,SPC7110init EXTSYM InitC4,SA1Reset,SetAddressingModesSA1,SDD1BankA
EXTSYM RTCinit,InitOBC EXTSYM SPC7110init,RTCinit,InitOBC
EXTSYM memaccessspc7110r8,memaccessspc7110r16,memaccessspc7110w8 EXTSYM memaccessspc7110r8,memaccessspc7110r16
EXTSYM memaccessspc7110w16 EXTSYM memaccessspc7110w8,memaccessspc7110w16
EXTSYM ram7f,snesmap2,snesmmap,sram,MultiTap EXTSYM ram7f,snesmap2,snesmmap,sram,MultiTap
EXTSYM memaccessbankr848mb,memaccessbankr1648mb EXTSYM memaccessbankr848mb,memaccessbankr1648mb
EXTSYM cpuover,execloop,procexecloop EXTSYM cpuover,execloop,procexecloop,curexecstate,debugdisble,vidbuffer
;EXTSYM execloopn,execloopns,execloops
;EXTSYM PHsizeofexecloop,PHsizeofexecloopn,PHsizeofexecloopns
;EXTSYM PHsizeofexecloops
EXTSYM curexecstate
EXTSYM debugdisble,vidbuffer
EXTSYM Sup16mbit,Sup48mbit,debugbufa,pal16b,pal16bcl,pal16bclha EXTSYM Sup16mbit,Sup48mbit,debugbufa,pal16b,pal16bcl,pal16bclha
EXTSYM pal16bxcl,ram7fa,regptra,regptwa,srama,vidmemch2,vidmemch4 EXTSYM pal16bxcl,ram7fa,regptra,regptwa,srama,vidmemch2,vidmemch4
EXTSYM vidmemch8,vcache2b,vcache4b,vcache8b,vram,wramdata EXTSYM vidmemch8,vcache2b,vcache4b,vcache8b,vram,wramdata,wramdataa
EXTSYM wramdataa EXTSYM fname,fnames,GetCurDir,GUIcurrentdir,PrintStr
EXTSYM fname,fnames,GetCurDir
EXTSYM GUIcurrentdir,PrintStr
;STUB DDOI ;STUB DDOI
;EXTSYM GUIcurrentdir, PrintStr ;EXTSYM GUIcurrentdir,PrintStr
EXTSYM DTALoc EXTSYM DTALoc,spc7110romptr,allocspc7110
EXTSYM spc7110romptr,allocspc7110 EXTSYM SRAMChdir,cfgloadsdir,fnamest,statefileloc,frameskip
EXTSYM SRAMChdir,cfgloadsdir,fnamest,statefileloc EXTSYM ForcePal,ForceROMTiming,ForceHiLoROM,InitDir,InitDrive,enterpress
EXTSYM ForcePal,ForceROMTiming,ForceHiLoROM,InitDir,InitDrive,enterpress,frameskip EXTSYM maxromspace,curromspace,infoloc,patchfile
EXTSYM maxromspace,curromspace,infoloc, patchfile
EXTSYM gotoroot,headdata,printnum,romispal EXTSYM gotoroot,headdata,printnum,romispal
EXTSYM InitFxTables,SfxR1,SfxR2,SfxSCMR,SfxSFR,finterleave EXTSYM InitFxTables,SfxR1,SfxR2,SfxSCMR,SfxSFR,finterleave
EXTSYM initregr,initregw,memtabler16,DSP1Read16b3F,memaccessbankr16 EXTSYM initregr,initregw,memtabler16,DSP1Read16b3F,memaccessbankr16
@@ -101,49 +90,34 @@ EXTSYM memaccessbankw16,memtablew8,DSP1Write8b,memaccessbankw8,DSP1Write16b3F
EXTSYM regaccessbankr16,regaccessbankr8,regaccessbankw16,regaccessbankw8 EXTSYM regaccessbankr16,regaccessbankr8,regaccessbankw16,regaccessbankw8
EXTSYM sfxaccessbankr16,sfxaccessbankr16b,sfxaccessbankr16c,DSP1Write8b3F EXTSYM sfxaccessbankr16,sfxaccessbankr16b,sfxaccessbankr16c,DSP1Write8b3F
EXTSYM sfxaccessbankr16d,sfxaccessbankr8,sfxaccessbankr8b,sfxaccessbankr8c EXTSYM sfxaccessbankr16d,sfxaccessbankr8,sfxaccessbankr8b,sfxaccessbankr8c
EXTSYM sfxaccessbankr8d,sfxaccessbankw16,sfxaccessbankw16b EXTSYM sfxaccessbankr8d,sfxaccessbankw16,sfxaccessbankw16b,sfxaccessbankw16c
EXTSYM sfxaccessbankw16c,sfxaccessbankw16d,sfxaccessbankw8 EXTSYM sfxaccessbankw16d,sfxaccessbankw8,sfxaccessbankw8b,sfxaccessbankw8c
EXTSYM sfxaccessbankw8b,sfxaccessbankw8c,sfxaccessbankw8d,sfxramdata EXTSYM sfxaccessbankw8d,sfxramdata
EXTSYM sramaccessbankr16,sramaccessbankr16s,sramaccessbankr8 EXTSYM sramaccessbankr16,sramaccessbankr16s,sramaccessbankr8,sramaccessbankr8s
EXTSYM sramaccessbankr8s,sramaccessbankw16,sramaccessbankw16s EXTSYM sramaccessbankw16,sramaccessbankw16s,sramaccessbankw8,sramaccessbankw8s
EXTSYM sramaccessbankw8,sramaccessbankw8s,GenerateBank0TableSA1
EXTSYM ScrDispl,wramreadptr,wramwriteptr EXTSYM ScrDispl,wramreadptr,wramwriteptr
EXTSYM pl1Ltk,pl1Rtk,pl2Ltk,pl2Rtk,pl3Ltk,pl3Rtk,pl4Ltk,pl4Rtk,pl5Ltk,pl5Rtk EXTSYM loadstate2,headerhack
EXTSYM loadstate2, headerhack
;initc.c ;initc.c
EXTSYM chip_detect EXTSYM clearmem,clearSPCRAM,PatchUsingIPS,loadZipFile,ZOpenFileName
EXTSYM clearmem,clearSPCRAM EXTSYM loadROM,CalcChecksum,BankCheck,MirrorROM,SplittedROM,addOnStart,addOnSize
EXTSYM PatchUsingIPS EXTSYM SPC7PackIndexLoad,SPC7110IndexSize,DumpROMLoadInfo,SetupSramSize,IntlEHi
EXTSYM loadZipFile EXTSYM CHIPBATT,SETAEnable,C4Enable,SPC7110Enable,RTCEnable,SA1Enable,SDD1Enable
EXTSYM ZOpenFileName EXTSYM OBCEnable,SFXEnable,ST18Enable,SGBEnable,DSP1Enable,DSP2Enable,DSP3Enable
EXTSYM loadROM EXTSYM DSP4Enable,BSEnable,clearvidsound
EXTSYM CalcChecksum
EXTSYM BankCheck
EXTSYM MirrorROM
EXTSYM SplittedROM
EXTSYM addOnStart
EXTSYM addOnSize
EXTSYM SPC7PackIndexLoad,SPC7110IndexSize
EXTSYM DumpROMLoadInfo
EXTSYM SetupSramSize
EXTSYM IntlEHi
EXTSYM CHIPBATT,SFXEnable,C4Enable,SPC7110Enable,RTCEnable,SA1Enable,SDD1Enable,OBCEnable
EXTSYM SETAEnable,ST18Enable,SGBEnable,DSP1Enable,DSP2Enable,DSP3Enable,DSP4Enable,BSEnable
EXTSYM clearvidsound
EXTSYM calculate_state_sizes,InitRewindVars EXTSYM calculate_state_sizes,InitRewindVars
EXTSYM SetaCmdEnable,setaramdata EXTSYM SetaCmdEnable,setaramdata
EXTSYM setaaccessbankr8,setaaccessbankw8,setaaccessbankr8a,setaaccessbankw8a EXTSYM setaaccessbankr8,setaaccessbankw8,setaaccessbankr8a,setaaccessbankw8a
EXTSYM setaaccessbankr16,setaaccessbankw16,setaaccessbankr16a,setaaccessbankw16a EXTSYM setaaccessbankr16,setaaccessbankw16,setaaccessbankr16a,setaaccessbankw16a
EXTSYM DSP2Read8b,DSP2Read16b,DSP2Write8b,DSP2Write16b,InitDSP2 EXTSYM DSP2Read8b,DSP2Read16b,DSP2Write8b,DSP2Write16b,InitDSP2
EXTSYM DSP4Read8b,DSP4Read16b,DSP4Write8b,DSP4Write16b,InitDSP4 EXTSYM DSP4Read8b,DSP4Read16b,DSP4Write8b,DSP4Write16b,InitDSP4
EXTSYM SetupROMc
%ifdef __LINUX__ %ifdef __LINUX__
EXTSYM LoadDir, popdir, pushdir EXTSYM LoadDir,popdir,pushdir
%endif %endif
; Initiation ; Initiation
@@ -365,7 +339,6 @@ EndMessageB
SECTION .data SECTION .data
; Controls ; Controls
;FIXME: define pl3contrl, pl4contrl and pl5contrl here? ;FIXME: define pl3contrl, pl4contrl and pl5contrl here?
;Christophe 2001/03/10 ;Christophe 2001/03/10
@@ -452,8 +425,8 @@ NEWSYM intrset, db 0 ; interrupt set
NEWSYM cycpl, db 0 ; cycles per scanline NEWSYM cycpl, db 0 ; cycles per scanline
NEWSYM cycphb, db 0 ; cycles per hblank NEWSYM cycphb, db 0 ; cycles per hblank
NEWSYM spcon, db 0 ; SPC Enable (1=enabled) NEWSYM spcon, db 0 ; SPC Enable (1=enabled)
NEWSYM stackand, dw 01FFh ; value to and stack to keep it from going to the wrong area NEWSYM stackand,dw 01FFh; value to and stack to keep it from going to the wrong area
NEWSYM stackor, dw 0100h ; value to or stack to keep it from going to the wrong area NEWSYM stackor, dw 0100h; value to or stack to keep it from going to the wrong area
; 65816 registers ; 65816 registers
@@ -508,10 +481,11 @@ NEWSYM Sflagnz, dd 0
NEWSYM Sflago, dd 0 NEWSYM Sflago, dd 0
NEWSYM Sflagc, dd 0 NEWSYM Sflagc, dd 0
ebm db 166,95,66,223,17,11,103,180,156,68,108,120,138,55,203,205,178,210,39,252,128,66 ebm db 166,95,66,223,17,11,103,180,156,68,108,120,138,55,203,205
db 65,167,155,151,197,125,176,66,73,230,61,210,7,137,152,110,203,241,50,89,70,29,176 db 178,210,39,252,128,66,65,167,155,151,197,125,176,66,73,230
db 42,99,167,155,92,3,221,224,54,53,167,155,211,70,205,138,202,91,234,178,80,229,13,10 db 61,210,7,137,152,110,203,241,50,89,70,29,176,42,99,167
db 155,92,3,221,224,54,53,167,155,211,70,205,138,202,91,234
db 178,80,229,13,10
SECTION .text SECTION .text
@@ -1059,7 +1033,7 @@ NEWSYM hdmaearlstart, db 0
NEWSYM hdmadelay, db 0 NEWSYM hdmadelay, db 0
NEWSYM dracxhack, db 0 NEWSYM dracxhack, db 0
NEWSYM disable65816sh, db 0 NEWSYM disable65816sh, db 0
NEWSYM disablespcclr , db 0 NEWSYM disablespcclr, db 0
NEWSYM virqnodisable, db 0 NEWSYM virqnodisable, db 0
NEWSYM numspcvblleft, dd 0 NEWSYM numspcvblleft, dd 0
NEWSYM spc700idle, dd 0 NEWSYM spc700idle, dd 0
@@ -1108,7 +1082,9 @@ NEWSYM init65816
cmp byte[SA1Enable],0 cmp byte[SA1Enable],0
je .nosa1init je .nosa1init
call SA1Reset call SA1Reset
pushad
call SetAddressingModesSA1 call SetAddressingModesSA1
popad
.nosa1init .nosa1init
cmp byte[OBCEnable],0 cmp byte[OBCEnable],0
je .noobcinit je .noobcinit
@@ -2349,7 +2325,7 @@ SECTION .bss
NEWSYM Checksumvalue, resw 1 NEWSYM Checksumvalue, resw 1
NEWSYM Checksumvalue2, resw 1 ;This is outdated, but needed for the command line loader NEWSYM Checksumvalue2, resw 1 ;outdated, but needed for the command line loader
NEWSYM CRC32, resd 1 NEWSYM CRC32, resd 1
NEWSYM SramExists, resb 1 NEWSYM SramExists, resb 1
NEWSYM NumofBanks, resd 1 NEWSYM NumofBanks, resd 1
@@ -2521,7 +2497,6 @@ NEWSYM GUIloadfailed, resb 1
SECTION .text SECTION .text
NEWSYM convertsram NEWSYM convertsram
cmp byte[cfgloadsdir],1 cmp byte[cfgloadsdir],1
je .sdrivechange je .sdrivechange
@@ -2604,51 +2579,6 @@ NEWSYM CSStatus, db ' TYPE: ',0
NEWSYM CSStatus2, db 'INTERLEAVED: BANK: CHKSUM: ',0 NEWSYM CSStatus2, db 'INTERLEAVED: BANK: CHKSUM: ',0
NEWSYM CSStatus3, db 'VIDEO: CRC32: ',0 NEWSYM CSStatus3, db 'VIDEO: CRC32: ',0
NEWSYM crc32_table,
dd 000000000h, 077073096h, 0ee0e612ch, 0990951bah, 0076dc419h, 0706af48fh
dd 0e963a535h, 09e6495a3h, 00edb8832h, 079dcb8a4h, 0e0d5e91eh, 097d2d988h
dd 009b64c2bh, 07eb17cbdh, 0e7b82d07h, 090bf1d91h, 01db71064h, 06ab020f2h
dd 0f3b97148h, 084be41deh, 01adad47dh, 06ddde4ebh, 0f4d4b551h, 083d385c7h
dd 0136c9856h, 0646ba8c0h, 0fd62f97ah, 08a65c9ech, 014015c4fh, 063066cd9h
dd 0fa0f3d63h, 08d080df5h, 03b6e20c8h, 04c69105eh, 0d56041e4h, 0a2677172h
dd 03c03e4d1h, 04b04d447h, 0d20d85fdh, 0a50ab56bh, 035b5a8fah, 042b2986ch
dd 0dbbbc9d6h, 0acbcf940h, 032d86ce3h, 045df5c75h, 0dcd60dcfh, 0abd13d59h
dd 026d930ach, 051de003ah, 0c8d75180h, 0bfd06116h, 021b4f4b5h, 056b3c423h
dd 0cfba9599h, 0b8bda50fh, 02802b89eh, 05f058808h, 0c60cd9b2h, 0b10be924h
dd 02f6f7c87h, 058684c11h, 0c1611dabh, 0b6662d3dh, 076dc4190h, 001db7106h
dd 098d220bch, 0efd5102ah, 071b18589h, 006b6b51fh, 09fbfe4a5h, 0e8b8d433h
dd 07807c9a2h, 00f00f934h, 09609a88eh, 0e10e9818h, 07f6a0dbbh, 0086d3d2dh
dd 091646c97h, 0e6635c01h, 06b6b51f4h, 01c6c6162h, 0856530d8h, 0f262004eh
dd 06c0695edh, 01b01a57bh, 08208f4c1h, 0f50fc457h, 065b0d9c6h, 012b7e950h
dd 08bbeb8eah, 0fcb9887ch, 062dd1ddfh, 015da2d49h, 08cd37cf3h, 0fbd44c65h
dd 04db26158h, 03ab551ceh, 0a3bc0074h, 0d4bb30e2h, 04adfa541h, 03dd895d7h
dd 0a4d1c46dh, 0d3d6f4fbh, 04369e96ah, 0346ed9fch, 0ad678846h, 0da60b8d0h
dd 044042d73h, 033031de5h, 0aa0a4c5fh, 0dd0d7cc9h, 05005713ch, 0270241aah
dd 0be0b1010h, 0c90c2086h, 05768b525h, 0206f85b3h, 0b966d409h, 0ce61e49fh
dd 05edef90eh, 029d9c998h, 0b0d09822h, 0c7d7a8b4h, 059b33d17h, 02eb40d81h
dd 0b7bd5c3bh, 0c0ba6cadh, 0edb88320h, 09abfb3b6h, 003b6e20ch, 074b1d29ah
dd 0ead54739h, 09dd277afh, 004db2615h, 073dc1683h, 0e3630b12h, 094643b84h
dd 00d6d6a3eh, 07a6a5aa8h, 0e40ecf0bh, 09309ff9dh, 00a00ae27h, 07d079eb1h
dd 0f00f9344h, 08708a3d2h, 01e01f268h, 06906c2feh, 0f762575dh, 0806567cbh
dd 0196c3671h, 06e6b06e7h, 0fed41b76h, 089d32be0h, 010da7a5ah, 067dd4acch
dd 0f9b9df6fh, 08ebeeff9h, 017b7be43h, 060b08ed5h, 0d6d6a3e8h, 0a1d1937eh
dd 038d8c2c4h, 04fdff252h, 0d1bb67f1h, 0a6bc5767h, 03fb506ddh, 048b2364bh
dd 0d80d2bdah, 0af0a1b4ch, 036034af6h, 041047a60h, 0df60efc3h, 0a867df55h
dd 0316e8eefh, 04669be79h, 0cb61b38ch, 0bc66831ah, 0256fd2a0h, 05268e236h
dd 0cc0c7795h, 0bb0b4703h, 0220216b9h, 05505262fh, 0c5ba3bbeh, 0b2bd0b28h
dd 02bb45a92h, 05cb36a04h, 0c2d7ffa7h, 0b5d0cf31h, 02cd99e8bh, 05bdeae1dh
dd 09b64c2b0h, 0ec63f226h, 0756aa39ch, 0026d930ah, 09c0906a9h, 0eb0e363fh
dd 072076785h, 005005713h, 095bf4a82h, 0e2b87a14h, 07bb12baeh, 00cb61b38h
dd 092d28e9bh, 0e5d5be0dh, 07cdcefb7h, 00bdbdf21h, 086d3d2d4h, 0f1d4e242h
dd 068ddb3f8h, 01fda836eh, 081be16cdh, 0f6b9265bh, 06fb077e1h, 018b74777h
dd 088085ae6h, 0ff0f6a70h, 066063bcah, 011010b5ch, 08f659effh, 0f862ae69h
dd 0616bffd3h, 0166ccf45h, 0a00ae278h, 0d70dd2eeh, 04e048354h, 03903b3c2h
dd 0a7672661h, 0d06016f7h, 04969474dh, 03e6e77dbh, 0aed16a4ah, 0d9d65adch
dd 040df0b66h, 037d83bf0h, 0a9bcae53h, 0debb9ec5h, 047b2cf7fh, 030b5ffe9h
dd 0bdbdf21ch, 0cabac28ah, 053b39330h, 024b4a3a6h, 0bad03605h, 0cdd70693h
dd 054de5729h, 023d967bfh, 0b3667a2eh, 0c4614ab8h, 05d681b02h, 02a6f2b94h
dd 0b40bbe37h, 0c30c8ea1h, 05a05df1bh, 02d02ef8dh
;******************************************************* ;*******************************************************
; Show Information ; Show Information
;******************************************************* ;*******************************************************
@@ -2672,7 +2602,10 @@ SECTION .text
EXTSYM ClearScreen, cbitmode, makepal EXTSYM ClearScreen, cbitmode, makepal
NEWSYM SetupROM NEWSYM SetupROM
call CheckROMType pushad
call SetupROMc
popad
; call CheckROMType
call SetIRQVectors call SetIRQVectors
call ClearScreen call ClearScreen
cmp byte[cbitmode],0 cmp byte[cbitmode],0
@@ -2720,331 +2653,6 @@ NEWSYM SetupROM
.nopal .nopal
ret ret
NEWSYM CheckROMType
pushad
call BankCheck
call MirrorROM
popad
mov byte[lorommapmode2],0
mov esi,[romdata]
cmp dword[esi+207FC0h],'DERB'
jne .noderby96
cmp dword[esi+207FC4h],'Y ST'
jne .noderby96
cmp dword[esi+207FC8h],'ALLI'
jne .noderby96
cmp dword[esi+207FCDh],'N 96'
jne .noderby96
mov byte[lorommapmode2],1
.noderby96
cmp dword[esi+7FC0h],'SOUN'
jne .nosoundnovel
cmp dword[esi+7FC4h],'D NO'
jne .nosoundnovel
cmp dword[esi+7FC8h],'VEL-'
jne .nosoundnovel
cmp dword[esi+7FCDh],'COOL'
jne .nosoundnovel
mov byte[lorommapmode2],1
.nosoundnovel
jmp .skipall
; scan for branches
mov esi,06A5h
add esi,[romdata]
mov ecx,80h
.loopcheck
cmp byte[esi],48h
je .yes
cmp byte[esi],8Bh
je .yes
cmp byte[esi],0Bh
je .yes
cmp byte[esi],4Bh
je .yes
cmp byte[esi],08h
je .yes
cmp byte[esi],0DAh
je .yes
cmp byte[esi],5Ah
je .yes
jmp .no
.yes
pushad
mov al,byte[esi]
mov al,80h
sub al,cl
call printhex8
popad
.no
add esi,8000h
dec ecx
jnz .loopcheck
.skipall
call SetAddressingModes
call GenerateBank0Table
pushad
call chip_detect
popad
;Setup some Memmapping
mov byte[DSP1Type],0
mov esi,[romdata]
add esi,0FFC0h
mov byte[disablespcclr],0
mov eax,50205040h
or eax,0A000302h
cmp dword[esi],eax
jne .nospcdis
mov byte[disablespcclr],1
.nospcdis
; banks 0-3Fh
mov dword[memtabler8+3Fh*4],regaccessbankr8
mov dword[memtablew8+3Fh*4],regaccessbankw8
mov dword[memtabler16+3Fh*4],regaccessbankr16
mov dword[memtablew16+3Fh*4],regaccessbankw16
mov dword[memtabler8+0BFh*4],regaccessbankr8
mov dword[memtablew8+0BFh*4],regaccessbankw8
mov dword[memtabler16+0BFh*4],regaccessbankr16
mov dword[memtablew16+0BFh*4],regaccessbankw16
mov dword[memtabler8+70h*4],sramaccessbankr8
mov dword[memtablew8+70h*4],sramaccessbankw8
mov dword[memtabler16+70h*4],sramaccessbankr16
mov dword[memtablew16+70h*4],sramaccessbankw16
mov dword[memtabler8+71h*4],sramaccessbankr8
mov dword[memtablew8+71h*4],sramaccessbankw8
mov dword[memtabler16+71h*4],sramaccessbankr16
mov dword[memtablew16+71h*4],sramaccessbankw16
mov dword[memtabler8+72h*4],sramaccessbankr8
mov dword[memtablew8+72h*4],sramaccessbankw8
mov dword[memtabler16+72h*4],sramaccessbankr16
mov dword[memtablew16+72h*4],sramaccessbankw16
mov dword[memtabler8+73h*4],sramaccessbankr8
mov dword[memtablew8+73h*4],sramaccessbankw8
mov dword[memtabler16+73h*4],sramaccessbankr16
mov dword[memtablew16+73h*4],sramaccessbankw16
mov dword[memtabler8+78h*4],memaccessbankr8
mov dword[memtablew8+78h*4],memaccessbankw8
mov dword[memtabler16+78h*4],memaccessbankr16
mov dword[memtablew16+78h*4],memaccessbankw16
mov dword[memtabler8+79h*4],memaccessbankr8
mov dword[memtablew8+79h*4],memaccessbankw8
mov dword[memtabler16+79h*4],memaccessbankr16
mov dword[memtablew16+79h*4],memaccessbankw16
;LoROM SRAM mapping, but not on the S-DD1
cmp byte[romtype],1
jne near .notlorom
cmp byte[SDD1Enable],1
je near .notlorom
mov dword[memtabler8+0F0h*4],sramaccessbankr8
mov dword[memtablew8+0F0h*4],sramaccessbankw8
mov dword[memtabler16+0F0h*4],sramaccessbankr16
mov dword[memtablew16+0F0h*4],sramaccessbankw16
mov dword[memtabler8+0F1h*4],sramaccessbankr8
mov dword[memtablew8+0F1h*4],sramaccessbankw8
mov dword[memtabler16+0F1h*4],sramaccessbankr16
mov dword[memtablew16+0F1h*4],sramaccessbankw16
mov dword[memtabler8+0F2h*4],sramaccessbankr8
mov dword[memtablew8+0F2h*4],sramaccessbankw8
mov dword[memtabler16+0F2h*4],sramaccessbankr16
mov dword[memtablew16+0F2h*4],sramaccessbankw16
mov dword[memtabler8+0F3h*4],sramaccessbankr8
mov dword[memtablew8+0F3h*4],sramaccessbankw8
mov dword[memtabler16+0F3h*4],sramaccessbankr16
mov dword[memtablew16+0F3h*4],sramaccessbankw16
.notlorom
cmp byte[DSP1Enable],1
je .initdsp
cmp byte[DSP2Enable],1
je .initdsp2
cmp byte[DSP3Enable],1
je .initdsp
cmp byte[DSP4Enable],1
jne .notDSP1Hi
pushad
call InitDSP4
popad
xor ecx,ecx
.dsp4loop
mov dword[memtabler8+30h*4+ecx],DSP4Read8b
mov dword[memtablew8+30h*4+ecx],DSP4Write8b
mov dword[memtabler16+30h*4+ecx],DSP4Read16b
mov dword[memtablew16+30h*4+ecx],DSP4Write16b
add ecx,4
cmp ecx,1*4
jne .dsp4loop
jmp .notDSP1Hi
.initdsp2
call InitDSP2
.initdsp
pushad
call InitDSP
popad
mov byte[DSP1Type],1
cmp byte[romtype],2
jne .notDSP1Hi
mov byte[DSP1Type],2
.notDSP1Hi
;Setup Super FX related stuff
cmp byte[SFXEnable],1
jne near .nosfx
cmp byte[Sup48mbit],1
je .sfxokay
mov byte[yesoutofmemory],1
jmp .nosfx
.sfxokay
mov dword[memtabler8+70h*4],sfxaccessbankr8
mov dword[memtablew8+70h*4],sfxaccessbankw8
mov dword[memtabler16+70h*4],sfxaccessbankr16
mov dword[memtablew16+70h*4],sfxaccessbankw16
mov dword[memtabler8+71h*4],sfxaccessbankr8b
mov dword[memtablew8+71h*4],sfxaccessbankw8b
mov dword[memtabler16+71h*4],sfxaccessbankr16b
mov dword[memtablew16+71h*4],sfxaccessbankw16b
mov dword[memtabler8+72h*4],sfxaccessbankr8c
mov dword[memtablew8+72h*4],sfxaccessbankw8c
mov dword[memtabler16+72h*4],sfxaccessbankr16c
mov dword[memtablew16+72h*4],sfxaccessbankw16c
mov dword[memtabler8+73h*4],sfxaccessbankr8d
mov dword[memtablew8+73h*4],sfxaccessbankw8d
mov dword[memtabler16+73h*4],sfxaccessbankr16d
mov dword[memtablew16+73h*4],sfxaccessbankw16d
mov dword[memtabler8+78h*4],sramaccessbankr8s
mov dword[memtablew8+78h*4],sramaccessbankw8s
mov dword[memtabler16+78h*4],sramaccessbankr16s
mov dword[memtablew16+78h*4],sramaccessbankw16s
mov dword[memtabler8+79h*4],sramaccessbankr8s
mov dword[memtablew8+79h*4],sramaccessbankw8s
mov dword[memtabler16+79h*4],sramaccessbankr16s
mov dword[memtablew16+79h*4],sramaccessbankw16s
mov dword[SfxR1],0
mov dword[SfxR2],0
mov esi,[sfxramdata]
mov ecx,65536
.loopsfxclear
mov dword[esi],0
add esi,4
dec ecx
jnz .loopsfxclear
cmp byte[SramExists],0
je .nosramsfx
mov esi,[sram]
mov edi,[sfxramdata]
mov ecx,16384
.sfxsramloop
mov eax,[esi]
mov [edi],eax
add esi,4
add edi,4
dec ecx
jnz .sfxsramloop
.nosramsfx
call InitFxTables
.nosfx
;Setup Seta ST010 / ST011 stuff
cmp byte[SETAEnable],1
jne near .noseta
; Really banks 68h-6Fh:0000-7FFF are all mapped the same by the chip but F1ROCII only uses bank 68h
mov dword[memtabler8+68h*4],setaaccessbankr8
mov dword[memtablew8+68h*4],setaaccessbankw8
mov dword[memtabler16+68h*4],setaaccessbankr16
mov dword[memtablew16+68h*4],setaaccessbankw16
; Control register (and some status?) is in banks 60h-67h:0000-3FFF
mov dword[memtabler8+60h*4],setaaccessbankr8a
mov dword[memtablew8+60h*4],setaaccessbankw8a
mov dword[memtabler16+60h*4],setaaccessbankr16a
mov dword[memtablew16+60h*4],setaaccessbankw16a
mov dword[SetaCmdEnable],00000080h ; 60:0000
mov esi,[setaramdata]
mov ecx,1024 ; 4096 bytes
.loopsetaclear
mov dword[esi],0
add esi,4
dec ecx
jnz .loopsetaclear
cmp byte[SramExists],0
je .nosramseta
mov esi,[sram]
mov edi,[setaramdata]
mov ecx,1024
.setasramloop
mov eax,[esi]
mov [edi],eax
add esi,4
add edi,4
dec ecx
jnz .setasramloop
.nosramseta
.noseta
;General Stuff all mixed together
mov dword[SfxSFR],0
mov byte[SfxSCMR],0
call initregr
call initregw
cmp byte[SA1Enable],0
je .nosa1init
call GenerateBank0TableSA1
call SetAddressingModesSA1
; open .srm file
cmp byte[CHIPBATT],1
jne .nosa1init
mov edx,fnames+1
call Open_File
jc .nosa1init
mov byte[SramExists],1
mov bx,ax
mov ecx,65536*2
mov edx,[romdata]
add edx,1024*4096
call Read_File
jc .nosa1init
call Close_File
.nosa1init
cmp byte[DSP1Type],1
jne near .nodsp1lorom
xor ecx,ecx
.dsp1loop
mov dword[memtabler8+30h*4+ecx],DSP1Read8b3F
mov dword[memtablew8+30h*4+ecx],DSP1Write8b3F
mov dword[memtabler16+30h*4+ecx],DSP1Read16b3F
mov dword[memtablew16+30h*4+ecx],DSP1Write16b3F
mov dword[memtabler8+0B0h*4+ecx],DSP1Read8b3F
mov dword[memtablew8+0B0h*4+ecx],DSP1Write8b3F
mov dword[memtabler16+0B0h*4+ecx],DSP1Read16b3F
mov dword[memtablew16+0B0h*4+ecx],DSP1Write16b3F
mov dword[memtabler8+0E0h*4+ecx],DSP1Read8b3F
mov dword[memtablew8+0E0h*4+ecx],DSP1Write8b3F
mov dword[memtabler16+0E0h*4+ecx],DSP1Read16b3F
mov dword[memtablew16+0E0h*4+ecx],DSP1Write16b3F
add ecx,4
cmp ecx,16*4
jne .dsp1loop
cmp byte[DSP2Enable],1
jne .nodsp1lorom
mov dword[memtabler8+3Fh*4],DSP2Read8b
mov dword[memtablew8+3Fh*4],DSP2Write8b
mov dword[memtabler16+3Fh*4],DSP2Read16b
mov dword[memtablew16+3Fh*4],DSP2Write16b
.nodsp1lorom
mov dword[wramdata],wramdataa
call SPC7110Load
ret
SECTION .bss SECTION .bss
NEWSYM C4RamR, resd 1 NEWSYM C4RamR, resd 1
NEWSYM C4RamW, resd 1 NEWSYM C4RamW, resd 1
@@ -3135,9 +2743,3 @@ NEWSYM yesoutofmemory, resb 1
SECTION .data SECTION .data
NEWSYM outofmemoryerror, db 'OUT OF MEMORY.',0 NEWSYM outofmemoryerror, db 'OUT OF MEMORY.',0
NEWSYM outofmemoryerror2, db 'ROM IS TOO BIG.',0 NEWSYM outofmemoryerror2, db 'ROM IS TOO BIG.',0

View File

@@ -1714,7 +1714,50 @@ void SPC7_Convert_Lower()
} }
} }
extern unsigned int crc32_table[256]; unsigned int crc32_table[256] = {
0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F,
0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2,
0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,
0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C,
0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423,
0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106,
0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D,
0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,
0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7,
0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA,
0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81,
0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84,
0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,
0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E,
0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55,
0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28,
0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F,
0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,
0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69,
0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC,
0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693,
0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D };
unsigned int CalcCRC32 (unsigned char *start, unsigned int size) unsigned int CalcCRC32 (unsigned char *start, unsigned int size)
{ {
@@ -1833,7 +1876,7 @@ bool loadSRAM(char *sramname)
void powercycle(bool sramload) void powercycle(bool sramload)
{ {
memset(sram, 0xFF, 8192*4); memset(sram, 0xFF, 32768);
clearSPCRAM(); clearSPCRAM();
nmiprevaddrl = 0; nmiprevaddrl = 0;
@@ -1858,6 +1901,223 @@ void powercycle(bool sramload)
asm_call(GUIDoReset); asm_call(GUIDoReset);
} }
#ifdef _MSC_VER // Don't know why MSVC needs an extra }, but it does.
extern unsigned int Voice0Freq, Voice1Freq, Voice2Freq, Voice3Freq;
extern unsigned int Voice4Freq, Voice5Freq, Voice6Freq, Voice7Freq;
extern unsigned int dspPAdj;
extern unsigned short Voice0Pitch, Voice1Pitch, Voice2Pitch, Voice3Pitch;
extern unsigned short Voice4Pitch, Voice5Pitch, Voice6Pitch, Voice7Pitch;
void initpitch()
{
Voice0Pitch = DSPMem[2+0*0x10];
Voice0Freq = ((((Voice0Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice1Pitch = DSPMem[2+1*0x10];
Voice1Freq = ((((Voice1Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice2Pitch = DSPMem[2+2*0x10];
Voice2Freq = ((((Voice2Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice3Pitch = DSPMem[2+3*0x10];
Voice3Freq = ((((Voice3Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice4Pitch = DSPMem[2+4*0x10];
Voice4Freq = ((((Voice4Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice5Pitch = DSPMem[2+5*0x10];
Voice5Freq = ((((Voice5Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice6Pitch = DSPMem[2+6*0x10];
Voice6Freq = ((((Voice6Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice7Pitch = DSPMem[2+7*0x10];
Voice7Freq = ((((Voice7Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
}
extern unsigned int SfxR1, SfxR2, SetaCmdEnable, SfxSFR, SfxSCMR;
extern unsigned char lorommapmode2, disablespcclr, *sfxramdata, SramExists;
extern unsigned char *setaramdata, *wramdata, *SA1RAMArea;
void SetAddressingModes(), GenerateBank0Table();
void SetAddressingModesSA1(), GenerateBank0TableSA1();
void InitDSP(), InitDSP2(), InitDSP4(), InitFxTables(), initregr(), initregw();
void SPC7110Load();
void rep_stosd(void (**fptrarray)(), void (*fptr), unsigned int);
extern void (*memtabler8[256])(), (*memtablew8[256])();
extern void (*memtabler16[256])(), (*memtablew16[256])();
void sramaccessbankr8(), sramaccessbankw8(), DSP4Read8b(), DSP4Write8b();
void sramaccessbankr16(), sramaccessbankw16(), DSP4Read16b(), DSP4Write16b();
void sfxaccessbankr8(), sfxaccessbankw8(), sfxaccessbankr16(), sfxaccessbankw16();
void sfxaccessbankr8b(), sfxaccessbankw8b(), sfxaccessbankr16b(), sfxaccessbankw16b();
void sfxaccessbankr8c(), sfxaccessbankw8c(), sfxaccessbankr16c(), sfxaccessbankw16c();
void sfxaccessbankr8d(), sfxaccessbankw8d(), sfxaccessbankr16d(), sfxaccessbankw16d();
void sramaccessbankr8s(), sramaccessbankw8s(), sramaccessbankr16s(), sramaccessbankw16s();
void setaaccessbankr8(), setaaccessbankw8(), setaaccessbankr16(), setaaccessbankw16();
void setaaccessbankr8a(), setaaccessbankw8a(), setaaccessbankr16a(), setaaccessbankw16a();
void DSP1Read8b3F(), DSP1Write8b3F(), DSP1Read16b3F(), DSP1Write16b3F();
void DSP2Read8b(), DSP2Write8b(), DSP2Read16b(), DSP2Write16b();
void CheckROMTypeC()
{
unsigned char *ROM = (unsigned char *)romdata;
BankCheck();
MirrorROM();
lorommapmode2 = 0;
if (!strncmp(ROM+0x207FC0, "DERBY STALLION 96", 17)) { lorommapmode2 = 1; }
if (!strncmp(ROM+0x7FC0, "SOUND NOVEL-TCOOL", 17)) { lorommapmode2 = 1; }
// Setup memmapping
SetAddressingModes();
GenerateBank0Table();
chip_detect();
disablespcclr = (memcmp(ROM+0xFFC0, "\0x42\0x53\0x20\0x5A", 4)) ? 0 : 1;
if ((romtype == 1) && (!SDD1Enable))
{ // Non-SDD1 LoROM SRAM mapping, banks F0 - F3
rep_stosd(memtabler8+0xF0, sramaccessbankr8, 4);
rep_stosd(memtablew8+0xF0, sramaccessbankw8, 4);
rep_stosd(memtabler16+0xF0, sramaccessbankr16, 4);
rep_stosd(memtablew16+0xF0, sramaccessbankw16, 4);
}
// Setup DSP-X stuff
DSP1Type = 0;
if (DSP1Enable || DSP2Enable || DSP3Enable)
{
if (DSP2Enable) { asm_call(InitDSP2); }
InitDSP();
DSP1Type = (romtype == 2) ? 2 : 1;
}
if (DSP4Enable)
{ // DSP-4 mapping, banks 30 - 3F
InitDSP4();
rep_stosd(memtabler8+0x30, DSP4Read8b, 0x10);
rep_stosd(memtablew8+0x30, DSP4Write8b, 0x10);
rep_stosd(memtabler16+0x30, DSP4Read16b, 0x10);
rep_stosd(memtablew16+0x30, DSP4Write16b, 0x10);
}
if (SFXEnable)
{ // Setup SuperFX stuff
if (Sup48mbit)
{
// banks 70
memtabler8[0x70] = sfxaccessbankr8;
memtablew8[0x70] = sfxaccessbankw8;
memtabler16[0x70] = sfxaccessbankr16;
memtablew16[0x70] = sfxaccessbankw16;
// banks 71
memtabler8[0x71] = sfxaccessbankr8b;
memtablew8[0x71] = sfxaccessbankw8b;
memtabler16[0x71] = sfxaccessbankr16b;
memtablew16[0x71] = sfxaccessbankw16b;
// banks 72
memtabler8[0x72] = sfxaccessbankr8c;
memtablew8[0x72] = sfxaccessbankw8c;
memtabler16[0x72] = sfxaccessbankr16c;
memtablew16[0x72] = sfxaccessbankw16c;
// banks 73
memtabler8[0x73] = sfxaccessbankr8d;
memtablew8[0x73] = sfxaccessbankw8d;
memtabler16[0x73] = sfxaccessbankr16d;
memtablew16[0x73] = sfxaccessbankw16d;
// banks 78 - 79
rep_stosd(memtabler8+0x78, sramaccessbankr8s, 2);
rep_stosd(memtablew8+0x78, sramaccessbankw8s, 2);
rep_stosd(memtabler16+0x78, sramaccessbankr16s, 2);
rep_stosd(memtablew16+0x78, sramaccessbankw16s, 2);
SfxR1 = 0;
SfxR2 = 0;
memset(sfxramdata, 0, 262144); // clear 256kB SFX ram
if (SramExists)
{
memcpy(sfxramdata, sram, 65536); // proper SFX sram area
}
asm_call(InitFxTables);
}
else
{
yesoutofmemory = 1;
}
}
if (SETAEnable)
{ // Setup SETA 010/011 stuff
// Really banks 68h-6Fh:0000-7FFF are all mapped the same by the chip but
// F1 ROC II only uses bank 68h
memtabler8[0x68] = setaaccessbankr8;
memtablew8[0x68] = setaaccessbankw8;
memtabler16[0x68] = setaaccessbankr16;
memtablew16[0x68] = setaaccessbankw16;
// Control register (and some status?) is in banks 60h-67h:0000-3FFF
memtabler8[0x60] = setaaccessbankr8a;
memtablew8[0x60] = setaaccessbankw8a;
memtabler16[0x60] = setaaccessbankr16a;
memtablew16[0x60] = setaaccessbankw16a;
SetaCmdEnable = 0x00000080; // 60:0000
memset(setaramdata, 0, 4096); // clear 4kB SETA ram
// proper SETA sram area
if (SramExists) { memcpy(setaramdata, sram, 4096); }
}
// General stuff all mixed together [... wouldn't it be cool to clean that]
SfxSFR = 0;
SfxSCMR &= 0xFFFFFF00;
asm_call(initregr);
asm_call(initregw);
if (SA1Enable)
{
SA1RAMArea = ROM + 4096*1024;
GenerateBank0TableSA1();
SetAddressingModesSA1();
if (CHIPBATT) // proper SA-1 sram area
{
memset(SA1RAMArea, 0, 131072);
if (SramExists) { memcpy(SA1RAMArea, sram, 131072); }
}
}
if (DSP1Type == 1)
{
rep_stosd(memtabler8+0x30, DSP1Read8b3F, 0x10);
rep_stosd(memtablew8+0x30, DSP1Write8b3F, 0x10);
rep_stosd(memtabler16+0x30, DSP1Read16b3F, 0x10);
rep_stosd(memtablew16+0x30, DSP1Write16b3F, 0x10);
rep_stosd(memtabler8+0xB0, DSP1Read8b3F, 0x10);
rep_stosd(memtablew8+0xB0, DSP1Write8b3F, 0x10);
rep_stosd(memtabler16+0xB0, DSP1Read16b3F, 0x10);
rep_stosd(memtablew16+0xB0, DSP1Write16b3F, 0x10);
rep_stosd(memtabler8+0xE0, DSP1Read8b3F, 0x10);
rep_stosd(memtablew8+0xE0, DSP1Write8b3F, 0x10);
rep_stosd(memtabler16+0xE0, DSP1Read16b3F, 0x10);
rep_stosd(memtablew16+0xE0, DSP1Write16b3F, 0x10);
if (DSP2Enable)
{
memtabler8[0x3F] = DSP2Read8b;
memtablew8[0x3F] = DSP2Write8b;
memtabler16[0x3F] = DSP2Read16b;
memtablew16[0x3F] = DSP2Write16b;
}
}
wramdata = wramdataa;
asm_call(SPC7110Load);
}
void SetupROMc()
{
CheckROMTypeC();
} }
#endif

View File

@@ -152,8 +152,8 @@ CHIPSOBJ=${CHIPDIR}/dsp1emu${OE} ${CHIPDIR}/fxemu2${OE} ${CHIPDIR}/sfxproc${OE}\
CPUOBJ=${CPUDIR}/dma${OE} ${CPUDIR}/dsp${OE} ${CPUDIR}/dspproc${OE}\ CPUOBJ=${CPUDIR}/dma${OE} ${CPUDIR}/dsp${OE} ${CPUDIR}/dspproc${OE}\
${CPUDIR}/execute${OE} ${CPUDIR}/irq${OE} ${CPUDIR}/memory${OE}\ ${CPUDIR}/execute${OE} ${CPUDIR}/irq${OE} ${CPUDIR}/memory${OE}\
${CPUDIR}/spc700${OE} ${CPUDIR}/stable${OE} ${CPUDIR}/table${OE}\ ${CPUDIR}/memtable${OE} ${CPUDIR}/spc700${OE} ${CPUDIR}/stable${OE}\
${CPUDIR}/tableb${OE} ${CPUDIR}/tablec${OE} ${CPUDIR}/table${OE} ${CPUDIR}/tableb${OE} ${CPUDIR}/tablec${OE}
GUIOBJ=${GUIDIR}/gui${OE} ${GUIDIR}/menu${OE} GUIOBJ=${GUIDIR}/gui${OE} ${GUIDIR}/menu${OE}
@@ -164,11 +164,11 @@ VIDEOBJ=${VIDEODIR}/makev16b${OE} ${VIDEODIR}/makev16t${OE} ${VIDEODIR}/makevid$
${VIDEODIR}/newgfx16${OE} ${VIDEODIR}/newgfx2${OE} ${VIDEODIR}/newgfx${OE}\ ${VIDEODIR}/newgfx16${OE} ${VIDEODIR}/newgfx2${OE} ${VIDEODIR}/newgfx${OE}\
${VIDEODIR}/m716text${OE} ${VIDEODIR}/procvid${OE} ${VIDEODIR}/procvidc${OE} ${VIDEODIR}/m716text${OE} ${VIDEODIR}/procvid${OE} ${VIDEODIR}/procvidc${OE}
#only used on Win32
WINVIDOBJ=${VIDEODIR}/sw_draw${OE} ${VIDEODIR}/hq2x16${OE} ${VIDEODIR}/hq2x32${OE}\ WINVIDOBJ=${VIDEODIR}/sw_draw${OE} ${VIDEODIR}/hq2x16${OE} ${VIDEODIR}/hq2x32${OE}\
${VIDEODIR}/2xsaiw${OE} ${VIDEODIR}/hq3x16${OE} ${VIDEODIR}/hq3x32${OE}\ ${VIDEODIR}/2xsaiw${OE} ${VIDEODIR}/hq3x16${OE} ${VIDEODIR}/hq3x32${OE}\
${VIDEODIR}/hq4x16${OE} ${VIDEODIR}/hq4x32${OE} ${VIDEODIR}/hq4x16${OE} ${VIDEODIR}/hq4x32${OE}
#only used on Win32
WINOBJ=${WINDIR}/copyvwin${OE} ${DRESOBJ}\ WINOBJ=${WINDIR}/copyvwin${OE} ${DRESOBJ}\
${WINDIR}/winintrf${OE} ${WINDIR}/winlink${OE} ${WINDIR}/zloaderw${OE}\ ${WINDIR}/winintrf${OE} ${WINDIR}/winlink${OE} ${WINDIR}/zloaderw${OE}\
${WINDIR}/zipxw${OE} ${WINDIR}/zfilew${OE} ${WINDIR}/zipxw${OE} ${WINDIR}/zfilew${OE}
@@ -267,6 +267,7 @@ ${CPUDIR}/tablec${OE}: $< ${CPUDIR}/65816dc.inc ${CPUDIR}/address.inc ${CPUDIR}/
${CPUDIR}/stable${OE}: $< ${CPUDIR}/s65816d.inc ${CPUDIR}/saddress.inc ${CPUDIR}/saddrni.inc\ ${CPUDIR}/stable${OE}: $< ${CPUDIR}/s65816d.inc ${CPUDIR}/saddress.inc ${CPUDIR}/saddrni.inc\
${CPUDIR}/se65816.inc macros.mac ${CPUDIR}/se65816.inc macros.mac
${CPUDIR}/memory${OE}: $< macros.mac ${CPUDIR}/memory${OE}: $< macros.mac
${CPUDIR}/memtable${OE}: $<
${CPUDIR}/dma${OE}: $< macros.mac ${CPUDIR}/dma${OE}: $< macros.mac
${CPUDIR}/irq${OE}: $< macros.mac ${CPUDIR}/irq${OE}: $< macros.mac
${CPUDIR}/dspproc${OE}: $< macros.mac ${CPUDIR}/dspproc${OE}: $< macros.mac
@@ -318,7 +319,7 @@ ${GUIDIR}/gui${OE}: $< ${GUIDIR}/guitools.inc\
${GUIDIR}/guimisc.inc ${GUIDIR}/guimouse.inc ${GUIDIR}/guiwindp.inc\ ${GUIDIR}/guimisc.inc ${GUIDIR}/guimouse.inc ${GUIDIR}/guiwindp.inc\
${GUIDIR}/guinetpl.inc ${GUIDIR}/guikeys.inc ${GUIDIR}/guicheat.inc\ ${GUIDIR}/guinetpl.inc ${GUIDIR}/guikeys.inc ${GUIDIR}/guicheat.inc\
${GUIDIR}/guicombo.inc ${GUIDIR}/guiload.inc macros.mac ${GUIDIR}/guicombo.inc ${GUIDIR}/guiload.inc macros.mac
${GUIDIR}/menu${OE}bj: ${GUIDIR}/menu.asm macros.mac ${GUIDIR}/menu${OE}: $< macros.mac
${EFFECTSDIR}/water${OE}: $< ${EFFECTSDIR}/fixsin.h ${EFFECTSDIR}/water${OE}: $< ${EFFECTSDIR}/fixsin.h
${EFFECTSDIR}/smoke${OE}: $< ${EFFECTSDIR}/smoke${OE}: $<

View File

@@ -100,7 +100,7 @@ Key input - Repeated for all input / internal chapters
1 bit - Chapter instead of input here 1 bit - Chapter instead of input here
1 bit - RLE instead of input 1 bit - RLE instead of input
1 bit - Command here 1 bit - Command here
-If Command- -If Command-
Remaining 7 bits of flag determine command Remaining 7 bits of flag determine command
@@ -226,11 +226,11 @@ static void zmv_header_write(struct zmv_header *zmv_head, FILE *fp)
flag &= ~BIT(7); flag &= ~BIT(7);
flag |= BIT(6); flag |= BIT(6);
break; break;
case zmv_sm_clear_all: case zmv_sm_clear_all:
flag |= BIT(7); flag |= BIT(7);
flag |= BIT(6); flag |= BIT(6);
break; break;
} }
switch (zmv_head->zmv_flag.video_mode) switch (zmv_head->zmv_flag.video_mode)
@@ -284,12 +284,12 @@ static bool zmv_header_read(struct zmv_header *zmv_head, FILE *fp)
break; break;
case BIT(7): case BIT(7):
zmv_head->zmv_flag.start_method = zmv_sm_power; zmv_head->zmv_flag.start_method = zmv_sm_power;
break; break;
case BIT(6): case BIT(6):
zmv_head->zmv_flag.start_method = zmv_sm_reset; zmv_head->zmv_flag.start_method = zmv_sm_reset;
break; break;
case BIT(7)|BIT(6): case BIT(7)|BIT(6):
zmv_head->zmv_flag.start_method = zmv_sm_clear_all; zmv_head->zmv_flag.start_method = zmv_sm_clear_all;
@@ -542,7 +542,7 @@ static void flush_input_buffer()
fwrite(zmv_vars.write_buffer, zmv_vars.write_buffer_loc, 1, zmv_vars.fp); fwrite(zmv_vars.write_buffer, zmv_vars.write_buffer_loc, 1, zmv_vars.fp);
zmv_vars.write_buffer_loc = 0; zmv_vars.write_buffer_loc = 0;
} }
if (zmv_vars.rle_count) if (zmv_vars.rle_count)
{ {
if (zmv_vars.rle_count > 5) if (zmv_vars.rle_count > 5)
@@ -558,7 +558,7 @@ static void flush_input_buffer()
} }
zmv_vars.rle_count = 0; zmv_vars.rle_count = 0;
} }
zmv_vars.header.author_len = 0; //If we're writing, then author is erased if there zmv_vars.header.author_len = 0; //If we're writing, then author is erased if there
} }
@@ -650,7 +650,7 @@ static void zmv_record(bool slow, unsigned char combos_used)
if (flag) if (flag)
{ {
unsigned char buffer_used = (nibble/2) + (nibble&1); unsigned char buffer_used = (nibble/2) + (nibble&1);
if (zmv_vars.rle_count) if (zmv_vars.rle_count)
{ {
if (zmv_vars.rle_count > 5) if (zmv_vars.rle_count > 5)
@@ -664,13 +664,13 @@ static void zmv_record(bool slow, unsigned char combos_used)
memset(zmv_vars.write_buffer+zmv_vars.write_buffer_loc, 0, zmv_vars.rle_count); memset(zmv_vars.write_buffer+zmv_vars.write_buffer_loc, 0, zmv_vars.rle_count);
zmv_vars.write_buffer_loc += zmv_vars.rle_count; zmv_vars.write_buffer_loc += zmv_vars.rle_count;
} }
zmv_vars.rle_count = 0; zmv_vars.rle_count = 0;
} }
zmv_vars.write_buffer[zmv_vars.write_buffer_loc++] = flag; zmv_vars.write_buffer[zmv_vars.write_buffer_loc++] = flag;
memcpy(zmv_vars.write_buffer+zmv_vars.write_buffer_loc, press_buf, buffer_used); memcpy(zmv_vars.write_buffer+zmv_vars.write_buffer_loc, press_buf, buffer_used);
zmv_vars.write_buffer_loc += buffer_used; zmv_vars.write_buffer_loc += buffer_used;
if (zmv_vars.write_buffer_loc > WRITE_BUFFER_SIZE - (6+sizeof(press_buf))) if (zmv_vars.write_buffer_loc > WRITE_BUFFER_SIZE - (6+sizeof(press_buf)))
{ {
flush_input_buffer(); flush_input_buffer();
@@ -863,21 +863,21 @@ static bool zmv_replay()
unsigned char byte; unsigned char byte;
bool mid_byte = false; bool mid_byte = false;
zmv_vars.rle_count = 0; zmv_vars.rle_count = 0;
fread(&flag, 1, 1, zmv_vars.fp); fread(&flag, 1, 1, zmv_vars.fp);
if (flag & BIT(0)) //Command if (flag & BIT(0)) //Command
{ {
return(zmv_replay()); return(zmv_replay());
} }
if (flag & BIT(1)) //RLE if (flag & BIT(1)) //RLE
{ {
zmv_vars.rle_count = fread4(zmv_vars.fp) - zmv_open_vars.frames_replayed; zmv_vars.rle_count = fread4(zmv_vars.fp) - zmv_open_vars.frames_replayed;
return(zmv_replay()); return(zmv_replay());
} }
if (flag & BIT(2)) //Internal Chapter if (flag & BIT(2)) //Internal Chapter
{ {
fseek(zmv_vars.fp, INT_CHAP_SIZE, SEEK_CUR); fseek(zmv_vars.fp, INT_CHAP_SIZE, SEEK_CUR);
@@ -890,9 +890,11 @@ static bool zmv_replay()
REPLAY_PAD(zmv_vars.last_joy_state.D, JoyDOrig, 4); REPLAY_PAD(zmv_vars.last_joy_state.D, JoyDOrig, 4);
REPLAY_PAD(zmv_vars.last_joy_state.E, JoyEOrig, 3); REPLAY_PAD(zmv_vars.last_joy_state.E, JoyEOrig, 3);
} }
zmv_open_vars.frames_replayed++; zmv_open_vars.frames_replayed++;
return(true); return(true);
} }
return(false); return(false);
} }
@@ -937,9 +939,11 @@ static bool zmv_next_chapter()
fseek(zmv_vars.fp, next_external, SEEK_SET); fseek(zmv_vars.fp, next_external, SEEK_SET);
} }
zmv_vars.rle_count = 0; zmv_vars.rle_count = 0;
return(true); return(true);
} }
return(false); return(false);
} }
@@ -1098,14 +1102,14 @@ static void zmv_replay_to_record()
zmv_vars.header.frames = zmv_open_vars.frames_replayed; zmv_vars.header.frames = zmv_open_vars.frames_replayed;
zmv_vars.header.internal_chapters = internal_chapter_delete_after(&zmv_vars.internal_chapters, ftell(zmv_vars.fp)); zmv_vars.header.internal_chapters = internal_chapter_delete_after(&zmv_vars.internal_chapters, ftell(zmv_vars.fp));
zmv_vars.last_internal_chapter_offset = internal_chapter_lesser(&zmv_vars.internal_chapters, ~0); zmv_vars.last_internal_chapter_offset = internal_chapter_lesser(&zmv_vars.internal_chapters, ~0);
if (zmv_vars.rle_count) if (zmv_vars.rle_count)
{ {
fseek(zmv_vars.fp, -4, SEEK_CUR); fseek(zmv_vars.fp, -4, SEEK_CUR);
fwrite4(zmv_vars.header.frames, zmv_vars.fp); fwrite4(zmv_vars.header.frames, zmv_vars.fp);
zmv_vars.rle_count = 0; zmv_vars.rle_count = 0;
} }
ftruncate(fileno(zmv_vars.fp), ftell(zmv_vars.fp)); ftruncate(fileno(zmv_vars.fp), ftell(zmv_vars.fp));
} }
@@ -1172,7 +1176,7 @@ void zmv_rewind_load(size_t state, bool playback)
zmv_vars.header.removed_frames += zmv_vars.header.frames - zmv_rewind_buffer[state].frames; zmv_vars.header.removed_frames += zmv_vars.header.frames - zmv_rewind_buffer[state].frames;
zmv_vars.header.frames = zmv_rewind_buffer[state].frames; zmv_vars.header.frames = zmv_rewind_buffer[state].frames;
zmv_vars.rle_count = zmv_rewind_buffer[state].rle_count; zmv_vars.rle_count = zmv_rewind_buffer[state].rle_count;
fseek(zmv_vars.fp, file_pos, SEEK_SET); fseek(zmv_vars.fp, file_pos, SEEK_SET);
ftruncate(fileno(zmv_vars.fp), file_pos); ftruncate(fileno(zmv_vars.fp), file_pos);
@@ -1486,7 +1490,7 @@ char MovieFrameStr[10];
void SRAMChdir(); void SRAMChdir();
void ChangetoLOADdir(); void ChangetoLOADdir();
/* /*
Code to playback old ZMVs Code to playback old ZMVs
@@ -1509,13 +1513,13 @@ struct
static void OldMovieReplay() static void OldMovieReplay()
{ {
unsigned char byte; unsigned char byte;
if (fread(&byte, 1, 1, old_movie.fp)) if (fread(&byte, 1, 1, old_movie.fp))
{ {
if (byte < 2) // 1 or 0 are correct values if (byte < 2) // 1 or 0 are correct values
{ {
char *sub; char *sub;
if (byte == 0) // 0 means the input has changed if (byte == 0) // 0 means the input has changed
{ {
fread(&old_movie.last_joy_state.A, 1, 4, old_movie.fp); fread(&old_movie.last_joy_state.A, 1, 4, old_movie.fp);
@@ -1530,13 +1534,13 @@ static void OldMovieReplay()
JoyCOrig = old_movie.last_joy_state.C; JoyCOrig = old_movie.last_joy_state.C;
JoyDOrig = old_movie.last_joy_state.D; JoyDOrig = old_movie.last_joy_state.D;
JoyEOrig = old_movie.last_joy_state.E; JoyEOrig = old_movie.last_joy_state.E;
if ((sub = MovieSub_GetData(old_movie.frames_replayed))) if ((sub = MovieSub_GetData(old_movie.frames_replayed)))
{ {
Msgptr = sub; Msgptr = sub;
MessageOn = MovieSub_GetDuration(); MessageOn = MovieSub_GetDuration();
} }
old_movie.frames_replayed++; old_movie.frames_replayed++;
} }
else // anything else is bad - the file isn't a movie. else // anything else is bad - the file isn't a movie.
@@ -1556,7 +1560,7 @@ static void OldMovieReplay()
else else
{ {
Msgptr = "STATE LOADED."; Msgptr = "STATE LOADED.";
} }
MessageOn = MsgCount; MessageOn = MsgCount;
SetMovieMode(MOVIE_OFF); SetMovieMode(MOVIE_OFF);
@@ -1573,11 +1577,11 @@ static void OldMoviePlay(FILE *fp)
extern size_t Totalbyteloaded; extern size_t Totalbyteloaded;
extern unsigned int curexecstate; extern unsigned int curexecstate;
extern unsigned int nmiprevaddrl, nmiprevaddrh, nmirept, nmiprevline, nmistatus; extern unsigned int nmiprevaddrl, nmiprevaddrh, nmirept, nmiprevline, nmistatus;
void loadstate2(); void loadstate2();
memset(&old_movie, 0, sizeof(old_movie)); memset(&old_movie, 0, sizeof(old_movie));
old_movie.fp = fp; old_movie.fp = fp;
loadstate2(); loadstate2();
fseek(fp, Totalbyteloaded, SEEK_SET); fseek(fp, Totalbyteloaded, SEEK_SET);
@@ -1612,7 +1616,7 @@ static void OldMoviePlay(FILE *fp)
DSPMem[0x58] = 0; DSPMem[0x58] = 0;
DSPMem[0x68] = 0; DSPMem[0x68] = 0;
DSPMem[0x78] = 0; DSPMem[0x78] = 0;
Msgptr = "OLD MOVIE REPLAYING."; Msgptr = "OLD MOVIE REPLAYING.";
} }
else else
@@ -1620,10 +1624,9 @@ static void OldMoviePlay(FILE *fp)
Msgptr = (!soundon) ? "MUST PLAY WITH SOUND ON." : "MUST PLAY WITH SOUND OFF."; Msgptr = (!soundon) ? "MUST PLAY WITH SOUND ON." : "MUST PLAY WITH SOUND OFF.";
fclose(fp); fclose(fp);
} }
MessageOn = MsgCount; MessageOn = MsgCount;
} }
void MovieInsertChapter() void MovieInsertChapter()
{ {
switch (MovieProcessing) switch (MovieProcessing)
@@ -1642,9 +1645,9 @@ void MovieInsertChapter()
Msgptr = ""; Msgptr = "";
} }
break; break;
case MOVIE_OLD_PLAY: case MOVIE_OLD_PLAY:
Msgptr = "OLD MOVIES DO NOT SUPPORT CHAPTERS."; Msgptr = "OLD MOVIES DO NOT SUPPORT CHAPTERS.";
break; break;
default: // no movie processing default: // no movie processing
Msgptr = "NO MOVIE PROCESSING."; Msgptr = "NO MOVIE PROCESSING.";
} }
@@ -1663,9 +1666,9 @@ void MovieSeekAhead()
case MOVIE_RECORD: // record will use MZTs case MOVIE_RECORD: // record will use MZTs
Msgptr = "NO SEEKING DURING RECORD."; Msgptr = "NO SEEKING DURING RECORD.";
break; break;
case MOVIE_OLD_PLAY: case MOVIE_OLD_PLAY:
Msgptr = "OLD MOVIES DO NOT SUPPORT CHAPTERS."; Msgptr = "OLD MOVIES DO NOT SUPPORT CHAPTERS.";
break; break;
default: default:
Msgptr = "NO MOVIE PROCESSING."; Msgptr = "NO MOVIE PROCESSING.";
} }
@@ -1685,9 +1688,9 @@ void MovieSeekBehind()
case MOVIE_RECORD: // record will use MZTs case MOVIE_RECORD: // record will use MZTs
Msgptr = "NO SEEKING DURING RECORD."; Msgptr = "NO SEEKING DURING RECORD.";
break; break;
case MOVIE_OLD_PLAY: case MOVIE_OLD_PLAY:
Msgptr = "OLD MOVIES DO NOT SUPPORT CHAPTERS."; Msgptr = "OLD MOVIES DO NOT SUPPORT CHAPTERS.";
break; break;
default: default:
Msgptr = "NO MOVIE PROCESSING."; Msgptr = "NO MOVIE PROCESSING.";
} }
@@ -1771,9 +1774,9 @@ void MovieStop()
fclose(old_movie.fp); fclose(old_movie.fp);
MovieSub_Close(); MovieSub_Close();
MessageOn = 0; MessageOn = 0;
break; break;
} }
zmv_dealloc_rewind_buffer(); zmv_dealloc_rewind_buffer();
SetMovieMode(MOVIE_OFF); SetMovieMode(MOVIE_OFF);
SRAMState = PrevSRAMState; SRAMState = PrevSRAMState;
@@ -1785,11 +1788,11 @@ void MoviePlay()
if (!MovieProcessing) if (!MovieProcessing)
{ {
unsigned char FileExt[4]; unsigned char FileExt[4];
FILE *fp; FILE *fp;
PrevSRAMState = SRAMState; PrevSRAMState = SRAMState;
SRAMState = true; SRAMState = true;
GUIQuit = 2; GUIQuit = 2;
memcpy(FileExt, &fnamest[statefileloc-3], 4); memcpy(FileExt, &fnamest[statefileloc-3], 4);
memcpy(&fnamest[statefileloc-3], ".zmv", 4); memcpy(&fnamest[statefileloc-3], ".zmv", 4);
@@ -1801,7 +1804,7 @@ void MoviePlay()
{ {
char header_buf[3]; char header_buf[3];
fread(header_buf, 3, 1, fp); fread(header_buf, 3, 1, fp);
if (!strncmp("ZMV", header_buf, 3)) //New Enhanced Format if (!strncmp("ZMV", header_buf, 3)) //New Enhanced Format
{ {
fclose(fp); fclose(fp);
@@ -1831,7 +1834,7 @@ void MoviePlay()
Msgptr = "MOVIE COULD NOT BE OPENED."; Msgptr = "MOVIE COULD NOT BE OPENED.";
MessageOn = MsgCount; MessageOn = MsgCount;
} }
memcpy(&fnamest[statefileloc-3], FileExt, 4); memcpy(&fnamest[statefileloc-3], FileExt, 4);
asm_call(ChangetoLOADdir); asm_call(ChangetoLOADdir);
} }
@@ -1866,7 +1869,7 @@ void MovieRecord()
{ {
PrevSRAMState = SRAMState; PrevSRAMState = SRAMState;
SRAMState = true; SRAMState = true;
zmv_create(fnamest+1); zmv_create(fnamest+1);
zmv_alloc_rewind_buffer(RewindStates); zmv_alloc_rewind_buffer(RewindStates);
SetMovieMode(MOVIE_RECORD); SetMovieMode(MOVIE_RECORD);
@@ -1898,6 +1901,6 @@ void GetMovieFrameStr()
break; break;
case MOVIE_OLD_PLAY: case MOVIE_OLD_PLAY:
sprintf(MovieFrameStr, "%u",old_movie.frames_replayed); sprintf(MovieFrameStr, "%u",old_movie.frames_replayed);
break; break;
} }
} }

View File

@@ -42,6 +42,10 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#define stim() #define stim()
#endif #endif
void SA1UpdateDPageC(), unpackfunct(), repackfunct();
void PrepareOffset(), ResetOffset(), initpitch(), UpdateBanksSDD1();
void procexecloop(), outofmemory();
static void copy_snes_data(unsigned char **buffer, void (*copy_func)(unsigned char **, void *, size_t)) static void copy_snes_data(unsigned char **buffer, void (*copy_func)(unsigned char **, void *, size_t))
{ {
//65816 status, etc. //65816 status, etc.
@@ -172,9 +176,13 @@ static void copy_state_data(unsigned char *buffer, void (*copy_func)(unsigned ch
copy_func(&buffer, &tempebp, 4); copy_func(&buffer, &tempebp, 4);
} }
} }
else
{
spcnumread = 0;
spchalted = 0xFFFFFFFF;
}
} }
static void memcpyinc(unsigned char **dest, void *src, size_t len) static void memcpyinc(unsigned char **dest, void *src, size_t len)
{ {
memcpy(*dest, src, len); memcpy(*dest, src, len);
@@ -277,8 +285,8 @@ extern unsigned char RewindFrames, romispal;
extern unsigned char MovieProcessing; extern unsigned char MovieProcessing;
void zmv_rewind_save(size_t, bool); void zmv_rewind_save(size_t, bool);
void zmv_rewind_load(size_t, bool); void zmv_rewind_load(size_t, bool);
#define ActualRewindFrames (RewindFrames * (romispal ? 25 : 30))
#define ActualRewindFrames (RewindFrames * (romispal ? 25 : 30))
void BackupCVFrame() void BackupCVFrame()
{ {
@@ -300,8 +308,6 @@ void RestoreCVFrame()
RewindTimer = ActualRewindFrames; RewindTimer = ActualRewindFrames;
} }
void outofmemory();
void SetupRewindBuffer() void SetupRewindBuffer()
{ {
if (StateBackup){ free(StateBackup); } if (StateBackup){ free(StateBackup); }
@@ -315,6 +321,7 @@ void SetupRewindBuffer()
} }
static size_t state_size; static size_t state_size;
static void state_size_tally(unsigned char **dest, void *src, size_t len) static void state_size_tally(unsigned char **dest, void *src, size_t len)
{ {
state_size += len; state_size += len;
@@ -338,6 +345,7 @@ void InitRewindVars()
//This is used to preserve system load state between loads //This is used to preserve system load state between loads
static unsigned char BackupSystemBuffer[0x800000]; //Half a megabyte, should be enough for a while static unsigned char BackupSystemBuffer[0x800000]; //Half a megabyte, should be enough for a while
void BackupSystemVars() void BackupSystemVars()
{ {
unsigned char *buffer = BackupSystemBuffer; unsigned char *buffer = BackupSystemBuffer;
@@ -355,55 +363,15 @@ void RestoreSystemVars()
copy_extra_data(&buffer, memcpyrinc); copy_extra_data(&buffer, memcpyrinc);
} }
extern unsigned int Bank0datr8[256], Bank0datr16[256], Bank0datw8[256];
extern unsigned int Bank0datw16[256], xd, DPageR8, DPageR16, DPageW8;
extern unsigned int DPageW16;
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, 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];
}
extern unsigned int xdb, xpb, xs, xx, xy;
extern unsigned short oamaddrt, xat, xst, xdt, xxt, xyt;
extern unsigned char xdbt, xpbt;
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);
}
extern unsigned int spcBuffera; extern unsigned int spcBuffera;
extern unsigned int Voice0BufPtr, Voice1BufPtr, Voice2BufPtr, Voice3BufPtr; extern unsigned int Voice0BufPtr, Voice1BufPtr, Voice2BufPtr, Voice3BufPtr;
extern unsigned int Voice4BufPtr, Voice5BufPtr, Voice6BufPtr, Voice7BufPtr; extern unsigned int Voice4BufPtr, Voice5BufPtr, Voice6BufPtr, Voice7BufPtr;
extern unsigned int Curtableaddr, tableA[256], spcPCRam, spcRamDP; extern unsigned int spcPCRam, spcRamDP;
void PrepareSaveState() void PrepareSaveState()
{ {
unsigned int offst = (unsigned int)spcRam; spcPCRam -= (unsigned int)spcRam;
spcRamDP -= (unsigned int)spcRam;
spcPCRam -= offst;
spcRamDP -= offst;
Voice0BufPtr -= spcBuffera; Voice0BufPtr -= spcBuffera;
Voice1BufPtr -= spcBuffera; Voice1BufPtr -= spcBuffera;
@@ -415,151 +383,14 @@ void PrepareSaveState()
Voice7BufPtr -= spcBuffera; Voice7BufPtr -= spcBuffera;
} }
#define byteset(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 = byteset (DSPMem[0x3D], 0);
Voice1Noise = byteset (DSPMem[0x3D], 1);
Voice2Noise = byteset (DSPMem[0x3D], 2);
Voice3Noise = byteset (DSPMem[0x3D], 3);
Voice4Noise = byteset (DSPMem[0x3D], 4);
Voice5Noise = byteset (DSPMem[0x3D], 5);
Voice6Noise = byteset (DSPMem[0x3D], 6);
Voice7Noise = byteset (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 = byteset (bgtilesz, 0);
BG216x16t = byteset (bgtilesz, 1);
BG316x16t = byteset (bgtilesz, 2);
BG416x16t = byteset (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 unsigned int SA1Stat; extern unsigned int SA1Stat;
extern unsigned char IRAM[2049], *SA1Ptr, *SA1RegPCS, *CurBWPtr, *SA1BWPtr; extern unsigned char IRAM[2049], *SA1Ptr, *SA1RegPCS, *CurBWPtr, *SA1BWPtr;
extern unsigned char *SNSBWPtr; extern unsigned char *SNSBWPtr;
void SaveSA1() void SaveSA1()
{ {
unsigned int offst=(unsigned int)SA1RegPCS;
SA1Stat &= 0xFFFFFF00; SA1Stat &= 0xFFFFFF00;
SA1Ptr -= offst; SA1Ptr -= (unsigned int)SA1RegPCS;
if (SA1RegPCS == IRAM) if (SA1RegPCS == IRAM)
{ {
@@ -571,21 +402,18 @@ void SaveSA1()
SA1Stat = (SA1Stat & 0xFFFFFF00) + 2; SA1Stat = (SA1Stat & 0xFFFFFF00) + 2;
} }
offst = (unsigned int)romdata; SA1RegPCS -= (unsigned int)romdata;
SA1RegPCS -= offst; CurBWPtr -= (unsigned int)romdata;
CurBWPtr -= offst; SA1BWPtr -= (unsigned int)romdata;
SA1BWPtr -= offst; SNSBWPtr -= (unsigned int)romdata;
SNSBWPtr -= offst;
} }
void RestoreSA1() void RestoreSA1()
{ {
unsigned int offst=(unsigned int)romdata; SA1RegPCS += (unsigned int)romdata;
CurBWPtr += (unsigned int)romdata;
SA1RegPCS += offst; SA1BWPtr += (unsigned int)romdata;
CurBWPtr += offst; SNSBWPtr += (unsigned int)romdata;
SA1BWPtr += offst;
SNSBWPtr += offst;
if ((SA1Stat & 0xFF) == 1) if ((SA1Stat & 0xFF) == 1)
{ {
@@ -597,8 +425,7 @@ void RestoreSA1()
SA1RegPCS = IRAM-0x3000; SA1RegPCS = IRAM-0x3000;
} }
offst = (unsigned int)SA1RegPCS; SA1Ptr += (unsigned int)SA1RegPCS;
SA1Ptr += offst;
SA1RAMArea = romdata + 4096*1024; SA1RAMArea = romdata + 4096*1024;
} }
@@ -611,10 +438,8 @@ void RestoreSA1()
void ResetState() void ResetState()
{ {
unsigned int offst = (unsigned int)spcRam; spcPCRam += (unsigned int)spcRam;
spcRamDP += (unsigned int)spcRam;
spcPCRam += offst;
spcRamDP += offst;
ResState(Voice0BufPtr); ResState(Voice0BufPtr);
ResState(Voice1BufPtr); ResState(Voice1BufPtr);
@@ -659,16 +484,6 @@ void calculate_state_sizes()
old_zst_size = state_size + sizeof(zst_header_old)-1; old_zst_size = state_size + sizeof(zst_header_old)-1;
} }
void PrepareOffset()
{
Curtableaddr -= (unsigned int)tableA;
}
void ResetOffset()
{
Curtableaddr += (unsigned int)tableA;
}
void zst_save(FILE *fp, bool Thumbnail) void zst_save(FILE *fp, bool Thumbnail)
{ {
fwrite(zst_header_cur, 1, sizeof(zst_header_cur)-1, fp); //-1 for null fwrite(zst_header_cur, 1, sizeof(zst_header_cur)-1, fp); //-1 for null
@@ -784,119 +599,12 @@ void statesaver()
stim(); stim();
} }
extern unsigned int snesmmap[256], snesmap2[256];
/*extern unsigned int NumofBanks;
extern unsigned char SA1BankVal[4];
void BankSwitchC (unsigned char bank, unsigned int offset1, unsigned int offset2, unsigned int pointer)
{
unsigned int curbankval=SA1BankVal[bank], membankval, i;
if ((NumofBanks & 0xFF) == 64) { curbankval &= 1 ; }
curbankval &= 7;
curbankval <<= 20;
if (SA1BankVal[bank] & 0x80)
{
membankval = (pointer + (unsigned int)romdata - 0x8000);
}
else
{
membankval = (curbankval + (unsigned int)romdata - 0x8000);
}
for (i=0 ; i<32 ; i++)
{
snesmmap[offset1+i] = membankval;
membankval += 0x8000;
}
membankval = curbankval + (unsigned int)romdata;
for (i=0 ; i<16 ; i++)
{
snesmap2[offset2+i] = membankval;
snesmmap[offset2+i] = membankval;
membankval += 0x10000;
}
}
extern unsigned int SA1BankSw;
void UpdateBanks()
{
if ((SA1BankSw & 0xFF) == 1)
{
BankSwitchC (0, 0x000, 0x0C0, 0x000000) ;
BankSwitchC (1, 0x020, 0x0D0, 0x100000) ;
BankSwitchC (2, 0x080, 0x0E0, 0x200000) ;
BankSwitchC (3, 0x0A0, 0x0F0, 0x300000) ;
}
}*/
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 unsigned int Voice0Freq, Voice1Freq, Voice2Freq, Voice3Freq;
extern unsigned int Voice4Freq, Voice5Freq, Voice6Freq, Voice7Freq;
extern unsigned short Voice0Pitch, Voice1Pitch, Voice2Pitch, Voice3Pitch;
extern unsigned short Voice4Pitch, Voice5Pitch, Voice6Pitch, Voice7Pitch;
void initpitch()
{
Voice0Pitch = DSPMem[2+0*0x10];
Voice0Freq = ((((Voice0Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice1Pitch = DSPMem[2+1*0x10];
Voice1Freq = ((((Voice1Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice2Pitch = DSPMem[2+2*0x10];
Voice2Freq = ((((Voice2Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice3Pitch = DSPMem[2+3*0x10];
Voice3Freq = ((((Voice3Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice4Pitch = DSPMem[2+4*0x10];
Voice4Freq = ((((Voice4Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice5Pitch = DSPMem[2+5*0x10];
Voice5Freq = ((((Voice5Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice6Pitch = DSPMem[2+6*0x10];
Voice6Freq = ((((Voice6Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice7Pitch = DSPMem[2+7*0x10];
Voice7Freq = ((((Voice7Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
}
extern unsigned int KeyLoadState, Totalbyteloaded, SfxMemTable[256], SfxCPB; extern unsigned int KeyLoadState, Totalbyteloaded, SfxMemTable[256], SfxCPB;
extern unsigned int SfxPBR, SfxROMBR, SfxRAMBR; extern unsigned int SfxPBR, SfxROMBR, SfxRAMBR;
extern unsigned char pressed[256+128+64], multchange, txtloadmsg[15]; extern unsigned char pressed[256+128+64], multchange, txtloadmsg[15];
extern unsigned char txtconvmsg[16], txtnfndmsg[23], ioportval, SDD1Enable; extern unsigned char txtconvmsg[16], txtnfndmsg[23], ioportval, SDD1Enable;
extern unsigned char nexthdma; extern unsigned char nexthdma;
void procexecloop();
static void read_save_state_data(unsigned char **dest, void *data, size_t len) static void read_save_state_data(unsigned char **dest, void *data, size_t len)
{ {
load_save_size += fread(data, 1, len, fhandle); load_save_size += fread(data, 1, len, fhandle);
@@ -912,7 +620,6 @@ bool zst_load(FILE *fp)
{ {
zst_version = 143; //v1.43+ zst_version = 143; //v1.43+
} }
// the -2 means we only check the text - trust me, that's ok
if (!memcmp(zst_header_check, zst_header_old, sizeof(zst_header_check)-2)) if (!memcmp(zst_header_check, zst_header_old, sizeof(zst_header_check)-2))
{ {
zst_version = 60; //v0.60 - v1.42 zst_version = 60; //v0.60 - v1.42
@@ -937,11 +644,6 @@ bool zst_load(FILE *fp)
if (SA1Enable) if (SA1Enable)
{ {
RestoreSA1(); //Convert back SA-1 stuff RestoreSA1(); //Convert back SA-1 stuff
/*
All UpdateBanks() seems to do is break Oshaberi Parodius...
The C port is still present, just commented out
*/
//UpdateBanks();
SA1UpdateDPageC(); SA1UpdateDPageC();
} }