summaryrefslogtreecommitdiff
path: root/sys/src/games
diff options
context:
space:
mode:
authorqwx <devnull@localhost>2018-06-13 14:05:19 +0200
committerqwx <devnull@localhost>2018-06-13 14:05:19 +0200
commit09c61204440ea7d23015b09f908e4105b68cc7b6 (patch)
tree8ae66cd8a66317966b20b0765afd5ee11e4a3e8c /sys/src/games
parent382c9ef92cf0830f5639906ffd5f363ecefd670a (diff)
emulators ui: add option for fixed factor scaling and bound scale vertically
Diffstat (limited to 'sys/src/games')
-rw-r--r--sys/src/games/2600/2600.c19
-rw-r--r--sys/src/games/c64/c64.c5
-rw-r--r--sys/src/games/eui.c17
-rw-r--r--sys/src/games/eui.h2
-rw-r--r--sys/src/games/gb/gb.c5
-rw-r--r--sys/src/games/gba/gba.c5
-rw-r--r--sys/src/games/md/md.c19
-rw-r--r--sys/src/games/nes/nes.c20
-rw-r--r--sys/src/games/snes/snes.c20
9 files changed, 76 insertions, 36 deletions
diff --git a/sys/src/games/2600/2600.c b/sys/src/games/2600/2600.c
index 728401d89..17f842ac5 100644
--- a/sys/src/games/2600/2600.c
+++ b/sys/src/games/2600/2600.c
@@ -50,20 +50,27 @@ loadrom(char *name)
}
void
+usage(void)
+{
+ fprint(2, "usage: %s [-a] [-x scale] rom\n", argv0);
+ exits("usage");
+}
+
+void
threadmain(int argc, char **argv)
{
ARGBEGIN {
case 'a':
initaudio();
break;
+ case 'x':
+ fixscale = strtol(EARGF(usage()), nil, 0);
+ break;
default:
- goto usage;
+ usage();
} ARGEND;
- if(argc != 1){
- usage:
- fprint(2, "usage: %s [ -23a ] rom\n", argv0);
- exits("usage");
- }
+ if(argc != 1)
+ usage();
loadrom(argv[0]);
initemu(PICW, PICH, 4, XRGB32, 1, nil);
regkey("a", ' ', 1<<4);
diff --git a/sys/src/games/c64/c64.c b/sys/src/games/c64/c64.c
index 2ca976fe7..439688e8f 100644
--- a/sys/src/games/c64/c64.c
+++ b/sys/src/games/c64/c64.c
@@ -212,7 +212,7 @@ keyproc(void *)
static void
usage(void)
{
- fprint(2, "usage: %s [ -23a ] [ rom ]\n", argv0);
+ fprint(2, "usage: %s [-Nap] [-c cart] [-t tape] [-d bindir] [-x scale] rom\n", argv0);
exits("usage");
}
@@ -237,6 +237,9 @@ threadmain(int argc, char **argv)
case 'd':
bindir = strdup(EARGF(usage()));
break;
+ case 'x':
+ fixscale = strtol(EARGF(usage()), nil, 0);
+ break;
default:
usage();
} ARGEND;
diff --git a/sys/src/games/eui.c b/sys/src/games/eui.c
index 8bd05e850..422d02d78 100644
--- a/sys/src/games/eui.c
+++ b/sys/src/games/eui.c
@@ -12,7 +12,7 @@ u64int keys, keys2;
int trace, paused;
int savereq, loadreq;
QLock pauselock;
-int scale, warp10;
+int scale, fixscale, warp10;
uchar *pic;
Rectangle picr;
Mousectl *mc;
@@ -188,11 +188,15 @@ screeninit(void)
{
Point p;
- scale = Dx(screen->r) / vwdx;
- if(scale <= 0)
- scale = 1;
- else if(scale > 16)
- scale = 16;
+ if(!fixscale){
+ scale = Dx(screen->r) / vwdx;
+ if(Dy(screen->r) / vwdy < scale)
+ scale = Dy(screen->r) / vwdy;
+ if(scale <= 0)
+ scale = 1;
+ else if(scale > 16)
+ scale = 16;
+ }
p = divpt(addpt(screen->r.min, screen->r.max), 2);
picr = Rpt(subpt(p, Pt(scale * vwdx/2, scale * vwdy/2)),
addpt(p, Pt(scale * vwdx/2, scale * vwdy/2)));
@@ -319,5 +323,6 @@ initemu(int dx, int dy, int bpp, ulong chan, int dokey, void(*kproc)(void*))
if(kproc == nil)
proccreate(joyproc, nil, mainstacksize);
bg = allocimage(display, Rect(0, 0, 1, 1), screen->chan, 1, 0xCCCCCCFF);
+ scale = fixscale;
screeninit();
}
diff --git a/sys/src/games/eui.h b/sys/src/games/eui.h
index 949cf7cb2..89d6fafbb 100644
--- a/sys/src/games/eui.h
+++ b/sys/src/games/eui.h
@@ -7,7 +7,7 @@ extern u64int keys, keys2;
extern int trace, paused;
extern int savereq, loadreq;
extern QLock pauselock;
-extern int scale, warp10;
+extern int scale, fixscale, warp10;
extern uchar *pic;
void* emalloc(ulong);
diff --git a/sys/src/games/gb/gb.c b/sys/src/games/gb/gb.c
index b82729023..5e038ddf4 100644
--- a/sys/src/games/gb/gb.c
+++ b/sys/src/games/gb/gb.c
@@ -221,7 +221,7 @@ flush(void)
void
usage(void)
{
- fprint(2, "usage: %s [-23aTcd] [-C col0,col1,col2,col3] rom\n", argv0);
+ fprint(2, "usage: %s [-aTcd] [-C col0,col1,col2,col3] [-x scale] rom\n", argv0);
exits("usage");
}
@@ -277,6 +277,9 @@ threadmain(int argc, char **argv)
case 'C':
colparse(EARGF(usage()));
break;
+ case 'x':
+ fixscale = strtol(EARGF(usage()), nil, 0);
+ break;
default:
usage();
} ARGEND;
diff --git a/sys/src/games/gba/gba.c b/sys/src/games/gba/gba.c
index ec8c1bc7a..a306c756a 100644
--- a/sys/src/games/gba/gba.c
+++ b/sys/src/games/gba/gba.c
@@ -220,7 +220,7 @@ flush(void)
void
usage(void)
{
- fprint(2, "usage: %s [-aT] [-s savetype] [-b biosfile] rom\n", argv0);
+ fprint(2, "usage: %s [-a] [-s savetype] [-b biosfile] [-x scale] rom\n", argv0);
exits("usage");
}
@@ -243,6 +243,9 @@ threadmain(int argc, char **argv)
case 'b':
biosfile = strdup(EARGF(usage()));
break;
+ case 'x':
+ fixscale = strtol(EARGF(usage()), nil, 0);
+ break;
default:
usage();
} ARGEND;
diff --git a/sys/src/games/md/md.c b/sys/src/games/md/md.c
index 2c0ed3fda..e9060e61c 100644
--- a/sys/src/games/md/md.c
+++ b/sys/src/games/md/md.c
@@ -103,6 +103,13 @@ loadrom(char *file)
}
void
+usage(void)
+{
+ fprint(2, "usage: %s [-a] [-x scale] rom\n", argv0);
+ exits("usage");
+}
+
+void
threadmain(int argc, char **argv)
{
int t;
@@ -111,14 +118,14 @@ threadmain(int argc, char **argv)
case 'a':
initaudio();
break;
+ case 'x':
+ fixscale = strtol(EARGF(usage()), nil, 0);
+ break;
default:
- ;
+ usage();
} ARGEND;
-
- if(argc != 1){
- fprint(2, "usage: %s [-23a] rom\n", argv0);
- threadexitsall("usage");
- }
+ if(argc < 1)
+ usage();
loadrom(*argv);
initemu(320, 224, 4, XRGB32, 1, nil);
regkey("a", 'c', 1<<5);
diff --git a/sys/src/games/nes/nes.c b/sys/src/games/nes/nes.c
index 38984efff..92c470f21 100644
--- a/sys/src/games/nes/nes.c
+++ b/sys/src/games/nes/nes.c
@@ -118,6 +118,13 @@ loadrom(char *file, int sflag)
}
void
+usage(void)
+{
+ fprint(2, "usage: %s [-aos] [-x scale] rom\n", argv0);
+ exits("usage");
+}
+
+void
threadmain(int argc, char **argv)
{
int t, sflag;
@@ -133,15 +140,14 @@ threadmain(int argc, char **argv)
case 's':
sflag = 1;
break;
+ case 'x':
+ fixscale = strtol(EARGF(usage()), nil, 0);
+ break;
default:
- goto usage;
+ usage();
} ARGEND;
-
- if(argc != 1){
- usage:
- fprint(2, "usage: %s [-23aos] rom\n", argv0);
- threadexitsall("usage");
- }
+ if(argc < 1)
+ usage();
loadrom(argv[0], sflag);
initemu(256, 240 - oflag * 16, 4, XRGB32, 1, nil);
regkey("b", 'z', 1<<1);
diff --git a/sys/src/games/snes/snes.c b/sys/src/games/snes/snes.c
index 7d37fcbc3..ba9040845 100644
--- a/sys/src/games/snes/snes.c
+++ b/sys/src/games/snes/snes.c
@@ -109,6 +109,13 @@ loadbat(char *file)
}
void
+usage(void)
+{
+ fprint(2, "usage: %s [-23ahmsT] [-x scale] rom\n", argv0);
+ exits("usage");
+}
+
+void
threadmain(int argc, char **argv)
{
int t;
@@ -129,15 +136,14 @@ threadmain(int argc, char **argv)
case 'h':
hirom++;
break;
+ case 'x':
+ fixscale = strtol(EARGF(usage()), nil, 0);
+ break;
default:
- goto usage;
+ usage();
} ARGEND;
-
- if(argc != 1){
-usage:
- fprint(2, "usage: %s [-23ahmsT] rom\n", argv0);
- threadexitsall("usage");
- }
+ if(argc < 1)
+ usage();
loadrom(argv[0]);
initemu(256, 239, 2, RGB15, !mouse, nil);
regkey("b", 'z', 1<<31);