aar.s 754 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. .define .aar
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. ! use .mli2
  8. ! 2-byte descriptor elements
  9. ! any size array elements
  10. ! no range checking
  11. ! parameters:
  12. ! stack: pointer to descriptor
  13. ! index
  14. ! base address of array
  15. ! stack: result (out)
  16. ! uses .mli2 routine
  17. ! side-effect: size of array elements in bc
  18. .aar:
  19. pop hl ! return address
  20. pop ix ! pointer to descr.
  21. ex (sp),hl ! save ret. addr.
  22. ! hl := index
  23. ld c,(ix+0) ! bc := lower bound
  24. ld b,(ix+1)
  25. xor a
  26. sbc hl,bc ! hl := index-lwb
  27. ld c,(ix+4) ! bc := size
  28. ld b,(ix+5)
  29. ex de,hl ! de := index-lwb
  30. call .mli2 ! hl := bc*de =
  31. ! size*(index-lwb)
  32. pop ix ! return address
  33. pop de ! base
  34. add hl,de ! addr. of element
  35. push hl
  36. jp (ix) ! return