From 2b5f96c7d028982e21ae28d17a2ad19dc82f705e Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Sun, 27 Oct 2019 22:37:20 -0400 Subject: [PATCH 01/42] Added CPU Type and Numeric Literal String Escapes --- src/c02.c | 411 ++++++++++++++++++++++++++------------------------- src/common.h | 191 ++++++++++++------------ src/parse.c | 23 ++- 3 files changed, 324 insertions(+), 301 deletions(-) diff --git a/src/c02.c b/src/c02.c index d5ce76b..be0a59e 100644 --- a/src/c02.c +++ b/src/c02.c @@ -1,203 +1,208 @@ -/************************************************************** - * C02 Compiler - (C) 2013 Curtis F Kaylor * - * * - * C02 is a simpified C-like language designed for the 6502 * - * * - * This Compiler generates crasm compatible assembly language * - * * - **************************************************************/ - -#include -#include -#include -#include -#include - -#include "common.h" //Common Code used by all Modules -#include "files.h" //Open and Close Files -#include "asm.h" //Write out Assembly Language -#include "parse.h" //General Code Parsing -#include "vars.h" //Variable Parsing, Lookup, and Allocation -#include "expr.h" //Expression Parsing -#include "label.h" //Label Parsing, Generation, and Lookup -#include "cond.h" //Conditional Parsing -#include "stmnt.h" //Statement Compiling Code -#include "dclrtn.h" //Statement Compiling Code -#include "include.h" //Include File Parsing - -/* Initilize Compiler Variables */ -void init(void) { - initim(); //Initialize Elapsed Time - DEBUG("Initializing Compiler Variables\n",0) - concnt = 0; //Number of Constants Defined - varcnt = 0; //Number of Variables in Table - lblcnt = 0; //Number of Labels in stack - padcnt = 0; //Number of Padding Bytes at End - curcol = 0; //Current Column in Source Code - curlin = 0; //Current Line in Source Code - alcvar = TRUE; //Allocate Variables Flag - inblck = FALSE; //Multiline Block Flag - infunc = FALSE; //Inside Function Definition - xstmnt[0] = 0; //Expected Statement - nxtwrd[0] = 0; //Next Word (from DEFINE lookup) - nxtptr = 0; //Pointer to next character in nxtwrd - vrwrtn = FALSE; //Variables Written Flag - rambas = 0; //RAM Base Address - wrtbas = 0; //Write Base Address - zpaddr = 0; //Current Zero-Page Address - invasc = FALSE; //Invert ASCII Flag - mskasc = FALSE; //Set High Bit Flag - fcase = FALSE; //First Case Statement Flag - wrtofs[0] = 0; //Write Offset - xsnvar[0] = 0; //Assigned X Variable Name - ysnvar[0] = 0; //Assigned Y Variable Name - subcnt = 0; //Include Subdirectories - strcpy(incdir, "../include/"); -} - -/* Reads and parses the next Word in Source File */ -void pword(void) { - lsrtrn = FALSE; //Clear RETURN flag - getwrd(); - DEBUG("Parsing Word '%s'\n", word) - if (xstmnt[0]) { - if (wordis(xstmnt)) xstmnt[0] = 0; //Clear xstmnt - else ERROR("Expected '%s' statement\n", xstmnt, EXIT_FAILURE) - } - if (!pmodfr() && !ptype(MTNONE)) pstmnt(); //Parse Statement -} - -/* Process a directive */ -void pdrctv(void) { - skpchr(); //skip '#' - CCMNT('#'); - getwrd(); //read directive into word - DEBUG("Processing directive '%s'\n", word) - if (wordis("DEFINE")) pdefin(); //Parse Define - else if (wordis("INCLUDE")) pincfl(); //Parse Include File - else if (wordis("ERROR")) ERROR("Error \n", 0, EXIT_FAILURE) - else if (wordis("PRAGMA")) pprgma(); - else ERROR("Illegal directive %s encountered\n", word, EXIT_FAILURE) -} - -void prolog(void) { - DEBUG("Writing Assembly Prolog\n", 0) - asmlin(CPUOP,CPUARG); - setcmt("Program "); - addcmt(srcnam); - cmtlin(); -} - -void epilog(void) { - if (!vrwrtn) wvrtbl(); //Write Variable Table - if (padcnt) { - SCMNT("PADDING BYTES") - sprintf(word, "$%hhX", padcnt); - asmlin(STROP, word); - } -} - -/* Compile Source Code*/ -void compile(void) { - DEBUG("Starting Compilation\n", 0) - prolog(); - phdrfl(); //Process Header File specified on Command Line - skpchr(); - DEBUG("Parsing Code\n", 0) - while (TRUE) { - skpspc(); - if (match(EOF)) break; //Stop Parsing (End of File) - else if (match('}')) endblk(TRUE); //End Multi-Line Program Block - else if (match('#')) pdrctv(); //Parse Directive - else if (match('/')) skpcmt(TRUE); //Skip Comment - else if (isalph()) pword(); //Parse Word - else ERROR("Unexpected character '%c'\n", nxtchr, EXIT_FAILURE) - } - epilog(); -} - -/* Display "Usage" text and exit*/ -void usage(void) { - printf("Usage: c02 sourcefile.c02\n"); - exit(EXIT_FAILURE); -} - -/* Parse Command Line Option */ -int popt(int arg, int argc, char *argv[]) { - char argstr[32]; //Argument String - char opt; //Option - char optarg[32]; //Option Argument - strncpy (argstr, argv[arg], 31); - if (strlen(argstr) != 2) ERROR("malformed option %s\n", argstr, EXIT_FAILURE) - opt = toupper(argstr[1]); - if (strchr("HS", opt)) { - if (++arg >= argc) ERROR("Option -%c requires an argument\n", opt, EXIT_FAILURE) - strncpy(optarg, argv[arg], 31); - } - DEBUG("Processing Command Line Option -%c\n", argstr[1]) - switch (opt) { - case 'H': - strcpy(hdrnam, optarg); - DEBUG("Header Name set to '%s'\n", hdrnam) - break; - case 'S': - strcpy(subdir[subcnt], optarg); - DEBUG("subdir[%d] ", subcnt) - DEBUG("set to '%s'\n", subdir[subcnt]) - subcnt++; - break; - default: - ERROR("Illegal option -%c\n", opt, EXIT_FAILURE) - } - return arg; -} - -/* Parse Command Line Arguments * - * Sets: srcnam - Source File Name (from first arg) * - * outnam - Output File Name (from optional second arg) */ -void pargs(int argc, char *argv[]) { - int arg; - srcnam[0] = 0; - outnam[0] = 0; - DEBUG("Parsing %d arguments\n", argc) - if (argc == 0) usage(); //at least one argument is required - for (arg = 1; arg +#include +#include +#include +#include + +#include "common.h" //Common Code used by all Modules +#include "files.h" //Open and Close Files +#include "asm.h" //Write out Assembly Language +#include "parse.h" //General Code Parsing +#include "vars.h" //Variable Parsing, Lookup, and Allocation +#include "expr.h" //Expression Parsing +#include "label.h" //Label Parsing, Generation, and Lookup +#include "cond.h" //Conditional Parsing +#include "stmnt.h" //Statement Compiling Code +#include "dclrtn.h" //Statement Compiling Code +#include "include.h" //Include File Parsing + +/* Initilize Compiler Variables */ +void init(void) { + initim(); //Initialize Elapsed Time + DEBUG("Initializing Compiler Variables\n",0) + concnt = 0; //Number of Constants Defined + varcnt = 0; //Number of Variables in Table + lblcnt = 0; //Number of Labels in stack + padcnt = 0; //Number of Padding Bytes at End + curcol = 0; //Current Column in Source Code + curlin = 0; //Current Line in Source Code + alcvar = TRUE; //Allocate Variables Flag + inblck = FALSE; //Multiline Block Flag + infunc = FALSE; //Inside Function Definition + xstmnt[0] = 0; //Expected Statement + nxtwrd[0] = 0; //Next Word (from DEFINE lookup) + nxtptr = 0; //Pointer to next character in nxtwrd + vrwrtn = FALSE; //Variables Written Flag + rambas = 0; //RAM Base Address + wrtbas = 0; //Write Base Address + zpaddr = 0; //Current Zero-Page Address + invasc = FALSE; //Invert ASCII Flag + mskasc = FALSE; //Set High Bit Flag + fcase = FALSE; //First Case Statement Flag + wrtofs[0] = 0; //Write Offset + xsnvar[0] = 0; //Assigned X Variable Name + ysnvar[0] = 0; //Assigned Y Variable Name + subcnt = 0; //Include Subdirectories + strcpy(cputyp, CPUARG); //Set CPU Type to Default Value + strcpy(incdir, "../include/"); +} + +/* Reads and parses the next Word in Source File */ +void pword(void) { + lsrtrn = FALSE; //Clear RETURN flag + getwrd(); + DEBUG("Parsing Word '%s'\n", word) + if (xstmnt[0]) { + if (wordis(xstmnt)) xstmnt[0] = 0; //Clear xstmnt + else ERROR("Expected '%s' statement\n", xstmnt, EXIT_FAILURE) + } + if (!pmodfr() && !ptype(MTNONE)) pstmnt(); //Parse Statement +} + +/* Process a directive */ +void pdrctv(void) { + skpchr(); //skip '#' + CCMNT('#'); + getwrd(); //read directive into word + DEBUG("Processing directive '%s'\n", word) + if (wordis("DEFINE")) pdefin(); //Parse Define + else if (wordis("INCLUDE")) pincfl(); //Parse Include File + else if (wordis("ERROR")) ERROR("Error \n", 0, EXIT_FAILURE) + else if (wordis("PRAGMA")) pprgma(); + else ERROR("Illegal directive %s encountered\n", word, EXIT_FAILURE) +} + +void prolog(void) { + DEBUG("Writing Assembly Prolog\n", 0) + asmlin(CPUOP,cputyp); + setcmt("Program "); + addcmt(srcnam); + cmtlin(); +} + +void epilog(void) { + if (!vrwrtn) wvrtbl(); //Write Variable Table + if (padcnt) { + SCMNT("PADDING BYTES") + sprintf(word, "$%hhX", padcnt); + asmlin(STROP, word); + } +} + +/* Compile Source Code*/ +void compile(void) { + DEBUG("Starting Compilation\n", 0) + prolog(); + phdrfl(); //Process Header File specified on Command Line + skpchr(); + DEBUG("Parsing Code\n", 0) + while (TRUE) { + skpspc(); + if (match(EOF)) break; //Stop Parsing (End of File) + else if (match('}')) endblk(TRUE); //End Multi-Line Program Block + else if (match('#')) pdrctv(); //Parse Directive + else if (match('/')) skpcmt(TRUE); //Skip Comment + else if (isalph()) pword(); //Parse Word + else ERROR("Unexpected character '%c'\n", nxtchr, EXIT_FAILURE) + } + epilog(); +} + +/* Display "Usage" text and exit*/ +void usage(void) { + printf("Usage: c02 sourcefile.c02\n"); + exit(EXIT_FAILURE); +} + +/* Parse Command Line Option */ +int popt(int arg, int argc, char *argv[]) { + char argstr[32]; //Argument String + char opt; //Option + char optarg[32]; //Option Argument + strncpy (argstr, argv[arg], 31); + if (strlen(argstr) != 2) ERROR("malformed option %s\n", argstr, EXIT_FAILURE) + opt = toupper(argstr[1]); + if (strchr("CHS", opt)) { + if (++arg >= argc) ERROR("Option -%c requires an argument\n", opt, EXIT_FAILURE) + strncpy(optarg, argv[arg], 31); + } + DEBUG("Processing Command Line Option -%c\n", argstr[1]) + switch (opt) { + case 'C': + strcpy(cputyp, optarg); + DEBUG("CPU Type set to '%s'\n", cputyp) + break; + case 'H': + strcpy(hdrnam, optarg); + DEBUG("Header Name set to '%s'\n", hdrnam) + break; + case 'S': + strcpy(subdir[subcnt], optarg); + DEBUG("subdir[%d] ", subcnt) + DEBUG("set to '%s'\n", subdir[subcnt]) + subcnt++; + break; + default: + ERROR("Illegal option -%c\n", opt, EXIT_FAILURE) + } + return arg; +} + +/* Parse Command Line Arguments * + * Sets: srcnam - Source File Name (from first arg) * + * outnam - Output File Name (from optional second arg) */ +void pargs(int argc, char *argv[]) { + int arg; + srcnam[0] = 0; + outnam[0] = 0; + DEBUG("Parsing %d arguments\n", argc) + if (argc == 0) usage(); //at least one argument is required + for (arg = 1; arg Date: Sun, 27 Oct 2019 22:39:41 -0400 Subject: [PATCH 02/42] Added Resume statement --- src/stmnt.c | 1080 ++++++++++++++++++++++++++------------------------- 1 file changed, 544 insertions(+), 536 deletions(-) diff --git a/src/stmnt.c b/src/stmnt.c index 63746a9..b3884e2 100644 --- a/src/stmnt.c +++ b/src/stmnt.c @@ -1,536 +1,544 @@ -/************************************ - * C02 Statement Compiling Routines * - ************************************/ - -#include -#include -#include -#include -#include - -#include "common.h" -#include "asm.h" -#include "parse.h" -#include "label.h" -#include "vars.h" -#include "cond.h" -#include "expr.h" -#include "stmnt.h" - -/* Begin Program Block */ -void bgnblk(char blkchr) { - DEBUG("Beginning program block\n", 0) - if (blkchr) { - expect(blkchr); - inblck = TRUE; - } - else - inblck = look('{'); - DEBUG("Set INBLCK to %d\n", inblck) - setblk(inblck); -} - -/* End Program Block * - * Args: blkflg: End of Multiline Block */ -void endblk(int blkflg) { - int lbtype; - DEBUG("Ending program block with flag %d\n", blkflg) - expect('}'); //Block End Character - DEBUG("Found inblck set to %d\n", inblck) - if (inblck != blkflg) ERROR("Encountered '}' without matching '{'\n", 0, EXIT_FAILURE) - lbtype = poplbl(); - if (lbtype == LTDO) pdowhl(); //Parse While at End of Do Loop -} - -/* Parse Shortcut If */ -void prssif(char trmntr) { - newlbl(cndlbl); //Create Label for "if FALSE" expression - prscnd(')', FALSE); //Parse Condition - expect('?'); - prsxpr(':'); //Parse "if TRUE" expression - newlbl(skplbl); //Create End of Expression Label - asmlin("JMP", skplbl); //Jump over "if FALSE" expression - setlbl(cndlbl); //Emit "if FALSE" label - prsxpr(trmntr); //Parse "if FALSE" expression - setlbl(skplbl); //Emit End of Expression Label -} - -/* Process Array Index */ -void prcidx(int idxtyp, char *name, char *index) -{ - if (strlen(index)) { - if (idxtyp == LITERAL) { - strcat(name, "+"); - strcat(name, index); - } - else { - asmlin("LDX", index); - strcat(name,",X"); - } - } -} - -/* Set word to assignment variable * - * adding write offset (if set) */ -void setasn(char *name) { - strcpy(word, name); - if (wrtofs[0]) strcat(word, wrtofs); -} - -/* Process Assignment of X and Y variables */ -void prcaxy(void) { - DEBUG("Processing X assignment variable '%s'\n", xsnvar) - if (xsnvar[0]) { - setasn(xsnvar); - if (strlen(xsnidx)) { //Process X variable Index - if (xsnivt != LITERAL) { - asmlin("PHA", ""); //Save Accumulator - asmlin("TXA", ""); //Transfer Return Value to Accumulator - prcidx(xsnivt, word, xsnidx); //Process Index - asmlin("STA", word); //Store Return Value - asmlin("PLA", ""); //Restore Accumulator - } else { - prcidx(xsnivt, word, xsnidx); //Process Index - asmlin("STX", word); //Store Return Value - } - } - else asmlin("STX", word); //Store Return Value - xsnvar[0] = 0; - } - DEBUG("Processing Y assignment variable '%s'\n", ysnvar) - if (ysnvar[0]) { - setasn(ysnvar); - if (strlen(ysnidx)) prcidx(ysnivt, word, ysnidx); //Process Index - asmlin("STY", word); //Store Return Value - ysnvar[0] = 0; - } -} - -/* Process Assignment */ -void prcasn(char trmntr) { - expect('='); - if (look('(')) prssif(trmntr); //Parse Shortcut If - else prsxpr(trmntr); //Parse Expression - prcaxy(); //Process X and Y assignments - DEBUG("Checking if '%s' is a register\n", asnvar) - if (strcmp(asnvar, "X")==0) asmlin("TAX", ""); - else if (strcmp(asnvar, "Y")==0) asmlin("TAY", ""); - else if (strcmp(asnvar, "A")==0) return; - DEBUG("Processing assignment variable '%s'\n", asnvar) - setasn(asnvar); - if (asnidx[0]) prcidx(asnivt, word, asnidx); //Process Index - asmlin("STA", word); //Store Return Value -} - -/* Process Integer Assignment */ -void prcasi(char trmntr) { - DEBUG("Processing Integer Assignment\n", 0); - expect('='); - strcpy(xsnvar, vrname); //Set Assignment LSB - strcpy(ysnvar, vrname); strcat(ysnvar, "+1"); //Set Assignment MSB - ysnidx[0] = 0; //No Y Index - prsxpi(trmntr, TRUE); //Parse Integer Expression, Allowing Functions - prcaxy(); -} - -/* Parse and Return Array Index and Type */ -int getidx(char* idx) { - prsidx(TRUE); //Parse Array Index - if (valtyp == LITERAL) strncpy(idx, word, VARLEN); - else strncpy(idx, value, VARLEN); - DEBUG("Parsed index %s\n", idx) - return valtyp; -} - -/* Process Assignment Variable(s) */ -void prcavr(char trmntr) { - chksym(TRUE, FALSE, word); - DEBUG("Processing assignment of variable %s\n", word); - strcpy(vrname, word); //save variable to assign to - if (valtyp == STRUCTURE) prsmbr(vrname); //Updates word and vartyp - if (vartyp == VTINT) { - if (ispopr()) {if (prspst(trmntr, TRUE, vrname, "")) expctd("post operator");} - else prcasi(trmntr); //Process Integer Assignment - return; - } - strcpy(asnvar, vrname); - asntyp = valtyp; //Set Assigned Variable Type - DEBUG("Set STA variable to %s\n", asnvar) - if (asntyp == VARIABLE && look(';')) { - asmlin("STA", asnvar); - return; - } - if (asntyp == ARRAY) asnivt = getidx(asnidx); //Get Array Index and Type - else asnidx[0] = 0; - DEBUG("Set STA index to '%s'", asnidx) DETAIL(" and type to %d\n", asnivt) - if (ispopr()) { - if (prspst(trmntr, FALSE, asnvar, asnidx)) expctd("post operator"); - return; - } - if (look(',')) { - if (asntyp == REGISTER) ERROR("Register %s not allowed in plural assignment\n", asnvar, EXIT_FAILURE) - prsvar(FALSE, FALSE); //get variable name - strcpy(ysnvar, word); - DEBUG("Set STY variable to %s\n", ysnvar) - if (valtyp == ARRAY) ysnivt = getidx(ysnidx); //Get Array Index and Type - else ysnidx[0] = 0; - DEBUG("Set STY index to '%s'", ysnidx) DETAIL(" and type to %d\n", ysnivt) - if (look(',')) { - prsvar(FALSE, FALSE); //get variable name - strcpy(xsnvar, word); - DEBUG("Set STX variable to %s\n", xsnvar) - //if (valtyp == ARRAY) ERROR("Array element not allowed in third assignment\n", 0, EXIT_FAILURE) - if (valtyp == ARRAY) xsnivt = getidx(xsnidx); //Get Array Index and Type - else xsnidx[0] = 0; - } - } - prcasn(trmntr); -} - -/* Parse 'asm' String Parameter */ -void pasmst(char trmntr) { - skpspc(); //Skip Spaces - if (!match('"')) expctd("string"); - getstr(); - skpspc(); - expect(trmntr); -} - -/* Parse and Compile 'asm' statement */ -void pasm(void) { - char opcode[LINELEN]; - expect('('); - pasmst(','); - if (strlen(word)) setlbl(word); - pasmst(','); - strcpy(opcode, word); - pasmst(')'); - expect(';'); - asmlin(opcode, word); -} - -/* Parse and Compile an Assignment */ -void prsasn(char trmntr) { - getwrd(); //Get Variable to be Assigned - DEBUG("Parsing assignment of word %s\n", word) - prcavr(trmntr); -} - -/* parse and compile 'break'/'continue' statement */ -void pbrcnt(int lbflag) -{ - DEBUG("Parsing BREAK/CONTINUE statement\n", 0) - if (lstlbl(lbflag) < 0) ERROR("Break/continue statement outside of loop\n", 0, EXIT_FAILURE) - DEBUG("Found Label '%s'\n", tmplbl) - asmlin("JMP", tmplbl); - expect(';'); -} - -/* parse and compile 'do' statement */ -void pdo(void) { - DEBUG("Parsing DO statement '%c'\n", nxtchr) - newlbl(endlbl); //Create End Label - pshlbl(LTDWHL, endlbl); //and Push onto Stack - reqlbl(loplbl); //Get or Create/Set Loop Label - pshlbl(LTDO, loplbl); //Push onto Stack - bgnblk(FALSE); //Check For and Begin Block -} - -/* parse and compile 'while' after 'do' statement */ -void pdowhl(void) { - DEBUG("Parsing WHILE after DO '%c'\n", nxtchr) - getwrd(); //Check for While - if (!wordis("WHILE")) expctd("while statement"); - expect('('); - strcpy(cndlbl, loplbl); //Set Conditional Label to Loop Label - prscnd(')', TRUE); //Parse Conditional Expession - poplbl(); //Pop While Conditional Label - setlbl(endlbl); //and Set Label to Emit on Next Line - expect(';'); //Check for End of Statement -} - - -/* parse and compile for statement */ -void pfor(void) { - DEBUG("Parsing FOR statement '%c'\n", nxtchr); - expect('('); - prsasn(';'); //Process Initial Assignment - newlbl(forlbl); //Create For Loop Conditional Label - setlbl(forlbl); //and Set to Emit on Next Line - newlbl(endlbl); //Create End Label - pshlbl(LTEND, endlbl); //and Push onto Stack - newlbl(loplbl); //Create Loop Label - pshlbl(LTLOOP, loplbl); //and Push onto Stack - newlbl(cndlbl); //Create Conditional Label - prscnd(';', TRUE); //Parse Conditional Expession - asmlin("JMP", endlbl); //Jump over Increment - setlbl(loplbl); //Set to Emit on Next Line - prsasn(')'); //Parse Increment Assignment - asmlin("JMP", forlbl); //Jump to Conditional - setlbl(cndlbl); //Emit Label at Start of Loop - bgnblk(FALSE); //Check For and Begin Block -} - -/* parse and compile if statement */ -void pif(void) { - DEBUG("Parsing IF statement\n", 0) - expect('('); - newlbl(cndlbl); //Create New Label - pshlbl(LTIF,cndlbl); //Push Onto Stack - prscnd(')', FALSE); //Parse Conditional Expession - bgnblk(FALSE); //Check For and Begin Block -} - -/* parse and compile else statement */ -void pelse(void) { - DEBUG("Parsing ELSE statement\n", 0) - strcpy(lbltmp, lblasm); //Save Line Label - lblasm[0] = 0; //and Clear It - if (toplbl(skplbl) != LTELSE) { //Get Chained ELSE Label or - newlbl(skplbl); //Create Skip Label - pshlbl(LTELSE, skplbl); //Push Onto Stack - } - asmlin("JMP", skplbl); //Emit Jump over Block Code - strcpy(lblasm, lbltmp); //Restore Line Label - bgnblk(FALSE); //Check For and Begin Block -} - -/* parse and compile if statement */ -void pgoto(void) { - DEBUG("Parsing GOTO statement\n", 0) - if (look('(')) { - DEBUG("Processing Indirect GOTO\n", 0); - prsxpi(')', FALSE); //Parse Integer Expression w/o Assembly - sprintf(word, "(%s)", value); //Set Indirect Argument - } else { - if (!chkadr(ADNONE, FALSE)) getwrd(); - } - expect(';'); - asmlin("JMP", word); -} - -/* parse and compile inline statement */ -void pinlne(void) { - DEBUG("Parsing INLINE statement\n", 0) - do { - DEBUG("Parsing inline parameter\n", 0) - if (look('&')) { - reqvar(FALSE); //Get Variable Name - strcpy(word, "<"); - strcat(word, value); - strcat(word, ", >"); - strcat(word, value); - asmlin(BYTEOP, word); - } - else if (look('"')) { - value[0] = 0; - while (!match('"')) { - CCMNT(nxtchr); - sprintf(word, "$%hhX,", getnxt()); - strcat(value, word); - } - strcat(value,"0"); - CCMNT(nxtchr); - skpchr(); //Skip Terminating Quote - asmlin(BYTEOP, value); - } - else { - prslit(0xFF); //Parse Literal - sprintf(word, "$%hhX", litval); //not needed? - asmlin(BYTEOP, value); - } - } while (look(',')); - expect(';'); -} - -/* parse and compile pop statement */ -void ppop(void) { - DEBUG("Parsing POP statement\n", 0) - do { - if (look('.')) term[0]=0; - else { - reqvar(TRUE); - strcpy(term, value); - chkidx(); - } - asmlin("PLA", ""); //Pop Value off Stack - if (term[0]) asmlin("STA", term); - } while (look(',')); - expect(';'); -} - -/* parse and compile push statement */ -void ppush(void) { - DEBUG("Parsing PUSH statement\n", 0) - do { - if (!chkadr(ADPUSH, TRUE)) { - prsxpr(0); //Parse Expression - asmlin("PHA",""); //Push Result on Stack - } - } while (look(',')); - expect(';'); -} - -/* parse and compile return statement */ -void pretrn(void) { - DEBUG("Parsing RETURN statement\n", 0) - skpspc(); - prsfpr(';'); //Parse Function Return Valuea - asmlin("RTS", ""); - lsrtrn = TRUE; //Set RETURN flag -} - -/* parse and compile select statement */ -void pslct(void) { - DEBUG("Parsing SELECT statement\n", 0) - expect('('); - prsxpr(')'); //Parse Expression - newlbl(endlbl); //Create New Label - pshlbl(LTSLCT,endlbl); //Push Onto Stack - bgnblk('{'); //Require Beginning of Block - fcase = TRUE; - strcpy(xstmnt, "CASE"); //Require Next Statement to be CASE -} - -/* process end of case block */ -void ecase(void) { - DEBUG("Processing end of CASE block\n", 0) - if (poplbl(cndlbl) != LTCASE) ERROR("%s not at end of CASE block\n", word, EXIT_FAILURE) - if (toplbl(endlbl) != LTSLCT) ERROR("Illegal nesting in SELECT statement\n", 0, EXIT_FAILURE) - asmlin("JMP", endlbl); //Emit jump over default case - setlbl(cndlbl); //Set entry point label to emit -} - -/* parse and compile select statement */ -void pcase(void) { - if (!fcase) ecase(); //Process end of case block - skplbl[0] = 0; //Clear Skip Label - newlbl(cndlbl); //Create Conditional Label - pshlbl(LTCASE, cndlbl); //and Push onto Stack - while(TRUE) { - prstrm(FALSE); //Parse CASE argument - if (!fcase || valtyp != LITERAL || litval) - asmlin("CMP", term); //Emit Comparison - if (look(',')) { - chklbl(skplbl); //Emit skip to beginning of CASE block - asmlin("BEQ", skplbl); - fcase = 0; - continue; //Parse next argument - } - bgnblk(':'); //Emit branch to end of CASE block - asmlin("BNE", cndlbl); - break; - } - if (skplbl[0]) setlbl(skplbl); //Set CASE block label if defined - fcase = FALSE; -} - -/* parse and compile default statement */ -void pdflt(void) { - expect(':'); - ecase(); //Process end of case block -} - -/* parse and compile while statement */ -void pwhile(void) { - DEBUG("Parsing WHILE statement '%c'\n", nxtchr) - expect('('); - newlbl(endlbl); //Create End Label - pshlbl(LTEND, endlbl); //and Push onto Stack - reqlbl(loplbl); //Get or Create/Set Loop Label - pshlbl(LTLOOP, loplbl); //Push onto Stack - if (!look(')')) { - newlbl(cndlbl); //Create Conditional Skip Label - prscnd(')', TRUE); //Parse Conditional Expession - asmlin("JMP", endlbl); //Emit Jump to End of Loop - setlbl(cndlbl); //and Set Label to Emit on Next Line - } - bgnblk(FALSE); //Check For and Begin Block -} - -/* generate unimplemented statement error */ -void punimp(void) { - ERROR("Unimplemented statement '%s' encountered\n", word, EXIT_FAILURE) -} - -/* Parse Function Call as Statement */ -void prsfns(void) { - strcpy(term, word); //Copy Function Name - prsfnc(';'); //Parse Function Call - return; -} - -/* parse and compile identifier (variable or function call) */ -void prssym(void) { - DEBUG("Parsing Identifier %s\n", word) - valtyp = gettyp(); - if (valtyp == FUNCTION) prsfns(); //Parse Statement Function Call - else prcavr(';'); //Parse Assignment -} - -/* parse and compile program statement */ -void pstmnt(void) { - DEBUG("Parsing statement '%s'\n", word) - if (wordis("DO")) { - pdo(); - return; - } - if (wordis("ELSE")) { - pelse(); - return; - } - if (wordis("FOR")) { - pfor(); - return; - } - if (wordis("IF")) { - pif(); - return; - } - if (wordis("SWITCH")) { - ERROR("SWITCH not implemented. Use SELECT.\n", word, EXIT_FAILURE) - } - if (wordis("SELECT")) { - pslct(); - return; - } - if (wordis("CASE")) { - pcase(); - return; - } - if (wordis("DEFAULT")) { - pdflt(); - return; - } - if (wordis("WHILE")) { - pwhile(); - return; - } - if(match(':')) { - prslab(); //Parse Program Label - setlbl(word); //Set Label to Emit - return; - } - if (wordis("ASM")) pasm(); - else if (wordis("BREAK")) - pbrcnt(LFEND); - else if (wordis("CONTINUE")) - pbrcnt(LFBGN); - else if (wordis("GOTO")) - pgoto(); - else if (wordis("INLINE")) - pinlne(); - else if (wordis("POP")) - ppop(); - else if (wordis("PUSH")) - ppush(); - else if (wordis("RETURN")) - pretrn(); - else - prssym(); - if (lblcnt && !inblck) { - DEBUG("Ending implied block\n", 0) - if (poplbl() == LTDO) - pdowhl(); //Parse While at End of Do Loop - } -} +/************************************ + * C02 Statement Compiling Routines * + ************************************/ + +#include +#include +#include +#include +#include + +#include "common.h" +#include "asm.h" +#include "parse.h" +#include "label.h" +#include "vars.h" +#include "cond.h" +#include "expr.h" +#include "stmnt.h" + +/* Begin Program Block */ +void bgnblk(char blkchr) { + DEBUG("Beginning program block\n", 0) + if (blkchr) { + DEBUG("Expecting Block Delimiter '%c'\n", blkchr); + expect(blkchr); + inblck = TRUE; + } + else + inblck = look('{'); + DEBUG("Set INBLCK to %d\n", inblck) + setblk(inblck); +} + +/* End Program Block * + * Args: blkflg: End of Multiline Block */ +void endblk(int blkflg) { + int lbtype; + DEBUG("Ending program block with flag %d\n", blkflg) + expect('}'); //Block End Character + DEBUG("Found inblck set to %d\n", inblck) + if (inblck != blkflg) ERROR("Encountered '}' without matching '{'\n", 0, EXIT_FAILURE) + lbtype = poplbl(); + if (lbtype == LTDO) pdowhl(); //Parse While at End of Do Loop +} + +/* Parse Shortcut If */ +void prssif(char trmntr) { + newlbl(cndlbl); //Create Label for "if FALSE" expression + prscnd(')', FALSE); //Parse Condition + expect('?'); + prsxpr(':'); //Parse "if TRUE" expression + newlbl(skplbl); //Create End of Expression Label + asmlin("JMP", skplbl); //Jump over "if FALSE" expression + setlbl(cndlbl); //Emit "if FALSE" label + prsxpr(trmntr); //Parse "if FALSE" expression + setlbl(skplbl); //Emit End of Expression Label +} + +/* Process Array Index */ +void prcidx(int idxtyp, char *name, char *index) +{ + if (strlen(index)) { + if (idxtyp == LITERAL) { + strcat(name, "+"); + strcat(name, index); + } + else { + asmlin("LDX", index); + strcat(name,",X"); + } + } +} + +/* Set word to assignment variable * + * adding write offset (if set) */ +void setasn(char *name) { + strcpy(word, name); + if (wrtofs[0]) strcat(word, wrtofs); +} + +/* Process Assignment of X and Y variables */ +void prcaxy(void) { + DEBUG("Processing X assignment variable '%s'\n", xsnvar) + if (xsnvar[0]) { + setasn(xsnvar); + if (strlen(xsnidx)) { //Process X variable Index + if (xsnivt != LITERAL) { + asmlin("PHA", ""); //Save Accumulator + asmlin("TXA", ""); //Transfer Return Value to Accumulator + prcidx(xsnivt, word, xsnidx); //Process Index + asmlin("STA", word); //Store Return Value + asmlin("PLA", ""); //Restore Accumulator + } else { + prcidx(xsnivt, word, xsnidx); //Process Index + asmlin("STX", word); //Store Return Value + } + } + else asmlin("STX", word); //Store Return Value + xsnvar[0] = 0; + } + DEBUG("Processing Y assignment variable '%s'\n", ysnvar) + if (ysnvar[0]) { + setasn(ysnvar); + if (strlen(ysnidx)) prcidx(ysnivt, word, ysnidx); //Process Index + asmlin("STY", word); //Store Return Value + ysnvar[0] = 0; + } +} + +/* Process Assignment */ +void prcasn(char trmntr) { + expect('='); + if (look('(')) prssif(trmntr); //Parse Shortcut If + else prsxpr(trmntr); //Parse Expression + prcaxy(); //Process X and Y assignments + DEBUG("Checking if '%s' is a register\n", asnvar) + if (strcmp(asnvar, "X")==0) asmlin("TAX", ""); + else if (strcmp(asnvar, "Y")==0) asmlin("TAY", ""); + else if (strcmp(asnvar, "A")==0) return; + DEBUG("Processing assignment variable '%s'\n", asnvar) + setasn(asnvar); + if (asnidx[0]) prcidx(asnivt, word, asnidx); //Process Index + asmlin("STA", word); //Store Return Value +} + +/* Process Integer Assignment */ +void prcasi(char trmntr) { + DEBUG("Processing Integer Assignment\n", 0); + expect('='); + strcpy(xsnvar, vrname); //Set Assignment LSB + strcpy(ysnvar, vrname); strcat(ysnvar, "+1"); //Set Assignment MSB + ysnidx[0] = 0; //No Y Index + prsxpi(trmntr, TRUE); //Parse Integer Expression, Allowing Functions + prcaxy(); +} + +/* Parse and Return Array Index and Type */ +int getidx(char* idx) { + prsidx(TRUE); //Parse Array Index + if (valtyp == LITERAL) strncpy(idx, word, VARLEN); + else strncpy(idx, value, VARLEN); + DEBUG("Parsed index %s\n", idx) + return valtyp; +} + +/* Process Assignment Variable(s) */ +void prcavr(char trmntr) { + chksym(TRUE, FALSE, word); + DEBUG("Processing assignment of variable %s\n", word); + strcpy(vrname, word); //save variable to assign to + if (valtyp == STRUCTURE) prsmbr(vrname); //Updates word and vartyp + if (vartyp == VTINT) { + if (ispopr()) {if (prspst(trmntr, TRUE, vrname, "")) expctd("post operator");} + else prcasi(trmntr); //Process Integer Assignment + return; + } + strcpy(asnvar, vrname); + asntyp = valtyp; //Set Assigned Variable Type + DEBUG("Set STA variable to %s\n", asnvar) + if (asntyp == VARIABLE && look(';')) { + asmlin("STA", asnvar); + return; + } + if (asntyp == ARRAY) asnivt = getidx(asnidx); //Get Array Index and Type + else asnidx[0] = 0; + DEBUG("Set STA index to '%s'", asnidx) DETAIL(" and type to %d\n", asnivt) + if (ispopr()) { + if (prspst(trmntr, FALSE, asnvar, asnidx)) expctd("post operator"); + return; + } + if (look(',')) { + if (asntyp == REGISTER) ERROR("Register %s not allowed in plural assignment\n", asnvar, EXIT_FAILURE) + prsvar(FALSE, FALSE); //get variable name + strcpy(ysnvar, word); + DEBUG("Set STY variable to %s\n", ysnvar) + if (valtyp == ARRAY) ysnivt = getidx(ysnidx); //Get Array Index and Type + else ysnidx[0] = 0; + DEBUG("Set STY index to '%s'", ysnidx) DETAIL(" and type to %d\n", ysnivt) + if (look(',')) { + prsvar(FALSE, FALSE); //get variable name + strcpy(xsnvar, word); + DEBUG("Set STX variable to %s\n", xsnvar) + //if (valtyp == ARRAY) ERROR("Array element not allowed in third assignment\n", 0, EXIT_FAILURE) + if (valtyp == ARRAY) xsnivt = getidx(xsnidx); //Get Array Index and Type + else xsnidx[0] = 0; + } + } + prcasn(trmntr); +} + +/* Parse 'asm' String Parameter */ +void pasmst(char trmntr) { + skpspc(); //Skip Spaces + if (!match('"')) expctd("string"); + getstr(); + skpspc(); + expect(trmntr); +} + +/* Parse and Compile 'asm' statement */ +void pasm(void) { + char opcode[LINELEN]; + expect('('); + pasmst(','); + if (strlen(word)) setlbl(word); + pasmst(','); + strcpy(opcode, word); + pasmst(')'); + expect(';'); + asmlin(opcode, word); +} + +/* Parse and Compile an Assignment */ +void prsasn(char trmntr) { + getwrd(); //Get Variable to be Assigned + DEBUG("Parsing assignment of word %s\n", word) + prcavr(trmntr); +} + +/* parse and compile 'break'/'continue' statement */ +void pbrcnt(int lbflag) +{ + DEBUG("Parsing BREAK/CONTINUE statement\n", 0) + if (lstlbl(lbflag) < 0) ERROR("Break/continue statement outside of loop\n", 0, EXIT_FAILURE) + DEBUG("Found Label '%s'\n", tmplbl) + asmlin("JMP", tmplbl); + expect(';'); +} + +/* parse and compile 'do' statement */ +void pdo(void) { + DEBUG("Parsing DO statement '%c'\n", nxtchr) + newlbl(endlbl); //Create End Label + pshlbl(LTDWHL, endlbl); //and Push onto Stack + reqlbl(loplbl); //Get or Create/Set Loop Label + pshlbl(LTDO, loplbl); //Push onto Stack + bgnblk(FALSE); //Check For and Begin Block +} + +/* parse and compile 'while' after 'do' statement */ +void pdowhl(void) { + DEBUG("Parsing WHILE after DO '%c'\n", nxtchr) + getwrd(); //Check for While + if (!wordis("WHILE")) expctd("while statement"); + expect('('); + strcpy(cndlbl, loplbl); //Set Conditional Label to Loop Label + prscnd(')', TRUE); //Parse Conditional Expession + poplbl(); //Pop While Conditional Label + setlbl(endlbl); //and Set Label to Emit on Next Line + expect(';'); //Check for End of Statement +} + + +/* parse and compile for statement */ +void pfor(void) { + DEBUG("Parsing FOR statement '%c'\n", nxtchr); + expect('('); + prsasn(';'); //Process Initial Assignment + newlbl(forlbl); //Create For Loop Conditional Label + setlbl(forlbl); //and Set to Emit on Next Line + newlbl(endlbl); //Create End Label + pshlbl(LTEND, endlbl); //and Push onto Stack + newlbl(loplbl); //Create Loop Label + pshlbl(LTLOOP, loplbl); //and Push onto Stack + newlbl(cndlbl); //Create Conditional Label + prscnd(';', TRUE); //Parse Conditional Expession + asmlin("JMP", endlbl); //Jump over Increment + setlbl(loplbl); //Set to Emit on Next Line + prsasn(')'); //Parse Increment Assignment + asmlin("JMP", forlbl); //Jump to Conditional + setlbl(cndlbl); //Emit Label at Start of Loop + bgnblk(FALSE); //Check For and Begin Block +} + +/* parse and compile if statement */ +void pif(void) { + DEBUG("Parsing IF statement\n", 0) + expect('('); + newlbl(cndlbl); //Create New Label + pshlbl(LTIF,cndlbl); //Push Onto Stack + prscnd(')', FALSE); //Parse Conditional Expession + bgnblk(FALSE); //Check For and Begin Block +} + +/* parse and compile else statement */ +void pelse(void) { + DEBUG("Parsing ELSE statement\n", 0) + strcpy(lbltmp, lblasm); //Save Line Label + lblasm[0] = 0; //and Clear It + if (toplbl(skplbl) != LTELSE) { //Get Chained ELSE Label or + newlbl(skplbl); //Create Skip Label + pshlbl(LTELSE, skplbl); //Push Onto Stack + } + asmlin("JMP", skplbl); //Emit Jump over Block Code + strcpy(lblasm, lbltmp); //Restore Line Label + bgnblk(FALSE); //Check For and Begin Block +} + +/* parse and compile if statement */ +void pgoto(void) { + DEBUG("Parsing GOTO statement\n", 0) + if (look('(')) { + DEBUG("Processing Indirect GOTO\n", 0); + prsxpi(')', FALSE); //Parse Integer Expression w/o Assembly + sprintf(word, "(%s)", value); //Set Indirect Argument + } else { + if (!chkadr(ADNONE, FALSE)) getwrd(); + } + expect(';'); + asmlin("JMP", word); +} + +/* parse and compile inline statement */ +void pinlne(void) { + DEBUG("Parsing INLINE statement\n", 0) + do { + DEBUG("Parsing inline parameter\n", 0) + if (look('&')) { + reqvar(FALSE); //Get Variable Name + strcpy(word, "<"); + strcat(word, value); + strcat(word, ", >"); + strcat(word, value); + asmlin(BYTEOP, word); + } + else if (look('"')) { + value[0] = 0; + while (!match('"')) { + CCMNT(nxtchr); + sprintf(word, "$%hhX,", getnxt()); + strcat(value, word); + } + strcat(value,"0"); + CCMNT(nxtchr); + skpchr(); //Skip Terminating Quote + asmlin(BYTEOP, value); + } + else { + prslit(0xFF); //Parse Literal + sprintf(word, "$%hhX", litval); //not needed? + asmlin(BYTEOP, value); + } + } while (look(',')); + expect(';'); +} + +/* parse and compile pop statement */ +void ppop(void) { + DEBUG("Parsing POP statement\n", 0) + do { + if (look('.')) term[0]=0; + else { + reqvar(TRUE); + strcpy(term, value); + chkidx(); + } + asmlin("PLA", ""); //Pop Value off Stack + if (term[0]) asmlin("STA", term); + } while (look(',')); + expect(';'); +} + +/* parse and compile push statement */ +void ppush(void) { + DEBUG("Parsing PUSH statement\n", 0) + do { + if (!chkadr(ADPUSH, TRUE)) { + prsxpr(0); //Parse Expression + asmlin("PHA",""); //Push Result on Stack + } + } while (look(',')); + expect(';'); +} + +/* parse and compile return statement */ +void pretrn(int INTRPT) { + DEBUG("Parsing RETURN statement\n", 0) + skpspc(); + if (INTRPT) { + expect(';'); + asmlin("RTI", ""); + } else { + prsfpr(';'); //Parse Function Return Valuea + asmlin("RTS", ""); + } + lsrtrn = TRUE; //Set RETURN flag +} + +/* parse and compile select statement */ +void pslct(void) { + DEBUG("Parsing SELECT statement\n", 0) + expect('('); + prsxpr(')'); //Parse Expression + newlbl(endlbl); //Create New Label + pshlbl(LTSLCT,endlbl); //Push Onto Stack + bgnblk('{'); //Require Beginning of Block + fcase = TRUE; + strcpy(xstmnt, "CASE"); //Require Next Statement to be CASE +} + +/* process end of case block */ +void ecase(void) { + DEBUG("Processing end of CASE block\n", 0) + if (poplbl(cndlbl) != LTCASE) ERROR("%s not at end of CASE block\n", word, EXIT_FAILURE) + if (toplbl(endlbl) != LTSLCT) ERROR("Illegal nesting in SELECT statement\n", 0, EXIT_FAILURE) + asmlin("JMP", endlbl); //Emit jump over default case + setlbl(cndlbl); //Set entry point label to emit +} + +/* parse and compile select statement */ +void pcase(void) { + if (!fcase) ecase(); //Process end of case block + skplbl[0] = 0; //Clear Skip Label + newlbl(cndlbl); //Create Conditional Label + pshlbl(LTCASE, cndlbl); //and Push onto Stack + while(TRUE) { + prstrm(FALSE); //Parse CASE argument + if (!fcase || valtyp != LITERAL || litval) + asmlin("CMP", term); //Emit Comparison + if (look(',')) { + chklbl(skplbl); //Emit skip to beginning of CASE block + asmlin("BEQ", skplbl); + fcase = 0; + continue; //Parse next argument + } + bgnblk(':'); //Emit branch to end of CASE block + asmlin("BNE", cndlbl); + break; + } + if (skplbl[0]) setlbl(skplbl); //Set CASE block label if defined + fcase = FALSE; +} + +/* parse and compile default statement */ +void pdflt(void) { + expect(':'); + ecase(); //Process end of case block +} + +/* parse and compile while statement */ +void pwhile(void) { + DEBUG("Parsing WHILE statement '%c'\n", nxtchr) + expect('('); + newlbl(endlbl); //Create End Label + pshlbl(LTEND, endlbl); //and Push onto Stack + reqlbl(loplbl); //Get or Create/Set Loop Label + pshlbl(LTLOOP, loplbl); //Push onto Stack + if (!look(')')) { + newlbl(cndlbl); //Create Conditional Skip Label + prscnd(')', TRUE); //Parse Conditional Expession + asmlin("JMP", endlbl); //Emit Jump to End of Loop + setlbl(cndlbl); //and Set Label to Emit on Next Line + } + bgnblk(FALSE); //Check For and Begin Block +} + +/* generate unimplemented statement error */ +void punimp(void) { + ERROR("Unimplemented statement '%s' encountered\n", word, EXIT_FAILURE) +} + +/* Parse Function Call as Statement */ +void prsfns(void) { + strcpy(term, word); //Copy Function Name + prsfnc(';'); //Parse Function Call + return; +} + +/* parse and compile identifier (variable or function call) */ +void prssym(void) { + DEBUG("Parsing Identifier %s\n", word) + valtyp = gettyp(); + if (valtyp == FUNCTION) prsfns(); //Parse Statement Function Call + else prcavr(';'); //Parse Assignment +} + +/* parse and compile program statement */ +void pstmnt(void) { + DEBUG("Parsing statement '%s'\n", word) + if (wordis("DO")) { + pdo(); + return; + } + if (wordis("ELSE")) { + pelse(); + return; + } + if (wordis("FOR")) { + pfor(); + return; + } + if (wordis("IF")) { + pif(); + return; + } + if (wordis("SWITCH")) { + ERROR("SWITCH not implemented. Use SELECT.\n", word, EXIT_FAILURE) + } + if (wordis("SELECT")) { + pslct(); + return; + } + if (wordis("CASE")) { + pcase(); + return; + } + if (wordis("DEFAULT")) { + pdflt(); + return; + } + if (wordis("WHILE")) { + pwhile(); + return; + } + if(match(':')) { + prslab(); //Parse Program Label + setlbl(word); //Set Label to Emit + return; + } + if (wordis("ASM")) pasm(); + else if (wordis("BREAK")) + pbrcnt(LFEND); + else if (wordis("CONTINUE")) + pbrcnt(LFBGN); + else if (wordis("GOTO")) + pgoto(); + else if (wordis("INLINE")) + pinlne(); + else if (wordis("POP")) + ppop(); + else if (wordis("PUSH")) + ppush(); + else if (wordis("RESUME")) + pretrn(TRUE); + else if (wordis("RETURN")) + pretrn(FALSE); + else + prssym(); + if (lblcnt && !inblck) { + DEBUG("Ending implied block\n", 0) + if (poplbl() == LTDO) + pdowhl(); //Parse While at End of Do Loop + } +} From 6703c8cb10e8bcbe7c8bb22253ed6690f01f8755 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Sun, 27 Oct 2019 22:42:37 -0400 Subject: [PATCH 03/42] Allow expressions in second and third function argument --- src/expr.c | 767 +++++++++++++++++++++++++++-------------------------- src/expr.h | 60 ++--- 2 files changed, 425 insertions(+), 402 deletions(-) diff --git a/src/expr.c b/src/expr.c index ad7c6b8..1de9040 100644 --- a/src/expr.c +++ b/src/expr.c @@ -1,372 +1,395 @@ -/*********************************** - * C02 Expression Parsing Routines * - ***********************************/ - -#include -#include -#include -#include -#include -#include "common.h" -#include "asm.h" -#include "parse.h" -#include "vars.h" -#include "label.h" -#include "expr.h" - -/* Push Term and Operator onto Stack */ -void pshtrm(void) { - if (trmidx >= MAXTRM) ERROR("Maximum Function Call/Array Index Depth Exceeded", 0, EXIT_FAILURE) - oprstk[trmidx] = oper; //Put Current Operator on Stack - strcpy(trmstk[trmidx], term); //Put Current Term on Stack - trmidx++; //Increment Stack Pointer -} - -/* Pop Term and Operator off Stack */ -void poptrm(void) { - trmidx--; //Decrement Stack Pointer - strcpy(term, trmstk[trmidx]); //Restore Current Term from Stack - oper = oprstk[trmidx]; //Restore Current Operator from Stack -} - -/* Parse value (literal or identifier) * - * Args: alwreg - allow registers * - 8 alwcon - allow constants * - * Sets: value - the value (as a string) * - * valtyp - value type */ -void prsval(int alwreg, int alwcon) { - DEBUG("Parsing value\n", 0) - skpspc(); - if (islpre()) prslit(); //Parse Literal - else if (isalph()) prsvar(alwreg, alwcon); //Parse Variable - else if (isbtop()) prsbop(); //Parse Byte Operator - else expctd("literal or variable"); - DEBUG("Parsed value of type %d\n", valtyp) - skpspc(); -} - -/* Process Unary Minus */ -void prcmns(void) { - DEBUG("Processing unary minus", 0) - asmlin("LDA", "#$00"); //Handle Unary Minus -} - -/* Parse array index * - * Args: clbrkt - require closing bracket * - * Sets: value - array index or * - * "" if no index defined */ -void prsidx(int clbrkt) { - expect('['); - prsval(TRUE, TRUE); //Parse Value, Allow Registers & Constants - DEBUG("Parsed array index '%s'\n", value) - if (clbrkt) expect(']'); -} - -/* Process Simple Array Index * - * Uses: term - array variable name * - * valtyp - array index value type * - * value - array index as string * - * word - array index raw string * - * Sets: term - modified variable name */ -void prcsix(void) { - if (valtyp == LITERAL) { - strcat(term, "+"); - strcat(term, word); - } - else if (strcmp(value, "Y")==0) - strcat(term, ",Y"); - else { - if (strcmp(value, "A")==0) asmlin("TAX", ""); - else if (strcmp(value, "X")!=0) asmlin("LDX", value); - strcat(term, ",X"); - } -} - -/* Process Expression Array Index */ -void prcxix(void) { - pshtrm(); //Push Array Variable onto Term Stack - if (trmcnt) asmlin("PHA", ""); //Save Accumulator if not first term - prcftm(FALSE); //Process First Term of Expression - prsrxp(']'); //Parse Rest of Expression - asmlin("TAX", ""); //Transfer Result of Expression to Index Register - if (trmcnt) asmlin("PLA", ""); //Restore Accumator if not first term - poptrm(); //Pop Array Variable off Term Stack - strcat(term, ",X"); -} - -/* Check for, Parse, and Process Index */ -void chkidx(void) { - //DEBUG("Checking for Array Index with valtyp=%d\n", valtyp) - if (valtyp == ARRAY) { - if (look('-')) { - prcmns(); - prcxix(); - } - else { - prsidx(FALSE); - if (valtyp > REGISTER) prcxix(); - else if (look(']')) prcsix(); - else prcxix(); - } - } -} - -/* Parse Term in Expression * - * Sets: term - the term (as a string) */ -int prstrm(int alwint) { - DEBUG("Parsing term\n", 0) - prsval(FALSE, TRUE); //Parse Value - Disallow Registers, Allow Constants - if (valtyp == FUNCTION) ERROR("Function call only allowed in first term\n", 0, EXIT_FAILURE) - strcpy(term, value); - if (valtyp == VARIABLE && prcvar(alwint)) return TRUE; - DEBUG("Parsed term %s\n", term) - chkidx(); //Check for Array Index - skpspc(); - return FALSE; -} - -/* Process Address Reference - * Args: adract = Address Action (adacts) * - * symbol = Symbol to Process */ -void prcadr(int adract, char* symbol) { - DEBUG("Processing address '%s'\n", word) - strcpy(word,"#>("); - strcat(word,symbol); - strcat(word,")"); - if (adract == ADPUSH) { asmlin("LDA", word); asmlin("PHA", ""); } - else asmlin("LDY", word); - strcpy(word,"#<("); - strcat(word,symbol); - strcat(word,")"); - if (adract == ADPUSH) { asmlin("LDA", word); asmlin("PHA", ""); } - else asmlin("LDX", word); -} - -/* Parse and Compile Address of Operator * - * Args: adract = Address Action */ -void prsadr(int adract) { - DEBUG("Parsing address\n", 0) - if (isnpre()) prsnum(0xFFFF); - else { - getwrd(); - if (fndlab(word)) strcpy(value, word); - else prsvrw(FALSE, TRUE); - } - if (adract) prcadr(adract, value); //Compile Address Reference - else strcpy(word, value); //Save for Calling Routine -} - -/* Parse and Create Anonymous String * - * Args: adract = Address Action * - * alwstr = Allow String */ -void prsstr(int adract, int alwstr) { - if (!alwstr) ERROR("Illegal String Reference", 0, EXIT_FAILURE) - DEBUG("Parsing anonymous string\n", 0) - newlbl(vrname); //Generate Variable Name - value[0] = 0; //Use Variable Size 0 - setvar(MTNONE, VTCHAR); //Set Variable Name, Type, and Size - prsdts(); //Parse Data String - setdat(); //Set Variable Data - varcnt++; //Increment Variable Counter - if (adract) prcadr(adract, vrname); //Compile Address Reference - else strcpy(word, vrname); //Save for Calling Routine -} - -/* Check for and Process Address or String * - * Args: adract = Address Action * - * alwstr = Allow String */ -int chkadr(int adract, int alwstr) { - DEBUG("Checking for Address or String\n", 0) - int result = TRUE; - if (look('&')) prsadr(adract); - else if (match('"')) prsstr(adract, alwstr); - else result = FALSE; - skpspc(); - return result; -} - -/* Parse Byte Operator */ -void prsbop(void) { - char byteop = getnxt(); - CCMNT(byteop); - DEBUG("Parsing byte operator '%c'\n", byteop) - if (chkadr(FALSE, FALSE)) { - sprintf(value, "%c(%s)", byteop, word); - valtyp = LITERAL; - } else { - reqvar(FALSE); - if (vartyp != VTINT) ERROR("Integer Value Expected\n", 0, EXIT_FAILURE) - if (byteop == '>') strcat(value, "+1"); - vartyp = VTCHAR; - } - DEBUG("Set value to \"%s\"\n", value) -} - -/* Parse Function Argument or Return Values */ -void prsfpr(char trmntr) { - if (!chkadr(ADLDYX, TRUE) && isxpre() || match('.')) { - if (!look('.')) {if (prsxpf(0)) goto prsfne;} - if (look(',') && !chkadr(ADLDYX, TRUE)) { - if (!look('.')) { - if (prstrm(TRUE)) goto prsfne; - asmlin("LDY", term); - } - if (look(',')) { - prsval(FALSE, TRUE); //Parse Value - Disallow Registers, Allow Constants - if (valtyp > VARIABLE) ERROR("Illegal Value Function Argument\n", 0, EXIT_FAILURE); - if (valtyp == VARIABLE && vartyp != VTCHAR) ERROR("Illegal Variable Type\n", 0, EXIT_FAILURE); - asmlin("LDX", value); } - } - } - prsfne: - expect(trmntr); -} - -/* Parse function call */ -void prsfnc(char trmntr) { - DEBUG("Processing Function Call '%s'\n", term) - //int argexp = FALSE; //Expression(s) in second and third argument - pshtrm(); //Push Function Name onto Term Stack - skpchr(); //skip open paren - CCMNT('('); - prsfpr(')'); //Parse Function Parameters - expect(trmntr); - poptrm(); //Pop Function Name off Term Stack - asmlin("JSR", term); - skpspc(); -} - -/* Process Integer Variable */ -void prcvri(void) { - DEBUG("Processing Integer Variable '%s'\n", value) - asmlin("LDX", value); - strcat(value, "+1"); - asmlin("LDY", value); -} - -/* Process Variable in Term */ -int prcvar(int alwint) { - switch (vartyp) { - case VTINT: - if (!alwint) ERROR("Illegal Use of Integer Variable %s\n", word, EXIT_FAILURE) - prcvri(); - return TRUE; - case VTARRAY: - if (!alwint) ERROR("Illegal Reference to Array %s\n", word, EXIT_FAILURE) - prcadr(ADNONE, term); - return TRUE; - case VTSTRUCT: - if (!alwint) ERROR("Illegal Reference to Struct %s\n", word, EXIT_FAILURE) - prcadr(ADNONE, term); - return TRUE; - default: - return FALSE; - } -} - -/* Process first term of expression */ -int prcftm(int alwint) { - DEBUG("Processing first term '%s'\n", value) - strcpy(term, value); - if (valtyp == VARIABLE && prcvar(alwint)) return TRUE; - if (valtyp == FUNCTION) prsfnc(0); //Parse Expression Function - else if (wordis("A")) return FALSE; - else if (wordis("X")) asmlin("TXA", ""); - else if (wordis("Y")) asmlin("TYA", ""); - else { chkidx(); asmlin("LDA", term); } - return FALSE; -} - -/* Parse first term of expession * - * First term can include function calls */ -int prsftm(int alwint) { - prsval(TRUE, TRUE); //Parse Value, Allow Registers & Constants - return prcftm(alwint); -} - -/* Process Arithmetic or Bitwise Operator * - * and the term that follows it */ -void prcopr(void) { - DEBUG("Processing operator '%c'\n", oper) - switch(oper) { - case '+': asmlin("CLC", ""); asmlin("ADC", term); break; //Addition - case '-': asmlin("SEC", ""); asmlin("SBC", term); break; //Subtraction - case '&': asmlin("AND", term); break; //Bitwise AND - case '!': //For systems that don't have pipe in character set - case '|': asmlin("ORA", term); break; //Bitwise OR - case '^': asmlin("EOR", term); break; //Bitwise XOR - default: ERROR("Unrecognized operator '%c'\n", oper, EXIT_FAILURE) - } - oper = 0; -} - -/* Parse Remainder of Expression */ -void prsrxp(char trmntr) { - skpspc(); - while (isoper()) { - trmcnt++; //Increment Expression Depth - prsopr(); //Parse Operator - prstrm(FALSE); //Parse Term - prcopr(); //Process Operator - trmcnt--; //Decrement Expression Depth - } - expect(trmntr); -} - -int prsxpp(char trmntr, int alwint) { - DEBUG("Parsing expression\n", 0) - skpspc(); - trmcnt = 0; //Initialize Expression Depth - if (match('-')) prcmns(); //Process Unary Minus - else if (prsftm(alwint)) return TRUE; //Parse First Term - prsrxp(trmntr); //Parse Remainder of Express - return FALSE; -} - -/* Parse and compile expression */ -void prsxpr(char trmntr) { - prsxpp(trmntr, FALSE); -} - -/* Parse and compile function parameter expression * - * Returns: TRUE if Integer Expression */ -int prsxpf(char trmntr) { - return prsxpp(trmntr, TRUE); -} - -/* Parse and Compile Integer Expression * - * (Address, Integer Literal, Variable, * - * Struct Member, or Function) * - * Args: trmntr - expression terminator * - * asmxpr - assemble expression * - * Sets: value - Parsed Value or Symbol */ -void prsxpi(char trmntr, int asmxpr) { - skpspc(); - DEBUG("Parsing integer expression\n", 0) - if (!chkadr(TRUE, FALSE)) { - if (isnpre()) { - DEBUG("Parsing Integer Literal\n", 0) - int number = prsnum(0xFFFF); //Parse Number into value - if (asmxpr) { - sprintf(value, "#%d", number & 0xFF); asmlin("LDX", value); - sprintf(value, "#%d", number >> 8); asmlin("LDY", value); - } - } else if (isalph()) { - prsvar(FALSE, TRUE); - if (valtyp == FUNCTION) { - strcpy(term, value); - prsfnc(0); //Parse Expression Function - } else if (valtyp == STRUCTURE) { - prsmbr(value); - if (vartyp != VTINT) ERROR("Illegal Member %s In Integer Expression", value, EXIT_FAILURE) - } else if (valtyp == VARIABLE && vartyp == VTINT) { - if (asmxpr) prcvri(); //Process Integer Variable - } else { - ERROR("Illegal Variable %s In Integer Expression", value, EXIT_FAILURE) - } - } else { - ERROR("Expected Integer Value or Function\n", 0, EXIT_FAILURE); - } - } - expect(trmntr); -} +/*********************************** + * C02 Expression Parsing Routines * + ***********************************/ + +#include +#include +#include +#include +#include +#include "common.h" +#include "asm.h" +#include "parse.h" +#include "vars.h" +#include "label.h" +#include "expr.h" + +/* Push Term and Operator onto Stack */ +void pshtrm(void) { + if (trmidx >= MAXTRM) ERROR("Maximum Function Call/Array Index Depth Exceeded", 0, EXIT_FAILURE) + oprstk[trmidx] = oper; //Put Current Operator on Stack + strcpy(trmstk[trmidx], term); //Put Current Term on Stack + trmidx++; //Increment Stack Pointer +} + +/* Pop Term and Operator off Stack */ +void poptrm(void) { + trmidx--; //Decrement Stack Pointer + strcpy(term, trmstk[trmidx]); //Restore Current Term from Stack + oper = oprstk[trmidx]; //Restore Current Operator from Stack +} + +/* Parse value (literal or identifier) * + * Args: alwreg - allow registers * + 8 alwcon - allow constants * + * Sets: value - the value (as a string) * + * valtyp - value type */ +void prsval(int alwreg, int alwcon) { + DEBUG("Parsing value\n", 0) + skpspc(); + if (islpre()) prslit(); //Parse Literal + else if (isalph()) prsvar(alwreg, alwcon); //Parse Variable + else if (isbtop()) prsbop(); //Parse Byte Operator + else expctd("literal or variable"); + DEBUG("Parsed value of type %d\n", valtyp) + skpspc(); +} + +/* Process Unary Minus */ +void prcmns(void) { + DEBUG("Processing unary minus", 0) + asmlin("LDA", "#$00"); //Handle Unary Minus +} + +/* Parse array index * + * Args: clbrkt - require closing bracket * + * Sets: value - array index or * + * "" if no index defined */ +void prsidx(int clbrkt) { + expect('['); + prsval(TRUE, TRUE); //Parse Value, Allow Registers & Constants + DEBUG("Parsed array index '%s'\n", value) + if (clbrkt) expect(']'); +} + +/* Process Simple Array Index * + * Uses: term - array variable name * + * valtyp - array index value type * + * value - array index as string * + * word - array index raw string * + * Sets: term - modified variable name */ +void prcsix(void) { + if (valtyp == LITERAL) { + strcat(term, "+"); + strcat(term, word); + } + else if (strcmp(value, "Y")==0) + strcat(term, ",Y"); + else { + if (strcmp(value, "A")==0) asmlin("TAX", ""); + else if (strcmp(value, "X")!=0) asmlin("LDX", value); + strcat(term, ",X"); + } +} + +/* Process Expression Array Index */ +void prcxix(void) { + pshtrm(); //Push Array Variable onto Term Stack + if (trmcnt) asmlin("PHA", ""); //Save Accumulator if not first term + prcftm(FALSE); //Process First Term of Expression + prsrxp(']'); //Parse Rest of Expression + asmlin("TAX", ""); //Transfer Result of Expression to Index Register + if (trmcnt) asmlin("PLA", ""); //Restore Accumator if not first term + poptrm(); //Pop Array Variable off Term Stack + strcat(term, ",X"); +} + +/* Check for, Parse, and Process Index */ +void chkidx(void) { + //DEBUG("Checking for Array Index with valtyp=%d\n", valtyp) + if (valtyp == ARRAY) { + if (look('-')) { + prcmns(); + prcxix(); + } + else { + prsidx(FALSE); + if (valtyp > REGISTER) prcxix(); + else if (look(']')) prcsix(); + else prcxix(); + } + } +} + +/* Parse Term in Expression * + * Sets: term - the term (as a string) */ +int prstrm(int alwint) { + DEBUG("Parsing term\n", 0) + prsval(FALSE, TRUE); //Parse Value - Disallow Registers, Allow Constants + if (valtyp == FUNCTION) ERROR("Function call only allowed in first term\n", 0, EXIT_FAILURE) + strcpy(term, value); + if (valtyp == VARIABLE && prcivr(alwint)) return TRUE; + DEBUG("Parsed term %s\n", term) + chkidx(); //Check for Array Index + skpspc(); + return FALSE; +} + +/* Process Address Reference + * Args: adract = Address Action (adacts) * + * symbol = Symbol to Process */ +void prcadr(int adract, char* symbol) { + DEBUG("Processing address '%s'\n", word) + strcpy(word,"#>("); + strcat(word,symbol); + strcat(word,")"); + if (adract == ADPUSH) { asmlin("LDA", word); asmlin("PHA", ""); } + else asmlin("LDY", word); + strcpy(word,"#<("); + strcat(word,symbol); + strcat(word,")"); + if (adract == ADPUSH) { asmlin("LDA", word); asmlin("PHA", ""); } + else asmlin("LDX", word); +} + +/* Parse and Compile Address of Operator * + * Args: adract = Address Action */ +void prsadr(int adract) { + DEBUG("Parsing address\n", 0) + if (isnpre()) prsnum(0xFFFF); + else { + getwrd(); + if (fndlab(word)) strcpy(value, word); + else prsvrw(FALSE, TRUE); + } + if (adract) prcadr(adract, value); //Compile Address Reference + else strcpy(word, value); //Save for Calling Routine +} + +/* Parse and Create Anonymous String * + * Args: adract = Address Action * + * alwstr = Allow String */ +void prsstr(int adract, int alwstr) { + if (!alwstr) ERROR("Illegal String Reference", 0, EXIT_FAILURE) + DEBUG("Parsing anonymous string\n", 0) + newlbl(vrname); //Generate Variable Name + value[0] = 0; //Use Variable Size 0 + setvar(MTNONE, VTCHAR); //Set Variable Name, Type, and Size + prsdts(); //Parse Data String + setdat(); //Set Variable Data + varcnt++; //Increment Variable Counter + if (adract) prcadr(adract, vrname); //Compile Address Reference + else strcpy(word, vrname); //Save for Calling Routine +} + +/* Check for and Process Address or String * + * Args: adract = Address Action * + * alwstr = Allow String */ +int chkadr(int adract, int alwstr) { + DEBUG("Checking for Address or String\n", 0) + int result = TRUE; + if (look('&')) prsadr(adract); + else if (match('"')) prsstr(adract, alwstr); + else result = FALSE; + skpspc(); + return result; +} + +/* Parse Byte Operator */ +void prsbop(void) { + char byteop = getnxt(); + CCMNT(byteop); + DEBUG("Parsing byte operator '%c'\n", byteop) + if (chkadr(FALSE, FALSE)) { + sprintf(value, "%c(%s)", byteop, word); + valtyp = LITERAL; + } else { + reqvar(FALSE); + if (vartyp != VTINT) ERROR("Integer Value Expected\n", 0, EXIT_FAILURE) + if (byteop == '>') strcat(value, "+1"); + vartyp = VTCHAR; + } + DEBUG("Set value to \"%s\"\n", value) +} + +/* Parse Function Argument or Return Values */ +void prsfpr(char trmntr) { + int pusha = 0; int pushy = 0; //A and Y Arguments Pushed + if (!chkadr(ADLDYX, TRUE) && isxpre() || match('.')) { + if (look('.')) pusha = 255; + else {if (prsxpf(0)) goto prsfne;} + if (look(',') && !chkadr(ADLDYX, TRUE)) { + if (look('.')) { + pushy = -1; + } + else { + if (look('(')) { + if (pusha==0) {pusha = 1; asmlin("PHA","");} //Save A on Stack + prsxpr(')'); asmlin("TAY", ""); //Evaluate Expression, and Copy to Y + } + else { + if (prstrm(TRUE)) goto prsfne; + asmlin("LDY", term); + } + } + if (look(',')) { + if (look('(')) { + if (pusha==0) {pusha = 1; asmlin("PHA","");} //Save A on Stack + if (pushy==0) {pushy = 1; asmlin("PHA",""); asmlin("PHY","");} //Save Y on Stack + prsxpr(')'); asmlin("TAX", ""); //Evaluate Expression, and Copy to X + } + else { + prsval(FALSE, TRUE); //Parse Value - Disallow Registers, Allow Constants + if (valtyp > VARIABLE) ERROR("Illegal Value Function Argument\n", 0, EXIT_FAILURE); + if (valtyp == VARIABLE && vartyp != VTCHAR) ERROR("Illegal Variable Type\n", 0, EXIT_FAILURE); + asmlin("LDX", value); + } + } + } + } + prsfne: + if (pushy==1) {asmlin("PLA",""); asmlin("TAY","");} //Pull Y Off Stack + if (pusha==1) asmlin("PLA",""); //Pull A Off Stack + expect(trmntr); +} + +/* Parse function call */ +void prsfnc(char trmntr) { + DEBUG("Processing Function Call '%s'\n", term) + //int argexp = FALSE; //Expression(s) in second and third argument + pshtrm(); //Push Function Name onto Term Stack + skpchr(); //skip open paren + CCMNT('('); + prsfpr(')'); //Parse Function Parameters + expect(trmntr); + poptrm(); //Pop Function Name off Term Stack + asmlin("JSR", term); + skpspc(); +} + +/* Process Integer Variable */ +void prcvri(void) { + DEBUG("Processing Integer Variable '%s'\n", value) + asmlin("LDX", value); + strcat(value, "+1"); + asmlin("LDY", value); +} + +/* Process Integer Variable in Term * + * Args: alwint = Allow Integer-Like Variable * + * Returns: Integer-Like Variable Processed - TRUE/FALSE */ +int prcivr(int alwint) { + switch (vartyp) { + case VTINT: + if (!alwint) ERROR("Illegal Use of Integer Variable %s\n", word, EXIT_FAILURE) + prcvri(); + return TRUE; + case VTARRAY: + if (!alwint) ERROR("Illegal Reference to Array %s\n", word, EXIT_FAILURE) + prcadr(ADNONE, term); + return TRUE; + case VTSTRUCT: + if (!alwint) ERROR("Illegal Reference to Struct %s\n", word, EXIT_FAILURE) + prcadr(ADNONE, term); + return TRUE; + default: + return FALSE; + } +} + +/* Process first term of expression */ +int prcftm(int alwint) { + DEBUG("Processing first term '%s'\n", value) + strcpy(term, value); + if (valtyp == VARIABLE && prcivr(alwint)) return TRUE; + if (valtyp == FUNCTION) prsfnc(0); //Parse Expression Function + else if (wordis("A")) return FALSE; + else if (wordis("X")) asmlin("TXA", ""); + else if (wordis("Y")) asmlin("TYA", ""); + else { chkidx(); asmlin("LDA", term); } + return FALSE; +} + +/* Parse first term of expession * + * First term can include function calls */ +int prsftm(int alwint) { + prsval(TRUE, TRUE); //Parse Value, Allow Registers & Constants + return prcftm(alwint); +} + +/* Process Arithmetic or Bitwise Operator * + * and the term that follows it */ +void prcopr(void) { + DEBUG("Processing operator '%c'\n", oper) + switch(oper) { + case '+': asmlin("CLC", ""); asmlin("ADC", term); break; //Addition + case '-': asmlin("SEC", ""); asmlin("SBC", term); break; //Subtraction + case '&': asmlin("AND", term); break; //Bitwise AND + case '!': //For systems that don't have pipe in character set + case '|': asmlin("ORA", term); break; //Bitwise OR + case '^': asmlin("EOR", term); break; //Bitwise XOR + default: ERROR("Unrecognized operator '%c'\n", oper, EXIT_FAILURE) + } + oper = 0; +} + +/* Parse Remainder of Expression */ +void prsrxp(char trmntr) { + skpspc(); + while (isoper()) { + trmcnt++; //Increment Expression Depth + prsopr(); //Parse Operator + prstrm(FALSE); //Parse Term + prcopr(); //Process Operator + trmcnt--; //Decrement Expression Depth + } + expect(trmntr); +} + +int prsxpp(char trmntr, int alwint) { + DEBUG("Parsing expression\n", 0) + skpspc(); + trmcnt = 0; //Initialize Expression Depth + if (match('-')) prcmns(); //Process Unary Minus + else if (prsftm(alwint)) return TRUE; //Parse First Term + prsrxp(trmntr); //Parse Remainder of Express + return FALSE; +} + +/* Parse and compile expression */ +void prsxpr(char trmntr) { + prsxpp(trmntr, FALSE); +} + +/* Parse and compile function parameter expression * + * Returns: TRUE if Integer Expression */ +int prsxpf(char trmntr) { + return prsxpp(trmntr, TRUE); +} + +/* Parse and Compile Integer Expression * + * (Address, Integer Literal, Variable, * + * Struct Member, or Function) * + * Args: trmntr - expression terminator * + * asmxpr - assemble expression * + * Sets: value - Parsed Value or Symbol */ +void prsxpi(char trmntr, int asmxpr) { + skpspc(); + DEBUG("Parsing integer expression\n", 0) + if (!chkadr(TRUE, FALSE)) { + if (isnpre()) { + DEBUG("Parsing Integer Literal\n", 0) + int number = prsnum(0xFFFF); //Parse Number into value + if (asmxpr) { + sprintf(value, "#%d", number & 0xFF); asmlin("LDX", value); + sprintf(value, "#%d", number >> 8); asmlin("LDY", value); + } + } else if (isalph()) { + prsvar(FALSE, TRUE); + if (valtyp == FUNCTION) { + strcpy(term, value); + prsfnc(0); //Parse Expression Function + } else if (valtyp == STRUCTURE) { + prsmbr(value); + if (vartyp != VTINT) ERROR("Illegal Member %s In Integer Expression", value, EXIT_FAILURE) + } else if (valtyp == VARIABLE && vartyp == VTINT) { + if (asmxpr) prcvri(); //Process Integer Variable + } else { + ERROR("Illegal Variable %s In Integer Expression", value, EXIT_FAILURE) + } + } else { + ERROR("Expected Integer Value or Function\n", 0, EXIT_FAILURE); + } + } + expect(trmntr); +} diff --git a/src/expr.h b/src/expr.h index f57a653..2e50211 100644 --- a/src/expr.h +++ b/src/expr.h @@ -1,30 +1,30 @@ -/********************************** - * C02 Expession Parsing Routines * - **********************************/ - -enum adacts {ADNONE, ADLDYX, ADPUSH}; - -char term[255]; //Term parsed from equation - -char oprstk[MAXTRM]; //Operator Stack -char trmstk[MAXTRM][VARLEN+1]; //Function/Index Terms Stack -int trmidx; //Next Index in Stack - -int trmcnt; //Number of total terms in current expression - -int chkadr(int adract, int alwstr); //Check for and Process Address or String -void chkidx(); //Check for, Parse, and Process Index -int prcftm(int alwint); //Process First Term -void prcvri(void); //Process Integer Variable -int prcvar(int alwint); //Process Variable in Term -void prsadr(int adract); //Parse and Compile Address of Operator -void prsbop(void); //Parse Byte Operator -void prsval(int alwreg, int alwcon); //Parse Value -void prsfnc(char trmntr); //Parse function call -void prsfpr(char trmntr); //Parse Function Paraeters or Return -void prsidx(); //Parse Array Index -int prstrm(int alwint); //Parse Term in Expression -void prsrxp(char trmntr); //Parse Rest of Expression -int prsxpf(char trmntr); //Parse Expression in Function Call -void prsxpr(char trmntr); //Parse Expression -void prsxpi(char trmntr, int asmxpr); //Parse Integer Expression +/********************************** + * C02 Expession Parsing Routines * + **********************************/ + +enum adacts {ADNONE, ADLDYX, ADPUSH}; + +char term[255]; //Term parsed from equation + +char oprstk[MAXTRM]; //Operator Stack +char trmstk[MAXTRM][VARLEN+1]; //Function/Index Terms Stack +int trmidx; //Next Index in Stack + +int trmcnt; //Number of total terms in current expression + +int chkadr(int adract, int alwstr); //Check for and Process Address or String +void chkidx(); //Check for, Parse, and Process Index +int prcftm(int alwint); //Process First Term +void prcvri(void); //Process Integer Variable +int prcivr(int alwint); //Process Integer Variable in Term +void prsadr(int adract); //Parse and Compile Address of Operator +void prsbop(void); //Parse Byte Operator +void prsval(int alwreg, int alwcon); //Parse Value +void prsfnc(char trmntr); //Parse function call +void prsfpr(char trmntr); //Parse Function Paraeters or Return +void prsidx(); //Parse Array Index +int prstrm(int alwint); //Parse Term in Expression +void prsrxp(char trmntr); //Parse Rest of Expression +int prsxpf(char trmntr); //Parse Expression in Function Call +void prsxpr(char trmntr); //Parse Expression +void prsxpi(char trmntr, int asmxpr); //Parse Integer Expression From 3a7224ce9a2dff63f22aa5d4a2f74731e1ebde7e Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Sun, 27 Oct 2019 22:44:13 -0400 Subject: [PATCH 04/42] Converted source code line endings to CR/LF --- src/.vscode/ipch/771b4d3d25e434c7/C02.ipch | Bin 0 -> 3080192 bytes .../ipch/771b4d3d25e434c7/mmap_address.bin | Bin 0 -> 8 bytes src/.vscode/launch.json | 19 ++ src/asm.c | 72 ++--- src/asm.h | 18 +- src/common.c | 120 +++---- src/cond.c | 276 ++++++++-------- src/cond.h | 20 +- src/dclrtn.h | 34 +- src/files.c | 204 ++++++------ src/files.h | 54 ++-- src/include.c | 2 +- src/include.h | 28 +- src/label.c | 306 +++++++++--------- src/label.h | 82 ++--- src/stmnt.h | 42 +-- 16 files changed, 648 insertions(+), 629 deletions(-) create mode 100644 src/.vscode/ipch/771b4d3d25e434c7/C02.ipch create mode 100644 src/.vscode/ipch/771b4d3d25e434c7/mmap_address.bin create mode 100644 src/.vscode/launch.json diff --git a/src/.vscode/ipch/771b4d3d25e434c7/C02.ipch b/src/.vscode/ipch/771b4d3d25e434c7/C02.ipch new file mode 100644 index 0000000000000000000000000000000000000000..f6d23ac656cfa5501b351c55656a4d0189e8f6b7 GIT binary patch literal 3080192 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ĖGhOKr`KfP*QuH%P?fLSCGRVt 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⁣~*E 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°Vn-405eW?svRhhvnk@<%$Ikma?AD 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

  • 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 F^?AEL;yNCW+sI#> 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%0AuiMmEi?8@buA`8p;(ICw4!_4?%X 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 z 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 literal 0 HcmV?d00001 diff --git a/src/.vscode/ipch/771b4d3d25e434c7/mmap_address.bin b/src/.vscode/ipch/771b4d3d25e434c7/mmap_address.bin new file mode 100644 index 0000000000000000000000000000000000000000..862b8428b9e068428b1a4e8a38f94019008d8940 GIT binary patch literal 8 NcmZQzU~Ksh1ON<}1cCqn literal 0 HcmV?d00001 diff --git a/src/.vscode/launch.json b/src/.vscode/launch.json new file mode 100644 index 0000000..8870f0a --- /dev/null +++ b/src/.vscode/launch.json @@ -0,0 +1,19 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "(Windows) Launch", + "type": "cppvsdbg", + "request": "launch", + "program": "${workspaceFolder}/c02.exe", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": true + } + ] +} \ No newline at end of file diff --git a/src/asm.c b/src/asm.c index 41dc1bb..9c82ae6 100644 --- a/src/asm.c +++ b/src/asm.c @@ -1,36 +1,36 @@ -/************************************* - * C02 Assembly Language Routines * - *************************************/ - -#include -#include -#include -#include -#include - -#include "common.h" -#include "files.h" -#include "asm.h" - -/* Process comment */ -void prccmt(void) { - if (strlen(cmtasm)) { strcpy(asmcmt, ";"); strcat(asmcmt, cmtasm); } - else asmcmt[0] = 0; - setcmt(""); -} - -/* output a single line of assembly code */ -void asmlin(char *opcode, char *oprnd) { - if (strlen(lblasm)) strcat(lblasm, LABSFX); - prccmt(); - fprintf(outfil, ASMFMT, lblasm, opcode, oprnd, asmcmt); - if (debug) printf(ASMFMT, lblasm, opcode, oprnd, asmcmt); - lblasm[0] = 0; -} - -/* output a single comment line */ -void cmtlin(void) { - DEBUG("Writing Comment Line: %s\n", cmtasm) - fprintf(outfil, "; %s\n", cmtasm); - setcmt(""); -} +/************************************* + * C02 Assembly Language Routines * + *************************************/ + +#include +#include +#include +#include +#include + +#include "common.h" +#include "files.h" +#include "asm.h" + +/* Process comment */ +void prccmt(void) { + if (strlen(cmtasm)) { strcpy(asmcmt, ";"); strcat(asmcmt, cmtasm); } + else asmcmt[0] = 0; + setcmt(""); +} + +/* output a single line of assembly code */ +void asmlin(char *opcode, char *oprnd) { + if (strlen(lblasm)) strcat(lblasm, LABSFX); + prccmt(); + fprintf(outfil, ASMFMT, lblasm, opcode, oprnd, asmcmt); + if (debug) printf(ASMFMT, lblasm, opcode, oprnd, asmcmt); + lblasm[0] = 0; +} + +/* output a single comment line */ +void cmtlin(void) { + DEBUG("Writing Comment Line: %s\n", cmtasm) + fprintf(outfil, "; %s\n", cmtasm); + setcmt(""); +} diff --git a/src/asm.h b/src/asm.h index eb5c10b..b482ad5 100644 --- a/src/asm.h +++ b/src/asm.h @@ -1,9 +1,9 @@ -/************************************* - * C02 Assembly Language Routines * - *************************************/ - -char lblasm[LBLLEN+2]; //Label to emit on next asm line - -void asmlin(char *opcode, char *oprnd); //Output a line of assembly code -void cmtlin(); //Output a comment lines -void prccmt(); //Process comment +/************************************* + * C02 Assembly Language Routines * + *************************************/ + +char lblasm[LBLLEN+2]; //Label to emit on next asm line + +void asmlin(char *opcode, char *oprnd); //Output a line of assembly code +void cmtlin(); //Output a comment lines +void prccmt(); //Process comment diff --git a/src/common.c b/src/common.c index 1c3871c..c2d1cfc 100644 --- a/src/common.c +++ b/src/common.c @@ -1,60 +1,60 @@ -/************************************* - * C02 Common Definitions & Routines * - *************************************/ - -#include -#include -#include -#include -#include -#include -#include "common.h" - -struct timespec curtim; //Current Time - -/* Error - Print Input File name & position and exit */ -void exterr(int errnum) { - fprintf(stderr, "Line %d Column %d of File %s\n", curlin, curcol, inpnam); - exit(errnum); -} - -/* Error - print "Expected" error message * - and exit with general failure code * - Args: expected - Description of what was expected */ -void expctd(char *expstr) { - fprintf(stderr, "Expected %s, but found '%c'\n", expstr, nxtchr); - exterr(EXIT_FAILURE); -} - -/* Print current position in file */ -void prtpos(void) { if (inpnam[0]) printf("(%s: %d,%d) ", inpnam, curlin, curcol); } - -/* Initialize elapsed time counter */ -void initim(void) { - timespec_get (&curtim, TIME_UTC); - bgntim = curtim.tv_sec; -} - -/* Print elapsed time */ -void prttim(void) { - timespec_get (&curtim, TIME_UTC); - printf("[%d", curtim.tv_sec - bgntim); - printf(".%06d]",curtim.tv_nsec/1000); -} - -/* Set comment to string */ -void setcmt(char *s) { strcpy(cmtasm, s); } - -/* Append string to comment */ -void addcmt(char *s) { - if (strlen(cmtasm)+strlen(s)<73) strcat(cmtasm, s); -} - -/* Append character to comment */ -void chrcmt(char c) { - if (strlen(cmtasm)>72) return; - if (cmtasm[0] == 0 && c == ' ') return; - int i = strlen(cmtasm); - cmtasm[i++] = c; - cmtasm[i] = 0; -} +/************************************* + * C02 Common Definitions & Routines * + *************************************/ + +#include +#include +#include +#include +#include +#include +#include "common.h" + +struct timespec curtim; //Current Time + +/* Error - Print Input File name & position and exit */ +void exterr(int errnum) { + fprintf(stderr, "Line %d Column %d of File %s\n", curlin, curcol, inpnam); + exit(errnum); +} + +/* Error - print "Expected" error message * + and exit with general failure code * + Args: expected - Description of what was expected */ +void expctd(char *expstr) { + fprintf(stderr, "Expected %s, but found '%c'\n", expstr, nxtchr); + exterr(EXIT_FAILURE); +} + +/* Print current position in file */ +void prtpos(void) { if (inpnam[0]) printf("(%s: %d,%d) ", inpnam, curlin, curcol); } + +/* Initialize elapsed time counter */ +void initim(void) { + timespec_get (&curtim, TIME_UTC); + bgntim = curtim.tv_sec; +} + +/* Print elapsed time */ +void prttim(void) { + timespec_get (&curtim, TIME_UTC); + printf("[%d", curtim.tv_sec - bgntim); + printf(".%06d]",curtim.tv_nsec/1000); +} + +/* Set comment to string */ +void setcmt(char *s) { strcpy(cmtasm, s); } + +/* Append string to comment */ +void addcmt(char *s) { + if (strlen(cmtasm)+strlen(s)<73) strcat(cmtasm, s); +} + +/* Append character to comment */ +void chrcmt(char c) { + if (strlen(cmtasm)>72) return; + if (cmtasm[0] == 0 && c == ' ') return; + int i = strlen(cmtasm); + cmtasm[i++] = c; + cmtasm[i] = 0; +} diff --git a/src/cond.c b/src/cond.c index 54fd01e..a74a72d 100644 --- a/src/cond.c +++ b/src/cond.c @@ -1,138 +1,138 @@ -/************************************ - * C02 Conditional Parsing Routines * - ************************************/ -#include -#include -#include -#include -#include -#include "common.h" -#include "asm.h" -#include "parse.h" -#include "vars.h" -#include "expr.h" -#include "label.h" -#include "cond.h" - -int cmprtr; //Encoded Comparison Operator -int cmpenc; //Encoded Comparator Character - -/* Encode Comparison Operator Character * - * Args: Comparison Operator Character * - * Returns: Comparison Operator Bit Mask */ -int enccmp(char c) { - int e; - DEBUG("Encoding Comparison Character '%c'", c) - switch(c) { - case '=': e = 1; break; - case '<': e = 2; break; - case '>': e = 4; break; - default: e = 0; - } - if (e) { CCMNT(c); skpchr(); } - DETAIL(", encoded as %d\n", e); - return e; -} - -/* Process and Compile Comparison Operator and * - * Args: comparator - Encoded Comparison Operator * - * Uses: term - Term Being Compared Against * - * label - Branch Target if Comparison is FALSE */ -void prccmp(void) { - DEBUG("Processing comparator %d", cmprtr) DETAIL(" with REVCMP=%d\n", revcmp) - if (cmprtr > 7) { //Process Flag - cmprtr = (cmprtr ^ revcmp) & 1; //Apply Reversal - if (cmprtr) asmlin("BPL", cmplbl); - else asmlin("BMI", cmplbl); - return; - } - cmprtr = (cmprtr ^ revcmp) & 7; //Apply reversal - switch(cmprtr) { - case 0: // Raw Expression (Skip) - asmlin("BEQ", cmplbl); break; - case 1: // = or == - asmlin("CMP", term); asmlin("BNE", cmplbl); break; - case 2: // < - asmlin("CMP", term); asmlin("BCS", cmplbl); break; - case 3: // <= or =< - asmlin("CLC", ""); asmlin("SBC", term); asmlin("BCS", cmplbl); break; - case 4: // > - asmlin("CLC", ""); asmlin("SBC", term); asmlin("BCC", cmplbl); break; - case 5: // >= or => - asmlin("CMP", term); asmlin("BCC", cmplbl); break; - case 6: // <> or >< - asmlin("CMP", term); asmlin("BEQ", cmplbl); break; - case 7: // Raw Expression (Normal) - asmlin("BNE", cmplbl); break; - default: - ERROR("Unsupported comparison operator index %d\n", cmprtr, EXIT_FAILURE) - } -} - -/* Parse Comparison */ -void prscmp(int revrse) { - skpspc(); - cmpenc = enccmp(nxtchr); //Encode Comparison Character - cmprtr = cmpenc; //Set Encoded Comparator - if (cmprtr) { - cmpenc = enccmp(nxtchr); //Encode Next Comparison Character - if (cmpenc != 0) cmprtr = cmprtr | cmpenc; //Combine Encoded Comparator - } - skpspc(); - if (cmprtr) prstrm(FALSE); - //prccmp(); - Do after check for logical operator - DEBUG("Parsed comparator %d\n", cmprtr) -} - -/* Parse Flag Operator */ -void prsflg(int revrse) { - DEBUG("Parsing Flag Operator '%c'\n", nxtchr) - if (match('+')) cmprtr = 8; //Bit 0 = 0 - else if (match('-')) cmprtr = 9; //Bit 1 = 1 - else expctd("Flag operator"); - skpchr(); -} - -/* Parse Logical Operator * - * Sets: logops */ -void prslop(void) { - DEBUG("Checking for Logical Operator\n", 0) - logopr = LOPNONE; - skpspc(); - if (isalph()) { - getwrd(); //Get Logical Operator - DEBUG("Parsing Logical Operator %s\n", word) - if (wordis("AND")) logopr = LOPAND; - else if (wordis("OR")) logopr = LOPOR; - else ERROR("Encountered invalid token \"%s\"\n", word, EXIT_FAILURE) - } - DEBUG("Set LOGOPR to %d\n", logopr) -} - -/* Parse and Compile Conditional Expression * - * Condition = */ -void prscnd(char trmntr, int revrse) { - DEBUG("Parsing condition with REVRSE=%d\n", revrse) - tmplbl[0] = 0; - do { - strcpy(cmplbl, cndlbl); DEBUG("Set CMPLBL to \"%s\"\n", cmplbl); - revcmp = revrse; - if (look('!')) revcmp = (revcmp) ? FALSE: TRUE; - DEBUG("Set REVCMP to %d\n", revcmp) - if (!look('.')) prsxpr(0); - if (look(':')) prsflg(revcmp); //Parse Flag Operator - else prscmp(revcmp); //Parse Comparison Operator - prslop(); //Parse Logical Operator - if (logopr == LOPOR) { - revcmp = (revcmp) ? FALSE: TRUE; - DEBUG("Set REVCMP to %d\n", revcmp) - } - if (logopr && revcmp) { - if (!tmplbl[0]) newlbl(tmplbl); - strcpy(cmplbl, tmplbl); DEBUG("Set CMPLBL to \"%s\"\n", cmplbl); - } - prccmp(); //Process Comparison/Flag Operator - } while (logopr); - if (tmplbl[0]) setlbl(tmplbl); - expect(trmntr); -} +/************************************ + * C02 Conditional Parsing Routines * + ************************************/ +#include +#include +#include +#include +#include +#include "common.h" +#include "asm.h" +#include "parse.h" +#include "vars.h" +#include "expr.h" +#include "label.h" +#include "cond.h" + +int cmprtr; //Encoded Comparison Operator +int cmpenc; //Encoded Comparator Character + +/* Encode Comparison Operator Character * + * Args: Comparison Operator Character * + * Returns: Comparison Operator Bit Mask */ +int enccmp(char c) { + int e; + DEBUG("Encoding Comparison Character '%c'", c) + switch(c) { + case '=': e = 1; break; + case '<': e = 2; break; + case '>': e = 4; break; + default: e = 0; + } + if (e) { CCMNT(c); skpchr(); } + DETAIL(", encoded as %d\n", e); + return e; +} + +/* Process and Compile Comparison Operator and * + * Args: comparator - Encoded Comparison Operator * + * Uses: term - Term Being Compared Against * + * label - Branch Target if Comparison is FALSE */ +void prccmp(void) { + DEBUG("Processing comparator %d", cmprtr) DETAIL(" with REVCMP=%d\n", revcmp) + if (cmprtr > 7) { //Process Flag + cmprtr = (cmprtr ^ revcmp) & 1; //Apply Reversal + if (cmprtr) asmlin("BPL", cmplbl); + else asmlin("BMI", cmplbl); + return; + } + cmprtr = (cmprtr ^ revcmp) & 7; //Apply reversal + switch(cmprtr) { + case 0: // Raw Expression (Skip) + asmlin("BEQ", cmplbl); break; + case 1: // = or == + asmlin("CMP", term); asmlin("BNE", cmplbl); break; + case 2: // < + asmlin("CMP", term); asmlin("BCS", cmplbl); break; + case 3: // <= or =< + asmlin("CLC", ""); asmlin("SBC", term); asmlin("BCS", cmplbl); break; + case 4: // > + asmlin("CLC", ""); asmlin("SBC", term); asmlin("BCC", cmplbl); break; + case 5: // >= or => + asmlin("CMP", term); asmlin("BCC", cmplbl); break; + case 6: // <> or >< + asmlin("CMP", term); asmlin("BEQ", cmplbl); break; + case 7: // Raw Expression (Normal) + asmlin("BNE", cmplbl); break; + default: + ERROR("Unsupported comparison operator index %d\n", cmprtr, EXIT_FAILURE) + } +} + +/* Parse Comparison */ +void prscmp(int revrse) { + skpspc(); + cmpenc = enccmp(nxtchr); //Encode Comparison Character + cmprtr = cmpenc; //Set Encoded Comparator + if (cmprtr) { + cmpenc = enccmp(nxtchr); //Encode Next Comparison Character + if (cmpenc != 0) cmprtr = cmprtr | cmpenc; //Combine Encoded Comparator + } + skpspc(); + if (cmprtr) prstrm(FALSE); + //prccmp(); - Do after check for logical operator + DEBUG("Parsed comparator %d\n", cmprtr) +} + +/* Parse Flag Operator */ +void prsflg(int revrse) { + DEBUG("Parsing Flag Operator '%c'\n", nxtchr) + if (match('+')) cmprtr = 8; //Bit 0 = 0 + else if (match('-')) cmprtr = 9; //Bit 1 = 1 + else expctd("Flag operator"); + skpchr(); +} + +/* Parse Logical Operator * + * Sets: logops */ +void prslop(void) { + DEBUG("Checking for Logical Operator\n", 0) + logopr = LOPNONE; + skpspc(); + if (isalph()) { + getwrd(); //Get Logical Operator + DEBUG("Parsing Logical Operator %s\n", word) + if (wordis("AND")) logopr = LOPAND; + else if (wordis("OR")) logopr = LOPOR; + else ERROR("Encountered invalid token \"%s\"\n", word, EXIT_FAILURE) + } + DEBUG("Set LOGOPR to %d\n", logopr) +} + +/* Parse and Compile Conditional Expression * + * Condition = */ +void prscnd(char trmntr, int revrse) { + DEBUG("Parsing condition with REVRSE=%d\n", revrse) + tmplbl[0] = 0; + do { + strcpy(cmplbl, cndlbl); DEBUG("Set CMPLBL to \"%s\"\n", cmplbl); + revcmp = revrse; + if (look('!')) revcmp = (revcmp) ? FALSE: TRUE; + DEBUG("Set REVCMP to %d\n", revcmp) + if (!look('.')) prsxpr(0); + if (look(':')) prsflg(revcmp); //Parse Flag Operator + else prscmp(revcmp); //Parse Comparison Operator + prslop(); //Parse Logical Operator + if (logopr == LOPOR) { + revcmp = (revcmp) ? FALSE: TRUE; + DEBUG("Set REVCMP to %d\n", revcmp) + } + if (logopr && revcmp) { + if (!tmplbl[0]) newlbl(tmplbl); + strcpy(cmplbl, tmplbl); DEBUG("Set CMPLBL to \"%s\"\n", cmplbl); + } + prccmp(); //Process Comparison/Flag Operator + } while (logopr); + if (tmplbl[0]) setlbl(tmplbl); + expect(trmntr); +} diff --git a/src/cond.h b/src/cond.h index d57196a..1501fe1 100644 --- a/src/cond.h +++ b/src/cond.h @@ -1,10 +1,10 @@ -/************************************ - * C02 Conditional Parsing Routines * - ************************************/ - -enum LOGOPS {LOPNONE, LOPAND, LOPOR}; - -int revcmp; //Reverse Comparison -int logopr; //Logical Operator (set to LOGOPS) - -void prscnd(char trmntr, int revrse); //Parse Conditional Expression +/************************************ + * C02 Conditional Parsing Routines * + ************************************/ + +enum LOGOPS {LOPNONE, LOPAND, LOPOR}; + +int revcmp; //Reverse Comparison +int logopr; //Logical Operator (set to LOGOPS) + +void prscnd(char trmntr, int revrse); //Parse Conditional Expression diff --git a/src/dclrtn.h b/src/dclrtn.h index 98486f3..fcf7516 100644 --- a/src/dclrtn.h +++ b/src/dclrtn.h @@ -1,17 +1,17 @@ -/************************************ - * C02 Declaration Compiling Routines * - ************************************/ - -char fncnam[VARLEN+1]; //Function Name -char prmtra[VARLEN+1]; //Function Parameter A -char prmtrx[VARLEN+1]; //Function Parameter X -char prmtry[VARLEN+3]; //Function Parameter Y -int prmcnt; //Number of Parameters -//int lpemtd; //Location Prefix Emitted - -void addcon(int numval); //Add Constant -int pmodfr(); //Check for and Parse Modifier -int ctype(int reqtyp); //Check for Type Keyword -int ptype(int m); //Check for and Parse Type Keyword - -enum types {TNONE, TVOID, TENUM, TBITMASK,TCHAR, TINT, TSTRUCT}; +/************************************ + * C02 Declaration Compiling Routines * + ************************************/ + +char fncnam[VARLEN+1]; //Function Name +char prmtra[VARLEN+1]; //Function Parameter A +char prmtrx[VARLEN+1]; //Function Parameter X +char prmtry[VARLEN+3]; //Function Parameter Y +int prmcnt; //Number of Parameters +//int lpemtd; //Location Prefix Emitted + +void addcon(int numval); //Add Constant +int pmodfr(); //Check for and Parse Modifier +int ctype(int reqtyp); //Check for Type Keyword +int ptype(int m); //Check for and Parse Type Keyword + +enum types {TNONE, TVOID, TENUM, TBITMASK,TCHAR, TINT, TSTRUCT}; diff --git a/src/files.c b/src/files.c index 147c2d3..76c57d9 100644 --- a/src/files.c +++ b/src/files.c @@ -1,102 +1,102 @@ -/****************************** - * C02 File Handling Routines * - ******************************/ - -#include -#include -#include -#include -#include - -#include "common.h" -#include "files.h" - -/* Error - Print textual description of system error * - * and exit with system error code */ -void extsys(char *s) { - perror(s); - exterr(errno); -} - -/* Open Source File * - * Uses: srcnam - Source File Name * - * Sets: srcfil - Source File Handle */ -void opnsrc(void) { - DEBUG("Processing Source File Name '%s'\n", srcnam) - if (strrchr(srcnam, '.') == NULL) strcat(srcnam, ".c02"); //if no extension. add ".c02" - DEBUG("opening Source File '%s'\n", srcnam) - srcfil = fopen(srcnam, "r"); //open file - if (srcfil == NULL) extsys(srcnam); -} - -/* Close Source File */ -void clssrc(void) { fclose(srcfil); } - -/* Open Output File * - * Uses: outnam - Output File Name * - * Sets: outfil - Output File Handle */ -void opnout(void) { - DEBUG("Processing Output File Name '%s'\n", outnam) - if (strlen(outnam) == 0) //if Output File not specified - { - strcpy(outnam, srcnam); //copy Source Name to Ouput Name - char *dot = strrchr(outnam, '.'); //find extension - if (dot != NULL) *dot = 0; //and remove it - DEBUG("Set Output File Name to '%s'\n", outnam) - } - if (strrchr(outnam, '.') == NULL) strcat(outnam, ".asm"); //if no extension, add ".asm" - DEBUG("Opening Output File '%s'\n", outnam) - outfil = fopen(outnam, "w"); //open file - if (outfil == NULL) extsys(outnam); -} - -/* Close Output File */ -void clsout(void) { - fprintf(outfil, "\n"); - fclose(outfil); -} - -/* Open Log File * - * Uses: srcnam - Source File Name * - * Sets: logfil - Log File Handle */ -void opnlog(void) { - strcpy(lognam, srcnam); //set Log File Name to Source File Name - char *dot = strrchr(lognam, '.'); //find file extension - if (dot != NULL) *dot = 0; //and remove it - strcat(lognam, ".log"); //add extension ".log" - DEBUG("Opening Log File '%s'\n", lognam) - logfil = fopen(lognam, "w"); - if (logfil == NULL) extsys(lognam); -} - -/* Close Log File * - * Uses: logfil - Log File Handle */ -void clslog(void) { fclose(logfil); } - -/* Open Include file * - * Uses: incnam - Include File Name * - * subnam - Include File Name (Subdirectory) * - * Sets: incfil - Include File Handle */ -void opninc(int chksub) -{ - if (chksub) { - for (subidx=0; subidx +#include +#include +#include +#include + +#include "common.h" +#include "files.h" + +/* Error - Print textual description of system error * + * and exit with system error code */ +void extsys(char *s) { + perror(s); + exterr(errno); +} + +/* Open Source File * + * Uses: srcnam - Source File Name * + * Sets: srcfil - Source File Handle */ +void opnsrc(void) { + DEBUG("Processing Source File Name '%s'\n", srcnam) + if (strrchr(srcnam, '.') == NULL) strcat(srcnam, ".c02"); //if no extension. add ".c02" + DEBUG("opening Source File '%s'\n", srcnam) + srcfil = fopen(srcnam, "r"); //open file + if (srcfil == NULL) extsys(srcnam); +} + +/* Close Source File */ +void clssrc(void) { fclose(srcfil); } + +/* Open Output File * + * Uses: outnam - Output File Name * + * Sets: outfil - Output File Handle */ +void opnout(void) { + DEBUG("Processing Output File Name '%s'\n", outnam) + if (strlen(outnam) == 0) //if Output File not specified + { + strcpy(outnam, srcnam); //copy Source Name to Ouput Name + char *dot = strrchr(outnam, '.'); //find extension + if (dot != NULL) *dot = 0; //and remove it + DEBUG("Set Output File Name to '%s'\n", outnam) + } + if (strrchr(outnam, '.') == NULL) strcat(outnam, ".asm"); //if no extension, add ".asm" + DEBUG("Opening Output File '%s'\n", outnam) + outfil = fopen(outnam, "w"); //open file + if (outfil == NULL) extsys(outnam); +} + +/* Close Output File */ +void clsout(void) { + fprintf(outfil, "\n"); + fclose(outfil); +} + +/* Open Log File * + * Uses: srcnam - Source File Name * + * Sets: logfil - Log File Handle */ +void opnlog(void) { + strcpy(lognam, srcnam); //set Log File Name to Source File Name + char *dot = strrchr(lognam, '.'); //find file extension + if (dot != NULL) *dot = 0; //and remove it + strcat(lognam, ".log"); //add extension ".log" + DEBUG("Opening Log File '%s'\n", lognam) + logfil = fopen(lognam, "w"); + if (logfil == NULL) extsys(lognam); +} + +/* Close Log File * + * Uses: logfil - Log File Handle */ +void clslog(void) { fclose(logfil); } + +/* Open Include file * + * Uses: incnam - Include File Name * + * subnam - Include File Name (Subdirectory) * + * Sets: incfil - Include File Handle */ +void opninc(int chksub) +{ + if (chksub) { + for (subidx=0; subidx -#include -#include -#include -#include - -#include "common.h" -#include "files.h" -#include "asm.h" -#include "parse.h" -#include "label.h" -#include "vars.h" - -/* Add New Program Label */ -void addlab(char *name) { - if (fndvar(name)) ERROR("Label %s conflicts with variable with same name", name, EXIT_FAILURE) - if (fndlab(name)) ERROR("Duplicate program label %s\n", name, EXIT_FAILURE) - DEBUG("Adding Program Label %s ", name) DEBUG("at index %d\n", labcnt) - strcpy(labnam[labcnt++], name); -} - -int fndlab(char *name) { - DEBUG("Looking for Program Label %s\n", name) - for (labidx=0; labidx-1; i--) - if (lblflg[lbltyp[i]] == lbflag) break; - DEBUG("Search produced label index %d\n", i) - if (i>=0) strcpy(tmplbl, lblnam[i]); - return i; -} - -/* Set Block Flag for Last Label */ -void setblk(int blkflg) { lblblk[lblcnt-1] = blkflg; } - -/* Set label for next line of * - * Assembly Language Code * - * to word */ -void setlbl(char *lblset) { - DEBUG("Setting Label '%s'\n", lblset) - if (strlen(lblasm) > 0) { - DEBUG("Emitting Label '%s'\n'", lblasm); - asmlin("",""); //Emit Block End Label on it's own line - } - if (strlen(lblset) > LBLLEN) ERROR("Label '%s' exceeds maximum size\n", word, EXIT_FAILURE) - strcpy(lblasm, lblset); -} - -/* Parse Program Label */ -void prslab(void) { - DEBUG("Parsing Label '%s''\n", word) - addlab(word); - CCMNT(nxtchr); - skpchr(); //skip ':' -} - -/* generate new label */ -void newlbl(char* lbname) { - sprintf(lbname, LBLFMT, lblnxt++); - DEBUG("Generated new label '%s'\n", lbname) -} - -/* Check Label Contents * - * If lbname is blank, generate new * - * label and copy into lbname */ -void chklbl(char* lbname) { - if (lbname[0]) return; - newlbl(lbname); -} - -/* Request Label * - * if label is already set, returns that label * - * else generates new label and sets it */ -void reqlbl(char* lbname) { - DEBUG("Requesting Label\n",0) - if (lblasm[0] == 0) {newlbl(lbname); setlbl(lbname);} - else {strcpy(lbname,lblasm); DEBUG("Found lblasm set to \"%s\"\n", lblasm)} -} - -/* End Function Block */ -void endfnc(void) { - DEBUG("Ending function definition with lsrtrn set to %d\n", lsrtrn) - if (!lsrtrn) asmlin("RTS", ""); - infunc = FALSE; - DEBUG("Set infunc to %d\n", infunc) -} - -/* Pop Label from Stack and Emit on Next Line */ -int poplbl(void) { - int lbtype = lbltyp[--lblcnt]; - DEBUG("Popped label type %d\n", lbtype) - switch (lbtype) { - case LTFUNC: endfnc(); break; //Return From Subroutine - case LTDO: strcpy(loplbl, lblnam[lblcnt]); break; - case LTDWHL: strcpy(endlbl, lblnam[lblcnt]); break; - case LTCASE: strcpy(cndlbl, lblnam[lblcnt]); break; - case LTLOOP: asmlin("JMP", lblnam[lblcnt--]); //Jump to Beginning of Loop - default: setlbl(lblnam[lblcnt]); //Emit End of Loop Label - } - if (lbtype != LTCASE) inblck = lblblk[lblcnt-1]; - return lbtype; -} - -/* Get Top Label and Return Type */ -int toplbl(char *rtlbl) { - if (lblcnt) { - strcpy(rtlbl, lblnam[lblcnt-1]); - DEBUG("Found top label %s\n", rtlbl) - return lbltyp[lblcnt-1]; - } - rtlbl[0] = 0; //Clear Label - return LTNONE; -} - -/* Push Label onto Stack * - * Args: lbltyp - Label type * - * Uses: curlbl - Label to push */ -void pshlbl(int lbtype, char* lbname) { - DEBUG("Pushing label type %d\n", lbtype) - strcpy(lblnam[lblcnt], lbname); - lbltyp[lblcnt] = lbtype; - lblblk[lblcnt++] = FALSE; - DEBUG("Pushed label '%s' onto stack\n", lbname) -} +/****************************************************** + * C02 Label Parsing, Generation, and Lookup Routines * + ******************************************************/ + +#include +#include +#include +#include +#include + +#include "common.h" +#include "files.h" +#include "asm.h" +#include "parse.h" +#include "label.h" +#include "vars.h" + +/* Add New Program Label */ +void addlab(char *name) { + if (fndvar(name)) ERROR("Label %s conflicts with variable with same name", name, EXIT_FAILURE) + if (fndlab(name)) ERROR("Duplicate program label %s\n", name, EXIT_FAILURE) + DEBUG("Adding Program Label %s ", name) DEBUG("at index %d\n", labcnt) + strcpy(labnam[labcnt++], name); +} + +int fndlab(char *name) { + DEBUG("Looking for Program Label %s\n", name) + for (labidx=0; labidx-1; i--) + if (lblflg[lbltyp[i]] == lbflag) break; + DEBUG("Search produced label index %d\n", i) + if (i>=0) strcpy(tmplbl, lblnam[i]); + return i; +} + +/* Set Block Flag for Last Label */ +void setblk(int blkflg) { lblblk[lblcnt-1] = blkflg; } + +/* Set label for next line of * + * Assembly Language Code * + * to word */ +void setlbl(char *lblset) { + DEBUG("Setting Label '%s'\n", lblset) + if (strlen(lblasm) > 0) { + DEBUG("Emitting Label '%s'\n'", lblasm); + asmlin("",""); //Emit Block End Label on it's own line + } + if (strlen(lblset) > LBLLEN) ERROR("Label '%s' exceeds maximum size\n", word, EXIT_FAILURE) + strcpy(lblasm, lblset); +} + +/* Parse Program Label */ +void prslab(void) { + DEBUG("Parsing Label '%s''\n", word) + addlab(word); + CCMNT(nxtchr); + skpchr(); //skip ':' +} + +/* generate new label */ +void newlbl(char* lbname) { + sprintf(lbname, LBLFMT, lblnxt++); + DEBUG("Generated new label '%s'\n", lbname) +} + +/* Check Label Contents * + * If lbname is blank, generate new * + * label and copy into lbname */ +void chklbl(char* lbname) { + if (lbname[0]) return; + newlbl(lbname); +} + +/* Request Label * + * if label is already set, returns that label * + * else generates new label and sets it */ +void reqlbl(char* lbname) { + DEBUG("Requesting Label\n",0) + if (lblasm[0] == 0) {newlbl(lbname); setlbl(lbname);} + else {strcpy(lbname,lblasm); DEBUG("Found lblasm set to \"%s\"\n", lblasm)} +} + +/* End Function Block */ +void endfnc(void) { + DEBUG("Ending function definition with lsrtrn set to %d\n", lsrtrn) + if (!lsrtrn) asmlin("RTS", ""); + infunc = FALSE; + DEBUG("Set infunc to %d\n", infunc) +} + +/* Pop Label from Stack and Emit on Next Line */ +int poplbl(void) { + int lbtype = lbltyp[--lblcnt]; + DEBUG("Popped label type %d\n", lbtype) + switch (lbtype) { + case LTFUNC: endfnc(); break; //Return From Subroutine + case LTDO: strcpy(loplbl, lblnam[lblcnt]); break; + case LTDWHL: strcpy(endlbl, lblnam[lblcnt]); break; + case LTCASE: strcpy(cndlbl, lblnam[lblcnt]); break; + case LTLOOP: asmlin("JMP", lblnam[lblcnt--]); //Jump to Beginning of Loop + default: setlbl(lblnam[lblcnt]); //Emit End of Loop Label + } + if (lbtype != LTCASE) inblck = lblblk[lblcnt-1]; + return lbtype; +} + +/* Get Top Label and Return Type */ +int toplbl(char *rtlbl) { + if (lblcnt) { + strcpy(rtlbl, lblnam[lblcnt-1]); + DEBUG("Found top label %s\n", rtlbl) + return lbltyp[lblcnt-1]; + } + rtlbl[0] = 0; //Clear Label + return LTNONE; +} + +/* Push Label onto Stack * + * Args: lbltyp - Label type * + * Uses: curlbl - Label to push */ +void pshlbl(int lbtype, char* lbname) { + DEBUG("Pushing label type %d\n", lbtype) + strcpy(lblnam[lblcnt], lbname); + lbltyp[lblcnt] = lbtype; + lblblk[lblcnt++] = FALSE; + DEBUG("Pushed label '%s' onto stack\n", lbname) +} diff --git a/src/label.h b/src/label.h index 0b2068a..f83c242 100644 --- a/src/label.h +++ b/src/label.h @@ -1,41 +1,41 @@ -/****************************************************** - * C02 Label Parsing, Generation, and Lookup Routines * - ******************************************************/ - -char labnam[MAXLAB+1][LABLEN+1]; //Program Label Names -int labcnt; //Number of Program Labels -int labidx; //Index into labnam[] - -char curlbl[LBLLEN+1]; //Most recently generated label -char cmplbl[LBLLEN+1]; //Label for Comparison -char cndlbl[LBLLEN+1]; //Label for Conditional Code -char endlbl[LBLLEN+1]; //End Label -char forlbl[LBLLEN+1]; //For Loop Label -char loplbl[LBLLEN+1]; //Skip Increment Label -char skplbl[LBLLEN+1]; //Skip Increment Label -char tmplbl[LBLLEN+1]; //Temporary Label -char lblnam[MAXLBL+1][LBLLEN+1]; //Label Name Table -int lbltyp[MAXLBL+1]; //Label Type -int lblblk[MAXLBL+1]; //Label Ends Program Block -int lblcnt; //Number of Labels in stack -int lblnxt; //Sequence of next label to be generated -char lbltmp[LBLLEN+1]; //Label Temporary Storage - -enum ltypes {LTNONE, LTIF, LTELSE, LTLOOP, LTEND, LTDO, LTDWHL, LTSLCT, LTCASE, LTFUNC}; //Label Types -enum lflags {LFNONE, LFBGN, LFEND}; //Label Flag Types - -void addlab(char *name); //Add Program Label -int fndlab(char *name); //Find Program Label -void prslab(); //Parse Program Label -void loglab(void); //Print Program Label Table - -void chklbl(char* lbname); //Check Label Contents -int lstlbl(int lbflag); //Find Last Label of Specified Types * -void newlbl(char* lbname); //Generate New Block Label -int poplbl(); //Pop Last Label and Emit on Next Line -void pshlbl(int lbtype, char* lbname); //Push Label onto Stack -void reqlbl(char* lbname); //Require Label -void setblk(int blkflg); //Set Block Flag for Last Label -void setlbl(char *lblset); //Emit word as Label on Next Line -int toplbl(char *rtlbl); //Get Top Label and Return Type - +/****************************************************** + * C02 Label Parsing, Generation, and Lookup Routines * + ******************************************************/ + +char labnam[MAXLAB+1][LABLEN+1]; //Program Label Names +int labcnt; //Number of Program Labels +int labidx; //Index into labnam[] + +char curlbl[LBLLEN+1]; //Most recently generated label +char cmplbl[LBLLEN+1]; //Label for Comparison +char cndlbl[LBLLEN+1]; //Label for Conditional Code +char endlbl[LBLLEN+1]; //End Label +char forlbl[LBLLEN+1]; //For Loop Label +char loplbl[LBLLEN+1]; //Skip Increment Label +char skplbl[LBLLEN+1]; //Skip Increment Label +char tmplbl[LBLLEN+1]; //Temporary Label +char lblnam[MAXLBL+1][LBLLEN+1]; //Label Name Table +int lbltyp[MAXLBL+1]; //Label Type +int lblblk[MAXLBL+1]; //Label Ends Program Block +int lblcnt; //Number of Labels in stack +int lblnxt; //Sequence of next label to be generated +char lbltmp[LBLLEN+1]; //Label Temporary Storage + +enum ltypes {LTNONE, LTIF, LTELSE, LTLOOP, LTEND, LTDO, LTDWHL, LTSLCT, LTCASE, LTFUNC}; //Label Types +enum lflags {LFNONE, LFBGN, LFEND}; //Label Flag Types + +void addlab(char *name); //Add Program Label +int fndlab(char *name); //Find Program Label +void prslab(); //Parse Program Label +void loglab(void); //Print Program Label Table + +void chklbl(char* lbname); //Check Label Contents +int lstlbl(int lbflag); //Find Last Label of Specified Types * +void newlbl(char* lbname); //Generate New Block Label +int poplbl(); //Pop Last Label and Emit on Next Line +void pshlbl(int lbtype, char* lbname); //Push Label onto Stack +void reqlbl(char* lbname); //Require Label +void setblk(int blkflg); //Set Block Flag for Last Label +void setlbl(char *lblset); //Emit word as Label on Next Line +int toplbl(char *rtlbl); //Get Top Label and Return Type + diff --git a/src/stmnt.h b/src/stmnt.h index 610066a..4a95bc2 100644 --- a/src/stmnt.h +++ b/src/stmnt.h @@ -1,21 +1,21 @@ -/************************************ - * C02 Statement Compiling Routines * - ************************************/ - -char asnvar[VARLEN+1]; //Assigned Variable Name -int asntyp; //Assigned Variable Type -char asnidx[VARLEN+1] ; //Assigned Variable Index -int asnivt; //Assigned Index Variable Type -char ysnvar[VARLEN+1]; //Assigned Y Variable Name -char ysnidx[VARLEN+1] ; //Assigned Y Variable Index -int ysnivt; //Assigned Y Index Variable Type -char xsnvar[VARLEN+1]; //Assigned X Variable Name -char xsnidx[VARLEN+1] ; //Assigned X Variable Index -int xsnivt; //Assigned X Index Variable Type - -char xstmnt[LINELEN]; //Expected Statement - -void bgnblk(char blkchr); //End Program Block -void endblk(int blkflg); //End Program Block -void pdowhl(); //Parse and Compile WHILE after DO -void pstmnt(); //Parse and Compile Program Statement +/************************************ + * C02 Statement Compiling Routines * + ************************************/ + +char asnvar[VARLEN+1]; //Assigned Variable Name +int asntyp; //Assigned Variable Type +char asnidx[VARLEN+1] ; //Assigned Variable Index +int asnivt; //Assigned Index Variable Type +char ysnvar[VARLEN+1]; //Assigned Y Variable Name +char ysnidx[VARLEN+1] ; //Assigned Y Variable Index +int ysnivt; //Assigned Y Index Variable Type +char xsnvar[VARLEN+1]; //Assigned X Variable Name +char xsnidx[VARLEN+1] ; //Assigned X Variable Index +int xsnivt; //Assigned X Index Variable Type + +char xstmnt[LINELEN]; //Expected Statement + +void bgnblk(char blkchr); //End Program Block +void endblk(int blkflg); //End Program Block +void pdowhl(); //Parse and Compile WHILE after DO +void pstmnt(); //Parse and Compile Program Statement From 9478d4129934b1f9181a1b6e65f7383e2549a955 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Wed, 13 Nov 2019 02:20:10 -0500 Subject: [PATCH 05/42] Created Assembler a02.c --- a02.c | 572 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ a02.h | 124 +++++++++++++ 2 files changed, 696 insertions(+) create mode 100644 a02.c create mode 100644 a02.h diff --git a/a02.c b/a02.c new file mode 100644 index 0000000..7c77403 --- /dev/null +++ b/a02.c @@ -0,0 +1,572 @@ +/* Simple 6502 Assembler * + * for C02 Compiler * + * Uses DASM Syntax but * + * supports 65C02 Op Codes */ + +#include +#include +#include +#include +#include "a02.h" + +#define DEBUG TRUE + +enum otypes {BINFIL, PRGFIL}; //Object File Types + +char objtyp; //Object File Type +int orgadr; //Origin Address +int curadr; //Current Address +int lstadr; //List Address + +struct sym {int block; char name[MAXSYM]; int bytes, value;}; +struct sym symbol; //Current Symbol +struct sym symtbl[MAXGLB]; //Global Symbol Table +int symcnt; //Number of Global Labels +int blknum; //Local Label Block Number (0 = Global) + +char label[MAXSTR]; //Assembly Line Label +char mnmnc[MAXSTR]; //Opcode Mnemonic +char oprnd[MAXSTR]; //Opcode Mnemonic +char cmmnt[MAXSTR]; //Assembly Line Comment +char mcode[MAXSTR]; //Generated Bytes +char strng[MAXSTR]; //Parsed String + +unsigned char token, opmod; //OpCode Token, Modifier +unsigned int amode; //Addressing Modes +int zpage, opval; //ZeroPage Flag, Operand Value + +char hexadr[6]; //Current Address in Hexadecimal +char bytstr[5]; //String Representation of Byte + +char inplin[MAXSTR]; //Input Buffer +char *linptr; //Pointer into Input Buffer +int lineno; //Input File Line Number +int opridx; //Index into Operand +int passno; //Assembler Pass Number (1 or 2) + +char prgnam[256]; //Assembler Path and Name (from Command Line) +char inpnam[256]; //Input File Name +char outnam[256]; //Output File Name +char lstnam[256]; //List File Name +FILE *inpfil; //Input File Pointer +FILE *outfil; //Output File Pointer +FILE *lstfil; //List File Pointer + +/* Print Error Message and Exit */ +void xerror(char* format, char *s) { + if (lineno) fprintf(stderr, "%04d: ", lineno); + fprintf(stderr, format, s); + exit(EXIT_FAILURE); +} + +/* Skip Character in Input Line * + * Args: c - Character to Skip * + * Updates: linptr */ +int skpchr(char c) { + if (*linptr == c) {linptr++; return TRUE;} + else return FALSE; +} + +/* Skip Spaces in Input Line * + * Updates: linptr */ +void skpspc(void) { + while (*linptr && *linptr <= ' ') linptr++; +} + +/* Parse Word from Input Line * + * Args: skip - Skip Spaces Flag * + * *word - Buffer for Word * + * Updates: linptr * + * Returns: Word Found (TRUE/FALSE) */ +int pword(int skip, char* word) { + int wrdlen = 0; + if (skip) skpspc(); + while (isalnum(*linptr)) { + word[wrdlen++] = toupper(*linptr); + linptr++; + } + word[wrdlen] = 0; //Terminate String + if (wrdlen) return TRUE; else return FALSE; +} + +struct sym *fndsym(int block, char* name) { + for (int i=0; i < symcnt; i++) { + if (symtbl[i].block != block || strcmp(symtbl[i].name,name)) continue; + return &symtbl[i]; + } + return NULL; +} + +/* Set Symbol Value and Size */ +void setsym(int value, int bytes) { + if (DEBUG) printf("Setting Symbol %s to %d\n", symbol.name, value); + symbol.value = value; + if (bytes) symbol.bytes = bytes; + else symbol.bytes = (value > 0xFF) ? 2 : 1; +} + +/* Parse Label from Input Line + * Sets: label + * Updates: linptr + * Returns: Label Found (TRUE/FALSE) */ +int plabel(void) { + if (DEBUG) puts("Parsing Label"); + int block = (skpchr('.')) ? blknum : 0; //Local Label Block Number + int found = pword(FALSE, label); //Parse Word without Skipping Spaces + if (DEBUG) { + if (found) printf("Found Label %s\n", label); + else puts("No Label Found"); + } + skpchr(':'); //Skip Optional Label Terminator + if (found && passno == 1) { + if (label[0] && fndsym(block, label)) xerror("Duplicate Label %s Encountered\n", label); + if (DEBUG) printf("Initializing Symbol %s\n", label); + symbol.block = block; + strcpy(symbol.name, label); + setsym(curadr, 0); + } + if (block) { + for (int i=strlen(label)+1; i; i--) label[i] = label[i-1]; + label[0] = '.'; + } + return found; +} + +/* Copy Character to Operand and Increment */ +int cpychr(int c) { + if (c && toupper(*linptr) != c) return FALSE; + oprnd[opridx++] = toupper(*linptr++); + return TRUE; +} + +/* Evaluate Binary Number */ +int evlbin() { + int result = 0; + cpychr('%'); + while (isdigit(*linptr)) { + if (*linptr > '1') break; + result = (result << 1) + *linptr - '0'; + cpychr(0); + } + return result; +} + +/* Evaluate Binary Number */ +int evlchr() { + int result = 0; + cpychr('\''); + result = *linptr; + cpychr(0); + cpychr('\''); + return result; +} + +/* Evaluate Decimal Number */ +int evldec() { + int result = 0; + while (isdigit(*linptr)) { + result = result * 10 + *linptr - '0'; + cpychr(0); + } + return result; +} + +/* Evaluate Hexadecimal Number */ +int evlhex() { + int result = 0; + cpychr('$'); + while (isxdigit(*linptr)) { + int digit = *linptr - '0'; + if (digit > 9) digit = digit - 7; + result = (result << 4) + digit; + cpychr(0); + } + return result; +} + +/* Evaluate Symbol */ +struct sym *evlsym() { + char name[MAXSTR]; + int block = (cpychr('.')) ? blknum : 0; + pword(TRUE, name); + for (int i=0; name[i]; i++) oprnd[opridx++] = name[i]; + struct sym *result = fndsym(block, name); + if (passno == 2 && result == NULL) xerror("Undefined Symbol %s\n", name); + return result; +} + +/* Evaluate Term in Operand */ +int evltrm() { + int result; + skpspc(); + if (isalpha(*linptr) || *linptr == '.') { + struct sym *target = evlsym(); + result = (target) ? target->value : 0x100; + } + else if (isdigit(*linptr)) + result = evldec(); + else switch(*linptr) { + case '$': result = evlhex(); break; + case '%': result = evlbin(); break; + case '\'': result = evlchr(); break; + default: result = -1; + } + skpspc(); + if (DEBUG) printf("Term Evaluated to %d\n", result); + return result; +} + +/* Evaluate Operand */ +int evlopd(int maxsiz) { + int result = 0; + int hilo = 0; //Return LSB (1) or MSB (2) + int prns; //Optional Parenthesis after Hi/Low Operator + if (DEBUG) puts("Evaluating Operand"); + skpspc(); + if (cpychr('<')) hilo = 1; + else if (cpychr('>')) hilo = 2; + if (hilo) prns = cpychr('('); + result = evltrm(); + if (result >= 0) + while (cpychr('+')) { + int opdval = evltrm(); + if (opdval < 0) break; + result += opdval; + } + if (hilo) { + if (result < 0) xerror("Hi/Low Operator Requires Operand", ""); + if (prns) cpychr(')'); // + switch (hilo) { + case 1: result = result & 0xFF; break; //LSB + case 2: result = result >> 8; break; //MSB + } + } + if (DEBUG) printf("Operand Evaluated to %d\n", result); + if (result > maxsiz) xerror("Operand Value too Large\n", ""); + return result; +} + +/* Write Byte to Output File */ +void outbyt(int b) { + if (curadr > -1) curadr++; + if (passno != 2) return; + fputc(b & 0xFF, outfil); + sprintf(bytstr, "%02X ", b); + strcat(mcode, bytstr); +} + +/* Write Word to Output File */ +void outwrd(int w) { + outbyt(w & 0xff); + outbyt(w >> 8); +} + +/* Assemble BYTE Pseudo-Op */ +void asmbyt(void) { + do { + if (cpychr('"')) { //String Operand + while (!cpychr('"')) {outbyt(*linptr); cpychr(0); } + skpspc(); + } else + outbyt(evlopd(0xFF)); //Evaluate Operand + } while (cpychr(',')); +} + +/* Assemble WORD Pseudo-Op */ +void asmwrd(void) { + do { + outwrd(evlopd(0xFFFF)); //Evaluate Operand + } while (cpychr(',')); +} + +/* Assemble EQU Pseudo-Op */ +void asmequ(void) { + if (label[0] == 0) xerror("EQUate without Label", 0); + setsym(evlopd(0xFFFF), 0); +} + +/* Assemble ORG Pseudo-Op */ +void asmorg(void) { + orgadr = evlopd(0xFFFF); + curadr = orgadr; + lstadr = orgadr; + if (passno == 1 && symbol.name[0]) { + symbol.value = orgadr; + symbol.bytes = 2; + } + if (passno == 2 && objtyp == PRGFIL) + outwrd(orgadr); +} + +/* Assemble PROCESSOR Pseudo-Op */ +void asmprc(void) { + skpspc(); + while (isalnum(*linptr)) cpychr(0); + if (DEBUG) printf("Ignoring Operand %s\n", oprnd); +} + +/* Assemble SUBROUTINE Pseudo-Op */ +void asmsub(void) { + blknum++; + sprintf(oprnd, "%d", blknum); opridx = strlen(oprnd); + if (DEBUG) printf("Block Number set to %s\n", oprnd); +} + +/* Assemble FILL Pseudo-Op */ +void asmfll(void) { + int size = evlopd(0xFFFF); + for (int i=0; ivalue - curadr - 2); + } + else if (cpychr('+')) offset = evlopd(0xFF); + else if (cpychr('-')) offset = -evlopd(0xFF); + else xerror("Illegal Branch Operand\n", ""); + if ((offset > 127 || offset < -128) && passno == 2) + xerror("Branch Out of Range\n", ""); + if (DEBUG) printf("Branch Offset %d\n", offset); + opval = offset & 0xFF; +} + +/* Assemble Immediate Mode Instruction */ +void asmimd(void) { + opval = evlopd(0xFF); + zpage = TRUE; + opmod = 0x08; //Immediate +} + +/* Assemble Indirect Mode Instruction */ +void asmind(void) { + if (DEBUG) puts("Assembling Indirect Mode Instruction"); + zpage = TRUE; opval = evlopd(0xFFFF); + if (cpychr(',') && cpychr('X') && chkmod(INDCX)) cpychr(')'); ////(Indirect,X) opmod=0 + else if (cpychr(')')) { + if (cpychr(',') && cpychr('Y') && chkmod(INDCY)) opmod = 0x10; //(Indirect),Y + else if (chkmod(INDCT)) opmod = 0x11; //(Indirect) + if (token == 0x4C) zpage = FALSE; //JMP (Indirect Absolute) + } + else chkmod(0); //Illegal Addressing Mode + if (zpage && opval > 0x00FF) xerror("Operand Value too Large\n", ""); +} + +/* Assemble Implied/Accumulator/Absolute/ZeroPage Mode Instruction */ +void asmiaz(void) { + opval = evlopd(0xFFFF); + if (opval < 0) { + if (amode != IMPLD) //Implied + if (chkmod(ACMLT)) opmod = 0x08; //Accumulator + return; + } + zpage = (opval <= 0xff) ? TRUE : FALSE; + if (zpage && chkmod(ZPAGE)) opmod = 0x04; //ZeroPage + else if (chkmod(ABSLT)) opmod = 0x0C; //Absolute + if (cpychr(',')) { + if (cpychr('X')) { + if (zpage && chkmod(ZPAGX)) opmod = 0x14; //ZeroPage,X + else if (chkmod(ABSLX)) opmod = 0x1C; //Absolute,X + } else if (cpychr('Y')) { + if (zpage && (token == 0x82 || token == 0xA2)) + opmod = 0x14; //ZeroPage,Y + else {zpage = FALSE; opmod = 0x18;} //Absolute,Y + } else chkmod(0); //Illegal Addressing Mode + } +} + +/* Fix Opcode (if needed) */ +unsigned char fixopc(void) { + if (DEBUG) printf("Fixing OpCode $%02X+$%02X\n", token, opmod); + for (int i=0; opfix[i].token; i++) + if (opfix[i].token == token && opfix[i].opmod == opmod) + return opfix[i].opcode; + return token + opmod; +} + +/* Assemble Opcode */ +int asmopc(void) { + opmod = 0; + if (lkpopc(opclst) == FALSE) xerror("Invalid Mnemonic %s\n", mnmnc); + if (DEBUG) printf("Assembling Opcode Token 0x%02X\n", token); + if (DEBUG) printf("Addressing Mode Mask 0x%04X\n", amode); + skpspc(); + if (amode == 0) return asmpso(); //Pseudo-Op + else if (amode == RELTV) asmbrn(); //Branch (Relative) Instruction + else if (cpychr('#')) asmimd(); //Assemble Implied Instruction + else if (cpychr('(')) asmind(); //Assemble Indirect Instruction + else asmiaz(); //Assemble Implied/Accumulator/Absolute/ZeroPage Instruction + int opcode = fixopc(); + if (DEBUG) printf("Writing OpCode $%02X\n", opcode); + outbyt(opcode); + if (opval >= 0) { + if (zpage) outbyt(opval); //Byte Operand + else outwrd(opval); //Word Operand + } + return TRUE; +} + +/* Parse Opcode Mnemonic from Input Line + * Sets: mnmnc + * Updates: linptr + * Returns: Label Found (TRUE/FALSE) */ +int pmnmnc(void) { + if (DEBUG) puts("Parsing Mnemonic"); + int found = pword(TRUE, mnmnc); + opridx = 0; //Initialize Operand Index + if (found) asmopc(); + oprnd[opridx] = 0; //Terminate Operand String + return found; +} + +/* Parse Comment from Input Line + * Sets: cmmnt + * Updates: linptr */ +void pcmmnt(void) { + skpspc(); + int i = 0; + while (*linptr >= ' ') cmmnt[i++] = *linptr++; + cmmnt[i] = 0; //Terminate Comment + if (DEBUG) {if (i) printf("Comment: %s\n"); else puts("No Comment Found");} +} + +/* Add Label to Symbol Table */ +void addsym() { + if (symbol.value<0) xerror("Origin Not Set", ""); + memcpy(&symtbl[symcnt++], &symbol, sizeof(symbol)); +} + +/* Assemble Input File (Two Pass) * + * Args: pass - Assembly Pass (1 or 2) * + * Requires: inpfil - Input File Pointer * + * Uses: inplin - Input Line Buffer * + * lineno - Input File Line Number */ +void asmfil(int pass) { + passno = pass; //Assembly Pass Number + if (DEBUG) printf("Assembling Pass %d\n", pass); + lineno = 1; //Initialize Input File Line Number + blknum = 1; //Initialize Local Block Number + orgadr = -1; //Origin Address Not Set + curadr = orgadr; //Set Current Address to Origin + rewind(inpfil); //Start at Beginning of Input File + while (!feof(inpfil)) { + linptr = fgets(inplin, MAXSTR, inpfil); + if (linptr == NULL) break; + if (DEBUG) printf("%05d %04X: %s", lineno, curadr, inplin); + lstadr = curadr; //Set List Address + mcode[0] = 0; //Clear Generated Macbine Code + plabel(); //Parse Label + pmnmnc(); //Parse Mnemonic + pcmmnt(); //Parse Comment + if (passno == 1 && label[0]) addsym(); //Add Label to Table + if (passno == 2) { + if (lstadr < 0) hexadr[0] = 0; else sprintf(hexadr, "%04X", lstadr); + fprintf(lstfil, "%05d %-4s %-9s%-7s %-5s %-16s %s\n", lineno, hexadr, mcode, label, mnmnc, oprnd, cmmnt ); + } + lineno++; + } +} + +/* Print Symbol Table */ +void prtsym(void) { + fprintf(lstfil, "\n%s Symbol Table\nBlock Name Size Value\n", "Global"); + for (int i=0; i Date: Thu, 14 Nov 2019 11:13:45 -0500 Subject: [PATCH 06/42] Added pointer dereferencing to C02 compiler --- src/c02.c | 8 ++++ src/common.h | 2 +- src/dclrtn.c | 1 + src/expr.c | 43 ++++++++++++++++++- src/expr.h | 2 + src/include.c | 4 +- src/parse.c | 18 ++++---- src/parse.h | 2 +- src/stmnt.c | 112 ++++++++++++++++++++++++++++++++------------------ src/stmnt.h | 2 + 10 files changed, 141 insertions(+), 53 deletions(-) diff --git a/src/c02.c b/src/c02.c index be0a59e..fd633d6 100644 --- a/src/c02.c +++ b/src/c02.c @@ -56,6 +56,13 @@ void init(void) { strcpy(incdir, "../include/"); } +/* Parse Pointer Dereference Assignment */ +void ppntr(void) { + lsrtrn = FALSE; //Clear RETURN flag + if (xstmnt[0]) ERROR("Expected '%s' statement\n", xstmnt, EXIT_FAILURE) + prcasp(';'); +} + /* Reads and parses the next Word in Source File */ void pword(void) { lsrtrn = FALSE; //Clear RETURN flag @@ -111,6 +118,7 @@ void compile(void) { else if (match('}')) endblk(TRUE); //End Multi-Line Program Block else if (match('#')) pdrctv(); //Parse Directive else if (match('/')) skpcmt(TRUE); //Skip Comment + else if (match('*')) ppntr(); //Parse Pointer else if (isalph()) pword(); //Parse Word else ERROR("Unexpected character '%c'\n", nxtchr, EXIT_FAILURE) } diff --git a/src/common.h b/src/common.h index 7c054ee..1ac2d8b 100644 --- a/src/common.h +++ b/src/common.h @@ -29,7 +29,7 @@ #define CPUARG "6502" //Target CPU Operand #define ORGOP "ORG" //Origin Pseudo-Op #define EQUOP "EQU" //Equate Pseudo-Op -#define BYTEOP "DC" //Define Byte Pseudo-Op +#define BYTEOP "BYTE" //Define Byte Pseudo-Op #define STROP "DS" //Define String Pseudo-Op #define ALNOP "ALIGN" //Align Pseudo-Op #define USEGOP "SEG.U" //Uninitalized Segment Pseudo-Op diff --git a/src/dclrtn.c b/src/dclrtn.c index 445257e..5b54d83 100644 --- a/src/dclrtn.c +++ b/src/dclrtn.c @@ -53,6 +53,7 @@ void addfnc(void) { infunc = TRUE; //Set Inside Function Definition Flag DEBUG("Set infunc to %d\n", infunc) setlbl(fncnam); //Set Function Entry Point + asmlin(LOCOP, ""); //Set Local Variables Boundary if (prmtra[0]) asmlin("STA", prmtra); //Store First Parameter if (prmtry[0]) asmlin("STY", prmtry); //Store Second Parameter if (prmtrx[0]) asmlin("STX", prmtrx); //Store Third Parameter diff --git a/src/expr.c b/src/expr.c index 1de9040..5cfc17c 100644 --- a/src/expr.c +++ b/src/expr.c @@ -111,10 +111,43 @@ void chkidx(void) { } } -/* Parse Term in Expression * - * Sets: term - the term (as a string) */ +/* Parse Pointer * + * Sets: term - Compiled Pointer */ +void prsptr(void) { + DEBUG("Parsing pointer\n", 0) + expect('*'); //Pointer Dereference Operator + prsvar(FALSE,FALSE); //Parse Variable to Dereference + if (varble.modifr != MTZP) ERROR("Illegal dereference of non-pointer variable %s.\n", value, EXIT_FAILURE) +} + +/* Process Pointer Index * + * Sets: term - Compiled Pointer */ +void prcptx(char *index) { + if (strcmp(index,"X")==0) ERROR("Illegal use of register X\n", 0, EXIT_FAILURE); + if (strcmp(index,"A")==0) asmlin("TAY", ""); + else if (strcmp(index,"Y") != 0) asmlin("LDY", index); +} + +/* Process Pointer * + * Sets: term - Compiled Pointer */ +int prcptr(void) { + prsptr(); + DEBUG("Dereferencing pointer %s\n", value); + sprintf(term, "(%s),Y", value); + if (valtyp == ARRAY) { + prsidx(TRUE); + prcptx(value); + } + else asmlin("LDY","0"); + return FALSE; //Return Value Not an Integer +} + +/* Parse Term in Expression * + * Sets: term - the term (as a string) * + * Returns: TRUE if term is an integer */ int prstrm(int alwint) { DEBUG("Parsing term\n", 0) + if (match('*')) return prcptr(); //Parse and Deference Pointer prsval(FALSE, TRUE); //Parse Value - Disallow Registers, Allow Constants if (valtyp == FUNCTION) ERROR("Function call only allowed in first term\n", 0, EXIT_FAILURE) strcpy(term, value); @@ -303,6 +336,12 @@ int prcftm(int alwint) { /* Parse first term of expession * * First term can include function calls */ int prsftm(int alwint) { + DEBUG("Parsing first term\n", 0) + if (match('*')) { + prcptr(); //Parse and Deference Pointer + asmlin("LDA", term); + return FALSE; + } prsval(TRUE, TRUE); //Parse Value, Allow Registers & Constants return prcftm(alwint); } diff --git a/src/expr.h b/src/expr.h index 2e50211..0844a97 100644 --- a/src/expr.h +++ b/src/expr.h @@ -15,6 +15,7 @@ int trmcnt; //Number of total terms in current expression int chkadr(int adract, int alwstr); //Check for and Process Address or String void chkidx(); //Check for, Parse, and Process Index int prcftm(int alwint); //Process First Term +void prcptx(char *index); //Process Pointer Index void prcvri(void); //Process Integer Variable int prcivr(int alwint); //Process Integer Variable in Term void prsadr(int adract); //Parse and Compile Address of Operator @@ -23,6 +24,7 @@ void prsval(int alwreg, int alwcon); //Parse Value void prsfnc(char trmntr); //Parse function call void prsfpr(char trmntr); //Parse Function Paraeters or Return void prsidx(); //Parse Array Index +void prsptr(void); //Parse Pointer int prstrm(int alwint); //Parse Term in Expression void prsrxp(char trmntr); //Parse Rest of Expression int prsxpf(char trmntr); //Parse Expression in Function Call diff --git a/src/include.c b/src/include.c index 62b1ddc..9e300db 100644 --- a/src/include.c +++ b/src/include.c @@ -37,8 +37,8 @@ void pincnm(void) { sublen[subidx] = strlen(subnam[subidx]); subnam[subidx][sublen[subidx]++] = '/'; } - dlmtr = '>'; } + dlmtr = '>'; } else if (dlmtr != '"') ERROR("Unexpected character '%c' after include\n", dlmtr, EXIT_FAILURE) @@ -146,7 +146,7 @@ void pprgma(void) { else if (wordis("ORIGIN")) porign(); //Parse Origin else if (wordis("PADDING")) - ppddng(); //Parse Origin + ppddng(); //Parse Padding else if (wordis("RAMBASE")) prambs(); //Parse RamBase else if (wordis("VARTABLE")) diff --git a/src/parse.c b/src/parse.c index d85095d..9dce446 100644 --- a/src/parse.c +++ b/src/parse.c @@ -13,6 +13,8 @@ #include "asm.h" #include "parse.h" #include "label.h" +#include "expr.h" +#include "stmnt.h" /* Various tests against nxtchr */ int match(char c) {return TF(nxtchr == c);} @@ -372,21 +374,23 @@ void poperr(char* name) { } /* Process Post Operator */ -void prcpst(int isint, char* name, char *index) { +void prcpst(int isint, char* name, char *index, char indtyp, char ispntr) { DEBUG("Processing post operation '%c'\n", oper) + if (ispntr) {sprintf(word,"(%s),Y", name); strcpy(name, word); } char name1[VARLEN+3]; strcpy(name1, name); strcat(name1, "+1"); if (strlen(index)) { - asmlin("LDX", index); - strcat(name,",X"); + if (ispntr) prcptx(index); //Process Pointer Index + else prcidx(indtyp, name, index); //Process Index } + else if (ispntr) asmlin("LDY","0"); switch(oper) { case '+': if (strcmp(name, "X")==0) asmlin("INX", ""); else if (strcmp(name, "Y")==0) asmlin("INY", ""); else if (strcmp(name, "A")==0) poperr(name); //65C02 supports implicit INC, 6502 does not else { - asmlin("INC", name); + asmlin("INC", word); if (isint) { newlbl(skplbl); asmlin("BNE", skplbl); @@ -407,7 +411,7 @@ void prcpst(int isint, char* name, char *index) { asmlin("DEC", name1); setlbl(skplbl); } - asmlin("DEC", name); + asmlin("DEC", name); } break; case '<': @@ -434,7 +438,7 @@ void prcpst(int isint, char* name, char *index) { } /* Parse Post Operator */ -int prspst(char trmntr, int isint, char* name, char* index) { +int prspst(char trmntr, int isint, char* name, char* index, char indtyp, char ispntr) { oper = getnxt(); CCMNT(oper); DEBUG("Checking for post operation '%c'\n", oper) @@ -442,7 +446,7 @@ int prspst(char trmntr, int isint, char* name, char* index) { skpchr(); CCMNT(oper); expect(trmntr); - prcpst(isint, name, index); //Process Post-Op + prcpst(isint, name, index, indtyp, ispntr); //Process Post-Op return 0; } DEBUG("Not a post operation\n", 0) diff --git a/src/parse.h b/src/parse.h index 6e8c5b2..8c3b36e 100644 --- a/src/parse.h +++ b/src/parse.h @@ -55,7 +55,7 @@ int prsbyt(); //Parse Numeric Byte void prslit(); //Parse Literal int prsnum(int maxval); //Parse Numeric void prsopr(); //Parse Arithmetic Operator -int prspst(char trmntr, int isint, char* name, char* index); //Parse Post Operator +int prspst(char trmntr, int isint, char* name, char* index, char indtyp, char ispntr); //Parse Post Operator int psizof(void); //Parse SizeOf Operator int pidxof(void); //Parse SizeOf Operator void skpchr(); //Skip Next Character diff --git a/src/stmnt.c b/src/stmnt.c index b3884e2..cf28365 100644 --- a/src/stmnt.c +++ b/src/stmnt.c @@ -73,42 +73,52 @@ void prcidx(int idxtyp, char *name, char *index) /* Set word to assignment variable * * adding write offset (if set) */ -void setasn(char *name) { - strcpy(word, name); +void setasn(char *name, char ispntr) { + if (ispntr) strcpy(word,"("); + else word[0] = 0; + strcat(word, name); if (wrtofs[0]) strcat(word, wrtofs); + if (ispntr) strcat(word,"),Y"); +} + +void prcixy(char rgstr, char* idx, int ivt) { + DEBUG("Processing %c register indexed assignment\n", rgstr) + if (strlen(idx)) { //Process X variable Index + if (ivt != LITERAL) { + asmlin("PHA", ""); //Save Accumulator + if (rgstr == 'X') asmlin("TXA", ""); //Transfer Return Value to Accumulator + else asmlin("TYA", ""); + prcidx(ivt, word, idx); //Process Index + asmlin("STA", word); //Store Return Value + asmlin("PLA", ""); //Restore Accumulator + } else { + prcidx(ivt, word, idx); //Process Index + if (rgstr == 'X') asmlin("STX", word); //Store Return Value + else asmlin("STY", word); + } + } } /* Process Assignment of X and Y variables */ void prcaxy(void) { DEBUG("Processing X assignment variable '%s'\n", xsnvar) if (xsnvar[0]) { - setasn(xsnvar); - if (strlen(xsnidx)) { //Process X variable Index - if (xsnivt != LITERAL) { - asmlin("PHA", ""); //Save Accumulator - asmlin("TXA", ""); //Transfer Return Value to Accumulator - prcidx(xsnivt, word, xsnidx); //Process Index - asmlin("STA", word); //Store Return Value - asmlin("PLA", ""); //Restore Accumulator - } else { - prcidx(xsnivt, word, xsnidx); //Process Index - asmlin("STX", word); //Store Return Value - } - } + setasn(xsnvar, FALSE); + if (strlen(xsnidx)) prcixy('X', xsnidx, xsnivt); //Process Index else asmlin("STX", word); //Store Return Value xsnvar[0] = 0; } DEBUG("Processing Y assignment variable '%s'\n", ysnvar) if (ysnvar[0]) { - setasn(ysnvar); - if (strlen(ysnidx)) prcidx(ysnivt, word, ysnidx); //Process Index - asmlin("STY", word); //Store Return Value + setasn(ysnvar, FALSE); + if (strlen(ysnidx)) prcixy('Y', ysnidx, ysnivt); //Process Index + else asmlin("STY", word); //Store Return Value ysnvar[0] = 0; } } /* Process Assignment */ -void prcasn(char trmntr) { +void prcasn(char trmntr, char ispntr) { expect('='); if (look('(')) prssif(trmntr); //Parse Shortcut If else prsxpr(trmntr); //Parse Expression @@ -118,8 +128,12 @@ void prcasn(char trmntr) { else if (strcmp(asnvar, "Y")==0) asmlin("TAY", ""); else if (strcmp(asnvar, "A")==0) return; DEBUG("Processing assignment variable '%s'\n", asnvar) - setasn(asnvar); - if (asnidx[0]) prcidx(asnivt, word, asnidx); //Process Index + setasn(asnvar, ispntr); + if (asnidx[0]) { + if (ispntr) prcptx(asnidx); //Process Pointer Index + else prcidx(asnivt, word, asnidx); //Process Index + } + else if (ispntr) asmlin("LDY","0"); asmlin("STA", word); //Store Return Value } @@ -143,6 +157,26 @@ int getidx(char* idx) { return valtyp; } +/* Process Accumulator Assignment Variable */ +int prcava(char *name, char trmntr, char ispntr) { + strcpy(asnvar, name); + asntyp = valtyp; //Set Assigned Variable Type + DEBUG("Set STA variable to %s\n", asnvar) + if (asntyp == VARIABLE && look(';')) { + asmlin("STA", asnvar); + return TRUE; + } + if (asntyp == ARRAY) asnivt = getidx(asnidx); //Get Array Index and Type + else asnidx[0] = 0; + if (ispntr && strcmp(asnidx, "X") == 0) ERROR("Illegal use of register X\n", 0, EXIT_FAILURE) + DEBUG("Set STA index to '%s'", asnidx) DETAIL(" and type to %d\n", asnivt) + if (ispopr()) { + if (prspst(trmntr, FALSE, asnvar, asnidx, asnivt, ispntr)) expctd("post operator"); + return TRUE; + } + return FALSE; +} + /* Process Assignment Variable(s) */ void prcavr(char trmntr) { chksym(TRUE, FALSE, word); @@ -150,24 +184,11 @@ void prcavr(char trmntr) { strcpy(vrname, word); //save variable to assign to if (valtyp == STRUCTURE) prsmbr(vrname); //Updates word and vartyp if (vartyp == VTINT) { - if (ispopr()) {if (prspst(trmntr, TRUE, vrname, "")) expctd("post operator");} + if (ispopr()) {if (prspst(trmntr, TRUE, vrname, "", 0, FALSE)) expctd("post operator");} else prcasi(trmntr); //Process Integer Assignment return; } - strcpy(asnvar, vrname); - asntyp = valtyp; //Set Assigned Variable Type - DEBUG("Set STA variable to %s\n", asnvar) - if (asntyp == VARIABLE && look(';')) { - asmlin("STA", asnvar); - return; - } - if (asntyp == ARRAY) asnivt = getidx(asnidx); //Get Array Index and Type - else asnidx[0] = 0; - DEBUG("Set STA index to '%s'", asnidx) DETAIL(" and type to %d\n", asnivt) - if (ispopr()) { - if (prspst(trmntr, FALSE, asnvar, asnidx)) expctd("post operator"); - return; - } + if (prcava(vrname, trmntr, FALSE)) return; if (look(',')) { if (asntyp == REGISTER) ERROR("Register %s not allowed in plural assignment\n", asnvar, EXIT_FAILURE) prsvar(FALSE, FALSE); //get variable name @@ -185,7 +206,7 @@ void prcavr(char trmntr) { else xsnidx[0] = 0; } } - prcasn(trmntr); + prcasn(trmntr, FALSE); } /* Parse 'asm' String Parameter */ @@ -210,11 +231,22 @@ void pasm(void) { asmlin(opcode, word); } +/* Parse and Compile Assignment of Pointer */ +void prcasp(char trmntr) { + prsptr(); //Parse Pointer Dereference + DEBUG("Processing assignment to dereferenced pointer %s\n", value) + if (prcava(value, trmntr, TRUE)) return; //Process Accumulator Assignment Variable + prcasn(trmntr, TRUE); +} + /* Parse and Compile an Assignment */ void prsasn(char trmntr) { - getwrd(); //Get Variable to be Assigned - DEBUG("Parsing assignment of word %s\n", word) - prcavr(trmntr); + if (match('*')) prcasp(trmntr); + else { + getwrd(); //Get Variable to be Assigned + DEBUG("Parsing assignment of word %s\n", word) + prcavr(trmntr); + } } /* parse and compile 'break'/'continue' statement */ diff --git a/src/stmnt.h b/src/stmnt.h index 4a95bc2..7809a6d 100644 --- a/src/stmnt.h +++ b/src/stmnt.h @@ -17,5 +17,7 @@ char xstmnt[LINELEN]; //Expected Statement void bgnblk(char blkchr); //End Program Block void endblk(int blkflg); //End Program Block +void prcasp(char trmntr); //Process Pointer Assignment +void prcidx(int idxtyp, char *name, char *index); void pdowhl(); //Parse and Compile WHILE after DO void pstmnt(); //Parse and Compile Program Statement From 18088691d7d364560bba0f25aa35f700e0783a8e Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Thu, 14 Nov 2019 11:15:51 -0500 Subject: [PATCH 07/42] Updated and Debugged A02 Assembler --- a02.c | 158 +++++++++++++++++++++++++++++++++++++++++++--------------- a02.h | 123 +++++++++++++++++++-------------------------- 2 files changed, 169 insertions(+), 112 deletions(-) diff --git a/a02.c b/a02.c index 7c77403..238961a 100644 --- a/a02.c +++ b/a02.c @@ -18,9 +18,9 @@ int orgadr; //Origin Address int curadr; //Current Address int lstadr; //List Address -struct sym {int block; char name[MAXSYM]; int bytes, value;}; +struct sym {int block; char name[MAXLBL+1]; int bytes, value;}; struct sym symbol; //Current Symbol -struct sym symtbl[MAXGLB]; //Global Symbol Table +struct sym symtbl[MAXSYM]; //Global Symbol Table int symcnt; //Number of Global Labels int blknum; //Local Label Block Number (0 = Global) @@ -43,14 +43,17 @@ char *linptr; //Pointer into Input Buffer int lineno; //Input File Line Number int opridx; //Index into Operand int passno; //Assembler Pass Number (1 or 2) +int savlno; //Line Number (Saved) char prgnam[256]; //Assembler Path and Name (from Command Line) char inpnam[256]; //Input File Name char outnam[256]; //Output File Name char lstnam[256]; //List File Name +char incnam[256]; //Include File Name FILE *inpfil; //Input File Pointer FILE *outfil; //Output File Pointer FILE *lstfil; //List File Pointer +FILE *incfil; //Include File Pointer /* Print Error Message and Exit */ void xerror(char* format, char *s) { @@ -59,6 +62,14 @@ void xerror(char* format, char *s) { exit(EXIT_FAILURE); } +/* Open File with Error Checking */ +FILE * opnfil(char* name, char* mode) { + if (DEBUG) printf("Opening file '%s' with mode '%s'\n", name, mode); + FILE *fp = fopen(name, mode); + if (!fp) xerror("Error Opening File '%s'\n", name); + return fp; +} + /* Skip Character in Input Line * * Args: c - Character to Skip * * Updates: linptr */ @@ -81,7 +92,7 @@ void skpspc(void) { int pword(int skip, char* word) { int wrdlen = 0; if (skip) skpspc(); - while (isalnum(*linptr)) { + while (isalnum(*linptr) || *linptr == '_') { word[wrdlen++] = toupper(*linptr); linptr++; } @@ -122,6 +133,7 @@ int plabel(void) { if (label[0] && fndsym(block, label)) xerror("Duplicate Label %s Encountered\n", label); if (DEBUG) printf("Initializing Symbol %s\n", label); symbol.block = block; + if (strlen(label) > MAXLBL) xerror("Label %s Too Long\n", label); strcpy(symbol.name, label); setsym(curadr, 0); } @@ -135,7 +147,8 @@ int plabel(void) { /* Copy Character to Operand and Increment */ int cpychr(int c) { if (c && toupper(*linptr) != c) return FALSE; - oprnd[opridx++] = toupper(*linptr++); + if (opridx < MAXSTR) oprnd[opridx++] = toupper(*linptr); + linptr++; return TRUE; } @@ -189,7 +202,7 @@ struct sym *evlsym() { char name[MAXSTR]; int block = (cpychr('.')) ? blknum : 0; pword(TRUE, name); - for (int i=0; name[i]; i++) oprnd[opridx++] = name[i]; + for (int i=0; name[i]; i++) if (opridx Date: Thu, 14 Nov 2019 12:28:32 -0500 Subject: [PATCH 08/42] Added HEX Pseudo-Op, Fixed LDY Addressing Modes --- a02.c | 7 +++++++ a02.h | 8 ++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/a02.c b/a02.c index 238961a..b460078 100644 --- a/a02.c +++ b/a02.c @@ -286,6 +286,12 @@ void asmbyt(void) { } while (cpychr(',')); } +/* Assemble HEX Pseudo-Op */ +void asmhex(void) { + if (DEBUG) puts("Assembling HEX Pseudo-Op"); + do {outbyt(evlhex(0xFF)); } while (cpychr(',')); +} + /* Assemble WORD Pseudo-Op */ void asmwrd(void) { do { @@ -359,6 +365,7 @@ int asmpso(void) { switch (token) { case '=': asmequ(); break; //EQU case 'B': asmbyt(); break; //BYTE + case 'H': asmhex(); break; //BYTE case 'W': asmwrd(); break; //WORD case 'F': asmfll(); break; //FILL case 'S': asmsub(); break; //SUBRoutine diff --git a/a02.h b/a02.h index 16c07d2..3899f29 100644 --- a/a02.h +++ b/a02.h @@ -41,9 +41,9 @@ struct amd amdesc[] = { struct opc {char name[5], token; int amode;}; struct opc psolst[] = { - {"BYTE", 'B', 0}, {"WORD", 'W', 0}, {"EQU", '=', 0}, {"FILL", 'F', 0}, {"INCL", 'I', 0}, - {"SUBR", 'S', 0}, {"ORG", '*', 0}, {"PROC", 'P', 0}, {"DC", 'B', 0}, {"DS", 'F', 0}, - {"", 0, 0} + {"BYTE", 'B', 0}, {"HEX", 'H'}, {"WORD", 'W', 0}, {"EQU", '=', 0}, {"FILL", 'F', 0}, + {"INCL", 'I', 0}, {"SUBR", 'S', 0}, {"ORG", '*', 0}, {"PROC", 'P', 0}, + {"DC", 'B', 0}, {"DS", 'F', 0}, {"", 0, 0} }; struct opc opclst[] = { @@ -74,7 +74,7 @@ struct opc opclst[] = { {"STZ", 0x60, 0x006C}, {"JMP", 0x4C, 0x0620}, {"JSR", 0x14, 0x0020}, - {"LDY", 0xA0, 0x002E}, + {"LDY", 0xA0, 0x006E}, {"STY", 0x80, 0x002C}, {"", 0, 0} }; From d02c8b6a3a82c4a987557522b6b21abc8429a688 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Thu, 14 Nov 2019 12:30:41 -0500 Subject: [PATCH 09/42] Added A02 Assembler test files --- work/a02.bat | 17 +++- work/a02test.a02 | 106 +++++++++++++++++++ work/opcodes.a02 | 258 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 378 insertions(+), 3 deletions(-) create mode 100644 work/a02test.a02 create mode 100644 work/opcodes.a02 diff --git a/work/a02.bat b/work/a02.bat index fcaac81..fe0619e 100644 --- a/work/a02.bat +++ b/work/a02.bat @@ -1,3 +1,14 @@ -@ECHO Assembling File %1.asm -dasm %1.asm -f3 -o%1.bin -l%1.lst -s%1.sym - +@ECHO OFF +IF "%1" == "" ( + ECHO Usage: %0 a02file + GOTO :EXIT +) +SET ASMEXT="" +IF EXIST %1.a02 SET ASMEXT=a02 +IF EXIST %1.asm SET ASMEXT=asm +IF "%ASMEXT%" == "" ( + ECHO Assembly File %1 Not Found + GOTO :EXIT +) +ECHO Assembling File %1.%ASMEXT% +..\a02.exe %1.%ASMEXT% %1.bin %1.lst >%1.out diff --git a/work/a02test.a02 b/work/a02test.a02 new file mode 100644 index 0000000..245271d --- /dev/null +++ b/work/a02test.a02 @@ -0,0 +1,106 @@ +;A02 Assembler Test File +TRUE: EQU $FF +FALSE: EQU $00 + +one equ 1 +two equ 1 + 1 +three equ one + one + one +four equ three + 1 + + +PNTR: EQU $80 +.local EQU 99 +STRUCT EQU $0FFF + +start ORG $0400 ;Start of Code + SUBROUTINE +flags: CLC + SEC + CLI + SEI + CLV + CLD +.local SED + SUBROUTINE +rgstr: DEX + DEY + INX + INY + TAX + TAY + TSX + TXA + TXS + TYA + SUBROUTINE +retrn: RTI + RTS + SUBROUTINE +stack: PHA + PHP + PHX + PHY + PLA + PLP + PLX + PLY + SUBROUTINE +other: NOP + BRK + SUBROUTINE +branch: BCC rgstr + BCS flags +.loop BEQ retrn + BNE jump + BMI .next + BPL .loop + BRA branch +.next BVC +127 + BVS -128 + SUBROUTINE +jump JMP .next + JMP (words ) + JMP (pntr,x) +.next JSR retrn + SUBROUTINE +memory: ADC #$98 ;Immediate + AND TABLE,Y ;Absolute,Y + CMP PNTR,Y ;Absolute,Y (Zero Page Address) + EOR (PNTR,X) ;(Indirect,X) + LDA (PNTR),Y ;(Indirect),Y + ORA (PNTR) ;(Indirect) + ASL ;Accumulator + DEC PNTR ;ZeroPage + INC PNTR,X ;ZeroPage,X + LSR BYTES ;Absolute + ROL BYTES,X ;Absolute,X + ROR $ABCD,X ;Absolute,X + CPX #$76 ;Immediate + CPY PNTR ;ZeroPage + STY PNTR,X ;ZeroPage,X + STZ $CDEF ;Absolute + LDY $CDEF,X ;Absolute,X + TRB PNTR ;ZeroPage + TSB $1234 ;Absolute + SUBROUTINE +exprsn LDA #PNTR+1 ;Immediate + LDA PNTR+1 ;ZeroPage + LDA (PNTR+2) ;Indirect + LDA (PNTR+4,X) ;(Indirect,X) + LDA (PNTR+6),Y ;(Indirect),Y + LDA STRUCT ;Absolute + LDX #STRUCT ;MSB Immediate + LDA STRUCT+1 + LDX #STRUCT+1 + LDA STRUCT+2 + LDX #<(STRUCT+2) + LDY #>(STRUCT+2) + +BYTES byte 99, %10101010,'~' ;Bytes + byte $12,$34 +HEXES hex 01,23,45,67,AB,CD,EF,1A,2B,3C,D4,E5,F6 ;Hexadecimal +WORDS word $3456 +TABLE word $1357,$9BDF,$2468 +TEXT byte "ABCDEFGHIJKLMNOPQRSTUVWXYZ",0 diff --git a/work/opcodes.a02 b/work/opcodes.a02 new file mode 100644 index 0000000..4ea7f35 --- /dev/null +++ b/work/opcodes.a02 @@ -0,0 +1,258 @@ + PROCESSOR 6502 + ORG $1000 +X00 BRK ;00 +X01 ORA ($10,X) ;01 +X02 BYTE $02 ;NOP #IMD +X03 BYTE $03 ;NOP +X04 TSB $40 ;04 +X05 ORA $50 ;05 +X06 ASL $60 ;06 +X07 BYTE $07 ;RMB0 +X08 PHP ;08 +X09 ORA #$90 ;09 +X0A ASL ;0A +X0B BYTE $0B ;NOP +X0C TSB $CBA9 ;0C +X0D ORA $DCBA ;0D +X0E ASL $EDCB ;0E +X0F BYTE $0F ;BBR0 +X10 BPL X11 ;10 +X11 ORA ($11),Y ;11 +X12 BYTE $12 ;NOP #IMD +X13 BYTE $13 ;NOP +X14 TRB $51 ;14 +X15 ORA $61,X ;15 +X16 ASL $71,X ;16 +X17 BYTE $17 ;RMB1 +X18 CLC ;18 +X19 ORA $A987,Y ;19 +X1A BYTE $1A ;1A +X1B BYTE $1B ;1A +X1C TRB $CBA9 ;1C +X1D ORA $DCBA,X ;1D +X1E ASL $EDCB,X ;1E +X1F BYTE $1F ;BBR1 +X20 JSR $0123 ;20 +X21 AND ($12,X) ;21 +X22 BYTE $22 ;NOP #IMD +X23 BYTE $23 ;NOP +X24 BIT $42 ;24 +X25 AND $52 ;25 +X26 ROL $62 ;26 +X27 BYTE $27 ;RMB2 +X28 PLP ;28 +X29 AND #$92 ;29 +X2A ROL ;2A +X2B BYTE $2B ;2B +X2C BIT $CBDA ;2C +X2D AND $DCBA ;2D +X2E ROL $EDCB ;2E +X2F BYTE $2F ;BBR2 +X30 BMI X33 ;30 +X31 AND ($13),Y ;31 +X32 BYTE $32 ;NOP #IMD +X33 BYTE $33 ;NOP +X34 BIT $43,X ;34 +X35 AND $53,X ;35 +X36 ROL $63,X ;36 +X37 BYTE $37 ;RMB3 +X38 SEC ;38 +X39 AND $9876,Y ;39 +X3A DEC ;3A +X3B BYTE $3B ;NOP +X3C BIT $CBA9,X ;3C +X3D AND $DCBA,X ;3D +X3E ROL $EDCB,X ;3E +X3F BYTE $3F ;BBR3 +X40 RTI ;40 +X41 EOR ($14,X) ;41 +X42 BYTE $42 ;NOP #IMD +X43 BYTE $43 ;NOP +X44 BYTE $44 ;NOP $ZP +X45 EOR $54 ;45 +X46 LSR $64 ;46 +X47 BYTE $47 ;RMB4 +X48 PHA ;48 +X49 EOR #$94 ;49 +X4A LSR ;4A +X4B BYTE $4B ;NOP +X4C JMP $CBA9 ;4C +X4D EOR $DCBA ;4D +X4E LSR $EDCB ;4E +X4F BYTE $4F ;BBR +X50 BVC X55 ;50 +X51 EOR ($15),Y ;51 +X52 EOR ($25) ;52 +X53 BYTE $53 ;NOP +X54 BYTE $54 ;NOP $ZP +X55 EOR $55,X ;55 +X56 LSR $65,X ;56 +X57 BYTE $57 ;RMB5 +X58 CLI ;58 +X59 EOR $9876,Y ;59 +X5A PHY ;5A +X5B BYTE $5B ;NOP +X5C BYTE $5C ;NOP $ABSL +X5D EOR $CBA9,X ;5C +X5E LSR $DCBA,X ;5E +X5F BYTE $5F ;BBR5 +X60 RTS ;60 +X61 ADC ($16,X) ;61 +X62 BYTE $62 ;NOP #IMD +X63 BYTE $63 ;NOP +X64 STZ $46 ;64 +X65 ADC $56 ;65 +X66 ROR $66 ;66 +X67 BYTE $67 ;RMB6 +X68 PLA ;68 +X69 ADC #$96 ;69 +X6A ROR ;6A +X6B BYTE $6B ;NOP +X6C JMP ($CDBA) ;6C +X6D ADC $DCBA ;6D +X6E ROR $EDCB ;6E +X6F BYTE $6F ;BBR6 +X70 BVS X77 ;70 +X71 ADC ($17),Y ;71 +X72 ADC ($27) ;72 +X73 BYTE $73 ;NOP +X74 STZ $47,X ;74 +X75 ADC $57,X ;75 +X76 ROR $67,X ;76 +X77 BYTE $77 ;RMB7 +X78 SEI ;78 +X79 ADC $9875,Y ;79 +X7A PLY ;7A +X7B BYTE $7B ;NOP +X7C JMP ($C7,X) ;7C +X7D ADC $DCBA,X ;7E +X7E ROR $DCBA,X ;7E +X7F BYTE $7F ;BBR7 +X80 BRA X88 ;80 +X81 STA ($18,X) ;81 +X82 BYTE $82 ;NOP #IMD +X83 BYTE $83 ;NOP +X84 STY $48 ;84 +X85 STA $58 ;85 +X86 STX $68 ;86 +X87 BYTE $87 ;SMB0 +X88 DEY ;88 +X89 BIT #$98 ;89 +X8A TXA ;8A +X8B BYTE $8B ;NOP +X8C STY $CBA9 ;8C +X8D STA $DCBA ;8D +X8E STX $EDCB ;8E +X8F BYTE $8F ;BBS0 +X90 BCC X99 ;90 +X91 STA ($19),Y ;91 +X92 STA ($29) ;92 +X93 BYTE $93 ;NOP +X94 STY $49,X ;94 +X95 STA $59,X ;95 +X96 STX $69,Y ;96 +X97 BYTE $97 ;SMB1 +X98 TYA ;98 +X99 STA $9876,Y ;99 +X9A TXS ;9A +X9B BYTE $9B ;NOP +X9C STZ $CBA9 ;9C +X9D STA $DCBA,X ;90 +X9E STZ $EDCB,X ;9E +X9F BYTE $9F ;BBS1 +XA0 LDY #$0A ;A0 +XA1 LDA ($1A,X) ;A1 +XA2 LDX #$2A ;A2 +XA3 BYTE $A3 ;NOP +XA4 LDY $4A ;A4 +XA5 LDA $5A ;A5 +XA6 LDX $6A ;A6 +XA7 BYTE $A7 ;SMB2 +XA8 TAY ;A8 +XA9 LDA #$9A ;A9 +XAA TAX ;AA +XAB BYTE $AB ;NOP +XAC LDY $CBA9 ;AC +XAD LDA $DCBA ;AD +XAE LDX $EDCB ;AE +XAF BYTE $AF ;BBS2 +XB0 BCS XBB ;B0 +XB1 LDA ($1B),Y ;B1 +XB2 LDA ($2B) ;B2 +XB3 BYTE $B3 ;NOP +XB4 LDY $B4,X ;B4 +XB5 LDA $B5,X ;BS +XB6 LDX $B6,Y ;B6 +XB7 BYTE $B7 ;SMB3 +XB8 CLV ;B8 +XB9 LDA $9876,Y ;B9 +XBA TSX ;BA +XBB BYTE $BB ;NOP +XBC STX $CBA9,Y ;BC +XBD LDA $DCBA,X ;BD +XBE LDX $EDCB,Y ;BE +XBF BYTE $BF ;BBS3 +XC0 CPY #$0C ;C0 +XC1 CMP ($1C,X) ;C1 +XC2 BYTE $C2 ;NOP #imd +XC3 BYTE $C3 ;NOP +XC4 CPY $4C ;C4 +XC5 CMP $5C ;C5 +XC6 DEC $6C ;C6 +XC7 BYTE $C7 ;SMB4 +XC8 INY ;C8 +XC9 CMP #$9C ;C9 +XCA DEX ;CA +XCB WAI ;CB +XCC CPY $CBA9 ;CC +XCD CMP $DCBA ;CD +XCE DEC $EDCB ;CE +XCF BYTE $CF ;BBS4 +XD0 BNE XDD ;D0 +XD1 CMP ($1D),Y ;D1 +XD2 CMP ($2D) ;D2 +XD3 BYTE $D3 ;NOP +XD4 BYTE $D4 ;NOP $ZP,X +XD5 CMP $5D,X ;D5 +XD6 DEC $6D,X ;D6 +XD7 BYTE $D7 ;SMB5 +XD8 CLD ;D8 +XD9 CMP $9876,Y ;D9 +XDA PHX ;DA +XDB STP ;DB +XDC BYTE $DC ;NOP $ABSL +XDD CMP $DCBA,X ;DD +XDE DEC $EDCB,X ;DE +XDF BYTE $DF ;BBS5 +XE0 CPX #$0E ;E0 +XE1 SBC ($1E,X) ;E1 +XE2 BYTE $E2 ;NOP #IMD +XE3 BYTE $E3 ;NOP +XE4 CPX $4E ;E4 +XE5 SBC $5E ;E5 +XE6 INC $6E ;E6 +XE7 BYTE $E7 ;SMB6 +XE8 INX ;E8 +XE9 SBC #$9E ;E9 +XEA NOP ;EA +XEB BYTE $EB ;NOP +XEC CPX $CBA9 ;EC +XED SBC $DCBA ;ED +XEE INC $EDCB ;EE +XEF BYTE $EF ;BBS6 +XF0 BEQ XFF ;F0 +XF1 SBC ($1F),Y ;F1 +XF2 SBC ($2F) ;F2 +XF3 BYTE $F3 ;NOP +XF4 BYTE $F4 ;NOP $ZP,X +XF5 SBC $5F,X ;F5 +XF6 INC $6F,X ;F6 +XF7 BYTE $F7 ;SMB7 +XF8 SED ;F8 +XF9 SBC $9876,Y ;F9 +XFA PLX ;FA +XFB BYTE $FB ;NOP +XFC BYTE $FC ;NOP $ABSL +XFD SBC $DCBA,X ;FD +XFE INC $EDCB,X ;FE +XFF BYTE $FF ;BBS7 From 77b0f1017f2193281cf608037a879f42945bf2cf Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Thu, 14 Nov 2019 17:56:34 -0500 Subject: [PATCH 10/42] Added ALIGN and END Pseudo-Ops to A02 Assembler --- a02.c | 67 ++++++++++++++++++++++++++++++++++++++++++++--------------- a02.h | 4 ++-- 2 files changed, 52 insertions(+), 19 deletions(-) diff --git a/a02.c b/a02.c index b460078..a188ebd 100644 --- a/a02.c +++ b/a02.c @@ -18,7 +18,7 @@ int orgadr; //Origin Address int curadr; //Current Address int lstadr; //List Address -struct sym {int block; char name[MAXLBL+1]; int bytes, value;}; +struct sym {int block; char name[MAXLBL+1]; int bytes, value, refrd;}; struct sym symbol; //Current Symbol struct sym symtbl[MAXSYM]; //Global Symbol Table int symcnt; //Number of Global Labels @@ -31,6 +31,8 @@ char cmmnt[MAXSTR]; //Assembly Line Comment char mcode[MAXSTR]; //Generated Bytes char strng[MAXSTR]; //Parsed String +int opridx; //Index into Operand + unsigned char token, opmod; //OpCode Token, Modifier unsigned int amode; //Addressing Modes int zpage, opval; //ZeroPage Flag, Operand Value @@ -41,10 +43,11 @@ char bytstr[5]; //String Representation of Byte char inplin[MAXSTR]; //Input Buffer char *linptr; //Pointer into Input Buffer int lineno; //Input File Line Number -int opridx; //Index into Operand -int passno; //Assembler Pass Number (1 or 2) int savlno; //Line Number (Saved) +int passno; //Assembler Pass Number (1 or 2) +int endasm; //End Assembly Flag + char prgnam[256]; //Assembler Path and Name (from Command Line) char inpnam[256]; //Input File Name char outnam[256]; //Output File Name @@ -114,6 +117,14 @@ void setsym(int value, int bytes) { symbol.value = value; if (bytes) symbol.bytes = bytes; else symbol.bytes = (value > 0xFF) ? 2 : 1; + symbol.refrd = FALSE; +} + +/* Add Character to Beginning of String */ +void pfxstr(char c, char* s) { + for (int i=strlen(s)+1; i; i--) + s[i] = s[i-1]; //Copy All Characters to the Right + s[0] = c; //Insert Character at Beginning } /* Parse Label from Input Line @@ -137,10 +148,8 @@ int plabel(void) { strcpy(symbol.name, label); setsym(curadr, 0); } - if (block) { - for (int i=strlen(label)+1; i; i--) label[i] = label[i-1]; - label[0] = '.'; - } + if (block) pfxstr('.', label); + skpspc(); //Skip to Mnemonic, Comment, or EOL return found; } @@ -205,6 +214,7 @@ struct sym *evlsym() { for (int i=0; name[i]; i++) if (opridxrefrd = TRUE; //Symbol was Referenced return result; } @@ -299,6 +309,16 @@ void asmwrd(void) { } while (cpychr(',')); } +/* Assemble FILL Pseudo-Op */ +void asmaln(void) { + if (DEBUG) puts("Assembling ALIGN Pseudo-Op"); + int size = evlopd(0xFFFF); if (size < 2) return; + if (DEBUG) printf("Aligning to %d Bytes\n", size); + int fill = size - (curadr % size); if (fill == size) return; + if (DEBUG) printf("Filling %d Bytes\n", fill); + for (int i=0; i Date: Thu, 14 Nov 2019 22:01:13 -0500 Subject: [PATCH 11/42] Tested and Debugged Pointer Dereferencing --- src/c02.c | 13 +++++++++++- src/common.h | 1 + src/expr.c | 56 +++++++++++++++++++++++++++++++++++----------------- src/parse.c | 15 +++++++------- src/stmnt.c | 15 ++++++++------ src/vars.c | 38 +++++++++++++++++------------------ 6 files changed, 87 insertions(+), 51 deletions(-) diff --git a/src/c02.c b/src/c02.c index fd633d6..a73658f 100644 --- a/src/c02.c +++ b/src/c02.c @@ -186,6 +186,16 @@ void pargs(int argc, char *argv[]) { if (outnam[0]) DEBUG("outnam set to '%s'\n", outnam) } +/* Validate CPU Type * + * Uses: cputype * + * Sets: cmos */ +void chkcpu(void) { + if (strcmp(cputyp, "6502") == 0) cmos = FALSE; + else if (strcmp(cputyp, "65C02") == 0) cmos = TRUE; + else ERROR("Invalid CPU Type %s\n", cputyp, EXIT_FAILURE) +} + + int main(int argc, char *argv[]) { debug = TRUE; //Output Debug Info gencmt = TRUE; //Generate Assembly Language Comments @@ -195,7 +205,8 @@ int main(int argc, char *argv[]) { init(); //Initialize Global Variables pargs(argc, argv); //Parse Command Line Arguments - + chkcpu(); //Validate CPU Type + opnsrc(); //Open Source File opnout(); //Open Output File opnlog(); //Open Log File diff --git a/src/common.h b/src/common.h index 1ac2d8b..7ebee84 100644 --- a/src/common.h +++ b/src/common.h @@ -49,6 +49,7 @@ void prttim(); //Print elapsed time #define ERROR(fmt, val, err) {fprintf(stderr, fmt, val);exterr(err);} int debug; //Print Debug Info (TRUE or FALSE) +int cmos; //Flag: Use 65C02 Instruction Set int gencmt; //Generate Assembly Language Comments char asmcmt[LINELEN]; //Processed Assembly Language Comment diff --git a/src/expr.c b/src/expr.c index 5cfc17c..807cee4 100644 --- a/src/expr.c +++ b/src/expr.c @@ -20,6 +20,8 @@ void pshtrm(void) { oprstk[trmidx] = oper; //Put Current Operator on Stack strcpy(trmstk[trmidx], term); //Put Current Term on Stack trmidx++; //Increment Stack Pointer + DEBUG("expr.pshtrm: Pushed term %s ", term) + DETAIL("and operator '%onto stack'\n", oper) } /* Pop Term and Operator off Stack */ @@ -27,6 +29,8 @@ void poptrm(void) { trmidx--; //Decrement Stack Pointer strcpy(term, trmstk[trmidx]); //Restore Current Term from Stack oper = oprstk[trmidx]; //Restore Current Operator from Stack + DEBUG("expr.pshtrm: Popped term %s ", term) + DETAIL("and operator '%c' off stack\n", oper) } /* Parse value (literal or identifier) * @@ -35,13 +39,14 @@ void poptrm(void) { * Sets: value - the value (as a string) * * valtyp - value type */ void prsval(int alwreg, int alwcon) { - DEBUG("Parsing value\n", 0) + DEBUG("expr.prsval: Parsing value\n", 0) skpspc(); if (islpre()) prslit(); //Parse Literal else if (isalph()) prsvar(alwreg, alwcon); //Parse Variable else if (isbtop()) prsbop(); //Parse Byte Operator else expctd("literal or variable"); - DEBUG("Parsed value of type %d\n", valtyp) + DEBUG("expr.prsval: Parsed value %s ", value) + DETAIL("of type %d\n", valtyp) skpspc(); } @@ -58,7 +63,7 @@ void prcmns(void) { void prsidx(int clbrkt) { expect('['); prsval(TRUE, TRUE); //Parse Value, Allow Registers & Constants - DEBUG("Parsed array index '%s'\n", value) + DEBUG("expr.prsidx: Parsed array index '%s'\n", value) if (clbrkt) expect(']'); } @@ -69,21 +74,24 @@ void prsidx(int clbrkt) { * word - array index raw string * * Sets: term - modified variable name */ void prcsix(void) { - if (valtyp == LITERAL) { - strcat(term, "+"); - strcat(term, word); - } - else if (strcmp(value, "Y")==0) - strcat(term, ",Y"); - else { - if (strcmp(value, "A")==0) asmlin("TAX", ""); - else if (strcmp(value, "X")!=0) asmlin("LDX", value); - strcat(term, ",X"); - } + DEBUG("expr.prcsix: Processing simple array index %s\n", word); + if (valtyp == LITERAL) { + strcat(term, "+"); + strcat(term, word); + } + else if (strcmp(value, "Y")==0) + strcat(term, ",Y"); + else { + if (strcmp(value, "A")==0) asmlin("TAX", ""); + else if (strcmp(value, "X")!=0) asmlin("LDX", value); + strcat(term, ",X"); + } + DEBUG("expr.prcsix: Set term to %s\n", term); } /* Process Expression Array Index */ void prcxix(void) { + DEBUG("expr.prcxix: Processing Expression Array Index", 0) pshtrm(); //Push Array Variable onto Term Stack if (trmcnt) asmlin("PHA", ""); //Save Accumulator if not first term prcftm(FALSE); //Process First Term of Expression @@ -92,6 +100,7 @@ void prcxix(void) { if (trmcnt) asmlin("PLA", ""); //Restore Accumator if not first term poptrm(); //Pop Array Variable off Term Stack strcat(term, ",X"); + DEBUG("expr.prcxix: Set term to %s\n", term); } /* Check for, Parse, and Process Index */ @@ -117,12 +126,16 @@ void prsptr(void) { DEBUG("Parsing pointer\n", 0) expect('*'); //Pointer Dereference Operator prsvar(FALSE,FALSE); //Parse Variable to Dereference + strcpy(term, value); if (varble.modifr != MTZP) ERROR("Illegal dereference of non-pointer variable %s.\n", value, EXIT_FAILURE) + DEBUG("expr.prsptr: Set term to %s\n", term); } /* Process Pointer Index * * Sets: term - Compiled Pointer */ void prcptx(char *index) { + DEBUG("expr.prcptx: Processing Dereferenced Pointer %s ", term) + DETAIL("index [%s]\n", index) if (strcmp(index,"X")==0) ERROR("Illegal use of register X\n", 0, EXIT_FAILURE); if (strcmp(index,"A")==0) asmlin("TAY", ""); else if (strcmp(index,"Y") != 0) asmlin("LDY", index); @@ -132,13 +145,19 @@ void prcptx(char *index) { * Sets: term - Compiled Pointer */ int prcptr(void) { prsptr(); - DEBUG("Dereferencing pointer %s\n", value); - sprintf(term, "(%s),Y", value); + DEBUG("expr.prcptr: Dereferencing Pointer %s\n", value); if (valtyp == ARRAY) { prsidx(TRUE); prcptx(value); + sprintf(word, "(%s),Y", term); + } else if (cmos) { + sprintf(word, "(%s)", term); + } else { + asmlin("LDY","0"); + sprintf(word, "(%s),Y", term); } - else asmlin("LDY","0"); + strcpy(term, word); + DEBUG("expr.prcptr: Set term to %s\n", term); return FALSE; //Return Value Not an Integer } @@ -152,7 +171,7 @@ int prstrm(int alwint) { if (valtyp == FUNCTION) ERROR("Function call only allowed in first term\n", 0, EXIT_FAILURE) strcpy(term, value); if (valtyp == VARIABLE && prcivr(alwint)) return TRUE; - DEBUG("Parsed term %s\n", term) + DEBUG("expr.prstrm: Parsed term %s\n", term) chkidx(); //Check for Array Index skpspc(); return FALSE; @@ -417,6 +436,7 @@ void prsxpi(char trmntr, int asmxpr) { prsvar(FALSE, TRUE); if (valtyp == FUNCTION) { strcpy(term, value); + DEBUG("expr.prsxpi: Set term to %s\n", term) prsfnc(0); //Parse Expression Function } else if (valtyp == STRUCTURE) { prsmbr(value); diff --git a/src/parse.c b/src/parse.c index 9dce446..83562b4 100644 --- a/src/parse.c +++ b/src/parse.c @@ -83,7 +83,7 @@ void skpspc(void) { * otherwise FALSE */ int look(char c) { int found; - DEBUG("Looking for '%c', ", c); + DEBUG("parse.look: Looking for '%c', ", c); skpspc(); found = match(c); if (found) { @@ -141,8 +141,8 @@ void getwrd(void) { while (isanum()) word[wrdlen++] = toupper(getnxt()); word[wrdlen] = 0; ACMNT(word); - DEBUG("Read word '%s'", word) - DETAIL("Delimited by '%c'\n", nxtchr) + DEBUG("parse.getwrd: Read word '%s' ", word) + DETAIL("delimited by '%c'\n", nxtchr) } /* Escape Character */ @@ -375,8 +375,9 @@ void poperr(char* name) { /* Process Post Operator */ void prcpst(int isint, char* name, char *index, char indtyp, char ispntr) { - DEBUG("Processing post operation '%c'\n", oper) - if (ispntr) {sprintf(word,"(%s),Y", name); strcpy(name, word); } + DEBUG("parse.prcpst: Processing post operation '%c'\n", oper) + if (ispntr) ERROR("Post Operation on dereferenced pointer %s not supported\n", name, EXIT_FAILURE) + //sprintf(word,"(%s),Y", name); strcpy(name, word); } char name1[VARLEN+3]; strcpy(name1, name); strcat(name1, "+1"); if (strlen(index)) { @@ -388,7 +389,7 @@ void prcpst(int isint, char* name, char *index, char indtyp, char ispntr) { case '+': if (strcmp(name, "X")==0) asmlin("INX", ""); else if (strcmp(name, "Y")==0) asmlin("INY", ""); - else if (strcmp(name, "A")==0) poperr(name); //65C02 supports implicit INC, 6502 does not + else if (strcmp(name, "A")==0 && !cmos) poperr(name); //65C02 supports implicit INC, 6502 does not else { asmlin("INC", word); if (isint) { @@ -402,7 +403,7 @@ void prcpst(int isint, char* name, char *index, char indtyp, char ispntr) { case '-': if (strcmp(name, "X")==0) asmlin("DEX", ""); else if (strcmp(name, "Y")==0) asmlin("DEY", ""); - else if (strcmp(name, "A")==0) poperr(name); //65C02 supports implicit DEC, 6502 does not + else if (strcmp(name, "A")==0 && !cmos) poperr(name); //65C02 supports implicit DEC, 6502 does not else { if (isint) { newlbl(skplbl); diff --git a/src/stmnt.c b/src/stmnt.c index cf28365..08336c3 100644 --- a/src/stmnt.c +++ b/src/stmnt.c @@ -78,7 +78,7 @@ void setasn(char *name, char ispntr) { else word[0] = 0; strcat(word, name); if (wrtofs[0]) strcat(word, wrtofs); - if (ispntr) strcat(word,"),Y"); + if (ispntr) strcat(word,")"); } void prcixy(char rgstr, char* idx, int ivt) { @@ -133,7 +133,10 @@ void prcasn(char trmntr, char ispntr) { if (ispntr) prcptx(asnidx); //Process Pointer Index else prcidx(asnivt, word, asnidx); //Process Index } - else if (ispntr) asmlin("LDY","0"); + else if (ispntr && !cmos) { + strcat(word, ",Y"); + asmlin("LDY","0"); + } asmlin("STA", word); //Store Return Value } @@ -153,7 +156,7 @@ int getidx(char* idx) { prsidx(TRUE); //Parse Array Index if (valtyp == LITERAL) strncpy(idx, word, VARLEN); else strncpy(idx, value, VARLEN); - DEBUG("Parsed index %s\n", idx) + DEBUG("stmnt.getidx: Parsed index %s\n", idx) return valtyp; } @@ -161,7 +164,7 @@ int getidx(char* idx) { int prcava(char *name, char trmntr, char ispntr) { strcpy(asnvar, name); asntyp = valtyp; //Set Assigned Variable Type - DEBUG("Set STA variable to %s\n", asnvar) + DEBUG("stmnt.prcava: Set STA variable to %s\n", asnvar) if (asntyp == VARIABLE && look(';')) { asmlin("STA", asnvar); return TRUE; @@ -169,7 +172,7 @@ int prcava(char *name, char trmntr, char ispntr) { if (asntyp == ARRAY) asnivt = getidx(asnidx); //Get Array Index and Type else asnidx[0] = 0; if (ispntr && strcmp(asnidx, "X") == 0) ERROR("Illegal use of register X\n", 0, EXIT_FAILURE) - DEBUG("Set STA index to '%s'", asnidx) DETAIL(" and type to %d\n", asnivt) + DEBUG("stmnt.prcava: Set STA index to '%s'", asnidx) DETAIL(" and type to %d\n", asnivt) if (ispopr()) { if (prspst(trmntr, FALSE, asnvar, asnidx, asnivt, ispntr)) expctd("post operator"); return TRUE; @@ -234,7 +237,7 @@ void pasm(void) { /* Parse and Compile Assignment of Pointer */ void prcasp(char trmntr) { prsptr(); //Parse Pointer Dereference - DEBUG("Processing assignment to dereferenced pointer %s\n", value) + DEBUG("stmnt.prcasp: Processing assignment to dereferenced pointer %s\n", value) if (prcava(value, trmntr, TRUE)) return; //Process Accumulator Assignment Variable prcasn(trmntr, TRUE); } diff --git a/src/vars.c b/src/vars.c index 38ac9f1..b72812f 100644 --- a/src/vars.c +++ b/src/vars.c @@ -21,7 +21,7 @@ * varcnt if not found * * Returns: TRUE if found, otherwise FALSE */ int fndvar(char *name) { - DEBUG("Looking up variable '%s'\n", name) + DEBUG("vars,fndvar: Looking up variable '%s'\n", name) for (varidx=0; varidx -1) { @@ -159,7 +159,7 @@ int pidxof(void) { * Returns: variable size (as integer */ int psizof(void) { expect('@'); //Check for and Skip SizeOf Operator - DEBUG("Parsing SizeOf operator", 0); + DEBUG("vars.pdizof: Parsing SizeOf operator", 0); mbridx = -1; //Set Member Index to None reqvar(FALSE); //Parse Variable Name to get Size Of if (mbridx > -1) { @@ -181,7 +181,7 @@ int psizof(void) { /* Parse Data Array */ void prsdta(void) { - DEBUG("Parsing Array Data\n", 0) + DEBUG("vars.prsdta: Parsing Array Data\n", 0) int i; dtype = DTARRY; expect('{'); @@ -202,7 +202,7 @@ void prsdts(void) { dtype = DTSTR; getstr(); strcpy(value, word); - DEBUG("Parsed Data String '%s'\n", value) + DEBUG("vars.prsdts: Parsed Data String '%s'\n", value) } /* Store variable data * @@ -212,34 +212,34 @@ void prsdts(void) { void setdat(void) { int i; if (dtype == DTBYTE) { - DEBUG("Setting variable data to '%d'\n", litval) + DEBUG("vars.setdat: Setting variable data to '%d'\n", litval) dlen = 1; datvar[dsize++] = litval; } else if (dtype == DTINT) { - DEBUG("Setting variable data to '%d'\n", litval) + DEBUG("vars.setdat: Setting variable data to '%d'\n", litval) dlen = 2; datvar[dsize++] = litval & 0xFF; datvar[dsize++] = litval >> 8; } else if (dtype == DTARRY) { - DEBUG("Setting variable data to array of length %d\n", dlen) + DEBUG("vars.setdat: Setting variable data to array of length %d\n", dlen) for (i=0; i Date: Thu, 14 Nov 2019 22:05:27 -0500 Subject: [PATCH 12/42] Updated to a02test.a02 --- work/a02test.a02 | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/work/a02test.a02 b/work/a02test.a02 index 245271d..83b2dcb 100644 --- a/work/a02test.a02 +++ b/work/a02test.a02 @@ -1,16 +1,6 @@ ;A02 Assembler Test File -TRUE: EQU $FF -FALSE: EQU $00 -one equ 1 -two equ 1 + 1 -three equ one + one + one -four equ three + 1 - - -PNTR: EQU $80 -.local EQU 99 -STRUCT EQU $0FFF + INCLUDE "a02inc.a02" start ORG $0400 ;Start of Code SUBROUTINE @@ -99,8 +89,15 @@ exprsn LDA #PNTR+1 ;Immediate LDY #>(STRUCT+2) BYTES byte 99, %10101010,'~' ;Bytes - byte $12,$34 -HEXES hex 01,23,45,67,AB,CD,EF,1A,2B,3C,D4,E5,F6 ;Hexadecimal + .byte $12,$34 +HEXES hex 01,23,45,67,89 ;Hexadecimal + .hex ,AB,CD,EF,1A,2B,3C,D4,E5,F6 WORDS word $3456 -TABLE word $1357,$9BDF,$2468 + Align 256 +TABLE .word $1357,$9BDF,$2468 TEXT byte "ABCDEFGHIJKLMNOPQRSTUVWXYZ",0 + + END ;Nothing after this will be Assembled + STY (STRUCT),X ;Illegal Addressing Mode + DC.W ;Unsupported Pseudo-Op + From 24ba4b6dfd79222b61b269f8d8098d4bee98e29f Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Thu, 14 Nov 2019 23:57:49 -0500 Subject: [PATCH 13/42] Allow Modifiers in Header File and Pointer DeRefs in Function Calls --- src/expr.c | 9 ++++++--- src/include.c | 2 +- src/vars.c | 10 ++++++---- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/expr.c b/src/expr.c index 807cee4..d370803 100644 --- a/src/expr.c +++ b/src/expr.c @@ -197,7 +197,7 @@ void prcadr(int adract, char* symbol) { /* Parse and Compile Address of Operator * * Args: adract = Address Action */ void prsadr(int adract) { - DEBUG("Parsing address\n", 0) + DEBUG("expr.prsadr: Parsing address\n", 0) if (isnpre()) prsnum(0xFFFF); else { getwrd(); @@ -228,7 +228,7 @@ void prsstr(int adract, int alwstr) { * Args: adract = Address Action * * alwstr = Allow String */ int chkadr(int adract, int alwstr) { - DEBUG("Checking for Address or String\n", 0) + DEBUG("expr.chkadr: Checking for Address or String\n", 0) int result = TRUE; if (look('&')) prsadr(adract); else if (match('"')) prsstr(adract, alwstr); @@ -257,7 +257,9 @@ void prsbop(void) { /* Parse Function Argument or Return Values */ void prsfpr(char trmntr) { int pusha = 0; int pushy = 0; //A and Y Arguments Pushed - if (!chkadr(ADLDYX, TRUE) && isxpre() || match('.')) { + DEBUG("expr.prsfpr: Parsing Function Argument or Return Values\n", 0) + if (!chkadr(ADLDYX, TRUE) && !match(')')) { + DEBUG("expr.prsfpr: Parsing Accumulator Expression\n", 0); if (look('.')) pusha = 255; else {if (prsxpf(0)) goto prsfne;} if (look(',') && !chkadr(ADLDYX, TRUE)) { @@ -412,6 +414,7 @@ void prsxpr(char trmntr) { /* Parse and compile function parameter expression * * Returns: TRUE if Integer Expression */ int prsxpf(char trmntr) { + DEBUG("expr.prsxpf: Parsing Function Expression\n", 0) return prsxpp(trmntr, TRUE); } diff --git a/src/include.c b/src/include.c index 9e300db..0cd476c 100644 --- a/src/include.c +++ b/src/include.c @@ -177,7 +177,7 @@ void pincdr(void) { void phdwrd(void) { getwrd(); if (match(':')) prslab(); - else if (!ptype(MTNONE)) + else if (!pmodfr() && !ptype(MTNONE)) ERROR("Unexpected word '%s' in header\n", word, EXIT_FAILURE) } diff --git a/src/vars.c b/src/vars.c index b72812f..1090d3c 100644 --- a/src/vars.c +++ b/src/vars.c @@ -270,10 +270,12 @@ void addvar(int m, int t) { if (fndvar(vrname)) ERROR("Duplicate declaration of variable '%s\n", vrname, EXIT_FAILURE) if (t == VTVOID) ERROR("Illegal Variable Type\n", 0, EXIT_FAILURE) if (m & MTZP) { - setlbl(vrname); - sprintf(word, "$%hhX", zpaddr++); - if (t == VTINT) zpaddr++; //int uses two bytes - asmlin(EQUOP, word); + if (alcvar) { + setlbl(vrname); + sprintf(word, "$%hhX", zpaddr++); + if (t == VTINT) zpaddr++; //int uses two bytes + asmlin(EQUOP, word); + } strcpy(value, "*"); //Set Variable to Non Allocated } else if (m & MTALS) { From f7c97420279dabd7d45b8f6cab3e57c5ca2b8cf7 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Fri, 15 Nov 2019 00:04:18 -0500 Subject: [PATCH 14/42] Moved Include of prbyte.a02 from vic.a02 to vic??.a02 --- include/vic.a02 | 1 - include/vic20.a02 | 1 + include/vic3k.a02 | 1 + include/vic8k.a02 | 1 + 4 files changed, 3 insertions(+), 1 deletion(-) diff --git a/include/vic.a02 b/include/vic.a02 index afcb612..041e3ab 100644 --- a/include/vic.a02 +++ b/include/vic.a02 @@ -100,4 +100,3 @@ NEWLIN: LDX #0 ;Store 0 STX $D3 ;in Cursor Column and JMP $E8C3 ;Execute NXTLINE Routine - INCLUDE "../include/prbyte.a02" ;PRBYTE and PRHEX routines \ No newline at end of file diff --git a/include/vic20.a02 b/include/vic20.a02 index 475b44b..c3c8634 100644 --- a/include/vic20.a02 +++ b/include/vic20.a02 @@ -16,3 +16,4 @@ BASIC: DC $0C, $10 ;Pointer to Next Line DC $00, $00 ;End of Basic Program INCLUDE "../include/vic.a02" ;Include VIC 20 Common Code + INCLUDE "../include/prbyte.a02" ;PRBYTE and PRHEX routines \ No newline at end of file diff --git a/include/vic3k.a02 b/include/vic3k.a02 index 90db978..9225491 100644 --- a/include/vic3k.a02 +++ b/include/vic3k.a02 @@ -16,3 +16,4 @@ BASIC: DC $0C, $04 ;Pointer to Next Line DC $00, $00 ;End of Basic Program INCLUDE "../include/vic.a02" ;Include VIC 20 Common Code + INCLUDE "../include/prbyte.a02" ;PRBYTE and PRHEX routines \ No newline at end of file diff --git a/include/vic8k.a02 b/include/vic8k.a02 index 0b11ee3..fc4db85 100644 --- a/include/vic8k.a02 +++ b/include/vic8k.a02 @@ -16,3 +16,4 @@ BASIC: DC $0C, $12 ;Pointer to Next Line DC $00, $00 ;End of Basic Program INCLUDE "../include/vic.a02" ;Include VIC 20 Common Code + INCLUDE "../include/prbyte.a02" ;PRBYTE and PRHEX routines \ No newline at end of file From 8d12f452a0b6c1a7f8c128b8a08a0b3e6471d2bc Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Fri, 15 Nov 2019 00:05:53 -0500 Subject: [PATCH 15/42] Fixed header.?02 so they will compile and assemble --- include/header.a02 | 48 ++++++---------------------------------------- include/header.h02 | 3 --- 2 files changed, 6 insertions(+), 45 deletions(-) diff --git a/include/header.a02 b/include/header.a02 index 101defd..a5b3edf 100644 --- a/include/header.a02 +++ b/include/header.a02 @@ -37,6 +37,10 @@ STKEHI EQU $2B STKLO EQU $2C ;Stack Pointer STKHI EQU $2D +;Placeholders Labels for the Example Code Below +POLKEY EQU $FFFE ;ROM Read Key Routine +WSTART EQU $FFFF ;BASIC Warm Start Routine + ORG $0200 ;Program Start Address START: NOP ;System specific initialization code @@ -77,45 +81,5 @@ NEWLIN: RTS ;Code to move Cursor to beginning of next line ;Print Character to Screen PUTCHR RTS ;Code to write ASCII character to Screen -;Clear the Screen -CLRSCR: RTS ;Code to Clear Screen - -;Move Cursor to Specified Coordinates -SETPOS: RTS ;Move Cursor to Column A, Row Y - -;Get Cursor Position -GETPOS: RTS ;Return Cursor Column in A, Row in Y - -;Get Screen Size -GETSIZ: RTS ;Return Screen Width in A, Height in Y - -;Note: The following two functions replicate calls available -;in the Apple-1 monitor and are included for test purposes -;They will likely be removed before the final release - -;Print Byte as Two-Digit Hex Number to Console -PRBYTE: PHA ;Save Accumulater - LSR ;Shift Hi Nybble to Low Nybble - LSR - LSR - LSR - JSR PRHEX ; and Print it - PLA ;Restore Accumulator - ; and fall into PRHEX - -;Print Low Nybble as Hex Digit to Console -PRHEX: AND #$0F ;Strip High Nybb - SED ;Set Decimal Flag for - CLC ; Addition Wizardry - ADC #$90 ;Convert to $90-$99,$00-$05 - ADC #$40 ;Convert to $30-$39,$41-$46 - CLD ;Clear Decimal Flag - JMP PUTCHR ;Print Hex Digit and Return - -;Alternate Code for Systems with Interrupts that don't CLD -PRHEX: AND #$0F ;Strip High Nybble - CMP #$0A ;If Low Nybble >= 10 - BCC PRHEXC ; - ADC #$06 ; Convert ':' to 'A'... -PRHEXC: ADC #$30 ;Convert to ASCII Character - JMP PUTCHR ;Print Hex Digit and Return + INCLUDE "../include/prbyte.a02" ;PRBYTE and PRHEX routines + \ No newline at end of file diff --git a/include/header.h02 b/include/header.h02 index 610bd31..34a6f0c 100644 --- a/include/header.h02 +++ b/include/header.h02 @@ -36,15 +36,12 @@ char rdseed; //System Seed for Pseudo-Random Number Generator //System Subroutines void delchr(); //Delete previous character char getkey(); //Read ASCII character from Console -char getpos(); //Get Cursor Position -char getsiz(); //Get Screen Size void newlin(); //Advance cursor to beginning of next line char polkey(); //Poll Console for character char putchr(); //Print ASCII character to Console void prbyte(); //Print Accumulator as Hexadadecimal number void prhex(); //Print Low Nybble of Accumulator as Hex Digit char getchr(); //Wait for character from Console -void setpos(); //Set Cursor Position //System Labels start: //Start of Code From 51bf4514d6e77725a87647f6cb8d669816d34697 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Fri, 15 Nov 2019 00:07:23 -0500 Subject: [PATCH 16/42] Added Commander X16 Header Files --- include/x16.a02 | 88 +++++++++++++++++++++++++++++++++++++++++++++++++ include/x16.h02 | 42 +++++++++++++++++++++++ test/x16.bat | 24 ++++++++++++++ 3 files changed, 154 insertions(+) create mode 100644 include/x16.a02 create mode 100644 include/x16.h02 create mode 100644 test/x16.bat diff --git a/include/x16.a02 b/include/x16.a02 new file mode 100644 index 0000000..481e1c8 --- /dev/null +++ b/include/x16.a02 @@ -0,0 +1,88 @@ +; c02 Program Initialization Code for Commander X16 + +;PETSCII Key Mappings +DELKEY EQU $14 ;Delete/Backspace Key (Delete) +ESCKEY EQU $03 ;Escape/Stop Key (RUN/STOP) +RTNKEY EQU $0D ;Return/Enter Key (RETURN) + +;Zero Page System Variables - Assumes Usage is Same as C64 +XMBANK EQU $0A ;Extended Memory Bank (Load/Verify Flag) +XADRLO EQU $0B ;Ext Memory Address LSB (Text Index/Array Size) +XADRHI EQU $0C ;Ext Memory Address MSB (Array Dimension Fkags) +SRCPTR EQU $22 ;Source Pointer [Temporary Pointers] +SRCLO EQU $22 ;Source Pointer LSB [Temporary Pointers] +SRCHI EQU $23 ;Source Pointer MSB [Temporary Pointers] +DSTPTR EQU $24 ;Destination Pointer [Temporary Pointers] +DSTLO EQU $24 ;Destination Pointer LSB [Temporary Pointers] +DSTHI EQU $25 ;Destination Pointer MSB [Temporary Pointers] +BLKLO EQU $26 ;Block Pointer LSB [Floating Point Work Area] +BLKHI EQU $27 ;Block Pointer MSB [Floating Point Work Area] +STKLO EQU $28 ;Stack Pointer LSB [Floating Point Work Area] +STKHI EQU $29 ;Stack Pointer MSB [Floating Point Work Area] +BFRLO EQU $35 ;Buffer Pointer LSB [Temporary String Pointer] +BFRHI EQU $36 ;Buffer Pointer MSB [Temporary String Pointer] +RDSEED EQU $A2 ;Random Seed [Software Jiffy Clock (Low Byte)] +TEMP0 EQU $FB ;Temporary Variable [Unused Byte] +TEMP1 EQU $FC ;Temporary Variable [Unused Byte] +TEMP2 EQU $FD ;Temporary Variable [Unused Byte] +TEMP3 EQU $FE ;Temporary Variable [Unused Byte] + +;Other Variables - Top of Extended System RAM Area +BLKSLO EQU $07F4 ;Block Start LSB [Unused Byte] +BLKSHI EQU $07F5 ;Block Start MSB [Unused Byte] +BLKELO EQU $07F6 ;Block End LSB [Unused Byte] +BLKEHI EQU $07F7 ;Block End MSB [Unused Byte] +BLKLEN EQU $07F8 ;Block Length [Unused Byte] + +RANDOM EQU $07F9 ;Random Number Storage [Unused Byte] +STKSAV EQU $07FA ;Machine Stack Storage [Unused Byte] + +STKSLO EQU $07FC ;Stack Start LSB [Unused Byte] +STKSHI EQU $07FD ;Stack Start MSB [Unused Byte] +STKELO EQU $07FE ;Stack End LSB [Unused Byte] +STKEHI EQU $07FF ;Stack End MSB [Unused Byte] + +;Machine Language Basic Stub - Same as Commodore 64 + ORG $0801 ;Start of Basic Program +BASIC: DC $0C, $08 ;Pointer to Next Line + DC $00, $00 ;Line Number (0) + DC $9E ;SYS + DC $20 ;' ' + DC $32, $30, $36 ,$32 ;"2062" + DC $00 ;End of Line Marker + DC $00, $00 ;End of Basic Program + +START: TSX ;Get Stack Pointer + STX STKSAV ;and Save for Exit + JMP MAIN ;Execute Program + +EXIT: LDX STKSAV ;Retrieve Saved Stack Pointer + TXS ;and Restore It + RTS ;Return to BASIC + +;Poll Keyboard for Character +POLKEY EQU $FFE4 ;Aliased to Kernal GETIN Routine + +;Get Character from Keyboard +GETKEY EQU POLKEY ;Aliased to POLKEY Routine + +;Wait for Character from Keyboard +GETCHR: JSR GETKEY ;Poll Keyboard + BEQ GETCHR ;If No Key, Loop + RTS + +;Print Character to Console +PUTCHR EQU $FFD2 ;Aliased to CHROUT Routine + +;Delete Previous Character +DELCHR: LDA #DELKEY ;Load Delete Character + JMP PUTCHR ;Print and Return + +;Advance Character to Next line +NEWLIN: LDA #RTNKEY ;Load Return Character + JMP PUTCHR ;Print and Return + +PUTSTR: TXA ;Copy LSB to Accumulator + JMP $CBD2 ;Execute STROUT + + INCLUDE "../include/prbyte.a02" ;PRBYTE and PRHEX routine diff --git a/include/x16.h02 b/include/x16.h02 new file mode 100644 index 0000000..8cdffdc --- /dev/null +++ b/include/x16.h02 @@ -0,0 +1,42 @@ +/* C02 System Header file for Commander X16 */ + +/* Platform Specific Constants */ +#define DELKEY $14 //Delete/Backspace Key (DEL) +#define ESCKEY $03 //Escape/Break Key (STOP) +#define RTNKEY $0D //Return/Enter Key (RETURN) + +/* Standard Library Pointers */ +zeropage char srclo,srchi; //Source Pointer for Library Functions +zeropage char dstlo,dsthi; //String Pointer for Library Functions +zeropage int srcptr,dstptr; //Source, Destination Pointers +zeropage char bfrlo,bfrhi; //Buffer Pointer for Library Functions +zeropage char blklo,blkhi; //Block Segment Pointer +zeropage char stklo,stkhi; //Stack Pointer +zeropage char xadrlo,xadrhi; //Physical Address LSB, MSB + +/* Standard Library Variables */ +char blkslo,blkshi; //Block Start Address +char blkelo,blkehi; //Block End Address +char blklen; //Block Segment Length +char stkslo,stkshi; //Stack Start Address +char stkelo,stkehi; //Stsck End Address +char random,rdseed; //Pseudo-Random Number Generation +char temp0,temp1,temp2,temp3; //Temporary Storage +char xmbank; //Physical Bank + +/* System Subroutines */ +void delchr(); //Delete previous character +char getkey(); //Read ASCII character from Keyboard +char getpos(); //Get Cursor Position +char getsiz(); //Get Screen Size +void newlin(); //Advance cursor to beginning of next line +char polkey(); //Poll Keyboard for character +char putchr(); //Print ASCII character to Keyboard +void prbyte(); //Print Accumulator as Hexadadecimal number +void prhex(); //Print Low Nybble of Accumulator as Hex Digit +char getchr(); //Wait for character from Keyboard +void setpos(); //Set Cursor Position + +//System Labels +start: //Start of Code +exit: //Return to Operating System diff --git a/test/x16.bat b/test/x16.bat new file mode 100644 index 0000000..99d8a30 --- /dev/null +++ b/test/x16.bat @@ -0,0 +1,24 @@ +@REM Compile and Run C02 Program for Commander X16 Emulator +@ECHO OFF +IF EXIST %1.c02 GOTO COMPILE + ECHO File %1.c02 not found + GOTO EOF + +:COMPILE +ECHO Compiling File %1.c02 for Commander X16 +..\c02.exe -c 65C02 -h x16 -s x16 -s cbm %1 >%1.dbg +IF %ERRORLEVEL% NEQ 0 GOTO EOF +ECHO Assembling File %1.asm +..\a02.exe -p %1.asm %1.prg %1.lst >%1.out +REM C:\Programs\dasm %1.asm -f1 -o%1.prg -l%1.lst -s%1.sym + +IF %ERRORLEVEL% NEQ 0 GOTO EOF + +ECHO Starting Emulator in Debug Mode +REM SET X16DIR=C:\Programs\x16emu +REM SET X16EXE=%X16DIR%\x16emu.exe +REM SET X16ROM=%X16DIR%\rom.bin +REM SET X16CHR=%X16DIR%\chargen.bin +REM %X16EXE% -rom %X16ROM% -char %X16CHR% -prg %1.prg -run -debug +C:\Programs\x16emu\x16emu -prg %1.prg -run -debug -echo raw >%1.out +:EOF From 508533b14876f5503f50308af1d40c8d416cbb51 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Fri, 15 Nov 2019 13:27:55 -0500 Subject: [PATCH 17/42] Cleaned up system header files --- include/appl2std.h02 | 4 ++++ include/c64.a02 | 48 ++++++++++++++++++++++++++------------------ include/py65.h02 | 2 +- include/template.h02 | 6 +++--- 4 files changed, 36 insertions(+), 24 deletions(-) diff --git a/include/appl2std.h02 b/include/appl2std.h02 index b72901a..98f9459 100644 --- a/include/appl2std.h02 +++ b/include/appl2std.h02 @@ -35,3 +35,7 @@ void newlin(); //Advance cursor to beginning of next line char putchr(); //Print ASCII character to Console void setdst(); //Set Destination Pointer void setsrc(); //Set Source Pointer + +//System Labels +start: //Start of Code +exit: //Return to Operating System diff --git a/include/c64.a02 b/include/c64.a02 index 91ec470..86afefc 100644 --- a/include/c64.a02 +++ b/include/c64.a02 @@ -1,26 +1,29 @@ -; c02 Program Initialization Code for Unexpanded VIC-20 +; c02 Program Initialization Code for Commodore 64 ;PETSCII Key Mappings -DELKEY EQU $14 ;Delete/Backspace Key (Delete) -ESCKEY EQU $03 ;Escape/Stop Key (RUN/STOP) -RTNKEY EQU $0D ;Return/Enter Key (RETURN) +DELKEY EQU $14 ;Delete/Backspace Key (Delete) +ESCKEY EQU $03 ;Escape/Stop Key (RUN/STOP) +RTNKEY EQU $0D ;Return/Enter Key (RETURN) ;Zero Page Variables -SRCLO EQU $22 ;Source Pointer LSB [Temporary Pointers] -SRCHI EQU $23 ;Source Pointer MSB [Temporary Pointers] -DSTLO EQU $24 ;Destination Pointer LSB [Temporary Pointers] -DSTHI EQU $25 ;Destination Pointer MSB [Temporary Pointers] -BLKLO EQU $26 ;Block Pointer LSB [Floating Point Work Area] -BLKHI EQU $27 ;Block Pointer MSB [Floating Point Work Area] -STKLO EQU $28 ;Stack Pointer LSB [Floating Point Work Area] -STKHI EQU $29 ;Stack Pointer MSB [Floating Point Work Area] -BFRLO EQU $35 ;Buffer Pointer LSB [Temporary String Pointer] -BFRHI EQU $36 ;Buffer Pointer MSB [Temporary String Pointer] -RDSEED EQU $A2 ;Random Seed [Software Jiffy Clock (Low Byte)] -TEMP0 EQU $FB ;Temporary Variable [Unused Byte] -TEMP1 EQU $FC ;Temporary Variable [Unused Byte] -TEMP2 EQU $FD ;Temporary Variable [Unused Byte] -TEMP3 EQU $FE ;Temporary Variable [Unused Byte] +XMBANK EQU $0A ;Extended Memory Bank (Load/Verify Flag) +XADRLO EQU $0B ;Ext Memory Address LSB (Text Index/Array Size) +XADRHI EQU $0C ;Ext Memory Address MSB (Array Dimension Fkags) +SRCLO EQU $22 ;Source Pointer LSB [Temporary Pointers] +SRCHI EQU $23 ;Source Pointer MSB [Temporary Pointers] +DSTLO EQU $24 ;Destination Pointer LSB [Temporary Pointers] +DSTHI EQU $25 ;Destination Pointer MSB [Temporary Pointers] +BLKLO EQU $26 ;Block Pointer LSB [Floating Point Work Area] +BLKHI EQU $27 ;Block Pointer MSB [Floating Point Work Area] +STKLO EQU $28 ;Stack Pointer LSB [Floating Point Work Area] +STKHI EQU $29 ;Stack Pointer MSB [Floating Point Work Area] +BFRLO EQU $35 ;Buffer Pointer LSB [Temporary String Pointer] +BFRHI EQU $36 ;Buffer Pointer MSB [Temporary String Pointer] +RDSEED EQU $A2 ;Random Seed [Software Jiffy Clock (Low Byte)] +TEMP0 EQU $FB ;Temporary Variable [Unused Byte] +TEMP1 EQU $FC ;Temporary Variable [Unused Byte] +TEMP2 EQU $FD ;Temporary Variable [Unused Byte] +TEMP3 EQU $FE ;Temporary Variable [Unused Byte] ;System Variables USER3 EQU $0313 ;Free Byte for User Programs @@ -51,7 +54,7 @@ FSFLFA EQU $F314 ;Find Logical File A ;Machine Language Basic Stub ORG $0801 ;Start of Basic Program -BASIC: DC $0C, $10 ;Pointer to Next Line (4109) +BASIC: DC $0C, $08 ;Pointer to Next Line DC $00, $00 ;Line Number (0) DC $9E ;SYS DC $20 ;' ' @@ -91,4 +94,9 @@ NEWLIN: LDX #0 ;Store 0 STX $D3 ;in Cursor Column and JMP $E87C ;Execute NXTLINE Routine +;Print Zero Delimited String to Screen +PUTSTR: TXA ;Copy LSB to Accumulator + JMP $AB1E ;Execute STROUT + INCLUDE "../include/prbyte.a02" ;PRBYTE and PRHEX routine + diff --git a/include/py65.h02 b/include/py65.h02 index 2c0fdf2..3fd9005 100644 --- a/include/py65.h02 +++ b/include/py65.h02 @@ -23,7 +23,7 @@ char temp0, temp1, temp2, temp3; //Temporary Storage //Memory Mapped I/O char putcon; //Write Character to Console -char getcomn; //Read Character from Console +char getcon; //Read Character from Console //System Subroutines char polkey(); //Poll Console for character diff --git a/include/template.h02 b/include/template.h02 index 2395599..f49e83d 100644 --- a/include/template.h02 +++ b/include/template.h02 @@ -1,6 +1,6 @@ -/************************************************ - * template - Template Library Routines for C02 * - ************************************************/ +/*************************************************** + * template.a02 - Template Module Routines for C02 * + ***************************************************/ /* Function Description * * Args: a - First Argument * From 3154b80ae42cb4dda9e4260f72aa8bb110943ed8 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Fri, 15 Nov 2019 13:38:08 -0500 Subject: [PATCH 18/42] Tested and debugged joystk module for C64 --- include/c64/joystk.a02 | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/include/c64/joystk.a02 b/include/c64/joystk.a02 index 97969ec..eecb64c 100644 --- a/include/c64/joystk.a02 +++ b/include/c64/joystk.a02 @@ -1,6 +1,6 @@ ;Joystick Assembly Language Module for C64 -JYSTKS EQU $04 ;Number of Joysticks +JYSTKS EQU $02 ;Number of Joysticks ;Joystick Bit Masks JOYUP EQU $01 ;Bit 0 - Up @@ -12,14 +12,11 @@ JOYB0 EQU $10 ;Bit 4 - Button ;Read Joystick JOYSTK: CMP #JYSTKS ;If Invalid Joystick# BCS JOYSTZ ; Return Error + EOR #1 ;Invert Joystick # TAX ;Copy Joystick # to X - LDA $0284,X ;Read Trigger Control Register - ROR ;Move Bit 0 into Carry LDA $DC00,X ;Read Joystick Shadow Register EOR #$FF ;Invert and - AND #$0F ;Mask Bits - BCS JOYSTX ;If Trigger Pressed - ORA #$10 ; Set Bit 4 -HOYSTX: RTS + AND #$1F ;Mask Bits +JOYSTX: RTS JOYSTZ: LDA #$FF ;Return Error RTS From 0ca69fce816f15bd81cec35a3dc74cdf260a5495 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Fri, 15 Nov 2019 13:47:33 -0500 Subject: [PATCH 19/42] Added integers and triple return values to readme.md --- README.md | 68 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 9d93967..49a0960 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,6 @@ but it may not be in a working state. #pragma origin 8192 //Set start address of object code #pragma zeropage $80 //Set start address of zero page variables - /* Constants */ #define TRUE = $FF ; //Constants #define FALSE = 0 @@ -54,50 +53,63 @@ struct record {char name[8]; char index;}; //Struct Definition struct record rec; //Struct Declaration /* Variables and Array Declarations */ -char i, j; //Variables -zeropage p,q; //Variables in zeropage -const char nine = 9; //Const variable set to decimal literal -const char maxsiz = $FF; //Const variable set to hexadecimal literal -const char flag = %01010101; //Const variable set to binary literal -const char debug = #TRUE; //Const variable set to constant -char r[7]; //8 byte array 0 (decimal dimension) +char b, c, d, e, f, g, h; //8-bit Variables +int i, j; //16-bit Variables +zeropage char p, q; //8-bit Variables in Page 0 +zeropage int u, v; //16-bit Variables in Page 0 +const char nine = 9; //Const 8-bit variable set to decimal literal +const char maxsiz = $FF; //Const 8-bit variable set to hexadecimal literal +const char flag = %01010101; //Const 8-bit variable set to binary literal +const char debug = #TRUE; //Const 8-bit variable set to constant +const int k = $1234; //Const 16-bit variable set to hexadecimal literal +char r[7]; //8 byte Array (decimal dimension) aligned char m[$FF]; //256 byte array aligned to page boundary +const char n = {1,2,3}; //Const array set to literal list const char s = "string"; //Const array set to string literal -const char m = {1,2,3}; //Const array set to literal list const char t = {"one", 1); //Const array set to mixed list /* Functions Declarations */ void myfunc(); //Forward declaration of function -char myfunp(tmp1, tmp2, tmp3) { - //function code -} +char fnc(c) { /*function body */} //One 8-bit Parameter +char fnd(c,d) { /*function body */} //Two 8-bit Parameters +char fne(c,d,e) { /*function body */} //Three 8-bit Parameters +char fni(i) { /*function body */} //One 16-bit Parameter +char fnj(c,i) { /*function body */} //8-bit and 16-bit Parameters + +/* Returning from a Function */ +return c, d, e; //Return up to three 8-bit values +return c,j; //Return an 8-bit an 16-bit value +return i; //Return a 16-bit value +return; //No explicit return values /* Assignments */ hmove; s80vid; //Implicit Assignments x = 0; y = a; a = 1; //Register Assignments b = c + d - e & f | g ^ h; //Assignment and Expression -r[i] = s[j+1] & t[k-1]; //Array Indexing -d[j] = r[a] + s[x] + t[y]; //Arrays Indexed by Register -r = (i>j) ? d[i] : e[j]; //Shortcut If -a<< ;b[i]>>; x++; y--; //Post-Operations +r[f] = m[g+1] & t[h-1]; //Array Indexing +r[j] = r[a] + s[x] + t[y]; //Arrays Indexed by Register +d = (e>f) ? d[e] : e[f]; //Shortcut If +b<< ;c[d]>>; x++; y--; //Post-Operations /* Function Calls */ -i = abs(n); j = min(b,c), plot(h,v,c); //Up to Three Char Arguments -q = div(m+n,d)) - t; n = mult(e+f, z); //Expression in First Arg Only -puts("string"); fputs(fp, &line); //Passing Strings and Arrays -setdst(&dst); n = strcpy(&src); //Using Multiple String Agruments -c = getc(); setptr(*,addrhi,addrlo); //No and Skipped Arguments -row,col = scnpos(); i,j,k = get3d(); //Plural Assignments -push d,r; mult(); pop p; //Pass Arguments via Stack -iprint(); inline "Hello World"; //Pass Inline String Argument -irect(); inline 10,10,100,100; //Pass Inline Char Arguments -icpstr(); inline &dst, &src; //Pass Inline Address Arguments +b = abs(c); d = min(e,f), plot(b,c,d); //Up to Three Char Arguments +b = div(c+d,e)) - f; c = mult(d+e, f); //Expression in First Arg Only +j = swap(i); j = ishift(b, i); //Pass Int or Char with Int +puts("string"); fputs(f, &s); //Passing Strings and Arrays +setdst(&r); b = strcpy(&s); //Using Multiple String Arguments +proc(@record, &record); //Pass Length and Address of Struct +c = getc(); setptr(?,g,h); //No Args and Skipped Arguments +b,c = scnpos(); d,e,f = get3d(); //Plural Assignments +push b,c; mult(); pop p; //Pass Arguments via Stack +iprint(); inline "Hello World"; //Pass Inline String Argument +irect(); inline 10,10,100,100; //Pass Inline Char Arguments +icpstr(); inline &r, &s; //Pass Inline Address Arguments /* Control Structures */ if (c = 27) goto end; -if (n) q = div(n,d) else puts("Division by 0!"); +if (b) e = div(f,g) else puts("Division by 0!"); if (b==0 || b>10 && b<20) fprint(n,"input %d in range"); -c = 'A' ; while (c <= 'Z') { putc(c); c++; } +c = 'A' ; while (c <= 'Z') { putc(c); c++; } while() { c=rdkey; if (c=0) continue; putchr(c); if (c=13) break; } do c = rdkey(); while (c=0); do {c = getchr(); putchr(c);} while (c<>13) From 37d0fee58915ef6d875a3f3b143fce9c2d66ce59 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Fri, 15 Nov 2019 14:16:58 -0500 Subject: [PATCH 20/42] Removed references to library --- src/c02.c | 1 - src/common.c | 16 ---------------- src/common.h | 4 +--- 3 files changed, 1 insertion(+), 20 deletions(-) diff --git a/src/c02.c b/src/c02.c index a73658f..d9c6414 100644 --- a/src/c02.c +++ b/src/c02.c @@ -27,7 +27,6 @@ /* Initilize Compiler Variables */ void init(void) { - initim(); //Initialize Elapsed Time DEBUG("Initializing Compiler Variables\n",0) concnt = 0; //Number of Constants Defined varcnt = 0; //Number of Variables in Table diff --git a/src/common.c b/src/common.c index c2d1cfc..3cf15ad 100644 --- a/src/common.c +++ b/src/common.c @@ -7,11 +7,8 @@ #include #include #include -#include #include "common.h" -struct timespec curtim; //Current Time - /* Error - Print Input File name & position and exit */ void exterr(int errnum) { fprintf(stderr, "Line %d Column %d of File %s\n", curlin, curcol, inpnam); @@ -29,19 +26,6 @@ void expctd(char *expstr) { /* Print current position in file */ void prtpos(void) { if (inpnam[0]) printf("(%s: %d,%d) ", inpnam, curlin, curcol); } -/* Initialize elapsed time counter */ -void initim(void) { - timespec_get (&curtim, TIME_UTC); - bgntim = curtim.tv_sec; -} - -/* Print elapsed time */ -void prttim(void) { - timespec_get (&curtim, TIME_UTC); - printf("[%d", curtim.tv_sec - bgntim); - printf(".%06d]",curtim.tv_nsec/1000); -} - /* Set comment to string */ void setcmt(char *s) { strcpy(cmtasm, s); } diff --git a/src/common.h b/src/common.h index 7ebee84..9dca134 100644 --- a/src/common.h +++ b/src/common.h @@ -41,10 +41,8 @@ #define TRUE -1 #define FALSE 0 -void initim(); //Initialize elapsed time counter void prtpos(); //Print current file name and position -void prttim(); //Print elapsed time -#define DEBUG(fmt, val) {if (debug) {prtpos(); prttim(); printf(fmt, val);}} +#define DEBUG(fmt, val) {if (debug) {prtpos(); printf(fmt, val);}} #define DETAIL(fmt, val) {if (debug) printf(fmt, val);} #define ERROR(fmt, val, err) {fprintf(stderr, fmt, val);exterr(err);} From 1b061ec0339afc5f1a2d64c98ac4065b4c6a9b32 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Fri, 15 Nov 2019 14:30:43 -0500 Subject: [PATCH 21/42] Added A02 Assembler to Makefile --- Makefile | 3 ++- a02.c | 34 +++++++++++++++++----------------- c02.ppj | 10 +++++++--- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index df189d1..a3dda15 100644 --- a/Makefile +++ b/Makefile @@ -4,5 +4,6 @@ mainfile=src/c02.c outfile=c02 c02: ${incfiles} ${mainfile} gcc ${gccopts} ${incfiles} ${mainfile} -o ${outfile} + gcc ${gccopts} a02.h a02.c -o a02 clean: - rm ${outfile} + rm ${outfile} a02 diff --git a/a02.c b/a02.c index a188ebd..a471ea5 100644 --- a/a02.c +++ b/a02.c @@ -284,6 +284,21 @@ void outwrd(int w) { outbyt(w >> 8); } +/* Lookup Opcode */ +int lkpopc(struct opc opl[]) { + if (DEBUG) printf("Looking up Mnemonic %s\n", mnmnc); + token = 0xFF; //Set Token to Invalid + char mne[5]; strncpy(mne, mnmnc, 4); mne[4] = 0; //Truncate Mnemonic to Four Characters + for (int i=0; opl[i].name[0]; i++) { + if (strcmp(opl[i].name, mne)) continue; + token = opl[i].token; + amode = opl[i].amode; + if (DEBUG) printf("Found token %02X, amode %04X\n", token, amode); + return TRUE; + } + return FALSE; +} + /* Assemble BYTE Pseudo-Op */ void asmbyt(void) { if (DEBUG) puts("Assembling BYTE Pseudo-Op"); @@ -405,21 +420,6 @@ int asmpso(int dot) { return TRUE; } -/* Lookup Opcode */ -int lkpopc(struct opc opl[]) { - if (DEBUG) printf("Looking up Mnemonic %s\n", mnmnc); - token = 0xFF; //Set Token to Invalid - char mne[5]; strncpy(mne, mnmnc, 4); mne[4] = 0; //Truncate Mnemonic to Four Characters - for (int i=0; opl[i].name[0]; i++) { - if (strcmp(opl[i].name, mne)) continue; - token = opl[i].token; - amode = opl[i].amode; - if (DEBUG) printf("Found token %02X, amode %04X\n", token, amode); - return TRUE; - } - return FALSE; -} - /* Check for Valid Addressing Mode */ int chkmod(int mode) { char* s = NULL; //Pointer to Addressing Mode Description @@ -513,9 +513,9 @@ void dbgopc(void) { case 0x11: puts("(Indirect)"); break; case 0x04: puts("ZeroPage"); break; case 0x0C: puts("Absolute"); break; - case 0x14: puts("ZeroPage,X"); break; + case 0x14: if ((token == 0x82 || token == 0xA2)) puts("ZeroPage,Y"); + else puts("ZeroPage,X"); break; case 0x1C: puts("Absolute,X"); break; - case 0x14: puts("ZeroPage,Y"); break; case 0x18: puts("Absolute,Y"); break; default: puts("UNKOWN"); } diff --git a/c02.ppj b/c02.ppj index f45d1dd..a2c03e5 100644 --- a/c02.ppj +++ b/c02.ppj @@ -8,7 +8,7 @@ POC_PROJECT_TYPE = 13# POC_PROJECT_OUTPUTDIR = output# POC_PROJECT_RESULTDIR = .# POC_PROJECT_ARGUMENTS = # -POC_PROJECT_WORKPATH = .# +POC_PROJECT_WORKPATH = src# POC_PROJECT_EXECUTOR = # POC_PROJECT_ZIPEXTRA = # CC = pocc.exe# @@ -153,8 +153,10 @@ output\label.obj: \ src\label.c \ src\asm.h \ src\common.h \ + src\files.h \ src\label.h \ - src\parse.h + src\parse.h \ + src\vars.h $(CC) $(CCFLAGS) "$!" -Fo"$@" # @@ -164,9 +166,11 @@ output\parse.obj: \ src\parse.c \ src\asm.h \ src\common.h \ + src\expr.h \ src\files.h \ src\label.h \ - src\parse.h + src\parse.h \ + src\stmnt.h $(CC) $(CCFLAGS) "$!" -Fo"$@" # From 14b689dc69d3fa50fb6b6f7c124f1497f3a97039 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Sat, 16 Nov 2019 12:18:37 -0500 Subject: [PATCH 22/42] Added Usage output to a02.c --- a02.c | 103 ++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 57 insertions(+), 46 deletions(-) diff --git a/a02.c b/a02.c index a471ea5..1a317ae 100644 --- a/a02.c +++ b/a02.c @@ -9,7 +9,8 @@ #include #include "a02.h" -#define DEBUG TRUE +#define DEBUG FALSE +int debug; //Ouput Debug Info enum otypes {BINFIL, PRGFIL}; //Object File Types @@ -58,6 +59,14 @@ FILE *outfil; //Output File Pointer FILE *lstfil; //List File Pointer FILE *incfil; //Include File Pointer +/* Print Usage Info and Exit */ +void usage(char* appnam) { + printf("Usage: %s [opts] asmfile objfile [lstfile]\n"); + printf(" Opts: -p - Commodore PRG format\n"); + printf(" -d - Output Debug Info\n"); + exit(EXIT_FAILURE); +} + /* Print Error Message and Exit */ void xerror(char* format, char *s) { if (lineno) fprintf(stderr, "%04d: ", lineno); @@ -67,7 +76,7 @@ void xerror(char* format, char *s) { /* Open File with Error Checking */ FILE * opnfil(char* name, char* mode) { - if (DEBUG) printf("Opening file '%s' with mode '%s'\n", name, mode); + if (debug) printf("Opening file '%s' with mode '%s'\n", name, mode); FILE *fp = fopen(name, mode); if (!fp) xerror("Error Opening File '%s'\n", name); return fp; @@ -113,7 +122,7 @@ struct sym *fndsym(int block, char* name) { /* Set Symbol Value and Size */ void setsym(int value, int bytes) { - if (DEBUG) printf("Setting Symbol %s to %d\n", symbol.name, value); + if (debug) printf("Setting Symbol %s to %d\n", symbol.name, value); symbol.value = value; if (bytes) symbol.bytes = bytes; else symbol.bytes = (value > 0xFF) ? 2 : 1; @@ -132,17 +141,17 @@ void pfxstr(char c, char* s) { * Updates: linptr * Returns: Label Found (TRUE/FALSE) */ int plabel(void) { - if (DEBUG) puts("Parsing Label"); + if (debug) puts("Parsing Label"); int block = (skpchr('.')) ? blknum : 0; //Local Label Block Number int found = pword(FALSE, label); //Parse Word without Skipping Spaces - if (DEBUG) { + if (debug) { if (found) printf("Found Label %s\n", label); else puts("No Label Found"); } skpchr(':'); //Skip Optional Label Terminator if (found && passno == 1) { if (label[0] && fndsym(block, label)) xerror("Duplicate Label %s Encountered\n", label); - if (DEBUG) printf("Initializing Symbol %s\n", label); + if (debug) printf("Initializing Symbol %s\n", label); symbol.block = block; if (strlen(label) > MAXLBL) xerror("Label %s Too Long\n", label); strcpy(symbol.name, label); @@ -235,7 +244,7 @@ int evltrm() { default: result = -1; } skpspc(); - if (DEBUG) printf("Term Evaluated to %d\n", result); + if (debug) printf("Term Evaluated to %d\n", result); return result; } @@ -244,7 +253,7 @@ int evlopd(int maxsiz) { int result = 0; int hilo = 0; //Return LSB (1) or MSB (2) int prns; //Optional Parenthesis after Hi/Low Operator - if (DEBUG) puts("Evaluating Operand"); + if (debug) puts("Evaluating Operand"); skpspc(); if (cpychr('<')) hilo = 1; else if (cpychr('>')) hilo = 2; @@ -264,7 +273,7 @@ int evlopd(int maxsiz) { case 2: result = result >> 8; break; //MSB } } - if (DEBUG) printf("Operand Evaluated to %d\n", result); + if (debug) printf("Operand Evaluated to %d\n", result); if (result > maxsiz) xerror("Operand Value too Large\n", ""); return result; } @@ -286,14 +295,14 @@ void outwrd(int w) { /* Lookup Opcode */ int lkpopc(struct opc opl[]) { - if (DEBUG) printf("Looking up Mnemonic %s\n", mnmnc); + if (debug) printf("Looking up Mnemonic %s\n", mnmnc); token = 0xFF; //Set Token to Invalid char mne[5]; strncpy(mne, mnmnc, 4); mne[4] = 0; //Truncate Mnemonic to Four Characters for (int i=0; opl[i].name[0]; i++) { if (strcmp(opl[i].name, mne)) continue; token = opl[i].token; amode = opl[i].amode; - if (DEBUG) printf("Found token %02X, amode %04X\n", token, amode); + if (debug) printf("Found token %02X, amode %04X\n", token, amode); return TRUE; } return FALSE; @@ -301,7 +310,7 @@ int lkpopc(struct opc opl[]) { /* Assemble BYTE Pseudo-Op */ void asmbyt(void) { - if (DEBUG) puts("Assembling BYTE Pseudo-Op"); + if (debug) puts("Assembling BYTE Pseudo-Op"); do { if (cpychr('"')) { //String Operand while (!cpychr('"')) {outbyt(*linptr); cpychr(0); } @@ -313,7 +322,7 @@ void asmbyt(void) { /* Assemble HEX Pseudo-Op */ void asmhex(void) { - if (DEBUG) puts("Assembling HEX Pseudo-Op"); + if (debug) puts("Assembling HEX Pseudo-Op"); do {outbyt(evlhex(0xFF)); } while (cpychr(',')); } @@ -326,19 +335,19 @@ void asmwrd(void) { /* Assemble FILL Pseudo-Op */ void asmaln(void) { - if (DEBUG) puts("Assembling ALIGN Pseudo-Op"); + if (debug) puts("Assembling ALIGN Pseudo-Op"); int size = evlopd(0xFFFF); if (size < 2) return; - if (DEBUG) printf("Aligning to %d Bytes\n", size); + if (debug) printf("Aligning to %d Bytes\n", size); int fill = size - (curadr % size); if (fill == size) return; - if (DEBUG) printf("Filling %d Bytes\n", fill); + if (debug) printf("Filling %d Bytes\n", fill); for (int i=0; i 127 || offset < -128) && passno == 2) xerror("Branch Out of Range\n", ""); - if (DEBUG) printf("Branch Offset %d\n", offset); + if (debug) printf("Branch Offset %d\n", offset); opval = offset & 0xFF; } /* Assemble Immediate Mode Instruction */ void asmimd(void) { - if (DEBUG) printf("Assembling Immediate Opcode Token 0x%02X\n", token); + if (debug) printf("Assembling Immediate Opcode Token 0x%02X\n", token); opval = evlopd(0xFF); zpage = TRUE; opmod = 0x08; //Immediate @@ -458,7 +467,7 @@ void asmimd(void) { /* Assemble Indirect Mode Instruction */ void asmind(void) { - if (DEBUG) puts("Assembling Indirect Mode Instruction"); + if (debug) puts("Assembling Indirect Mode Instruction"); zpage = TRUE; opval = evlopd(0xFFFF); if (cpychr(',') && cpychr('X') && chkmod(INDCX)) cpychr(')'); ////(Indirect,X) opmod=0 else if (cpychr(')')) { @@ -478,7 +487,7 @@ void asmiaz(void) { if (chkmod(ACMLT)) opmod = 0x08; //Accumulator return; } - if (DEBUG) printf("Assembling Absolute/ZeroPage 0x%02X\n", token); + if (debug) printf("Assembling Absolute/ZeroPage 0x%02X\n", token); zpage = (opval <= 0xff) ? TRUE : FALSE; if (zpage && chkmod(ZPAGE)) opmod = 0x04; //ZeroPage else if (chkmod(ABSLT)) opmod = 0x0C; //Absolute @@ -496,16 +505,16 @@ void asmiaz(void) { /* Fix Opcode (if needed) */ unsigned char fixopc(void) { - if (DEBUG) printf("Fixing OpCode $%02X+$%02X\n", token, opmod); + if (debug) printf("Fixing OpCode $%02X+$%02X\n", token, opmod); for (int i=0; opfix[i].token; i++) if (opfix[i].token == token && opfix[i].opmod == opmod) return opfix[i].opcode; return token + opmod; } -/* Ouput Opcode Debug Info */ +/* Ouput Opcode debug Info */ void dbgopc(void) { - if (DEBUG) printf("token=$%02X, opmod=$%02X, Address Mode: ", token, opmod); + if (debug) printf("token=$%02X, opmod=$%02X, Address Mode: ", token, opmod); switch (opmod) { case 0x00: if (amode == IMPLD) puts("Implied"); else puts("(Indirect,X)"); break; case 0x08: if (opval < 0) puts("Accumulator"); else puts("#Immediate"); break; @@ -531,16 +540,16 @@ int asmopc(int dot) { opmod = 0; if (asmpso(dot)) return TRUE; //Check For/Assemble Pseudo-Op if (lkpopc(opclst) == FALSE) xerror("Invalid Mnemonic %s\n", mnmnc); - if (DEBUG) printf("Assembling Opcode Token 0x%02X, ", token); - if (DEBUG) printf("Addressing Mode Mask 0x%04X\n", amode); + if (debug) printf("Assembling Opcode Token 0x%02X, ", token); + if (debug) printf("Addressing Mode Mask 0x%04X\n", amode); skpspc(); if (amode == RELTV) asmbrn(); //Branch (Relative) Instruction else if (cpychr('#')) asmimd(); //Assemble Implied Instruction else if (cpychr('(')) asmind(); //Assemble Indirect Instruction else asmiaz(); //Assemble Implied/Accumulator/Absolute/ZeroPage Instruction - if (DEBUG) dbgopc(); + if (debug) dbgopc(); int opcode = fixopc(); - if (DEBUG) printf("Writing OpCode $%02X\n", opcode); + if (debug) printf("Writing OpCode $%02X\n", opcode); outbyt(opcode); if (opval >= 0) { if (zpage) outbyt(opval); //Byte Operand @@ -554,7 +563,7 @@ int asmopc(int dot) { * Updates: linptr * Returns: Label Found (TRUE/FALSE) */ int pmnmnc(void) { - if (DEBUG) puts("Parsing Mnemonic"); + if (debug) puts("Parsing Mnemonic"); int dot = cpychr('.'); //Optional Dot before Pseudo-Op int found = pword(TRUE, mnmnc); opridx = 0; //Initialize Operand Index @@ -571,7 +580,7 @@ void pcmmnt(void) { int i = 0; while (*linptr >= ' ') cmmnt[i++] = *linptr++; cmmnt[i] = 0; //Terminate Comment - if (DEBUG) {if (i) printf("Comment: %s\n"); else puts("No Comment Found");} + if (debug) {if (i) printf("Comment: %s\n", cmmnt); else puts("No Comment Found");} } /* Add Label to Symbol Table */ @@ -583,7 +592,7 @@ void addsym() { /* Open Include File */ void opninc(void) { - if (DEBUG) printf("Opening Include File %s\n", incnam); + if (debug) printf("Opening Include File %s\n", incnam); if (lstfil) fputs("\n", lstfil); incfil = opnfil(incnam, "r"); savlno = lineno; @@ -592,7 +601,7 @@ void opninc(void) { /* Close Include File */ void clsinc(void) { - if (DEBUG) printf("Closing Include File %s\n", incnam); + if (debug) printf("Closing Include File %s\n", incnam); if (lstfil) fputs("\n", lstfil); fclose(incfil); incfil = NULL; @@ -609,7 +618,7 @@ void clsinc(void) { void asmfil(int pass) { endasm = FALSE; //Reset End Assembly Flag passno = pass; //Assembly Pass Number - if (DEBUG) printf("Assembling Pass %d\n", pass); + if (debug) printf("Assembling Pass %d\n", pass); lineno = 1; //Initialize Input File Line Number blknum = 1; //Initialize Local Block Number orgadr = -1; //Origin Address Not Set @@ -619,7 +628,7 @@ void asmfil(int pass) { if (incfil) linptr = fgets(inplin, MAXSTR, incfil); else linptr = fgets(inplin, MAXSTR, inpfil); if (endasm || linptr == NULL) {if (incfil) {clsinc(); continue;} else break;} - if (DEBUG) printf("%05d %04X: %s", lineno, curadr, inplin); + if (debug) printf("%05d %04X: %s", lineno, curadr, inplin); lstadr = curadr; //Set List Address mcode[0] = 0; //Clear Generated Macbine Code plabel(); //Parse Label @@ -649,8 +658,9 @@ void prtsym(void) { int pcoptn(char *argval) { if (argval[0] != '-') return FALSE; char option = toupper(argval[1]); - if (DEBUG) printf(" Option '%c'\n", option); + if (debug) printf(" Option '%c'\n", option); switch(option) { + case 'D': debug = TRUE; break; //Enable debug Output case 'P': objtyp = PRGFIL; break; //Commodore PRG File default: xerror("Illegal Command Line Option %s\n", argval); } @@ -661,7 +671,7 @@ int pcoptn(char *argval) { void pcargs(int argc, char *argv[]) { int argnum = 0; for (int arg = 0; arg Date: Sat, 16 Nov 2019 12:22:42 -0500 Subject: [PATCH 23/42] Fixed printf() warnings in a02.c --- a02.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/a02.c b/a02.c index 1a317ae..8c3c079 100644 --- a/a02.c +++ b/a02.c @@ -61,7 +61,7 @@ FILE *incfil; //Include File Pointer /* Print Usage Info and Exit */ void usage(char* appnam) { - printf("Usage: %s [opts] asmfile objfile [lstfile]\n"); + printf("Usage: %s [opts] asmfile objfile [lstfile]\n", appnam); printf(" Opts: -p - Commodore PRG format\n"); printf(" -d - Output Debug Info\n"); exit(EXIT_FAILURE); @@ -390,7 +390,6 @@ void asminf(void) { if (debug) puts("Assembling INCLUDE Pseudo-Op"); if (incfil) xerror("Nested INCLUDE not Allowed", ""); if (!cpychr('"')) xerror("File Name Must be Quoted", ""); - printf("%d: '%p'\n", linptr, *linptr); while (*linptr && !cpychr('"')) { char c = *linptr; if (c == '/') c = '\\'; //Reverse Slashes for DOS/Windows incnam[incidx++] = c; From 0c4e6f1ff86656159815f53d7369b8512304aab5 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Sat, 16 Nov 2019 12:25:38 -0500 Subject: [PATCH 24/42] Added test file work/a02inc.a02 --- work/a02inc.a02 | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 work/a02inc.a02 diff --git a/work/a02inc.a02 b/work/a02inc.a02 new file mode 100644 index 0000000..415a6ea --- /dev/null +++ b/work/a02inc.a02 @@ -0,0 +1,18 @@ +;A02 Assembler Test Include File + +TRUE: EQU $FF +FALSE: .EQU $00 + +one equ 1 +two .equ 1 + 1 +three equ one + one + one +four .equ three + 1 + + +PNTR: EQU $80 +.local EQU 99 +STRUCT EQU $0FFF + + .END ;Return to Main File + +IGNORE EQU $9999 ;This will Not be Assembled \ No newline at end of file From becc10ce3b3f10b3fade2738a7a6dfe25cb1970a Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Sat, 16 Nov 2019 12:37:51 -0500 Subject: [PATCH 25/42] Fixed a02 Segmentation Fault in Linux --- a02.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/a02.c b/a02.c index 8c3c079..274875d 100644 --- a/a02.c +++ b/a02.c @@ -397,7 +397,7 @@ void asminf(void) { } incnam[incidx] = 0; //Terminate Include Name if (incidx == 0) xerror("INCLUDE requires file name\n", ""); - if (debug) printf("Include File Set to Name to ''\n", incnam); + if (debug) printf("Include File Set to Name to '%s'\n", incnam); } /* Assemble END Pseudo-Op */ @@ -622,6 +622,7 @@ void asmfil(int pass) { blknum = 1; //Initialize Local Block Number orgadr = -1; //Origin Address Not Set curadr = orgadr; //Set Current Address to Origin + if (debug) printf("Rewinding Input File\n"); rewind(inpfil); //Start at Beginning of Input File while (TRUE) { if (incfil) linptr = fgets(inplin, MAXSTR, incfil); From ced64b6ee38d8d0045c685319c4491157ad8b78c Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Sat, 16 Nov 2019 12:46:40 -0500 Subject: [PATCH 26/42] Added Bash Script ca02.sh to Compile a02.c --- ca02.sh | 3 +++ 1 file changed, 3 insertions(+) create mode 100755 ca02.sh diff --git a/ca02.sh b/ca02.sh new file mode 100755 index 0000000..03cedf9 --- /dev/null +++ b/ca02.sh @@ -0,0 +1,3 @@ +echo "Compiling a02.c" +gcc -o a02 a02.c + From 14d9409e5dfe1e93bd0316e403deda6af0b65e32 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Sun, 17 Nov 2019 21:31:46 -0500 Subject: [PATCH 27/42] Added module keydef for Commodore and Commander X16 Computers --- include/c64/keydef.a02 | 37 +++++++++++++++++++++++++++++++++++++ include/c64/keydef.h02 | 37 +++++++++++++++++++++++++++++++++++++ include/cbm/keydef.a02 | 37 +++++++++++++++++++++++++++++++++++++ include/cbm/keydef.h02 | 37 +++++++++++++++++++++++++++++++++++++ include/keydef.a02 | 37 +++++++++++++++++++++++++++++++++++++ include/keydef.h02 | 37 +++++++++++++++++++++++++++++++++++++ include/vic/keydef.a02 | 37 +++++++++++++++++++++++++++++++++++++ include/vic/keydef.h02 | 37 +++++++++++++++++++++++++++++++++++++ include/x16/keydef.a02 | 37 +++++++++++++++++++++++++++++++++++++ include/x16/keydef.h02 | 36 ++++++++++++++++++++++++++++++++++++ 10 files changed, 369 insertions(+) create mode 100644 include/c64/keydef.a02 create mode 100644 include/c64/keydef.h02 create mode 100644 include/cbm/keydef.a02 create mode 100644 include/cbm/keydef.h02 create mode 100644 include/keydef.a02 create mode 100644 include/keydef.h02 create mode 100644 include/vic/keydef.a02 create mode 100644 include/vic/keydef.h02 create mode 100644 include/x16/keydef.a02 create mode 100644 include/x16/keydef.h02 diff --git a/include/c64/keydef.a02 b/include/c64/keydef.a02 new file mode 100644 index 0000000..b868a1f --- /dev/null +++ b/include/c64/keydef.a02 @@ -0,0 +1,37 @@ +;PETSCII Key Code Definitions +;for Commmodore 64 Computer + +KEYBCK EQU $00 ;Backspace [N/A] +KEYBRK EQU $03 ;Break (RUN/STOP) +KEYCLR EQU $93 ;Clear (Shift-CLR/HOME) +KEYCPY EQU $00 ;Copy [N/A] +KEYDEL EQU $14 ;Delete +KEYDN EQU $11 ;Cursor Down +KEYESC EQU $00 ;Escape [N/A] +KEYFN1 EQU $85 ;F1 (F1/F2) +KEYFN2 EQU $89 ;F2 (Shift-F1/F2) +KEYFN3 EQU $86 ;F3 (F3/F4) +KEYFN4 EQU $8A ;F4 (Shift-F3/F4) +KEYFN5 EQU $87 ;F5 (F5/F6) +KEYFN6 EQU $8B ;F6 (Shift-F5/F6) +KEYFN7 EQU $88 ;F7 (F7/F8) +KEYFN8 EQU $8C ;F8 (Shift-F7/F8) +KEYFN9 EQU $00 ;F9 [N/A] +KEYFNA EQU $00 ;F10 [N/A] +KEYFNB EQU $00 ;F11 [N/A] +KEYFNC EQU $00 ;F12 [N/A] +KEYHLP EQU $84 ;Help [N/A] +KEYHOM EQU $13 ;Home (CLR/HOME) +KEYINS EQU $94 ;Insert (Shift-INS/DEL) +KEYLFT EQU $9D ;Cursor Left +KEYLNF EQU $00 ;Line Feed [N/A] +KEYRGT EQU $1D ;Cursor Right +KEYRTN EQU $0D ;Return +KEYRTS EQU $8D ;Shift-Return +KEYRUN EQU $00 ;Run (Shift-RUN/STOP) +KEYRVF EQU $92 ;Reverse Off +KEYRVS EQU $12 ;Reverse On +KEYSPS EQU $A0 ;Shifted Space +KEYTAB EQU $09 ;Tab +KEYTAS EQU $00 ;Shift-Tab [N/A] +KEYUP EQU $91 ;Cursor Up diff --git a/include/c64/keydef.h02 b/include/c64/keydef.h02 new file mode 100644 index 0000000..ab29a51 --- /dev/null +++ b/include/c64/keydef.h02 @@ -0,0 +1,37 @@ +/* PETSCII Key Code Definitions * + * for Commodore 64 Computer */ + +#define KEYBCK $00 //Backspace +#define KEYBRK $03 //Break (RUN/STOP) +#define KEYCLR $93 //Clear (Shift-CLR/HOME) +#define KEYCPY $00 //Copy [N/A] +#define KEYDEL $14 //Delete +#define KEYDN $11 //Cursor Down +#define KEYESC $00 //Escape [N/A] +#define KEYFN1 $85 //Function Key 1 (F1/F2) +#define KEYFN2 $89 //Function Key 2 (Shift-F1/F2) +#define KEYFN3 $86 //Function Key 3 (F3/F4) +#define KEYFN4 $8A //Function Key 4 (Shift-F3/F4) +#define KEYFN5 $87 //Function Key 5 (F5/F6) +#define KEYFN6 $8B //Function Key 6 (Shift-F5/F6) +#define KEYFN7 $88 //Function Key 7 (F7/F8) +#define KEYFN8 $8C //Function Key 8 (Shift-F7/F8) [HELP on C16] +#define KEYFN9 $00 //Function Key 9 [N/A] +#define KEYFNA $00 //Function Key 10 [N/A] +#define KEYFNB $00 //Function Key 11 [N/A] +#define KEYFNC $00 //Function Key 12 [N/A] +#define KEYHLP $84 //Help [N/A] +#define KEYHOM $13 //Home (CLR/HOME) +#define KEYINS $94 //Insert (Shift-INS/DEL) +#define KEYLFT $9D //Cursor Left +#define KEYLNF $00 //Line Feed (N/A) +#define KEYRGT $1D //Cursor Right +#define KEYRTN $0D //Return +#define KEYRTS $8D //Shift-Return +#define KEYRUN $00 //Run (Shift-RUN/STOP) +#define KEYRVF $92 //Reverse Off +#define KEYRVS $12 //Reverse On +#define KEYSPS $A0 //Shifted Space +#define KEYTAB $09 //Tab +#define KEYTAS $00 //Shift-Tab [N/A] +#define KEYUP $91 //Cursor Up diff --git a/include/cbm/keydef.a02 b/include/cbm/keydef.a02 new file mode 100644 index 0000000..a7170fc --- /dev/null +++ b/include/cbm/keydef.a02 @@ -0,0 +1,37 @@ +;PETSCII Key Code Definitions +;Common to All PET/CBM Computers + +KEYBCK EQU $00 ;Backspace [N/A] +KEYBRK EQU $03 ;Break (RUN/STOP) +KEYCLR EQU $93 ;Clear (Shift-CLR/HOME) +KEYCPY EQU $00 ;Copy [N/A] +KEYDEL EQU $14 ;Delete +KEYDN EQU $11 ;Cursor Down +KEYESC EQU $00 ;Escape [C128/C65] +KEYFN1 EQU $85 ;F1 [VIC20/C64/C16/C128/C65] +KEYFN2 EQU $89 ;F2 [VIC20/C64/C16/C128/C65] +KEYFN3 EQU $86 ;F3 [VIC20/C64/C16/C128/C65] +KEYFN4 EQU $8A ;F4 [VIC20/C64/C16/C128/C65] +KEYFN5 EQU $87 ;F5 [VIC20/C64/C16/C128/C65] +KEYFN6 EQU $8B ;F6 [VIC20/C64/C16/C128/C65] +KEYFN7 EQU $88 ;F7 [VIC20/C64/C16/C128/C65] +KEYFN8 EQU $8C ;F8 [VIC20/C64/C128/C65] [HELP on C16] +KEYFN9 EQU $00 ;F9 [C65] +KEYFNA EQU $00 ;F10 [C65] +KEYFNB EQU $00 ;F11 [C65] +KEYFNC EQU $00 ;F12 [C65] +KEYHLP EQU $84 ;Help [C128/xC65] +KEYHOM EQU $13 ;Home (CLR/HOME) +KEYINS EQU $94 ;Insert (Shift-INS/DEL) +KEYLFT EQU $9D ;Cursor Left +KEYLNF EQU $00 ;Line Feed [C128] +KEYRGT EQU $1D ;Cursor Right +KEYRTN EQU $0D ;Return +KEYRTS EQU $8D ;Shift-Return +KEYRUN EQU $00 ;Run (Shift-RUN/STOP) +KEYRVF EQU $92 ;Reverse Off +KEYRVS EQU $12 ;Reverse On +KEYSPS EQU $A0 ;Shifted Space +KEYTAB EQU $09 ;Tab +KEYTAS EQU $00 ;Shift-Tab [C128/C65] +KEYUP EQU $91 ;Cursor Up diff --git a/include/cbm/keydef.h02 b/include/cbm/keydef.h02 new file mode 100644 index 0000000..b917859 --- /dev/null +++ b/include/cbm/keydef.h02 @@ -0,0 +1,37 @@ +/* PETSCII Key Code Definitions * + * Common to All PET/CBM Computers */ + +#define KEYBCK $00 //Backspace +#define KEYBRK $03 //Break (RUN/STOP) +#define KEYCLR $93 //Clear (Shift-CLR/HOME) +#define KEYCPY $00 //Copy +#define KEYDEL $20 //Delete +#define KEYDN $11 //Cursor Down +#define KEYESC $00 //Escape (N/A) +#define KEYFN1 $00 //F1 (N/A) +#define KEYFN2 $00 //F2 (N/A) +#define KEYFN3 $00 //F3 (N/A) +#define KEYFN4 $00 //F4 (N/A) +#define KEYFN5 $00 //F5 (N/A) +#define KEYFN6 $00 //F6 (N/A) +#define KEYFN7 $00 //F7 (N/A) +#define KEYFN8 $00 //F8 (N/A) +#define KEYFN9 $00 //F9 (N/A) +#define KEYFNA $00 //F10 (N/A) +#define KEYFNB $00 //F11 (N/A) +#define KEYFNC $00 //F12 (N/A) +#define KEYHLP $00 //Help (N/A) +#define KEYHOM $13 //Home (CLR/HOME) +#define KEYINS $94 //Insert (Shift-INS/DEL) +#define KEYLFT $9C //Cursor Left +#define KEYLNF $00 //Line Feed (N/A) +#define KEYRGT $1D //Cursor Right +#define KEYRTN $0D //Return +#define KEYRTS $8D //Shift-Return +#define KEYRUN $83 //Run (Shift-RUN/STOP) +#define KEYRVF $92 //Reverse Off +#define KEYRVS $12 //Reverse On +#define KEYSPS $A0 //Shifted Space +#define KEYTAB $09 //Tab +#define KEYTAS $00 //Shift-Tab (N/A) +#define KEYUP $91 //Cursor Up diff --git a/include/keydef.a02 b/include/keydef.a02 new file mode 100644 index 0000000..1b50623 --- /dev/null +++ b/include/keydef.a02 @@ -0,0 +1,37 @@ +;Standard ASCII Key Code Definitions +;Undefined Keys hae value $00 + +KEYBCK EQU $08 ;Backspace +KEYBRK EQU $03 ;Break +KEYCLR EQU $00 ;Clear +KEYCPY EQU $00 ;Copy [Acorn Atom] +KEYDEL EQU $7F ;Delete +KEYDN EQU $00 ;Cursor Down +KEYESC EQU $1B ;Escape +KEYFN1 EQU $00 ;F1 +KEYFN2 EQU $00 ;F2 +KEYFN3 EQU $00 ;F3 +KEYFN4 EQU $00 ;F4 +KEYFN5 EQU $00 ;F5 +KEYFN6 EQU $00 ;F6 +KEYFN7 EQU $00 ;F7 +KEYFN8 EQU $00 ;F8 +KEYFN9 EQU $00 ;F9 +KEYFNA EQU $00 ;F10 +KEYFNB EQU $00 ;F11 +KEYFNC EQU $00 ;F12 +KEYHLP EQU $00 ;Help [C128/C65] +KEYHOM EQU $00 ;Home +KEYINS EQU $00 ;Insert +KEYLFT EQU $00 ;Cursor Left +KEYLNF EQU $0A ;;Line Feed [C128] +KEYRGT EQU $00 ;Cursor Right +KEYRTN EQU $0D ;Return +KEYRTS EQU $80 ;Shift-Return +KEYRUN EQU $00 ;Run [PET/CBM] +KEYRVF EQU $92 ;Reverse OffCtrl-0 +KEYRVS EQU $12 ;Reverse On Ctrl-9 +KEYSPS EQU $00 ;Shifted Space +KEYTAB EQU $09 ;Tab +KEYTAS EQU $00 ;Shift-Tab +KEYUP EQU $00 ;Cursor Up diff --git a/include/keydef.h02 b/include/keydef.h02 new file mode 100644 index 0000000..b11e438 --- /dev/null +++ b/include/keydef.h02 @@ -0,0 +1,37 @@ +/* Standard ASCII Key Code Definitions * + * Undefined Keys hae value $00 * + +#define KEYBCK $08 //Backspace +#define KEYBRK $03 //Break +#define KEYCLR $00 //Clear +#define KEYCPY $00 //Copy +#define KEYDEL $7F //Delete +#define KEYDN $00 //Cursor Down +#define KEYESC $1B //Escape +#define KEYFN1 $00 //1 +#define KEYFN2 $00 //2 +#define KEYFN3 $00 //3 +#define KEYFN4 $00 //4 +#define KEYFN5 $00 //5 +#define KEYFN6 $00 //6 +#define KEYFN7 $00 //7 +#define KEYFN8 $00 //8 +#define KEYFN9 $00 //9 +#define KEYFNA $00 //10 +#define KEYFNB $00 //11 +#define KEYFNC $00 //12 +#define KEYHLP $00 //Help +#define KEYHOM $00 //Home +#define KEYINS $00 //Insert +#define KEYLFT $00 //Cursor Left +#define KEYLNF $0A //Line Feed +#define KEYRGT $00 //Cursor Right +#define KEYRTN $0D //Return +#define KEYRTS $80 //Shift-Return +#define KEYRUN $00 //Run +#define KEYRVF $92 //Reverse Off +#define KEYRVS $12 //Reverse On +#define KEYSPS $00 //Shifted Space +#define KEYTAB $09 //Tab +#define KEYTAS $00 //Shift-Tab +#define KEYUP $00 //Cursor Up diff --git a/include/vic/keydef.a02 b/include/vic/keydef.a02 new file mode 100644 index 0000000..b868a1f --- /dev/null +++ b/include/vic/keydef.a02 @@ -0,0 +1,37 @@ +;PETSCII Key Code Definitions +;for Commmodore 64 Computer + +KEYBCK EQU $00 ;Backspace [N/A] +KEYBRK EQU $03 ;Break (RUN/STOP) +KEYCLR EQU $93 ;Clear (Shift-CLR/HOME) +KEYCPY EQU $00 ;Copy [N/A] +KEYDEL EQU $14 ;Delete +KEYDN EQU $11 ;Cursor Down +KEYESC EQU $00 ;Escape [N/A] +KEYFN1 EQU $85 ;F1 (F1/F2) +KEYFN2 EQU $89 ;F2 (Shift-F1/F2) +KEYFN3 EQU $86 ;F3 (F3/F4) +KEYFN4 EQU $8A ;F4 (Shift-F3/F4) +KEYFN5 EQU $87 ;F5 (F5/F6) +KEYFN6 EQU $8B ;F6 (Shift-F5/F6) +KEYFN7 EQU $88 ;F7 (F7/F8) +KEYFN8 EQU $8C ;F8 (Shift-F7/F8) +KEYFN9 EQU $00 ;F9 [N/A] +KEYFNA EQU $00 ;F10 [N/A] +KEYFNB EQU $00 ;F11 [N/A] +KEYFNC EQU $00 ;F12 [N/A] +KEYHLP EQU $84 ;Help [N/A] +KEYHOM EQU $13 ;Home (CLR/HOME) +KEYINS EQU $94 ;Insert (Shift-INS/DEL) +KEYLFT EQU $9D ;Cursor Left +KEYLNF EQU $00 ;Line Feed [N/A] +KEYRGT EQU $1D ;Cursor Right +KEYRTN EQU $0D ;Return +KEYRTS EQU $8D ;Shift-Return +KEYRUN EQU $00 ;Run (Shift-RUN/STOP) +KEYRVF EQU $92 ;Reverse Off +KEYRVS EQU $12 ;Reverse On +KEYSPS EQU $A0 ;Shifted Space +KEYTAB EQU $09 ;Tab +KEYTAS EQU $00 ;Shift-Tab [N/A] +KEYUP EQU $91 ;Cursor Up diff --git a/include/vic/keydef.h02 b/include/vic/keydef.h02 new file mode 100644 index 0000000..ab29a51 --- /dev/null +++ b/include/vic/keydef.h02 @@ -0,0 +1,37 @@ +/* PETSCII Key Code Definitions * + * for Commodore 64 Computer */ + +#define KEYBCK $00 //Backspace +#define KEYBRK $03 //Break (RUN/STOP) +#define KEYCLR $93 //Clear (Shift-CLR/HOME) +#define KEYCPY $00 //Copy [N/A] +#define KEYDEL $14 //Delete +#define KEYDN $11 //Cursor Down +#define KEYESC $00 //Escape [N/A] +#define KEYFN1 $85 //Function Key 1 (F1/F2) +#define KEYFN2 $89 //Function Key 2 (Shift-F1/F2) +#define KEYFN3 $86 //Function Key 3 (F3/F4) +#define KEYFN4 $8A //Function Key 4 (Shift-F3/F4) +#define KEYFN5 $87 //Function Key 5 (F5/F6) +#define KEYFN6 $8B //Function Key 6 (Shift-F5/F6) +#define KEYFN7 $88 //Function Key 7 (F7/F8) +#define KEYFN8 $8C //Function Key 8 (Shift-F7/F8) [HELP on C16] +#define KEYFN9 $00 //Function Key 9 [N/A] +#define KEYFNA $00 //Function Key 10 [N/A] +#define KEYFNB $00 //Function Key 11 [N/A] +#define KEYFNC $00 //Function Key 12 [N/A] +#define KEYHLP $84 //Help [N/A] +#define KEYHOM $13 //Home (CLR/HOME) +#define KEYINS $94 //Insert (Shift-INS/DEL) +#define KEYLFT $9D //Cursor Left +#define KEYLNF $00 //Line Feed (N/A) +#define KEYRGT $1D //Cursor Right +#define KEYRTN $0D //Return +#define KEYRTS $8D //Shift-Return +#define KEYRUN $00 //Run (Shift-RUN/STOP) +#define KEYRVF $92 //Reverse Off +#define KEYRVS $12 //Reverse On +#define KEYSPS $A0 //Shifted Space +#define KEYTAB $09 //Tab +#define KEYTAS $00 //Shift-Tab [N/A] +#define KEYUP $91 //Cursor Up diff --git a/include/x16/keydef.a02 b/include/x16/keydef.a02 new file mode 100644 index 0000000..730cacb --- /dev/null +++ b/include/x16/keydef.a02 @@ -0,0 +1,37 @@ +;PETSCII Key Code Definitions for Commander X16 + +;NAME Chr Description x16emu +KEYBCK EQU $00 ;Backspace [N/A] +KEYBRK EQU $03 ;Break (RUN/STOP) **missing** +KEYCLR EQU $93 ;Clear (Shift-CLR/HOME) Shift-Home +KEYCPY EQU $00 ;Copy [N/A] +KEYDEL EQU $14 ;Delete Backspace +KEYDN EQU $11 ;Cursor Down Cursor Down +KEYESC EQU $1B ;Escape [C128/C65] **missing** +KEYFN1 EQU $85 ;F1 (F1/F2) F1 +KEYFN2 EQU $89 ;F2 (Shift-F1/F2) F2 +KEYFN3 EQU $86 ;F3 (F3/F4) F3 +KEYFN4 EQU $8A ;F4 (Shift-F3/F4) F4 +KEYFN5 EQU $87 ;F5 (F5/F6) F5 +KEYFN6 EQU $8B ;F6 (Shift-F5/F6) F6 +KEYFN7 EQU $88 ;F7 (F7/F8) F7 +KEYFN8 EQU $8C ;F8 (Shift-F7/F8) F8 +KEYFN9 EQU $89 ;F9 [C65] F9 +KEYFNA EQU $15 ;F10 [C65] F10 +KEYFNB EQU $16 ;F11 [C65] F11 +KEYFNC EQU $17 ;F12 [C65] F12 +KEYHLP EQU $84 ;Help [C65] +KEYHOM EQU $13 ;Home (CLR/HOME) Home +KEYINS EQU $94 ;Insert (Shift-INS/DEL) Shift-Backspace +KEYLFT EQU $9D ;Cursor Left Cursor Left +KEYLNF EQU $00 ;Line Feed [C128] +KEYRGT EQU $1D ;Cursor Right Cursor Right +KEYRTN EQU $0D ;Return Enter +KEYRTS EQU $8D ;Shift-Return Shift-Enter +KEYRUN EQU $00 ;Run (Shift-RUN/STOP) +KEYRVF EQU $92 ;Reverse Off Ctrl-0 +KEYRVS EQU $12 ;Reverse On Ctrl-9 +KEYSPS EQU $A0 ;Shifted Space Shifted Space +KEYTAB EQU $09 ;Tab Tab +KEYTAS EQU $18 ;Shift-Tab **missing** +KEYUP EQU $91 ;Cursor Up Cursor Up diff --git a/include/x16/keydef.h02 b/include/x16/keydef.h02 new file mode 100644 index 0000000..e343eed --- /dev/null +++ b/include/x16/keydef.h02 @@ -0,0 +1,36 @@ +/* PETSCII Key Code Definitions for Commander X16 */ + +#define KEYBCK $00 //Backspace +#define KEYBRK $03 //Break (RUN/STOP) +#define KEYCLR $93 //Clear (Shift-CLR/HOME) +#define KEYCPY $00 //Copy +#define KEYDEL $14 //Delete +#define KEYDN $11 //Cursor Down +#define KEYESC $1B //Escape +#define KEYFN1 $85 //Function Key 1 (F1/F2) +#define KEYFN2 $89 //Function Key 2 (Shift-F1/F2) +#define KEYFN3 $86 //Function Key 3 (F3/F4) +#define KEYFN4 $8A //Function Key 4 (Shift-F3/F4) +#define KEYFN5 $87 //Function Key 5 (F5/F6) +#define KEYFN6 $8B //Function Key 6 (Shift-F5/F6) +#define KEYFN7 $88 //Function Key 7 (F7/F8) +#define KEYFN8 $8C //Function Key 8 (Shift-F7/F8) [HELP on C16] +#define KEYFN9 $89 //Function Key 9 +#define KEYFNA $15 //Function Key 10 +#define KEYFNB $16 //Function Key 11 +#define KEYFNC $17 //Function Key 12 +#define KEYHLP $84 //Help (C65) +#define KEYHOM $13 //Home (CLR/HOME) +#define KEYINS $94 //Insert (Shift-INS/DEL) +#define KEYLFT $9D //Cursor Left +#define KEYLNF $00 //Line Feed (N/A) +#define KEYRGT $1D //Cursor Right +#define KEYRTN $0D //Return +#define KEYRTS $8D //Shift-Return +#define KEYRUN $00 //Run (Shift-RUN/STOP) +#define KEYRVF $92 //Reverse Off +#define KEYRVS $12 //Reverse On +#define KEYSPS $A0 //Shifted Space +#define KEYTAB $09 //Tab +#define KEYTAS $18 //Shift-Tab [C65] +#define KEYUP $91 //Cursor Up From a56007da8f19ad73b943130ba52509b376e74451 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Mon, 18 Nov 2019 01:38:23 -0500 Subject: [PATCH 28/42] Changed Batch Files in test/ to use a02.exe --- test/a02.bat | 14 ++++++++++++++ test/c02.bat | 10 ++++++++++ test/c64.bat | 14 ++++++++------ test/orao.bat | 35 +++++++++++++++++++++++++++++++++++ test/v8k.bat | 4 ++-- test/x16.bat | 5 ----- 6 files changed, 69 insertions(+), 13 deletions(-) create mode 100644 test/a02.bat create mode 100644 test/c02.bat create mode 100644 test/orao.bat diff --git a/test/a02.bat b/test/a02.bat new file mode 100644 index 0000000..fe0619e --- /dev/null +++ b/test/a02.bat @@ -0,0 +1,14 @@ +@ECHO OFF +IF "%1" == "" ( + ECHO Usage: %0 a02file + GOTO :EXIT +) +SET ASMEXT="" +IF EXIST %1.a02 SET ASMEXT=a02 +IF EXIST %1.asm SET ASMEXT=asm +IF "%ASMEXT%" == "" ( + ECHO Assembly File %1 Not Found + GOTO :EXIT +) +ECHO Assembling File %1.%ASMEXT% +..\a02.exe %1.%ASMEXT% %1.bin %1.lst >%1.out diff --git a/test/c02.bat b/test/c02.bat new file mode 100644 index 0000000..6a515da --- /dev/null +++ b/test/c02.bat @@ -0,0 +1,10 @@ +@ECHO OFF +IF EXIST %1.c02 GOTO COMPILE + ECHO File %1.c02 not found + GOTO EOF + +:COMPILE +ECHO Compiling File %1.c02 +..\c02.exe -h header %1 >%1.dbg + +:EOF \ No newline at end of file diff --git a/test/c64.bat b/test/c64.bat index e76e61a..32f9d2c 100644 --- a/test/c64.bat +++ b/test/c64.bat @@ -1,18 +1,20 @@ +@REM Compile and Run C02 Program for C64 @ECHO OFF + IF EXIST %1.c02 GOTO COMPILE - ECHO File %1.c02 not found - GOTO EOF +ECHO File %1.c02 not found +GOTO EOF :COMPILE ECHO Compiling File %1.c02 for Commodore 64 -..\c02.exe -h c64 -s c64 -s cbm %1 >%1.dbg +..\c02.exe -d -h c64 -s c64 -s cbm %1 >%1.dbg IF %ERRORLEVEL% NEQ 0 GOTO EOF -ECHO Assembling File %1.asm -C:\Programs\dasm %1.asm -f1 -o%1.prg -l%1.lst -s%1.sym +ECHO Assembling File %1.asm +..\a02.exe -p %1.asm %1.prg %1.lst >%1.out IF %ERRORLEVEL% NEQ 0 GOTO EOF ECHO Starting Emulator -@start C:\Programs\WinVICE\x64.exe -config x64.ini %1.prg +start C:\Programs\WinVICE\x64.exe -config x64.ini %1.prg :EOF diff --git a/test/orao.bat b/test/orao.bat new file mode 100644 index 0000000..80157c6 --- /dev/null +++ b/test/orao.bat @@ -0,0 +1,35 @@ +@REM Compile and Assemble Program for Orao +@ECHO OFF + +SET ORAOBIN=C:\Programs\OraoEmulator\bin +SET ORAOTAP=C:\Programs\OraoEmulator\tap +SET ORAOWAV=C:\Programs\OraoPy\wav +SET ORAOTOOLS=C:\Programs\OraoEmulator\tools + +IF EXIST %1.c02 GOTO COMPILE + ECHO File %1.c02 not found + EXIT /B + +:COMPILE +ECHO Compiling File %1.c02 +..\c02.exe -h orao -s orao %1 >%1.dbg +IF ERRORLEVEL 1 EXIT /B + +ECHO Assembling File %1.asm +dasm %1.asm -f1 -o%1.obj -l%1.lst -s%1.sym +IF ERRORLEVEL 1 EXIT /B + +ECHO Creating Binary File +%ORAOTOOLS%\obj2bin %1.obj %ORAOBIN%\%1.bin +IF ERRORLEVEL 1 EXIT /B + +ECHO Building Tape Image +%ORAOTOOLS%\maketap %ORAOTAP%\%1.tap %ORAOBIN%\%1.bin +IF ERRORLEVEL 1 EXIT /B + +ECHO Building WAV File +%ORAOTOOLS%\orao2wav %ORAOBIN%\%1.bin +IF ERRORLEVEL 1 EXIT /B +MOVE %ORAOBIN%\%1.wav %ORAOWAV% + +DEL %1.obj diff --git a/test/v8k.bat b/test/v8k.bat index 1680e0a..14530ae 100644 --- a/test/v8k.bat +++ b/test/v8k.bat @@ -8,8 +8,8 @@ ECHO Compiling File %1.c02 for VIC 20 +8k ..\c02.exe -h vic8k -s vic -s cbm %1 >%1.dbg IF %ERRORLEVEL% NEQ 0 GOTO EOF ECHO Assembling File %1.asm -C:\Programs\dasm %1.asm -f1 -o%1.prg -l%1.lst -s%1.sym - +..\a02.exe -p %1.asm %1.prg %1.lst >%1.out +REM C:\Programs\dasm %1.asm -f1 -o%1.prg -l%1.lst -s%1.sym IF %ERRORLEVEL% NEQ 0 GOTO EOF ECHO Starting Emulator diff --git a/test/x16.bat b/test/x16.bat index 99d8a30..bec90d6 100644 --- a/test/x16.bat +++ b/test/x16.bat @@ -15,10 +15,5 @@ REM C:\Programs\dasm %1.asm -f1 -o%1.prg -l%1.lst -s%1.sym IF %ERRORLEVEL% NEQ 0 GOTO EOF ECHO Starting Emulator in Debug Mode -REM SET X16DIR=C:\Programs\x16emu -REM SET X16EXE=%X16DIR%\x16emu.exe -REM SET X16ROM=%X16DIR%\rom.bin -REM SET X16CHR=%X16DIR%\chargen.bin -REM %X16EXE% -rom %X16ROM% -char %X16CHR% -prg %1.prg -run -debug C:\Programs\x16emu\x16emu -prg %1.prg -run -debug -echo raw >%1.out :EOF From f83a5d1e71c36a125dd777508246c4eb69b4090f Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Tue, 19 Nov 2019 13:52:21 -0500 Subject: [PATCH 29/42] Added Various .c02 files from test/ --- test/hello.c02 | 21 ++++ test/ints.c02 | 87 +++++++++++++++ test/keydefs.c02 | 55 ++++++++++ test/testilib.c02 | 105 ++++++++++++++++++ test/testslib.c02 | 199 +++++++++++++++++++++++++++++++++ test/xmemtest.c02 | 272 ++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 739 insertions(+) create mode 100644 test/hello.c02 create mode 100644 test/ints.c02 create mode 100644 test/keydefs.c02 create mode 100644 test/testilib.c02 create mode 100644 test/testslib.c02 create mode 100644 test/xmemtest.c02 diff --git a/test/hello.c02 b/test/hello.c02 new file mode 100644 index 0000000..f232218 --- /dev/null +++ b/test/hello.c02 @@ -0,0 +1,21 @@ +/***************************************************** + * HELLO - Test/Demo program for C02 Standard Header * + * Prints "HELLO WORLD" and exits * + *****************************************************/ + +//Specify System Header using -H option + +char key; //Key value + +const char hello = "HELLO WORLD"; +char i; + +main: + i = 0; + while (hello[i]) { + putchr(hello[i]); + i++; + } + newlin(); + goto exit; + diff --git a/test/ints.c02 b/test/ints.c02 new file mode 100644 index 0000000..d63f85f --- /dev/null +++ b/test/ints.c02 @@ -0,0 +1,87 @@ +/**************************************************** + * INTS - Test Integer Variables and Function Calls */ + +//Specify System Header using -H option +#include +#include +#include +#include +#include +#include +#include +#include + +char n; //Number of Characters +char r[255]; //Test Array +char s[128]; //Test String +const char istr = "9876"; +const char t = "CONST STRING."; + +alias int nmi = $FFFA; //NMI Vector +alias int rst = $FFFC; //Reset Vector +alias int brk = $FFFE; //Break Vector + +int addr; //Various Addresses +int eoj; //End of Job + +const int less = $789A; +const int more = $BCDE; + +int yx, dd; //Function Arguments and Variables +char aa, xx, yy; + +struct record {char name[8], index; int addr;}; +struct record rec; + +main: + +eoj = getend(); + +setdst(&rec.name); strcpy("FRED"); +rec.index = $AB; +rec.addr = $CDEF; + +newlin(); + +/* Print Vector Contents */ +setdst(nmi); printf("NMI=$%w%n"); +setdst(rst); printf("RST=$%w%n"); +setdst(brk); printf("BRK=$%w%n%n"); + +/* Print Contents of EOJ */ +setdst(eoj); printf("EOJ=$%w%n%n"); + +anykey(); + +/* Test Function Call Arguments */ +putln("ADDR=49152"); addr = 49152; setdst(&49152); cmpdst(addr); +putln("ADDR=&T"); addr = &t; setdst(t); cmpdst(addr); +putln("ADDR=&REC"); addr = &rec; setdst(&rec); cmpdst(addr); +putln("ADDR=&REC.NAME"); addr = &rec.name; setdst(&rec.name); cmpdst(addr); +putln("ADDR=&REC.INDEX"); addr = &rec.index; setdst(&rec.index); cmpdst(addr); +putln("ADDR=&REC.ADDR"); addr = &rec.addr; setdst(&rec.addr); cmpdst(addr); + +anykey(); + +puts("GOTO (EOJ)"); +goto (eoj); + failln(); + goto exit; +end: + passln(); + goto exit; + +int getend() { + return &end; +} + +void prtwrd(., yy, xx) { + putchr('$'); puthex(yy); puthex(xx); +} + +void cmpdst(yx) { + dd = getdst(); + prtwrd(yx); putchr('='); prtwrd(dd); + if (>yx == >dd and + +char key; //Key value + +main: + putstr("PRESS KEYS TO SEE DEFINITIONS"); newlin(); + while() { + key = getchr(); + if (!key) continue; + select (key) { + case #KEYBCK: putstr("BACKSPACE"); + case #KEYBRK: putstr("BREAK"); + case #KEYCLR: putstr("CLEAR"); + case #KEYCPY: putstr("COPY"); + case #KEYDEL: putstr("DELETE"); + case #KEYDN : putstr("DOWN"); + case #KEYESC: putstr("ESCAPE"); + case #KEYFN1: putstr("F1"); + case #KEYFN2: putstr("F2"); + case #KEYFN3: putstr("F3"); + case #KEYFN4: putstr("F4"); + case #KEYFN5: putstr("F5"); + case #KEYFN6: putstr("F6"); + case #KEYFN7: putstr("F7"); + case #KEYFN8: putstr("F8"); + case #KEYFN9: putstr("F9"); + case #KEYFNA: putstr("F10"); + case #KEYFNB: putstr("F11"); + case #KEYFNC: putstr("F12"); + case #KEYHLP: putstr("HELP"); + case #KEYHOM: putstr("HOME"); + case #KEYINS: putstr("INSERT"); + case #KEYLFT: putstr("LEFT"); + case #KEYRGT: putstr("RIGHT"); + case #KEYRTN: putstr("RETURN"); + case #KEYRTS: putstr("SHIFT-RETURN"); + case #KEYRUN: putstr("RUN"); + case #KEYRVF: putstr("RVS-OFF"); + case #KEYRVS: putstr("RVS-ON"); + case #KEYSPS: putstr("SHIFT-SPACE"); + case #KEYTAB: putstr("TAB"); + case #KEYTAS: putstr("SHIFT-TAB"); + case #KEYUP : putstr("UP"); + case ' ': putstr("SPACE"); + default: if (key > ' ' and key <> #DELKEY) putchr(key); + } + putstr(" ["); prbyte(key); putstr("] "); + if (key == #ESCKEY) break; + } + goto exit; diff --git a/test/testilib.c02 b/test/testilib.c02 new file mode 100644 index 0000000..d002bc1 --- /dev/null +++ b/test/testilib.c02 @@ -0,0 +1,105 @@ +/**************************************************** + * INTS - Test Integer Variables and Function Calls */ + +//Specify System Header using -H option +#include +#include +#include +#include +#include +#include +#include +#include + +char size; +char s[128]; //Test String + +int ivar,ival; //Integer Variables +int icmp,itot,ires; //Function Variables +int less, more; //Test Values for imin() and imax() + +int yx, dd; //Function Arguments and Variables + +void cpival(icmp) { + if (>ival <> >icmp or "); putwrd(icmp); + failln(); + goto exit; + } +} + +/* Test imin() and imax() */ +void minmax() { + newlin(); + puts("LESS=$"); putwrd(less); puts(",MORE=$"); putwrd(more); newlin(); + puts(" IMIN()=$"); setsrc(less); + ival = imin(more); putwrd(ival); newlin(); + cpival(less); + puts(" IMAX()=$"); setsrc(less); + ival = imax(more); putwrd(ival); newlin(); + cpival(more); +} + +/* Test cvibcd() and upbcdi() */ +void intbcd(ival) { + newlin(); puts("CVIBCD($"); putwrd(ival); puts(")=$"); + cvibcd(ival); puthex(temp2); puthex(temp1); puthex(temp0); +} + +/* Test itoa() and atoi() */ +void itaati(ivar) { + newlin(); + puts("ITOA($"); putwrd(ivar); puts(")=\""); + setdst(s); size = itoa(ivar); puts(s); putln("\""); + puts("ATOI(\""); puts(s); puts("\")=$"); + ival = atoi(s); putwrd(ival); newlin(); + //cpival(ivar); +} + +/* Test iadd() and isub() */ +void addsub(ivar) { + newlin(); + putint(ival); putchr('+'); putint(ivar); putchr('='); + setsrc(ival); itot = iadd(ivar); putint(itot); newlin(); + putint(itot); putchr('-'); putint(ivar); putchr('='); + setsrc(itot); ires = isub(ivar); putint(ires); newlin(); + cpival(ires); +} + +/* Test imult() and idiv() */ +void mltdiv(ivar) { + newlin(); + putint(ival); putchr('X'); putint(ivar); putchr('='); + setsrc(ival); itot = imult(ivar); putint(itot); newlin(); + putint(itot); putchr('/'); putint(ivar); putchr('='); + setsrc(itot); ires = idiv(ivar); putint(ires); newlin(); + cpival(ires); +} + +main: + +less = $009A; more = $00DE; minmax(); +less = $789A; more = $78DE; minmax(); +less = $7800; more = $BC00; minmax(); +less = $789A; more = $BCDE; minmax(); +anykey(); + +itaati(&0); +itaati(&234); +itaati(&256); +itaati(&456); +itaati(&23456); +itaati(&$FFFF); +anykey(); + +ival = &23; addsub(&34); +ival = &1234; addsub(&5678); +ival = &23456; addsub(&34567); +ival = &$7700; addsub(&$6600); +ival = &$7FFF; addsub(&$8000); +anykey(); + +//ival = &123; mltdiv(&234); + + +goto exit; \ No newline at end of file diff --git a/test/testslib.c02 b/test/testslib.c02 new file mode 100644 index 0000000..41a8573 --- /dev/null +++ b/test/testslib.c02 @@ -0,0 +1,199 @@ +/************************************************** + * TESTSLIB - Test Library stdlib.h02 for py65mon * + **************************************************/ + +//Specify System Header using -H option +#include +#include + +void prtcma() {putchr(',');} +void prtlin() {putstr(); newlin();} +void prtok() {prtlin(" OK");} + +main: + +//goto tstcvb; + +tstabs: //Test abs() +char onum, anum, cnum; +putstr("ABS()"); + +//test abs() positive numbers +onum = 0; +aploop: + anum = abs(onum); + if (onum <> anum) goto abserr; + onum++; + if (onum < $80) goto aploop; + +//test abs() negative numbers +anloop: + anum = abs(onum); + cnum = -onum; + if (anum <> cnum) goto abserr; + onum++; + if (onum > $00) goto anloop; + prtok(); + +tstmlt: //Test mult() +char mltplr, mltpnd, acmlsb, acmmsb, acmlst; +char prodct, ovrflw; + +putstr("MULT()"); +mltplr = 1; +mrloop: + mltpnd = 1; acmlst = 0; + acmlsb = 0; acmmsb = 0; + mdloop: + acmlsb = acmlsb + mltplr; + if (acmlsb acmlsb) goto merror; + mltpnd++; + if (mltpnd > 0) goto mdloop; + mltplr++; + if (mltplr > 0) goto mrloop; + prtok(); + +tstdiv: //Test div() +char maxmpd, divdnd, divisr, quotnt; + +putstr("DIV()"); +mltplr = 255; +maxmpd = 1; +drloop: + mltpnd = 1; + acmlsb = 0; + ddloop: + acmlsb = acmlsb + mltplr; + prodct = mult(mltplr, mltpnd); + quotnt = div(prodct, mltpnd); + if (quotnt <> mltplr) goto derror; + mltpnd++; + if (mltpnd < maxmpd) goto ddloop; + mltplr>>; + maxmpd<<; + if (mltplr <> 0) goto drloop; + prtok(); + +tstrnd: //Test rand() and rands() +char countr, rndnum, rndtbl[255]; + +putstr("RAND()"); +rands(1); //Seed Random Number Generator; + +countr = 0; + +riloop: + rndtbl[countr] = 0; + countr++; + if (countr <> 0) goto riloop; + +rnloop: + rndnum = rand(); + if (rndtbl[rndnum] > 0) goto rnderr; + rndtbl[rndnum] = $FF; + countr++; + if (countr < 255) goto rnloop; + prtok(); + +tstcvb: //Test cvbcd() +char cvbchr,cvblo,cvbhi; + +goto tstc2a; +putstr("CVBCD()"); +cvbchr = 0; cvblo = 0; cvbhi = 0; +cvloop: + cvbcd(cvbchr); + getchr(); + if (temp1 <> cvblo or temp2 <> cvbhi) goto cvberr; + cvblo++; + if (cvblo & $0f > 9) { + cvblo = cvblo & $f0 + $10; + if (cvblo >= $a0) { + cvblo = cvblo & $0f; + cvbhi++; + } + } + cvbchr++; + if (cvbchr) goto cvloop; + prtok(); + +tstc2a: //Test ctoa(); +char srcchr, dstchr, tststr[4]; + +putstr("CTOA()"); +srcchr = 0; +caloop: + ctoa(srcchr, &tststr); + dstchr = atoc(&tststr); + if (srcchr <> dstchr) goto c2aerr; + srcchr++; + if (srcchr <> 0) goto caloop; + prtok(); + +goto exit; + +abserr: + putstr("ABS("); + prbyte(onum); + putchr(')'); + putchr('='); + prbyte(anum); + putchr(','); + prbyte(cnum); + newlin(); + goto exit; + +merror: + newlin(); + prbyte(mltplr); + putchr('*'); + prbyte(mltpnd); + putchr('='); + //prbyte(ovrflw); + prbyte(prodct); + putchr(','); + //prbyte(acmmsb); + prbyte(acmlsb); + newlin(); +goto exit; + +derror: + newlin(); + prbyte(divdnd); + putchr('/'); + prbyte(divisr); + putchr('='); + prbyte(quotnt); + putchr(','); + prbyte(mltplr); + newlin(); +goto exit; + +rnderr: + putstr("RAND()="); + prbyte(rndnum); + putchr(','); + prbyte(countr); + newlin(); + goto exit; + +cvberr: + putstr(" !CVBCD("); + prbyte(cvbchr); + putstr(")=$"); + prbyte(TEMP2); + prbyte(TEMP1); + newlin(); + goto exit; + +c2aerr: + putstr(" !CTOA("); + prbyte(srcchr); + putstr(")="); + prbyte(dstchr); + newlin(); + goto exit; + diff --git a/test/xmemtest.c02 b/test/xmemtest.c02 new file mode 100644 index 0000000..47ead14 --- /dev/null +++ b/test/xmemtest.c02 @@ -0,0 +1,272 @@ +/************************************** + * TESTXMEM - Test Library xmemory.h02 * + **************************************/ + +//use -h option on command line +#include +#include +#include +#include +#include +#include +#include + +char aa; //Function Arguments + +alias char banked = $A000; //Beginning of Banked Memory +int icount; + +char i; //Index Variable +char chrctr; //Get/Put Character +int intger; //Get/Put Integer +char r[255],w[255]; //Read/Write Arrays + +char ibank, ipage, ibyte; //Index Bank, Page, and Byte +char lbank, lpage, lbyte; //Logical Bank, Page, and Byte +char mbank, mpage, mbyte; //Memory Bank, Page, and Byte +char pbank, ppage, pbyte; //Physical Bank, Page, and Byte +char sbank, spage, sbyte; //Starting Bank, Page, and Byte +char ebank, epage, ebyte; //Starting Bank, Page, and Byte + +void passed() { putln("PASSED");} + +void paddrs(aa) { + if (aa) newlin(); else puts(", "); + printf(setdst(xgetpa()),"PA=$%h%w, "); + printf(setdst(xgetla()),"LA=$%h%w "); +} + +void perror() { + printf(); //Implied Arguments + paddrs(#FALSE); + newlin(); + goto exit; +} + +/* Test xclcpa() and xclcla() */ +void tstlpl(sbank,spage,sbank) { + ibank=sbank; ipage=spage; ibyte=sbyte; + while (ibank<=#XLBANK) { + putc('.'); + while() { + while() { + //printf(setdst(ibank,ipage,ibyte),"%n ORIGINAL: $%h%w"); + pbank,ppage,pbyte = xclcpa(ibank,ipage,ibyte); + //printf(setdst()," PHYSICAL: $%h%w"); + lbank,lpage,lbyte = xclcla(pbank,ppage,pbyte); + //printf(setdst(),", LOGICAL: $%h%w"); + if (lbank<>ibank or lpage<>ipage or ibyte<>lbyte) + perror(setdst(ibank,ipage,ibyte),"%nERROR IN BANK $%h ADDRESS $%w"); + if (getkey()==#ESCKEY) goto exit; + ibyte=ibyte+$10; if (!ibyte) break; + } ipage++; if (!ipage) break; + } ibank++; if (!ibank) break; + } +} + +/* Test xgetla() and xsetla() */ +void tstgsl(ibank,ipage,ibank) { + while (ibank<=#XLBANK) { + putc('.'); + while() { + while() { + //printf(setdst(ibank,ipage,ibyte),"%n SET: $%h%w"); + xsetla(ibank,ipage,ibyte); + lbank,lpage,lbyte = xgetla(); + //printf(setdst(),", GOT: $%h%w"); + if (lbank<>ibank or lpage<>ipage or ibyte<>lbyte) + perror(setdst(ibank,ipage,ibyte),"%nERROR IN BANK $%h ADDRESS $%w"); + if (getkey()==#ESCKEY) goto exit; + ibyte=ibyte+$10; if (!ibyte) break; + } ipage++; if (!ipage) break; + } ibank++; if (!ibank) break; + } +} + +/* Test xincpa() */ +void tstipa(ibank,ipage,ibank) { + xsetla(ibank,ipage,ibyte); //Set Logical Address to 0 + while (ibank<=#XLBANK) { + putc('.'); + while() { + //clrscr(); + while() { + pbank,ppage,pbyte = xgetpa(ibank,ipage,ibyte); + //printf(setdst(),"$%h%w:"); + lbank,lpage,lbyte = xgetla(); //Get Logical Address + //printf(setdst(),"$%h%w "); + if (lbank<>ibank or lpage<>ipage or ibyte<>lbyte) + perror(setdst(ibank,ipage,ibyte),"%nERROR IN BANK $%h ADDRESS $%w"); + xincpa(); //Increment Physical Address + ibyte++; if (!ibyte) break; + } ipage++; if (!ipage) break; + if (getkey()==#ESCKEY) goto exit; + } ibank++; if (!ibank) break; + } +} + +/* Test xgetc() and xputc() */ +void tstgpc(sbank,spage,sbyte) { + while() { + //printf(setdst(),"$%h%w"); + putc('.'); + ibank=sbank; ipage=spage; ibyte=sbyte; + xsetla(ibank,ipage,ibyte); + i=0; do { xputc(i); i++; } while (i); + xsetla(ibank,ipage,ibyte); + i=0; do { + if (xgetc()<>i) perror(setdst(xgetpa()),"%nERROR IN BANK $%h ADDRESS $%w"); + i++; + } while (i); + sbank++;spage++;sbyte++; + if (!sbank or sbank>#XLBANK) break; + } +} + +/* Test xgeti() and xputi() */ +void tstgpi(sbank,spage,sbyte) { + while() { + //*printf(setdst(),"$%h%w"); + putc('.'); + ibank=sbank; ipage=spage; ibyte=sbyte; + //Write 256 Integers + xsetla(ibank,ipage,ibyte); + i=0; do { + mpage=i;mbyte=i^$FF; + xputi(.,mpage,mbyte); + i++; + } while (i); + //Read 256 Integers + xsetla(ibank,ipage,ibyte); + i=0; do { + mpage=i;mbyte=i^$FF; + intger = xgeti(); + if (mbyte or >intger<>mpage) + perror(setdst(xgetpa()),"%nERROR IN BANK $%h ADDRESS $%w"); + i++; + } while (i); + //Set Next Start Address + sbank++;spage++;sbyte++; + if (!sbank or sbank>#XLBANK) break; + } +} + +/* Test xgetl() and xputl() */ +void tstgpl(sbank,spage,sbyte) { + while() { + //*printf(setdst(),"$%h%w"); + putc('.'); + ibank=sbank; ipage=spage; ibyte=sbyte; + //Write 256 Integers + xsetla(ibank,ipage,ibyte); + i=0; do { + mbyte=i; mpage=i^$FF; mbank = -i; + xputi(mbank,mpage,mbyte); + i++; + } while (i); + //Read 256 Integers + xsetla(ibank,ipage,ibyte); + i=0; do { + mbyte=i; mpage=i^$FF; mbank = -i; + intger = xgeti(); + if (mbyte or >intger<>mpage) + perror(setdst(xgetpa()),"%nERROR IN BANK $%h ADDRESS $%w"); + i++; + } while (i); + //Set Next Start Address + sbank++;spage++;sbyte++; + if (!sbank or sbank>#XLBANK) break; + } +} + +/* Test xread() and xwrite() */ +void tstxrw(sbank,spage,epage) { + i=0; do {w[i]=i;i++;} while (i); //Fill Write Array + ibank=sbank; + while (ibank<=#XLBANK) { + putc('.'); + //Write 256,1-255 bytes of Array + ipage=spage; xsetla(ibank,0,ipage); + do { + //paddrs(#TRUE); + //inline $ff; + xwrite(ipage,&w); + //if (banked=61) perror("MEMORY OVERWRITE ERROR!"); + ipage++; + } while (ipage<>epage); + //paddrs(#TRUE); + //Read 256,1-255 bytes of Array + ipage=spage; xsetla(ibank,0,ipage); + do { + //printf(ipage,"%n%h:"); + //inline $ff; + //paddrs(#TRUE); + xread(ipage,&r); + i=0; do { + //printf(r[i],"%h."); printf(w[i],"%h,"); + if (r[i]<>w[i]) perror(i,"ERROR IN INDEX %d"); + i++; + } while(i<>ipage); + ipage++; + } while (ipage<>epage); + ibank++; if (!ibank) break; + } +} + +/* Test xload() and xsave() */ +void tstxls(sbank,spage,sbyte) { + setsrc(&$F000); //Most Systems have ROM from $F000 to $FFFF + xsetla(sbank,spage,sbyte); + xsave(&$1000); //Save through $FFFF + setdst(&$8000); //There's usually free RAM here + xsetla(sbank,spage,sbyte); + xload(&$1000); //Load bytes saved from $F000 to $FFFF + srcptr = &$F000; dstptr = &$8000; icount = &$1000; + while (icount) { + //putwrd(srcptr); putchr(':'); puthex(*srcptr); putspc(); + //putwrd(dstptr); putchr(':'); puthex(*dstptr); putspc(); + if (*srcptr <> *dstptr) perror("ERROR IN XLOAD() AND/OR XSAVE()\n"); + if (! Date: Tue, 19 Nov 2019 18:54:12 -0500 Subject: [PATCH 30/42] Replaced test/testscrn.c02 with test/scrntst.c02 --- test/scrntst.c02 | 72 +++++++++++++++++++++++++++++++++++++++++++++++ test/testscrn.c02 | 53 ---------------------------------- 2 files changed, 72 insertions(+), 53 deletions(-) create mode 100644 test/scrntst.c02 delete mode 100644 test/testscrn.c02 diff --git a/test/scrntst.c02 b/test/scrntst.c02 new file mode 100644 index 0000000..9a5a8c0 --- /dev/null +++ b/test/scrntst.c02 @@ -0,0 +1,72 @@ +/************************************ + * SCRNTST - Test C02 screen module * + ************************************/ + +//use -h amd -s options on command line +#include + +char col, row, wdth, hght; +char mode, modex; +char a, c, f, i, m; +char aa, yy; + +const char modes = {#SMTEXT, #SMWIDE}; + +void prtaxy(aa,yy) { + if (aa & $F0) prbyte(aa); else prhex(aa); + putchr('X'); + if (yy & $F0) prbyte(yy); else prhex(yy); +} + +void putlin() {putstr(); newlin();} + +main: + + for (modex=0; modex<@modes; modex++) { + + mode = modes[modex]; + putstr("MODE $"); prbyte(mode); newlin(); + if (mode == $FF) continue; //Unsupported Mode + + if (setscr(mode)=$FF) putlin("ERROR IN SETSCR()"); + m = getscr(); + if (m <> mode) putlin("ERROR IN GETSCR()"); + putstr("MODE="); prbyte(m); newlin(); + + wdth, hght = getsiz(); //Get Screen Width & Height + prtaxy(wdth,hght); newlin(); + + for (i=1; i<6; i++) putchr('.'); + col, row = getpos(); //Get Cursor Position + prtaxy(col,row); + crsrhm(); prtaxy(getpos()); + getchr(); newlin(); //Wait For keypress + + clrscr(); //Clear Screen + col, row = getpos(); //Get Cursor Position + prtaxy(col, row); + f = (col == 255) ? 0 : $FF; + getchr(); + + if (f) clrscr(); else newlin(); + + if (wdth:- or hght:-) goto exit; + for (c='@'; c<'`'; c++) { + if (!f) newlin(); + for (row=hght-2; row; row--) { + if (!f) putchr(' '); + for (col=wdth-2; col; col--) { + if (f) setpos(col,row); + putchr(c); + } + if (!f) newlin(); + if (getkey() == #ESCKEY) goto exit; + } + if (!f) getchr(); + } + if (f) getchr(); //Wait For keypress + newlin(); + + } //for modex + + goto exit; diff --git a/test/testscrn.c02 b/test/testscrn.c02 deleted file mode 100644 index 5820dd2..0000000 --- a/test/testscrn.c02 +++ /dev/null @@ -1,53 +0,0 @@ -/************************************ - * TESTHDR - Test C02 screen module * - ************************************/ - -//use -h amd -s options on command line -#include - -char col, row, wdth, hght; -char c, f, i, aa, yy; - -void prtaxy(aa,yy) { - if (aa & $F0) prbyte(aa); else prhex(aa); - putchr('X'); - if (yy & $F0) prbyte(yy); else prhex(yy); -} - -main: - - wdth, hght = getsiz(); //Get Screen Width & Height - prtaxy(wdth,hght); newlin(); - - for (i=1; i<6; i++) putchr('.'); - col, row = getpos(); //Get Cursor Position - prtaxy(col,row); - crsrhm(); prtaxy(getpos()); - getchr(); newlin(); //Wait For keypress - - clrscr(); //Clear Screen - col, row = getpos(); //Get Cursor Position - prtaxy(col, row); - f = (col == 255) ? 0 : $FF; - getchr(); - - if (f) clrscr(); else newlin(); - - if (wdth:- or hght:-) goto exit; - for (c='@'; c<'`'; c++) { - if (!f) newlin(); - for (row=hght-2; row; row--) { - if (!f) putchr(' '); - for (col=wdth-2; col; col--) { - if (f) setpos(col,row); - putchr(c); - } - if (!f) newlin(); - if (getkey() == #ESCKEY) goto exit; - } - if (!f) getchr(); - } - if (f) getchr(); //Wait For keypress - newlin(); - -goto exit; From 4d460ce5813c9f2db7d5535ef23155c93c9437c8 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Tue, 19 Nov 2019 22:29:05 -0500 Subject: [PATCH 31/42] Replaced test/testsd.c02 with test/sdeftest.c02 --- test/sdeftest.c02 | 80 +++++++++++++++++++++++++++++++++++++++++++++ test/testsd.c02 | 82 ----------------------------------------------- 2 files changed, 80 insertions(+), 82 deletions(-) create mode 100644 test/sdeftest.c02 delete mode 100644 test/testsd.c02 diff --git a/test/sdeftest.c02 b/test/sdeftest.c02 new file mode 100644 index 0000000..e5c1696 --- /dev/null +++ b/test/sdeftest.c02 @@ -0,0 +1,80 @@ +/************************************** + * SDEFTEST - Test Library stddef.h02 * + **************************************/ + +//use -h option on command line +#include + +char lo,hi; +char aa,hh,ll,xx,yy; +int dstadr,srcadr; + +void clrdst() {dstlo=0; dsthi=0;} +void clrreg() {return 0,0,0;} +void clrtmp() {temp0=0; temp1=0; temp2=0; temp3=0;} +void clrsrc() {srclo=0; srchi=0;} +void prskey() {putstr(" PRESS ANY KEY"); newlin(); getchr(); newlin();} +void prtcma(aa) {putchr(','); prbyte(aa);} +void prtdhl() {ll=dstlo; hh=dsthi; putstr(" DSTHI,LO="); prbyte(hh); prtcma(ll); newlin();} +void prtdst() {prbyte(dsthi);prbyte(dstlo); newlin();} +void prtlin() {putstr(); newlin();} +void prtreg(aa,yy,xx) {putstr(" A,X,Y="); prbyte(aa); prtcma(yy); prtcma(xx); newlin();} +void prtsav() {putstr(" TEMP1,2="); prtcma(temp1); prtcma(temp2); newlin();} +void prtshl() {ll=srclo; hh=srchi; putstr(" SRCHI,LO="); prbyte(hh); prtcma(ll); newlin();} +void prtsrc() {prbyte(srchi);prbyte(srclo); newlin();} +void prttmp() {putstr(" TEMP0,1,2="); prbyte(temp0); prtcma(temp1); prtcma(temp2); newlin();} +void prtwrd(.,yy,xx) {prbyte(yy); prbyte(xx); newlin();} +void setreg(aa,yy,xx) {} + +main: + newlin(); + + putstr("#TRUE="); prbyte(#TRUE); + putstr(", #FALSE="); prbyte(#FALSE); newlin(); + newlin(); + + prtlin("SAVREG($A,$B,$C)"); clrtmp(); savreg($A,$B,$C); prttmp(); + prtlin("RESREG()"); clrreg(); prtreg(resreg()); + prtlin("SAVRXY($D,$E,$F)"); clrtmp(); savrxy($D,$E,$F); prttmp(); + prtlin("RESRXY()"); clrreg(); prtreg(resrxy()); + newlin(); + + prtlin("SAVRXY(&$1234)"); putstr(" ADDTXY(&$5678)=$"); + savrxy(&$1234); prtwrd(addtxy(&$5678)); + prtlin("SAVRXY(&$1234)"); putstr(" SUBTXY(&$68AC)=$"); + savrxy(&$1234); prtwrd(subtxy(&$68AC)); + newlin(); + + putstr("DECRXY(&$0000)=$"); prtwrd(decrxy(&$0000)); + putstr("INCRXY(&$FFFF)=$"); prtwrd(incrxy(&$FFFF)); + newlin(); + + prskey(); + + prtlin("SETSRC(&$1234)"); clrsrc(); setsrc(&$1234); savsrc(); + prtshl(); prtlin("SAVSRC()"); prtsav(); + prtlin("RESSRC()"); clrsrc(); ressrc(); srcadr=getsrc(); + prtshl(); putstr("GETSRC()="); prtwrd(srcadr); + prtlin("SETDSS()"); clrdst(); ressrc(); setdss(); prtdhl(); + newlin(); + + prtlin("SETDST(&$5678)"); clrdst(); setdst(&$5678);savdst(); + prtdhl(); prtlin("SAVDST()"); prtsav(); + prtlin("RESDST()"); clrdst(); resdst(); dstadr=getdst(); + prtdhl(); putstr("GETSRC()="); prtwrd(dstadr); + prtlin("SETSRD()"); clrsrc(); resdst(); setsrd(); prtshl(); + newlin(); + + prskey(); + + prtlin("SETSRC(&$0FFF)"); putstr(" ADDSRA($FF)=$"); + setsrc(&$0FFF); addsra($FF); prtsrc(); + prtlin("SETSRC(&$1234)"); putstr(" ADDSRC(&$CDEF)=$"); + setsrc(&$1234); addsrc(&$CDEF); prtsrc(); + prtlin("SETDST(&$0FFF)"); putstr(" ADDDSA($FF)=$"); + setdst(&$0FFF); adddsa($FF); prtdst(); + prtlin("SETDST(&$1234)"); putstr(" ADDDST(&$CDEF)=$"); + setdst(&$1234); adddst(&$CDEF); prtdst(); + newlin(); + + goto exit; diff --git a/test/testsd.c02 b/test/testsd.c02 deleted file mode 100644 index 42e4a69..0000000 --- a/test/testsd.c02 +++ /dev/null @@ -1,82 +0,0 @@ -/************************************************ - * TESTSD - Test Library stddef.h02 for py65mon * - ************************************************/ - - -//use -h option on command line -#include - -const char txtstr = { - "#TRUE=",", #FALSE=", - "SAVREG($A,$B,$C)", " TEMP0,1,2=", - "RESREG()", " A,X,Y=", - "SETSRC(&$1234)"," SRCLO,HI=", " GETSRC()=", - "SETDST(&$5678)"," DSTLO,HI=", " GETDST()=" - }; -char txtidx; - -char aa,xx,yy; - -main: - txtidx = 0; - newlin(); - - prttxt(); prbyte(#TRUE); - prttxt(); prbyte(#FALSE); - newlin(); newlin(); - - temp0=0; temp1=0; temp3 = 0; - prtlin(); savreg($A,$B,$C); - prttxt(); prbyte(temp0); - prtcma(); prbyte(temp1); - prtcma(); prbyte(temp2); - newlin(); - - setreg(0,0,0); - prtlin(); aa,yy,xx = resreg(); - prttxt(); prbyte(aa); - prtcma(); prbyte(yy); - prtcma(); prbyte(xx); - newlin(); newlin(); - - - srclo = 0; srchi = 0; - prtlin(); setsrc(&$1234); - prttxt(); prbyte(srclo); - prtcma(); prbyte(srchi); - newlin(); - prttxt(); setreg(0,0,0); - getsrc(); prtwrd(); - newlin(); newlin(); - - dstlo = 0; dsthi = 0; - prtlin(); setdst(&$5678); - prttxt(); prbyte(dstlo); - prtcma(); prbyte(dsthi); - newlin(); - prttxt(); setreg(0,0,0); - getdst(); prtwrd(); - newlin(); newlin(); - - -goto exit; - -void setreg(aa,yy,xx) {} - -void prtwrd(aa,yy,xx) { - prbyte(yy); - prbyte(xx); -} - -void prtcma() {prchr(',');} - -void prtlin() {prttxt(); newlin();} - -void prttxt() { - while (txtstr[txtidx]) { - //prbyte(txtidx);prchr(' '); - prchr(txtstr[txtidx]); - txtidx++; - } - txtidx++; -} From 902347db573ec9e1960f72303f9ecfc2464ea102 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Wed, 20 Nov 2019 00:47:02 -0500 Subject: [PATCH 32/42] Replaced testsl.c02, testslib.c02 with slibtest.c02 and debugged stdlib.a02 --- include/stdlib.a02 | 181 ++++++++++++++++++++++------------- test/slibtest.c02 | 231 +++++++++++++++++++++++++++++++++++++++++++++ test/testsl.c02 | 220 ------------------------------------------ test/testslib.c02 | 199 -------------------------------------- 4 files changed, 345 insertions(+), 486 deletions(-) create mode 100644 test/slibtest.c02 delete mode 100644 test/testsl.c02 delete mode 100644 test/testslib.c02 diff --git a/include/stdlib.a02 b/include/stdlib.a02 index 85f61f8..388ca1f 100644 --- a/include/stdlib.a02 +++ b/include/stdlib.a02 @@ -3,15 +3,17 @@ ; external zero page locations SRCLO and SRCHI ; and external locations RANDOM, RDSEED, TEMP0, TEMP1, and TEMP2. + SUBROUTINE STDLIB + ;abs(n) - Get ABSolute Value ;Args: A = Number to get Absolute Value Of ;Affects: C, N, Z ;Returns: A = Absolute Value of Argument ABS: CMP #$80 ;If Negative (High Bit Set) - BCC ABSX ; Carry will Already be Set + BCC .ABSX ; Carry will Already be Set EOR #$FF ; One's Complement ADC #$00 ; and Increment (Carry set by CMP) -ABSX: RTS +.ABSX RTS ;max(m,n) - Get MAXimum of Two Numbers ;Args: A,Y = Numbers to Compare @@ -20,9 +22,9 @@ ABSX: RTS ;Returns: A = Larger of the Two Arguments MAX: STY TEMP0 ;Save Second Parameter CMP TEMP0 ;If First Parameter - BCC MAXX ; Greater than Second Parameter + BCC .MAXX ; Greater than Second Parameter TYA ;Copy Second Parameter into Accumulator -MAXX: RTS +.MAXX RTS ;min(m,n) - Get MINimum Get MAXimum of Two Numbers ;Args: A,Y = Numbers to Compare @@ -31,9 +33,9 @@ MAXX: RTS ;Returns: A = Smaller of the Two Arguments MIN: STY TEMP0 ;Save Second Parameter CMP TEMP0 ;If First Parameter - BCS MINX ; Less than Second Parameter + BCS .MINX ; Less than Second Parameter TYA ;Copy Second Parameter into Accumulator -MINX: RTS +.MINX RTS ;mult(m,n) - MULTiply Two Numbers ;Args: A = Multiplicand @@ -48,13 +50,13 @@ MULT: STA TEMP0 ;Store Multiplicand STY TEMP1 ;Store Multiplier ;Multiply TEMP0 times TEMP1 MULTT: LDA #$00 ;Initialize Accumulator - BEQ MULTE ;Enter Loop -MULTA: CLC + BEQ .MULTE ;Enter Loop +.MULTA CLC ADC TEMP0 ;Add Multiplicand -MULTL: ASL TEMP0 ;Shift Multiplicand Left -MULTE: LSR TEMP1 ;Shift Multiplier Right - BCS MULTA ;If Bit Shifted Out, Add Multiplicand - BNE MULTL ;Loop if Any 1 Bits Left +.MULTL ASL TEMP0 ;Shift Multiplicand Left +.MULTE LSR TEMP1 ;Shift Multiplier Right + BCS .MULTA ;If Bit Shifted Out, Add Multiplicand + BNE .MULTL ;Loop if Any 1 Bits Left LDY TEMP2 ;Load Y with MSB TAX ;and Copy LSB to X RTS @@ -73,13 +75,13 @@ DIV: STA TEMP0 ;Store Dividend DIVT: LDA #$00 ;Clear Accumulator LDX #$07 ;Load Loop Counter CLC -DIVL: ROL TEMP0 ;Shift Bit Out of Dividend +.DIVL ROL TEMP0 ;Shift Bit Out of Dividend ROL ; into Accumulator CMP TEMP1 ;If Accumulator - BCC DIVS ; >= Divisor + BCC .DIVS ; >= Divisor SBC TEMP1 ;Subtract Divisor -DIVS: DEX ;Decrement Counter - BPL DIVL ; and Loop +.DIVS DEX ;Decrement Counter + BPL .DIVL ; and Loop ROL TEMP0 ;Shift Result into Dividend TAY ;Copy Remainder to Y Register LDA TEMP0 ;Load Result into Accumulator @@ -90,9 +92,9 @@ DIVS: DEX ;Decrement Counter ;Affects A,N,Z,C RAND: LDA RANDOM ;Load Last Result ASL ;Shift the Seed - BCC RANDX ;If a one was shifted out + BCC .RANDX ;If a one was shifted out EOR #$1D ; Twiddle the bite -RANDX: STA RANDOM ;Save the Seed +.RANDX STA RANDOM ;Save the Seed RTS ;Seed Pseudo-Random Number Generator @@ -100,25 +102,71 @@ RANDX: STA RANDOM ;Save the Seed ;Affects A,N,Z,C ;Sets RANDOM RANDS: ORA #$00 ;If Passed Value not 0 - BNE RANDX ; Store in Seed and Return + BNE .RANDX ; Store in Seed and Return LDA RDSEED ;Load System Generated Seed - BNE RANDX ;If Not 0, Store and Return + BNE .RANDX ;If Not 0, Store and Return ADC #$01 ;Else Add 1 or 2 - BNE RANDX ; then Store and Return + BNE .RANDX ; then Store and Return -;Return A Shifted Y Bytes to the Left -;Affects A,Y,N,Z,C -;Affects A,Y,N,Z,C -SHIFTL: ASL ;Shift Byte to Left - DEY ;Decrement Counter - BNE SHIFTL ; and Loop if Not 0 +;swap(byte) - Swap Low and High Nybbles in Byte +;Args: A = Byte to Swap +;Affects Y,N,Z,C +;Returns: A = Swapped Byte +SWAP: LDY #4 ;Set Count to 4 and Rotate Left + +;rotatl(byte,count) - Rotate byte by count Bits to the Left +;Args = Byte to Rotate +;Y = Number of Bits to Rotate +;Affects X,Y,N,Z,C +;Returns: A = Rotated Byte +ROTATL: INY ;Pre-Increment Counter +.ROTALL DEY ;Decrement Counter + BEQ .ROTATX ;If Not Zero + ASL ; Shift Left One Bit + ADC #0 ; Copy Carry into Bit 0 + BNE .ROTALL ; If Not Zero, Loop +.ROTATX RTS + +;rotatr(byte,count) - Shift byte by count Bits to the Right +;Args = Byte to Rotate +;Y = Number of Bits to Rotate +;Affects Y,N,Z,C +;Returns: A = Rotated Byte +ROTATR: INY ;Pre-Increment Counter +.ROTALR DEY ;Decrement Counter + BEQ .ROTATX ;If Not Zero + LSR ; Shift Right One Bit + BCC .ROTATS ; If Carry Set + ORA #$80 ; Copy Carry into Bit 7 +.ROTATS BNE .ROTALR ; If Not Zero, Loop RTS -;Return A Shifted Y Bytes to the Right -;Affects A,Y,N,Z,C -SHIFTR: LSR ;Shift Byte to Right - DEY ;Decrement Counter - BNE SHIFTR ; and Loop if Not 0 +SHFTL4: LDY #4; ;Set Count to 4 and Shift Left + +;shiftl(byte,count) - Shift byte by Count bits to the Left +;Args = Byte to Shift +;Y = Number of Bits to Rotate +;Affects Y,N,Z,C +;Returns: A = Shifted Byte +SHIFTL: INY ;Pre-Increment Counter +.SHIFLL DEY ;Decrement Counter + BEQ .SHIFTX ;If Not Zero + ASL ; Shift Byte to Left + BNE .SHIFLL ; and Loop if Not 0 +.SHIFTX RTS + +SHFTR4: LDY #4; ;Set Count to 4 and Shift Right + +;shiftr(byte,count) - Shift byte by Count bits to the Right +;Args = Byte to Shift +;Y = Number of Bits to Rotate +;Affects Y,N,Z,C +;Returns: A = Shifted Byte +SHIFTR: INY ;Pre-Increment Counter +.SHIFLR DEY ;Decrement Counter + BEQ .SHIFTX ;If Not Zero + LSR ; Shift Byte to Right + BNE .SHIFLR ; and Loop if Not 0 RTS ;atoc(&s) - ASCII string TO Character @@ -130,11 +178,11 @@ SHIFTR: LSR ;Shift Byte to Right ; Y = Number of Digits ATOC: JSR SETSRC ;Initialize Source String STY TEMP0 ;Initialize Result -ATOCL: LDA (SRCLO),Y ;Get Next Character +.ATOCL LDA (SRCLO),Y ;Get Next Character CMP #$30 ;If Less Than '0' - BCC ATOCX ; Exit + BCC .ATOCX ; Exit CMP #$3A ;If Greater Than '9' - BCS ATOCX ; Exit + BCS .ATOCX ; Exit AND #$0F ;Convert to Binary Nybble STA TEMP1 ; and Save It LDA TEMP0 ;Load Result @@ -145,8 +193,8 @@ ATOCL: LDA (SRCLO),Y ;Get Next Character ADC TEMP1 ;Add Saved Nybble STA TEMP0 ; and Store Result INY ;Increment Index - BPL ATOCL ; and Loop -ATOCX: LDA TEMP0 ;Load Result + BPL .ATOCL ; and Loop +.ATOCX LDA TEMP0 ;Load Result RTS ;And Return ;ctoa(n) - Character TO ASCII string @@ -161,19 +209,19 @@ CTOA: JSR SETDST ;Initialize Source String LDY #0 ;Initialize Index into String JSR CUBCD ;Convert Accumulator to Unpacked BCD LDA TEMP2 ;Get MSB - BEQ CTOA1 ;If Not Zero - JSR CTOAN ; Convert Low Nybble -CTOA1: LDA TEMP1 ;Get Low Byte - BNE CTOA2 ;If Not Zero + BEQ .CTOA1 ;If Not Zero + JSR .CTOAN ; Convert Low Nybble +.CTOA1 LDA TEMP1 ;Get Low Byte + BNE .CTOA2 ;If Not Zero CMP TEMP2 ; and Hundreds - BEQ CTOA3 ; not Zero -CTOA2: JSR CTOAN ; Convert It -CTOA3: LDA TEMP0 ;Get Low Byte - JSR CTOAN ;and Convert Low Nybble + BEQ .CTOA3 ; not Zero +.CTOA2 JSR .CTOAN ; Convert It +.CTOA3 LDA TEMP0 ;Get Low Byte + JSR .CTOAN ;and Convert Low Nybble LDA #$00 - BEQ CTOAX ;Terminate String -CTOAN: ORA #$30 ;Convert to ASCII digit -CTOAX: STA (DSTLO),Y ;Store in String + BEQ .CTOAX ;Terminate String +.CTOAN ORA #$30 ;Convert to ASCII digit +.CTOAX STA (DSTLO),Y ;Store in String INY ;and Increment Offset TYA ;Copy String Length to Accumulator RTS @@ -207,23 +255,22 @@ UPBCD: LDA TEMP1 ;Get Low Byte ; TEMP2 = Hundreds Digit ;Returns: A = Hundreds Digit ; X = 0 -CVBCD: STA TEMP0 ;Save Binary Value -CVBCDT: LDA #0 ;Clear BCD Bytes - STA TEMP1 - STA TEMP2 - LDX #8 ;Process 8 bits of Binary - PHP ;Save Status Register - SEI ;Disable Interupts - SED ;Set Decimal Mode -CVBCDL: ASL TEMP0 ;Shift High Bit into Carry - LDA TEMP1 ;Add BCD Low Byte to Itself - ADC TEMP1 ; Plus Bit Shifted out of Binary - STA TEMP1 ; Effectively Multiplying It by 2 - LDA TEMP2 ;Add BCD MSB to Itself - ADC TEMP2 ; Plus Bit Shifted out of Low Byte - STA TEMP2 ; Effectively Multiplying It by 2 - DEX ;Decrement Counter and - BNE CVBCDL ; Process Next Bit - PLP ;Restore Status Register +CVBCD: STA TEMP0 ;Save Binary Value +CVBCDT: LDA #0 ;Clear BCD Bytes + STA TEMP1 + STA TEMP2 + LDX #8 ;Process 8 bits of Binary + PHP ;Save Status Register + SEI ;Disable Interupts + SED ;Set Decimal Mode +.CVBCDL ASL TEMP0 ;Shift High Bit into Carry + LDA TEMP1 ;Add BCD Low Byte to Itself + ADC TEMP1 ; Plus Bit Shifted out of Binary + STA TEMP1 ; Effectively Multiplying It by 2 + LDA TEMP2 ;Add BCD MSB to Itself + ADC TEMP2 ; Plus Bit Shifted out of Low Byte + STA TEMP2 ; Effectively Multiplying It by 2 + DEX ;Decrement Counter and + BNE .CVBCDL ; Process Next Bit + PLP ;Restore Status Register RTS - diff --git a/test/slibtest.c02 b/test/slibtest.c02 new file mode 100644 index 0000000..e44d91d --- /dev/null +++ b/test/slibtest.c02 @@ -0,0 +1,231 @@ +/************************************************** + * TESTSLIB - Test Library stdlib.h02 for py65mon * + **************************************************/ + +//Specify System Header using -H option +#include +#include + +char aa, yy, xx; + +void prtcma(aa) {putchr(','); prbyte(aa);} +void prtlin() {putstr(); newlin();} +void prtok() {prtlin(" OK");} +void prtopr(aa,yy,xx) {prbyte(aa); putchr(yy); prbyte(xx); putchr("=");} + +main: + +tstabs: //Test abs() +char onum, anum, cnum; + + putstr("ABS()"); + onum = 0; + do { //test abs() positive numbers + anum = abs(onum); + if (onum <> anum) goto abserr; + onum++; + } while (onum < $80); + do { //test abs() negative numbers + anum = abs(onum); + cnum = -onum; + if (anum <> cnum) goto abserr; + onum++; + } while (onum); + prtok(); + +tstmnx: //Test min() and max() +char lnum, rnum, nnum, xnum; + + putstr("MAX(), MIN()"); + lnum = 0; do { + rnum = 0; do { + xnum = max(lnum,rnum); + nnum = min(lnum,rnum); + if (lnum > rnum) { + if (xnum <> lnum) maxerr(); + if (nnum <> rnum) minerr(); + } else { + if (xnum <> rnum) maxerr(); + if (nnum <> lnum) minerr(); + } + } while (rnum); + } while (lnum); + prtok(); + +tstmlt: //Test mult() +char mltplr, mltpnd, acmlsb, acmmsb, acmlst; +char prodct, ovrflw; + + putstr("MULT()"); + mltplr = 1; + do { + if (!mltplr & $F) putchr('.'); + mltpnd = 1; acmlst = 0; + acmlsb = 0; acmmsb = 0; + do { + acmlsb = acmlsb + mltplr; + if (acmlsb acmlsb) goto mlterr; + mltpnd++; + } while (mltpnd); + mltplr++; + } while (mltplr); + prtok(); + +tstdiv: //Test div() +char maxmpd, divdnd, divisr, quotnt; + +putstr("DIV()"); +mltplr = 255; +maxmpd = 1; +drloop: + mltpnd = 1; + acmlsb = 0; + ddloop: + acmlsb = acmlsb + mltplr; + prodct = mult(mltplr, mltpnd); + quotnt = div(prodct, mltpnd); + if (quotnt <> mltplr) goto derror; + mltpnd++; + if (mltpnd < maxmpd) goto ddloop; + mltplr>>; + maxmpd<<; + if (mltplr <> 0) goto drloop; + prtok(); + +tstrnd: //Test rand() and rands() +char countr, rndnum, rndtbl[255]; + + putstr("RAND()"); + rands(1); //Seed Random Number Generator; + + countr = 0; + + riloop: + rndtbl[countr] = 0; + countr++; + if (countr <> 0) goto riloop; + + rnloop: + rndnum = rand(); + if (rndtbl[rndnum] > 0) goto rnderr; + rndtbl[rndnum] = $FF; + countr++; + if (countr < 255) goto rnloop; + prtok(); + +tstros: //Test rotatl(), rotatr(), swap() +char lbyte, rbyte, obyte, sbyte, tbyte, scount; + + putstr("ROTATL(), SHIFTL()"); + obyte = 0; + do { + if (!obyte & $F) putchr('.'); + scount = 0; sbyte = obyte; tbyte = obyte; + do { + rbyte = rotatl(obyte, scount); if (rbyte <> tbyte) goto rtlerr; + lbyte = shiftl(obyte, scount); if (lbyte <> sbyte) goto shlerr; + sbyte<<; + temp0 = tbyte; tbyte<<; if (temp0:-) tbyte++; + scount++; if (scount == 8) scount = $F8; + } while (scount); + obyte ++; + } while (obyte); + prtok(); + + putstr("ROTATR(), SHIFTR()"); + obyte = 0; + do { + if (!obyte & $F) putchr('.'); + scount = 0; sbyte = obyte; tbyte = obyte; + do { + rbyte = rotatr(obyte, scount); if (rbyte <> tbyte) goto rtrerr; + lbyte = shiftr(obyte, scount); if (lbyte <> sbyte) goto shrerr; + sbyte>>; + temp0 = tbyte; tbyte>>; if (temp0 & 1) tbyte = tbyte | $80; + scount++; if (scount == 8) scount = $F8; + } while (scount); + obyte ++; + } while (obyte); + prtok(); + + putstr("SWAP()"); + lbyte=0; do { + rbyte = 0; do { + obyte = lbyte & $f0; obyte = rbyte & $0f + lbyte; + tbyte = lbyte & $0f; tbyte = rbyte & $f0 + lbyte; + sbyte = swap(obyte); + if (sbyte <> tbyte) goto swperr; + rbyte = rbyte + $11; + } while (rbyte & $0f); + } while (lbyte & $0f); + prtok(); + +tstc2a: //Test ctoa(); +char srcchr, dstchr, tststr[4]; + + putstr("ATOC(), CTOA()"); + srcchr = 0; do { + ctoa(srcchr, &tststr); + dstchr = atoc(&tststr); + if (srcchr <> dstchr) goto c2aerr; + srcchr++; + } while (srcchr); + prtok(); + +goto exit; + +abserr: + putstr("ABS("); prbyte(onum); putstr(")="); prbyte(anum); prtcma(cnum); newlin(); + goto exit; + +maxerr: + putstr("MAX("); prbyte(lnum); prtcma(rnum); putstr(")="); prbyte(xnum); newlin(); + goto exit; + +minerr: + putstr("MIN("); prbyte(lnum); prtcma(rnum); putstr(")="); prbyte(nnum); newlin(); + goto exit; + +mlterr: + newlin(); prtopr(mltplr,'*',mltpnd); prbyte(prodct); prtcma(acmlsb); newlin(); + goto exit; + +derror: + newlin(); prtopr(divdnd,'/',divisr); prbyte(quotnt); prtcma(mltplr); newlin(); + goto exit; + +rnderr: + newlin(); putstr("RAND()="); prbyte(rndnum); prtcma(countr); newlin(); + goto exit; + +rtlerr: + newlin(); putstr("ROTATL("); prbyte(obyte); prtcma(scount); putstr(")="); + prbyte(rbyte); prtcma(tbyte); newlin(); + goto exit; + +rtrerr: + newlin(); putstr("ROTATR("); prbyte(obyte); prtcma(scount); putstr(")="); + prbyte(rbyte); prtcma(tbyte); newlin(); + goto exit; + +shlerr: + newlin(); putstr("SHIFTL("); prbyte(obyte); prtcma(scount); putstr(")="); + prbyte(lbyte); prtcma(sbyte); newlin(); + goto exit; + +shrerr: + newlin(); putstr("SHIFTR("); prbyte(obyte); prtcma(scount); putstr(")="); + prbyte(lbyte); prtcma(sbyte); newlin(); + goto exit; + +swperr: + newlin(); putstr("SWAP("); prbyte(obyte); putstr(")="); + prbyte(sbyte); prtcma(tbyte); newlin(); + goto exit; + +c2aerr: + putstr("CTOA("); prbyte(srcchr); putstr(")="); prbyte(dstchr); newlin(); + goto exit; diff --git a/test/testsl.c02 b/test/testsl.c02 deleted file mode 100644 index 5a64c42..0000000 --- a/test/testsl.c02 +++ /dev/null @@ -1,220 +0,0 @@ -/************************************************ - * TESTSL - Test Library stdlib.h02 for py65mon * - ************************************************/ - -//Specify System Header using -H option -#include -#include - -main: - -tstabs: //Test abs() -char onum, anum, cnum; - -prchr('A'); -prchr('B'); -prchr('S'); -prchr(' '); - -//test abs() positive numbers -onum = 0; -aploop: - anum = abs(onum); - if (onum <> anum) goto abserr; - onum++; - if (onum < $80) goto aploop; - -//test abs() negative numbers -anloop: - anum = abs(onum); - cnum = -onum; - if (anum <> cnum) goto abserr; - onum++; - if (onum > $00) goto anloop; - prchr('O'); - prchr('K'); - newlin(); - -tstmlt: //Test mult() -char mltplr, mltpnd, acmlsb, acmmsb, acmlst; -char prodct, ovrflw; - -mltplr = 1; -mrloop: - prbyte(mltplr); - mltpnd = 1; acmlst = 0; - acmlsb = 0; acmmsb = 0; - mdloop: - acmlsb = acmlsb + mltplr; - if (acmlsb acmlsb) goto merror; - //if (ovrflw <> acmmsb) goto merror; - mltpnd++; - if (mltpnd > 0) goto mdloop; - mltplr++; - if (mltplr > 0) goto mrloop; - newlin(); - prchr('M'); - prchr('U'); - prchr('L'); - prchr('T'); - prchr(' '); - prchr('O'); - prchr('K'); - newlin(); - -tstdiv: //Test div() -char maxmpd, divdnd, divisr, quotnt; - -mltplr = 255; -maxmpd = 1; -drloop: - prbyte(mltplr); - mltpnd = 1; - acmlsb = 0; - ddloop: - prbyte(mltpnd); - acmlsb = acmlsb + mltplr; - prodct = mult(mltplr, mltpnd); - quotnt = div(prodct, mltpnd); - if (quotnt <> mltplr) goto derror; - mltpnd++; - if (mltpnd < maxmpd) goto ddloop; - newlin(); - mltplr>>; - maxmpd<<; - if (mltplr <> 0) goto drloop; - newlin(); - prchr('D'); - prchr('I'); - prchr('V'); - prchr(' '); - prchr('O'); - prchr('K'); - newlin(); - - -tstrnd: //Test rand() and rands() -char countr, rndnum, rndtbl[255]; - -rands(1); //Seed Random Number Generator; - -countr = 0; - -riloop: - rndtbl[countr] = 0; - countr++; - if (countr <> 0) goto riloop; - -rnloop: - rndnum = rand(); - if (rndtbl[rndnum] > 0) goto rnderr; - rndtbl[rndnum] = $FF; - prbyte(rndnum); - prchr(' '); - countr++; - if (countr < 255) goto rnloop; - newlin(); - prchr('R'); - prchr('A'); - prchr('N'); - prchr('D'); - prchr(' '); - prchr('O'); - prchr('K'); - newlin(); - -tstc2a: //Test ctoa(); -char srcchr, dstchr, tststr[4]; - -srcchr = 0; -caloop: - prbyte(srcchr); - prchr(' '); - ctoa(srcchr, &tststr); - dstchr = atoc(&tststr); - if (srcchr <> dstchr) goto c2aerr; - srcchr++; - if (srcchr <> 0) goto caloop; - newlin(); - prchr('C'); - prchr('T'); - prchr('O'); - prchr('A'); - prchr(' '); - prchr('O'); - prchr('K'); - newlin(); - - -goto exit; - -abserr: - prchr('A'); - prchr('B'); - prchr('S'); - prchr('('); - prbyte(onum); - prchr(')'); - prchr('='); - prbyte(anum); - prchr(','); - prbyte(cnum); - newlin(); - goto exit; - -merror: - newlin(); - prbyte(mltplr); - prchr('*'); - prbyte(mltpnd); - prchr('='); - //prbyte(ovrflw); - prbyte(prodct); - prchr(','); - //prbyte(acmmsb); - prbyte(acmlsb); - newlin(); -goto exit; - -derror: - newlin(); - prbyte(divdnd); - prchr('/'); - prbyte(divisr); - prchr('='); - prbyte(quotnt); - prchr(','); - prbyte(mltplr); - newlin(); -goto exit; - -rnderr: - prchr('R'); - prchr('A'); - prchr('N'); - prchr('D'); - prchr('('); - prchr(')'); - prchr('='); - prbyte(rndnum); - prchr(','); - prbyte(countr); - newlin(); - goto exit; - -c2aerr: - prchr('C'); - prchr('T'); - prchr('O'); - prchr('A'); - prchr('('); - prbyte(srcchr); - prchr(')'); - prchr('='); - prbyte(dstchr); - newlin(); - goto exit; - diff --git a/test/testslib.c02 b/test/testslib.c02 deleted file mode 100644 index 41a8573..0000000 --- a/test/testslib.c02 +++ /dev/null @@ -1,199 +0,0 @@ -/************************************************** - * TESTSLIB - Test Library stdlib.h02 for py65mon * - **************************************************/ - -//Specify System Header using -H option -#include -#include - -void prtcma() {putchr(',');} -void prtlin() {putstr(); newlin();} -void prtok() {prtlin(" OK");} - -main: - -//goto tstcvb; - -tstabs: //Test abs() -char onum, anum, cnum; -putstr("ABS()"); - -//test abs() positive numbers -onum = 0; -aploop: - anum = abs(onum); - if (onum <> anum) goto abserr; - onum++; - if (onum < $80) goto aploop; - -//test abs() negative numbers -anloop: - anum = abs(onum); - cnum = -onum; - if (anum <> cnum) goto abserr; - onum++; - if (onum > $00) goto anloop; - prtok(); - -tstmlt: //Test mult() -char mltplr, mltpnd, acmlsb, acmmsb, acmlst; -char prodct, ovrflw; - -putstr("MULT()"); -mltplr = 1; -mrloop: - mltpnd = 1; acmlst = 0; - acmlsb = 0; acmmsb = 0; - mdloop: - acmlsb = acmlsb + mltplr; - if (acmlsb acmlsb) goto merror; - mltpnd++; - if (mltpnd > 0) goto mdloop; - mltplr++; - if (mltplr > 0) goto mrloop; - prtok(); - -tstdiv: //Test div() -char maxmpd, divdnd, divisr, quotnt; - -putstr("DIV()"); -mltplr = 255; -maxmpd = 1; -drloop: - mltpnd = 1; - acmlsb = 0; - ddloop: - acmlsb = acmlsb + mltplr; - prodct = mult(mltplr, mltpnd); - quotnt = div(prodct, mltpnd); - if (quotnt <> mltplr) goto derror; - mltpnd++; - if (mltpnd < maxmpd) goto ddloop; - mltplr>>; - maxmpd<<; - if (mltplr <> 0) goto drloop; - prtok(); - -tstrnd: //Test rand() and rands() -char countr, rndnum, rndtbl[255]; - -putstr("RAND()"); -rands(1); //Seed Random Number Generator; - -countr = 0; - -riloop: - rndtbl[countr] = 0; - countr++; - if (countr <> 0) goto riloop; - -rnloop: - rndnum = rand(); - if (rndtbl[rndnum] > 0) goto rnderr; - rndtbl[rndnum] = $FF; - countr++; - if (countr < 255) goto rnloop; - prtok(); - -tstcvb: //Test cvbcd() -char cvbchr,cvblo,cvbhi; - -goto tstc2a; -putstr("CVBCD()"); -cvbchr = 0; cvblo = 0; cvbhi = 0; -cvloop: - cvbcd(cvbchr); - getchr(); - if (temp1 <> cvblo or temp2 <> cvbhi) goto cvberr; - cvblo++; - if (cvblo & $0f > 9) { - cvblo = cvblo & $f0 + $10; - if (cvblo >= $a0) { - cvblo = cvblo & $0f; - cvbhi++; - } - } - cvbchr++; - if (cvbchr) goto cvloop; - prtok(); - -tstc2a: //Test ctoa(); -char srcchr, dstchr, tststr[4]; - -putstr("CTOA()"); -srcchr = 0; -caloop: - ctoa(srcchr, &tststr); - dstchr = atoc(&tststr); - if (srcchr <> dstchr) goto c2aerr; - srcchr++; - if (srcchr <> 0) goto caloop; - prtok(); - -goto exit; - -abserr: - putstr("ABS("); - prbyte(onum); - putchr(')'); - putchr('='); - prbyte(anum); - putchr(','); - prbyte(cnum); - newlin(); - goto exit; - -merror: - newlin(); - prbyte(mltplr); - putchr('*'); - prbyte(mltpnd); - putchr('='); - //prbyte(ovrflw); - prbyte(prodct); - putchr(','); - //prbyte(acmmsb); - prbyte(acmlsb); - newlin(); -goto exit; - -derror: - newlin(); - prbyte(divdnd); - putchr('/'); - prbyte(divisr); - putchr('='); - prbyte(quotnt); - putchr(','); - prbyte(mltplr); - newlin(); -goto exit; - -rnderr: - putstr("RAND()="); - prbyte(rndnum); - putchr(','); - prbyte(countr); - newlin(); - goto exit; - -cvberr: - putstr(" !CVBCD("); - prbyte(cvbchr); - putstr(")=$"); - prbyte(TEMP2); - prbyte(TEMP1); - newlin(); - goto exit; - -c2aerr: - putstr(" !CTOA("); - prbyte(srcchr); - putstr(")="); - prbyte(dstchr); - newlin(); - goto exit; - From e09ebf96d619f8c660edb009d348deb4582168d5 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Wed, 20 Nov 2019 01:06:34 -0500 Subject: [PATCH 33/42] Updated scrntst.c02 and all screen.h02, screen.a02 --- include/apple1/screen.a02 | 18 ++++++++++++++++ include/apple1/screen.h02 | 14 ++++++++++++ include/apple2/screen.a02 | 15 +++++++++++++ include/apple2/screen.h02 | 20 ++++++++++++++--- include/c64/screen.a02 | 15 +++++++++++++ include/c64/screen.h02 | 14 ++++++++++++ include/orao/screen.a02 | 39 +++++++++++++++++++++++++++++++++ include/orao/screen.h02 | 38 +++++++++++++++++++++++++++++++++ include/oric/screen.a02 | 15 +++++++++++++ include/oric/screen.h02 | 14 ++++++++++++ include/screen.a02 | 14 ++++++++++++ include/screen.h02 | 27 +++++++++++++++++------ include/vic/screen.a02 | 15 +++++++++++++ include/vic/screen.h02 | 14 ++++++++++++ include/x16/screen.a02 | 45 +++++++++++++++++++++++++++++++++++++++ include/x16/screen.h02 | 38 +++++++++++++++++++++++++++++++++ test/scrntst.c02 | 1 - 17 files changed, 346 insertions(+), 10 deletions(-) create mode 100644 include/orao/screen.a02 create mode 100644 include/orao/screen.h02 create mode 100644 include/x16/screen.a02 create mode 100644 include/x16/screen.h02 diff --git a/include/apple1/screen.a02 b/include/apple1/screen.a02 index 16c57bf..18a139a 100644 --- a/include/apple1/screen.a02 +++ b/include/apple1/screen.a02 @@ -1,8 +1,26 @@ ;Screen Control Assembly Lanuage Routines for Apple 1 + SUBROUTINE _SCREEN + +SMTEXT EQU $00 ;Default Text Screen +SMWIDE EQU $FF ;Wide Text Screen (Undefined) + +;Set Screen Mode +SETSCR: CMP SMTEXT ;If Default Text Screen + BEQ GETSCR ;Return Return 0 + LDA #$FF ;Else Return ERROR + RTS + ;Else Return 0 +;Get Screen Mode +GETSCR: LDA #0 ;Return 0 (Default Text Mode) + RTS + ;Clear the Screen CLRSCR: RTS ;Do Nothing (Drop to RTS) +;Move Cursor Home +CRSRHM EQU CLRSCR ;No Action + ;Move Cursor to Specified Coordinates SETPOS EQU CLRSCR ;No Action diff --git a/include/apple1/screen.h02 b/include/apple1/screen.h02 index dbe2649..f1ece37 100644 --- a/include/apple1/screen.h02 +++ b/include/apple1/screen.h02 @@ -2,6 +2,10 @@ * screen - Screen Control Routines for C02 * ********************************************/ +/* Screen Modes for getscr() and setscr() */ +#define SMTEXT $00 //System Default Text Mode +#define SMWIDE $FF //Wide Screen Text Mode (Unsupported) + /* Clear the Screen */ void clrscn(); @@ -13,6 +17,10 @@ void crsrhm(); * cursor row */ char getpos(); +/* Get Screen Mode * + * Returns: char mode - Current Screen Mode */ +char getscr(); + /* Get Screen Size * * Returns: width in columns * * height in rows */ @@ -22,3 +30,9 @@ char getsiz(); * Args: column - screen column (0 = left) * * row - screen line (0 = top) */ void setpos(); + +/* Set Screen Mode * + * Args: char mode - screen mode * + * 0 = default text mode * + * Returns: $FF if Mode Invalid */ +char setscr(); diff --git a/include/apple2/screen.a02 b/include/apple2/screen.a02 index 3ff8bd4..98b4020 100644 --- a/include/apple2/screen.a02 +++ b/include/apple2/screen.a02 @@ -1,5 +1,20 @@ ;Screen Control Assembly Lanuage Routines for Apple II + SUBROUTINE _SCREEN + +SMTEXT EQU $00 ;Default Text Screen +SMWIDE EQU $FF ;Wide Text Screen (Undefined) + +;Set Screen Mode +SETSCR: CMP SMTEXT ;If Default Text Screen + BEQ GETSCR ;Return Return 0 + LDA #$FF ;Else Return ERROR + RTS + ;Else Return 0 +;Get Screen Mode +GETSCR: LDA #0 ;Return 0 (Default Text Mode) + RTS + ;Clear the Screen CLRSCR: EQU $FC58 ;Applesoft Routine HOME diff --git a/include/apple2/screen.h02 b/include/apple2/screen.h02 index dbe2649..fe1d2c5 100644 --- a/include/apple2/screen.h02 +++ b/include/apple2/screen.h02 @@ -1,6 +1,10 @@ -/******************************************** - * screen - Screen Control Routines for C02 * - ********************************************/ +/***************************************** + * Screen Control Functions for Apple II * + ****************************************/ + +/* Screen Modes for getscr() and setscr() */ +#define SMTEXT $00 //System Default Text Mode +#define SMWIDE $FF //Wide Screen Text Mode (Unsupported) /* Clear the Screen */ void clrscn(); @@ -18,7 +22,17 @@ char getpos(); * height in rows */ char getsiz(); +/* Get Screen Mode * + * Returns: char mode - Current Screen Mode */ +char getscr(); + /* Move Cursor to Specified Position * * Args: column - screen column (0 = left) * * row - screen line (0 = top) */ void setpos(); + +/* Set Screen Mode * + * Args: char mode - screen mode * + * 0 = default text mode * + * Returns: $FF if Mode Invalid */ +char setscr(); diff --git a/include/c64/screen.a02 b/include/c64/screen.a02 index 0bfe9e9..ce03dd3 100644 --- a/include/c64/screen.a02 +++ b/include/c64/screen.a02 @@ -1,5 +1,20 @@ ;Screen Control Assembly Lanuage Routines for VIC-20 + SUBROUTINE _SCREEN + +SMTEXT EQU $00 ;Default Text Screen +SMWIDE EQU $FF ;Wide Text Screen (Undefined) + +;Set Screen Mode +SETSCR: CMP SMTEXT ;If Default Text Screen + BEQ GETSCR ;Return Return 0 + LDA #$FF ;Else Return ERROR + RTS + ;Else Return 0 +;Get Screen Mode +GETSCR: LDA #0 ;Return 0 (Default Text Mode) + RTS + ;Clear the Screen CLRSCR EQU $E544 ;Aliased to CLSR Routine diff --git a/include/c64/screen.h02 b/include/c64/screen.h02 index 6ae0141..1592d68 100644 --- a/include/c64/screen.h02 +++ b/include/c64/screen.h02 @@ -2,6 +2,10 @@ * Screen Control Functions and Constants for VIC-20 * *****************************************************/ +/* Screen Modes for getscr() and setscr() */ +#define SMTEXT $00 //System Default Text Mode +#define SMWIDE $FF //Wide Screen Text Mode (Unsupported) + /* Clear the Screen */ void clrscn(); @@ -18,7 +22,17 @@ char getpos(); * height in rows */ char getsiz(); +/* Get Screen Mode * + * Returns: char mode - Current Screen Mode */ +char getscr(); + /* Move Cursor to Specified Position * * Args: column - screen column (0 = left) * * row - screen line (0 = top) */ void setpos(); + +/* Set Screen Mode * + * Args: char mode - screen mode * + * 0 = default text mode * + * Returns: $FF if Mode Invalid */ +char setscr(); diff --git a/include/orao/screen.a02 b/include/orao/screen.a02 new file mode 100644 index 0000000..b0ac3d5 --- /dev/null +++ b/include/orao/screen.a02 @@ -0,0 +1,39 @@ +;Screen Control Assembly Lanuage Routines for C02 +;Skeleton Code for Systems with no Screen Control + + SUBROUTINE _SCREEN + +SMTEXT EQU $00 ;Default Text Screen +SMWIDE EQU $FF ;Wide Text Screen (Undefined) + +;Set Screen Mode +SETSCR: CMP SMTEXT ;If Default Text Screen + BEQ GETSCR ;Return Return 0 + LDA #$FF ;Else Return ERROR + RTS + ;Else Return 0 +;Get Screen Mode +GETSCR: LDA #0 ;Return 0 (Default Text Mode) + RTS + +;Clear the Screen +CLRSCR: LDA #$0C ;Print Form Feed + JMP PUTCHR ;and Return + +;Move Cursor Home +CRSRHM EQU $E395 ;Aliad to HOME Routine + +;Move Cursor to Specified Coordinates +SETPOS: STA $E9 ;Set CURCOL + STY $E8 ;Set CURROW + JMP $E39D ;Set Pointers and Return + +;Get Cursor Position +GETPOS: LDA $E9 ;Load Column Position + LDY $E8 ;Load Row Position + RTS ;Return Cursor Column in A, Row in Y + +;Get Screen Size +GETSIZ: LDA #32 ;Return 32 Columns + TAY ;and 32 Rows + RTS diff --git a/include/orao/screen.h02 b/include/orao/screen.h02 new file mode 100644 index 0000000..df50301 --- /dev/null +++ b/include/orao/screen.h02 @@ -0,0 +1,38 @@ +/********************************************* + * Screen Control Routines for Orao Computer * + *********************************************/ + +/* Screen Modes for getscr() and setscr() */ +#define SMTEXT $00 //System Default Text Mode +#define SMWIDE $FF //Wide Screen Text Mode (Unsupported) + +/* Clear the Screen */ +void clrscn(); + +/* Move Cursor to Top Left of Screen */ +void crsrhm(); + +/* Get Current Cursor Position * + * Returns: cursor column * + * cursor row */ +char getpos(); + +/* Get Screen Mode * + * Returns: char mode - Current Screen Mode */ +char getscr(); + +/* Get Screen Size * + * Returns: width in columns * + * height in rows */ +char getsiz(); + +/* Move Cursor to Specified Position * + * Args: column - screen column (0 = left) * + * row - screen line (0 = top) */ +void setpos(); + +/* Set Screen Mode * + * Args: char mode - screen mode * + * 0 = default text mode * + * Returns: $FF if Mode Invalid */ +char setscr(); diff --git a/include/oric/screen.a02 b/include/oric/screen.a02 index 4f2272c..5a0e71e 100644 --- a/include/oric/screen.a02 +++ b/include/oric/screen.a02 @@ -1,5 +1,20 @@ ;Screen Control Assembly Lanuage Routines for Oric-1 + SUBROUTINE _SCREEN + +SMTEXT EQU $00 ;Default Text Screen +SMWIDE EQU $FF ;Wide Text Screen (Undefined) + +;Set Screen Mode +SETSCR: CMP SMTEXT ;If Default Text Screen + BEQ GETSCR ;Return Return 0 + LDA #$FF ;Else Return ERROR + RTS + ;Else Return 0 +;Get Screen Mode +GETSCR: LDA #0 ;Return 0 (Default Text Mode) + RTS + ;Clear the Screen CLRSCR EQU $CC0A ;Basic CLS Routine (Atmos = $CCCE) diff --git a/include/oric/screen.h02 b/include/oric/screen.h02 index 3b8b6b0..a4b81e6 100644 --- a/include/oric/screen.h02 +++ b/include/oric/screen.h02 @@ -2,6 +2,10 @@ * Screen Control Functions for Oric-1 * ***************************************/ +/* Screen Modes for getscr() and setscr() */ +#define SMTEXT $00 //System Default Text Mode +#define SMWIDE $FF //Wide Screen Text Mode (Unsupported) + /* Clear the Screen */ void clrscn(); @@ -13,6 +17,10 @@ void crsrhm(); ( cursor row */ char getpos(); +/* Get Screen Mode * + * Returns: char mode - Current Screen Mode */ +char getscr(); + /* Get Screen Size * * Returns: width in columns * * height in rows */ @@ -22,3 +30,9 @@ char getsiz(); * Args: column - screen column (0 = left) * * row - screen line (0 = top) */ void setpos(); + +/* Set Screen Mode * + * Args: char mode - screen mode * + * 0 = default text mode * + * Returns: $FF if Mode Invalid */ +char setscr(); diff --git a/include/screen.a02 b/include/screen.a02 index 47d791f..f025045 100644 --- a/include/screen.a02 +++ b/include/screen.a02 @@ -1,6 +1,19 @@ ;Screen Control Assembly Lanuage Routines for C02 ;Skeleton Code for Systems with no Screen Control + SUBROUTINE _SCREEN + +SMTEXT EQU $00 ;Default Text Screen +SMWIDE EQU $FF ;Wide Text Screen (Undefined) + +;Set Screen Mode +SETSCR: CMP SMTEXT ;If Not Default Text + BEQ GETPOS ;Return Error + ;Else Return 0 +;Get Screen Mode +GETSCR: LDA #0 ;Return 0 (Default Text Mode) + RTS + ;Clear the Screen CLRSCR: RTS ;No Action @@ -17,3 +30,4 @@ GETPOS: LDA #$FF ;Return Error ;Get Screen Size GETSIZ EQU GETPOS ;Return Error + diff --git a/include/screen.h02 b/include/screen.h02 index dbe2649..265f78d 100644 --- a/include/screen.h02 +++ b/include/screen.h02 @@ -1,6 +1,11 @@ -/******************************************** - * screen - Screen Control Routines for C02 * - ********************************************/ +/*********************************** + * Screen Control Routines for C02 * + ***********************************/ + +/* Screen Modes for getscr() and setscr() * + * Invalid Modes have value $FF */ +#define SMTEXT $00 //System Default Text Mode +#define SMWIDE $FF //Wide Screen Text Mode (Usuallu 80 Columns) /* Clear the Screen */ void clrscn(); @@ -18,7 +23,17 @@ char getpos(); * height in rows */ char getsiz(); -/* Move Cursor to Specified Position * - * Args: column - screen column (0 = left) * - * row - screen line (0 = top) */ +/* Get Screen Mode * + * Returns: char mode - Current Screen Mode */ +char getscr(); + +/* Move Cursor to Specified Position * + * Args: char col - screen column (0 = left) * + * char row - screen line (0 = top) */ void setpos(); + +/* Set Screen Mode * + * Args: char mode - screen mode * + * 0 = default text mode * + * Returns: $FF if Mode Invalid */ +char setscr(); diff --git a/include/vic/screen.a02 b/include/vic/screen.a02 index 7e16bde..f262a18 100644 --- a/include/vic/screen.a02 +++ b/include/vic/screen.a02 @@ -1,5 +1,20 @@ ;Screen Control Assembly Lanuage Routines for VIC-20 + SUBROUTINE _SCREEN + +SMTEXT EQU $00 ;Default Text Screen +SMWIDE EQU $FF ;Wide Text Screen (Undefined) + +;Set Screen Mode +SETSCR: CMP SMTEXT ;If Default Text Screen + BEQ GETSCR ;Return Return 0 + LDA #$FF ;Else Return ERROR + RTS + ;Else Return 0 +;Get Screen Mode +GETSCR: LDA #0 ;Return 0 (Default Text Mode) + RTS + ;Clear the Screen CLRSCR EQU $E55F ;Aliased to CLSR Routine diff --git a/include/vic/screen.h02 b/include/vic/screen.h02 index 595c261..f45edd6 100644 --- a/include/vic/screen.h02 +++ b/include/vic/screen.h02 @@ -2,6 +2,10 @@ * Screen Control Functions for VIC-20 * ***************************************/ +/* Screen Modes for getscr() and setscr() */ +#define SMTEXT $00 //System Default Text Mode +#define SMWIDE $FF //Wide Screen Text Mode (Unsupported) + /* Clear the Screen */ void clrscn(); @@ -13,6 +17,10 @@ void crsrhm(); ( cursor row */ char getpos(); +/* Get Screen Mode * + * Returns: char mode - Current Screen Mode */ +char getscr(); + /* Get Screen Size * * Returns: width in columns * * height in rows */ @@ -22,3 +30,9 @@ char getsiz(); * Args: column - screen column (0 = left) * * row - screen line (0 = top) */ void setpos(); + +/* Set Screen Mode * + * Args: char mode - screen mode * + * 0 = default text mode * + * Returns: $FF if Mode Invalid */ +char setscr(); diff --git a/include/x16/screen.a02 b/include/x16/screen.a02 new file mode 100644 index 0000000..43ff8ca --- /dev/null +++ b/include/x16/screen.a02 @@ -0,0 +1,45 @@ +;Screen Control Assembly Lanuage Routines for VIC-20 + + ;SUBROUTINE + +SMTEXT EQU $00 ;Default Text Screen +SMWIDE EQU $02 ;Wide Text Screen (Undefined) + +;Set Screen Mode +SETSCR: SEC ;Set Carry + JSR $FF5F ;Call SCRMOD + LDA #0 ;Set Return Value to Zero + BCC .RETURN ;If Carry Set + DEC ; Return 255 (Error) +.RETURN RTS + +;Get Screen Mode +GETSCR: CLC ;Clear Carry + JMP $FF5F ;Execute SCRMOD + RTS + +;Clear the Screen +CLRSCR LDA #$93 ;Load CLR/HOME Character + JMP PUTCHR ;and Print to Screen + +;Move Cursor To Home Position +CRSRHM LDA #$13 ;Load HOME Character + JMP PUTCHR ;and Print to Screen + +;Move Cursor to Specified Coordinates +SETPOS: .DC $5A ;PHY Copy Row + .DC $FA ;PLX to X Register, + TAY ;Column to Y Register + CLC ;Set Carry + JMP $FFF0 ;and Execute Plot + +;Get Cursor Position +GETPOS: LDY $D6 ;Load Cursor Row + LDA $D3 ;Load Cursor Column + RTS + +;Get Screen Size +GETSIZ: JSR $FFED ;Call SCREEN Kernal Routine + TXA ;Transfer Width to Accumulator + RTS + diff --git a/include/x16/screen.h02 b/include/x16/screen.h02 new file mode 100644 index 0000000..052b196 --- /dev/null +++ b/include/x16/screen.h02 @@ -0,0 +1,38 @@ +/***************************************************** + * Screen Control Functions and Constants for VIC-20 * + *****************************************************/ + +/* Screen Modes for getscr() and setscr() */ +#define SMTEXT $00 //Default Text Mode (40x30) +#define SMWIDE $02 //Wide Screen Text Mode (80x60) + +/* Clear the Screen */ +void clrscn(); + +/* Move Cursor to Top Left of Screen */ +void crsrhm(); + +/* Get Current Cursor Position * + * Returns: cursor column * + ( cursor row */ +char getpos(); + +/* Get Screen Size * + * Returns: width in columns * + * height in rows */ +char getsiz(); + +/* Get Screen Mode * + * Returns: char mode - Current Screen Mode */ +char getscr(); + +/* Move Cursor to Specified Position * + * Args: column - screen column (0 = left) * + * row - screen line (0 = top) */ +void setpos(); + +/* Set Screen Mode * + * Args: char mode - screen mode * + * 0 = default text mode * + * Returns: $FF if Mode Invalid */ +char setscr(); diff --git a/test/scrntst.c02 b/test/scrntst.c02 index 9a5a8c0..5b3887f 100644 --- a/test/scrntst.c02 +++ b/test/scrntst.c02 @@ -25,7 +25,6 @@ main: for (modex=0; modex<@modes; modex++) { mode = modes[modex]; - putstr("MODE $"); prbyte(mode); newlin(); if (mode == $FF) continue; //Unsupported Mode if (setscr(mode)=$FF) putlin("ERROR IN SETSCR()"); From 1057ec28b78d8c25128faa620295d1f017321d7a Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Wed, 20 Nov 2019 01:08:09 -0500 Subject: [PATCH 34/42] Updated test programs conds, echo, echohex, hello, loops --- test/conds.c02 | 104 +++++++++++------------- test/echo.c02 | 2 + test/echohex.c02 | 4 + test/hello.c02 | 11 +-- test/loops.c02 | 205 +++++++++++++++++++++++------------------------ 5 files changed, 156 insertions(+), 170 deletions(-) diff --git a/test/conds.c02 b/test/conds.c02 index 1515457..6652aec 100644 --- a/test/conds.c02 +++ b/test/conds.c02 @@ -3,65 +3,57 @@ ****************************************/ //Specify System Header using -H option -#include -#include -#include char allok; +void passed() {putstr(" PASS");} +void passln() {passed(); newlin();} +void failed() {putstr(" FAIL"); allok = $00;} +void failln() {failed(); newlin();} + main: -allok = #TRUE; + allok = $FF; //TRUE + + putstr("TEST CONDITIONALS"); newlin(); + + putstr(" 1<>1"); if (1<>1) failed(); else passed(); + putstr(" 1<>2"); if (1<>2) passln(); else failln(); + putstr(" 1==1"); if (1==1) passed(); else failed(); + putstr(" 1==2"); if (1==2) failln(); else passln(); + putstr("1+1=2"); if (1+1 == 2) passed(); else failed(); + putstr(" 2<1"); if (2<1) failln(); else passln(); + putstr(" 1<1"); if (1<1) failed(); else passed(); + putstr(" 1<2"); if (1<2) passln(); else failln(); + + putstr(" 1<=1"); if (1<=1) passed(); else failed(); + putstr(" 1<=2"); if (1<=2) passln(); else failln(); + putstr(" 2<=1"); if (2<=1) failed(); else passed(); + putstr(" 2>1"); if (2>1) passln(); else failln(); + putstr(" 1>1"); if (1>1) failed(); else passed(); + putstr(" 1>2"); if (1>2) failln(); else passln(); + putstr(" 1>=1"); if (1>=1) passed(); else failed(); + putstr(" 1>=2"); if (1>=2) failln(); else passln(); + putstr(" 2>=1"); if (2>=1) passed(); else failed(); + putstr(" !0:+"); if (!0:+) failln(); else passln(); + + putstr("$FF:+"); if ($FF:+) failed(); else passed(); + putstr(" $FF"); if ($FF) passln(); else failln(); + putstr("$FF:-"); if ($FF:-) passed(); else failed(); + putstr(" !$FF"); if (!$FF) failln(); else passln(); + putstr("$00:+"); if ($00:+) passed(); else failed(); + putstr(" $00"); if ($00) failln(); else passln(); + putstr("$00:-"); if ($00:-) failed(); else passed(); + putstr(" !$00"); if (!$00) passln(); else failln(); + + putstr(" 1!0"); if (1|0) passed(); else failed(); + putstr(" !1!0"); if (!1|0) failln(); else passln(); + putstr(" 1&0"); if (1&0) failed(); else passed(); + putstr(" !1&0"); if (!1&0) passln(); else failln(); + putstr(" 1^1"); if (1^1) failed(); else passed(); + putstr(" !1^1"); if (!1^1) passln(); else failln(); + + if (allok) putstr("ALL TESTS PASSED"); newlin(); + getchr(); + goto exit; -putln("Test Conditionals"); - -puts(" 1<>1"); if (1<>1) failed(); else passed(); -puts(" 1<>2"); if (1<>2) passln(); else failln(); -puts(" 1==1"); if (1==1) passed(); else failed(); -puts(" 1==2"); if (1==2) failln(); else passln(); -puts("1+1=2"); if (1+1 == 2) passed(); else failed(); -puts(" 2<1"); if (2<1) failln(); else passln(); -puts(" 1<1"); if (1<1) failed(); else passed(); -puts(" 1<2"); if (1<2) passln(); else failln(); - -puts(" 1<=1"); if (1<=1) passed(); else failed(); -puts(" 1<=2"); if (1<=2) passln(); else failln(); -puts(" 2<=1"); if (2<=1) failed(); else passed(); -puts(" 2>1"); if (2>1) passln(); else failln(); -puts(" 1>1"); if (1>1) failed(); else passed(); -puts(" 1>2"); if (1>2) failln(); else passln(); -puts(" 1>=1"); if (1>=1) passed(); else failed(); -puts(" 1>=2"); if (1>=2) failln(); else passln(); -puts(" 2>=1"); if (2>=1) passed(); else failed(); -puts(" !0:+"); if (!0:+) failln(); else passln(); - -puts("$FF:+"); if ($FF:+) failed(); else passed(); -puts(" $FF"); if ($FF) passln(); else failln(); -puts("$FF:-"); if ($FF:-) passed(); else failed(); -puts(" !$FF"); if (!$FF) failln(); else passln(); -puts("$00:+"); if ($00:+) passed(); else failed(); -puts(" $00"); if ($00) failln(); else passln(); -puts("$00:-"); if ($00:-) failed(); else passed(); -puts(" !$00"); if (!$00) passln(); else failln(); - -puts(" 1!0"); if (1|0) passed(); else failed(); -puts(" !1!0"); if (!1|0) failln(); else passln(); -puts(" 1&0"); if (1&0) failed(); else passed(); -puts(" !1&0"); if (!1&0) passln(); else failln(); -puts(" 1^1"); if (1^1) failed(); else passed(); -puts(" !1^1"); if (!1^1) passln(); else failln(); - -puts(" atoc(\"0\")"); if (atoc("0")) failln(); else passln(); -puts(" atoc(\"1\")"); if (atoc("1")) passln(); else failln(); -puts(" atoc(\"127\"):+"); if (atoc("127"):+) passln(); else failln(); -puts(" atoc(\"128\"):-"); if (atoc("128"):-) passln(); else failln(); - -if (allok) putln("All Tests Passed"); -getc(); - -goto exit; - -void passed() {puts(" Pass");} -void passln() {passed(); newlin();} -void failed() {puts(" Fail"); allok = #FALSE;} -void failln() {failed(); newlin();} diff --git a/test/echo.c02 b/test/echo.c02 index f38e4c9..19b33d0 100644 --- a/test/echo.c02 +++ b/test/echo.c02 @@ -11,6 +11,8 @@ char key; //Key value main: + putstr("TYPE KEYS TO ECHO"); newlin(); + putstr("ESCAPE/STOP TO END"); newlin(); while() { key = getchr(); select (key) { diff --git a/test/echohex.c02 b/test/echohex.c02 index 8a7b8f5..cce90b7 100644 --- a/test/echohex.c02 +++ b/test/echohex.c02 @@ -1,6 +1,7 @@ /******************************************************* * ECHOHEX - Test/Demo program for C02 Standard Header * * Displays ASCII Code of Typed Keys to Screen * + * RETURN/ENTER moves to new line * * ESCAPE/STOP key Ends Program * *******************************************************/ @@ -9,9 +10,12 @@ char key; //Key value main: + putstr("PRESS KEYS TO DISPLAY"); newlin(); + putstr("ESCAPE/STOP TO END"); newlin(); while() { key = getchr(); prbyte(key); putchr(' '); + if (key==#RTNKEY) newlin(); if (key==#ESCKEY) goto exit; } diff --git a/test/hello.c02 b/test/hello.c02 index f232218..39f192f 100644 --- a/test/hello.c02 +++ b/test/hello.c02 @@ -5,17 +5,8 @@ //Specify System Header using -H option -char key; //Key value - -const char hello = "HELLO WORLD"; -char i; - main: - i = 0; - while (hello[i]) { - putchr(hello[i]); - i++; - } + putstr("HELLO WORLD"); newlin(); goto exit; diff --git a/test/loops.c02 b/test/loops.c02 index 69350dc..222801f 100644 --- a/test/loops.c02 +++ b/test/loops.c02 @@ -6,118 +6,115 @@ #include #include -char i, b; -const char failed = " Test Failed!"; +char aa,ii; //Function Variables +char b; //Comparison Variable +char i; //Loop Counter + +void putlin() {putstr(); newlin();} +void failed() {putlin(" FAILED");} +void passed() {putlin(" PASSED");} main: + putlin("TESTING LOOPS"); -/* Test If/Goto Loop */ -puts("IF "); -i = 0; -ifloop: - prbyte(i); - putc(' '); - i++; - if (i < 10) goto ifloop; -newlin(); + /* Test If/Goto Loop */ + putstr("IF "); + i = 0; + ifloop: + putchr('0'+i); + i++; + if (i < 8) goto ifloop; + if (i=8) passed(); else failed(); -/* Test While Loop */ -puts("WHILE "); -i = 0; -while (i < 10) { - prbyte(i); - putc(' '); - i++; -} -newlin(); + /* Test Block If */ + putstr("BLOCK "); + b = 1; + if (b>0) { + prhex(b); + putstr(" > "); + prhex(0); + passed(); + } + else failed(); -/* Test Do Loop */ -puts("DO "); -i = 0; -do { - prbyte(i); - putc(' '); - i++; -} while (i<10); -newlin(); + putstr(" IF "); + b = 0; + if (b>0) failed(); + else { + putchr('0'+i); + putstr(" = "); + prhex(0); + passed(); + } -/* Test For Loop */ -puts("FOR "); -i = 0; -for (i=0;i<10;i++) { - prbyte(i); - putc(' '); -} -newlin(); + /* Test While Loop */ + putstr("WHILE "); + i = 0; + while (i < 8) { + putchr('0'+i); + i++; + } + if (i=8) passed(); else failed(); -/* While with Break */ -puts("BREAK "); -i = 0; -while ($FF) { - if (i = 10) break; - prbyte(i); - putc(' '); - i++; -} -newlin(); + /* Test Do Loop */ + putstr("DO "); + i = 0; + do { + putchr('0'+i); + i++; + } while (i<8); + if (i=8) passed(); else failed(); -/* For with Continue */ -puts("CONT "); -for (i=0;i<10;i++) { - if (i & 1) continue; - prbyte(i); - putc(' '); -} -newlin(); + /* Test For Loop */ + putstr("FOR "); + i = 0; + for (i=0;i<8;i++) { + putchr('0'+i); + } + if (i=8) passed(); else failed(); + + /* While with Break */ + putstr("BREAK "); + i = 0; + while ($FF) { + if (i = 8) break; + putchr('0'+i); + i++; + } + if (i=8) passed(); else failed(); + + /* For with Continue */ + putstr("CONT "); + for (i=0;i<16;i++) { + if (i & 1) { continue; i=$FF;} + putchr('A'+i); + } + if (i=16) passed(); else failed(); /* Test Do with Break and Continue*/ -i = 0; -puts("DO BC "); -do { - i++; - if (!i&1) continue; - if (i>15) break; - prbyte(i); - putc(' '); -} while ($FF); -newlin(); + i = 0; + putstr("DO BC "); + do { + i++; + if (!i&1) {continue; i=$FF;} + if (i>16) break; + putchr('A'+i); + } while ($FF); + if (i=17) passed(); else failed(); - -newlin(); - -/* Test Block If */ -putln("BLOCK IF"); -b = 1; -if (b>0) { - prbyte(b); - puts(" is greater than "); - prbyte(0); - newlin(); -} -else - putln(&failed); -b = 0; -if (b>0) { - putln(&failed); -} -else { - prbyte(b); - puts(" is equal to "); - prbyte(0); - newlin(); -} -newlin(); - -/* Test If/Else in For Loop */ -putln("FOR/IF/ELSE"); -for(i = 0;i<4;i++) { - prbyte(i); - if (i & 1) - putln(" is odd"); - else - putln(" is even"); -} -newlin(); - - -goto exit; + /* Test If/Else, Select in For Loop */ + for(i = 0;i<4;i++) { + select (i) { + case 0: putstr("FOR "); b=0; + case 1: putstr(" IF "); b=1; + case 2: putstr(" ELSE "); b=2; + case 3: putstr(" SELECT "); b=3; + default: putstr(" ERROR! "); b=$FF; + } + putchr('0'+i); + if (i & 1) putstr("-ODD "); else putstr("-EVEN"); + if (i=b) passed(); else failed(); + } + + putlin("ALL TESTS COMPLETE"); + goto exit; From b936b76bd6ba18cc4cef690d48cc4854eb264e24 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Wed, 20 Nov 2019 01:09:22 -0500 Subject: [PATCH 35/42] Modified test/a1.bat, test/a2.bat to use a02.exe --- test/a1.bat | 2 +- test/a2.bat | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/a1.bat b/test/a1.bat index aff950d..a3e4d36 100644 --- a/test/a1.bat +++ b/test/a1.bat @@ -10,7 +10,7 @@ ECHO Compiling File %1.c02 IF ERRORLEVEL 1 EXIT /B ECHO Assembling File %1.asm -dasm %1.asm -f1 -o%1.obj -l%1.lst -s%1.sym +..\a02 -p %1.asm %1.obj %1.lst IF ERRORLEVEL 1 EXIT /B ECHO Converting Object File diff --git a/test/a2.bat b/test/a2.bat index 401bf18..8d57bfb 100644 --- a/test/a2.bat +++ b/test/a2.bat @@ -9,7 +9,7 @@ ECHO Compiling File %1.c02 IF ERRORLEVEL 1 EXIT /B ECHO Assembling File %1.asm -dasm %1.asm -f3 -o%1.obj -l%1.lst -s%1.sym +..\a02 %1.asm %1.obj %1.lst IF ERRORLEVEL 1 EXIT /B ECHO Building Disk Image From f348da21a26a91f02140e07e28f019fa24a5ff34 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Wed, 20 Nov 2019 01:10:51 -0500 Subject: [PATCH 36/42] Created file test/README.md --- test/README.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 test/README.md diff --git a/test/README.md b/test/README.md new file mode 100644 index 0000000..0180a21 --- /dev/null +++ b/test/README.md @@ -0,0 +1,27 @@ +C02 Test Directory Contents +=========================== + +Compile and Run Batch Files +--------------------------- + +| c02.bat | Compile .c02 file into .asm file | +| a02.bat | Assemble .asm file into .bin file | +| a1.bat | Compile/Assemble .c02 file to .asc Monitor Format | +| a2.bat | Compile/Assemble .c02 file to .dsk and run AppleWin | +| c64.bat | Compile/Assemble .c02 file to .prg and run x64 | +| o1.bat | Compile/Assemble .c02 file to .tap for Oricutron | +| orao.bat | Compile/Assemble .c02 file to .wav for Orao Emulator | +| p65.bat | Compile/Assemble .c02 file to .bin for py65m | +| v8k.bat | Compile/Assemble .c02 file to .prg and run xvic | +| x16.bat | Compile/Assemble .c02 file to .prg and run x16emu | + +C02 Test/Demo Programs +---------------------- + +| hello.c02 | Print "HELLO WORLD" using prtstr() | +| echo.c02 | Echo typed characters to screen | +| echohex.c02 | Display Hex Codes for types characters | +| conds.c02 | Test Conditional operators | +| loops.c02 | Test Loop and Conditional keywords | +| scrntst.c02 | Test module screen.h02 functions | +| sdeftest.c02 | Test module stddef.h02 functions | From e14856c8fcc16648b66558dbd1f6776f9e00dcde Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Wed, 20 Nov 2019 01:14:37 -0500 Subject: [PATCH 37/42] Mods to work/a02.bat, work/c02.bat, work/opcodes.a02 --- work/a02.bat | 2 +- work/c02.bat | 2 +- work/opcodes.a02 | 64 ++++++++++++++++++++++++------------------------ 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/work/a02.bat b/work/a02.bat index fe0619e..9e9035d 100644 --- a/work/a02.bat +++ b/work/a02.bat @@ -11,4 +11,4 @@ IF "%ASMEXT%" == "" ( GOTO :EXIT ) ECHO Assembling File %1.%ASMEXT% -..\a02.exe %1.%ASMEXT% %1.bin %1.lst >%1.out +..\a02.exe -d %1.%ASMEXT% %1.bin %1.lst >%1.out diff --git a/work/c02.bat b/work/c02.bat index 3b7f2af..0a3528d 100644 --- a/work/c02.bat +++ b/work/c02.bat @@ -1,3 +1,3 @@ @ECHO Compiling File %1.c02 -..\c02.exe %1 >%1.dbg +..\c02.exe -c 65C02 %1 >%1.dbg diff --git a/work/opcodes.a02 b/work/opcodes.a02 index 4ea7f35..05ccfeb 100644 --- a/work/opcodes.a02 +++ b/work/opcodes.a02 @@ -7,7 +7,7 @@ X03 BYTE $03 ;NOP X04 TSB $40 ;04 X05 ORA $50 ;05 X06 ASL $60 ;06 -X07 BYTE $07 ;RMB0 +X07 RMB 0,$70 ;07 X08 PHP ;08 X09 ORA #$90 ;09 X0A ASL ;0A @@ -15,7 +15,7 @@ X0B BYTE $0B ;NOP X0C TSB $CBA9 ;0C X0D ORA $DCBA ;0D X0E ASL $EDCB ;0E -X0F BYTE $0F ;BBR0 +X0F BBR0 $F0,X00 ;0F X10 BPL X11 ;10 X11 ORA ($11),Y ;11 X12 BYTE $12 ;NOP #IMD @@ -23,7 +23,7 @@ X13 BYTE $13 ;NOP X14 TRB $51 ;14 X15 ORA $61,X ;15 X16 ASL $71,X ;16 -X17 BYTE $17 ;RMB1 +X17 RMB1 $71 ;17 X18 CLC ;18 X19 ORA $A987,Y ;19 X1A BYTE $1A ;1A @@ -31,7 +31,7 @@ X1B BYTE $1B ;1A X1C TRB $CBA9 ;1C X1D ORA $DCBA,X ;1D X1E ASL $EDCB,X ;1E -X1F BYTE $1F ;BBR1 +X1F BBR 1,$F1,X11 ;1F X20 JSR $0123 ;20 X21 AND ($12,X) ;21 X22 BYTE $22 ;NOP #IMD @@ -39,7 +39,7 @@ X23 BYTE $23 ;NOP X24 BIT $42 ;24 X25 AND $52 ;25 X26 ROL $62 ;26 -X27 BYTE $27 ;RMB2 +X27 RMB 2,$72 ;27 X28 PLP ;28 X29 AND #$92 ;29 X2A ROL ;2A @@ -47,7 +47,7 @@ X2B BYTE $2B ;2B X2C BIT $CBDA ;2C X2D AND $DCBA ;2D X2E ROL $EDCB ;2E -X2F BYTE $2F ;BBR2 +X2F BBR2 $F2,X22 ;2F X30 BMI X33 ;30 X31 AND ($13),Y ;31 X32 BYTE $32 ;NOP #IMD @@ -55,7 +55,7 @@ X33 BYTE $33 ;NOP X34 BIT $43,X ;34 X35 AND $53,X ;35 X36 ROL $63,X ;36 -X37 BYTE $37 ;RMB3 +X37 RMB3 $73 ;37 X38 SEC ;38 X39 AND $9876,Y ;39 X3A DEC ;3A @@ -63,7 +63,7 @@ X3B BYTE $3B ;NOP X3C BIT $CBA9,X ;3C X3D AND $DCBA,X ;3D X3E ROL $EDCB,X ;3E -X3F BYTE $3F ;BBR3 +X3F BBR 3,$F3,X33 ;3F X40 RTI ;40 X41 EOR ($14,X) ;41 X42 BYTE $42 ;NOP #IMD @@ -71,7 +71,7 @@ X43 BYTE $43 ;NOP X44 BYTE $44 ;NOP $ZP X45 EOR $54 ;45 X46 LSR $64 ;46 -X47 BYTE $47 ;RMB4 +X47 RMB 4,$74 ;47 X48 PHA ;48 X49 EOR #$94 ;49 X4A LSR ;4A @@ -79,7 +79,7 @@ X4B BYTE $4B ;NOP X4C JMP $CBA9 ;4C X4D EOR $DCBA ;4D X4E LSR $EDCB ;4E -X4F BYTE $4F ;BBR +X4F BBR4 $F4,X44 ;4F X50 BVC X55 ;50 X51 EOR ($15),Y ;51 X52 EOR ($25) ;52 @@ -87,7 +87,7 @@ X53 BYTE $53 ;NOP X54 BYTE $54 ;NOP $ZP X55 EOR $55,X ;55 X56 LSR $65,X ;56 -X57 BYTE $57 ;RMB5 +X57 RMB5 $75 ;57 X58 CLI ;58 X59 EOR $9876,Y ;59 X5A PHY ;5A @@ -95,7 +95,7 @@ X5B BYTE $5B ;NOP X5C BYTE $5C ;NOP $ABSL X5D EOR $CBA9,X ;5C X5E LSR $DCBA,X ;5E -X5F BYTE $5F ;BBR5 +X5F BBR 5,$F5,X55 ;5F X60 RTS ;60 X61 ADC ($16,X) ;61 X62 BYTE $62 ;NOP #IMD @@ -103,7 +103,7 @@ X63 BYTE $63 ;NOP X64 STZ $46 ;64 X65 ADC $56 ;65 X66 ROR $66 ;66 -X67 BYTE $67 ;RMB6 +X67 RMB 6,$76 ;67 X68 PLA ;68 X69 ADC #$96 ;69 X6A ROR ;6A @@ -111,7 +111,7 @@ X6B BYTE $6B ;NOP X6C JMP ($CDBA) ;6C X6D ADC $DCBA ;6D X6E ROR $EDCB ;6E -X6F BYTE $6F ;BBR6 +X6F BBR6 $F6,X66 ;6F X70 BVS X77 ;70 X71 ADC ($17),Y ;71 X72 ADC ($27) ;72 @@ -119,7 +119,7 @@ X73 BYTE $73 ;NOP X74 STZ $47,X ;74 X75 ADC $57,X ;75 X76 ROR $67,X ;76 -X77 BYTE $77 ;RMB7 +X77 RMB7 $77 ;77 X78 SEI ;78 X79 ADC $9875,Y ;79 X7A PLY ;7A @@ -127,7 +127,7 @@ X7B BYTE $7B ;NOP X7C JMP ($C7,X) ;7C X7D ADC $DCBA,X ;7E X7E ROR $DCBA,X ;7E -X7F BYTE $7F ;BBR7 +X7F BBR 7,$F1,X77 ;7F X80 BRA X88 ;80 X81 STA ($18,X) ;81 X82 BYTE $82 ;NOP #IMD @@ -135,7 +135,7 @@ X83 BYTE $83 ;NOP X84 STY $48 ;84 X85 STA $58 ;85 X86 STX $68 ;86 -X87 BYTE $87 ;SMB0 +X87 SMB0 $78 ;87 X88 DEY ;88 X89 BIT #$98 ;89 X8A TXA ;8A @@ -143,7 +143,7 @@ X8B BYTE $8B ;NOP X8C STY $CBA9 ;8C X8D STA $DCBA ;8D X8E STX $EDCB ;8E -X8F BYTE $8F ;BBS0 +X8F BBS 0,$F8,X88 ;8F X90 BCC X99 ;90 X91 STA ($19),Y ;91 X92 STA ($29) ;92 @@ -151,7 +151,7 @@ X93 BYTE $93 ;NOP X94 STY $49,X ;94 X95 STA $59,X ;95 X96 STX $69,Y ;96 -X97 BYTE $97 ;SMB1 +X97 SMB1 $79 ;97 X98 TYA ;98 X99 STA $9876,Y ;99 X9A TXS ;9A @@ -159,7 +159,7 @@ X9B BYTE $9B ;NOP X9C STZ $CBA9 ;9C X9D STA $DCBA,X ;90 X9E STZ $EDCB,X ;9E -X9F BYTE $9F ;BBS1 +X9F BBS1 $F9,X99 ;8F XA0 LDY #$0A ;A0 XA1 LDA ($1A,X) ;A1 XA2 LDX #$2A ;A2 @@ -167,7 +167,7 @@ XA3 BYTE $A3 ;NOP XA4 LDY $4A ;A4 XA5 LDA $5A ;A5 XA6 LDX $6A ;A6 -XA7 BYTE $A7 ;SMB2 +XA7 SMB1 $7A ;A7 XA8 TAY ;A8 XA9 LDA #$9A ;A9 XAA TAX ;AA @@ -175,7 +175,7 @@ XAB BYTE $AB ;NOP XAC LDY $CBA9 ;AC XAD LDA $DCBA ;AD XAE LDX $EDCB ;AE -XAF BYTE $AF ;BBS2 +XAF BBS 2,$FA,XAA ;AF XB0 BCS XBB ;B0 XB1 LDA ($1B),Y ;B1 XB2 LDA ($2B) ;B2 @@ -183,7 +183,7 @@ XB3 BYTE $B3 ;NOP XB4 LDY $B4,X ;B4 XB5 LDA $B5,X ;BS XB6 LDX $B6,Y ;B6 -XB7 BYTE $B7 ;SMB3 +XB7 SMB3 $7B ;B7 XB8 CLV ;B8 XB9 LDA $9876,Y ;B9 XBA TSX ;BA @@ -191,7 +191,7 @@ XBB BYTE $BB ;NOP XBC STX $CBA9,Y ;BC XBD LDA $DCBA,X ;BD XBE LDX $EDCB,Y ;BE -XBF BYTE $BF ;BBS3 +XBF BBS3 $FB,XBB ;BF XC0 CPY #$0C ;C0 XC1 CMP ($1C,X) ;C1 XC2 BYTE $C2 ;NOP #imd @@ -199,7 +199,7 @@ XC3 BYTE $C3 ;NOP XC4 CPY $4C ;C4 XC5 CMP $5C ;C5 XC6 DEC $6C ;C6 -XC7 BYTE $C7 ;SMB4 +XC7 SMB4 $7C ;C7 XC8 INY ;C8 XC9 CMP #$9C ;C9 XCA DEX ;CA @@ -207,7 +207,7 @@ XCB WAI ;CB XCC CPY $CBA9 ;CC XCD CMP $DCBA ;CD XCE DEC $EDCB ;CE -XCF BYTE $CF ;BBS4 +XCF BBS 4,$FC,XCC ;8F XD0 BNE XDD ;D0 XD1 CMP ($1D),Y ;D1 XD2 CMP ($2D) ;D2 @@ -215,7 +215,7 @@ XD3 BYTE $D3 ;NOP XD4 BYTE $D4 ;NOP $ZP,X XD5 CMP $5D,X ;D5 XD6 DEC $6D,X ;D6 -XD7 BYTE $D7 ;SMB5 +XD7 SMB5 $7D ;D7 XD8 CLD ;D8 XD9 CMP $9876,Y ;D9 XDA PHX ;DA @@ -223,7 +223,7 @@ XDB STP ;DB XDC BYTE $DC ;NOP $ABSL XDD CMP $DCBA,X ;DD XDE DEC $EDCB,X ;DE -XDF BYTE $DF ;BBS5 +XDF BBS5 $FD,XDD ;8F XE0 CPX #$0E ;E0 XE1 SBC ($1E,X) ;E1 XE2 BYTE $E2 ;NOP #IMD @@ -231,7 +231,7 @@ XE3 BYTE $E3 ;NOP XE4 CPX $4E ;E4 XE5 SBC $5E ;E5 XE6 INC $6E ;E6 -XE7 BYTE $E7 ;SMB6 +XE7 SMB6 $7E ;E7 XE8 INX ;E8 XE9 SBC #$9E ;E9 XEA NOP ;EA @@ -239,7 +239,7 @@ XEB BYTE $EB ;NOP XEC CPX $CBA9 ;EC XED SBC $DCBA ;ED XEE INC $EDCB ;EE -XEF BYTE $EF ;BBS6 +XEF BBS 6,$FE,XEE ;8F XF0 BEQ XFF ;F0 XF1 SBC ($1F),Y ;F1 XF2 SBC ($2F) ;F2 @@ -247,7 +247,7 @@ XF3 BYTE $F3 ;NOP XF4 BYTE $F4 ;NOP $ZP,X XF5 SBC $5F,X ;F5 XF6 INC $6F,X ;F6 -XF7 BYTE $F7 ;SMB7 +XF7 SMB7 $7F ;F7 XF8 SED ;F8 XF9 SBC $9876,Y ;F9 XFA PLX ;FA @@ -255,4 +255,4 @@ XFB BYTE $FB ;NOP XFC BYTE $FC ;NOP $ABSL XFD SBC $DCBA,X ;FD XFE INC $EDCB,X ;FE -XFF BYTE $FF ;BBS7 +XFF BBS7 $FF,XFF ;8F From f4467cdbb9cf283f497c99ad5306f94b21a722cf Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Wed, 20 Nov 2019 01:19:38 -0500 Subject: [PATCH 38/42] Removed work/notes.txt --- work/notes.txt | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 work/notes.txt diff --git a/work/notes.txt b/work/notes.txt deleted file mode 100644 index 6b50581..0000000 --- a/work/notes.txt +++ /dev/null @@ -1,8 +0,0 @@ -OP VALUE -= 1 -< 2 -<= 3 -> 4 ->= 5 -<> 6 - From fa6daed904bfbfc217c7dbf0c98c1a7676f80787 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Wed, 20 Nov 2019 01:22:54 -0500 Subject: [PATCH 39/42] Added .gitignore to repository --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index ae1d7b7..48faa14 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,7 @@ output #Deprecated Files */oldclude -*/*.zip \ No newline at end of file +*/*.zip + +#Private Directories +notes \ No newline at end of file From d09386dd9b97336728f528fc33fd2feee59a0565 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Wed, 20 Nov 2019 01:25:57 -0500 Subject: [PATCH 40/42] Added BBR, BBS, RMB, SMB Instructions to A02 Assembler --- a02.c | 39 ++++++++++++++++++++++++++++++--------- a02.h | 14 ++++++++++++++ 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/a02.c b/a02.c index 274875d..cdc9338 100644 --- a/a02.c +++ b/a02.c @@ -439,23 +439,40 @@ int chkmod(int mode) { } /* Assemble Branch Opcode */ -void asmbrn(void) { +void asmbrn(int setzp) { int offset = 0; + int ofsadj = (setzp) ? 2 : 3; //Offset Adjustment if (debug) printf("Assembling Branch Opcode Token 0x%02X\n", token); - zpage = TRUE; + zpage = setzp; if (isalpha(*linptr) || *linptr =='.') { struct sym *target = evlsym(); - if (target) offset = (target->value - curadr - 2); + if (target) offset = (target->value - curadr - ofsadj); } else if (cpychr('+')) offset = evlopd(0xFF); else if (cpychr('-')) offset = -evlopd(0xFF); - else xerror("Illegal Branch Operand\n", ""); + else { + opval = evlopd(0xFFFF); + if (opval < 0) xerror("Illegal Branch Operand\n", ""); + offset = opval - curadr - 2; + } + if (debug) printf("Calculated Branch Offset of %d\n", offset); if ((offset > 127 || offset < -128) && passno == 2) xerror("Branch Out of Range\n", ""); if (debug) printf("Branch Offset %d\n", offset); opval = offset & 0xFF; } +/* Assemble Zero Page, Relative Opcode */ +void asmzpr(void) { + int bitno = -1; + if (debug) printf("Assembling ZeroPage (Relative) Opcode Token 0x%02X\n", token); + if (strlen(mnmnc) < 4) {opmod = evlopd(7) << 4; cpychr(','); skpspc();} //Set Modifier to Bit Position + int zpval = evlopd(0xFF); cpychr(','); skpspc();//Get ZeroPage Operand + if (zpval < 0) xerror ("Instruction %s requires Multiple Operands\n", mnmnc); + if (amode == 0x0004) {zpage = TRUE; opval = zpval;} //RMB, SMB - Zero Page Operand + else {asmbrn(FALSE); opval = opval << 8 | zpval;} //BBR, BBS - Combine Operanda +} + /* Assemble Immediate Mode Instruction */ void asmimd(void) { if (debug) printf("Assembling Immediate Opcode Token 0x%02X\n", token); @@ -513,8 +530,10 @@ unsigned char fixopc(void) { /* Ouput Opcode debug Info */ void dbgopc(void) { - if (debug) printf("token=$%02X, opmod=$%02X, Address Mode: ", token, opmod); - switch (opmod) { + printf("token=$%02X, opmod=$%02X, Address Mode: ", token, opmod); + if (amode == 0x1004) puts("ZeroPage, Relative"); + else if (amode == 0x0004) puts("ZeroPage"); + else switch (opmod) { case 0x00: if (amode == IMPLD) puts("Implied"); else puts("(Indirect,X)"); break; case 0x08: if (opval < 0) puts("Accumulator"); else puts("#Immediate"); break; case 0x10: puts("(Indirect),Y"); break; @@ -542,17 +561,19 @@ int asmopc(int dot) { if (debug) printf("Assembling Opcode Token 0x%02X, ", token); if (debug) printf("Addressing Mode Mask 0x%04X\n", amode); skpspc(); - if (amode == RELTV) asmbrn(); //Branch (Relative) Instruction + if (amode == RELTV) asmbrn(TRUE); //Branch (Relative) Instruction + else if (amode == 0x0004 || amode == 0x1004) asmzpr(); //Branch (Relative) Instruction else if (cpychr('#')) asmimd(); //Assemble Implied Instruction else if (cpychr('(')) asmind(); //Assemble Indirect Instruction else asmiaz(); //Assemble Implied/Accumulator/Absolute/ZeroPage Instruction if (debug) dbgopc(); - int opcode = fixopc(); + int opcode = fixopc(); if (debug) printf("Writing OpCode $%02X\n", opcode); outbyt(opcode); + if (debug) printf("Writing %s Operand %d\n", zpgabs[-zpage], opval); if (opval >= 0) { if (zpage) outbyt(opval); //Byte Operand - else outwrd(opval); //Word Operand + else outwrd(opval); //Word Operand } return TRUE; } diff --git a/a02.h b/a02.h index 77d90f3..4c3e011 100644 --- a/a02.h +++ b/a02.h @@ -22,6 +22,8 @@ #define INDCY 0x0800 //(Indirect),Y #define RELTV 0x1000 //Relative +char zpgabs[][] = {"Absolute", "ZeroPage"}; + struct amd {int amode; char desc[12];}; struct amd amdesc[] = { {ACMLT, "Accumulator"}, @@ -67,6 +69,18 @@ struct opc opclst[] = { {"ASL", 0x02, 0x007D}, {"ROL", 0x22, 0x007D}, {"INC", 0xE2, 0x007D}, {"LSR", 0x42, 0x007D}, {"ROR", 0x62, 0x007D}, {"DEC", 0xC2, 0x007D}, + {"RMB0", 0x07, 0x0004}, {"RMB1", 0x17, 0x0004}, {"RMB2", 0x27, 0x0004}, {"RMB3", 0x37, 0x0004}, + {"RMB4", 0x47, 0x0004}, {"RMB5", 0x57, 0x0004}, {"RMB6", 0x67, 0x0004}, {"RMB7", 0x77, 0x0004}, + {"SMB0", 0x87, 0x0004}, {"SMB1", 0x97, 0x0004}, {"SMB2", 0xA7, 0x0004}, {"SMB3", 0xB7, 0x0004}, + {"SMB4", 0xC7, 0x0004}, {"SMB5", 0xD7, 0x0004}, {"SMB6", 0xE7, 0x0004}, {"SMB7", 0xF7, 0x0004}, + {"RMB", 0x07, 0x0004}, {"SMB", 0x87, 0x0004}, + + {"BBR0", 0x0F, 0x1004}, {"BBR1", 0x1F, 0x1004}, {"BBR2", 0x2F, 0x1004}, {"BBR3", 0x3F, 0x1004}, + {"BBR4", 0x4F, 0x1004}, {"BBR5", 0x5F, 0x1004}, {"BBR6", 0x6F, 0x1004}, {"BBR7", 0x7F, 0x1004}, + {"BBS0", 0x8F, 0x1004}, {"BBS1", 0x9F, 0x1004}, {"BBS2", 0xAF, 0x1004}, {"BBS3", 0xBF, 0x1004}, + {"BBS4", 0xCF, 0x1004}, {"BBS5", 0xDF, 0x1004}, {"BBS6", 0xEF, 0x1004}, {"BBS7", 0xFF, 0x1004}, + {"BBR", 0x0F, 0x1004}, {"BBS", 0x8F, 0x1004}, + {"TRB", 0x10, 0x0024}, {"TSB", 0x00, 0x0024}, {"CPX", 0xE0, 0x0026}, {"CPY", 0xC0, 0x0026}, {"LDX", 0xA2, 0x00A6}, {"STX", 0x82, 0x00A6}, From c5460db89ef3d89d38a2783ee1bf50484dde1c9f Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Wed, 20 Nov 2019 01:36:43 -0500 Subject: [PATCH 41/42] Updated c64.a02, vic.a02, x16.a02 --- ca02.sh | 0 include/c64.a02 | 1 - include/via.h02 | 20 +++++++++++++ include/vic.a02 | 3 ++ include/x16.a02 | 80 +++++++++++++++++++++++++++---------------------- include/x16.h02 | 3 ++ 6 files changed, 70 insertions(+), 37 deletions(-) mode change 100755 => 100644 ca02.sh create mode 100644 include/via.h02 diff --git a/ca02.sh b/ca02.sh old mode 100755 new mode 100644 diff --git a/include/c64.a02 b/include/c64.a02 index 86afefc..d9954cf 100644 --- a/include/c64.a02 +++ b/include/c64.a02 @@ -99,4 +99,3 @@ PUTSTR: TXA ;Copy LSB to Accumulator JMP $AB1E ;Execute STROUT INCLUDE "../include/prbyte.a02" ;PRBYTE and PRHEX routine - diff --git a/include/via.h02 b/include/via.h02 new file mode 100644 index 0000000..907baa2 --- /dev/null +++ b/include/via.h02 @@ -0,0 +1,20 @@ +/* MOS 6522 VIA Registers */ + +struct via { + char iorb; //Input/Output Register B + char iora; //Input/Output Register A + char ddrb; //Data Direction Register B + char ddra; // Data Direction Register A + char t1cl; //T1 Low-Order Counter + char t1ch; //T1 High-Order Counter + char t1ll; //T1L-L | T1 Low-Order Latches + char t1lh; //T1 High-Order Latches + char t2cl; //T2 Low-Order Latches + char t2ch; //T2 High-Order Counter + char sr; //Shift Register + char acr; //Auxiliary Control Register + char pcr; //Peripheral Control Register + char ifr; //Interrupt Flag Register + char ier; //Interrupt Enable Register + char nhra; //Input/Output Register A (No Handshake) +} diff --git a/include/vic.a02 b/include/vic.a02 index 041e3ab..ca60c9e 100644 --- a/include/vic.a02 +++ b/include/vic.a02 @@ -100,3 +100,6 @@ NEWLIN: LDX #0 ;Store 0 STX $D3 ;in Cursor Column and JMP $E8C3 ;Execute NXTLINE Routine +;Print Zero-Terminated String +PUTSTR: TXA ;Copy LSB to Accumulator + JMP $CB1E ;Execute STROUT Routine diff --git a/include/x16.a02 b/include/x16.a02 index 481e1c8..ffa3c82 100644 --- a/include/x16.a02 +++ b/include/x16.a02 @@ -1,46 +1,53 @@ ; c02 Program Initialization Code for Commander X16 +; Compatible with x16emu Release 34 ;PETSCII Key Mappings DELKEY EQU $14 ;Delete/Backspace Key (Delete) ESCKEY EQU $03 ;Escape/Stop Key (RUN/STOP) RTNKEY EQU $0D ;Return/Enter Key (RETURN) -;Zero Page System Variables - Assumes Usage is Same as C64 -XMBANK EQU $0A ;Extended Memory Bank (Load/Verify Flag) -XADRLO EQU $0B ;Ext Memory Address LSB (Text Index/Array Size) -XADRHI EQU $0C ;Ext Memory Address MSB (Array Dimension Fkags) -SRCPTR EQU $22 ;Source Pointer [Temporary Pointers] -SRCLO EQU $22 ;Source Pointer LSB [Temporary Pointers] -SRCHI EQU $23 ;Source Pointer MSB [Temporary Pointers] -DSTPTR EQU $24 ;Destination Pointer [Temporary Pointers] -DSTLO EQU $24 ;Destination Pointer LSB [Temporary Pointers] -DSTHI EQU $25 ;Destination Pointer MSB [Temporary Pointers] -BLKLO EQU $26 ;Block Pointer LSB [Floating Point Work Area] -BLKHI EQU $27 ;Block Pointer MSB [Floating Point Work Area] -STKLO EQU $28 ;Stack Pointer LSB [Floating Point Work Area] -STKHI EQU $29 ;Stack Pointer MSB [Floating Point Work Area] -BFRLO EQU $35 ;Buffer Pointer LSB [Temporary String Pointer] -BFRHI EQU $36 ;Buffer Pointer MSB [Temporary String Pointer] -RDSEED EQU $A2 ;Random Seed [Software Jiffy Clock (Low Byte)] -TEMP0 EQU $FB ;Temporary Variable [Unused Byte] -TEMP1 EQU $FC ;Temporary Variable [Unused Byte] -TEMP2 EQU $FD ;Temporary Variable [Unused Byte] -TEMP3 EQU $FE ;Temporary Variable [Unused Byte] - +;Zero Page System Variables - x16emu Release 34 Memory Map +;UNUSED $00-$01 ;Available to User +; $02-$52 ;Used by Basic graphics commands +XMBANK EQU $53 ;Extended Memory Bank +XADRLO EQU $54 ;Ext Memory Address LSB +XADRHI EQU $55 ;Ext Memory Address MSB +SRCPTR EQU $56 ;Source Pointer +SRCLO EQU $57 ;Source Pointer LSB +SRCHI EQU $58 ;Source Pointer MSB +DSTPTR EQU $59 ;Destination Pointer +DSTLO EQU $5A ;Destination Pointer LSB +DSTHI EQU $5B ;Destination Pointer MSB +BLKLO EQU $5C ;Block Pointer LSB +BLKHI EQU $5D ;Block Pointer MSB +STKLO EQU $5E ;Stack Pointer LSB +STKHI EQU $5F ;Stack Pointer MSB +BFRLO EQU $60 ;Buffer Pointer LSB +BFRHI EQU $61 ;Buffer Pointer MSB +RANDOM EQU $62 ;Random Number Storage +RDSEED EQU $63 ;Random Seed +TEMP0 EQU $64 ;Temporary Variable +TEMP1 EQU $65 ;Temporary Variable +TEMP2 EQU $66 ;Temporary Variable +TEMP3 EQU $67 ;Temporary Variable +; $68-7F ;Available to User +; $80-$83 ;Used by Kernal and DOS +; $A4-$A8 ;Reserved for KERNAL/DOS/BASIC +; $A9-$FF ;Used by BASIC + ;Other Variables - Top of Extended System RAM Area -BLKSLO EQU $07F4 ;Block Start LSB [Unused Byte] -BLKSHI EQU $07F5 ;Block Start MSB [Unused Byte] -BLKELO EQU $07F6 ;Block End LSB [Unused Byte] -BLKEHI EQU $07F7 ;Block End MSB [Unused Byte] -BLKLEN EQU $07F8 ;Block Length [Unused Byte] +BLKSLO EQU $07F4 ;Block Start LSB +BLKSHI EQU $07F5 ;Block Start MSB +BLKELO EQU $07F6 ;Block End LSB +BLKEHI EQU $07F7 ;Block End MSB +BLKLEN EQU $07F8 ;Block Length -RANDOM EQU $07F9 ;Random Number Storage [Unused Byte] -STKSAV EQU $07FA ;Machine Stack Storage [Unused Byte] +STKSAV EQU $07FA ;Machine Stack Storage -STKSLO EQU $07FC ;Stack Start LSB [Unused Byte] -STKSHI EQU $07FD ;Stack Start MSB [Unused Byte] -STKELO EQU $07FE ;Stack End LSB [Unused Byte] -STKEHI EQU $07FF ;Stack End MSB [Unused Byte] +STKSLO EQU $07FC ;Stack Start LSB +STKSHI EQU $07FD ;Stack Start MSB +STKELO EQU $07FE ;Stack End LSB +STKEHI EQU $07FF ;Stack End MSB ;Machine Language Basic Stub - Same as Commodore 64 ORG $0801 ;Start of Basic Program @@ -54,6 +61,9 @@ BASIC: DC $0C, $08 ;Pointer to Next Line START: TSX ;Get Stack Pointer STX STKSAV ;and Save for Exit + SEC ;Set Screen Mode + LDA #0 ;to 40x30 Text + JSR $FF5F ;using SCRMOD JMP MAIN ;Execute Program EXIT: LDX STKSAV ;Retrieve Saved Stack Pointer @@ -82,7 +92,5 @@ DELCHR: LDA #DELKEY ;Load Delete Character NEWLIN: LDA #RTNKEY ;Load Return Character JMP PUTCHR ;Print and Return -PUTSTR: TXA ;Copy LSB to Accumulator - JMP $CBD2 ;Execute STROUT - INCLUDE "../include/prbyte.a02" ;PRBYTE and PRHEX routine + INCLUDE "../include/putstr.a02" ;PUTSTR routine diff --git a/include/x16.h02 b/include/x16.h02 index 8cdffdc..b174c11 100644 --- a/include/x16.h02 +++ b/include/x16.h02 @@ -1,5 +1,8 @@ /* C02 System Header file for Commander X16 */ +/* Platform Specific Settings */ +#pragma zeropage $68 //Unused Zero Page - $68-$7F + /* Platform Specific Constants */ #define DELKEY $14 //Delete/Backspace Key (DEL) #define ESCKEY $03 //Escape/Break Key (STOP) From b7be6f26f3fc4d263122543acc555c2ad62c24af Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Wed, 20 Nov 2019 01:37:28 -0500 Subject: [PATCH 42/42] Added command line option -d to c02 compiler --- src/c02.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/c02.c b/src/c02.c index d9c6414..80e7c4c 100644 --- a/src/c02.c +++ b/src/c02.c @@ -144,7 +144,11 @@ int popt(int arg, int argc, char *argv[]) { } DEBUG("Processing Command Line Option -%c\n", argstr[1]) switch (opt) { - case 'C': + case 'D': + debug = TRUE; + DEBUG("Debug output enable\n", 0) + break; + case 'C': strcpy(cputyp, optarg); DEBUG("CPU Type set to '%s'\n", cputyp) break; @@ -196,7 +200,7 @@ void chkcpu(void) { int main(int argc, char *argv[]) { - debug = TRUE; //Output Debug Info + debug = FALSE; //Do Not Output Debug Info by Default gencmt = TRUE; //Generate Assembly Language Comments printf("C02 Compiler (C) 2012 Curtis F Kaylor\n" );