mirror of
https://github.com/Oibaf66/fbzx-wii.git
synced 2024-11-28 11:04:15 +01:00
Removed CBA sound, tape pause depends on turbo mode, changed fast load routine to let Mask and Goody work
This commit is contained in:
parent
efa831330a
commit
3ee3ad572f
@ -1057,7 +1057,7 @@ int load_config(struct computer *object, char *filename) {
|
|||||||
if (ay_emul<2) {
|
if (ay_emul<2) {
|
||||||
object->ay_emul=ay_emul;
|
object->ay_emul=ay_emul;
|
||||||
}
|
}
|
||||||
if (audio_mode<5) {
|
if (audio_mode<4) {
|
||||||
object->audio_mode=audio_mode;
|
object->audio_mode=audio_mode;
|
||||||
}
|
}
|
||||||
if (mdr_active<2) {
|
if (mdr_active<2) {
|
||||||
|
@ -101,7 +101,7 @@ static const char *audio_messages[] = {
|
|||||||
/*04*/ "^|on|off",
|
/*04*/ "^|on|off",
|
||||||
/*05*/ " ",
|
/*05*/ " ",
|
||||||
/*06*/ "Audio mode",
|
/*06*/ "Audio mode",
|
||||||
/*07*/ "^|mono|ABC|ACB|BAC|CBA",
|
/*07*/ "^|mono|ABC|ACB|BAC",
|
||||||
/*08 " ", */
|
/*08 " ", */
|
||||||
/*09 "Beeper low pass filter",*/
|
/*09 "Beeper low pass filter",*/
|
||||||
/*10 "^|0|1|2|3|4|5|6|7|max",*/
|
/*10 "^|0|1|2|3|4|5|6|7|max",*/
|
||||||
|
@ -360,10 +360,6 @@ inline void play_sound (unsigned int tstados) {
|
|||||||
lvalue = (beeper + ordenador.vol_b*2 + ordenador.vol_a)*ordenador.volume;
|
lvalue = (beeper + ordenador.vol_b*2 + ordenador.vol_a)*ordenador.volume;
|
||||||
rvalue = (beeper + ordenador.vol_a + ordenador.vol_c*2)*ordenador.volume;
|
rvalue = (beeper + ordenador.vol_a + ordenador.vol_c*2)*ordenador.volume;
|
||||||
break;
|
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
|
default: //No emulation
|
||||||
rvalue = beeper*ordenador.volume;
|
rvalue = beeper*ordenador.volume;
|
||||||
lvalue = beeper*ordenador.volume;
|
lvalue = beeper*ordenador.volume;
|
||||||
|
93
src/tape.c
93
src/tape.c
@ -722,6 +722,11 @@ void save_file(FILE *fichero) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned int min(unsigned int x,unsigned int y)
|
||||||
|
{
|
||||||
|
if (x<y) return x; else return y;
|
||||||
|
}
|
||||||
|
|
||||||
void fastload_block_tap (FILE * fichero) {
|
void fastload_block_tap (FILE * fichero) {
|
||||||
|
|
||||||
/*Frome Fuse On exit:
|
/*Frome Fuse On exit:
|
||||||
@ -740,7 +745,7 @@ void fastload_block_tap (FILE * fichero) {
|
|||||||
* Other registers unchanged.
|
* Other registers unchanged.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
unsigned int longitud, bucle, number_bytes;
|
unsigned int longitud, longitud_block, bucle, number_bytes;
|
||||||
unsigned char value[65536], empty, parity;
|
unsigned char value[65536], empty, parity;
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
@ -781,6 +786,7 @@ void fastload_block_tap (FILE * fichero) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
longitud = ((unsigned int) value[0]) + 256 * ((unsigned int) value[1]);
|
longitud = ((unsigned int) value[0]) + 256 * ((unsigned int) value[1]);
|
||||||
|
longitud_block=longitud;
|
||||||
|
|
||||||
retval=fread (value, 1,1, fichero); //Flag Byte
|
retval=fread (value, 1,1, fichero); //Flag Byte
|
||||||
if (retval!=1)
|
if (retval!=1)
|
||||||
@ -814,17 +820,10 @@ void fastload_block_tap (FILE * fichero) {
|
|||||||
printf("TAP: expected by file %d\n", longitud-1);
|
printf("TAP: expected by file %d\n", longitud-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (procesador.Rm.wr.DE>(longitud-1))
|
number_bytes = min(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);
|
retval=fread (value, 1,number_bytes+1, fichero); //read also checksum byte
|
||||||
if (retval!=longitud)
|
if (retval!=(number_bytes+1))
|
||||||
{
|
{
|
||||||
procesador.Rm.br.F &= (~F_C); // Load error
|
procesador.Rm.br.F &= (~F_C); // Load error
|
||||||
procesador.Rm.wr.IX += procesador.Rm.wr.DE;
|
procesador.Rm.wr.IX += procesador.Rm.wr.DE;
|
||||||
@ -833,39 +832,47 @@ void fastload_block_tap (FILE * fichero) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
number_bytes=procesador.Rm.wr.DE;
|
|
||||||
|
|
||||||
for(bucle=0;bucle<number_bytes; bucle++)
|
for(bucle=0;bucle<number_bytes; bucle++)
|
||||||
{
|
{
|
||||||
Z80free_Wr_fake (procesador.Rm.wr.IX, (byte) value[bucle]); // store the byte
|
Z80free_Wr_fake (procesador.Rm.wr.IX, (byte) value[bucle]); // store the byte
|
||||||
procesador.Rm.wr.IX++;
|
procesador.Rm.wr.IX++;
|
||||||
procesador.Rm.wr.DE--;
|
procesador.Rm.wr.DE--;
|
||||||
|
longitud--;
|
||||||
parity^=(byte) value[bucle];
|
parity^=(byte) value[bucle];
|
||||||
}
|
}
|
||||||
|
|
||||||
//clean_screen ();
|
parity^=(byte) value[number_bytes]; // checksum
|
||||||
|
|
||||||
parity^=value[number_bytes]; // checksum
|
|
||||||
|
|
||||||
if (parity) printf("TAP: Parity error\n");
|
if (parity) printf("TAP: Parity error\n");
|
||||||
|
longitud--;
|
||||||
|
if (longitud>0) retval=fread (value, 1,longitud, fichero); //read the remaining bytes
|
||||||
|
|
||||||
|
procesador.Rm.br.C=0x01;
|
||||||
|
procesador.Rm.br.H=parity;
|
||||||
|
procesador.Rm.br.L=value[number_bytes-1];
|
||||||
|
|
||||||
|
if (procesador.Rm.wr.DE==0) //OK
|
||||||
|
{
|
||||||
procesador.Rm.br.A=parity;
|
procesador.Rm.br.A=parity;
|
||||||
//CP 01
|
//CP 01
|
||||||
Z80free_doArithmetic(&procesador,procesador.Rm.br.A,0x01,0,1);
|
Z80free_doArithmetic(&procesador,procesador.Rm.br.A,0x01,0,1);
|
||||||
Z80free_adjustFlags(&procesador,0x01);
|
Z80free_adjustFlags(&procesador,0x01);
|
||||||
|
|
||||||
procesador.Rm.br.B=0xB0;
|
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.A=0x01;
|
||||||
procesador.Ra.br.F=0x45;
|
procesador.Ra.br.F=0x45;
|
||||||
procesador.Rm.br.F |= F_C; // Load OK
|
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)
|
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;
|
return;
|
||||||
@ -1108,17 +1115,10 @@ void fastload_block_tzx (FILE * fichero) {
|
|||||||
printf("TZX: expected by file %d\n", longitud-1);
|
printf("TZX: expected by file %d\n", longitud-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (procesador.Rm.wr.DE>(longitud-1))
|
number_bytes = min(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);
|
retval=fread (value, 1,number_bytes+1, fichero); //read also checksum byte
|
||||||
if (retval!=longitud)
|
if (retval!=(number_bytes+1))
|
||||||
{
|
{
|
||||||
procesador.Rm.br.F &= (~F_C); // Load error
|
procesador.Rm.br.F &= (~F_C); // Load error
|
||||||
procesador.Rm.wr.IX += procesador.Rm.wr.DE;
|
procesador.Rm.wr.IX += procesador.Rm.wr.DE;
|
||||||
@ -1127,34 +1127,42 @@ void fastload_block_tzx (FILE * fichero) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
number_bytes=procesador.Rm.wr.DE;
|
|
||||||
|
|
||||||
for(bucle=0;bucle<number_bytes; bucle++)
|
for(bucle=0;bucle<number_bytes; bucle++)
|
||||||
{
|
{
|
||||||
Z80free_Wr_fake (procesador.Rm.wr.IX, (byte) value[bucle]); // store the byte
|
Z80free_Wr_fake (procesador.Rm.wr.IX, (byte) value[bucle]); // store the byte
|
||||||
procesador.Rm.wr.IX++;
|
procesador.Rm.wr.IX++;
|
||||||
procesador.Rm.wr.DE--;
|
procesador.Rm.wr.DE--;
|
||||||
|
longitud--;
|
||||||
parity^=(byte) value[bucle];
|
parity^=(byte) value[bucle];
|
||||||
}
|
}
|
||||||
|
|
||||||
//clean_screen ();
|
parity^=(byte) value[number_bytes]; // checksum
|
||||||
|
|
||||||
parity^=value[number_bytes]; // checksum
|
|
||||||
|
|
||||||
if (parity) printf("TZX: Parity error\n");
|
if (parity) printf("TZX: Parity error\n");
|
||||||
|
longitud--;
|
||||||
|
if (longitud>0) retval=fread (value, 1,longitud, fichero); //read the remaining bytes
|
||||||
|
|
||||||
|
procesador.Rm.br.C=0x01;
|
||||||
|
procesador.Rm.br.H=parity;
|
||||||
|
procesador.Rm.br.L=value[number_bytes-1];
|
||||||
|
|
||||||
|
if (procesador.Rm.wr.DE==0) //OK
|
||||||
|
{
|
||||||
procesador.Rm.br.A=parity;
|
procesador.Rm.br.A=parity;
|
||||||
//CP 01
|
//CP 01
|
||||||
Z80free_doArithmetic(&procesador,procesador.Rm.br.A,0x01,0,1);
|
Z80free_doArithmetic(&procesador,procesador.Rm.br.A,0x01,0,1);
|
||||||
Z80free_adjustFlags(&procesador,0x01);
|
Z80free_adjustFlags(&procesador,0x01);
|
||||||
|
|
||||||
procesador.Rm.br.B=0xB0;
|
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.A=0x01;
|
||||||
procesador.Ra.br.F=0x45;
|
procesador.Ra.br.F=0x45;
|
||||||
procesador.Rm.br.F |= F_C; // Load OK
|
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);
|
byte_position=ftell(fichero);
|
||||||
|
|
||||||
@ -1183,7 +1191,8 @@ void fastload_block_tzx (FILE * fichero) {
|
|||||||
}
|
}
|
||||||
else if (ordenador.pause_instant_load)
|
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);
|
fseek(fichero, byte_position, SEEK_SET);
|
||||||
|
Loading…
Reference in New Issue
Block a user