X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pico%2Fpico.c;h=302cc699215a78278e67a3902e3d3e097e34c515;hb=94d2199eb18a8d21e24fb2aab66c10ef6869704b;hp=ab2302e3c0ab8ba404dc5728355e375fa87bc40b;hpb=af37bca858874b5cbd5ab126eaba1fad6ff7ab72;p=picodrive.git diff --git a/pico/pico.c b/pico/pico.c index ab2302e..302cc69 100644 --- a/pico/pico.c +++ b/pico/pico.c @@ -40,8 +40,7 @@ void PicoInit(void) PicoInitMCD(); PicoSVPInit(); - - SRam.data=0; + Pico32xInit(); } // to be called once on emu exit @@ -52,13 +51,12 @@ void PicoExit(void) PicoCartUnload(); z80_exit(); - if (SRam.data) free(SRam.data); SRam.data=0; + if (SRam.data) + free(SRam.data); } void PicoPower(void) { - unsigned char sram_status = Pico.m.sram_status; // must be preserved - Pico.m.frame_count = 0; // clear all memory of the emulated machine @@ -78,7 +76,9 @@ void PicoPower(void) if (PicoAHW & PAHW_MCD) PicoPowerMCD(); - Pico.m.sram_status = sram_status; + if (!(PicoOpt & POPT_DIS_32X)) + PicoPower32x(); + PicoReset(); } @@ -141,8 +141,6 @@ PICO_INTERNAL void PicoDetectRegion(void) int PicoReset(void) { - unsigned char sram_status = Pico.m.sram_status; // must be preserved - if (Pico.romsize <= 0) return 1; @@ -193,13 +191,19 @@ int PicoReset(void) if (!(PicoOpt & POPT_DIS_IDLE_DET)) SekInitIdleDet(); + if (!(PicoOpt & POPT_DIS_32X)) { + PicoReset32x(); + return 0; + } + // reset sram state; enable sram access by default if it doesn't overlap with ROM - Pico.m.sram_status = sram_status & (SRS_DETECTED|SRS_EEPROM); - if (!(Pico.m.sram_status & SRS_EEPROM) && Pico.romsize <= SRam.start) - Pico.m.sram_status |= SRS_MAPPED; + Pico.m.sram_reg = 0; + if ((SRam.flags & SRF_EEPROM) || Pico.romsize <= SRam.start) + Pico.m.sram_reg |= SRR_MAPPED; - elprintf(EL_STATUS, "sram: det: %i; eeprom: %i; start: %06x; end: %06x", - !!(sram_status & SRS_DETECTED), !!(sram_status & SRS_EEPROM), SRam.start, SRam.end); + if (SRam.flags & SRF_ENABLED) + elprintf(EL_STATUS, "sram: %06x - %06x; eeprom: %i", SRam.start, SRam.end, + !!(SRam.flags & SRF_EEPROM)); return 0; } @@ -301,11 +305,17 @@ void PicoFrame(void) return; } + // TODO: MCD+32X if (PicoAHW & PAHW_MCD) { PicoFrameMCD(); return; } + if (PicoAHW & PAHW_32X) { + PicoFrame32x(); + return; + } + //if(Pico.video.reg[12]&0x2) Pico.video.status ^= 0x10; // change odd bit in interlace mode PicoFrameStart();