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
|
; rep stosd
|
||||||
cmp byte[romloadskip],1
|
cmp byte[romloadskip],1
|
||||||
je near StartGUI
|
je near StartGUI
|
||||||
|
cmp byte[MovieProcessing],0
|
||||||
|
je continueprog
|
||||||
|
ret
|
||||||
|
|
||||||
NEWSYM continueprog
|
NEWSYM continueprog
|
||||||
|
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ EXTSYM GUIHQ3X
|
|||||||
EXTSYM GUIHQ4X
|
EXTSYM GUIHQ4X
|
||||||
EXTSYM firstsaveinc
|
EXTSYM firstsaveinc
|
||||||
EXTSYM nssdip1,nssdip2,nssdip3,nssdip4,nssdip5,nssdip6
|
EXTSYM nssdip1,nssdip2,nssdip3,nssdip4,nssdip5,nssdip6
|
||||||
EXTSYM SkipMovie,MovieStop,MoviePlay,MovieRecord,MovieInsertChapter
|
EXTSYM SkipMovie,MovieStop,MoviePlay,MovieRecord,MovieInsertChapter,init
|
||||||
EXTSYM MovieSeekAhead,MovieSeekBehind
|
EXTSYM MovieSeekAhead,MovieSeekBehind
|
||||||
|
|
||||||
%ifdef __LINUX__
|
%ifdef __LINUX__
|
||||||
|
|||||||
@@ -398,5 +398,3 @@ NEWSYM GUIDoReset
|
|||||||
mov byte[Voice7Status],0
|
mov byte[Voice7Status],0
|
||||||
mov byte[GUIQuit],2
|
mov byte[GUIQuit],2
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ EXTSYM NumComboLocl,ComboBlHeader,ComboHeader,CombinDataLocl
|
|||||||
EXTSYM CombinDataGlob,NumCombo,GUIComboGameSpec
|
EXTSYM CombinDataGlob,NumCombo,GUIComboGameSpec
|
||||||
EXTSYM mousexloc,mouseyloc
|
EXTSYM mousexloc,mouseyloc
|
||||||
EXTSYM extlatch
|
EXTSYM extlatch
|
||||||
EXTSYM BackState
|
EXTSYM BackState,clearmem2,NextLineCache,sramsavedis
|
||||||
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
|
||||||
@@ -67,7 +67,7 @@ EXTSYM opexec268cphb,opexec358,opexec358b,opexec358cph,spcextraram
|
|||||||
EXTSYM opexec358cphb,prevoamptr,reg1read,reg2read,reg3read
|
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,SetAddressingModes,SDD1BankA,SPC7110init
|
||||||
EXTSYM RTCinit,InitOBC
|
EXTSYM RTCinit,InitOBC
|
||||||
EXTSYM memaccessspc7110r8,memaccessspc7110r16,memaccessspc7110w8
|
EXTSYM memaccessspc7110r8,memaccessspc7110r16,memaccessspc7110w8
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|||||||
#endif
|
#endif
|
||||||
#include "zip/zunzip.h"
|
#include "zip/zunzip.h"
|
||||||
#include "jma/zsnesjma.h"
|
#include "jma/zsnesjma.h"
|
||||||
|
#include "asm_call.h"
|
||||||
|
|
||||||
#ifndef __GNUC__
|
#ifndef __GNUC__
|
||||||
#define strcasecmp stricmp
|
#define strcasecmp stricmp
|
||||||
@@ -1279,31 +1280,6 @@ extern unsigned char *vcache2b;
|
|||||||
extern unsigned char *vcache4b;
|
extern unsigned char *vcache4b;
|
||||||
extern unsigned char *vcache8b;
|
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()
|
void clearSPCRAM()
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@@ -1333,6 +1309,30 @@ void clearmem2()
|
|||||||
clearSPCRAM();
|
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 BRRBuffer[32];
|
||||||
extern unsigned char echoon0;
|
extern unsigned char echoon0;
|
||||||
extern unsigned int PHdspsave;
|
extern unsigned int PHdspsave;
|
||||||
@@ -1803,3 +1803,35 @@ unsigned int showinfogui()
|
|||||||
Msgptr = CSStatus;
|
Msgptr = CSStatus;
|
||||||
return (MsgCount);
|
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)
|
static void zmv_create(char *filename)
|
||||||
{
|
{
|
||||||
memset(&zmv_vars, 0, sizeof(zmv_vars));
|
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.zsnes_version = versionNumber & 0xFFFF;
|
||||||
zmv_vars.header.rom_crc32 = CRC32;
|
zmv_vars.header.rom_crc32 = CRC32;
|
||||||
zmv_vars.header.zst_size = cur_zst_size;
|
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_vars.header.zmv_flag.video_mode = romispal ? zmv_vm_pal : zmv_vm_ntsc;
|
||||||
zmv_header_write(&zmv_vars.header, zmv_vars.fp);
|
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);
|
zst_save(zmv_vars.fp, false);
|
||||||
zmv_vars.filename = (char *)malloc(filename_len+1); //+1 for null
|
zmv_vars.filename = (char *)malloc(filename_len+1); //+1 for null
|
||||||
strcpy(zmv_vars.filename, filename);
|
strcpy(zmv_vars.filename, filename);
|
||||||
|
firstloop = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -691,17 +709,33 @@ static bool zmv_open(char *filename)
|
|||||||
unsigned short i;
|
unsigned short i;
|
||||||
size_t filename_len = strlen(filename);
|
size_t filename_len = strlen(filename);
|
||||||
|
|
||||||
if (zmv_vars.header.zsnes_version != (versionNumber & 0xFFFF))
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (zmv_vars.header.rom_crc32 != CRC32)
|
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);
|
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);
|
zmv_open_vars.input_start_pos = ftell(zmv_vars.fp);
|
||||||
|
|
||||||
fseek(zmv_vars.fp, -(EXT_CHAP_COUNT_END_DIST), SEEK_END);
|
fseek(zmv_vars.fp, -(EXT_CHAP_COUNT_END_DIST), SEEK_END);
|
||||||
@@ -1470,25 +1504,30 @@ void SkipMovie()
|
|||||||
|
|
||||||
void MovieStop()
|
void MovieStop()
|
||||||
{
|
{
|
||||||
switch (MovieProcessing)
|
if (firstloop)
|
||||||
{
|
{
|
||||||
case 1:
|
switch (MovieProcessing)
|
||||||
zmv_replay_finished();
|
{
|
||||||
MovieSub_Close();
|
case 1:
|
||||||
SRAMState = PrevSRAMState;
|
zmv_replay_finished();
|
||||||
break;
|
MovieSub_Close();
|
||||||
|
SRAMState = PrevSRAMState;
|
||||||
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
zmv_record_finish();
|
zmv_record_finish();
|
||||||
if (!zmv_frames_recorded())
|
if (!zmv_frames_recorded())
|
||||||
{
|
{
|
||||||
Msgptr = "STATE SAVED.";
|
Msgptr = "STATE SAVED.";
|
||||||
MessageOn = MsgCount;
|
MessageOn = MsgCount;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
zmv_dealloc_rewind_buffer();
|
||||||
|
MovieProcessing = 0;
|
||||||
}
|
}
|
||||||
zmv_dealloc_rewind_buffer();
|
else { firstloop = false; }
|
||||||
MovieProcessing = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern unsigned int MovieCounter, statefileloc, Totalbyteloaded, curexecstate;
|
extern unsigned int MovieCounter, statefileloc, Totalbyteloaded, curexecstate;
|
||||||
@@ -1584,6 +1623,7 @@ void MovieRecord()
|
|||||||
}
|
}
|
||||||
|
|
||||||
char MovieFrameStr[10];
|
char MovieFrameStr[10];
|
||||||
|
|
||||||
void GetMovieFrameStr()
|
void GetMovieFrameStr()
|
||||||
{
|
{
|
||||||
*MovieFrameStr = 0;
|
*MovieFrameStr = 0;
|
||||||
@@ -1597,4 +1637,3 @@ void GetMovieFrameStr()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user