--- cpu.c.orig Fri Oct 20 17:02:37 2000 +++ cpu.c Fri Oct 20 16:55:18 2000 @@ -68,7 +68,7 @@ int pc; int lcd_updated, lcdon, imask, intreq, hasbios=0; -int spd; +int spd = 328, oldspd = 328, mcy; int t0h, t0l, t0base, t0scale; int t1h, t1l; int gamesize; @@ -356,12 +356,14 @@ } break; case 0x10e: + oldspd = spd; switch(value&0xa0) { - case 0x00: spd = 3000; break; - case 0x20: spd = 164; break; - case 0x80: spd = 6000; break; - case 0xa0: spd = 328; break; + case 0x00: spd = 3000/6; break; + case 0x20: spd = 164/6; break; + case 0x80: spd = 6000/6; break; + case 0xa0: spd = 328/6; break; } + mcy = mcy * spd / oldspd; break; case 0x110: if(!(value&0x40)) @@ -633,8 +635,9 @@ void run_cpu() { struct timeval epoch; - int mcy = 0, tick = 0; + int tick = 0; + mcy = 0; GETTIMEOFDAY(&epoch); for(;;) { int r, s, c, cy = 1, i = rom[pc];