mirror of
https://github.com/Oibaf66/fbzx-wii.git
synced 2024-12-25 16:11:52 +01:00
fixed bug in reset, tape always stops on reset, custom data play the tape
This commit is contained in:
parent
a654a30323
commit
d7825a30e6
@ -110,10 +110,10 @@ void computer_init () { //Called only on start-up
|
||||
ordenador.vk_rumble = 1; //enabled
|
||||
ordenador.rumble[0] = 0;
|
||||
ordenador.rumble[1] = 0;
|
||||
ordenador.turbo = 0;
|
||||
ordenador.turbo = 1; //auto turbo
|
||||
ordenador.turbo_state = 0;
|
||||
ordenador.precision = 0;
|
||||
ordenador.precision_old = 0;
|
||||
ordenador.precision = 1; //precision
|
||||
ordenador.precision_old = 1;
|
||||
|
||||
ordenador.tape_readed = 0;
|
||||
ordenador.pause = 1; // tape stop
|
||||
@ -559,6 +559,8 @@ inline void show_screen (int tstados) {
|
||||
ordenador.interr = 1;
|
||||
if ((ordenador.turbo_state == 0) || (curr_frames%7 == 0)) ordenador.readkeyboard = 1;
|
||||
curr_frames++;
|
||||
if (ordenador.tape_start_countdwn==1) ordenador.pause=0; //Autoplay
|
||||
if (ordenador.tape_start_countdwn>0) ordenador.tape_start_countdwn--;
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -704,8 +706,10 @@ inline void show_screen_precision (int tstados) {
|
||||
ordenador.interr = 1;
|
||||
ordenador.readkeyboard = 1;
|
||||
curr_frames++;
|
||||
if (ordenador.tape_start_countdwn==1) ordenador.pause=0; //Autoplay
|
||||
if (ordenador.tape_start_countdwn>0) ordenador.tape_start_countdwn--;
|
||||
}
|
||||
if (ordenador.tstados_counter > 31) ordenador.interr = 0;
|
||||
//if (ordenador.tstados_counter > 31) ordenador.interr = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1663,16 +1667,34 @@ void ResetComputer () {
|
||||
|
||||
microdrive_reset();
|
||||
|
||||
ordenador.pause = 1;
|
||||
|
||||
if (ordenador.rewind_on_reset)
|
||||
{
|
||||
ordenador.pause = 1;
|
||||
{
|
||||
if (ordenador.tap_file != NULL) {
|
||||
ordenador.tape_current_mode = TAP_TRASH;
|
||||
rewind_tape (ordenador.tap_file,1);
|
||||
}
|
||||
}
|
||||
|
||||
switch(ordenador.turbo)
|
||||
{
|
||||
case 2: //fast
|
||||
update_frequency(10000000);
|
||||
break;
|
||||
case 3: //ultra fast
|
||||
update_frequency(14000000);
|
||||
break;
|
||||
}
|
||||
|
||||
ordenador.precision=ordenador.precision_old; //in case the machine is reset during loading
|
||||
ordenador.tape_start_countdwn=0;
|
||||
curr_frames=0;
|
||||
ordenador.tstados_counter=0;
|
||||
ordenador.cicles_counter=0;
|
||||
ordenador.currline=0;
|
||||
ordenador.currpix=0;
|
||||
ordenador.interr = 0;
|
||||
}
|
||||
|
||||
// check if there's contention and waits the right number of tstates
|
||||
|
@ -1579,7 +1579,7 @@ int main(int argc,char *argv[]) {
|
||||
|
||||
if(ordenador.interr==1) {
|
||||
Z80free_INT(&procesador,bus_empty());
|
||||
if (ordenador.precision==0) ordenador.interr=0;
|
||||
if ((ordenador.precision==0)||(jump_frames>0)) ordenador.interr=0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -576,7 +576,7 @@ static int emulation_settings(void)
|
||||
{
|
||||
ordenador.precision = !submenus[5];
|
||||
ordenador.precision_old=ordenador.precision;
|
||||
if (ordenador.turbo_state!=4) //Tape is not loading with turbo mode
|
||||
if (ordenador.turbo_state!=1) //Tape is not loading with turbo mode
|
||||
if (ordenador.precision)
|
||||
{
|
||||
update_frequency(0);
|
||||
|
13
src/tape.c
13
src/tape.c
@ -54,14 +54,14 @@ inline void tape_read(FILE *fichero, int tstados) {
|
||||
}
|
||||
|
||||
//Auto ultra fast mode
|
||||
if ((ordenador.turbo_state != 4)&&(ordenador.turbo==1))
|
||||
if ((ordenador.turbo_state != 1)&&(ordenador.turbo==1))
|
||||
{
|
||||
if (ordenador.tape_file_type==TAP_TAP) update_frequency(13000000);
|
||||
else update_frequency(11000000);
|
||||
jump_frames=7;
|
||||
ordenador.precision_old=ordenador.precision;
|
||||
ordenador.precision =0;
|
||||
ordenador.turbo_state = 4;
|
||||
ordenador.turbo_state = 1;
|
||||
}
|
||||
|
||||
if(ordenador.tape_file_type == TAP_TAP)
|
||||
@ -885,8 +885,6 @@ void fastload_block_tzx (FILE * fichero) {
|
||||
unsigned int longitud, len, bucle, number_bytes, byte_position;
|
||||
unsigned char value[65536], empty, blockid, parity;
|
||||
int retval;
|
||||
fpos_t *file_pos;
|
||||
|
||||
|
||||
//ordenador.other_ret = 1; // next instruction must be RET
|
||||
procesador.PC=0x5e2;
|
||||
@ -1151,9 +1149,16 @@ void fastload_block_tzx (FILE * fichero) {
|
||||
byte_position=ftell(fichero);
|
||||
|
||||
retval=fread (&blockid, 1, 1, fichero); //Read next id block
|
||||
|
||||
|
||||
if (!feof(fichero))
|
||||
{
|
||||
if (blockid==0x10)
|
||||
{
|
||||
retval=fread (value, 1, 5, fichero); //read till flag byte
|
||||
if (retval==5)
|
||||
if ((value[4]!=0x0)&&(value[4]!=0xFF)) blockid=0x11; //custom data
|
||||
}
|
||||
if ((blockid==0x11)||(blockid==0x12)||(blockid==0x13)||(blockid==0x14)||(blockid==0x21)||(blockid==0x24)) ordenador.tape_start_countdwn=80; //autoplay countdown
|
||||
fseek(fichero, byte_position, SEEK_SET);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user