Made ZMV store the start method, powercycle ZMVs are now possible, using a power-on state

This commit is contained in:
grinvader
2005-03-23 17:56:56 +00:00
parent 8b0b13366e
commit 80e723c9f9
6 changed files with 271 additions and 199 deletions

View File

@@ -718,6 +718,9 @@ NEWSYM start65816
; rep stosd
cmp byte[romloadskip],1
je near StartGUI
cmp byte[MovieProcessing],0
je continueprog
ret
NEWSYM continueprog

View File

@@ -166,7 +166,7 @@ EXTSYM GUIHQ3X
EXTSYM GUIHQ4X
EXTSYM firstsaveinc
EXTSYM nssdip1,nssdip2,nssdip3,nssdip4,nssdip5,nssdip6
EXTSYM SkipMovie,MovieStop,MoviePlay,MovieRecord,MovieInsertChapter
EXTSYM SkipMovie,MovieStop,MoviePlay,MovieRecord,MovieInsertChapter,init
EXTSYM MovieSeekAhead,MovieSeekBehind
%ifdef __LINUX__

View File

@@ -398,5 +398,3 @@ NEWSYM GUIDoReset
mov byte[Voice7Status],0
mov byte[GUIQuit],2
ret

View File

@@ -57,7 +57,7 @@ EXTSYM NumComboLocl,ComboBlHeader,ComboHeader,CombinDataLocl
EXTSYM CombinDataGlob,NumCombo,GUIComboGameSpec
EXTSYM mousexloc,mouseyloc
EXTSYM extlatch
EXTSYM BackState
EXTSYM BackState,clearmem2,NextLineCache,sramsavedis
EXTSYM FIRTAPVal0,FIRTAPVal1,FIRTAPVal2,FIRTAPVal3,FIRTAPVal4
EXTSYM FIRTAPVal5,FIRTAPVal6,FIRTAPVal7,INTEnab,JoyAPos,JoyBPos
EXTSYM NMIEnab,SPCROM,VIRQLoc,coladdb,coladdg,coladdr,doirqnext
@@ -67,7 +67,7 @@ EXTSYM opexec268cphb,opexec358,opexec358b,opexec358cph,spcextraram
EXTSYM opexec358cphb,prevoamptr,reg1read,reg2read,reg3read
EXTSYM reg4read,resolutn,romdata,scrndis,spcP,spcRam
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 RTCinit,InitOBC
EXTSYM memaccessspc7110r8,memaccessspc7110r16,memaccessspc7110w8

View File

