void init() { unsigned int ch; unsigned int *port; asm( ".globl _start;" "_start:;" "" "bl get_r2;" "get_r2:;" "mflr %r3;" "lis %r4, get_r2@toc@h;" "ori %r4, %r4, get_r2@toc@l;" "sldi %r4, %r4, 32;" "sradi %r4, %r4, 32;" "sub %r2, %r3, %r4;" ); main(); } void putchar(unsigned char ch) { volatile unsigned int *portout = (unsigned int *) 0x80000200ea001014; volatile unsigned int *portstat = (unsigned int *) 0x80000200ea001018; *portout = ch << 24; while ( !(*portstat & 0x02000000)); return; } unsigned char getchar(void) { volatile unsigned int *portin = (unsigned int *) 0x80000200ea001010; volatile unsigned int *portstat = (unsigned int *) 0x80000200ea001018; while (*portstat & 0xfdffffff != 0x01000000); return *portin >> 24; } int main(void) { unsigned char mch; mch='X'; while(1) putchar(mch); return 0; }