1
0
mirror of https://github.com/RevCurtisP/C02.git synced 2024-06-26 05:29:32 +00:00

Updated test program for module xmemory

This commit is contained in:
Curtis F Kaylor 2020-10-23 18:15:36 -04:00
parent 3b570f248c
commit c1d9389a39

View File

@ -13,13 +13,12 @@
char aa; //Function Arguments char aa; //Function Arguments
alias char banked = $A000; //Beginning of Banked Memory int icount, isize; //Load/Save Index and Size
int icount;
char i; //Index Variable char i; //Index Variable
char chrctr; //Get/Put Character char chrctr; //Get/Put Character
int intger; //Get/Put Integer int intger; //Get/Put Integer
char r[255],w[255]; //Read/Write Arrays char r[255],w[255],s[255]; //Read/Write/Swap Arrays
char ibank, ipage, ibyte; //Index Bank, Page, and Byte char ibank, ipage, ibyte; //Index Bank, Page, and Byte
char lbank, lpage, lbyte; //Logical Bank, Page, and Byte char lbank, lpage, lbyte; //Logical Bank, Page, and Byte
@ -28,94 +27,54 @@ char pbank, ppage, pbyte; //Physical Bank, Page, and Byte
char sbank, spage, sbyte; //Starting Bank, Page, and Byte char sbank, spage, sbyte; //Starting Bank, Page, and Byte
char ebank, epage, ebyte; //Starting Bank, Page, and Byte char ebank, epage, ebyte; //Starting Bank, Page, and Byte
char varend;
savbgn: //Start Address of Save
void passed() { putln("PASSED");} void passed() { putln("PASSED");}
void paddrs(aa) { void paddrs(aa) {
if (aa) newlin(); else puts(", "); if (aa) newlin(); else puts(", ");
printf(setdst(xgetpa()),"PA=$%x%w, "); printf(setdst(xmbank,xmaddr),"PA=$%l, ");
printf(setdst(xgetla()),"LA=$%x%w "); printf(setdst(xgetad()),"LA=$%l ");
} }
void perror() { void perror() {
printf(); //Implied Arguments printf(); //Implied Arguments
paddrs(#FALSE); paddrs(#FALSE);
newlin(); newlin();
goto exit; goto exit;
} }
/* Test xclcpa() and xclcla() */ /* Test xgetad() and xsetad() */
void tstlpl(sbank,spage,sbank) {
ibank=sbank; ipage=spage; ibyte=sbyte;
while (ibank<=#XLBANK) {
putc('.');
while() {
while() {
//printf(setdst(ibank,ipage,ibyte),"%n ORIGINAL: $%x%w");
pbank,ppage,pbyte = xclcpa(ibank,ipage,ibyte);
//printf(setdst()," PHYSICAL: $%x%w");
lbank,lpage,lbyte = xclcla(pbank,ppage,pbyte);
//printf(setdst(),", LOGICAL: $%x%w");
if (lbank<>ibank or lpage<>ipage or ibyte<>lbyte)
perror(setdst(ibank,ipage,ibyte),"%nERROR IN BANK $%x 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) { void tstgsl(ibank,ipage,ibank) {
while (ibank<=#XLBANK) { while (ibank<=#XLBANK) {
putc('.'); putc('.');
while() { while() {
while() { while() {
//printf(setdst(ibank,ipage,ibyte),"%n SET: $%x%w"); xsetad(ibank,ipage,ibyte); lbank,lpage,lbyte = xgetad();
xsetla(ibank,ipage,ibyte); if (lbank<>ibank or lpage<>ipage or ibyte<>lbyte) {
lbank,lpage,lbyte = xgetla(); printf(setdst(ibank,ipage,ibyte),"%nERROR: XSETAD($%x,$%w); ");
//printf(setdst(),", GOT: $%x%w"); printf(setdst(lbank,lpage,lbyte),"XGETAD($%x,$%w);%n");
if (lbank<>ibank or lpage<>ipage or ibyte<>lbyte) goto exit;
perror(setdst(ibank,ipage,ibyte),"%nERROR IN BANK $%x ADDRESS $%w"); }
if (getkey()==#ESCKEY) goto exit;
ibyte=ibyte+$10; if (!ibyte) break; ibyte=ibyte+$10; if (!ibyte) break;
} ipage++; if (!ipage) break; } ipage++; if (!ipage) break;
} ibank++; if (!ibank) 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(),"$%x%w:");
lbank,lpage,lbyte = xgetla(); //Get Logical Address
//printf(setdst(),"$%x%w ");
if (lbank<>ibank or lpage<>ipage or ibyte<>lbyte)
perror(setdst(ibank,ipage,ibyte),"%nERROR IN BANK $%x 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() */ /* Test xgetc() and xputc() */
void tstgpc(sbank,spage,sbyte) { void tstgpc(sbank,spage,sbyte) {
while() { while() {
//printf(setdst(),"$%x%w");
putc('.'); putc('.');
ibank=sbank; ipage=spage; ibyte=sbyte; ibank=sbank; ipage=spage; ibyte=sbyte;
xsetla(ibank,ipage,ibyte); xsetad(ibank,ipage,ibyte);
i=0; do { xputc(i); i++; } while (i); i=0; do { xputc(i); i++; } while (i);
xsetla(ibank,ipage,ibyte); xsetad(ibank,ipage,ibyte);
i=0; do { i=0; do {
if (xgetc()<>i) perror(setdst(xgetpa()),"%nERROR IN BANK $%x ADDRESS $%w"); if (xgetc()<>i)
perror(setdst(xmbank,xmaddr),"%nERROR IN BANK $%x ADDRESS $%w");
i++; i++;
} while (i); } while (i);
sbank++;spage++;sbyte++; sbank++;spage++;sbyte++;
@ -126,107 +85,75 @@ void tstgpc(sbank,spage,sbyte) {
/* Test xgeti() and xputi() */ /* Test xgeti() and xputi() */
void tstgpi(sbank,spage,sbyte) { void tstgpi(sbank,spage,sbyte) {
while() { while() {
//*printf(setdst(),"$%x%w");
putc('.'); putc('.');
ibank=sbank; ipage=spage; ibyte=sbyte; ibank=sbank; ipage=spage; ibyte=sbyte;
//Write 256 Integers xsetad(ibank,ipage,ibyte); //Write 256 Integers
xsetla(ibank,ipage,ibyte); i=0; do {mpage=i;mbyte=i^$FF; xputi(.,mpage,mbyte); i++;} while (i);
i=0; do { xsetad(ibank,ipage,ibyte); //Read 256 Integers
mpage=i;mbyte=i^$FF;
xputi(.,mpage,mbyte);
i++;
} while (i);
//Read 256 Integers
xsetla(ibank,ipage,ibyte);
i=0; do { i=0; do {
mpage=i;mbyte=i^$FF; mpage=i;mbyte=i^$FF;
intger = xgeti(); intger = xgeti();
if (<intger<>mbyte or >intger<>mpage) if (<intger<>mbyte or >intger<>mpage)
perror(setdst(xgetpa()),"%nERROR IN BANK $%x ADDRESS $%w"); perror(setdst(xmbank,xmaddr),"%nERROR IN BANK $%x ADDRESS $%w");
i++; i++;
} while (i); } while (i);
//Set Next Start Address sbank++;spage++;sbyte++; if (!sbank or sbank>#XLBANK) break;
sbank++;spage++;sbyte++;
if (!sbank or sbank>#XLBANK) break;
} }
} }
/* Test xgetl() and xputl() */ /* Test xgetl() and xputl() */
void tstgpl(sbank,spage,sbyte) { void tstgpl(sbank,spage,sbyte) {
while() { while() {
//*printf(setdst(),"$%x%w");
putc('.'); putc('.');
ibank=sbank; ipage=spage; ibyte=sbyte; ibank=sbank; ipage=spage; ibyte=sbyte;
//Write 256 Integers xsetad(ibank,ipage,ibyte); //Write 256 Longs
xsetla(ibank,ipage,ibyte);
i=0; do { i=0; do {
mbyte=i; mpage=i^$FF; mbank = -i; mbyte=i; mpage=i^$FF; mbank = -i;
xputi(mbank,mpage,mbyte); xputi(mbank,mpage,mbyte);
i++; i++;
} while (i); } while (i);
//Read 256 Integers xsetad(ibank,ipage,ibyte); //Read 256 Longs
xsetla(ibank,ipage,ibyte);
i=0; do { i=0; do {
mbyte=i; mpage=i^$FF; mbank = -i; mbyte=i; mpage=i^$FF; mbank = -i;
intger = xgeti(); intger = xgeti();
if (<intger<>mbyte or >intger<>mpage) if (<intger<>mbyte or >intger<>mpage)
perror(setdst(xgetpa()),"%nERROR IN BANK $%x ADDRESS $%w"); perror(setdst(xmbank,xmaddr),"%nERROR IN BANK $%x ADDRESS $%w");
i++; i++;
} while (i); } while (i);
//Set Next Start Address sbank++;spage++;sbyte++; if (!sbank or sbank>#XLBANK) break;
sbank++;spage++;sbyte++;
if (!sbank or sbank>#XLBANK) break;
} }
} }
/* Test xread() and xwrite() */ /* Test xread() and xwrite() */
void tstxrw(sbank,spage,epage) { void tstxrw(sbank,spage,epage) {
i=0; do {w[i]=i;i++;} while (i); //Fill Write Array i=0; do {w[i]=i;s[i]=i^$FF;i++;} while (i); //Fill Write/Swap Arrays
ibank=sbank; ibank=sbank;
while (ibank<=#XLBANK) { while (ibank<=#XLBANK) {
putc('.'); putc('.');
//Write 256,1-255 bytes of Array ipage=spage; xsetad(ibank,0,ipage); //Write 256,1-255 bytes of Array
ipage=spage; xsetla(ibank,0,ipage); do {xwrite(ipage,&w); ipage++; } while (ipage<>epage);
ipage=spage; xsetad(ibank,0,ipage);
do { 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%x:");
//inline $ff;
//paddrs(#TRUE);
xread(ipage,&r); xread(ipage,&r);
i=0; do { i=0; do {if (r[i]<>w[i]) perror(i,"ERROR IN INDEX %d");i++;} while(i<>ipage);
//printf(r[i],"%x."); printf(w[i],"%x,");
if (r[i]<>w[i]) perror(i,"ERROR IN INDEX %d");
i++;
} while(i<>ipage);
ipage++; ipage++;
} while (ipage<>epage); } while (ipage<>epage);
ibank++; if (!ibank) break; ibank++; if (!ibank) break;
} }
} }
savend: //End Address of Save
/* Test xload() and xsave() */ /* Test xload() and xsave() */
void tstxls(sbank,spage,sbyte) { void tstxls(sbank,spage,sbyte) {
setsrc(&$F000); //Most Systems have ROM from $F000 to $FFFF savrxy(&savbgn); isize = subtxy(&savend); //Load/Save Length
xsetla(sbank,spage,sbyte); xsetad(sbank,spage,sbyte); setsrc(&savbgn); xsave(isize);
xsave(&$1000); //Save through $FFFF xsetad(sbank,spage,sbyte); setdst(&varend); xload(isize);
setdst(&$8000); //There's usually free RAM here srcptr = &savbgn; dstptr = &varend; icount = isize;
xsetla(sbank,spage,sbyte);
xload(&$1000); //Load bytes saved from $F000 to $FFFF
srcptr = &$F000; dstptr = &$8000; icount = &$1000;
while (<icount or >icount) { while (<icount or >icount) {
//putwrd(srcptr); putchr(':'); puthex(*srcptr); putspc(); if (*srcptr <> *dstptr)
//putwrd(dstptr); putchr(':'); puthex(*dstptr); putspc(); perror("ERROR IN XLOAD() AND/OR XSAVE()\n");
if (*srcptr <> *dstptr) perror("ERROR IN XLOAD() AND/OR XSAVE()\n"); if (!<icount&63) putc('.');
if (!<icount) putc('.');
srcptr++; dstptr++; icount--; srcptr++; dstptr++; icount--;
} }
} }
@ -235,22 +162,10 @@ main:
if (!#XLBANK) perror("Extended Memory Not Supported"); if (!#XLBANK) perror("Extended Memory Not Supported");
/* puts("TESTING XGETAD() AND XSETAD()");
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); tstgsl($00,$00,$00);
passed(); passed();
puts("TESTING XINCPA().............");
tstipa($00,$00,$00);
passed();
puts("TESTING XPUTC() AND XGETC().."); puts("TESTING XPUTC() AND XGETC()..");
tstgpc($00,$00,$00); tstgpc($00,$00,$00);
passed(); passed();
@ -259,14 +174,16 @@ main:
tstgpi($00,$00,$00); tstgpi($00,$00,$00);
passed(); passed();
puts("TESTING XPUTL() AND XGETL()..");
tstgpi($00,$00,$00);
passed();
puts("TESTING XREAD() AND XWRITE()."); puts("TESTING XREAD() AND XWRITE().");
tstxrw($00,$00,$7F); tstxrw($00,$00,$7F);
passed(); passed();
*/
puts("TESTING XLOAD() AND XSAVE()."); puts("TESTING XLOAD() AND XSAVE()......");
tstxls($00,$00,$00); tstxls($00,$00,$00);
passed(); passed();
goto exit; goto exit;