
 MACRO
 LDRL $reg,$addr
	ADRL $reg,$addr
	LDR $reg,[$reg]
 MEND

 MACRO
 STRL $reg,$addr
	STMFD R13!,{R10}
	ADRL R10,$addr
	STR $reg,[R10]
 	LDMFD R13!,{R10}
 MEND

 MACRO
 DIV $divreg1,$divreg2,$divreg3,$divreg4
 ROUT
        STMFD R13!,{$divreg2,$divreg4}	; divreg1 / divreg2
	MOV $divreg4,$divreg2
	CMP $divreg4,$divreg1,LSR#1
1
	MOVLS $divreg4,$divreg4,LSL#1
	CMP $divreg4,$divreg1,LSR#1
	BLS %1
	MOV $divreg3,#0
2
	CMP $divreg1,$divreg4
	SUBCS $divreg1,$divreg1,$divreg4
	ADC $divreg3,$divreg3,$divreg3
	MOV $divreg4,$divreg4,LSR#1
	CMP $divreg4,$divreg2
	BHS %2
	LDMFD R13!,{$divreg2,$divreg4} ; divreg1 = MOD result
				       ; divreg3 = DIV result
 ROUT
 MEND

 MACRO
 RANDOM $reg_a, $reg_b, $reg_c
 	STMFD R13!,{$reg_b,$reg_c}
 	LDRL $reg_a,seed1
 	LDRL $reg_b,seed2
 	TST $reg_b,$reg_b,LSR#1
        MOVS $reg_c,$reg_a,RRX
        ADC $reg_b,$reg_b,$reg_b
        EOR $reg_c,$reg_c,$reg_a,LSL#12
        EOR $reg_a,$reg_c,$reg_c,LSR#20
        STRL $reg_a,seed1
        STRL $reg_b,seed2
        LDMFD R13!,{$reg_b,$reg_c}
 MEND
 
 MACRO
 HACKER
 SWI &82743 + 1<<17
 MEND
 

seed1 & 123456
seed2 & 789012

 END
