home *** CD-ROM | disk | FTP | other *** search
- rpnSUPPORT
- seq FORMATTED geos FILE v1.0
- sTAR nx-10
- op v2.0 OR HIGHER
- ;"rpnCONST
- blaster's converter v2.5
- GEOSsYM.rpn
- GEOSmAC
- wRITE iMAGE v2.1
- GEOwRITE v2.0
- 0sUPPORT ROUTINES FOR rpn64.
- D +# K" T
- .NOEQIN
- @.INCLUDEGEOSsYM
- @INCLUDEGEOSmAC
- .INCLUDErpnCONST
- GRAPHICSmODE ==$003F
- CONFIG==$FF00
- .EQIN
- COUNTER=A0l;gRATUIT. ZPAGE COUNTER, USED BY sINK, rAISE, ETC.
- ;(i RESTORE APPL. ZPAGE SPACE AT THE END)
- ;*********************************************************************
- ; basic EQUATES
- ;*********************************************************************
- FAC1==$63
- FACEXP==$63
- FACSGN==$68
- FAC2==$6A
- GIVAYF==$AF03
- FAC1MEM==$AF66
- MEMFAC1==$AF63
- MEMFAC2==$AF5A
- FAC1FAC2==$AF6C
- FAC2FAC1==$AF69
- DECASCII==$AF06
- SYS_ASCIIDEC ==$AF09
- SYS_CHRGET==$4279
- DIV10==$8B38
- MULT10==$8B17
- FSGNA==$AF51
- FCOMPARE==$AF54
- FINT==$AF2D
- FADD==$AF18
- FSUB==$AF12
- FMULT==$AF1E
- FDIV==$AF24
- FPWR==$AF39
- FSQRT==$AF30
- FSIN==$AF42
- FCOS==$AF3F
- FTAN==$AF45
- FATAN==$AF48
- FE_TO==$AF3C
- FLOG==$AF2A
- ;FPI==$78FE
- ;nOTE: EVEN THOUGH PERUSAL OF THE 128'S rom WITH
- ;FONE==$902E
- ;monitor REVELAED THESE LOCATIONS HAD THE RIGHT
- ;FHALF==$8F76
- ;VALUES, THEY DIDN'T SEEM TO WORK WITH rpn128.
- FPI:.BYTE$82,$49,$0F,$DA,$A1 ;sO i EXPLICITLY DECLARED THESE CONSTANTS
- FONE:.BYTE$81,$00,$00,$00,$00 ; MYSELF, AS YOU SEE.
- FHALF:.BYTE$80,$00,$00,$00,$00
- ; ********************************************************************
- ; aSCII TO fLOATING pOINT CONVERSION
- ; ********************************************************************
- asciidec:
- @JSRgetbasi
- ; ********************************************************************
- ; aSCII TO fLOATING pOINT CONVERSION
- ; ********************************************************************
- asciidec:
- @JSRgetbasic
- LDX#$FF
- 10$INX;fIND THE END OF SYSTRING, KEEP THE LENGTH IN X
- LDASYSTRING,X
- BNE10$
- lOADw$24,SYSTRING;sET POINTER TO SYSTRING
- .BYTE$20,<zcALLvAL,>zcALLvAL ;JSR zcALLvAL- CALLS SYS_ASCIIDEC
- @JSRflushbasic
- @RTS
- ; *******************************************************************
- ;pRINTa-- PRINT CHR(a) AT NEXT POSITION
- ; *******************************************************************
- pRINTa:
- mOVEwtEXTxPOS,R11
- mOVEbtEXTyPOS,R1h
- JSRpUTcHAR
- mOVEwR11,tEXTxPOS
- mOVEwR11,STRINGx
- mOVEbR1h,tEXTyPOS
- LDAR1h
- SUB#$08;pROMPT POSITION IS OFF FROM TEXT BY #$08
- STASTRINGy
- JSRpROMPToN
- @RTS
- ; *******************************************************************
- ;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 (?)
- lOADwR7,SYSTRING
- LDX#R6
- LDY#R7
- JSRcOPYsTRING
- JSRuSEsYSTEMfONT;****cHECK THIS FOR 128!!!!!
- 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
- @RTS
- ; *************************************
- ; ******************************************************************
- ;fN_rN,rN_fN -- COPY FACN TO rEGN, VICE VERSA
- @note:
- fOR ALL OF THESE, basic, SHOULD
- @NOT
- BE IN.
- ; *******************************************************************
- f1_r1:
- LDX#$04
- 10$LDASTOFAC1,X
- STArEG1,X
- BPL10$
- @RTS
- r1_f1:
- LDX#$04
- 10$LDArEG1,X
- STASTOFAC1,X
- BPL10$
- @RTS
- r2_f2:
- LDX#$04
- 10$LDArEG2,X
- STASTOFAC2,X
- BPL10$
- @RTS
- r1_f2:
- LDX#$04
- 10$LDArEG1,X
- STASTOFAC2,X
- BPL10$
- @RTS
- f1_r2:
- LDX#$04
- 10$LDASTOFAC1,X
- STArEG2,X
- BPL10$
- @RTS
- r2_f1:
- LDX#$04
- 10$LDArEG2,X
- STASTOFAC1,X
- BPL10$
- @RTS
- OVEwR11,tEXTxPOS
- mOVEwR11,STRINGx
- mOVEbR1h,tEXTyPOS
- LDAR1h
- SUB#$08;pROMPT POSITION IS OFF FROM TEXT BY #$08
- STASTRINGy
- JSRpROMPToN
- @RTS
- ; *******************************************************************
- ;dUMPnUM-- OU
- ; ******************************************************************
- ;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
- .WORD$8000+data_left*8+1
- .WORD$8000+(data_left+data_width)*8-2
- lOADwR5,rEG1
- lOADwR6,$8000+data_left*8+4
- lOADbR7h,entry_top*8-reg_w
- @JMPdUMPnUM
- ;pRINT OUT rEG 1
- @.IF0
- ;**********************************************************************
- @pAUSEpRINT -- DEBUGGING UTILITY
- ;**************************************************
- ; ******************************************************************
- ;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$
- @RTS
- ; *****************************************************************
- ;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
- @RTS
- ; ******************************************************************
- ;pRINTrEGS --
- ; ******************************************************************
- ;pRINTrEGS -- pRINT OUT ALL 8 REGISTERS
- ; ******************************************************************
- pRINTrEGS:
- JSRcLEARdATA;CLEAR SCREEN
- lOADwR6,$8000+data_left*8+4
- 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$
- @RTS
- ; ******************************************************************
- ;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:
- pUSHwR0
- JSRcLReNTRY;tHIS DOES TOO MUCH, BUT OH WELL
- lOADwLEFTmARGIN,$8000+data_left*8+4
- lOADwR11,$8000+data_left*8+7
- lOADbR1h,entry_top*8+12
- pOPwR0
- JSRpUTsTRING
- 10$cMPbiMOUSEdATA,%10000000 ;WAIT FOR CLICK
- BNE20$
- BRA10$
- 20$JSRcLReNTRY
- lOADwLEFTmARGIN,$00
- lOADbOPRINT,TRUE;pRINT OUT
- REGISTERS
- @JMPpOSTopRINT
- ; ***************************************************************
- ;cLReNTRY-- CLEAR
- ; ***************************************************************
- ;cLReNTRY-- CLEAR ENTRY SCREEN, TURN OFF PROMPT
- ; ***************************************************************
- cLReNTRY:
- LDA#$00
- JSRsETpATTERN
- JSRI_rECTANGLE
- .BYTEentry_top*8+1
- .BYTE(entry_top+2)*8-2
- .WORD$8000+entry_left*8+1
- .WORD$8000+(entry_left+data_width)*8-2
- JSRpROMPToFF
- lOADbALPHAfLAG,0
- LDA#$00;cLEAR eNTERsTR
- LDX#$09
- 10$STAeNTERsTR,Y
- BPL10$
- @RTS
- ; *************************************************************
- ;cLEARdATA -- cLEAR THE DATA SCREEN
- ; *************************************************************
- cLEARdATA:
- LDA#$00
- JSRsETpATTERN
- JSRI_rECTANGLE
- .BYTEdata_top*8+1
- .BYTE(data_top+data_height)*8-2
- .WORD$8000+data_left*8+1
- .WORD$8000+(data_left+data_width)*8-2
- @RTS
- ; ******************************************************************
- ; getbasic,flushbasi
- ; ******************************************************************
- ; getbasic,flushbasic -- SWAP basic FOR geos IN BOTH WAYS
- ; ******************************************************************
- getbasic:
- LDACONFIG
- ORA#%11110001
- CMP#%11110001
- BEQ90$;dON'T SWAP IN basic IF IT'S ALREADY IN!
- LDX#$40;sAVE $41 BYTES OF geos ZERO PAGE
- 10$LDA$22,X
- STAgeosZERO,X
- BPL10$
- zcALLvAL==$2D
- LDX#$0C
- 15$LDAcALLvAL,X;cOPY SYS_ASCIIDEC CALLER TO $2D
- STAzcALLvAL,X;(a REGION IN zPAGE i JUST SAVED WHICH
- DEX; basic fLOATING pOINT ROUTINES DON'T NEED)
- BPL15$
- @SEI;dISABLE iNTERRUPTS DURING basic!
- mOVEbCONFIG,bEFOREbas;sAVE mmu
- AND#%11000000;sWAP IN kERNAL, basic, io
- STACONFIG
- JSR$417D;sETS UP basic'S DEFAULT pRECONFIG. REGS.
- LDX#$7F
- 20$LDA$380,X;sAVE ORIGINAL CONTENTS OF $380
- STAsAVE380,X
- LDASYS_CHRGET,X;cOPY chrget TO $380
- STA$380,X
- BPL20$
- LDA#<(STOFAC1);iNSTALL FAC1
- LDY#>(STOFAC1)
- JSRMEMFAC1
- LDA#<(STOFAC2);iNSTALL FAC2
- LDY#>(STOFAC2)
- JSRMEMFAC2
- lOADb$3D5,$00;THE CONFIGURATION(?) basic USES (bank 15)
- STA$3DF;iNITIALIZE AN OVERFLOW VARIABLE
- lOADb$3DA,$FF;asciidec LOOKS FOR STRING IN bLOCK 1 ram
- @RTS
- @cALLvAL:
- LDACONFIG;rOUTINE TO CALL SYS_ASCIIDEC AND RECOVER
- PHA; CALLER'S BANK CONFIGURATION. x COMES IN WITH
- TXA; THE LENGTH OF THE STRING TO BE CONVERTED.
- JSRSYS_ASCIIDEC
- STACONFIG
- @RTS
- flushbasic:
- flushbasic:
- LDACONFIG
- AND#%00001110
- CMP#%00001110;iF THESE 3 ARE SET, ram IS IN IN PLACE OF basic
- BEQ90$;dON'T fLUSH IF IT'S NOT HERE!
- LDX#<(STOFAC1);sAVE FAC1
- LDY#>(STOFAC1)
- JSRFAC1MEM
- JSRFAC2FAC1;sAVE FAC2
- LDX#<(STOFAC2)
- LDY#>(STOFAC2)
- JSRFAC1MEM
- mOVEbbEFOREbas,CONFIG;rESTORE ORIGINAL CONFIGURATION
- LDX#$7F
- 10$LDAsAVE380,X;rESTORE ORIGINAL CONTENTS OF $380
- STA$380,X
- BPL10$
- LDX#$40
- 20$LDAgeosZERO,X;rESTORE geos kERNAL'S ZERO-PAGE SPACE
- STA$22,X
- BPL20$
- @CLI;mAKE SURE INTERRUPTS ARE ENABLED
- @RTS
- .BYTEok
- .BYTE$80+8,14
- .BYTEdbtxtstr
- .BYTE4,8
- ppdbTXT:.WORD$0000
-