From 13b4cf53d958388245ceec2b6ec8a5a21c81f728 Mon Sep 17 00:00:00 2001 From: Andre Fachat Date: Sun, 15 Oct 2017 00:47:56 +0200 Subject: [PATCH 1/3] xa-2.3.7 --- xa/ChangeLog | 12 + xa/Makefile | 11 +- xa/README.1st | 4 +- xa/man/xa.1 | 12 +- xa/src/xa.c | 12 +- xa/src/xah.h | 5 +- xa/src/xap.c | 14 +- xa/src/xat.c | 80 +- xa/tests/README | 9 +- xa/tests/adrm/a.o65 | Bin 50 -> 0 bytes xa/tests/branch/Makefile | 9 + xa/tests/branch/bir.ok | Bin 0 -> 140 bytes xa/tests/branch/bir.s | 14 + xa/tests/branch/bor.s | 14 + xa/tests/chardelimiter/a.o65 | 1 - xa/tests/chardelimiter/delimtest.a65 | 16 - xa/tests/charset/a.o65 | Bin 87 -> 0 bytes xa/tests/charset/test.asm | 16 - xa/tests/chppch/a.o65 | 1 - xa/tests/chppch/ok.out | 2 - xa/tests/chppch/test.out | 10 - xa/tests/comcom/a.o65 | Bin 9 -> 0 bytes xa/tests/cpktest/Makefile | 10 + xa/tests/cpktest/c64def.def | 309 ++++++++ xa/tests/cpktest/de.ok | Bin 0 -> 2245 bytes xa/tests/cpktest/deutsch.l | 180 +++++ xa/tests/cpktest/eng.ok | Bin 0 -> 2259 bytes xa/tests/cpktest/english.l | 180 +++++ xa/tests/cpktest/pack_eng.a65 | 1070 ++++++++++++++++++++++++++ xa/tests/cpktest/pack_ger.a65 | 1070 ++++++++++++++++++++++++++ xa/tests/cpp/over.asm | 22 - xa/tests/dos51/Makefile | 9 + xa/tests/dos51/dos51.inc | 136 ++++ xa/tests/dos51/ok | Bin 0 -> 205 bytes xa/tests/dos51/test.s | 6 + xa/tests/fordef/a.o65 | Bin 11 -> 0 bytes xa/tests/fordef/ok.out | 2 - xa/tests/mvnmvp/Makefile | 9 + xa/tests/mvnmvp/ok | Bin 0 -> 27 bytes xa/tests/mvnmvp/test.s | 14 + xa/tests/nonl/a.o65 | 0 xa/tests/nonl/test.asm | 3 - xa/tests/op816/Makefile | 9 + xa/tests/op816/ok | Bin 0 -> 606 bytes xa/tests/op816/test.s | 336 ++++++++ xa/tests/openpp/Makefile | 11 + xa/tests/openpp/ok | Bin 0 -> 12 bytes xa/tests/openpp/{test.asm => test.s} | 4 +- xa/tests/recmac/a.o65 | 1 - 49 files changed, 3520 insertions(+), 103 deletions(-) delete mode 100644 xa/tests/adrm/a.o65 create mode 100644 xa/tests/branch/Makefile create mode 100644 xa/tests/branch/bir.ok create mode 100644 xa/tests/branch/bir.s create mode 100644 xa/tests/branch/bor.s delete mode 100644 xa/tests/chardelimiter/a.o65 delete mode 100644 xa/tests/chardelimiter/delimtest.a65 delete mode 100644 xa/tests/charset/a.o65 delete mode 100644 xa/tests/charset/test.asm delete mode 100644 xa/tests/chppch/a.o65 delete mode 100644 xa/tests/chppch/test.out delete mode 100644 xa/tests/comcom/a.o65 create mode 100644 xa/tests/cpktest/Makefile create mode 100644 xa/tests/cpktest/c64def.def create mode 100644 xa/tests/cpktest/de.ok create mode 100644 xa/tests/cpktest/deutsch.l create mode 100644 xa/tests/cpktest/eng.ok create mode 100644 xa/tests/cpktest/english.l create mode 100644 xa/tests/cpktest/pack_eng.a65 create mode 100644 xa/tests/cpktest/pack_ger.a65 delete mode 100644 xa/tests/cpp/over.asm create mode 100644 xa/tests/dos51/Makefile create mode 100644 xa/tests/dos51/dos51.inc create mode 100644 xa/tests/dos51/ok create mode 100644 xa/tests/dos51/test.s delete mode 100644 xa/tests/fordef/a.o65 create mode 100644 xa/tests/mvnmvp/Makefile create mode 100644 xa/tests/mvnmvp/ok create mode 100644 xa/tests/mvnmvp/test.s delete mode 100644 xa/tests/nonl/a.o65 delete mode 100644 xa/tests/nonl/test.asm create mode 100644 xa/tests/op816/Makefile create mode 100644 xa/tests/op816/ok create mode 100644 xa/tests/op816/test.s create mode 100644 xa/tests/openpp/Makefile create mode 100644 xa/tests/openpp/ok rename xa/tests/openpp/{test.asm => test.s} (93%) delete mode 100644 xa/tests/recmac/a.o65 diff --git a/xa/ChangeLog b/xa/ChangeLog index 7314462..cf3110f 100644 --- a/xa/ChangeLog +++ b/xa/ChangeLog @@ -304,3 +304,15 @@ xa-2.3.6 * Fixed message offsets. -- Cameron Kaiser 11 July 2014 + +xa-2.3.7 + + * Fixed buffer overflow and test failure with gcc 4.9 (thanks Adam Sampson). + * mvn and mvp now use the standard syntax (thanks Alessandro Gatti). + * Copyright message is no longer put in the error log to simplify testing. + * Makefile properly triggers a relink for testing or source changes. + * Spurious messages quelled. + * Documentation updated. + * Testsuite expanded. + + -- Cameron Kaiser 29 December 2014 diff --git a/xa/Makefile b/xa/Makefile index 8fa1583..df6cb4e 100644 --- a/xa/Makefile +++ b/xa/Makefile @@ -26,7 +26,10 @@ DOCDIR = $(DESTDIR)/share/doc MKDIR = mkdir -p INSTALL = install -all: xa uncpk +all: killxa xa uncpk + +killxa: + rm -f xa xa: (cd src && LD=${LD} CC="${CC} ${CFLAGS}" ${MAKE}) @@ -60,8 +63,8 @@ install: xa uncpk #$(MKDIR) $(DOCDIR)/xa65 dist: clean - #cd .. ; tar cvf xa-2.3.6A.tar xa-2.3.6 ; gzip xa-2.3.6A.tar - cd .. ; tar cvf xa-2.3.6.tar xa-2.3.6 ; gzip xa-2.3.6.tar + #cd .. ; tar cvf xa-2.3.7A.tar xa-2.3.7 ; gzip xa-2.3.7A.tar + cd .. ; tar cvf xa-2.3.7.tar xa-2.3.7 ; gzip xa-2.3.7.tar -test: +test: xa uncpk cd tests && ./harness -make="$(MAKE)" -cc="$(CC)" -cflags="$(CFLAGS)" diff --git a/xa/README.1st b/xa/README.1st index 0c7994a..03775ef 100644 --- a/xa/README.1st +++ b/xa/README.1st @@ -3,8 +3,7 @@ derivatives). xa is a small, fast, portable two-pass assembler that compiles under most ANSI C compilers. It is distributed under the GNU Public License (see COPYING). -The current version is 2.3.4, which implements multiple improvements on -2.3.2, a bug fix to the 2.3.0 version. 2.3.0 itself features many +The current version is 2.3.7, a bug fix to the long-lived 2.3.0, itself with compatibility improvements and new man-based documentation. It also completed the merge of the 65816 and 6502/R65C02 versions and thus the current xa can generate code for all targets now. @@ -12,6 +11,7 @@ generate code for all targets now. To install on a generic Unixy thing, you should be able to just type % make # to build the executable, and if it works ... + % make test # if you have Perl, make and prerequisites, otherwise % make install # to install man pages and binaries into the system This will create xa along with its various support utilities. Try assembling diff --git a/xa/man/xa.1 b/xa/man/xa.1 index 8dc5e88..3d91da0 100644 --- a/xa/man/xa.1 +++ b/xa/man/xa.1 @@ -785,6 +785,16 @@ and .B dec instructions respectively. .LP +The 65816 instructions +.B mvn +and +.B mvp +use two eight bit parameters, the only instructions in the entire +instruction set to do so. Older versions of +.B xa +took a single 16-bit absolute value. Since 2.3.7, the standard syntax is +now accepted and the old syntax is deprecated (a warning will be generated). +.LP Forward-defined labels -- that is, labels that are defined after the current instruction is processed -- cannot be optimized into zero page instructions even if the label does end up being defined as a zero page @@ -830,7 +840,7 @@ This manual page was written by David Weinehall , Andre Fachat and Cameron Kaiser . Original xa package (C)1989-1997 Andre Fachat. Additional changes -(C)1989-2009 Andre Fachat, Jolse Maginnis, David Weinehall, +(C)1989-2015 Andre Fachat, Jolse Maginnis, David Weinehall, Cameron Kaiser. The official maintainer is Cameron Kaiser. .SH WEBSITE diff --git a/xa/src/xa.c b/xa/src/xa.c index f0e4d1e..287873b 100644 --- a/xa/src/xa.c +++ b/xa/src/xa.c @@ -55,9 +55,9 @@ #define ANZWARN 13 #define programname "xa" -#define progversion "v2.3.6" +#define progversion "v2.3.7" #define authors "Written by Andre Fachat, Jolse Maginnis, David Weinehall and Cameron Kaiser" -#define copyright "Copyright (C) 1989-2014 Andre Fachat, Jolse Maginnis, David Weinehall\nand Cameron Kaiser." +#define copyright "Copyright (C) 1989-2015 Andre Fachat, Jolse Maginnis, David Weinehall\nand Cameron Kaiser." /* exported globals */ int ncmos, cmosfl, w65816, n65816; @@ -355,6 +355,7 @@ int main(int argc,char *argv[]) if(setfext(old_o,".obj")==0) ofile = old_o; if(setfext(old_l,".lab")==0) lfile = old_l; } + if(verbose) fprintf(stderr, "%s\n",copyright); fplab= lfile ? xfopen(lfile,"w") : NULL; fperr= efile ? xfopen(efile,"w") : NULL; @@ -369,8 +370,6 @@ int main(int argc,char *argv[]) exit(1); } - if(verbose) fprintf(stderr, "%s\n",copyright); - if(1 /*!m_init()*/) { if(1 /*!b_init()*/) @@ -381,7 +380,7 @@ int main(int argc,char *argv[]) { if(!x_init()) { - if(fperr) fprintf(fperr,"%s\n",copyright); + /* if(fperr) fprintf(fperr,"%s\n",copyright); */ if(verbose) logout(ctime(&tim1)); /* Pass 1 */ @@ -804,7 +803,6 @@ static int pass1(void) } if(er!=E_EOF) { - fprintf(stderr, "foul through\n"); errout(er); } @@ -951,10 +949,10 @@ static char *ertxt[] = { "Open preprocessor directive at end of file (intentional?)", "Included binary data exceeds 64KB", "Included binary data exceeds 16MB", + "MVN/MVP $XXXX syntax is deprecated and will be removed", /* more placeholders */ "", "", - "", }; diff --git a/xa/src/xah.h b/xa/src/xah.h index 6744ef8..26133b2 100644 --- a/xa/src/xah.h +++ b/xa/src/xah.h @@ -112,7 +112,7 @@ typedef struct { #define E_OUTOFDATA -34 /* out of data */ #define E_ILLQUANT -35 /* generic illegal quantity error */ #define E_BIN -36 /* okdef */ -/* errors thru 64 are placeholders */ +/* errors thru 64 are placeholders available for use */ #define W_ADRRELOC -65 /* word relocation in byte value */ #define W_BYTRELOC -66 /* byte relocation in word value */ @@ -124,7 +124,8 @@ typedef struct { #define W_OPENPP -72 /* warning about open preprocessor directive */ #define W_OVER64K -73 /* included binary over 64K in 6502 mode */ #define W_OVER16M -74 /* included binary over 16M in 65816 mode */ -/* warnings 75-77 are placeholders */ +#define W_OLDMVNS -75 /* use of old mv? $xxxx syntax */ +/* warnings 76-77 are placeholders available for use */ #define T_VALUE -1 #define T_LABEL -2 diff --git a/xa/src/xap.c b/xa/src/xap.c index da8e3c3..e8ce798 100644 --- a/xa/src/xap.c +++ b/xa/src/xap.c @@ -213,14 +213,22 @@ int pp_endif(char *t) /* stub for handling CPP directives */ int pp_cpp(char *t) { + char name[MAXLINE]; - if(sscanf(t, " %d \"%s\"", &filep->fline, filep->fname) == 2) { + if(sscanf(t, " %d \"%s\"", &filep->fline, name) == 2) { /* massage it into our parameters and drop last quote */ - char *u = ""; + char *u; filep->fline--; - if((u = (char *)strrchr(filep->fname, '"'))) + if((u = (char *)strrchr(name, '"'))) *u = '\0'; + + free(filep->fname); + filep->fname = strdup(name); + if(!filep->fname) { + fprintf(stderr,"Oops, no more memory!\n"); + exit(1); + } return (0); } else { return(E_SYNTAX); diff --git a/xa/src/xat.c b/xa/src/xat.c index a08539b..6eadb9f 100644 --- a/xa/src/xat.c +++ b/xa/src/xat.c @@ -21,7 +21,9 @@ */ /* enable this to turn on (copious) optimization output */ -/* #define DEBUG_AM */ +/* +#define DEBUG_AM +*/ #include #include @@ -81,6 +83,10 @@ static char *kt[] ={ static int lp[]= { 0,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,2,2 }; +/* mvn and mvp are handled specially, they have a weird syntax */ +#define Kmvp 38 +#define Kmvn Kmvp+1 + /* index into token array for pseudo-ops */ /* last valid mnemonic */ #define Lastbef 93 @@ -369,7 +375,6 @@ fprintf(stderr, "- p1 %d starting -\n", pc[segment]); if(n==Kend || n==Klist || n==Kxlist) { *ll = 0; /* ignore */ } else - if(n==Kfopt) { if(romable==1) er=E_ROMOPT; t[0] = Kbyt; @@ -656,7 +661,7 @@ printf(" wrote %02x %02x %02x %02x %02x %02x\n", /* optimization okay on pass 1: use 0 for fl */ { #ifdef DEBUG_AM -fprintf(stderr, "E_OK ... t_p2 xat.c\n"); +fprintf(stderr, "E_OK ... t_p2 xat.c %i %i\n", t[0], *ll); #endif er=t_p2(t,ll,(0 | byte), al); } @@ -683,7 +688,7 @@ fprintf(stderr, "E_NODEF pass1 xat.c\n"); /* choose addressing mode; add commas found */ - if(n>=0 && n<=Lastbef) + if(n>=0 && n<=Lastbef && n != Kmvn && n != Kmvp) /* not for mvn/p */ { if(t[1]==T_END) { @@ -774,6 +779,11 @@ fprintf(stderr, "E_NODEF pass1 xat.c\n"); /* .byt, .asc, .word, .dsb, .fopt pseudo-op dispatch */ } else + if(n==Kmvn || n==Kmvp) + { + bl=3; + if (!w65816) er = E_65816; + } else if(n==Kbyt || n==Kasc || n==Kaasc) { #ifdef DEBUG_AM @@ -931,7 +941,9 @@ int t_p2(signed char *t, int *ll, int fl, int *al) } *ll=j; bl=j; - } else if (n == Kbin) { + } else + if (n == Kbin) + { int j; int l; @@ -1049,6 +1061,61 @@ int t_p2(signed char *t, int *ll, int fl, int *al) er = E_BIN; } } + } else + if (n==Kmvn || n==Kmvp) + { + /* special case these instructions' syntax */ + int wide=0; + i=1; + j=1; + /* write opcode */ + t[0] = ((n == Kmvp) ? 0x44 : 0x54); + while(!er && t[i]!=T_END) + { + if (wide) /* oops */ + er = E_SYNTAX; +#ifdef DEBUG_AM +fprintf(stderr, "mvn mvp: %i %i %i %i %i\n", t[0], t[i], wide, i, j); +#endif + if(!(er=a_term(t+i,&v,&l,pc[segment],&afl,&label,1))) + { +/*if(afl) printf("relocation 1 %04x at pc=$%04x, value now =$%04x\n", + afl,pc[segment],v); */ + if(afl) u_set(pc[segment]+j, afl, label, 2); + i+=l; + /* for backwards compatibility, accept the old + mv? $xxxx syntax, but issue a warning. + mv? $00xx can be legal, so accept that too. */ + if ((v & 0xff00) || (j==1 && t[i]==T_END)) { + errout(W_OLDMVNS); + wide = 1; + t[j++] = ((v & 0xff00) >> 8); + t[j++] = (v & 0x00ff); + } else { + t[j++] = v; + } + } + if (j > 3) + er=E_SYNTAX; + if(t[i]!=T_END && t[i]!=',') + er=E_SYNTAX; + else + if(t[i]==',') + i++; + } + if (j != 3) er = E_SYNTAX; /* oops */ + + /* before we leave, swap the bytes. although disassembled as + mv? src,dest it's actually represented as + mv? $ddss -- see + http://6502org.wikidot.com/software-65816-memorymove */ + i = t[2]; + t[2] = t[1]; + t[1] = i; + + *ll = j; + bl = j; + if (!w65816) er = E_65816; } else if(n==Kasc || n==Kbyt || n==Kaasc) { i=1; j=0; @@ -1174,6 +1241,7 @@ fprintf(stderr, "Kdsb E_DSB %i\n", j); } else if(n<=Lastbef) { +/* instruction */ if((c=t[1])=='#') { i=2; @@ -1617,7 +1685,7 @@ static int t_conv(signed char *s, signed char *t, int *l, int pc, int *nk, } - if((n & 0xff) <=Lastbef) + if(n != Kmvn && n != Kmvp && ((n & 0xff) <=Lastbef)) mk=1; /* 1= nur 1 Komma erlaubt *//* = only 1 comma ok */ } diff --git a/xa/tests/README b/xa/tests/README index 22c5f67..3490ae2 100644 --- a/xa/tests/README +++ b/xa/tests/README @@ -15,7 +15,7 @@ adrm/ Addressing mode test (especially the optimizer and quantity nonl/ Patryk's no-new-line-on-last-line cases ;) fordef/ Optimizer warnings for forward defined labels relocundef/ Tests for the detection of undefined references during a - reloc65 export. + reloc65 export ldoreloc/ Test case for the relocation table reading of ldo when undef'd refs are involved comcom/ Comments-with-comments-with-commands-etc. for testing -M @@ -23,10 +23,15 @@ recmac/ Recursive macro evaluation testing openpp/ Testing of open #if*s in pp cpp/ Random preprocessor tests, mostly crap incerr/ 1) .xl/.al should error without -w 2) error should be in - the correct file + the correct file ('816) binclude/ Binary include code with some weird casing chppch/ Changing preprocessor characters (-p) charset/ Tests of when charsets should be honoured and when not +mvnmvp/ Test MVN MVP unusual addressing mode ('816) +dos51/ Regression test, label scoping, "real world code" +cpktest/ Regression test, label listing, "real world code" +op816/ Regression test for '816 opcodes (thanks Alessandro Gatti) +branch/ Branch range test Cameron Kaiser, AndrĂ© Fachat diff --git a/xa/tests/adrm/a.o65 b/xa/tests/adrm/a.o65 deleted file mode 100644 index 218516c921d89e81e10c67e8c7bb4ce449844e2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50 vcmZQzX=R1LURDMWN^S3FWnchf=hXHDpGSXU9{ri=qr(!T!@`ho;bH;+WtI?j diff --git a/xa/tests/branch/Makefile b/xa/tests/branch/Makefile new file mode 100644 index 0000000..bc4cfd4 --- /dev/null +++ b/xa/tests/branch/Makefile @@ -0,0 +1,9 @@ +default: + # xa should not allow this to happen. if it does, this test is no good. + ../../xa bor.s || exit 0 && exit 1 + # expected-to-fail tests did fail. should be no more errors now. + ../../xa -w bir.s -o test.o + ../hextool -cmp=bir.ok < test.o + +clean: + rm -f *.o diff --git a/xa/tests/branch/bir.ok b/xa/tests/branch/bir.ok new file mode 100644 index 0000000000000000000000000000000000000000..d624a13956a003faa1ddc86a1b14eed2ca0b342f GIT binary patch literal 140 bcmbQhaG{260Ktcb4Sx!L1^f{BX7B|75NZs) literal 0 HcmV?d00001 diff --git a/xa/tests/branch/bir.s b/xa/tests/branch/bir.s new file mode 100644 index 0000000..7449314 --- /dev/null +++ b/xa/tests/branch/bir.s @@ -0,0 +1,14 @@ +/* just in range */ +bcc pdq +pdq +bne xyz + +.dsb 124,6 + +xyz +beq pdq +bcs xyz +bvs xyz +bvc xyz +bpl xyz +bmi xyz diff --git a/xa/tests/branch/bor.s b/xa/tests/branch/bor.s new file mode 100644 index 0000000..bf01558 --- /dev/null +++ b/xa/tests/branch/bor.s @@ -0,0 +1,14 @@ +/* just in range */ +bcc pdq +pdq +bne xyz + +.dsb 125,6 + +xyz +beq pdq +bcs xyz +bvs xyz +bvc xyz +bpl xyz +bmi xyz diff --git a/xa/tests/chardelimiter/a.o65 b/xa/tests/chardelimiter/a.o65 deleted file mode 100644 index a47bbe1..0000000 --- a/xa/tests/chardelimiter/a.o65 +++ /dev/null @@ -1 +0,0 @@ -©A©A1234512345"''" \ No newline at end of file diff --git a/xa/tests/chardelimiter/delimtest.a65 b/xa/tests/chardelimiter/delimtest.a65 deleted file mode 100644 index c7b3a84..0000000 --- a/xa/tests/chardelimiter/delimtest.a65 +++ /dev/null @@ -1,16 +0,0 @@ - - *=$033c - - lda #"A" - lda #'A' - - .asc "12345" - .asc '12345' - - .asc "^"" ; ^ is escape character - .asc '^'' - .asc "'" - .asc '"' - - .asc "^1" - diff --git a/xa/tests/charset/a.o65 b/xa/tests/charset/a.o65 deleted file mode 100644 index 72ae310bd9c52e8770e54416c85064bafc0c4080..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87 zcmZRW5R#EutN=tM8L0|Isfj7MsS0Tbv69r{5~DPK|0KsCxBPsk#3BgWF_8vz>Rwk}Y1OPXb9@PK< diff --git a/xa/tests/charset/test.asm b/xa/tests/charset/test.asm deleted file mode 100644 index 645b528..0000000 --- a/xa/tests/charset/test.asm +++ /dev/null @@ -1,16 +0,0 @@ - .word $9000 - * = $9000 - - w = 10 -.bin 0,10+w,"README.1st" -.bin 0,10,"README.1st" -#include "test2.s" -.byt "FooBar" -.aasc "FooBar" -.asc "FooBar",65,97,10 -.aasc "FooBar" -.bin 0,10,"README.1st" -.aasc "Barfoo",65,97,10 - -lda #'A' -lda #"A" diff --git a/xa/tests/chppch/a.o65 b/xa/tests/chppch/a.o65 deleted file mode 100644 index 64845fb..0000000 --- a/xa/tests/chppch/a.o65 +++ /dev/null @@ -1 +0,0 @@ -` \ No newline at end of file diff --git a/xa/tests/chppch/ok.out b/xa/tests/chppch/ok.out index 98f7f93..6e25007 100644 --- a/xa/tests/chppch/ok.out +++ b/xa/tests/chppch/ok.out @@ -1,5 +1,3 @@ -Copyright (C) 1989-2014 Andre Fachat, Jolse Maginnis, David Weinehall -and Cameron Kaiser. 12+12=12+12=24 10+10=10+10=20 5+5=5+5=10 diff --git a/xa/tests/chppch/test.out b/xa/tests/chppch/test.out deleted file mode 100644 index dd4cdaa..0000000 --- a/xa/tests/chppch/test.out +++ /dev/null @@ -1,10 +0,0 @@ -# 1 "test.c" -# 1 "qwerty.h" 1 - rts - -#print 12+12 -~print 10+10 -# 1 "test.c" 2 - - -~print 5+5 diff --git a/xa/tests/comcom/a.o65 b/xa/tests/comcom/a.o65 deleted file mode 100644 index 579a01e5e8fea0a87ceebd78970dfd59876e205f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9 QcmZQLuyV4(rT+;I02TiPjsO4v diff --git a/xa/tests/cpktest/Makefile b/xa/tests/cpktest/Makefile new file mode 100644 index 0000000..e442ee9 --- /dev/null +++ b/xa/tests/cpktest/Makefile @@ -0,0 +1,10 @@ +default: + ../../xa -l test.l -o test.o pack_eng.a65 + cmp test.l english.l || exit 1 + ../hextool -cmp=eng.ok < test.o + + ../../xa -l test.l -o test.o pack_ger.a65 + cmp test.l deutsch.l || exit 1 + ../hextool -cmp=de.ok < test.o +clean: + rm -f *.o test.l diff --git a/xa/tests/cpktest/c64def.def b/xa/tests/cpktest/c64def.def new file mode 100644 index 0000000..fb3da4a --- /dev/null +++ b/xa/tests/cpktest/c64def.def @@ -0,0 +1,309 @@ + + +/* VIC 6567 */ + +#define VIC_S0_X 0 +#define VIC_S0_Y 1 +#define VIC_S1_X 2 +#define VIC_S1_Y 3 +#define VIC_S2_X 4 +#define VIC_S2_Y 5 +#define VIC_S3_X 6 +#define VIC_S3_Y 7 +#define VIC_S4_X 8 +#define VIC_S4_Y 9 +#define VIC_S5_X 10 +#define VIC_S5_Y 11 +#define VIC_S6_X 12 +#define VIC_S6_Y 13 +#define VIC_S7_X 14 +#define VIC_S7_Y 15 +#define VIC_SP_MSB 16 +#define VIC_SR1 17 +#define VIC_IRQ_RASTER 18 +#define VIC_LP_X 19 +#define VIC_LP_Y 20 +#define VIC_SP_EN 21 +#define VIC_SR2 22 +#define VIC_SP_EXPY 23 +#define VIC_BASEADR 24 +#define VIC_IRR 25 +#define VIC_IMR 26 +#define VIC_SP_PRIOR 27 +#define VIC_SP_MCOLOR 28 +#define VIC_SP_EXPX 29 +#define VIC_SP_SCOLL 30 +#define VIC_SP_BCOLL 31 +#define VIC_EXTCOL 32 +#define VIC_BCKCOL0 33 +#define VIC_BCKCOL1 34 +#define VIC_BCKCOL2 35 +#define VIC_BCKCOL3 36 +#define VIC_SP_MCOL0 37 +#define VIC_SP_MCOL1 38 +#define VIC_S0_COL 39 +#define VIC_S1_COL 40 +#define VIC_S2_COL 41 +#define VIC_S3_COL 42 +#define VIC_S4_COL 43 +#define VIC_S5_COL 44 +#define VIC_S6_COL 45 +#define VIC_S7_COL 46 + +#define COL_SCHWARZ 0 +#define COL_WEISS 1 +#define COL_ROT 2 +#define COL_TUERKIS 3 +#define COL_VIOLETT 4 +#define COL_GRUEN 5 +#define COL_BLAU 6 +#define COL_GELB 7 +#define COL_ORANGE 8 +#define COL_BRAUN 9 +#define COL_HELLROT 10 +#define COL_GRAU1 11 +#define COL_GRAU2 12 +#define COL_HELLGRUEN 13 +#define COL_HELLBLAU 14 +#define COL_GRAU3 15 + +#define VIC $d000 + + +/* SID 6581 */ + +#define SID_0FREQL 0 +#define SID_0FREQH 1 +#define SID_0PULSL 2 +#define SID_0PULSH 3 +#define SID_0SR 4 +#define SID_0ATTDEC 5 +#define SID_0SUSREL 6 +#define SID_1FREQL 7 +#define SID_1FREQH 8 +#define SID_1PULSL 9 +#define SID_1PULSH 10 +#define SID_1SR 11 +#define SID_1ATTDEC 12 +#define SID_1SUSREL 13 +#define SID_2FREQL 14 +#define SID_2FREQH 15 +#define SID_2PULSL 16 +#define SID_2PULSH 17 +#define SID_2SR 18 +#define SID_2ATTDEC 19 +#define SID_2SUSREL 20 +#define SID_FILTL 21 +#define SID_FILTH 22 +#define SID_SR1 23 +#define SID_SR2 24 + +#define SID $d800 + + +/* CIA 6526 */ + +#define CIA_DRA 0 +#define CIA_DRB 1 +#define CIA_DDRA 2 +#define CIA_DDRB 3 +#define CIA_TAL 4 +#define CIA_TAH 5 +#define CIA_TBL 6 +#define CIA_TBH 7 +#define CIA_TOD_THS 8 +#define CIA_TOD_SEC 9 +#define CIA_TOD_MIN 10 +#define CIA_TOD_HR 11 +#define CIA_SDR 12 +#define CIA_ICR 13 +#define CIA_CRA 14 +#define CIA_CRB 15 + +#define CIA1 $dc00 +#define CIA2 $dd00 + + +/* ACIA 6551 */ + +#define ACIA_DR 0 +#define ACIA_SR 1 +#define ACIA_CMD 2 +#define ACIA_CTRL 3 + +#define ACIA $d600 + + +/* Basic */ + +#define INT $14 +#define PRGANF $2b +#define VARANF $2d +#define ARRANF $2f +#define ARREND $31 +#define STRANF $33 +#define STRPTR $35 +#define RAMEND $37 + +#define VARNAME $45 +#define VARADR $47 + +#define AKKU3 $57 +#define AKKU4 $5c + +#define FAC $61 +#define ARG $69 + + +#define CHRGET $73 +#define CHRGOT $79 +#define PRGPTR $7a + +#define V_ERR $0300 +#define V_WARM $0302 +#define V_CONV2CODE $0304 +#define V_CONV2ASC $0306 +#define V_GETBEFADR $0308 +#define V_GETAUSDR $030a + +#define SYS_AKKU $030c +#define SYS_XR $030d +#define SYS_YR $030e +#define SYS_SR $030f + +#define READY $a474 +#define LINEIN $a560 +#define INTOUT $bdcd + +/* Betriebssystem */ + +#define STATUS $90 + +#define FNAMLEN $b7 +#define LOGFNR $b8 +#define SECADR $b9 +#define DEVADR $ba +#define FNAMPTR $bb + +#define IOANF $c1 +#define IOEND $c3 + +#define LASTKEY $c5 +#define NUMKEY $c6 +#define REVFL $c7 +#define INLINEEND $c8 +#define INZEILE $c9 +#define INSPALTE $ca +#define PRESSEDKEY $cb +#define CRSRFLASH $cc +#define CRSRFLASHCNT $cd +#define CHARUNDERCRSR $ce +#define CRSRFLASHFL $cf +#define KEYINPUTFL $d0 +#define LINEADR $d1 +#define CRSRSPALTE $d3 +#define HKFL $d4 +#define LENGTHOFLINE $d5 +#define CRSRZEILE $d6 +#define DIV $d7 +#define NUMOFINS $d8 + +#define RS232INBUFPTR $f7 +#define RS232OUTBUFPTR $f9 + +#define P1 $fb /* freier Pointer */ +#define P2 $fd /* freier Pointer */ + +#define INBUF $200 + +#define V_USR $0311 +#define V_IRQ $0314 +#define V_BRK $0316 +#define V_NMI $0318 +#define V_OPEN $031a +#define V_CLOSE $031c +#define V_CHKIN $031e +#define V_CKOUT $0320 +#define V_CLRCH $0322 +#define V_INPUT $0324 +#define V_OUTPUT $0326 +#define V_STOP $0328 +#define V_GET $032a +#define V_CLALL $032c +#define V_WARMSTART $032e +#define V_LOAD $0330 +#define V_SAVE $0332 + +#define SENDNAM $f3d5 +#define CLSFIL $f642 + +#define INICIA $ff84 +#define INIRAM $ff87 +#define INIIO $ff8a +#define INIIOVEC $ff8d +#define SETST $ff90 +#define SECLISTEN $ff93 +#define SECTALK $ff96 +#define RAMEND $ff99 +#define RAMSTART $ff9c +#define GETKEY $ff9f +#define IECTIMEOUT $ffa2 +#define IECIN $ffa5 +#define IECOUT $ffa8 +#define UNTALK $ffab +#define UNLISTEN $ffae +#define LISTEN $ffb1 +#define TALK $ffb4 +#define GETST $ffb7 +#define SETFPAR $ffba +#define SETFNPAR $ffbd +#define OPEN $ffc0 +#define CLOSE $ffc3 +#define CHKIN $ffc6 +#define CKOUT $ffc9 +#define CLRCH $ffcc +#define BASIN $ffcf +#define BSOUT $ffd2 +#define LOAD $ffd5 +#define SAVE $ffd8 +#define SETTI $ffdb +#define GETTI $ffde +#define GETSTP $ffe1 +#define GET $ffe4 +#define CLALL $ffe7 +#define INCTI $ffea +#define SCREEN $ffed +#define CURSOR $fff0 +#define GETIOBASE $fff3 + + +/* Terminal-Commands */ + +#define TC_SCO 8 +#define TC_SCF 9 + +#define TC_LF 13 /*10*/ +#define TC_CR 13 + +#define TC_LCH $0e + +#define TC_REV 18 + +#define TC_F1 $85 +#define TC_F3 $86 +#define TC_F5 $87 +#define TC_F7 $88 +#define TC_F2 $89 +#define TC_F4 $8a +#define TC_F6 $8b +#define TC_F8 $8c + +#define TC_HCH $8e + +#define TC_REO $92 +#define TC_FF $93 + +#define TC_HELLGRUEN $99 + +#define TC_CRL $9d + diff --git a/xa/tests/cpktest/de.ok b/xa/tests/cpktest/de.ok new file mode 100644 index 0000000000000000000000000000000000000000..07fadac4bc4751b48bb1d3b306303ccb0522e0c9 GIT binary patch literal 2245 zcma)7Z)j6j6u(W<`kLgWFE9O*wpveXajp1&>ZA;|v_6}-XYBgNQQ3z#hgkMyAN)Kv z&~($8?Wtq4V~!A-ZdaQUL4+0x72A?GbiN7Ow}F$P9b$awtcxVe%q;dk50C&{m$3)YIcTY^5HxerGKwN^OcK0o=95T5){2x}WXhsuAe zXp#;}i@qxrKUKtz4}N^|lM|o%gfpVpvU^J_ban6R><;bStH6Q29`=rQg*x6)qHKF> zD}=f`!jb(D>g#!`ez_Ii>{C>=YjrdSRYU>{?#y~h z;t+^82B6Gql$dMamvTK%ukc!>8v|nyV1*UorVVdbP#0XaHToUjRlh3li*_QS-bklX zM7&|Y(%lo;7bV34ghLnz+WUKz9#}&#R6`)XI>6l}$gw=e%xoLZ4>bqwturjttKYc z%FPSX?R2dSUh&5|*?g>Sbfd<^B}xJ`iPVXJ=r=rGdUar|VHs_UChiLLDv_r>gqA&< zqOGqHrMolI-n$Gc*AOtBxzzy;0acFYq#@$4DzZkK}c!4IZu$H ztsCAEGo^6Y8`O4cFf694{nmQ8?#-;GC5VrbSRQWpVvB=+!(q>zd@6sv+OOYVf{bNU zwUkCj6CSKBX1;K7k+s+>4ll3_AHZc##t&b3S!v7Qh*v%Cfv>&1|MUs>&mL?nH1XYi zUHv#%KzIda|FZ%Y7ncg~_-O&21Lfj)a=t{ZrI_JZuzN-`HbiVE?~J0z@lfgULI=+{PT{6n?=?8zE`_FB+ymWHv3 z16tAvhCLeeU#sz3YsYK-h!(+Boek5sp!#k~FMl0h*r4jW1K-01cUE18GZE(=5xbV2 zmeluH$S|&W9|z!)P2Yzv3l&Y-Ve|+o8;|9Rg71fL!5%O+n+`T{>IXh_SM8@~nAyP! z`1w(40zIV0iyjhAJl-ihw8Of26NTBlX^ku}E`epo6NYR$)qWo;j3)CQj&N~gIX9$i z)DP#4CTqp1#q5+{zem@jz}*&hz%SEhvDFo^ZLfF%n|ZYWjNgD7ZH^O1vSg4k6VgpN5|)Qi&O_S9PAS)-U`b0% zHdr~w_UA?_=jb|SLO1d!mzVjhgmaWSVdthLoH4_zmr@};o|4jV2vJt@aOJA%)ri literal 0 HcmV?d00001 diff --git a/xa/tests/cpktest/deutsch.l b/xa/tests/cpktest/deutsch.l new file mode 100644 index 0000000..2660a28 --- /dev/null +++ b/xa/tests/cpktest/deutsch.l @@ -0,0 +1,180 @@ +basicend, 0x080b, 1, 0x0000 +iniscreen, 0x10b6, 1, 0x0000 +inipar, 0x1085, 1, 0x0000 +menu1, 0x0819, 2, 0x0000 +m1atxt, 0x0897, 2, 0x0000 +Txtout, 0x10a0, 1, 0x0000 +quellpfad, 0x10c6, 1, 0x0000 +m1btxt, 0x08e2, 2, 0x0000 +quelldrv, 0x10c4, 1, 0x0000 +m1ctxt, 0x08f6, 2, 0x0000 +zielpfad, 0x10ee, 1, 0x0000 +m1dtxt, 0x0908, 2, 0x0000 +zieldrv, 0x10c5, 1, 0x0000 +m1etxt, 0x091c, 2, 0x0000 +next, 0x085a, 2, 0x0000 +l1, 0x0861, 2, 0x0000 +befkeys, 0x088f, 2, 0x0000 +exe, 0x086d, 2, 0x0000 +Anzbefs, 0x0008, 2, 0x0000 +exec, 0x0873, 2, 0x0000 +madr, 0x087f, 2, 0x0000 +pack, 0x0b2f, 1, 0x0000 +unpack, 0x0966, 1, 0x0000 +quelle, 0x0fe2, 1, 0x0000 +ziel, 0x1023, 1, 0x0000 +switch, 0x1063, 1, 0x0000 +dir, 0x0efe, 1, 0x0000 +qdrv, 0x0fc2, 1, 0x0000 +zdrv, 0x0fd2, 1, 0x0000 +openarcrd, 0x0afc, 1, 0x0000 +cls, 0x0997, 12, 0x0000 +rcnt, 0x1320, 1, 0x0000 +rbyte, 0x0c06, 1, 0x0000 +verr, 0x099d, 12, 0x0000 +loop, 0x097a, 12, 0x0000 +unpackfile, 0x09d6, 1, 0x0000 +t1, 0x09c1, 12, 0x0000 +waitkey, 0x0f5c, 1, 0x0000 +verrtxt, 0x09a7, 12, 0x0000 +wcnt, 0x131e, 1, 0x0000 +l1, 0x09e7, 15, 0x0000 +endx, 0x0a20, 15, 0x0000 +filetab, 0x1324, 1, 0x0000 +endnam, 0x09fd, 15, 0x0000 +ask, 0x0a84, 15, 0x0000 +nounpack, 0x0a23, 15, 0x0000 +tok, 0x0ec6, 1, 0x0000 +fxopen, 0x0ab4, 1, 0x0000 +Getzst, 0x0d67, 1, 0x0000 +xa, 0x0a2a, 15, 0x0000 +lo, 0x0a2e, 15, 0x0000 +end, 0x0a83, 15, 0x0000 +tno, 0x0ebd, 1, 0x0000 +cls, 0x0a64, 15, 0x0000 +xb, 0x0a5a, 15, 0x0000 +wxanz, 0x121a, 1, 0x0000 +wxbyt, 0x1219, 1, 0x0000 +ly, 0x0a4c, 15, 0x0000 +wbyte, 0x0d0c, 1, 0x0000 +wbuf, 0x0d22, 1, 0x0000 +t1, 0x0a9c, 15, 0x0000 +incwcnt, 0x0aab, 1, 0x0000 +l1, 0x0ab3, 20, 0x0000 +l1, 0x0ab8, 21, 0x0000 +l2, 0x0acf, 21, 0x0000 +l1a, 0x0ac9, 21, 0x0000 +l1b, 0x0acb, 21, 0x0000 +l3, 0x0ad3, 21, 0x0000 +err, 0x0afb, 21, 0x0000 +clrwrbuf, 0x0d03, 1, 0x0000 +l0, 0x0afe, 22, 0x0000 +l1, 0x0b08, 22, 0x0000 +err, 0x0b2d, 22, 0x0000 +Getqst, 0x0d61, 1, 0x0000 +clrrdbuf, 0x0c67, 1, 0x0000 +getlist, 0x0da4, 1, 0x0000 +anzfiles, 0x1116, 1, 0x0000 +end, 0x0b63, 23, 0x0000 +openarcwr, 0x0ccd, 1, 0x0000 +cls, 0x0b5b, 23, 0x0000 +l1, 0x0b45, 23, 0x0000 +setfadr, 0x0ecf, 1, 0x0000 +packfile, 0x0b67, 1, 0x0000 +lft, 0x0bac, 24, 0x0000 +l1, 0x0b70, 24, 0x0000 +fopen, 0x0bb6, 1, 0x0000 +le, 0x0b97, 24, 0x0000 +clrwxbyt, 0x0c94, 1, 0x0000 +l2, 0x0b89, 24, 0x0000 +l3, 0x0b94, 24, 0x0000 +wxbyte, 0x0c73, 1, 0x0000 +savwxbyt, 0x0c9a, 1, 0x0000 +l1, 0x0bba, 26, 0x0000 +l2, 0x0bd1, 26, 0x0000 +l1a, 0x0bcb, 26, 0x0000 +l1b, 0x0bcd, 26, 0x0000 +l3, 0x0bd5, 26, 0x0000 +err, 0x0bfc, 26, 0x0000 +incrcnt, 0x0bfd, 1, 0x0000 +l1, 0x0c05, 27, 0x0000 +ro, 0x121c, 1, 0x0000 +ri, 0x121b, 1, 0x0000 +leerbuf, 0x0c16, 28, 0x0000 +rb, 0x121e, 1, 0x0000 +rf, 0x121d, 1, 0x0000 +ldbuf, 0x0c1d, 28, 0x0000 +lok, 0x0c2e, 28, 0x0000 +l0, 0x0c47, 28, 0x0000 +le, 0x0c5c, 28, 0x0000 +add, 0x0c8d, 31, 0x0000 +ad2, 0x0c83, 31, 0x0000 +adx, 0x0c90, 31, 0x0000 +nosav, 0x0ccc, 33, 0x0000 +savs, 0x0cb6, 33, 0x0000 +l1, 0x0caa, 33, 0x0000 +l0, 0x0ccf, 34, 0x0000 +l1, 0x0cd9, 34, 0x0000 +err, 0x0d01, 34, 0x0000 +wi, 0x1117, 1, 0x0000 +wo, 0x1118, 1, 0x0000 +wb, 0x1119, 1, 0x0000 +nowr, 0x0d21, 36, 0x0000 +l1, 0x0d2a, 37, 0x0000 +end, 0x0d55, 37, 0x0000 +l0, 0x0d4e, 37, 0x0000 +Getst, 0x0d6a, 1, 0x0000 +l1, 0x0d87, 38, 0x0000 +l2, 0x0d95, 38, 0x0000 +err, 0x0d9f, 38, 0x0000 +l4x, 0x0da1, 39, 0x0000 +l4, 0x0e7d, 39, 0x0000 +setdirnam, 0x0f62, 1, 0x0000 +l0, 0x0dc4, 39, 0x0000 +l1, 0x0dc6, 39, 0x0000 +la, 0x0de0, 39, 0x0000 +l3x, 0x0dee, 39, 0x0000 +l3, 0x0e59, 39, 0x0000 +lb, 0x0e01, 39, 0x0000 +lc, 0x0e16, 39, 0x0000 +ld, 0x0e1b, 39, 0x0000 +lf, 0x0e32, 39, 0x0000 +lg, 0x0e46, 39, 0x0000 +testkeys, 0x0e83, 1, 0x0000 +lh, 0x0e50, 39, 0x0000 +l2, 0x0e69, 39, 0x0000 +l5, 0x0e76, 39, 0x0000 +ok, 0x0e8c, 40, 0x0000 +t1, 0x0ead, 40, 0x0000 +ja, 0x0ea2, 40, 0x0000 +l0, 0x0f19, 45, 0x0000 +l1, 0x0f1b, 45, 0x0000 +l4, 0x0f56, 45, 0x0000 +l3, 0x0f35, 45, 0x0000 +l2, 0x0f45, 45, 0x0000 +l5, 0x0f52, 45, 0x0000 +p1, 0x0014, 46, 0x0000 +l1, 0x0f6d, 46, 0x0000 +nodp, 0x0f7b, 46, 0x0000 +dp, 0x0f81, 46, 0x0000 +dp1, 0x0f83, 46, 0x0000 +end, 0x0f9b, 46, 0x0000 +l2a, 0x0f93, 46, 0x0000 +l2, 0x0f95, 46, 0x0000 +ok, 0x0fd1, 47, 0x0000 +ok, 0x0fe1, 48, 0x0000 +quelltxt, 0x1001, 49, 0x0000 +q1, 0x0fee, 49, 0x0000 +end, 0x1000, 49, 0x0000 +quelltxt, 0x1042, 51, 0x0000 +q1, 0x102f, 51, 0x0000 +end, 0x1041, 51, 0x0000 +l1, 0x1071, 53, 0x0000 +noval, 0x1097, 54, 0x0000 +ok, 0x1099, 54, 0x0000 +p, 0x0022, 55, 0x0000 +l1, 0x10a4, 55, 0x0000 +le, 0x10b5, 55, 0x0000 +sysmem, 0x1324, 1, 0x0000 +ecnt, 0x1322, 1, 0x0000 +ende, 0x10c4, 1, 0x0000 diff --git a/xa/tests/cpktest/eng.ok b/xa/tests/cpktest/eng.ok new file mode 100644 index 0000000000000000000000000000000000000000..a13d1603bcc17ea926c1c99f16bf3a0a59aa83bf GIT binary patch literal 2259 zcma)7Z)jUp6u(W=ElKm5mzQ=_K|Jf-jb4bn}vZ7bWjE|LGY{l zuvG0DecQmTA1X04)mz(|f*>sv3L7&|I(?+|<6z3@Dr4DWa~+b@=eaj&UB?6;;pNIPNNBqZ*^)Y3;4+3xXNBmv= z@Ma`@4E&LkRmPV{sI3d#dM==Vpu1O3}= z4{oXpwoovBbqk><66op=M+O*f2aBXD=nr)Vidf(e9WI6-2m=@jbOpoc5_;u;zb_yV zFdeC8N@A^^SepmzPOU_*gU?c={C8q?iQ=`VYgQf&M@r)Dra5?1{B_I98mT&!NNA{_)&syJt105n~6s zkh6ArA@0EXp)>7>UX6iNu!@_}JpAB*GeXL#R>;E+x>(Q?)FaG3?FmM1cgDPuMyib( zCN@fSdGYt@MhRTP&t6G?EFW;7M#m*eHmDb9DYBt)?r*xqGt<09)vE|wRqc@j;2mfS z`Ccd8SlPZULfK}IUYc$3C`hJqE-#J}i{VOZorYCw(=F#K7rp8q6P0l?*X|i3mbJ7- z^gn+ZPLQ|-7ED@-9U3ozc@q}RlofUe)rd2Y zeitvtykg|}*$q}(moT1Z5k7#q@{}8{I9XbEz=uwGq#VYayzul1$7e6r4~phkb=aX$^8Ex|@Q%%y6Pcm$C%~G~Ws#d1=NQR|D!4~pK zu_h^Dg&QUkRpA#im{binl`)9!#99F$e(%|`Uh7uZ8tuf*Kqdm7DJG;7L(Eu}p%oKJO@!ZU*gn3{sR z@Cg<)|5QQit|r)wdbaq&^s>l0yNovhXIbx#HMo_jdiQ9fJ3UhGPA@gM^|BxqaZpK= zf@V%NxR>hPM#EgA8`&bcs;fbI5_a89s`fYV4-2&G?%+2t<4DUb*b_01h}@Owj3~dy zTn2H)>o^GCoAfMvQOIc03?d>VO+1o23)m0gTXRs`t6Nyd$>%B%uFg#_Gqck!`1Mh8 z9ubmrMTB@M9_=I^*l|_Qpl~Cn8xwgpL|_YeUX%1v`BViev>N>$ws5g!`CLevs2|U1 zHO9`18|g*2dXF}vz+nqJU_6ZGQANqcjY;&ua6o^2`!%DCd*QES9)>D75&bViL}5bJ zUz#k;nNt;Tlt&ITl1`h&nS7`%w|OFG0mx#QCln{D%oWbyREoh78Ppc_cSO;bVV$q z7=t6d*r-0D1Z71iTu#sv>OI~Mp}@&!E>U*7b_#?Z*^YweYzrm-Je2L%YY_zl#WDO@ zMvN_s39_&v1{d<;*ortfmKWDa:jsr Txtout:.) +#define Aout(a) .(:lda #b:jsr Txtout:jmp c:b .byt a,0:c .) +#define Ibout(a) .(:ldx a:lda #0:jsr INTOUT:.) +#define Iout(a) .(:ldx a:lda a+1:jsr INTOUT:.) + +#define PFADLEN 40 +#define FN_WR 3 +#define FN_RD 4 +#define XCODE $f7 +#define Version 1 + + .( + .word $0801 + *=$0801 + + .word basicend,10 + .byt $9e,"2064",0 ;sys $0810 +basicend .word 0 + .byt 0,0,0 + + .( + jsr CLRCH + jsr iniscreen + jsr inipar +menu1 + Tout(m1atxt) + Tout(quellpfad) + Tout(m1btxt) + Ibout(quelldrv) + Tout(m1ctxt) + Tout(zielpfad) + Tout(m1dtxt) + Ibout(zieldrv) + Tout(m1etxt) + +next jsr GET + beq next + + ldx #0 +l1 cmp befkeys,x + beq exe + inx + cpx #Anzbefs + bcc l1 + bcs next + +exe jsr exec + jmp menu1 + +exec txa + asl + tax + lda madr+1,x + pha + lda madr,x + pha + rts + +madr .word pack-1,unpack-1,quelle-1,ziel-1,switch-1,dir-1,qdrv-1,zdrv-1 +befkeys .asc TC_F1,TC_F2,TC_F3,TC_F5,TC_F8,TC_F7,TC_F4,TC_F6 +Anzbefs =8 + +m1atxt .asc TC_LCH,TC_SCO,TC_FF,TC_LF,TC_LF + .asc "(F1) PACK PROGRAMMS",TC_CR,TC_LF + .asc "(F2) EXTRACT FROM ARCHIVE",TC_CR,TC_LF + .asc "(F3) SOURCEPATH/ARC:",0 +m1btxt .asc TC_CR,TC_LF + .asc "(F4) SOURCEDEVICE:",0 +m1ctxt .asc TC_CR,TC_LF + .asc "(F5) TARGETPATH/ARC:",0 +m1dtxt .asc TC_CR,TC_LF + .asc "(F6) TARGETDEVICE :",0 +m1etxt .asc TC_CR,TC_LF + .asc "(F7) SOURCEDIRECTORY",TC_CR,TC_LF + .asc "(F8) EXCHANGE TARGET AND SOURCE",TC_CR,TC_LF + .asc "YOUR CHOICE PLEASE",TC_CR,0 + .) + +unpack .( + jsr openarcrd + bcs cls + + lda #0 + sta rcnt + sta rcnt+1 + + jsr rbyte + cmp #Version + bne verr + +loop jsr unpackfile + bcc loop + + Tout(t1) + lda rcnt+1 + ldx rcnt + jsr INTOUT + lda #TC_CR + jsr BSOUT + jsr waitkey + +cls lda #FN_RD + jsr CLOSE + rts + +verr Tout(verrtxt) + jmp cls +verrtxt .asc "UNKNOWN ARCHIVE VERSION",0 + +t1 .asc "ARCHIVE HAD BYTES #",0 + .) + +unpackfile + .( + lda #0 + sta wcnt + sta wcnt+1 + lda #TC_CR + jsr BSOUT + ldy #0 + sty P1 +l1 jsr rbyte + bcs endx + ldy P1 + sta filetab,y + inc P1 + cmp #0 + beq endnam + jsr BSOUT + jmp l1 + +endnam Tout(ask) + jsr waitkey + cmp #"J" + bne nounpack + Tout(tok) + lda #<-1 + sta P1+1 + jsr fxopen + jsr Getzst + bcs xa + bcc lo + +endx jmp end +nounpack Tout(tno) +xa lda #0 + sta P1+1 + +lo jsr rbyte + bcs cls + cmp #XCODE + bne xb + jsr rbyte + sta wxanz + cmp #0 + clc + beq cls + jsr rbyte + sta wxbyt + bit P1+1 + bpl lo +ly lda wxbyt + jsr wbyte + dec wxanz + bne ly + jmp lo + +xb bit P1+1 + bpl lo + jsr wbyte + jmp lo + +cls php + jsr wbuf + lda #FN_WR + jsr CLOSE + + Tout(t1) + lda wcnt+1 + ldx wcnt + jsr INTOUT + lda #TC_CR + jsr BSOUT + + plp +end rts + +ask .asc TC_CR,"EXTRACT FILE (Y/N)?",0 + +t1 .asc "GIVES BYTES #",0 + .) + +incwcnt .( + inc wcnt + bne l1 + inc wcnt+1 +l1 rts + .) + +fxopen .( + ldy #0 + sty INT +l1 lda zielpfad,y + sta INBUF,y + beq l2 + iny + cmp #":" + beq l1a + cmp #"/" + bne l1b +l1a sty INT +l1b cpy #PFADLEN + bcc l1 + +l2 ldx INT + ldy #0 +l3 lda filetab,y + sta INBUF,x + inx + iny + cmp #0 + bne l3 + dex + txa + ldx #INBUF + jsr SETFNPAR + lda #FN_WR + ldx zieldrv + ldy #1 + jsr SETFPAR + + jsr OPEN + bcs err + jsr clrwrbuf + clc +err rts + .) + +openarcrd .( + ldy #0 +l0 lda quellpfad,y + beq l1 + iny + cpy #PFADLEN + bcc l0 +l1 cpy #0 + beq err + tya + ldx #quellpfad + jsr SETFNPAR + lda #FN_RD + ldx quelldrv + ldy #0 + jsr SETFPAR + jsr OPEN + bcs err + jsr Getqst + bcs err + jsr clrrdbuf + clc + rts +err sec + rts + .) + +pack .( + jsr getlist + lda anzfiles + beq end + jsr openarcwr + bcs cls + + lda #Version + jsr wbyte + + lda #0 + sta P1 +l1 jsr setfadr + sta P2 + stx P2+1 + jsr packfile + inc P1 + lda P1 + cmp anzfiles + bcc l1 + + jsr wbuf + +cls lda #FN_WR + jsr CLOSE + + jsr Getzst + +end jmp LINEIN:rts + .) + +packfile .( + Tout(lft) + + ldy #0 +l1 sty P1+1 + lda (P2),y + jsr BSOUT + jsr wbyte + ldy P1+1 + iny + cmp #0 + bne l1 + + jsr fopen + bcs le + + jsr clrwxbyt +l2 jsr rbyte + bcs l3 + jsr wxbyte + jmp l2 +l3 jsr savwxbyt + +le lda #FN_RD + jsr CLOSE + + lda #XCODE + jsr wbyte + lda #0 + jsr wbyte + + lda #TC_CR + jsr BSOUT + rts + +lft .asc TC_CR,"cOPYING ",0 + + .) + +fopen .( + ldy #0 + sty INT +l1 lda quellpfad,y + sta INBUF,y + beq l2 + iny + cmp #":" + beq l1a + cmp #"/" + bne l1b +l1a sty INT +l1b cpy #PFADLEN + bcc l1 + +l2 ldx INT + ldy #0 +l3 lda (P2),y + sta INBUF,x + inx + iny + cmp #0 + bne l3 + dex + txa + ldx #INBUF + jsr SETFNPAR + lda #FN_RD + ldx quelldrv + ldy #0 + jsr SETFPAR + + jsr OPEN + bcs err + jsr clrrdbuf + clc +err rts + .) + +incrcnt .( + inc rcnt + bne l1 + inc rcnt+1 +l1 rts + .) + +rbyte .( + ldy ro + cpy ri + beq leerbuf + lda rb,y + inc ro + clc + rts + +leerbuf lda rf + beq ldbuf + sec + rts + +ldbuf lda #0 + sta ri + sta ro + ldx #FN_RD + jsr CHKIN + lda #0 + sta STATUS + +lok jsr BASIN + + pha + lda STATUS + beq l0 + lda #"L" + jsr BSOUT + Ibout($90) + lda #TC_CR + jsr BSOUT +l0 pla + + jsr incrcnt + ldy ri + sta rb,y + iny + sty ri + iny + ;cpy ro + beq le + lda STATUS + beq lok + +le lda STATUS + sta rf + jsr CLRCH + jmp rbyte + .) + +clrrdbuf .( + lda #0 + sta ri + sta ro + sta rf + rts + .) + +wxbyte .( + ldx wxanz + beq add + inx + bne ad2 + pha + jsr savwxbyt + pla + jmp add + +ad2 cmp wxbyt + beq adx + pha + jsr savwxbyt + pla +add sta wxbyt +adx inc wxanz + + rts + .) + +clrwxbyt .( + lda #0 + sta wxanz + rts + .) + +savwxbyt .( + lda wxanz + beq nosav + cmp #4 + bcs savs + lda wxbyt + cmp #XCODE + beq savs + +l1 lda wxbyt + jsr wbyte + dec wxanz + bne l1 + rts + +savs lda #XCODE + jsr wbyte + lda wxanz + jsr wbyte + lda wxbyt + jsr wbyte + lda #0 + sta wxanz +nosav rts + .) + +openarcwr .( + ldy #0 +l0 lda zielpfad,y + beq l1 + iny + cpy #PFADLEN + bcc l0 +l1 cpy #0 + beq err + tya + ldx #zielpfad + jsr SETFNPAR + lda #FN_WR + ldx zieldrv + ldy #1 + jsr SETFPAR + jsr OPEN + bcs err + lda zieldrv + jsr Getzst + bcs err + jsr clrwrbuf + clc + rts +err sec + rts + .) + +clrwrbuf .( + lda #0 + sta wi + sta wo + rts + .) + +wbyte .( + ldy wi + sta wb,y + iny + sty wi + iny + cpy wo + bne nowr + pha + jsr wbuf + pla +nowr rts + .) + +wbuf .( + ldx #FN_WR + jsr CKOUT + ldy wo +l1 cpy wi + beq end + lda wb,y + jsr BSOUT + + lda STATUS + beq l0 + tya + pha + lda #"W" + jsr $e716 + lda $90 + ora #$40 + jsr $e716 + lda #TC_CR + jsr $e716 + pla + tay +l0 + jsr incwcnt + iny + jmp l1 +end lda #0 + sta wi + sta wo + jsr CLRCH + rts + .) + + .( +&Getqst lda quelldrv + jmp Getst +&Getzst lda zieldrv +&Getst + pha + jsr CLRCH + lda #TC_CR + jsr BSOUT + pla + jsr TALK + lda #15+$60 + jsr SECTALK + lda #0 + sta STATUS + jsr IECIN + pha + jsr BSOUT + +l1 jsr IECIN + cmp #0 + beq l2 + jsr BSOUT + lda STATUS + beq l1 +l2 jsr UNTALK + pla + cmp #"0" + bne err + clc + rts +err sec + rts + .) + +/* +showlist .( + lda #0 + sta P1 + +l1 lda P1 + cmp anzfiles + bcs le + + jsr setfadr + lda #TC_CR + jsr BSOUT + lda INT + ldy INT+1 + jsr Txtout + inc P1 + jmp l1 +le rts + .) +*/ + .( +l4x jmp l4 + +&getlist + lda #0 + sta anzfiles + + lda #TC_FF + jsr BSOUT + + jsr setdirnam + jsr SENDNAM + lda DEVADR + jsr TALK + lda SECADR + jsr SECTALK + + lda #0 + sta STATUS + ldy #3 +l0 sty P1 +l1 jsr IECIN + sta P1+1 + ldy STATUS + bne l4x + jsr IECIN + dec P1 + bne l1 + ldx P1+1 + jsr INTOUT + lda #" " + jsr BSOUT + +la jsr IECIN + cmp #0 + beq l4x + cmp #TC_REV + bne l3x + jmp l3 +l3x jsr BSOUT + cmp #34 + bne la + + lda anzfiles + jsr setfadr + sta P2 + stx P2+1 + + ldy #0 +lb sty P1 + jsr IECIN + jsr BSOUT + ldy P1 + cmp #34 + beq lc + sta (P2),y + iny + cpy #17 + bcc lb +lc lda #"," + sta (P2),y + iny + +ld sty P1 + jsr IECIN + jsr BSOUT + ldy P1 + cmp #" " + beq ld + sta P1+1 + sta (P2),y + iny + lda #0 + sta (P2),y +/* + lda #TC_CR + jsr BSOUT + lda P2+1 + ldx P2 + jsr INTOUT + lda #":" + jsr BSOUT + lda P2 + ldy P2+1 + jsr Txtout +*/ +lf tax + jsr IECIN + jsr BSOUT + cmp #" " + bne lf + cpx #"<" + beq lg + lda #" " + jsr BSOUT +lg lda #" " + jsr BSOUT + + lda P1+1 + jsr testkeys + +lh jsr IECIN + cmp #0 + bne lh + beq l2 + +l3 jsr IECIN + ldx STATUS + bne l4 + tax + beq l2 + jsr BSOUT + jmp l3 + +l2 lda #TC_CR + jsr BSOUT + jsr GET + beq l5 + jsr waitkey +l5 ldy #2 + beq l4 + jmp l0 +l4 jsr CLSFIL + jmp waitkey + .) + +testkeys .( + cmp #"P" + beq ok + cmp #"S" + beq ok + rts +ok Tout(t1) + jsr waitkey + cmp #"J" + beq ja + Tout(tno) + rts +ja Tout(tok) + inc anzfiles + rts + +t1 .asc TC_REV,"YES/NO ",TC_CRL,TC_CRL,TC_CRL + .asc TC_CRL,TC_CRL,TC_CRL,TC_CRL,0 +&tno .asc TC_REO,"NO ",0 +&tok .asc TC_REO,"YES ",0 + .) + +setfadr .( + ldx #0 + stx INT+1 + asl + rol INT+1 + asl + rol INT+1 + sta INT + ldx INT+1 + asl + rol INT+1 + asl + rol INT+1 + clc + adc INT + sta INT + txa + adc INT+1 + sta INT+1 + lda #filetab + adc INT+1 + sta INT+1 + tax + pla + rts + .) + +dir .( + lda #TC_FF + jsr BSOUT + + jsr setdirnam + jsr SENDNAM + lda DEVADR + jsr TALK + lda SECADR + jsr SECTALK + + lda #0 + sta STATUS + ldy #3 +l0 sty P1 +l1 jsr IECIN + sta P1+1 + ldy STATUS + bne l4 + jsr IECIN + dec P1 + bne l1 + ldx P1+1 + jsr INTOUT + lda #" " + jsr BSOUT +l3 jsr IECIN + ldx STATUS + bne l4 + tax + beq l2 + jsr BSOUT + jmp l3 +l2 lda #TC_CR + jsr BSOUT + jsr GET + beq l5 + jsr waitkey +l5 ldy #2 + bne l0 +l4 jsr CLSFIL + jmp waitkey + .) + +waitkey jsr GET + beq waitkey + rts + +setdirnam .( +p1 =INT + + lda #"$" + sta INBUF + ldx #1 + stx p1 + + ldy #0 +l1 lda quellpfad,y + beq nodp + cmp #":" + beq dp + iny + cpy #PFADLEN + bcc l1 +nodp lda #":" + sta INBUF,x + inx +dp ldy #0 +dp1 lda quellpfad,y + sta INBUF,x + beq end + cmp #":" + beq l2a + cmp #"/" + bne l2 +l2a stx p1 +l2 inx + iny + cpy #PFADLEN + bcc dp1 +end ldx p1 + inx + lda #"*" + sta INBUF,x + inx + lda #"." + sta INBUF,x + inx + lda #"*" + sta INBUF,x + inx + txa + ldx #INBUF + jsr SETFNPAR + lda #1 + ldx quelldrv + ldy #0 + jmp SETFPAR + .) + +qdrv .( + inc quelldrv + lda quelldrv + cmp #12 + bcc ok + lda #8 + sta quelldrv +ok rts + .) + +zdrv .( + inc zieldrv + lda zieldrv + cmp #12 + bcc ok + lda #8 + sta zieldrv +ok rts + .) + +quelle .( + Tout(quelltxt) + jsr LINEIN + ldy #0 +q1 lda INBUF,y + sta quellpfad,y + beq end + iny + cpy #PFADLEN-1 + bcc q1 + lda #0 + sta quellpfad,y +end rts + +quelltxt .asc TC_CR,"PLEASE INPUT NEW SOURCEPATH/ARCHIVE:",TC_CR,0 + .) + +ziel .( + Tout(quelltxt) + jsr LINEIN + ldy #0 +q1 lda INBUF,y + sta zielpfad,y + beq end + iny + cpy #PFADLEN-1 + bcc q1 + lda #0 + sta zielpfad,y +end rts + +quelltxt .asc TC_CR,"PLEASE INPUT NEW TARGETPATH/ARCHIVE:",TC_CR,0 + .) + +switch .( + lda quelldrv + ldx zieldrv + stx quelldrv + sta zieldrv + ldx #0 +l1 lda quellpfad,x + pha + lda zielpfad,x + sta quellpfad,x + pla + sta zielpfad,x + inx + cpx #PFADLEN + bcc l1 + rts + .) + +inipar .( + lda #0 + sta quellpfad + sta zielpfad + lda DEVADR + cmp #8 + bcc noval + cmp #12 + bcc ok +noval lda #8 +ok sta quelldrv + sta zieldrv + rts + .) + +Txtout .( +p =$22 + + sta p + sty p+1 +l1 ldy #0 + lda (p),y + beq le + jsr BSOUT + inc p + bne l1 + inc p+1 + bne l1 +le rts + .) + +iniscreen .( + lda #COL_SCHWARZ + sta VIC+VIC_EXTCOL + sta VIC+VIC_BCKCOL0 + lda #TC_HELLGRUEN + jsr BSOUT + rts + .) + +sysmem =* + +quelldrv =sysmem +zieldrv =sysmem+1 +-sysmem +=2 + +quellpfad =sysmem +zielpfad =sysmem+PFADLEN +-sysmem +=2*PFADLEN + +anzfiles =sysmem +-sysmem +=1 + +wi =sysmem +wo =sysmem+1 +-sysmem +=2 +wb =sysmem +-sysmem +=256 + +wxbyt =sysmem +wxanz =sysmem+1 +-sysmem +=2 + +ri =sysmem +ro =sysmem+1 +rf =sysmem+2 +-sysmem +=3 +rb =sysmem +-sysmem +=256 + +wcnt =sysmem +-sysmem +=2 +rcnt =sysmem +-sysmem +=2 +ecnt =sysmem +-sysmem +=2 + +filetab =sysmem +ende .) + diff --git a/xa/tests/cpktest/pack_ger.a65 b/xa/tests/cpktest/pack_ger.a65 new file mode 100644 index 0000000..c65851d --- /dev/null +++ b/xa/tests/cpktest/pack_ger.a65 @@ -0,0 +1,1070 @@ + +#include "c64def.def" + +#define Tout(a) .(:lda #a:jsr Txtout:.) +#define Aout(a) .(:lda #b:jsr Txtout:jmp c:b .byt a,0:c .) +#define Ibout(a) .(:ldx a:lda #0:jsr INTOUT:.) +#define Iout(a) .(:ldx a:lda a+1:jsr INTOUT:.) + +#define PFADLEN 40 +#define FN_WR 3 +#define FN_RD 4 +#define XCODE $f7 +#define Version 1 + + .( + .word $0801 + *=$0801 + + .word basicend,10 + .byt $9e,"2064",0 ;sys $0810 +basicend .word 0 + .byt 0,0,0 + + .( + jsr CLRCH + jsr iniscreen + jsr inipar +menu1 + Tout(m1atxt) + Tout(quellpfad) + Tout(m1btxt) + Ibout(quelldrv) + Tout(m1ctxt) + Tout(zielpfad) + Tout(m1dtxt) + Ibout(zieldrv) + Tout(m1etxt) + +next jsr GET + beq next + + ldx #0 +l1 cmp befkeys,x + beq exe + inx + cpx #Anzbefs + bcc l1 + bcs next + +exe jsr exec + jmp menu1 + +exec txa + asl + tax + lda madr+1,x + pha + lda madr,x + pha + rts + +madr .word pack-1,unpack-1,quelle-1,ziel-1,switch-1,dir-1,qdrv-1,zdrv-1 +befkeys .asc TC_F1,TC_F2,TC_F3,TC_F5,TC_F8,TC_F7,TC_F4,TC_F6 +Anzbefs =8 + +m1atxt .asc TC_LCH,TC_SCO,TC_FF,TC_LF,TC_LF + .asc "(F1) PROGRAMME ZUSAMMENPACKEN",TC_CR,TC_LF + .asc "(F2) ARCHIV AUSPACKEN",TC_CR,TC_LF + .asc "(F3) QUELLPFAD:",0 +m1btxt .asc TC_CR,TC_LF + .asc "(F4) QUELLDEVICE:",0 +m1ctxt .asc TC_CR,TC_LF + .asc "(F5) ZIELPFAD :",0 +m1dtxt .asc TC_CR,TC_LF + .asc "(F6) ZIELDEVICE :",0 +m1etxt .asc TC_CR,TC_LF + .asc "(F7) QUELLDIRECTORY",TC_CR,TC_LF + .asc "(F8) QUELLE UND ZIEL TAUSCHEN",TC_CR,TC_LF + .asc "IHRE EINGABE BITTE",TC_CR,0 + .) + +unpack .( + jsr openarcrd + bcs cls + + lda #0 + sta rcnt + sta rcnt+1 + + jsr rbyte + cmp #Version + bne verr + +loop jsr unpackfile + bcc loop + + Tout(t1) + lda rcnt+1 + ldx rcnt + jsr INTOUT + lda #TC_CR + jsr BSOUT + jsr waitkey + +cls lda #FN_RD + jsr CLOSE + rts + +verr Tout(verrtxt) + jmp cls +verrtxt .asc "UNGUELTIGE ARCHIV-VERSION",0 + +t1 .asc "ARCHIV HATTE BYTES #",0 + .) + +unpackfile + .( + lda #0 + sta wcnt + sta wcnt+1 + lda #TC_CR + jsr BSOUT + ldy #0 + sty P1 +l1 jsr rbyte + bcs endx + ldy P1 + sta filetab,y + inc P1 + cmp #0 + beq endnam + jsr BSOUT + jmp l1 + +endnam Tout(ask) + jsr waitkey + cmp #"J" + bne nounpack + Tout(tok) + lda #<-1 + sta P1+1 + jsr fxopen + jsr Getzst + bcs xa + bcc lo + +endx jmp end +nounpack Tout(tno) +xa lda #0 + sta P1+1 + +lo jsr rbyte + bcs cls + cmp #XCODE + bne xb + jsr rbyte + sta wxanz + cmp #0 + clc + beq cls + jsr rbyte + sta wxbyt + bit P1+1 + bpl lo +ly lda wxbyt + jsr wbyte + dec wxanz + bne ly + jmp lo + +xb bit P1+1 + bpl lo + jsr wbyte + jmp lo + +cls php + jsr wbuf + lda #FN_WR + jsr CLOSE + + Tout(t1) + lda wcnt+1 + ldx wcnt + jsr INTOUT + lda #TC_CR + jsr BSOUT + + plp +end rts + +ask .asc TC_CR,"DATEI AUSPACKEN (J/N)?",0 + +t1 .asc "ERGIBT BYTES #",0 + .) + +incwcnt .( + inc wcnt + bne l1 + inc wcnt+1 +l1 rts + .) + +fxopen .( + ldy #0 + sty INT +l1 lda zielpfad,y + sta INBUF,y + beq l2 + iny + cmp #":" + beq l1a + cmp #"/" + bne l1b +l1a sty INT +l1b cpy #PFADLEN + bcc l1 + +l2 ldx INT + ldy #0 +l3 lda filetab,y + sta INBUF,x + inx + iny + cmp #0 + bne l3 + dex + txa + ldx #INBUF + jsr SETFNPAR + lda #FN_WR + ldx zieldrv + ldy #1 + jsr SETFPAR + + jsr OPEN + bcs err + jsr clrwrbuf + clc +err rts + .) + +openarcrd .( + ldy #0 +l0 lda quellpfad,y + beq l1 + iny + cpy #PFADLEN + bcc l0 +l1 cpy #0 + beq err + tya + ldx #quellpfad + jsr SETFNPAR + lda #FN_RD + ldx quelldrv + ldy #0 + jsr SETFPAR + jsr OPEN + bcs err + jsr Getqst + bcs err + jsr clrrdbuf + clc + rts +err sec + rts + .) + +pack .( + jsr getlist + lda anzfiles + beq end + jsr openarcwr + bcs cls + + lda #Version + jsr wbyte + + lda #0 + sta P1 +l1 jsr setfadr + sta P2 + stx P2+1 + jsr packfile + inc P1 + lda P1 + cmp anzfiles + bcc l1 + + jsr wbuf + +cls lda #FN_WR + jsr CLOSE + + jsr Getzst + +end jmp LINEIN:rts + .) + +packfile .( + Tout(lft) + + ldy #0 +l1 sty P1+1 + lda (P2),y + jsr BSOUT + jsr wbyte + ldy P1+1 + iny + cmp #0 + bne l1 + + jsr fopen + bcs le + + jsr clrwxbyt +l2 jsr rbyte + bcs l3 + jsr wxbyte + jmp l2 +l3 jsr savwxbyt + +le lda #FN_RD + jsr CLOSE + + lda #XCODE + jsr wbyte + lda #0 + jsr wbyte + + lda #TC_CR + jsr BSOUT + rts + +lft .asc TC_CR,"cOPYING ",0 + + .) + +fopen .( + ldy #0 + sty INT +l1 lda quellpfad,y + sta INBUF,y + beq l2 + iny + cmp #":" + beq l1a + cmp #"/" + bne l1b +l1a sty INT +l1b cpy #PFADLEN + bcc l1 + +l2 ldx INT + ldy #0 +l3 lda (P2),y + sta INBUF,x + inx + iny + cmp #0 + bne l3 + dex + txa + ldx #INBUF + jsr SETFNPAR + lda #FN_RD + ldx quelldrv + ldy #0 + jsr SETFPAR + + jsr OPEN + bcs err + jsr clrrdbuf + clc +err rts + .) + +incrcnt .( + inc rcnt + bne l1 + inc rcnt+1 +l1 rts + .) + +rbyte .( + ldy ro + cpy ri + beq leerbuf + lda rb,y + inc ro + clc + rts + +leerbuf lda rf + beq ldbuf + sec + rts + +ldbuf lda #0 + sta ri + sta ro + ldx #FN_RD + jsr CHKIN + lda #0 + sta STATUS + +lok jsr BASIN + + pha + lda STATUS + beq l0 + lda #"L" + jsr BSOUT + Ibout($90) + lda #TC_CR + jsr BSOUT +l0 pla + + jsr incrcnt + ldy ri + sta rb,y + iny + sty ri + iny + ;cpy ro + beq le + lda STATUS + beq lok + +le lda STATUS + sta rf + jsr CLRCH + jmp rbyte + .) + +clrrdbuf .( + lda #0 + sta ri + sta ro + sta rf + rts + .) + +wxbyte .( + ldx wxanz + beq add + inx + bne ad2 + pha + jsr savwxbyt + pla + jmp add + +ad2 cmp wxbyt + beq adx + pha + jsr savwxbyt + pla +add sta wxbyt +adx inc wxanz + + rts + .) + +clrwxbyt .( + lda #0 + sta wxanz + rts + .) + +savwxbyt .( + lda wxanz + beq nosav + cmp #4 + bcs savs + lda wxbyt + cmp #XCODE + beq savs + +l1 lda wxbyt + jsr wbyte + dec wxanz + bne l1 + rts + +savs lda #XCODE + jsr wbyte + lda wxanz + jsr wbyte + lda wxbyt + jsr wbyte + lda #0 + sta wxanz +nosav rts + .) + +openarcwr .( + ldy #0 +l0 lda zielpfad,y + beq l1 + iny + cpy #PFADLEN + bcc l0 +l1 cpy #0 + beq err + tya + ldx #zielpfad + jsr SETFNPAR + lda #FN_WR + ldx zieldrv + ldy #1 + jsr SETFPAR + jsr OPEN + bcs err + lda zieldrv + jsr Getzst + bcs err + jsr clrwrbuf + clc + rts +err sec + rts + .) + +clrwrbuf .( + lda #0 + sta wi + sta wo + rts + .) + +wbyte .( + ldy wi + sta wb,y + iny + sty wi + iny + cpy wo + bne nowr + pha + jsr wbuf + pla +nowr rts + .) + +wbuf .( + ldx #FN_WR + jsr CKOUT + ldy wo +l1 cpy wi + beq end + lda wb,y + jsr BSOUT + + lda STATUS + beq l0 + tya + pha + lda #"W" + jsr $e716 + lda $90 + ora #$40 + jsr $e716 + lda #TC_CR + jsr $e716 + pla + tay +l0 + jsr incwcnt + iny + jmp l1 +end lda #0 + sta wi + sta wo + jsr CLRCH + rts + .) + + .( +&Getqst lda quelldrv + jmp Getst +&Getzst lda zieldrv +&Getst + pha + jsr CLRCH + lda #TC_CR + jsr BSOUT + pla + jsr TALK + lda #15+$60 + jsr SECTALK + lda #0 + sta STATUS + jsr IECIN + pha + jsr BSOUT + +l1 jsr IECIN + cmp #0 + beq l2 + jsr BSOUT + lda STATUS + beq l1 +l2 jsr UNTALK + pla + cmp #"0" + bne err + clc + rts +err sec + rts + .) + +/* +showlist .( + lda #0 + sta P1 + +l1 lda P1 + cmp anzfiles + bcs le + + jsr setfadr + lda #TC_CR + jsr BSOUT + lda INT + ldy INT+1 + jsr Txtout + inc P1 + jmp l1 +le rts + .) +*/ + .( +l4x jmp l4 + +&getlist + lda #0 + sta anzfiles + + lda #TC_FF + jsr BSOUT + + jsr setdirnam + jsr SENDNAM + lda DEVADR + jsr TALK + lda SECADR + jsr SECTALK + + lda #0 + sta STATUS + ldy #3 +l0 sty P1 +l1 jsr IECIN + sta P1+1 + ldy STATUS + bne l4x + jsr IECIN + dec P1 + bne l1 + ldx P1+1 + jsr INTOUT + lda #" " + jsr BSOUT + +la jsr IECIN + cmp #0 + beq l4x + cmp #TC_REV + bne l3x + jmp l3 +l3x jsr BSOUT + cmp #34 + bne la + + lda anzfiles + jsr setfadr + sta P2 + stx P2+1 + + ldy #0 +lb sty P1 + jsr IECIN + jsr BSOUT + ldy P1 + cmp #34 + beq lc + sta (P2),y + iny + cpy #17 + bcc lb +lc lda #"," + sta (P2),y + iny + +ld sty P1 + jsr IECIN + jsr BSOUT + ldy P1 + cmp #" " + beq ld + sta P1+1 + sta (P2),y + iny + lda #0 + sta (P2),y +/* + lda #TC_CR + jsr BSOUT + lda P2+1 + ldx P2 + jsr INTOUT + lda #":" + jsr BSOUT + lda P2 + ldy P2+1 + jsr Txtout +*/ +lf tax + jsr IECIN + jsr BSOUT + cmp #" " + bne lf + cpx #"<" + beq lg + lda #" " + jsr BSOUT +lg lda #" " + jsr BSOUT + + lda P1+1 + jsr testkeys + +lh jsr IECIN + cmp #0 + bne lh + beq l2 + +l3 jsr IECIN + ldx STATUS + bne l4 + tax + beq l2 + jsr BSOUT + jmp l3 + +l2 lda #TC_CR + jsr BSOUT + jsr GET + beq l5 + jsr waitkey +l5 ldy #2 + beq l4 + jmp l0 +l4 jsr CLSFIL + jmp waitkey + .) + +testkeys .( + cmp #"P" + beq ok + cmp #"S" + beq ok + rts +ok Tout(t1) + jsr waitkey + cmp #"J" + beq ja + Tout(tno) + rts +ja Tout(tok) + inc anzfiles + rts + +t1 .asc TC_REV,"JA/NEIN",TC_CRL,TC_CRL,TC_CRL + .asc TC_CRL,TC_CRL,TC_CRL,TC_CRL,0 +&tno .asc TC_REO,"NEIN ",0 +&tok .asc TC_REO,"JA ",0 + .) + +setfadr .( + ldx #0 + stx INT+1 + asl + rol INT+1 + asl + rol INT+1 + sta INT + ldx INT+1 + asl + rol INT+1 + asl + rol INT+1 + clc + adc INT + sta INT + txa + adc INT+1 + sta INT+1 + lda #filetab + adc INT+1 + sta INT+1 + tax + pla + rts + .) + +dir .( + lda #TC_FF + jsr BSOUT + + jsr setdirnam + jsr SENDNAM + lda DEVADR + jsr TALK + lda SECADR + jsr SECTALK + + lda #0 + sta STATUS + ldy #3 +l0 sty P1 +l1 jsr IECIN + sta P1+1 + ldy STATUS + bne l4 + jsr IECIN + dec P1 + bne l1 + ldx P1+1 + jsr INTOUT + lda #" " + jsr BSOUT +l3 jsr IECIN + ldx STATUS + bne l4 + tax + beq l2 + jsr BSOUT + jmp l3 +l2 lda #TC_CR + jsr BSOUT + jsr GET + beq l5 + jsr waitkey +l5 ldy #2 + bne l0 +l4 jsr CLSFIL + jmp waitkey + .) + +waitkey jsr GET + beq waitkey + rts + +setdirnam .( +p1 =INT + + lda #"$" + sta INBUF + ldx #1 + stx p1 + + ldy #0 +l1 lda quellpfad,y + beq nodp + cmp #":" + beq dp + iny + cpy #PFADLEN + bcc l1 +nodp lda #":" + sta INBUF,x + inx +dp ldy #0 +dp1 lda quellpfad,y + sta INBUF,x + beq end + cmp #":" + beq l2a + cmp #"/" + bne l2 +l2a stx p1 +l2 inx + iny + cpy #PFADLEN + bcc dp1 +end ldx p1 + inx + lda #"*" + sta INBUF,x + inx + lda #"." + sta INBUF,x + inx + lda #"*" + sta INBUF,x + inx + txa + ldx #INBUF + jsr SETFNPAR + lda #1 + ldx quelldrv + ldy #0 + jmp SETFPAR + .) + +qdrv .( + inc quelldrv + lda quelldrv + cmp #12 + bcc ok + lda #8 + sta quelldrv +ok rts + .) + +zdrv .( + inc zieldrv + lda zieldrv + cmp #12 + bcc ok + lda #8 + sta zieldrv +ok rts + .) + +quelle .( + Tout(quelltxt) + jsr LINEIN + ldy #0 +q1 lda INBUF,y + sta quellpfad,y + beq end + iny + cpy #PFADLEN-1 + bcc q1 + lda #0 + sta quellpfad,y +end rts + +quelltxt .asc TC_CR,"BITTE NEUEN QUELLPFAD EINGEBEN:",TC_CR,0 + .) + +ziel .( + Tout(quelltxt) + jsr LINEIN + ldy #0 +q1 lda INBUF,y + sta zielpfad,y + beq end + iny + cpy #PFADLEN-1 + bcc q1 + lda #0 + sta zielpfad,y +end rts + +quelltxt .asc TC_CR,"BITTE NEUEN ZIELPFAD EINGEBEN:",TC_CR,0 + .) + +switch .( + lda quelldrv + ldx zieldrv + stx quelldrv + sta zieldrv + ldx #0 +l1 lda quellpfad,x + pha + lda zielpfad,x + sta quellpfad,x + pla + sta zielpfad,x + inx + cpx #PFADLEN + bcc l1 + rts + .) + +inipar .( + lda #0 + sta quellpfad + sta zielpfad + lda DEVADR + cmp #8 + bcc noval + cmp #12 + bcc ok +noval lda #8 +ok sta quelldrv + sta zieldrv + rts + .) + +Txtout .( +p =$22 + + sta p + sty p+1 +l1 ldy #0 + lda (p),y + beq le + jsr BSOUT + inc p + bne l1 + inc p+1 + bne l1 +le rts + .) + +iniscreen .( + lda #COL_SCHWARZ + sta VIC+VIC_EXTCOL + sta VIC+VIC_BCKCOL0 + lda #TC_HELLGRUEN + jsr BSOUT + rts + .) + +sysmem =* + +quelldrv =sysmem +zieldrv =sysmem+1 +-sysmem +=2 + +quellpfad =sysmem +zielpfad =sysmem+PFADLEN +-sysmem +=2*PFADLEN + +anzfiles =sysmem +-sysmem +=1 + +wi =sysmem +wo =sysmem+1 +-sysmem +=2 +wb =sysmem +-sysmem +=256 + +wxbyt =sysmem +wxanz =sysmem+1 +-sysmem +=2 + +ri =sysmem +ro =sysmem+1 +rf =sysmem+2 +-sysmem +=3 +rb =sysmem +-sysmem +=256 + +wcnt =sysmem +-sysmem +=2 +rcnt =sysmem +-sysmem +=2 +ecnt =sysmem +-sysmem +=2 + +filetab =sysmem +ende .) + diff --git a/xa/tests/cpp/over.asm b/xa/tests/cpp/over.asm deleted file mode 100644 index 96598e4..0000000 --- a/xa/tests/cpp/over.asm +++ /dev/null @@ -1,22 +0,0 @@ -# 1 "over.c" -# 1 "" -# 1 "/usr/include/stdc-predef.h" 1 3 4 -# 1 "" 2 -# 1 "over.c" -# 13 "over.c" - lda #1 - jmp buggy - rts - -# 1 "over.h" 1 - - - - -fuzz lda #5 - sta $0400 - bne fuzz - rts - - lda @$c0c0c0 -# 18 "over.c" 2 diff --git a/xa/tests/dos51/Makefile b/xa/tests/dos51/Makefile new file mode 100644 index 0000000..417476f --- /dev/null +++ b/xa/tests/dos51/Makefile @@ -0,0 +1,9 @@ +default: + # xa should not allow this to happen. if it does, this test is no good. + ../../xa -DBUG test.s || exit 0 && exit 1 + # expected-to-fail tests did fail. should be no more errors now. + ../../xa test.s -o test.o + ../hextool -cmp=ok < test.o + +clean: + rm -f *.o diff --git a/xa/tests/dos51/dos51.inc b/xa/tests/dos51/dos51.inc new file mode 100644 index 0000000..d16c32c --- /dev/null +++ b/xa/tests/dos51/dos51.inc @@ -0,0 +1,136 @@ +/* dos wedge code for inlining into routines */ + +/* define SA51 to allow stand-alone generation */ +#ifdef SA51 + .word SA51 + * = SA51 +#endif +/* otherwise assume this has been inlined via #include <> */ + +/* define BASIC51 to use BASIC interface stub */ +#ifdef BASIC51 + jsr $aefd + jsr $ad9e + jsr $b6a3 ; leaving a=len x=lb y=hb +#endif +/* otherwise load a with length, x/y = lb/hb */ + +.( + +crunchsrv = $a57c +setlfs = $ffba +setnam = $ffbd +open = $ffc0 +close = $ffc3 +clall = $ffe7 +chkin = $ffc6 +chkout = $ffc9 +clrchn = $ffcc +chrin = $ffcf +getin = $ffe4 +print = $ffd2 +readst = $ffb7 +chrout = print +ready = $e37b +cnvrtdec = $bdcd +erasealine = 59903 +workzp = $a5 + + sta work1 + sty workzp+1 + stx workzp + ; set the filename (directory, error channel and commands) + ; a, x and y already setup for us + jsr setnam + + ; are we requesting just the error channel? + ldx work1 + beq errchn ; yes + + ; are we requesting a disk directory? + ldy #0 + lda (workzp),y + cmp #"$" + bne errchn ; no + + ; yes, display directory + lda #$01 + ldx 186 + ldy #$00 + jsr setlfs + jsr open ; open 1,dev,0 to read as BASIC formatted text + + lda #147 + jsr print + clc + ldx #01 + jsr chkin + bcs dirdone + jsr chrin + jsr chrin + lda #$0d + jsr print + ; routine to print each line of the directory +dirpll jsr chrin + jsr chrin ; skip line link + jsr chrin ; grab length (as line #) + sta work1 + jsr chrin + sta work2 ; stash for later + jsr readst ; EOF or other error? + bne dirdone ; yes, end directory + lda work2 ; no, print this line + ldx work1 + jsr cnvrtdec ; first the number/length + lda #$20 + jsr print ; and a space + jsr chrin +dirpl jsr print ; then the filename in quotes and filetype until a null + jsr chrin + adc #0 + bne dirpl ; no null yet + lda #13 ; yes, null, print CR + jsr print + jmp dirpll ; and do next line + ; finish directory and clear channel, then fall through to errchn +dirdone lda #1 + jsr close + jsr clall + lda #0 + jsr setnam + + ; common routine for error channel and disk commands +errchn lda #15 + ldx $ba + ldy #15 + jsr setlfs ; open 15,8,15,command + jsr open + + lda #18 + jsr print ; rvson + ; read until there's a null, adding $0d for devices that don't +errchnl ldx #15 + jsr chkin + jsr chrin + sta work1 + jsr readst ; power 64 sucks sometimes =-( + sta work2 ; its emulated messages have no $0d + lda work1 + jsr print + lda work2 + beq errchnl + lda work1 + cmp #13 + beq errchnd + lda #13 + jsr print +errchnd lda #15 + jsr close + jsr clall + lda #146 + jsr print ; rvsoff + rts + +work1 .byt 0 +work2 .byt 0 +.) diff --git a/xa/tests/dos51/ok b/xa/tests/dos51/ok new file mode 100644 index 0000000000000000000000000000000000000000..84415e99ea991e6798de02ff804b29c8f6d94fb0 GIT binary patch literal 205 zcmY#B*!$*S%d)nm3VZ*rdvowZ@dAd8OHZm?$X>~~Y}Wz?ge)uiA9VG z$Nq0{RXG12h*t6fg&<5I2{Z#lzCEb0{r?5!wQmmsjZ!$fcclVU5m;#^!-a2PZ9Z`a zS28Lb{;%--|4Ig+y({^FR`Elv5&~*j#1FIyYV3B9v1@_GUHT6+_rnt)^Ca&FR1Aix$mGM$k^le;Spo+D diff --git a/xa/tests/fordef/ok.out b/xa/tests/fordef/ok.out index 7480db3..bd0ddd8 100644 --- a/xa/tests/fordef/ok.out +++ b/xa/tests/fordef/ok.out @@ -1,4 +1,2 @@ -Copyright (C) 1989-2014 Andre Fachat, Jolse Maginnis, David Weinehall -and Cameron Kaiser. test.asm:line 6: 0400: Warning - Can't optimize forward-defined label; using absolute addressing test.asm:line 7: 0403: Warning - Can't optimize forward-defined label; using absolute addressing diff --git a/xa/tests/mvnmvp/Makefile b/xa/tests/mvnmvp/Makefile new file mode 100644 index 0000000..b48dbe9 --- /dev/null +++ b/xa/tests/mvnmvp/Makefile @@ -0,0 +1,9 @@ +default: + # xa should not allow this to happen. if it does, this test is no good. + ../../xa test.s || exit 0 && exit 1 + # expected-to-fail tests did fail. should be no more errors now. + ../../xa -w test.s -o test.o + ../hextool -cmp=ok < test.o + +clean: + rm -f *.o diff --git a/xa/tests/mvnmvp/ok b/xa/tests/mvnmvp/ok new file mode 100644 index 0000000000000000000000000000000000000000..4c5e7d8db2ddbd0be42430ba2b7f7e5965adaa3d GIT binary patch literal 27 icmZ3haKS5ti7|wcDI|@-g@xILnZ>1p;Z@YOsBHjY{s+7O literal 0 HcmV?d00001 diff --git a/xa/tests/mvnmvp/test.s b/xa/tests/mvnmvp/test.s new file mode 100644 index 0000000..c2d30d1 --- /dev/null +++ b/xa/tests/mvnmvp/test.s @@ -0,0 +1,14 @@ +; test instructions that failed during our testing +; and test instructions in the tokenizer bordering mvn/mvp +w = $01 +lda $d020 +lsr +mvn w, $02 +mvn $0201 +mvn $0066 +mvp $03, w+3 +mvp $0403 +mvp $0088 +nop +.byt $5a, $b6 +.word $b65a diff --git a/xa/tests/nonl/a.o65 b/xa/tests/nonl/a.o65 deleted file mode 100644 index e69de29..0000000 diff --git a/xa/tests/nonl/test.asm b/xa/tests/nonl/test.asm deleted file mode 100644 index 0e7fb25..0000000 --- a/xa/tests/nonl/test.asm +++ /dev/null @@ -1,3 +0,0 @@ - lda #4 - sta !$0005 - rts \ No newline at end of file diff --git a/xa/tests/op816/Makefile b/xa/tests/op816/Makefile new file mode 100644 index 0000000..b48dbe9 --- /dev/null +++ b/xa/tests/op816/Makefile @@ -0,0 +1,9 @@ +default: + # xa should not allow this to happen. if it does, this test is no good. + ../../xa test.s || exit 0 && exit 1 + # expected-to-fail tests did fail. should be no more errors now. + ../../xa -w test.s -o test.o + ../hextool -cmp=ok < test.o + +clean: + rm -f *.o diff --git a/xa/tests/op816/ok b/xa/tests/op816/ok new file mode 100644 index 0000000000000000000000000000000000000000..832043956900b823fed32dc416adfb45197af409 GIT binary patch literal 606 zcmWm4byyQ|9LMpy-)+0yZg;!;*sTb*qJmwhvk==Ed_}Ra11#)T>{iqVJ7;%cVmrIL zP_brr^84@oJnxqv3QUj$i(nOOf-Kk-!J#?{8bK$x2>&7i4TG5?#0+9aF_V~C%pzvZ zM#!EcCm|OhHz5yK;YQvlHY-5J_#)Zxo>|p&fUrMs#~yhgh+rt&^>@EymWx*0ozq z_Z~e7y$HPteK=CgzARRbll#g24X_vdCZw?mNHwJqs&$2Df5*DO5#GoqQyysC4{A%#GA{! z%N;AcD;=vGs~u|`YaQ#>d%YVr5;hSw6Si=aWNu~K)a~jHb*H*Z-L39X_wFO?Kafl~ zNH|0|%vFkc#COzr%$MRk?mXc<={)5;ea3h8oR4sxaDi}n`>)H+N zrgrN#;m+NAp}0?YKzPWNjz|8-`V;?CJyn0EKi6OAX)pb+UcVu{CHM*NI10gg_QCbh i^~v>FFuu6Hy1u!-{~-MQ^_%dA@HgFX7K!Lkg#8EivdY^4 literal 0 HcmV?d00001 diff --git a/xa/tests/op816/test.s b/xa/tests/op816/test.s new file mode 100644 index 0000000..a2e6d25 --- /dev/null +++ b/xa/tests/op816/test.s @@ -0,0 +1,336 @@ +; Copyright (c) 2014, Alessandro Gatti - frob.it +; All rights reserved. +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; +; 1. Redistributions of source code must retain the above copyright notice, +; this list of conditions and the following disclaimer. +; +; 2. Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. + +#define ZEROPAGE_0 $0 +#define ZEROPAGE_1 $1 +#define ZEROPAGE_2 $2 +#define ZEROPAGE_3 $3 +#define ZEROPAGE_4 $4 +#define ZEROPAGE_5 $5 +#define ZEROPAGE_6 $6 +#define ZEROPAGE_7 $7 +#define ZEROPAGE_8 $8 +#define ZEROPAGE_9 $9 +#define ZEROPAGE_A $a +#define ZEROPAGE_B $b +#define ZEROPAGE_C $c +#define ZEROPAGE_D $d +#define ZEROPAGE_E $e +#define ZEROPAGE_F $f + + *=$1000 + +row0 BRK + ORA (ZEROPAGE_0,X) + COP #$00 + ORA ZEROPAGE_0,S + TSB ZEROPAGE_0 + ORA ZEROPAGE_0 + ASL ZEROPAGE_0 + ORA [ZEROPAGE_0] + PHP + ORA #$00 + ASL + PHD + TSB datablockabs + ORA datablockabs + ASL datablockabs + ORA @datablockabs+@$FF0000 + JMP row1 + +row1 BPL row1_target + ORA (ZEROPAGE_1),Y +row1_target ORA (ZEROPAGE_1) + ORA (ZEROPAGE_1,S),Y + TRB ZEROPAGE_1 + ORA ZEROPAGE_1,X + ASL ZEROPAGE_1,X + ORA [ZEROPAGE_1],Y + CLC + ORA datablockabs,Y + INC + TCS + TRB datablockabs + ORA datablockabs,X + ASL datablockabs,X + ORA @datablockabs+@$FF0000,X + JMP row2 + +row2 JSR farcode + AND (ZEROPAGE_2,X) + JSR @datablockabs+@$FF0000 + AND ZEROPAGE_2,S + BIT ZEROPAGE_2 + AND ZEROPAGE_2 + ROL ZEROPAGE_2 + AND [ZEROPAGE_2] + PLP + AND #$22 + ROL + PLD + BIT datablockabs + AND datablockabs + ROL datablockabs + AND @datablockabs+@$FF0000 + JMP row3 + +row3 BMI row3_target + AND (ZEROPAGE_3),Y +row3_target AND (ZEROPAGE_3) + AND (ZEROPAGE_3,S),Y + BIT ZEROPAGE_3,X + AND ZEROPAGE_3,X + ROL ZEROPAGE_3,X + AND [ZEROPAGE_3],Y + SEC + AND datablockabs,Y + DEC + TSC + BIT datablockabs,X + AND datablockabs,X + ROL datablockabs,X + AND @datablockabs+@$FF0000,X + JMP row4 + +row4 RTI + EOR (ZEROPAGE_4,X) + .byte $42 ; WDM + EOR ZEROPAGE_3,S + MVP $44,$44 ;$4444 ; Should be $44, $44 instead + EOR ZEROPAGE_4 + LSR ZEROPAGE_4 + EOR [ZEROPAGE_4] + PHA + EOR #$44 + LSR + PHK + JMP farcode + EOR datablockabs + LSR datablockabs + EOR @datablockabs+@$FF0000 + JMP row5 + +row5 BVC row5_target + EOR (ZEROPAGE_5),Y +row5_target EOR (ZEROPAGE_5) + EOR (ZEROPAGE_5,S),Y + MVN $55,$55 ; $5555 ; Should be $55, $55 instead + EOR ZEROPAGE_5,X + LSR ZEROPAGE_5,X + EOR [ZEROPAGE_5],Y + CLI + EOR datablockabs,Y + PHY + TCD + JMP @datablockabs+@$FF0000 + EOR datablockabs,X + LSR datablockabs,X + EOR @datablockabs+@$FF0000,X + JMP row6 + +row6 RTS + ADC (ZEROPAGE_6,X) + PER datablockabs + ADC ZEROPAGE_6,S + STZ ZEROPAGE_6 + ADC ZEROPAGE_6 + ROR ZEROPAGE_6 + ADC [ZEROPAGE_6] + PLA + ADC #$66 + ROR + RTL + JMP (datablockabs) + ADC datablockabs + ROR datablockabs + ADC @datablockabs+@$FF0000 + JMP row7 + +row7 BVS row7_target + ADC (ZEROPAGE_7),Y +row7_target ADC (ZEROPAGE_7) + ADC (ZEROPAGE_7,S),Y + STZ ZEROPAGE_7,X + ADC ZEROPAGE_7,X + ROR ZEROPAGE_7,X + ADC [ZEROPAGE_7],Y + SEI + ADC datablockabs,Y + PLY + TDC + JMP (datablockabs,X) + ADC datablockabs,X + ROR datablockabs,X + ADC @datablockabs+@$FF0000,X + JMP row8 + +row8 BRA row8_target + STA (ZEROPAGE_8,X) +row8_target BRL datablockabs + STA ZEROPAGE_8,S + STY ZEROPAGE_8 + STA ZEROPAGE_8 + STX ZEROPAGE_8 + STA [ZEROPAGE_8] + DEY + BIT #$88 + TXA + PHB + STY datablockabs + STA datablockabs + STX datablockabs + STA @datablockabs+@$FF0000 + JMP row9 + +row9 BCC row9_target + STA (ZEROPAGE_9),Y +row9_target STA (ZEROPAGE_9) + STA (ZEROPAGE_9,S),Y + STY ZEROPAGE_9,X + STA ZEROPAGE_9,X + STX ZEROPAGE_9,Y + STA [ZEROPAGE_9],Y + TYA + STA datablockabs,Y + TXS + TXY + STA datablockabs,X + STZ datablockabs,X + STA @datablockabs+@$FF0000,X + JMP rowa + +rowa LDY #$AA + LDA (ZEROPAGE_A,X) + LDX #$AA + LDA ZEROPAGE_A,S + LDY ZEROPAGE_A + LDA ZEROPAGE_A + LDX ZEROPAGE_A + LDA [ZEROPAGE_A] + TAY + LDA #$AA + TAX + PLB + LDY datablockabs + LDA datablockabs + LDX datablockabs + LDA @datablockabs+@$FF0000 + JMP rowb + +rowb BCS rowb_target + LDA (ZEROPAGE_B),Y +rowb_target LDA (ZEROPAGE_B) + LDA (ZEROPAGE_B,S),Y + LDY ZEROPAGE_B,X + LDA ZEROPAGE_B,X + LDX ZEROPAGE_B,Y + LDA [ZEROPAGE_B],Y + CLV + LDA datablockabs,Y + TSX + TYX + LDY datablockabs,X + LDA datablockabs,X + LDX datablockabs,Y + LDA @datablockabs+@$FF0000,X + JMP rowc + +rowc CPY #$CC + CMP (ZEROPAGE_C,X) + REP #$CC + CMP ZEROPAGE_C,S + CPY ZEROPAGE_C + CMP ZEROPAGE_C + DEC ZEROPAGE_C + CMP [ZEROPAGE_C] + INY + CMP #$CC + DEX + WAI + CPY datablockabs + CMP datablockabs + DEC datablockabs + CMP @datablockabs+@$FF0000 + JMP rowd + +rowd BNE rowd_target + CMP (ZEROPAGE_D),Y +rowd_target CMP (ZEROPAGE_D) + CMP (ZEROPAGE_D,S),Y + PEI (ZEROPAGE_D) + CMP ZEROPAGE_D,X + DEC ZEROPAGE_D,X + CMP [ZEROPAGE_D],Y + CLD + CMP datablockabs,Y + PHX + STP + .byte $DC, $34, $12 ; JML (label) + CMP datablockabs,X + DEC datablockabs,X + CMP @datablockabs+@$FF0000,X + JMP rowe + +rowe CPX #$EE + SBC (ZEROPAGE_E,X) + SEP #$EE + SBC ZEROPAGE_E,S + CPX ZEROPAGE_E + SBC ZEROPAGE_E + INC ZEROPAGE_E + SBC [ZEROPAGE_E] + INX + SBC #$EE + NOP + XBA + CPX datablockabs + SBC datablockabs + INC datablockabs + SBC @datablockabs+@$FF0000 + JMP rowf + +rowf BEQ rowf_target + SBC (ZEROPAGE_F),Y +rowf_target SBC (ZEROPAGE_F) + SBC (ZEROPAGE_F,S),Y + PEA $1000 + SBC ZEROPAGE_F,X + INC ZEROPAGE_F,X + SBC [ZEROPAGE_F],Y + SED + SBC datablockabs,Y + PLX + XCE + JSR (datablockabs,X) + SBC datablockabs,X + INC datablockabs,X + SBC @datablockabs+@$FF0000,X + JMP end + +end RTS + +datablockabs .word $1234 + +farcode RTI diff --git a/xa/tests/openpp/Makefile b/xa/tests/openpp/Makefile new file mode 100644 index 0000000..9f38280 --- /dev/null +++ b/xa/tests/openpp/Makefile @@ -0,0 +1,11 @@ +default: + # xa should not allow this to happen. if it does, this test is no good. + ../../xa test.inc || exit 0 && exit 1 + # expected-to-fail tests did fail. should be no more errors now. + ../../xa -DBUG test.s -o test.o + ../hextool -cmp=ok < test.o + ../../xa test.s -o test.o + ../hextool -cmp=ok < test.o + +clean: + rm -f *.o diff --git a/xa/tests/openpp/ok b/xa/tests/openpp/ok new file mode 100644 index 0000000000000000000000000000000000000000..69635818723efad6958bd042446f6eb23adcd24d GIT binary patch literal 12 QcmZQLurgNR(tj`k04ApfuK)l5 literal 0 HcmV?d00001 diff --git a/xa/tests/openpp/test.asm b/xa/tests/openpp/test.s similarity index 93% rename from xa/tests/openpp/test.asm rename to xa/tests/openpp/test.s index 8bdb8e9..82f62b1 100644 --- a/xa/tests/openpp/test.asm +++ b/xa/tests/openpp/test.s @@ -10,7 +10,9 @@ #endif /* comment this out to stop testing included gaffes */ +#ifdef BUG #include "test.inc" +#endif #if 1 #if 2 @@ -21,7 +23,5 @@ #ifdef X /* comment this out for bugs in this file */ -/* #endif -*/ diff --git a/xa/tests/recmac/a.o65 b/xa/tests/recmac/a.o65 deleted file mode 100644 index 7cd3c66..0000000 --- a/xa/tests/recmac/a.o65 +++ /dev/null @@ -1 +0,0 @@ -© \ No newline at end of file From 1006018d26bbca55f7af85d0d33adf3c3c9179c7 Mon Sep 17 00:00:00 2001 From: Andre Fachat Date: Sun, 15 Oct 2017 00:50:45 +0200 Subject: [PATCH 2/3] xa-2.3.8 --- xa/ChangeLog | 8 ++++++++ xa/Makefile | 4 ++-- xa/README.1st | 2 +- xa/man/xa.1 | 4 ++-- xa/src/xa.c | 8 +++++--- xa/tests/README | 4 ++++ xa/tests/masmcom/Makefile | 10 ++++++++++ xa/tests/masmcom/okmasm | Bin 0 -> 2 bytes xa/tests/masmcom/oknomasm | Bin 0 -> 6 bytes xa/tests/masmcom/test.s | 3 +++ xa/tests/quotch/ok | Bin 0 -> 14 bytes xa/tests/quotch/test.s | 11 +++++++++++ 12 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 xa/tests/masmcom/Makefile create mode 100644 xa/tests/masmcom/okmasm create mode 100644 xa/tests/masmcom/oknomasm create mode 100644 xa/tests/masmcom/test.s create mode 100644 xa/tests/quotch/ok create mode 100644 xa/tests/quotch/test.s diff --git a/xa/ChangeLog b/xa/ChangeLog index cf3110f..56431f7 100644 --- a/xa/ChangeLog +++ b/xa/ChangeLog @@ -316,3 +316,11 @@ xa-2.3.7 * Testsuite expanded. -- Cameron Kaiser 29 December 2014 + +xa-2.3.8 + + * Fixed issue with colons in string literals being treated as separators + (thanks Simon Rowe). + * Testsuite expanded. + + -- Cameron Kaiser 29 June 2017 diff --git a/xa/Makefile b/xa/Makefile index df6cb4e..0cda4d6 100644 --- a/xa/Makefile +++ b/xa/Makefile @@ -63,8 +63,8 @@ install: xa uncpk #$(MKDIR) $(DOCDIR)/xa65 dist: clean - #cd .. ; tar cvf xa-2.3.7A.tar xa-2.3.7 ; gzip xa-2.3.7A.tar - cd .. ; tar cvf xa-2.3.7.tar xa-2.3.7 ; gzip xa-2.3.7.tar + #cd .. ; tar cvf xa-2.3.8A.tar xa-2.3.8 ; gzip xa-2.3.8A.tar + cd .. ; tar cvf xa-2.3.8.tar xa-2.3.8 ; gzip xa-2.3.8.tar test: xa uncpk cd tests && ./harness -make="$(MAKE)" -cc="$(CC)" -cflags="$(CFLAGS)" diff --git a/xa/README.1st b/xa/README.1st index 03775ef..4b61439 100644 --- a/xa/README.1st +++ b/xa/README.1st @@ -3,7 +3,7 @@ derivatives). xa is a small, fast, portable two-pass assembler that compiles under most ANSI C compilers. It is distributed under the GNU Public License (see COPYING). -The current version is 2.3.7, a bug fix to the long-lived 2.3.0, itself with +The current version is 2.3.8, a bug fix to the long-lived 2.3.0, itself with compatibility improvements and new man-based documentation. It also completed the merge of the 65816 and 6502/R65C02 versions and thus the current xa can generate code for all targets now. diff --git a/xa/man/xa.1 b/xa/man/xa.1 index 3d91da0..26a58bd 100644 --- a/xa/man/xa.1 +++ b/xa/man/xa.1 @@ -1,4 +1,4 @@ -.TH XA "1" "7 February 2009" +.TH XA "1" "29 June 2017" .SH NAME xa \- 6502/R65C02/65816 cross-assembler @@ -840,7 +840,7 @@ This manual page was written by David Weinehall , Andre Fachat and Cameron Kaiser . Original xa package (C)1989-1997 Andre Fachat. Additional changes -(C)1989-2015 Andre Fachat, Jolse Maginnis, David Weinehall, +(C)1989-2017 Andre Fachat, Jolse Maginnis, David Weinehall, Cameron Kaiser. The official maintainer is Cameron Kaiser. .SH WEBSITE diff --git a/xa/src/xa.c b/xa/src/xa.c index 287873b..431b15c 100644 --- a/xa/src/xa.c +++ b/xa/src/xa.c @@ -55,9 +55,9 @@ #define ANZWARN 13 #define programname "xa" -#define progversion "v2.3.7" +#define progversion "v2.3.8" #define authors "Written by Andre Fachat, Jolse Maginnis, David Weinehall and Cameron Kaiser" -#define copyright "Copyright (C) 1989-2015 Andre Fachat, Jolse Maginnis, David Weinehall\nand Cameron Kaiser." +#define copyright "Copyright (C) 1989-2017 Andre Fachat, Jolse Maginnis, David Weinehall\nand Cameron Kaiser." /* exported globals */ int ncmos, cmosfl, w65816, n65816; @@ -1054,8 +1054,10 @@ static int xa_getline(char *s) do { c=s[j]=l[i++]; - if (c=='\"') + if (!(hkfl&2) && c=='\"') hkfl^=1; + if (!comcom && !(hkfl&1) && c=='\'') + hkfl^=2; if (c==';' && !hkfl) comcom = 1; if (c=='\0') diff --git a/xa/tests/README b/xa/tests/README index 3490ae2..be85077 100644 --- a/xa/tests/README +++ b/xa/tests/README @@ -9,6 +9,8 @@ unless 'make test' fails. If you do, use harness: If -tests is omitted, all tests are run. Don't run the makefiles directly, if they exist; they may not work properly. +If a Makefile is not present, then the test harness assembles "test.s" and +compares it with "ok". adrm/ Addressing mode test (especially the optimizer and quantity prefixes) @@ -32,6 +34,8 @@ dos51/ Regression test, label scoping, "real world code" cpktest/ Regression test, label listing, "real world code" op816/ Regression test for '816 opcodes (thanks Alessandro Gatti) branch/ Branch range test +masmcom/ Another test for -M that generates totally valid code +quotch/ Test quoting problematic characters (thanks Simon Rowe) Cameron Kaiser, AndrĂ© Fachat diff --git a/xa/tests/masmcom/Makefile b/xa/tests/masmcom/Makefile new file mode 100644 index 0000000..6e85604 --- /dev/null +++ b/xa/tests/masmcom/Makefile @@ -0,0 +1,10 @@ +default: + # compile with masm mode on. + ../../xa -M -o test.o test.s + ../hextool -cmp=okmasm < test.o + # compile without + ../../xa -o test.o test.s + ../hextool -cmp=oknomasm < test.o + +clean: + rm -f *.o diff --git a/xa/tests/masmcom/okmasm b/xa/tests/masmcom/okmasm new file mode 100644 index 0000000000000000000000000000000000000000..6d63e97adbb67f74b8aa5f188ae31d03b208427b GIT binary patch literal 2 JcmZ3<000400IC20 literal 0 HcmV?d00001 diff --git a/xa/tests/masmcom/oknomasm b/xa/tests/masmcom/oknomasm new file mode 100644 index 0000000000000000000000000000000000000000..35c248d2586b10499929cba512b8e4d1748886f4 GIT binary patch literal 6 NcmZ3 Date: Sun, 15 Oct 2017 00:53:53 +0200 Subject: [PATCH 3/3] remove version number from readme --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index 426f5ca..10aa2e3 100644 --- a/README +++ b/README @@ -10,6 +10,6 @@ Due to current time constraints Cameron can not do any updates, so I decided to These are the directories: -xa - contains the main source. The master branch is the stable version (currently 2.3.5) +xa - contains the main source. The master branch is the stable version