home *** CD-ROM | disk | FTP | other *** search
- /%rpnSUPPORT
- prg FORMATTED geos FILE v1.0
- sTAR nx-10
- rpnroutines
- blaster's converter v2.5
- rpnRAM
- rpnSCREEN
- wRITE iMAGE v2.0
- GEOwRITE v2.0
- 0sUPPORT ROUTINES FOR rpn64.
- D +# K" T
- .NOEQIN
- @.INCLUDEGEOSsYM
- @INCLUDEGEOSmAC
- .INCLUDErpnCONST
- .EQIN
- COUNTER=A0l;gRATUITOUS COUNTER IN ZPAGE, USED BY sINK, rAISE, ETC.
- ;(ok TO USE APPL. SPACE, BECAUSE i RESTORE IT AT THE END)
- ; ******************************************************************************
- ; basic EQUATES
- ; ******************************************************************************
- FAC1==$61
- FACEXP==$61
- FACSGN==$66
- AFAC1==$BC3C
- FAC1MEM==$BBD4
- MEMFAC1==$BBA2
- MEMFAC2==$BA8C
- FAC1FAC2==$BC0C
- FAC2FAC1==$BBFC
- ADDA==$BD7E
- DECASCII==$BDDD
- SYS_ASCIIDEC ==$BCF3
- DIV10==$BAFE
- MULT10==$BAE2
- FSGNA==$BC2B
- FCOMPARE==$BC5B
- FINT==$BCCC
- FADD==$B867
- FSUB==$B850
- FMULT==$BA28
- FDIV==$BB0F
- FPWR==$BF7B
- FSQRT==$BF71
- FSIN==$E26B
- FCOS==$E264
- FTAN==$E2B4
- FATAN==$E30E
- FE_TO==$BFED
- FLOG==$B9EA
- FPI==$AEA8
- FONE==$B9BC
- FHALF==$BF11
- ; ***************************************************************
- ; **************************************************************************
- ; aSCII TO dECIMAL nUMBER CONVERSION
- ; **************************************************************************
- asciidec:
- @JSRgetbasic
- JSRgETchrget;COPY chrget TO ZERO PAGE
- lOADb$7A,<(SYSTRING-1);sET POINTER TO SYSTRING
- lOADb$7B,>(SYSTRING-1)
- .BYTE$20,$73,$00;JSR CHRGET (GEOaSS WON'T LET ME JSR TO A ZERO PAGE,
- JSRSYS_ASCIIDEC; EVEN WITHOUT ZPAGE ADDRESSING! aRGH!)
- @JSRflushbasic
- ; ****************************************************************************
- ;cOPY chrget TO ZERO PAGE WITH PREDICTABLE RESULTS TO STACK (ARGH)
- aSSUMES basic HAS BEEN SWAPPED IN!!!
- ; ****************************************************************************
- gETchrget:
- SYSchrget==$E3A2;lOCATION OF ROUTINE IN rom
- ZPchrget==$0073;WHERE IT NEEDS TO GO
- LDX#$00
- 10$CPX#$18;ROUTINE IS $18 BLOCKS LONG
- BEQ20$
- LDASYSchrget,X
- STAZPchrget,X
- BRA10$
- ; ****************************************************************************
- ;pRINTa-- PRINT CHR(a) AT NEXT POSITION
- ; *********************************
- ; ****************************************************************************
- ;pRINTa-- PRINT CHR(a) AT NEXT POSITION
- ; ****************************************************************************
- pRINTa:
- mOVEwtEXTxPOS,R11
- mOVEbtEXTyPOS,R1h
- JSRpUTcHAR
- mOVEwR11,tEXTxPOS
- mOVEwR11,STRINGx
- mOVEbR1h,tEXTyPOS
- LDAR1h
- SUB#$08;sTUPID pROMPT POSITION IS OFF FROM TEXT BY #$08 (DUH!)
- STASTRINGy
- JSRpROMPToN
- ; ****************************************************************************
- ;dUMPnUM-- OUTPUT NUMBER AT (R5) TO (R6,R7h)
- ; ****************************************************************************
- dUMPnUM:
- @JSRgetbasic
- LDAR5l
- LDYR5h
- JSRMEMFAC1
- JSRDECASCII
- @JSRflushbasic
- mOVEwR5,TMPBLK;sAVE R5,R6,R7 FROM DESTRUCTION BY pUTsTRING
- mOVEwR6,TMPBLK+2
- mOVEwR7,TMPBLK+4
- lOADwR6,$0100;cOPY sTRING AT $0100 TO SYSTEM STRING (WHO KNOWS WHY)
- lOADwR7,SYSTRING
- LDX#R6
- LDY#R7
- JSRcOPYsTRING
- JSRuSEsYSTEMfONT
- lOADwR0,SYSTRING;oUTPUT THE SYSTEM STRING
- mOVEwTMPBLK+4,R1
- mOVEwTMPBLK+2,R11
- JSRpUTsTRING
- mOVEwTMPBLK+4,R7;rESTORE ORIGINAL VALUES OF R7h,R5,R6
- mOVEwTMPBLK+2,R6
- mOVEwTMPBLK,R5
- ; ****************************************************************************
- ;fN_rN,rN_fN -- COPY FACN TO rEGN, VICE VERSA
- ; ****************************************************************************
- f1_r1:
- @JSRgetbasic
- LDX#<(rEG1)
- LDY#>(rEG1)
- JSRFAC1MEM
- @JSRflushbasic
- r1_f1:
- @JSRgetbasic
- LDA#<(rEG1)
- LDY#>(rEG1)
- JSRMEMFAC1
- @JSRflushbasic
- r2_f2:
- @JSRgetbasic
- LDA#<(rEG2)
- LDY#>(rEG2)
- JSRMEMFAC2
- @JSRflushbasic
- r1_f2:
- @JSRgetbasic
- LDA#<(rEG1)
- LDY#>(rEG1)
- JSRMEMFAC2
- @JSRflushbasic
- f1_r2:
- @JSRgetbasic
- LDX#<(rEG2)
- LDY#>(rEG2)
- JSRFAC1MEM
- @JSRflushbasic
- 2_f1:
- @JSRgetbasic
- LDA#<(rEG2)
- LDY#>(rEG2)
- JSRMEMFAC1
- @JSRflushbasic
- ; ****************************************************************************
- ;pRINTr1 -- cLEAR SPOT AND PRINT
- ; ****************************************************************************
- ;pRINTr1 -- cLEAR SPOT AND PRINT OUT rEG 1
- ; ****************************************************************************
- pRINTr1:
- LDA#$00
- JSRsETpATTERN;sET PATTERN TO WHITE
- JSRI_rECTANGLE;cLEAR POSITION ON DATA SCREEN FOR f.p. rEG 1
- .BYTEentry_top*8-reg_w-8
- .BYTE(data_top+data_height)*8-2
- .WORDdata_left*8+1
- .WORD(data_left+data_width)*8-2
- lOADwR5,rEG1
- lOADwR6,data_left*8+2
- lOADbR7h,entry_top*8-reg_w
- JSRdUMPnUM;pRINT OUT rEG 1
- ; ****************************************************************************
- ;sINK-- SINKS REGS 1-7 (MOVES 1->2, 2->3, ..., 7->8)
- ; ******
- ; ****************************************************************************
- ;sINK-- SINKS REGS 1-7 (MOVES 1->2, 2->3, ..., 7->8)
- ; ****************************************************************************
- sINK:
- LDX#$06;mAX REG IS #7 (MEMORY STARTS COUNTING AT 0)
- lOADbCOUNTER,$00
- 10$TXA;Y = 5 * X
- ASLA
- ASLA
- STXTEMP
- ADDTEMP
- 15$LDArEG1,Y;MOVE REG X TO REG X+1
- STArEG2,Y
- INCCOUNTER
- cMPbiCOUNTER,$05;EACH REG IS 5 BYTES
- BNE 15$
- lOADbCOUNTER,$00
- CPX#$FF;HAVE DONE REGS FROM 7 TO 1
- BEQ20$
- BRA10$
- ; ****************************************************************************
- ;rAISE-- RAISE REGS 2-8 (MOVE 2->1, 3->2, ..., 8->7; SET 8 TO 0)
- ; ****************************************************************************
- rAISE:
- LDX#$00;sTART WITH rEG 2 (DESTINATION rEG 1)
- lOADbCOUNTER,$00
- 10$TXA;Y = 5 * X
- ASLA
- ASLA
- STXTEMP
- ADDTEMP
- 15$LDArEG2,Y
- STArEG1,Y
- INCCOUNTER
- cMPbiCOUNTER,$05
- BNE15$
- lOADbCOUNTER,$00
- CPX#$08
- BEQ20$
- BRA10$
- 20$lOADwrEG8,$0000;lOAD 0 INTO rEG 8
- lOADwrEG8+2,$0000
- lOADbrEG8+4,$00
- ; *****************************************
- ; ******************************************************************************
- ;pRINTrEGS -- pRINT OUT ALL 8 REGISTERS
- ; ******************************************************************************
- pRINTrEGS:
- JSRcLEARdATA;CLEAR SCREEN
- lOADwR6,data_left*8+2
- lOADbCOUNTER,$00
- lOADbR7h,entry_top*8-reg_w
- lOADwR5,rEG1
- 40$JSRdUMPnUM
- INCCOUNTER
- cMPbiCOUNTER,$08
- BEQ50$
- lOADbR7l,reg_w;eACH rEG GETS reg_w SCANLINES
- sUBbR7l,R7h
- aDDvw$05,R5
- BRA40$
- ; ******************************************************************************
- ;eRRORmESS,oVfLOeRR,uNfLOeRR -- pRINT AN ERROR MESSAGE, WAIT FOR A CLICK
- ; ******************************************************************************
- eRRORmESS:
- lOADwR0,eRR_sTRING
- JMPpRINTeRR
- eRR_sTRING:.BYTE24,"eRROR!",27," (CLICK)",0
- oVfLOeRR:
- lOADwR0,oV_sTRING
- JMPpRINTeRR
- oV_sTRING:.BYTE24,"oVERFLOW",27," (CLICK)",0
- uNfLOeRR:
- lOADwR0,uN_sTRING
- JMPpRINTeRR
- uN_sTRING:.BYTE24,"uNDERFLOW",27," (CLICK)",0
- @pRINTeRR:
- JSRcLReNTRY;tHIS DOES TOO MUCH, BUT OH WELL
- lOADwLEFTmARGIN,data_left*8+4
- lOADwR11,data_left*8+7
- lOADbR1h,entry_top*8+12
- JSRpUTsTRING
- 10$cMPbiMOUSEdATA,%10000000;WAIT FOR CLICK
- BNE20$
- BRA10$
- 20$JSRcLReNTRY
- lOADwLEFTmARGIN,$00
- lOADbOPRINT,TRUE;pRINT OUT
- REGISTERS
- @JMPpOSTopRINT
- ; ***************************************************************************
- ; *****************************************************************************
- ;cLReNTRY-- CLEAR ENTRY SCREEN, TURN OFF PROMPT
- ; *****************************************************************************
- cLReNTRY:
- LDA#$00
- JSRsETpATTERN
- JSRI_rECTANGLE
- .BYTEentry_top*8+1
- .BYTE(entry_top+2)*8-2
- .WORDentry_left*8+1
- .WORD(entry_left+data_width)*8-2
- JSRpROMPToFF
- lOADbALPHAfLAG,0
- LDA#$00;cLEAR eNTERsTR
- LDY#$00
- 10$STAeNTERsTR,Y
- CPY#$11
- BEQ20$
- BRA10$
- ; *****************************************************************************
- ;cLEARdATA -- cLEAR THE DATA SCREEN
- ; *****************************************************************************
- cLEARdATA:
- LDA#$00
- JSRsETpATTERN
- JSRI_rECTANGLE
- .BYTEdata_top*8+1
- .BYTE(data_top+data_height)*8-2
- .WORDdata_left*8+1
- .WORD(data_left+data_width)*8-2
- ; *****************************
- ; *****************************************************************************
- ; getbasic,flushbasic -- SWAP basic FOR geos IN BOTH WAYS
- ; *****************************************************************************
- getbasic:
- LDA$01
- AND#krnl_bas_io_in
- CMP#krnl_bas_io_in
- BEQ90$;dON'T SWAP IN basic IF IT'S ALREADY IN
- LDX#$00
- 10$LDA$22,X;sAVE geos kERNAL'S ZERO PAGE SPACE
- STAgeosZERO,X
- CPX#$3F
- BNE10$
- JSRiNITfORio
- LDA$01
- STAbEFOREbas
- ORA#krnl_bas_io_in
- STA$01
- flushbasic:
- LDA$01
- AND#krnl_bas_io_in
- CMP#krnl_bas_io_in
- BNE90$;dON'T fLUSH IF IT'S NOT HERE!
- LDX#$00
- 10$LDAgeosZERO,X;rESTORE geos kERNAL'S ZERO-PAGE SPACE
- STA$22,X
- CPX#$3F;rESTORE $22-$60; i HOPE geos DOESN'T NEED $61-$6F,
- BNE10$; BECAUSE THAT INCLUDES THE fac'S!
- LDAbEFOREbas
- STA$01
- JSRdONEwITHio
- SRgetbasic
- LDX#<(rEG1)
-