diff --git a/src/computer.c b/src/computer.c index 66f4794..a396a09 100644 --- a/src/computer.c +++ b/src/computer.c @@ -723,8 +723,8 @@ inline void show_screen_precision (int tstados) { temporal2_1 = ordenador.memoria[(*(ordenador.p_translt+1)) + ordenador.video_offset]; // bitmap second byte if((ordenador.fetch_state==2)&&((procesador.I & 0xC0) == 0x40)) { - temporal2 = ordenador.memoria[(((*(ordenador.p_translt)) + (ordenador.video_offset))&0xFFFFFF80)+(procesador.R&0x7F)]; // bitmap with snow first byte - temporal = ordenador.memoria[(((*(ordenador.p_translt2)) + (ordenador.video_offset))&0xFFFFFF80)+(procesador.R&0x7F)]; // attributes with snow first byte + temporal2 = ordenador.memoria[(((*ordenador.p_translt) + ordenador.video_offset)&0xFFFFFF80)+(procesador.R&0x7F)]; // bitmap with snow first byte + temporal = ordenador.memoria[(((*ordenador.p_translt2) + ordenador.video_offset)&0xFFFFFF80)+(procesador.R&0x7F)]; // attributes with snow first byte } ordenador.p_translt+=2; @@ -797,9 +797,10 @@ inline void show_screen_precision (int tstados) { switch (ordenador.pixels_word) { case 14: + // Snow Effect if((ordenador.fetch_state==2)&&((procesador.I & 0xC0) == 0x40)) { - temporal2 = ordenador.memoria[(((*(ordenador.p_translt-2)) + (ordenador.video_offset))&0xFFFFFF80)+(procesador.R&0x7F)]; // bitmap with snow second byte - temporal = ordenador.memoria[(((*(ordenador.p_translt2-2)) + (ordenador.video_offset))&0xFFFFFF80)+(procesador.R&0x7F)]; // attributes with snow second byte + temporal2 = ordenador.memoria[(((*(ordenador.p_translt-2)) + (ordenador.video_offset))&0xFFFFFF80)+(procesador.R&0x7F)]; // bitmap with snow first byte + temporal = ordenador.memoria[(((*(ordenador.p_translt2-2)) + (ordenador.video_offset))&0xFFFFFF80)+(procesador.R&0x7F)]; // attributes with snow first byte } // bitmap first byte ordenador.bus_value = temporal2; @@ -811,8 +812,8 @@ inline void show_screen_precision (int tstados) { case 2: // Snow Effect if((ordenador.fetch_state==2)&&((procesador.I & 0xC0) == 0x40)) { - temporal2_1 = ordenador.memoria[(((*(ordenador.p_translt-1)) + (ordenador.video_offset))&0xFFFFFF80)+(((*(ordenador.p_translt-2)) + (ordenador.video_offset))&0x7F)]; // bitmap with snow second byte - temporal_1 = ordenador.memoria[(((*(ordenador.p_translt2-1)) + (ordenador.video_offset))&0xFFFFFF80)+(((*(ordenador.p_translt2-2)) + (ordenador.video_offset))&0x7F)]; // attributes with snow second byte + temporal2_1 = ordenador.memoria[((*(ordenador.p_translt-1) + ordenador.video_offset)&0xFFFFFF80)+(((*(ordenador.p_translt-2)) + ordenador.video_offset)&0x7F)]; // bitmap with snow second byte + temporal_1 = ordenador.memoria[((*(ordenador.p_translt2-1) + ordenador.video_offset)&0xFFFFFF80)+(((*(ordenador.p_translt2-2)) + ordenador.video_offset)&0x7F)]; // attributes with snow second byte } // bitmap second byte ordenador.bus_value = temporal2_1; @@ -1656,6 +1657,42 @@ byte Z80free_Rd (register word Addr) { } } +byte Z80free_Rd_fake (register word Addr) { + +switch (ordenador.other_ret) { + case 1: + ordenador.other_ret = 0; + return (201); // RET instruction + break; + + default: + switch (Addr & 0xC000) { + case 0x0000: + return ((byte) (*(ordenador.block0 + Addr))); + break; + + case 0x4000: + return ((byte) (*(ordenador.block1 + Addr))); + break; + + case 0x8000: + return ((byte) (*(ordenador.block2 + Addr))); + break; + + case 0xC000: + return ((byte) (*(ordenador.block3 + Addr))); + break; + + default: + printf ("Memory error\n"); + exit (1); + return 0; + } + break; + } + +} + void set_palete_entry(unsigned char entry, byte Value) { diff --git a/src/gui_sdl.c b/src/gui_sdl.c index 799500d..4711602 100644 --- a/src/gui_sdl.c +++ b/src/gui_sdl.c @@ -303,8 +303,6 @@ void create_tapfile_sdl() { retorno=ask_filename_sdl(nombre2,82,"tap",path_taps,NULL); - clean_screen(); - if(retorno==2) // abort return; @@ -331,16 +329,12 @@ void create_tapfile_sdl() { case 0: break; case -1: - print_string(videomem,"File already exists",-1,80,10,0,ancho); - SDL_Flip(screen); + msgInfo("File already exists",3000,NULL); ordenador.current_tap[0]=0; - SDL_Delay(3000); break; case -2: - print_string(videomem,"Can't create file",-1,80,10,0,ancho); + msgInfo("Can't create file",3000,NULL); ordenador.current_tap[0]=0; - SDL_Flip(screen); - SDL_Delay(3000); break; } clean_screen(); @@ -717,8 +711,6 @@ void create_mdrfile_sdl() { retorno=ask_filename_sdl(nombre2,82,"mdr",path_mdrs, NULL); - clean_screen(); - if(retorno==2) // abort return; @@ -748,16 +740,12 @@ void create_mdrfile_sdl() { case 0: break; case -1: - print_string(videomem,"File already exists",-1,80,10,0,ancho); + msgInfo("File already exists",3000,NULL); ordenador.mdr_current_mdr[0]=0; - SDL_Flip(screen); - SDL_Delay(3000); break; case -2: - print_string(videomem,"Can't create file",-1,80,10,0,ancho); + msgInfo("Can't create file",3000,NULL); ordenador.mdr_current_mdr[0]=0; - SDL_Flip(screen); - SDL_Delay(3000); break; } clean_screen(); diff --git a/src/tape.c b/src/tape.c index 746008b..d098d2a 100644 --- a/src/tape.c +++ b/src/tape.c @@ -659,7 +659,7 @@ void save_file(FILE *fichero) { if (procesador.Rm.wr.DE == 0) salir = 2; if (!salir) { - dato=Z80free_Rd(procesador.Rm.wr.IX); // read data + dato=Z80free_Rd_fake(procesador.Rm.wr.IX); // read data fprintf(fichero,"%c",dato); xor^=dato; procesador.Rm.wr.IX++; diff --git a/src/z80free/Z80free.h b/src/z80free/Z80free.h index 3246116..d887b39 100644 --- a/src/z80free/Z80free.h +++ b/src/z80free/Z80free.h @@ -139,6 +139,7 @@ int Z80free_ustep(Z80FREE *); void Z80free_INT(Z80FREE *,byte); byte Z80free_Rd (register word Addr); +byte Z80free_Rd_fake (register word Addr); byte Z80free_Rd_fetch (register word Addr); void Z80free_Wr (register word Addr, register byte Value); void Z80free_Wr_fake (register word Addr, register byte Value);