void init() { unsigned long ch; unsigned long *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;" "lis %r4, 0x8000;" "ori %r4, %r4, 0x200;" "rldicr %r4, %r4, 32,31;" "oris %r4, %r4, 0xea00;" // dump r2 "andi. %r7, %r2, 0xff;" "srdi %r2, %r2, 8;" "bl putc;" "andi. %r7, %r2, 0xff;" "srdi %r2, %r2, 8;" "bl putc;" "andi. %r7, %r2, 0xff;" "srdi %r2, %r2, 8;" "bl putc;" "andi. %r7, %r2, 0xff;" "srdi %r2, %r2, 8;" "bl putc;" "andi. %r7, %r2, 0xff;" "srdi %r2, %r2, 8;" "bl putc;" "andi. %r7, %r2, 0xff;" "srdi %r2, %r2, 8;" "bl putc;" "andi. %r7, %r2, 0xff;" "srdi %r2, %r2, 8;" "bl putc;" "andi. %r7, %r2, 0xff;" "srdi %r2, %r2, 8;" "bl putc;" // dump r3 "andi. %r7, %r3, 0xff;" "srdi %r3, %r3, 8;" "bl putc;" "andi. %r7, %r3, 0xff;" "srdi %r3, %r3, 8;" "bl putc;" "andi. %r7, %r3, 0xff;" "srdi %r3, %r3, 8;" "bl putc;" "andi. %r7, %r3, 0xff;" "srdi %r3, %r3, 8;" "bl putc;" "andi. %r7, %r3, 0xff;" "srdi %r3, %r3, 8;" "bl putc;" "andi. %r7, %r3, 0xff;" "srdi %r3, %r3, 8;" "bl putc;" "andi. %r7, %r3, 0xff;" "srdi %r3, %r3, 8;" "bl putc;" "andi. %r7, %r3, 0xff;" "srdi %r3, %r3, 8;" "bl putc;" // dump r4 "mr %r8, %r4;" "andi. %r7, %r8, 0xff;" "srdi %r8, %r8, 8;" "bl putc;" "andi. %r7, %r8, 0xff;" "srdi %r8, %r8, 8;" "bl putc;" "andi. %r7, %r8, 0xff;" "srdi %r8, %r8, 8;" "bl putc;" "andi. %r7, %r8, 0xff;" "srdi %r8, %r8, 8;" "bl putc;" "andi. %r7, %r8, 0xff;" "srdi %r8, %r8, 8;" "bl putc;" "andi. %r7, %r8, 0xff;" "srdi %r8, %r8, 8;" "bl putc;" "andi. %r7, %r8, 0xff;" "srdi %r8, %r8, 8;" "bl putc;" "andi. %r7, %r8, 0xff;" "srdi %r8, %r8, 8;" "bl putc;" // dump (r2) "ld %r8, -0x8000(%r2);" "andi. %r7, %r8, 0xff;" "srdi %r8, %r8, 8;" "bl putc;" "andi. %r7, %r8, 0xff;" "srdi %r8, %r8, 8;" "bl putc;" "andi. %r7, %r8, 0xff;" "srdi %r8, %r8, 8;" "bl putc;" "andi. %r7, %r8, 0xff;" "srdi %r8, %r8, 8;" "bl putc;" "andi. %r7, %r8, 0xff;" "srdi %r8, %r8, 8;" "bl putc;" "andi. %r7, %r8, 0xff;" "srdi %r8, %r8, 8;" "bl putc;" "andi. %r7, %r8, 0xff;" "srdi %r8, %r8, 8;" "bl putc;" "andi. %r7, %r8, 0xff;" "srdi %r8, %r8, 8;" "bl putc;" // dump r1 "andi. %r7, %r1, 0xff;" "srdi %r1, %r1, 8;" "bl putc;" "andi. %r7, %r1, 0xff;" "srdi %r1, %r1, 8;" "bl putc;" "andi. %r7, %r1, 0xff;" "srdi %r1, %r1, 8;" "bl putc;" "andi. %r7, %r1, 0xff;" "srdi %r1, %r1, 8;" "bl putc;" "andi. %r7, %r1, 0xff;" "srdi %r1, %r1, 8;" "bl putc;" "andi. %r7, %r1, 0xff;" "srdi %r1, %r1, 8;" "bl putc;" "andi. %r7, %r1, 0xff;" "srdi %r1, %r1, 8;" "bl putc;" "andi. %r7, %r1, 0xff;" "srdi %r1, %r1, 8;" "bl putc;" // dump r31 "andi. %r7, %r31, 0xff;" "srdi %r31, %r31, 8;" "bl putc;" "andi. %r7, %r31, 0xff;" "srdi %r31, %r31, 8;" "bl putc;" "andi. %r7, %r31, 0xff;" "srdi %r31, %r31, 8;" "bl putc;" "andi. %r7, %r31, 0xff;" "srdi %r31, %r31, 8;" "bl putc;" "andi. %r7, %r31, 0xff;" "srdi %r31, %r31, 8;" "bl putc;" "andi. %r7, %r31, 0xff;" "srdi %r31, %r31, 8;" "bl putc;" "andi. %r7, %r31, 0xff;" "srdi %r31, %r31, 8;" "bl putc;" "andi. %r7, %r31, 0xff;" "srdi %r31, %r31, 8;" "bl putc;" "putc:;" "slwi %r7, %r7, 24;" "stw %r7, 0x1014(%r4);" "not_ready:;" "lwz %r7, 0x1018(%r4);" "rlwinm. %r7, %r7, 0, 6, 6;" "beq not_ready;" "blr;" //*/ ); ch='X'; port=(unsigned long *)0x80000200ea001014; while(1) *port=ch << 24; }