@@ -34,6 +34,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#endif
#include "zip/zunzip.h"
#include "jma/zsnesjma.h"
#include "asm_call.h"
#ifndef __GNUC__
#define strcasecmp stricmp
@@ -1279,31 +1280,6 @@ extern unsigned char *vcache2b;
extern unsigned char *vcache4b;
extern unsigned char *vcache8b;
void clearmem2();
void clearmem()
{
memset(vidbuffer, 0, 131072);
memset(wramdataa, 0, 65536);
memset(ram7fa, 0, 65536);
memset(vram, 0, 65536);
memset(srama, 0, 65536);
memset(debugbufa, 0, 80000);
memset(regptra, 0, 49152);
memset(regptwa, 0, 49152);
memset(vcache2b, 0, 262144);
memset(vcache4b, 0, 131072);
memset(vcache8b, 0, 65536);
memset(vidmemch2, 0, 4096);
memset(vidmemch4, 0, 4096);
memset(vidmemch8, 0, 4096);
memset(pal16b, 0, 1024);
memset(pal16bcl, 0, 1024);
memset(pal16bclha, 0, 1024);
memset(pal16bxcl, 0xFF, 256);
memset(romdata, 0xFF, maxromspace+32768);
clearmem2();
}
void clearSPCRAM()
{
/*
@@ -1333,6 +1309,30 @@ void clearmem2()
clearSPCRAM();
}
void clearmem()
{
memset(vidbuffer, 0, 131072);
memset(wramdataa, 0, 65536);
memset(ram7fa, 0, 65536);
memset(vram, 0, 65536);
memset(srama, 0, 65536);
memset(debugbufa, 0, 80000);
memset(regptra, 0, 49152);
memset(regptwa, 0, 49152);
memset(vcache2b, 0, 262144);
memset(vcache4b, 0, 131072);
memset(vcache8b, 0, 65536);
memset(vidmemch2, 0, 4096);
memset(vidmemch4, 0, 4096);
memset(vidmemch8, 0, 4096);
memset(pal16b, 0, 1024);
memset(pal16bcl, 0, 1024);
memset(pal16bclha, 0, 1024);
memset(pal16bxcl, 0xFF, 256);
memset(romdata, 0xFF, maxromspace+32768);
clearmem2();
}
extern unsigned char BRRBuffer[32];
extern unsigned char echoon0;
extern unsigned int PHdspsave;
@@ -1803,3 +1803,35 @@ unsigned int showinfogui()
Msgptr = CSStatus;
return (MsgCount);
}
extern unsigned int nmiprevaddrl, nmiprevaddrh, nmirept, nmiprevline, nmistatus;
extern unsigned int spcnumread, spchalted;
extern unsigned char NextLineCache, sramsavedis, sndrot, regsbackup[3019];
extern unsigned char yesoutofmemory;
void powercycle()
{
memset(sram, 0xFF, 8192*4);
clearSPCRAM();
nmiprevaddrl = 0;
nmiprevaddrh = 0;
nmirept = 0;
nmiprevline = 224;
nmistatus = 0;
spcnumread = 0;
spchalted = ~0;
NextLineCache = 0;
curexecstate = 1;
asm_call(SetupROM);
asm_call(initsnes);
sramsavedis = 0;
memcpy(&sndrot, regsbackup, 3019);
if (yesoutofmemory == 1) { asm_call(outofmemfix); }
asm_call(GUIDoReset);
}

View File

@@ -537,6 +537,10 @@ Create and record ZMV
*/
extern unsigned char MovieStartMethod;
void powercycle();
bool firstloop;
static void zmv_create(char *filename)
{
memset(&zmv_vars, 0, sizeof(zmv_vars));
@@ -547,12 +551,26 @@ static void zmv_create(char *filename)
zmv_vars.header.zsnes_version = versionNumber & 0xFFFF;
zmv_vars.header.rom_crc32 = CRC32;
zmv_vars.header.zst_size = cur_zst_size;
zmv_vars.header.zmv_flag.start_method = zmv_sm_zst;
zmv_vars.header.zmv_flag.start_method = (enum zmv_start_methods)MovieStartMethod;
zmv_vars.header.zmv_flag.video_mode = romispal ? zmv_vm_pal : zmv_vm_ntsc;
zmv_header_write(&zmv_vars.header, zmv_vars.fp);
switch (MovieStartMethod)
{
case 0: // from zst
break;
case 1: // from power-on
powercycle();
break;
case 2: // from reset
// resetcycle(); // not done yet
break;
}
zst_save(zmv_vars.fp, false);
zmv_vars.filename = (char *)malloc(filename_len+1); //+1 for null
strcpy(zmv_vars.filename, filename);
firstloop = true;
}
else
{
@@ -691,17 +709,33 @@ static bool zmv_open(char *filename)
unsigned short i;
size_t filename_len = strlen(filename);
if (zmv_vars.header.zsnes_version != (versionNumber & 0xFFFF))
{
}
if (zmv_vars.header.rom_crc32 != CRC32)
{
}
MovieStartMethod = (unsigned char)zmv_vars.header.zmv_flag.start_method;
switch (MovieStartMethod)
{
case 0: // from zst
break;
case 1: // from power-on
powercycle();
break;
case 2: // from reset
// resetcycle(); // not done yet
break;
}
zst_load(zmv_vars.fp);
if (zmv_vars.header.zsnes_version != (versionNumber & 0xFFFF))
{
}
firstloop = true;
zmv_open_vars.input_start_pos = ftell(zmv_vars.fp);
fseek(zmv_vars.fp, -(EXT_CHAP_COUNT_END_DIST), SEEK_END);
@@ -1470,6 +1504,8 @@ void SkipMovie()
void MovieStop()
{
if (firstloop)
{
switch (MovieProcessing)
{
case 1:
@@ -1487,8 +1523,11 @@ void MovieStop()
}
break;
}
zmv_dealloc_rewind_buffer();
MovieProcessing = 0;
}
else { firstloop = false; }
}
extern unsigned int MovieCounter, statefileloc, Totalbyteloaded, curexecstate;
@@ -1584,6 +1623,7 @@ void MovieRecord()
}
char MovieFrameStr[10];
void GetMovieFrameStr()
{
*MovieFrameStr = 0;
@@ -1597,4 +1637,3 @@ void GetMovieFrameStr()
break;
}
}