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)
#include "ack.c"
#include "j4cbo.c"
#include "corecurse.c"
+#include "miniblarg.c"
int fact(int n)
{
extern int ldm_bonehead();
-__asm__(
+#ifndef X86
+int shnasto()
+{
+__asm__ volatile(
".globl ldm_bonehead\n"
"ldm_bonehead:;"
"mov r3, lr;"
"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;"
"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 ");
{"fact", facttest},
{"j4cbo", j4cbo},
{"ack", acktest},
+ {"miniblarg", testmain},
{"corecurse", corecurse},
{0, 0}};
puts(": ");
t->test();
}
- puts("Done!\n");
+ puts("Done! Echoing characters.\n");
+ while (1)
+ putc(serial_getc());
return 0;
}