From 3e79d2f5d768fa7ac63fdad196a5e32fbaeffcaf Mon Sep 17 00:00:00 2001 From: fishsoupisgood Date: Mon, 27 May 2019 02:46:10 +0100 Subject: first working version --- master/timex-pseudo-instructions.patch | 404 +++++++++++++++++++++++++++++++++ 1 file changed, 404 insertions(+) create mode 100644 master/timex-pseudo-instructions.patch (limited to 'master/timex-pseudo-instructions.patch') diff --git a/master/timex-pseudo-instructions.patch b/master/timex-pseudo-instructions.patch new file mode 100644 index 0000000..6e5ba04 --- /dev/null +++ b/master/timex-pseudo-instructions.patch @@ -0,0 +1,404 @@ +diff --git a/code6805.c b/code6805.c +index 0a087af..54a9e92 100644 +--- a/code6805.c ++++ b/code6805.c +@@ -392,6 +392,8 @@ BEGIN + + if (DecodePseudo()) return; + ++ if (DecodeTimexPseudo(True)) return; ++ + if (DecodeMotoPseudo(True)) return; + + /* Anweisungen ohne Argument */ +diff --git a/codepseudo.c b/codepseudo.c +index 8d474de..f655f3d 100644 +--- a/codepseudo.c ++++ b/codepseudo.c +@@ -761,6 +761,373 @@ BEGIN + return LookupInstTable(InstTable,OpPart); + END + ++ ++static unsigned char timex_translate(unsigned char c) ++{ ++ switch (c) ++ { ++ case '0': ++ case '1': ++ case '2': ++ case '3': ++ case '4': ++ case '5': ++ case '6': ++ case '7': ++ case '8': ++ case '9': ++ return c-'0'; ++ case 'a': ++ case 'A': ++ case 'b': ++ case 'B': ++ case 'c': ++ case 'C': ++ case 'd': ++ case 'D': ++ case 'e': ++ case 'E': ++ case 'f': ++ case 'F': ++ case 'g': ++ case 'G': ++ case 'h': ++ case 'H': ++ case 'i': ++ case 'I': ++ case 'j': ++ case 'J': ++ case 'k': ++ case 'K': ++ case 'l': ++ case 'L': ++ case 'm': ++ case 'M': ++ case 'n': ++ case 'N': ++ case 'o': ++ case 'O': ++ case 'p': ++ case 'P': ++ case 'q': ++ case 'Q': ++ case 'r': ++ case 'R': ++ case 's': ++ case 'S': ++ case 't': ++ case 'T': ++ case 'u': ++ case 'U': ++ case 'v': ++ case 'V': ++ case 'w': ++ case 'W': ++ case 'x': ++ case 'X': ++ case 'y': ++ case 'Y': ++ case 'z': ++ case 'Z': ++ c &= ~0x20; ++ return 0xa + c - 'A'; ++ case ' ': ++ return 0x24; ++ case '!': ++ return 0x25; ++ case '"': ++ return 0x26; ++ case '#': ++ return 0x27; ++ case '>': ++ return 0x28; ++ case '%': ++ return 0x29; ++ case '&': ++ return 0x2a; ++ case '\'': ++ return 0x2b; ++ case '(': ++ return 0x2c; ++ case ')': ++ return 0x2d; ++ case '*': ++ return 0x2e; ++ case '+': ++ return 0x2f; ++ case ',': ++ return 0x30; ++ case '-': ++ return 0x31; ++ case '.': ++ return 0x32; ++ case '/': ++ return 0x33; ++ case ':': ++ return 0x34; ++ case '\\': ++ return 0x35; ++ case '=': ++ return 0x37; ++ case '?': ++ return 0x39; ++ case '_': ++ return 0x3a; ++ default: ++ WrError(1320); ++ CodeLen=0; ++ fprintf (stderr, "Cannot encode %c in 'timex' encoding\n", c); ++ } ++} ++ ++ ++static void timex_translate_buf(unsigned char *c, size_t l) ++{ ++ for (;l;c++,l--) ++ *c = timex_translate(*c); ++} ++ ++ ++ static void DecodeTIMEX(Word Index) ++BEGIN ++ int z; ++ Boolean OK; ++ TempResult t; ++ LongInt Rep,z2; ++ ++ if (ArgCnt==0) WrError(1110); ++ else ++ BEGIN ++ z=1; OK=True; ++ do ++ BEGIN ++ KillBlanks(ArgStr[z]); ++ OK=CutRep(ArgStr[z],&Rep); ++ if (OK) ++ BEGIN ++ EvalExpression(ArgStr[z],&t); ++ switch (t.Typ) ++ BEGIN ++ case TempInt: ++ if (NOT RangeCheck(t.Contents.Int,Int8)) ++ BEGIN ++ WrError(1320); OK=False; ++ END ++ else if (CodeLen+Rep>MaxCodeLen) ++ BEGIN ++ WrError(1920); OK=False; ++ END ++ else ++ BEGIN ++ memset(BAsmCode+CodeLen,t.Contents.Int,Rep); ++ timex_translate_buf(BAsmCode+CodeLen,Rep); ++ CodeLen+=Rep; ++ END ++ break; ++ case TempFloat: ++ WrError(1135); OK=False; ++ break; ++ case TempString: ++ TranslateString(t.Contents.Ascii); ++ if (CodeLen+Rep*strlen(t.Contents.Ascii)>MaxCodeLen) ++ BEGIN ++ WrError(1920); OK=False; ++ END ++ else for (z2=0; z2MaxCodeLen) ++ BEGIN ++ WrError(1920); OK=False; ++ END ++ else ++ BEGIN ++ memset(BAsmCode+CodeLen,t.Contents.Int,Rep); ++ timex6_translate_buf(BAsmCode+CodeLen,Rep); ++ CodeLen+=Rep; ++ END ++ break; ++ case TempFloat: ++ WrError(1135); OK=False; ++ break; ++ case TempString: ++ TranslateString(t.Contents.Ascii); ++ if (CodeLen+Rep*strlen(t.Contents.Ascii)>MaxCodeLen) ++ BEGIN ++ WrError(1920); OK=False; ++ END ++ else for (z2=0; z2>2,bpos=(Pos&3)*4; +diff --git a/codepseudo.h b/codepseudo.h +index 0ffbfe8..fc164a7 100644 +--- a/codepseudo.h ++++ b/codepseudo.h +@@ -24,6 +24,8 @@ extern void ConvertDec(Double F, Word *w); + + extern Boolean DecodeIntelPseudo(Boolean Turn); + ++extern Boolean DecodeTimexPseudo(Boolean Turn); ++ + extern Boolean DecodeMotoPseudo(Boolean Turn); + + extern void AddMoto16PseudoONOFF(void); -- cgit v1.2.3