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

  1. rpnSUPPORT
  2. seq FORMATTED geos FILE v1.0
  3. sTAR nx-10
  4. op v2.0 OR HIGHER
  5. ;"rpnCONST
  6. blaster's converter v2.5
  7. GEOSsYM.rpn
  8. GEOSmAC
  9. wRITE iMAGE v2.1
  10. GEOwRITE    v2.0
  11. 0sUPPORT ROUTINES FOR rpn64.
  12. D +# K" T
  13. .NOEQIN
  14.  @.INCLUDEGEOSsYM
  15.  @INCLUDEGEOSmAC
  16. .INCLUDErpnCONST
  17. GRAPHICSmODE  ==$003F
  18. CONFIG==$FF00
  19. .EQIN
  20. COUNTER=A0l;gRATUIT. ZPAGE COUNTER, USED BY sINK, rAISE, ETC.
  21. ;(i RESTORE APPL. ZPAGE SPACE AT THE END)
  22. ;*********************************************************************
  23. ; basic EQUATES
  24. ;*********************************************************************
  25. FAC1==$63
  26. FACEXP==$63
  27. FACSGN==$68
  28. FAC2==$6A
  29. GIVAYF==$AF03
  30. FAC1MEM==$AF66
  31. MEMFAC1==$AF63
  32. MEMFAC2==$AF5A
  33. FAC1FAC2==$AF6C
  34. FAC2FAC1==$AF69
  35. DECASCII==$AF06
  36. SYS_ASCIIDEC ==$AF09
  37. SYS_CHRGET==$4279
  38. DIV10==$8B38
  39. MULT10==$8B17
  40. FSGNA==$AF51
  41. FCOMPARE==$AF54
  42. FINT==$AF2D
  43. FADD==$AF18
  44. FSUB==$AF12
  45. FMULT==$AF1E
  46. FDIV==$AF24
  47. FPWR==$AF39
  48. FSQRT==$AF30
  49. FSIN==$AF42
  50. FCOS==$AF3F
  51. FTAN==$AF45
  52. FATAN==$AF48
  53. FE_TO==$AF3C
  54. FLOG==$AF2A
  55. ;FPI==$78FE
  56. ;nOTE: EVEN THOUGH PERUSAL OF THE 128'S rom WITH
  57. ;FONE==$902E
  58. ;monitor REVELAED THESE LOCATIONS HAD THE RIGHT
  59. ;FHALF==$8F76
  60. ;VALUES, THEY DIDN'T SEEM TO WORK WITH rpn128.
  61. FPI:.BYTE$82,$49,$0F,$DA,$A1   ;sO i EXPLICITLY DECLARED THESE CONSTANTS
  62. FONE:.BYTE$81,$00,$00,$00,$00   ; MYSELF, AS YOU SEE.
  63. FHALF:.BYTE$80,$00,$00,$00,$00
  64. ; ********************************************************************
  65. ;   aSCII TO fLOATING pOINT CONVERSION
  66. ; ********************************************************************
  67. asciidec:
  68.  @JSRgetbasi
  69. ; ********************************************************************
  70. ;   aSCII TO fLOATING pOINT CONVERSION
  71. ; ********************************************************************
  72. asciidec:
  73.  @JSRgetbasic
  74. LDX#$FF
  75. 10$INX;fIND THE END OF SYSTRING, KEEP THE LENGTH IN X
  76. LDASYSTRING,X
  77. BNE10$
  78. lOADw$24,SYSTRING;sET POINTER TO SYSTRING
  79. .BYTE$20,<zcALLvAL,>zcALLvAL  ;JSR zcALLvAL- CALLS SYS_ASCIIDEC
  80.  @JSRflushbasic
  81.  @RTS
  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;pROMPT POSITION IS OFF FROM TEXT BY #$08
  94. STASTRINGy
  95. JSRpROMPToN
  96.  @RTS
  97. ; *******************************************************************
  98. ;dUMPnUM--  OUTPUT NUMBER AT (R5) TO (R6,R7h)
  99. ; *******************************************************************
  100. dUMPnUM:
  101.  @JSRgetbasic
  102. LDAR5l
  103. LDYR5h
  104. JSRMEMFAC1
  105. JSRDECASCII
  106.  @JSRflushbasic
  107. mOVEwR5,TMPBLK;sAVE R5,R6,R7 FROM DESTRUCTION BY pUTsTRING
  108. mOVEwR6,TMPBLK+2
  109. mOVEwR7,TMPBLK+4
  110. lOADwR6,$0100;cOPY sTRING AT $0100 TO SYSTEM STRING (?)
  111. lOADwR7,SYSTRING
  112. LDX#R6
  113. LDY#R7
  114. JSRcOPYsTRING
  115. JSRuSEsYSTEMfONT;****cHECK THIS FOR 128!!!!!
  116. lOADwR0,SYSTRING;oUTPUT THE SYSTEM STRING
  117. mOVEwTMPBLK+4,R1
  118. mOVEwTMPBLK+2,R11
  119. JSRpUTsTRING
  120. mOVEwTMPBLK+4,R7;rESTORE ORIGINAL VALUES OF R7h,R5,R6
  121. mOVEwTMPBLK+2,R6
  122. mOVEwTMPBLK,R5
  123.  @RTS
  124. ; *************************************
  125. ; ******************************************************************
  126. ;fN_rN,rN_fN   -- COPY FACN TO rEGN, VICE VERSA
  127.  @note:
  128.  fOR ALL OF THESE, basic, SHOULD 
  129.  @NOT
  130.  BE IN.
  131. ; *******************************************************************
  132. f1_r1:
  133. LDX#$04
  134. 10$LDASTOFAC1,X
  135. STArEG1,X
  136. BPL10$
  137.  @RTS
  138. r1_f1:
  139. LDX#$04
  140. 10$LDArEG1,X
  141. STASTOFAC1,X
  142. BPL10$
  143.  @RTS
  144. r2_f2:
  145. LDX#$04
  146. 10$LDArEG2,X
  147. STASTOFAC2,X
  148. BPL10$
  149.  @RTS
  150. r1_f2:
  151. LDX#$04
  152. 10$LDArEG1,X
  153. STASTOFAC2,X
  154. BPL10$
  155.  @RTS
  156. f1_r2:
  157. LDX#$04
  158. 10$LDASTOFAC1,X
  159. STArEG2,X
  160. BPL10$
  161.  @RTS
  162. r2_f1:
  163. LDX#$04
  164. 10$LDArEG2,X
  165. STASTOFAC1,X
  166. BPL10$
  167.  @RTS
  168. OVEwR11,tEXTxPOS
  169. mOVEwR11,STRINGx
  170. mOVEbR1h,tEXTyPOS
  171. LDAR1h
  172. SUB#$08;pROMPT POSITION IS OFF FROM TEXT BY #$08
  173. STASTRINGy
  174. JSRpROMPToN
  175.  @RTS
  176. ; *******************************************************************
  177. ;dUMPnUM--  OU
  178. ; ******************************************************************
  179. ;pRINTr1 -- cLEAR SPOT AND PRINT OUT rEG 1
  180. ; ******************************************************************
  181. pRINTr1:
  182. LDA#$00
  183. JSRsETpATTERN;sET PATTERN TO WHITE
  184. JSRI_rECTANGLE;cLEAR POSITION ON DATA SCREEN FOR f.p. rEG 1
  185. .BYTEentry_top*8-reg_w-8
  186. .BYTE(data_top+data_height)*8-2
  187. .WORD$8000+data_left*8+1
  188. .WORD$8000+(data_left+data_width)*8-2
  189. lOADwR5,rEG1
  190. lOADwR6,$8000+data_left*8+4
  191. lOADbR7h,entry_top*8-reg_w
  192.  @JMPdUMPnUM
  193. ;pRINT OUT rEG 1
  194.  @.IF0
  195. ;**********************************************************************
  196.  @pAUSEpRINT -- DEBUGGING UTILITY
  197. ;**************************************************
  198. ; ******************************************************************
  199. ;sINK--  SINKS REGS 1-7 (MOVES 1->2, 2->3, ..., 7->8)
  200. ; ******************************************************************
  201. sINK:
  202. LDX#$06;mAX REG IS #7 (MEMORY STARTS COUNTING AT 0)
  203. lOADbCOUNTER,$00
  204. 10$TXA;Y = 5 * X
  205. ASLA
  206. ASLA
  207. STXTEMP
  208. ADDTEMP
  209. 15$LDArEG1,Y;MOVE REG X TO REG X+1
  210. STArEG2,Y
  211. INCCOUNTER
  212. cMPbiCOUNTER,$05;EACH REG IS 5 BYTES
  213. BNE 15$
  214. lOADbCOUNTER,$00
  215. CPX#$FF;HAVE DONE REGS FROM 7 TO 1
  216. BEQ20$
  217. BRA10$
  218.  @RTS
  219. ; *****************************************************************
  220. ;rAISE-- RAISE REGS 2-8  (MOVE 2->1, 3->2, ..., 8->7; SET 8 TO 0)
  221. ; *****************************************************************
  222. rAISE:
  223. LDX#$00;sTART WITH rEG 2 (DESTINATION rEG 1)
  224. lOADbCOUNTER,$00
  225. 10$TXA;Y = 5 * X
  226. ASLA
  227. ASLA
  228. STXTEMP
  229. ADDTEMP
  230. 15$LDArEG2,Y
  231. STArEG1,Y
  232. INCCOUNTER
  233. cMPbiCOUNTER,$05
  234. BNE15$
  235. lOADbCOUNTER,$00
  236. CPX#$08
  237. BEQ20$
  238. BRA10$
  239. 20$lOADwrEG8,$0000;lOAD 0 INTO rEG 8
  240. lOADwrEG8+2,$0000
  241. lOADbrEG8+4,$00
  242.  @RTS
  243. ; ******************************************************************
  244. ;pRINTrEGS -- 
  245. ; ******************************************************************
  246. ;pRINTrEGS -- pRINT OUT ALL 8 REGISTERS
  247. ; ******************************************************************
  248. pRINTrEGS:
  249. JSRcLEARdATA;CLEAR SCREEN
  250. lOADwR6,$8000+data_left*8+4
  251. lOADbCOUNTER,$00
  252. lOADbR7h,entry_top*8-reg_w
  253. lOADwR5,rEG1
  254. 40$JSRdUMPnUM
  255. INCCOUNTER
  256. cMPbiCOUNTER,$08
  257. BEQ50$
  258. lOADbR7l,reg_w;eACH rEG GETS reg_w SCANLINES
  259. sUBbR7l,R7h
  260. aDDvw$05,R5
  261. BRA40$
  262.  @RTS
  263. ; ******************************************************************
  264. ;eRRORmESS,oVfLOeRR,uNfLOeRR -- pRINT AN ERROR MESSAGE, WAIT FOR A CLICK
  265. ; ******************************************************************
  266. eRRORmESS:
  267. lOADwR0,eRR_sTRING
  268. JMPpRINTeRR
  269. eRR_sTRING:.BYTE24,"eRROR!",27," (CLICK)",0
  270. oVfLOeRR:
  271. lOADwR0,oV_sTRING
  272. JMPpRINTeRR
  273. oV_sTRING:.BYTE24,"oVERFLOW",27," (CLICK)",0
  274. uNfLOeRR:
  275. lOADwR0,uN_sTRING
  276. JMPpRINTeRR
  277. uN_sTRING:.BYTE24,"uNDERFLOW",27," (CLICK)",0
  278.  @pRINTeRR:
  279. pUSHwR0
  280. JSRcLReNTRY;tHIS DOES TOO MUCH, BUT OH WELL
  281. lOADwLEFTmARGIN,$8000+data_left*8+4
  282. lOADwR11,$8000+data_left*8+7
  283. lOADbR1h,entry_top*8+12
  284. pOPwR0
  285. JSRpUTsTRING
  286. 10$cMPbiMOUSEdATA,%10000000   ;WAIT FOR CLICK
  287. BNE20$
  288. BRA10$
  289. 20$JSRcLReNTRY
  290. lOADwLEFTmARGIN,$00
  291. lOADbOPRINT,TRUE;pRINT OUT 
  292.  REGISTERS
  293.  @JMPpOSTopRINT
  294. ; ***************************************************************
  295. ;cLReNTRY-- CLEAR 
  296. ; ***************************************************************
  297. ;cLReNTRY-- CLEAR ENTRY SCREEN, TURN OFF PROMPT
  298. ; ***************************************************************
  299. cLReNTRY:
  300. LDA#$00
  301. JSRsETpATTERN
  302. JSRI_rECTANGLE
  303. .BYTEentry_top*8+1
  304. .BYTE(entry_top+2)*8-2
  305. .WORD$8000+entry_left*8+1
  306. .WORD$8000+(entry_left+data_width)*8-2
  307. JSRpROMPToFF
  308. lOADbALPHAfLAG,0
  309. LDA#$00;cLEAR eNTERsTR
  310. LDX#$09
  311. 10$STAeNTERsTR,Y
  312. BPL10$
  313.  @RTS
  314. ; *************************************************************
  315. ;cLEARdATA  --  cLEAR THE DATA SCREEN
  316. ; *************************************************************
  317. cLEARdATA:
  318. LDA#$00
  319. JSRsETpATTERN
  320. JSRI_rECTANGLE
  321. .BYTEdata_top*8+1
  322. .BYTE(data_top+data_height)*8-2
  323. .WORD$8000+data_left*8+1
  324. .WORD$8000+(data_left+data_width)*8-2
  325.  @RTS
  326. ; ******************************************************************
  327. ; getbasic,flushbasi
  328. ; ******************************************************************
  329. ; getbasic,flushbasic -- SWAP basic FOR geos IN BOTH WAYS
  330. ; ******************************************************************
  331. getbasic:
  332. LDACONFIG
  333. ORA#%11110001
  334. CMP#%11110001
  335. BEQ90$;dON'T SWAP IN basic IF IT'S ALREADY IN!
  336. LDX#$40;sAVE $41 BYTES OF geos ZERO PAGE
  337. 10$LDA$22,X
  338. STAgeosZERO,X
  339. BPL10$
  340. zcALLvAL==$2D
  341. LDX#$0C
  342. 15$LDAcALLvAL,X;cOPY SYS_ASCIIDEC CALLER TO $2D
  343. STAzcALLvAL,X;(a REGION IN zPAGE i JUST SAVED WHICH
  344. DEX; basic fLOATING pOINT ROUTINES DON'T NEED)
  345. BPL15$
  346.  @SEI;dISABLE iNTERRUPTS DURING basic!
  347. mOVEbCONFIG,bEFOREbas;sAVE mmu
  348. AND#%11000000;sWAP IN kERNAL, basic, io
  349. STACONFIG
  350. JSR$417D;sETS UP basic'S DEFAULT pRECONFIG. REGS.
  351. LDX#$7F
  352. 20$LDA$380,X;sAVE ORIGINAL CONTENTS OF $380
  353. STAsAVE380,X
  354. LDASYS_CHRGET,X;cOPY chrget TO $380 
  355. STA$380,X
  356. BPL20$
  357. LDA#<(STOFAC1);iNSTALL FAC1
  358. LDY#>(STOFAC1)
  359. JSRMEMFAC1
  360. LDA#<(STOFAC2);iNSTALL FAC2
  361. LDY#>(STOFAC2)
  362. JSRMEMFAC2
  363. lOADb$3D5,$00;THE CONFIGURATION(?) basic USES (bank 15)
  364. STA$3DF;iNITIALIZE AN OVERFLOW VARIABLE
  365. lOADb$3DA,$FF;asciidec LOOKS FOR STRING IN bLOCK 1 ram
  366.  @RTS
  367.  @cALLvAL:
  368. LDACONFIG;rOUTINE TO CALL SYS_ASCIIDEC AND RECOVER
  369. PHA; CALLER'S BANK CONFIGURATION.  x COMES IN WITH
  370. TXA; THE LENGTH OF THE STRING TO BE CONVERTED.
  371. JSRSYS_ASCIIDEC
  372. STACONFIG
  373.  @RTS
  374. flushbasic:
  375. flushbasic:
  376. LDACONFIG
  377. AND#%00001110
  378. CMP#%00001110;iF THESE 3 ARE SET, ram IS IN IN PLACE OF basic
  379. BEQ90$;dON'T fLUSH IF IT'S NOT HERE!
  380. LDX#<(STOFAC1);sAVE FAC1
  381. LDY#>(STOFAC1)
  382. JSRFAC1MEM
  383. JSRFAC2FAC1;sAVE FAC2
  384. LDX#<(STOFAC2)
  385. LDY#>(STOFAC2)
  386. JSRFAC1MEM
  387. mOVEbbEFOREbas,CONFIG;rESTORE ORIGINAL CONFIGURATION
  388. LDX#$7F
  389. 10$LDAsAVE380,X;rESTORE ORIGINAL CONTENTS OF $380
  390. STA$380,X
  391. BPL10$
  392. LDX#$40
  393. 20$LDAgeosZERO,X;rESTORE geos kERNAL'S ZERO-PAGE SPACE
  394. STA$22,X
  395. BPL20$
  396.  @CLI;mAKE SURE INTERRUPTS ARE ENABLED
  397.  @RTS
  398. .BYTEok
  399. .BYTE$80+8,14
  400. .BYTEdbtxtstr
  401. .BYTE4,8
  402. ppdbTXT:.WORD$0000
  403.