Movies can now record reset. Todo: Make reset during movie replay not crash, anyone want to help with this?

This commit is contained in:
n-a-c-h
2005-04-02 22:54:28 +00:00
parent b2586995a0
commit 38aa8aafcd
2 changed files with 30 additions and 6 deletions

View File

@@ -108,7 +108,7 @@ EXTSYM SfxSFR,nosprincr
EXTSYM cpucycle,debstop,switchtovirqdeb,debstop3,switchtonmideb EXTSYM cpucycle,debstop,switchtovirqdeb,debstop3,switchtonmideb
EXTSYM NetPlayNoMore,MovieSeekBehind EXTSYM NetPlayNoMore,MovieSeekBehind
EXTSYM statefileloc,CHIPBATT,SaveSramData,BackupCVFrame,RestoreCVFrame,loadstate EXTSYM statefileloc,CHIPBATT,SaveSramData,BackupCVFrame,RestoreCVFrame,loadstate
EXTSYM KeyInsrtChap,KeyNextChap,KeyPrevChap,MovieInsertChapter,MovieSeekAhead EXTSYM KeyInsrtChap,KeyNextChap,KeyPrevChap,MovieInsertChapter,MovieSeekAhead,ResetDuringMovie,MovieExitLoop
%ifdef __MSDOS__ %ifdef __MSDOS__
EXTSYM dssel EXTSYM dssel
@@ -977,7 +977,13 @@ reexecuteb2:
.activatereset .activatereset
pushad pushad
mov byte[GUIReset],1 mov byte[GUIReset],1
cmp byte[MovieProcessing],2 ;Recording
jne .nomovierecording
call ResetDuringMovie
jmp .movieendif
.nomovierecording
call GUIDoReset call GUIDoReset
.movieendif
popad popad
mov byte[ReturnFromSPCStall],0 mov byte[ReturnFromSPCStall],0
jmp continueprog jmp continueprog
@@ -2724,6 +2730,8 @@ NEWSYM cpuover
pushad pushad
call ProcessMovies call ProcessMovies
popad popad
cmp byte[MovieExitLoop],1
je execloop.startagain ;Where do we jump to?
.noprocmovie .noprocmovie
test byte[INTEnab],1 test byte[INTEnab],1

View File

@@ -841,17 +841,17 @@ static bool zmv_open(char *filename)
return(false); return(false);
} }
static void zmv_replay_command(enum zmv_commands command) //If this returns true, the caller should not proccess another input
static bool zmv_replay_command(enum zmv_commands command)
{ {
switch (command) switch (command)
{ {
case zmv_command_reset: case zmv_command_reset:
GUIReset = 1; GUIReset = 1;
asm_call(GUIDoReset); return(true);
ReturnFromSPCStall = 0;
zst_sram_load(zmv_vars.fp);
break; break;
} }
return(false);
} }
#define RESTORE_PAD(cur, prev) cur = (((unsigned int)prev) << 20) | 0x8000 #define RESTORE_PAD(cur, prev) cur = (((unsigned int)prev) << 20) | 0x8000
@@ -901,7 +901,10 @@ static bool zmv_replay()
if (flag & BIT(0)) //Command if (flag & BIT(0)) //Command
{ {
zmv_replay_command(flag >> 1); if (zmv_replay_command(flag >> 1));
{
return(true);
}
return(zmv_replay()); return(zmv_replay());
} }
@@ -1762,12 +1765,22 @@ void Replay()
} }
} }
bool MovieExitLoop = false;
void ProcessMovies() void ProcessMovies()
{ {
MovieExitLoop = false;
switch (MovieProcessing) switch (MovieProcessing)
{ {
case MOVIE_PLAYBACK: case MOVIE_PLAYBACK:
Replay(); Replay();
if (GUIReset == 1)
{
SetMovieMode(MOVIE_OFF);
asm_call(GUIDoReset);
SetMovieMode(MOVIE_PLAYBACK);
ReturnFromSPCStall = 0;
MovieExitLoop = true;
}
break; break;
case MOVIE_RECORD: case MOVIE_RECORD:
zmv_record(SloMo50 ? true : false, ComboCounter); zmv_record(SloMo50 ? true : false, ComboCounter);
@@ -1781,6 +1794,9 @@ void ProcessMovies()
void ResetDuringMovie() void ResetDuringMovie()
{ {
zmv_record_command(zmv_command_reset); zmv_record_command(zmv_command_reset);
SetMovieMode(MOVIE_OFF);
asm_call(GUIDoReset);
SetMovieMode(MOVIE_RECORD);
} }
void SkipMovie() void SkipMovie()