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 ; 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

View File

@@ -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__

View File

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

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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);
@@ -1469,6 +1503,8 @@ void SkipMovie()
} }
void MovieStop() void MovieStop()
{
if (firstloop)
{ {
switch (MovieProcessing) switch (MovieProcessing)
{ {
@@ -1487,9 +1523,12 @@ void MovieStop()
} }
break; break;
} }
zmv_dealloc_rewind_buffer(); zmv_dealloc_rewind_buffer();
MovieProcessing = 0; MovieProcessing = 0;
} }
else { firstloop = false; }
}
extern unsigned int MovieCounter, statefileloc, Totalbyteloaded, curexecstate; extern unsigned int MovieCounter, statefileloc, Totalbyteloaded, curexecstate;
extern unsigned int nmiprevaddrl, nmiprevaddrh, nmirept, nmiprevline, nmistatus; extern unsigned int nmiprevaddrl, nmiprevaddrh, nmirept, nmiprevline, nmistatus;
@@ -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;
} }
} }