mirror of
https://github.com/RevCurtisP/C02.git
synced 2025-02-19 19:31:04 +00:00
Added Various .c02 files from test/
This commit is contained in:
parent
a56007da8f
commit
f83a5d1e71
21
test/hello.c02
Normal file
21
test/hello.c02
Normal file
@ -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;
|
||||
|
87
test/ints.c02
Normal file
87
test/ints.c02
Normal file
@ -0,0 +1,87 @@
|
||||
/****************************************************
|
||||
* INTS - Test Integer Variables and Function Calls */
|
||||
|
||||
//Specify System Header using -H option
|
||||
#include <screen.h02>
|
||||
#include <stddef.h02>
|
||||
#include <stdlib.h02>
|
||||
#include <intlib.h02>
|
||||
#include <stdio.h02>
|
||||
#include <stdiox.h02>
|
||||
#include <string.h02>
|
||||
#include <test.h02>
|
||||
|
||||
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 <yx == <dd) passln(); else failln();
|
||||
newlin();
|
||||
}
|
55
test/keydefs.c02
Normal file
55
test/keydefs.c02
Normal file
@ -0,0 +1,55 @@
|
||||
/**********************************************
|
||||
* KEYDEFS - Test/Demo for keydefs.h02 module *
|
||||
**********************************************/
|
||||
|
||||
//Specify System Header using -H option
|
||||
#include <keydef.h02>
|
||||
|
||||
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;
|
105
test/testilib.c02
Normal file
105
test/testilib.c02
Normal file
@ -0,0 +1,105 @@
|
||||
/****************************************************
|
||||
* INTS - Test Integer Variables and Function Calls */
|
||||
|
||||
//Specify System Header using -H option
|
||||
#include <screen.h02>
|
||||
#include <stddef.h02>
|
||||
#include <stdlib.h02>
|
||||
#include <intlib.h02>
|
||||
#include <stdio.h02>
|
||||
#include <stdiox.h02>
|
||||
#include <string.h02>
|
||||
#include <test.h02>
|
||||
|
||||
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 <ival <> <icmp) {
|
||||
putwrd(ival); puts("<>"); 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;
|
199
test/testslib.c02
Normal file
199
test/testslib.c02
Normal file
@ -0,0 +1,199 @@
|
||||
/**************************************************
|
||||
* TESTSLIB - Test Library stdlib.h02 for py65mon *
|
||||
**************************************************/
|
||||
|
||||
//Specify System Header using -H option
|
||||
#include <stddef.h02>
|
||||
#include <stdlib.h02>
|
||||
|
||||
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<acmlst) acmmsb++;
|
||||
acmlst = acmlsb;
|
||||
prodct,ovrflw = mult(mltplr,mltpnd);
|
||||
if (prodct <> 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;
|
||||
|
272
test/xmemtest.c02
Normal file
272
test/xmemtest.c02
Normal file
@ -0,0 +1,272 @@
|
||||
/**************************************
|
||||
* TESTXMEM - Test Library xmemory.h02 *
|
||||
**************************************/
|
||||
|
||||
//use -h option on command line
|
||||
#include <screen.h02>
|
||||
#include <stddef.h02>
|
||||
#include <stdlib.h02>
|
||||
#include <intlib.h02>
|
||||
#include <stdio.h02>
|
||||
#include <stdiox.h02>
|
||||
#include <xmemory.h02>
|
||||
|
||||
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 (<intger<>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 (<intger<>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 or >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 (!<icount) putc('.');
|
||||
srcptr++; dstptr++; icount--;
|
||||
}
|
||||
}
|
||||
|
||||
main:
|
||||
|
||||
if (!#XLBANK) perror("Extended Memory Not Supported");
|
||||
|
||||
/*
|
||||
puts("TESTING XCLCPA() AND XCLCLA()");
|
||||
tstlpl($00,$00,$00);
|
||||
passed();
|
||||
|
||||
//XGETPA() AND XSETPA() NOT DIRECTLY TESTED
|
||||
//VALID VALUES ARE SYSTEM DEPENDENT
|
||||
|
||||
puts("TESTING XGETLA() AND XSETLA()");
|
||||
tstgsl($00,$00,$00);
|
||||
passed();
|
||||
|
||||
puts("TESTING XINCPA().............");
|
||||
tstipa($00,$00,$00);
|
||||
passed();
|
||||
|
||||
puts("TESTING XPUTC() AND XGETC()..");
|
||||
tstgpc($00,$00,$00);
|
||||
passed();
|
||||
|
||||
puts("TESTING XPUTI() AND XGETI()..");
|
||||
tstgpi($00,$00,$00);
|
||||
passed();
|
||||
|
||||
puts("TESTING XREAD() AND XWRITE().");
|
||||
tstxrw($00,$00,$7F);
|
||||
passed();
|
||||
*/
|
||||
|
||||
puts("TESTING XLOAD() AND XSAVE().");
|
||||
tstxls($00,$00,$00);
|
||||
passed();
|
||||
|
||||
goto exit;
|
||||
|
Loading…
x
Reference in New Issue
Block a user