All pastes #400203 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-03-18 15:46 UTC
rendered paste body
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;
}