gb: pause function

This commit is contained in:
aiju 2012-08-25 22:13:29 +02:00
parent 46124af6cf
commit d7c21149e4
2 changed files with 20 additions and 4 deletions

View file

@ -7,6 +7,7 @@
static int fd;
static int sc, ch1c, ch2c, ch3c, ch4c, ch4sr = 1, ch1vec, ch2vec, ch4vec, ch1v, ch2v, ch4v;
extern int paused;
enum { SAMPLE = 44100 };
@ -201,8 +202,11 @@ audioproc(void *)
int i;
for(;;){
for(i = 0; i < sizeof samples/4; i++)
dosample(samples + 2 * i);
if(paused)
memset(samples, 0, sizeof samples);
else
for(i = 0; i < sizeof samples/4; i++)
dosample(samples + 2 * i);
write(fd, samples, sizeof samples);
}
}

View file

@ -9,10 +9,11 @@
#include "fns.h"
uchar *cart, *ram;
int mbc, rombanks, rambanks, clock, ppuclock, divclock, timerclock, syncclock, syncfreq, sleeps, checkclock, msgclock, timerfreq, timer, keys, savefd, savereq, loadreq, scale;
int mbc, rombanks, rambanks, clock, ppuclock, divclock, timerclock, syncclock, syncfreq, sleeps, checkclock, msgclock, timerfreq, timer, keys, savefd, savereq, loadreq, scale, paused;
Rectangle picr;
Image *bg, *tmp;
Mousectl *mc;
QLock pauselock;
void
message(char *fmt, ...)
@ -177,7 +178,7 @@ keyproc(void *)
if(read(fd, buf, 256) <= 0)
sysfatal("read /dev/kbd: %r");
if(buf[0] == 'c'){
if(strchr(buf, Kesc))
if(utfrune(buf, KF|12) || utfrune(buf, 'o'))
threadexitsall(nil);
if(utfrune(buf, KF|5))
savereq = 1;
@ -192,6 +193,13 @@ keyproc(void *)
s += chartorune(&r, s);
switch(r){
case Kesc:
if(paused)
qunlock(&pauselock);
else
qlock(&pauselock);
paused = !paused;
break;
case KF|12:
threadexitsall(nil);
case Kdown:
keys |= 1<<3;
@ -270,6 +278,10 @@ threadmain(int argc, char** argv)
loadstate("gb.save");
loadreq = 0;
}
if(paused){
qlock(&pauselock);
qunlock(&pauselock);
}
t = step();
clock += t;
ppuclock += t;