From 3ee3ad572f81bba75dbb436fad57f73ecb3bde9d Mon Sep 17 00:00:00 2001 From: "fabio.olimpieri" Date: Sun, 17 Feb 2013 21:59:31 +0000 Subject: [PATCH] Removed CBA sound, tape pause depends on turbo mode, changed fast load routine to let Mask and Goody work --- src/emulator.c | 2 +- src/gui_sdl.c | 2 +- src/spk_ay.c | 4 -- src/tape.c | 119 ++++++++++++++++++++++++++----------------------- 4 files changed, 66 insertions(+), 61 deletions(-) diff --git a/src/emulator.c b/src/emulator.c index db6b57e..461d005 100644 --- a/src/emulator.c +++ b/src/emulator.c @@ -1057,7 +1057,7 @@ int load_config(struct computer *object, char *filename) { if (ay_emul<2) { object->ay_emul=ay_emul; } - if (audio_mode<5) { + if (audio_mode<4) { object->audio_mode=audio_mode; } if (mdr_active<2) { diff --git a/src/gui_sdl.c b/src/gui_sdl.c index 7381857..5d7099d 100644 --- a/src/gui_sdl.c +++ b/src/gui_sdl.c @@ -101,7 +101,7 @@ static const char *audio_messages[] = { /*04*/ "^|on|off", /*05*/ " ", /*06*/ "Audio mode", - /*07*/ "^|mono|ABC|ACB|BAC|CBA", + /*07*/ "^|mono|ABC|ACB|BAC", /*08 " ", */ /*09 "Beeper low pass filter",*/ /*10 "^|0|1|2|3|4|5|6|7|max",*/ diff --git a/src/spk_ay.c b/src/spk_ay.c index 0e20808..5eab8fc 100644 --- a/src/spk_ay.c +++ b/src/spk_ay.c @@ -360,10 +360,6 @@ inline void play_sound (unsigned int tstados) { lvalue = (beeper + ordenador.vol_b*2 + ordenador.vol_a)*ordenador.volume; rvalue = (beeper + ordenador.vol_a + ordenador.vol_c*2)*ordenador.volume; break; - case 4: //CBA - lvalue = (beeper + ordenador.vol_b + ordenador.vol_c*2)*ordenador.volume; - rvalue = (beeper + ordenador.vol_a*2 + ordenador.vol_b)*ordenador.volume; - break; default: //No emulation rvalue = beeper*ordenador.volume; lvalue = beeper*ordenador.volume; diff --git a/src/tape.c b/src/tape.c index 2f2bf8d..6590260 100644 --- a/src/tape.c +++ b/src/tape.c @@ -722,6 +722,11 @@ void save_file(FILE *fichero) { return; } +unsigned int min(unsigned int x,unsigned int y) +{ + if (x(longitud-1)) - { - procesador.Rm.br.F &= (~F_C); // Load error - procesador.Rm.wr.IX += procesador.Rm.wr.DE; - procesador.Rm.wr.DE = 0; - retval=fread (value, 1,longitud, fichero); //read the remaining bytes - return; - } + number_bytes = min(procesador.Rm.wr.DE,longitud-1); - retval=fread (value, 1,longitud, fichero); - if (retval!=longitud) + retval=fread (value, 1,number_bytes+1, fichero); //read also checksum byte + if (retval!=(number_bytes+1)) { procesador.Rm.br.F &= (~F_C); // Load error procesador.Rm.wr.IX += procesador.Rm.wr.DE; @@ -832,40 +831,48 @@ void fastload_block_tap (FILE * fichero) { printf("TAP: Read file error\n"); return; } - - number_bytes=procesador.Rm.wr.DE; for(bucle=0;bucle0) retval=fread (value, 1,longitud, fichero); //read the remaining bytes - procesador.Rm.br.A=parity; - //CP 01 - Z80free_doArithmetic(&procesador,procesador.Rm.br.A,0x01,0,1); - Z80free_adjustFlags(&procesador,0x01); - - procesador.Rm.br.B=0xB0; procesador.Rm.br.C=0x01; procesador.Rm.br.H=parity; - procesador.Rm.br.L=value[longitud-1]; - procesador.Ra.br.A=0x01; - procesador.Ra.br.F=0x45; - procesador.Rm.br.F |= F_C; // Load OK + procesador.Rm.br.L=value[number_bytes-1]; + if (procesador.Rm.wr.DE==0) //OK + { + procesador.Rm.br.A=parity; + //CP 01 + Z80free_doArithmetic(&procesador,procesador.Rm.br.A,0x01,0,1); + Z80free_adjustFlags(&procesador,0x01); + procesador.Rm.br.B=0xB0; + procesador.Ra.br.A=0x01; + procesador.Ra.br.F=0x45; + procesador.Rm.br.F |= F_C; // Load OK + } + else // Load error + { + procesador.Rm.br.B=0; + procesador.Rm.br.A=0; + procesador.Rm.br.F &= (~F_C); // Load error + } if (ordenador.pause_instant_load) { - ordenador.pause_fastload_countdwn=2000/20+1; //tap pause + if ((ordenador.turbo==0)||(longitud_block==6914)) ordenador.pause_fastload_countdwn=2000/20+1; //tap pause for screen and norma turbo + else ordenador.pause_fastload_countdwn=1000/20+1; } return; @@ -1108,17 +1115,10 @@ void fastload_block_tzx (FILE * fichero) { printf("TZX: expected by file %d\n", longitud-1); } - if (procesador.Rm.wr.DE>(longitud-1)) - { - procesador.Rm.br.F &= (~F_C); // Load error - procesador.Rm.wr.IX += procesador.Rm.wr.DE; - procesador.Rm.wr.DE = 0; - retval=fread (value, 1,longitud, fichero); //read the remaining bytes - return; - } - - retval=fread (value, 1,longitud, fichero); - if (retval!=longitud) + number_bytes = min(procesador.Rm.wr.DE,longitud-1); + + retval=fread (value, 1,number_bytes+1, fichero); //read also checksum byte + if (retval!=(number_bytes+1)) { procesador.Rm.br.F &= (~F_C); // Load error procesador.Rm.wr.IX += procesador.Rm.wr.DE; @@ -1126,35 +1126,43 @@ void fastload_block_tzx (FILE * fichero) { printf("TZX: Read file error\n"); return; } - - number_bytes=procesador.Rm.wr.DE; for(bucle=0;bucle0) retval=fread (value, 1,longitud, fichero); //read the remaining bytes - procesador.Rm.br.A=parity; - //CP 01 - Z80free_doArithmetic(&procesador,procesador.Rm.br.A,0x01,0,1); - Z80free_adjustFlags(&procesador,0x01); - - procesador.Rm.br.B=0xB0; procesador.Rm.br.C=0x01; procesador.Rm.br.H=parity; - procesador.Rm.br.L=value[longitud-1]; - procesador.Ra.br.A=0x01; - procesador.Ra.br.F=0x45; - procesador.Rm.br.F |= F_C; // Load OK + procesador.Rm.br.L=value[number_bytes-1]; + + if (procesador.Rm.wr.DE==0) //OK + { + procesador.Rm.br.A=parity; + //CP 01 + Z80free_doArithmetic(&procesador,procesador.Rm.br.A,0x01,0,1); + Z80free_adjustFlags(&procesador,0x01); + procesador.Rm.br.B=0xB0; + procesador.Ra.br.A=0x01; + procesador.Ra.br.F=0x45; + procesador.Rm.br.F |= F_C; // Load OK + } + else // Load error + { + procesador.Rm.br.B=0; + procesador.Rm.br.A=0; + procesador.Rm.br.F &= (~F_C); // Load error + } byte_position=ftell(fichero); @@ -1183,7 +1191,8 @@ void fastload_block_tzx (FILE * fichero) { } else if (ordenador.pause_instant_load) { - ordenador.pause_fastload_countdwn=((unsigned int)pause[0]+256*(unsigned int)pause[1])/20+1; //tzx pause + if (ordenador.turbo==0) ordenador.pause_fastload_countdwn=((unsigned int)pause[0]+256*(unsigned int)pause[1])/20+1; //tzx pause + else ordenador.pause_fastload_countdwn=((unsigned int)pause[0]+256*(unsigned int)pause[1])/60+1; } fseek(fichero, byte_position, SEEK_SET);