Task

Write a procedure which accepts as arguments another procedure and a positive integer.

The latter procedure is executed a number of times equal to the accepted integer.




 
ld b,&05  ;load the decrement value into b
ld hl,myFunc ;load the address of "myFunc" into HL
 
call repeatProcedure
 
forever:
jp forever ;trap the program counter here
 
repeatProcedure: ;input: b = times to repeat, hl = which procedure to repeat
call trampoline
; the "ret" in myFunc will bring you here
djnz repeatProcedure
ret ;exit "repeatProcedure" and proceed to "forever"
 
trampoline:
push hl
ret     
;this is effectively a call to whatever is in HL, in this case "myFunc." The "ret" at the end of myFunc will return us to 
;just after the line "call trampoline"
 
 
myFunc: ;this doesn't do anything useful but that's not the point
push hl ;not needed for this routine but if it altered HL we would need this so that we come back here next time we loop
or a
pop hl
ret
 