solve.z80 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. solveset_p1:
  2. add a,4
  3. add a,a
  4. cp solveset_LUT_end-solveset_LUT
  5. jp nc,p1_err_syntax
  6. ld hl,solveset_LUT
  7. add a,l
  8. ld l,a
  9. jr nc,$+3
  10. inc h
  11. ld a,(hl)
  12. inc hl
  13. ld h,(hl)
  14. ld l,a
  15. jp (hl)
  16. solveset_LUT:
  17. .dw CopyVar
  18. .dw CopyDataUp
  19. .dw CopyDataDown
  20. .dw p1_err_fatal
  21. .dw p1_err_fatal
  22. .dw PortWrite
  23. .dw PortRead
  24. .dw CopyVars
  25. .dw OverwriteVar
  26. .dw solve_zlz_comp
  27. .dw solve_zlz_decomp
  28. .dw solve_zcomp
  29. .dw solve_sortVAT
  30. .dw solve_getname
  31. solveset_LUT_end:
  32. CopyVar:
  33. call p1_GetVarInfo2
  34. ret c
  35. push af
  36. push hl
  37. push bc
  38. ld hl,(parsePtr)
  39. inc hl
  40. ld (parsePtr),hl
  41. call p1_GetVarInfo
  42. jr c,+_
  43. bcall(_DelVarArc)
  44. _:
  45. ld hl,(parsePtr)
  46. ld a,2Bh
  47. cp (hl)
  48. pop bc
  49. call z,p1_ParseNextFullArg
  50. push bc
  51. ld bc,0
  52. cp 2Bh
  53. call z,p1_ParseNextFullArg
  54. pop de
  55. pop hl
  56. add hl,bc
  57. push hl
  58. push de
  59. ex de,hl
  60. ld a,(OP1)
  61. and $1F
  62. bcall(_EnoughMem)
  63. jp c,ErrMEM
  64. ex de,hl
  65. bcall(_CreateVar)
  66. inc de
  67. inc de
  68. pop bc
  69. pop hl
  70. pop af
  71. push de
  72. push bc
  73. call ReadArc
  74. pop hl
  75. ld (ThetaPrimeVar),hl
  76. pop bc
  77. ret
  78. CopyDataUp:
  79. push bc
  80. call p1_ParseNextFullArg
  81. push bc
  82. call p1_ParseNextFullArg
  83. push bc
  84. call p1_ParseNextFullArg
  85. pop de
  86. pop hl
  87. ldir
  88. pop bc
  89. ret
  90. CopyDataDown:
  91. push bc
  92. call p1_ParseNextFullArg
  93. push bc
  94. call p1_ParseNextFullArg
  95. push bc
  96. call p1_ParseNextFullArg
  97. pop de
  98. pop hl
  99. lddr
  100. pop bc
  101. ret
  102. PortWrite:
  103. call p1_ParseNextFullArg
  104. push bc
  105. ld c,0
  106. cp 2Bh
  107. call z,p1_ParseNextFullArg
  108. pop de
  109. out (c),e
  110. ret
  111. PortRead:
  112. ld hl,(parsePtr)
  113. ld a,(hl)
  114. ld c,0
  115. cp 2Bh
  116. call z,p1_ParseNextFullArg
  117. in c,(c)
  118. ld b,0
  119. ret
  120. CopyVars:
  121. ;Copy variables to a new location
  122. call p1_ParseNextFullArg
  123. ld d,b
  124. ld e,c
  125. ld hl,smallEditRAM
  126. jr mov108
  127. OverwriteVar:
  128. ;Overwrite all pointer vars
  129. call p1_ParseNextFullArg
  130. ld h,b
  131. ld l,c
  132. ld de,smallEditRAM
  133. mov108:
  134. ld bc,108 ;2*54, 4*(26+1)
  135. ldir
  136. ret
  137. solve_sortVAT = sortVAT
  138. solve_getname:
  139. call p1_ParseNextFullArg
  140. cp $2B
  141. jr z,solve_getname_any_type
  142. ld a,c ;type
  143. push af
  144. call p1_ParseNextFullArg
  145. pop af
  146. ;A is the type, BC is the index
  147. ret
  148. solve_getname_any_type:
  149. ;BC is the index
  150. ret
  151. solve_zlz_decomp:
  152. call p1_ParseNextFullArg
  153. push bc
  154. call p1_ParseNextFullArg
  155. push bc
  156. call p1_ParseNextFullArg
  157. pop de
  158. pop hl
  159. jp zlz_decomp
  160. solve_zlz_comp:
  161. call p1_ParseNextFullArg
  162. push bc
  163. call p1_ParseNextFullArg
  164. push bc
  165. call p1_ParseNextFullArg
  166. pop de
  167. pop hl
  168. jp zlz_comp
  169. solve_zcomp:
  170. call p1_ParseNextFullArg
  171. push bc
  172. call p1_ParseNextFullArg
  173. push bc
  174. call p1_ParseNextFullArg
  175. pop de
  176. pop hl
  177. jp zcomp