X-Git-Url: http://git.joshuawise.com/firearm.git/blobdiff_plain/392d1bec43dcfb806fbdf77380c334f2cdc84778..1e7ff543e49341fedea742d7b8b674111d852748:/tests/testbench.c diff --git a/tests/testbench.c b/tests/testbench.c index ff9f96c..f078ecd 100644 --- a/tests/testbench.c +++ b/tests/testbench.c @@ -1,5 +1,14 @@ extern void putc(unsigned char c); +int serial_getc (void) +{ + int c; + do + asm volatile("mrc 5, 0, %0, c1, c1, 1" : "=r"(c)); + while (!(c & 0x100)); + return c & 0xFF; +} + void puts(unsigned char *s) { while (*s) @@ -19,6 +28,7 @@ void puthex(unsigned int x) #include "ack.c" #include "j4cbo.c" #include "corecurse.c" +#include "miniblarg.c" int fact(int n) { @@ -43,7 +53,10 @@ struct tests { extern int ldm_bonehead(); -__asm__( +#ifndef X86 +int shnasto() +{ +__asm__ volatile( ".globl ldm_bonehead\n" "ldm_bonehead:;" "mov r3, lr;" @@ -59,8 +72,9 @@ __asm__( "nop;" "mov pc, r3\n;" "1:\n" -"ldr r2, =0x00002FE0;" -"ldr r1, =0x0000004C;" +"mov r2, #0x00002F00;" +"orr r2, r2, #0x000000E0;" +"mov r1, #0x0000004C;" "mov ip, sp;" "stmdb sp!, {fp, ip, lr, pc};" "mov r0, #0x00880000;" @@ -69,10 +83,16 @@ __asm__( "nop;" "nop;\n" ); +} +#endif void ldm_tester() { +#ifdef X86 + int x = 0x00880000; +#else int x = ldm_bonehead(); +#endif if (x != 0x00880000) { puts("FAIL: result was "); @@ -82,11 +102,32 @@ void ldm_tester() puts("PASS\n"); } +void cellularram() +{ + volatile int *p = 0x80010000; + + puts("[writing] "); + p[0] = 0x12345678; + p[1] = 0x87654321; + p[2] = 0xAAAA5555; + p[3] = 0x5555AAAA; + puts("[cache flush] "); + p[0x1000] = 0x00000000; + puts("[reading: "); + puthex(p[0]); + puthex(p[1]); + puthex(p[2]); + puthex(p[3]); + puts("]\n"); +} + struct tests tlist[] = { {"ldm pc/mul", ldm_tester}, {"fact", facttest}, {"j4cbo", j4cbo}, + {"cellularram", cellularram}, {"ack", acktest}, + {"miniblarg", testmain}, {"corecurse", corecurse}, {0, 0}}; @@ -103,7 +144,9 @@ int main() puts(": "); t->test(); } - puts("Done!\n"); + puts("Done! Echoing characters.\n"); + while (1) + putc(serial_getc()); return 0; }