Made ZMV store the start method, powercycle ZMVs are now possible, using a power-on state
This commit is contained in:
@@ -718,6 +718,9 @@ NEWSYM start65816
|
||||
; rep stosd
|
||||
cmp byte[romloadskip],1
|
||||
je near StartGUI
|
||||
cmp byte[MovieProcessing],0
|
||||
je continueprog
|
||||
ret
|
||||
|
||||
NEWSYM continueprog
|
||||
|
||||
|
||||
@@ -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__
|
||||
|
||||
@@ -398,5 +398,3 @@ NEWSYM GUIDoReset
|
||||
mov byte[Voice7Status],0
|
||||
mov byte[GUIQuit],2
|
||||
ret
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user