From: Pokemonhacker <pok...@us...> - 2006-01-11 12:09:34
|
Update of /cvsroot/vba/VisualBoyAdvance/src/gb In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27414 Modified Files: GB.cpp Log Message: - GB.cpp : corrected an error in gbCompareLYToLYC (it allowed more than one interrupt on the same line). Index: GB.cpp =================================================================== RCS file: /cvsroot/vba/VisualBoyAdvance/src/gb/GB.cpp,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** GB.cpp 4 Jan 2006 13:38:47 -0000 1.21 --- GB.cpp 11 Jan 2006 12:09:22 -0000 1.22 *************** *** 140,144 **** int gbSerialBits = 0; // timer ! int gbTimerOn = 0; int gbTimerTicks = GBTIMER_MODE_0_CLOCK_TICKS; int gbTimerClockTicks = GBTIMER_MODE_0_CLOCK_TICKS; --- 140,144 ---- int gbSerialBits = 0; // timer ! bool gbTimerOn = false; int gbTimerTicks = GBTIMER_MODE_0_CLOCK_TICKS; int gbTimerClockTicks = GBTIMER_MODE_0_CLOCK_TICKS; *************** *** 154,159 **** bool gbTimerModeChange = false; bool gbTimerOnChange = false; - int gbOldTimerMode = 0; - int gbOldTimerClockTicks = GBTIMER_MODE_0_CLOCK_TICKS; // lcd bool gbScreenOn = true; --- 154,157 ---- *************** *** 684,688 **** { // send LCD interrupt only if no interrupt 48h signal... ! if (!(gbInt48Signal & 7)) { register_IF |=2; --- 682,686 ---- { // send LCD interrupt only if no interrupt 48h signal... ! if (!(gbInt48Signal)) { register_IF |=2; *************** *** 828,837 **** gbTimerOnChange = (((value ^ register_TAC) & 4) == 4) ? true : false; ! gbTimerOn = (value & 4); ! if (gbTimerOn || gbTimerModeChange) { - gbOldTimerMode = register_TAC & 3; - gbOldTimerClockTicks = gbTimerClockTicks; gbTimerMode = value & 3; --- 826,833 ---- gbTimerOnChange = (((value ^ register_TAC) & 4) == 4) ? true : false; ! gbTimerOn = (value & 4) ? true : false; ! if (gbTimerOnChange || gbTimerModeChange) { gbTimerMode = value & 3; *************** *** 892,896 **** { gbMemory[0xff05] = ++register_TIMA; ! if(register_TIMA == 0) { // timer overflow! --- 888,892 ---- { gbMemory[0xff05] = ++register_TIMA; ! if((register_TIMA & 0xff) == 0) { // timer overflow! *************** *** 1899,1904 **** gbTimerModeChange = false; gbTimerOnChange = false; ! gbOldTimerMode = 0; ! gbOldTimerClockTicks = GBTIMER_MODE_0_CLOCK_TICKS; // memset(gbSCYLine,0,sizeof(gbSCYLine)); --- 1895,1899 ---- gbTimerModeChange = false; gbTimerOnChange = false; ! gbTimerOn = false; // memset(gbSCYLine,0,sizeof(gbSCYLine)); *************** *** 2009,2013 **** gbSerialOn = 0; gbWindowLine = -1; ! gbTimerOn = 0; gbTimerMode = 0; // gbSynchronizeTicks = GBSYNCHRONIZE_CLOCK_TICKS; --- 2004,2008 ---- gbSerialOn = 0; gbWindowLine = -1; ! gbTimerOn = false; gbTimerMode = 0; // gbSynchronizeTicks = GBSYNCHRONIZE_CLOCK_TICKS; *************** *** 3244,3249 **** clockTicks = gbSerialTicks; ! if(gbTimerOn && (gbTimerTicks < clockTicks)) ! clockTicks = gbTimerTicks; if(soundTicks && (soundTicks < clockTicks)) --- 3239,3244 ---- clockTicks = gbSerialTicks; ! if(gbTimerOn && (((gbInternalTimer) & gbTimerMask[gbTimerMode])+1 < clockTicks)) ! clockTicks = ((gbInternalTimer) & gbTimerMask[gbTimerMode])+1; if(soundTicks && (soundTicks < clockTicks)) *************** *** 3301,3312 **** if (tempIFF <=clockTicks) { ! if (IFF & 0x80) ! clockTicks = tempIFF; ! else ! tempIFF = clockTicks; ! IFF |=1; } ! tempIFF -= clockTicks; IFF = (IFF & 0x8F) | (tempIFF <<4); } --- 3296,3304 ---- if (tempIFF <=clockTicks) { ! tempIFF = 0; IFF |=1; } ! else ! tempIFF -= clockTicks; IFF = (IFF & 0x8F) | (tempIFF <<4); } *************** *** 3334,3338 **** gbDivTicks -= clockTicks; while(gbDivTicks <= 0) { ! gbMemory[0xff04] = register_DIV++; gbDivTicks += GBDIV_CLOCK_TICKS; } --- 3326,3330 ---- gbDivTicks -= clockTicks; while(gbDivTicks <= 0) { ! gbMemory[0xff04] = ++register_DIV; gbDivTicks += GBDIV_CLOCK_TICKS; } *************** *** 3737,3740 **** --- 3729,3742 ---- } + + soundTicks -= clockTicks; + + while(soundTicks < 0) { + soundTicks += SOUND_CLOCK_TICKS; + + gbSoundTick(); + } + + // timer emulation *************** *** 3749,3753 **** register_TIMA++; // timer overflow! ! if(register_TIMA == 0) { // reload timer modulo register_TIMA = register_TMA; --- 3751,3755 ---- register_TIMA++; // timer overflow! ! if((register_TIMA & 0xff) == 0) { // reload timer modulo register_TIMA = register_TMA; *************** *** 3766,3770 **** gbInternalTimer -= clockTicks; ! while (gbInternalTimer<=0) gbInternalTimer+=0x100; --- 3768,3772 ---- gbInternalTimer -= clockTicks; ! while (gbInternalTimer<0) gbInternalTimer+=0x100; *************** *** 3797,3810 **** - - - soundTicks -= clockTicks; - - while(soundTicks < 0) { - soundTicks += SOUND_CLOCK_TICKS; - - gbSoundTick(); - } - //register_IF *= (IFF & 1); --- 3799,3802 ---- *************** *** 3842,3847 **** ! if ((register_IF & register_IE) && ((IFF & 0x81) && (gbInterruptWait == 0))) { --- 3834,3840 ---- + gbDmaTicks = 0; ! if ((register_IF & register_IE) && (IFF & 0x81)) { |