58 lines
		
	
	
	
		
			629 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			629 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.sect .text
 | 
						|
.sect .rom
 | 
						|
.sect .data
 | 
						|
.sect .bss
 | 
						|
.sect .text
 | 
						|
 | 
						|
.define .proword, .probyte
 | 
						|
.define .pro0, .pro2, .pro4
 | 
						|
 | 
						|
! BC is used as the frame pointer, but HL and DE can be corrupted.
 | 
						|
 | 
						|
.proword:
 | 
						|
	pop h
 | 
						|
	push b
 | 
						|
	mov e, m
 | 
						|
	inx h
 | 
						|
	mov d, m
 | 
						|
	inx h
 | 
						|
	jmp .pron
 | 
						|
 | 
						|
.probyte:
 | 
						|
	pop h
 | 
						|
	push b
 | 
						|
	mvi d, 0xff
 | 
						|
	mov e, m
 | 
						|
	inx h
 | 
						|
	jmp .pron
 | 
						|
 | 
						|
.pro4:
 | 
						|
	pop h
 | 
						|
	push b
 | 
						|
	lxi d, -4
 | 
						|
	jmp .pron
 | 
						|
 | 
						|
.pro2:
 | 
						|
	pop h
 | 
						|
	push b
 | 
						|
	lxi d, -2
 | 
						|
	jmp .pron
 | 
						|
 | 
						|
.pro0:
 | 
						|
	pop h
 | 
						|
	push b
 | 
						|
	lxi d, 0
 | 
						|
	! fall through
 | 
						|
.pron:
 | 
						|
	shld .retadr
 | 
						|
	! Copy the current stack pointer to BC.
 | 
						|
	lxi h, 0
 | 
						|
	dad sp
 | 
						|
	mov b, h
 | 
						|
	mov c, l
 | 
						|
	! Calculate the new stack pointer.
 | 
						|
	dad d
 | 
						|
	sphl
 | 
						|
	lhld .retadr
 | 
						|
	pchl
 | 
						|
 |