diff options
author | Ian C <ianc@noddybox.co.uk> | 2016-06-06 20:58:33 +0100 |
---|---|---|
committer | Ian C <ianc@noddybox.co.uk> | 2016-06-06 20:58:33 +0100 |
commit | 66149104ae056b372b2bf4672704d3b62db412f3 (patch) | |
tree | ebc7e72335fd0510f87a995853072f24f10da218 /src/nesout.c | |
parent | 64286bce86befc5b48a65c60d871dca8ef269257 (diff) | |
parent | 6ae9e74d5b9e8cc69c33b7f707399b69632026d9 (diff) |
Merge branch 'master' of https://github.com/noddybox/casm
Diffstat (limited to 'src/nesout.c')
-rw-r--r-- | src/nesout.c | 45 |
1 files changed, 38 insertions, 7 deletions
diff --git a/src/nesout.c b/src/nesout.c index 44ab1af..8152239 100644 --- a/src/nesout.c +++ b/src/nesout.c @@ -45,7 +45,9 @@ enum option_t { OPT_VECTOR, OPT_TV_FORMAT, - OPT_MAPPER + OPT_MAPPER, + OPT_MIRROR, + OPT_BATTERY_RAM }; static const ValueTable option_set[] = @@ -53,6 +55,8 @@ static const ValueTable option_set[] = {"nes-vector", OPT_VECTOR}, {"nes-tv-format", OPT_TV_FORMAT}, {"nes-mapper", OPT_MAPPER}, + {"nes-mirror", OPT_MIRROR}, + {"nes-battery-ram", OPT_BATTERY_RAM}, {NULL} }; @@ -63,6 +67,19 @@ typedef enum VECTOR_BRK } VectorType; +typedef enum +{ + MIRROR_HORIZONTAL = 0x00, + MIRROR_VERTICAL = 0x01, + MIRROR_VRAM = 0x08, +} MirrorType; + +typedef enum +{ + PAL = 1, + NTSC = 0 +} TVFormat; + static ValueTable vector_table[] = { {"reset", VECTOR_RESET}, @@ -71,11 +88,13 @@ static ValueTable vector_table[] = {NULL} }; -typedef enum +static ValueTable mirror_table[] = { - PAL = 1, - NTSC = 0 -} TVFormat; + {"horizontal", MIRROR_HORIZONTAL}, + {"vertical", MIRROR_VERTICAL}, + {"vram", MIRROR_VRAM}, + {NULL} +}; static ValueTable format_table[] = { @@ -90,9 +109,11 @@ static struct int vector[3]; TVFormat tv_format; int mapper; + MirrorType mirror; + int battery_ram; } option = { - {-1, -1, -1}, PAL, 0 + {-1, -1, -1}, PAL, 0, MIRROR_HORIZONTAL, FALSE }; @@ -173,6 +194,15 @@ CommandStatus NESOutputSetOption(int opt, int argc, char *argv[], option.mapper = f; break; + case OPT_MIRROR: + CMD_TABLE(argv[0], mirror_table, val); + option.mirror = val->value; + break; + + case OPT_BATTERY_RAM: + option.battery_ram = ParseTrueFalse(argv[0], FALSE); + break; + default: break; } @@ -302,7 +332,8 @@ int NESOutput(const char *filename, const char *filename_bank, fputc(num_vrom, fp); - fputc((option.mapper & 0x0f) << 4, fp); + fputc(((option.mapper & 0x0f) << 4) | option.mirror | + (option.battery_ram ? 0x02 : 0x00), fp); fputc(option.mapper & 0xf0, fp); fputc(0, fp); |