cmu4.s 637 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. .define .cmu4
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. ! 4 byte cmu and cmi routine
  8. ! parameters:
  9. ! a: 0 for cmu, 1 for cmi
  10. ! stack: operands
  11. ! de: result (out)
  12. .cmu4:
  13. pop ix
  14. ld de,4
  15. ld b,d
  16. ld c,e
  17. ld hl,0
  18. add hl,sp
  19. add hl,bc
  20. dec hl
  21. ld d,h
  22. ld e,l
  23. add hl,bc
  24. ld (savesp),hl ! save new sp-1
  25. or a
  26. jr z,1f
  27. ld a,(de)
  28. cp (hl)
  29. dec hl
  30. dec de
  31. dec bc
  32. jr z,1f
  33. jp p,4f
  34. jr 6f
  35. 1:
  36. ld a,(de)
  37. cp (hl)
  38. dec de
  39. dec hl
  40. dec bc
  41. jr nz,2f
  42. ld a,b
  43. or c
  44. jr nz,1b
  45. ld d,a
  46. ld e,a
  47. jr 3f
  48. 2:
  49. jr nc,4f
  50. 6:
  51. ld de,1
  52. jr 3f
  53. 4:
  54. ld de,-1
  55. 3:
  56. ld hl,(savesp)
  57. inc hl
  58. ld sp,hl
  59. jp (ix)
  60. .sect .data
  61. savesp: .data2 0