1
0
mirror of https://github.com/RevCurtisP/C02.git synced 2024-11-24 15:31:17 +00:00

Added -w and -a options to run6502

This commit is contained in:
Curtis F Kaylor 2021-09-25 14:01:44 -04:00
parent 71fa944e55
commit af46a68f26

View File

@ -382,8 +382,21 @@ static int doSave(int argc, char **argv, M6502 *mpu) /* -l addr size file */
return 3; return 3;
} }
static int doArgs(int argc, char **argv, M6502 *mpu) /* -a addr */ static int doArgs(int argc, char **argv, M6502 *mpu) /* -a addr */
{ {
int addr = htol(argv[1]);
int size = strlen(argv[2]);
int quoted = 0;
char *s = malloc(size);
strcpy(s, argv[2]);
for(int i=0; i<size; i++) {
if (s[i] == '\'') quoted = !quoted;
else if (!quoted && s[i]==' ') s[i] = 0;
}
write(mpu, addr, size, s);
return 2;
return 1; return 1;
} }
@ -391,9 +404,9 @@ static int doWrite(int argc, char **argv, M6502 *mpu) /* -a addr "string" */
{ {
int addr = htol(argv[1]); int addr = htol(argv[1]);
int size = strlen(argv[2]); int size = strlen(argv[2]);
char *args = malloc(size); char *s = malloc(size);
strcpy(args, argv[1]); strcpy(s, argv[2]);
write(mpu, addr, size, args); write(mpu, addr, size, s);
return 2; return 2;
} }
@ -593,49 +606,49 @@ int main(int argc, char **argv)
} }
else else
while (++argv, --argc > 0) while (++argv, --argc > 0)
{ {
int n= 0; int n= 0;
if (!strcmp(*argv, "-a")) n= doArgs(argc, argv, mpu); if (!strcmp(*argv, "-a")) n= doArgs(argc, argv, mpu);
else if (!strcmp(*argv, "-B")) bTraps= 1; else if (!strcmp(*argv, "-B")) bTraps= 1;
else if (!strcmp(*argv, "-d")) n= doDisassemble(argc, argv, mpu); else if (!strcmp(*argv, "-d")) n= doDisassemble(argc, argv, mpu);
else if (!strcmp(*argv, "-C")) n= doCtrap(argc, argv, mpu); else if (!strcmp(*argv, "-C")) n= doCtrap(argc, argv, mpu);
else if (!strcmp(*argv, "-D")) n= doDebug(argc, argv, mpu); else if (!strcmp(*argv, "-D")) n= doDebug(argc, argv, mpu);
else if (!strcmp(*argv, "-E")) n= doEtrap(argc, argv, mpu); else if (!strcmp(*argv, "-E")) n= doEtrap(argc, argv, mpu);
else if (!strcmp(*argv, "-F")) n= doFtrap(argc, argv, mpu); else if (!strcmp(*argv, "-F")) n= doFtrap(argc, argv, mpu);
else if (!strcmp(*argv, "-G")) n= doGtrap(argc, argv, mpu); else if (!strcmp(*argv, "-G")) n= doGtrap(argc, argv, mpu);
else if (!strcmp(*argv, "-h")) n= doHelp(argc, argv, mpu); else if (!strcmp(*argv, "-h")) n= doHelp(argc, argv, mpu);
else if (!strcmp(*argv, "-i")) n= doLoadInterpreter(argc, argv, mpu); else if (!strcmp(*argv, "-i")) n= doLoadInterpreter(argc, argv, mpu);
else if (!strcmp(*argv, "-I")) n= doIRQ(argc, argv, mpu); else if (!strcmp(*argv, "-I")) n= doIRQ(argc, argv, mpu);
else if (!strcmp(*argv, "-K")) n= doKtrap(argc, argv, mpu); else if (!strcmp(*argv, "-K")) n= doKtrap(argc, argv, mpu);
else if (!strcmp(*argv, "-l")) n= doLoad(argc, argv, mpu); else if (!strcmp(*argv, "-l")) n= doLoad(argc, argv, mpu);
else if (!strcmp(*argv, "-m")) n= doDump(argc, argv, mpu); else if (!strcmp(*argv, "-m")) n= doDump(argc, argv, mpu);
else if (!strcmp(*argv, "-M")) n= doMtrap(argc, argv, mpu); else if (!strcmp(*argv, "-M")) n= doMtrap(argc, argv, mpu);
else if (!strcmp(*argv, "-N")) n= doNMI(argc, argv, mpu); else if (!strcmp(*argv, "-N")) n= doNMI(argc, argv, mpu);
else if (!strcmp(*argv, "-P")) n= doPtrap(argc, argv, mpu); else if (!strcmp(*argv, "-P")) n= doPtrap(argc, argv, mpu);
else if (!strcmp(*argv, "-R")) n= doRST(argc, argv, mpu); else if (!strcmp(*argv, "-R")) n= doRST(argc, argv, mpu);
else if (!strcmp(*argv, "-S")) n= doStrap(argc, argv, mpu); else if (!strcmp(*argv, "-S")) n= doStrap(argc, argv, mpu);
else if (!strcmp(*argv, "-s")) n= doSave(argc, argv, mpu); else if (!strcmp(*argv, "-s")) n= doSave(argc, argv, mpu);
else if (!strcmp(*argv, "-v")) n= doVersion(argc, argv, mpu); else if (!strcmp(*argv, "-v")) n= doVersion(argc, argv, mpu);
else if (!strcmp(*argv, "-w")) n= doWrite(argc, argv, mpu); else if (!strcmp(*argv, "-w")) n= doWrite(argc, argv, mpu);
else if (!strcmp(*argv, "-X")) n= doXtrap(argc, argv, mpu); else if (!strcmp(*argv, "-X")) n= doXtrap(argc, argv, mpu);
else if (!strcmp(*argv, "-x")) exit(0); else if (!strcmp(*argv, "-x")) exit(0);
else if ('-' == **argv) usage(1); else if ('-' == **argv) usage(1);
else else
{ {
/* doBtraps() left 0x8000+0x4000 in bank 0, so load */ /* doBtraps() left 0x8000+0x4000 in bank 0, so load */
/* additional images starting at 15 and work down */ /* additional images starting at 15 and work down */
static int bankSel= 0x0F; static int bankSel= 0x0F;
if (!bTraps) usage(1); if (!bTraps) usage(1);
if (bankSel < 0) fail("too many images"); if (bankSel < 0) fail("too many images");
if (!load(mpu, 0x8000, argv[0])) pfail(argv[0]); if (!load(mpu, 0x8000, argv[0])) pfail(argv[0]);
memcpy(bank[bankSel--], memcpy(bank[bankSel--],
0x8000 + mpu->memory, 0x8000 + mpu->memory,
0x4000); 0x4000);
n= 1; n= 1;
} }
argc -= n; argc -= n;
argv += n; argv += n;
} }
if (bTraps) if (bTraps)
doBtraps(0, 0, mpu); doBtraps(0, 0, mpu);