home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / geos / programming / source / rpn64-src.sfx / rpnsupport (.txt) < prev    next >
Encoding:
GEOS ConVerT  |  1990-02-12  |  10.7 KB  |  336 lines

  1. /%rpnSUPPORT
  2. prg FORMATTED geos FILE v1.0
  3. sTAR nx-10
  4. rpnroutines
  5. blaster's converter v2.5
  6. rpnRAM
  7. rpnSCREEN
  8. wRITE iMAGE v2.0
  9. GEOwRITE    v2.0
  10. 0sUPPORT ROUTINES FOR rpn64.
  11. D +# K" T
  12. .NOEQIN
  13. @.INCLUDEGEOSsYM
  14. @INCLUDEGEOSmAC
  15. .INCLUDErpnCONST
  16. .EQIN
  17. COUNTER=A0l;gRATUITOUS COUNTER IN ZPAGE, USED BY sINK, rAISE, ETC.
  18. ;(ok TO USE APPL. SPACE, BECAUSE i RESTORE IT AT THE END)
  19. ; ******************************************************************************
  20. ;   basic EQUATES
  21. ; ******************************************************************************
  22. FAC1==$61
  23. FACEXP==$61
  24. FACSGN==$66
  25. AFAC1==$BC3C
  26. FAC1MEM==$BBD4
  27. MEMFAC1==$BBA2
  28. MEMFAC2==$BA8C
  29. FAC1FAC2==$BC0C
  30. FAC2FAC1==$BBFC
  31. ADDA==$BD7E
  32. DECASCII==$BDDD
  33. SYS_ASCIIDEC ==$BCF3
  34. DIV10==$BAFE
  35. MULT10==$BAE2
  36. FSGNA==$BC2B
  37. FCOMPARE==$BC5B
  38. FINT==$BCCC
  39. FADD==$B867
  40. FSUB==$B850
  41. FMULT==$BA28
  42. FDIV==$BB0F
  43. FPWR==$BF7B
  44. FSQRT==$BF71
  45. FSIN==$E26B
  46. FCOS==$E264
  47. FTAN==$E2B4
  48. FATAN==$E30E
  49. FE_TO==$BFED
  50. FLOG==$B9EA
  51. FPI==$AEA8
  52. FONE==$B9BC
  53. FHALF==$BF11
  54. ; ***************************************************************
  55. ; **************************************************************************
  56. ;   aSCII TO dECIMAL nUMBER CONVERSION
  57. ; **************************************************************************
  58. asciidec:
  59. @JSRgetbasic
  60. JSRgETchrget;COPY chrget TO ZERO PAGE
  61. lOADb$7A,<(SYSTRING-1);sET POINTER TO SYSTRING
  62. lOADb$7B,>(SYSTRING-1)
  63. .BYTE$20,$73,$00;JSR CHRGET (GEOaSS WON'T LET ME JSR TO A ZERO PAGE,
  64. JSRSYS_ASCIIDEC;          EVEN WITHOUT ZPAGE ADDRESSING!  aRGH!)
  65. @JSRflushbasic
  66. ; ****************************************************************************
  67. ;cOPY chrget TO ZERO PAGE WITH PREDICTABLE RESULTS TO STACK (ARGH)
  68. aSSUMES basic HAS BEEN SWAPPED IN!!!
  69. ; ****************************************************************************
  70. gETchrget:
  71. SYSchrget==$E3A2;lOCATION OF ROUTINE IN rom
  72. ZPchrget==$0073;WHERE IT NEEDS TO GO
  73. LDX#$00
  74. 10$CPX#$18;ROUTINE IS $18 BLOCKS LONG
  75. BEQ20$
  76. LDASYSchrget,X
  77. STAZPchrget,X
  78. BRA10$
  79. ; ****************************************************************************
  80. ;pRINTa--  PRINT CHR(a) AT NEXT POSITION
  81. ; *********************************
  82. ; ****************************************************************************
  83. ;pRINTa--  PRINT CHR(a) AT NEXT POSITION
  84. ; ****************************************************************************
  85. pRINTa:
  86. mOVEwtEXTxPOS,R11
  87. mOVEbtEXTyPOS,R1h
  88. JSRpUTcHAR
  89. mOVEwR11,tEXTxPOS
  90. mOVEwR11,STRINGx
  91. mOVEbR1h,tEXTyPOS
  92. LDAR1h
  93. SUB#$08;sTUPID pROMPT POSITION IS OFF FROM TEXT BY #$08 (DUH!)
  94. STASTRINGy
  95. JSRpROMPToN
  96. ; ****************************************************************************
  97. ;dUMPnUM--  OUTPUT NUMBER AT (R5) TO (R6,R7h)
  98. ; ****************************************************************************
  99. dUMPnUM:
  100. @JSRgetbasic
  101. LDAR5l
  102. LDYR5h
  103. JSRMEMFAC1
  104. JSRDECASCII
  105. @JSRflushbasic
  106. mOVEwR5,TMPBLK;sAVE R5,R6,R7 FROM DESTRUCTION BY pUTsTRING
  107. mOVEwR6,TMPBLK+2
  108. mOVEwR7,TMPBLK+4
  109. lOADwR6,$0100;cOPY sTRING AT $0100 TO SYSTEM STRING (WHO KNOWS WHY)
  110. lOADwR7,SYSTRING
  111. LDX#R6
  112. LDY#R7
  113. JSRcOPYsTRING
  114. JSRuSEsYSTEMfONT
  115. lOADwR0,SYSTRING;oUTPUT THE SYSTEM STRING
  116. mOVEwTMPBLK+4,R1
  117. mOVEwTMPBLK+2,R11
  118. JSRpUTsTRING
  119. mOVEwTMPBLK+4,R7;rESTORE ORIGINAL VALUES OF R7h,R5,R6
  120. mOVEwTMPBLK+2,R6
  121. mOVEwTMPBLK,R5
  122. ; ****************************************************************************
  123. ;fN_rN,rN_fN   -- COPY FACN TO rEGN, VICE VERSA
  124. ; ****************************************************************************
  125. f1_r1:
  126. @JSRgetbasic
  127. LDX#<(rEG1)
  128. LDY#>(rEG1)
  129. JSRFAC1MEM
  130. @JSRflushbasic
  131. r1_f1:
  132. @JSRgetbasic
  133. LDA#<(rEG1)
  134. LDY#>(rEG1)
  135. JSRMEMFAC1
  136. @JSRflushbasic
  137. r2_f2:
  138. @JSRgetbasic
  139. LDA#<(rEG2)
  140. LDY#>(rEG2)
  141. JSRMEMFAC2
  142. @JSRflushbasic
  143. r1_f2:
  144. @JSRgetbasic
  145. LDA#<(rEG1)
  146. LDY#>(rEG1)
  147. JSRMEMFAC2
  148. @JSRflushbasic
  149. f1_r2:
  150. @JSRgetbasic
  151. LDX#<(rEG2)
  152. LDY#>(rEG2)
  153. JSRFAC1MEM
  154. @JSRflushbasic
  155. 2_f1:
  156. @JSRgetbasic
  157. LDA#<(rEG2)
  158. LDY#>(rEG2)
  159. JSRMEMFAC1
  160. @JSRflushbasic
  161. ; ****************************************************************************
  162. ;pRINTr1 -- cLEAR SPOT AND PRINT
  163. ; ****************************************************************************
  164. ;pRINTr1 -- cLEAR SPOT AND PRINT OUT rEG 1
  165. ; ****************************************************************************
  166. pRINTr1:
  167. LDA#$00
  168. JSRsETpATTERN;sET PATTERN TO WHITE
  169. JSRI_rECTANGLE;cLEAR POSITION ON DATA SCREEN FOR f.p. rEG 1
  170. .BYTEentry_top*8-reg_w-8
  171. .BYTE(data_top+data_height)*8-2
  172. .WORDdata_left*8+1
  173. .WORD(data_left+data_width)*8-2
  174. lOADwR5,rEG1
  175. lOADwR6,data_left*8+2
  176. lOADbR7h,entry_top*8-reg_w
  177. JSRdUMPnUM;pRINT OUT rEG 1
  178. ; ****************************************************************************
  179. ;sINK--  SINKS REGS 1-7 (MOVES 1->2, 2->3, ..., 7->8)
  180. ; ******
  181. ; ****************************************************************************
  182. ;sINK--  SINKS REGS 1-7 (MOVES 1->2, 2->3, ..., 7->8)
  183. ; ****************************************************************************
  184. sINK:
  185. LDX#$06;mAX REG IS #7 (MEMORY STARTS COUNTING AT 0)
  186. lOADbCOUNTER,$00
  187. 10$TXA;Y = 5 * X
  188. ASLA
  189. ASLA
  190. STXTEMP
  191. ADDTEMP
  192. 15$LDArEG1,Y;MOVE REG X TO REG X+1
  193. STArEG2,Y
  194. INCCOUNTER
  195. cMPbiCOUNTER,$05;EACH REG IS 5 BYTES
  196. BNE 15$
  197. lOADbCOUNTER,$00
  198. CPX#$FF;HAVE DONE REGS FROM 7 TO 1
  199. BEQ20$
  200. BRA10$
  201. ; ****************************************************************************
  202. ;rAISE-- RAISE REGS 2-8  (MOVE 2->1, 3->2, ..., 8->7; SET 8 TO 0)
  203. ; ****************************************************************************
  204. rAISE:
  205. LDX#$00;sTART WITH rEG 2 (DESTINATION rEG 1)
  206. lOADbCOUNTER,$00
  207. 10$TXA;Y = 5 * X
  208. ASLA
  209. ASLA
  210. STXTEMP
  211. ADDTEMP
  212. 15$LDArEG2,Y
  213. STArEG1,Y
  214. INCCOUNTER
  215. cMPbiCOUNTER,$05
  216. BNE15$
  217. lOADbCOUNTER,$00
  218. CPX#$08
  219. BEQ20$
  220. BRA10$
  221. 20$lOADwrEG8,$0000;lOAD 0 INTO rEG 8
  222. lOADwrEG8+2,$0000
  223. lOADbrEG8+4,$00
  224. ; *****************************************
  225. ; ******************************************************************************
  226. ;pRINTrEGS -- pRINT OUT ALL 8 REGISTERS
  227. ; ******************************************************************************
  228. pRINTrEGS:
  229. JSRcLEARdATA;CLEAR SCREEN
  230. lOADwR6,data_left*8+2
  231. lOADbCOUNTER,$00
  232. lOADbR7h,entry_top*8-reg_w
  233. lOADwR5,rEG1
  234. 40$JSRdUMPnUM
  235. INCCOUNTER
  236. cMPbiCOUNTER,$08
  237. BEQ50$
  238. lOADbR7l,reg_w;eACH rEG GETS reg_w SCANLINES
  239. sUBbR7l,R7h
  240. aDDvw$05,R5
  241. BRA40$
  242. ; ******************************************************************************
  243. ;eRRORmESS,oVfLOeRR,uNfLOeRR -- pRINT AN ERROR MESSAGE, WAIT FOR A CLICK
  244. ; ******************************************************************************
  245. eRRORmESS:
  246. lOADwR0,eRR_sTRING
  247. JMPpRINTeRR
  248. eRR_sTRING:.BYTE24,"eRROR!",27," (CLICK)",0
  249. oVfLOeRR:
  250. lOADwR0,oV_sTRING
  251. JMPpRINTeRR
  252. oV_sTRING:.BYTE24,"oVERFLOW",27," (CLICK)",0
  253. uNfLOeRR:
  254. lOADwR0,uN_sTRING
  255. JMPpRINTeRR
  256. uN_sTRING:.BYTE24,"uNDERFLOW",27," (CLICK)",0
  257. @pRINTeRR:
  258. JSRcLReNTRY;tHIS DOES TOO MUCH, BUT OH WELL
  259. lOADwLEFTmARGIN,data_left*8+4
  260. lOADwR11,data_left*8+7
  261. lOADbR1h,entry_top*8+12
  262. JSRpUTsTRING
  263. 10$cMPbiMOUSEdATA,%10000000;WAIT FOR CLICK
  264. BNE20$
  265. BRA10$
  266. 20$JSRcLReNTRY
  267. lOADwLEFTmARGIN,$00
  268. lOADbOPRINT,TRUE;pRINT OUT 
  269.  REGISTERS
  270. @JMPpOSTopRINT
  271. ; ***************************************************************************
  272. ; *****************************************************************************
  273. ;cLReNTRY-- CLEAR ENTRY SCREEN, TURN OFF PROMPT
  274. ; *****************************************************************************
  275. cLReNTRY:
  276. LDA#$00
  277. JSRsETpATTERN
  278. JSRI_rECTANGLE
  279. .BYTEentry_top*8+1
  280. .BYTE(entry_top+2)*8-2
  281. .WORDentry_left*8+1
  282. .WORD(entry_left+data_width)*8-2
  283. JSRpROMPToFF
  284. lOADbALPHAfLAG,0
  285. LDA#$00;cLEAR eNTERsTR
  286. LDY#$00
  287. 10$STAeNTERsTR,Y
  288. CPY#$11
  289. BEQ20$
  290. BRA10$
  291. ; *****************************************************************************
  292. ;cLEARdATA  --  cLEAR THE DATA SCREEN
  293. ; *****************************************************************************
  294. cLEARdATA:
  295. LDA#$00
  296. JSRsETpATTERN
  297. JSRI_rECTANGLE
  298. .BYTEdata_top*8+1
  299. .BYTE(data_top+data_height)*8-2
  300. .WORDdata_left*8+1
  301. .WORD(data_left+data_width)*8-2
  302. ; *****************************
  303. ; *****************************************************************************
  304. ; getbasic,flushbasic -- SWAP basic FOR geos IN BOTH WAYS
  305. ; *****************************************************************************
  306. getbasic:
  307. LDA$01
  308. AND#krnl_bas_io_in
  309. CMP#krnl_bas_io_in
  310. BEQ90$;dON'T SWAP IN basic IF IT'S ALREADY IN
  311. LDX#$00
  312. 10$LDA$22,X;sAVE geos kERNAL'S ZERO PAGE SPACE
  313. STAgeosZERO,X
  314. CPX#$3F
  315. BNE10$
  316. JSRiNITfORio
  317. LDA$01
  318. STAbEFOREbas
  319. ORA#krnl_bas_io_in
  320. STA$01
  321. flushbasic:
  322. LDA$01
  323. AND#krnl_bas_io_in
  324. CMP#krnl_bas_io_in
  325. BNE90$;dON'T fLUSH IF IT'S NOT HERE!
  326. LDX#$00
  327. 10$LDAgeosZERO,X;rESTORE geos kERNAL'S ZERO-PAGE SPACE
  328. STA$22,X
  329. CPX#$3F;rESTORE $22-$60; i HOPE geos DOESN'T NEED $61-$6F,
  330. BNE10$; BECAUSE THAT INCLUDES THE fac'S!
  331. LDAbEFOREbas
  332. STA$01
  333. JSRdONEwITHio
  334. SRgetbasic
  335. LDX#<(rEG1)
  336.