home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
8bitfiles.net/archives
/
archives.tar
/
archives
/
genie-commodore-file-library
/
GEOSApps
/
RPN64-SRC.SFX
/
rpnsupport
(
.txt
)
< prev
next >
Wrap
GEOS ConVerT
|
1990-02-12
|
11KB
|
336 lines
/%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
@.include geosSym
@include geosMac
.include RPNconst
.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:
@jsr GETBASIC
jsr GetCHRGET ;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,
jsr sys_asciidec ; even without zpage addressing! Argh!)
@jsr FLUSHBASIC
; ****************************************************************************
; 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
beq 20$
lda sysCHRGET,x
sta zpCHRGET,x
bra 10$
; ****************************************************************************
; PrintA -- print chr(A) at next position
; *********************************
; ****************************************************************************
; PrintA -- print chr(A) at next position
; ****************************************************************************
PrintA:
MoveW TextXpos,r11
MoveB TextYpos,r1H
jsr PutChar
MoveW r11,TextXpos
MoveW r11,stringX
MoveB r1H,TextYpos
lda r1H
sub #$08 ;Stupid Prompt position is off from text by #$08 (duh!)
sta stringY
jsr PromptOn
; ****************************************************************************
; DumpNum -- output number at (r5) to (r6,r7H)
; ****************************************************************************
DumpNum:
@jsr GETBASIC
lda r5L
ldy r5H
jsr memfac1
jsr decascii
@jsr FLUSHBASIC
MoveW r5,tmpblk ;Save r5,r6,r7 from destruction by PutString
MoveW r6,tmpblk+2
MoveW r7,tmpblk+4
LoadW r6,$0100 ;Copy String at $0100 to system string (who knows why)
LoadW r7,systring
ldx #r6
ldy #r7
jsr CopyString
jsr UseSystemFont
LoadW r0,systring ;Output the system string
MoveW tmpblk+4,r1
MoveW tmpblk+2,r11
jsr PutString
MoveW tmpblk+4,r7 ;Restore original values of r7H,r5,r6
MoveW tmpblk+2,r6
MoveW tmpblk,r5
; ****************************************************************************
; Fn_Rn,Rn_Fn -- copy facn to Regn, vice versa
; ****************************************************************************
F1_R1:
@jsr GETBASIC
ldx #<(Reg1)
ldy #>(Reg1)
jsr fac1mem
@jsr FLUSHBASIC
R1_F1:
@jsr GETBASIC
lda #<(Reg1)
ldy #>(Reg1)
jsr memfac1
@jsr FLUSHBASIC
R2_F2:
@jsr GETBASIC
lda #<(Reg2)
ldy #>(Reg2)
jsr memfac2
@jsr FLUSHBASIC
R1_F2:
@jsr GETBASIC
lda #<(Reg1)
ldy #>(Reg1)
jsr memfac2
@jsr FLUSHBASIC
F1_R2:
@jsr GETBASIC
ldx #<(Reg2)
ldy #>(Reg2)
jsr fac1mem
@jsr FLUSHBASIC
2_F1:
@jsr GETBASIC
lda #<(Reg2)
ldy #>(Reg2)
jsr memfac1
@jsr FLUSHBASIC
; ****************************************************************************
; PrintR1 -- Clear spot and print
; ****************************************************************************
; PrintR1 -- Clear spot and print out Reg 1
; ****************************************************************************
PrintR1:
lda #$00
jsr SetPattern ;Set pattern to white
jsr i_Rectangle ;Clear position on data screen for F.P. Reg 1
.byte ENTRY_TOP*8-REG_W-8
.byte (DATA_TOP+DATA_HEIGHT)*8-2
.word DATA_LEFT*8+1
.word (DATA_LEFT+DATA_WIDTH)*8-2
LoadW r5,Reg1
LoadW r6,DATA_LEFT*8+2
LoadB r7H,ENTRY_TOP*8-REG_W
jsr DumpNum ;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)
LoadB counter,$00
10$ txa ;y = 5 * x
asl a
asl a
stx temp
add temp
15$ lda Reg1,y ;move reg x to reg x+1
sta Reg2,y
inc counter
CmpBI counter,$05 ;each reg is 5 bytes
bne 15$
LoadB counter,$00
cpx #$ff ;have done regs from 7 to 1
beq 20$
bra 10$
; ****************************************************************************
; 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)
LoadB counter,$00
10$ txa ;y = 5 * x
asl a
asl a
stx temp
add temp
15$ lda Reg2,y
sta Reg1,y
inc counter
CmpBI counter,$05
bne 15$
LoadB counter,$00
cpx #$08
beq 20$
bra 10$
20$ LoadW Reg8,$0000 ;Load 0 into Reg 8
LoadW Reg8+2,$0000
LoadB Reg8+4,$00
; *****************************************
; ******************************************************************************
; PrintRegs -- Print out all 8 registers
; ******************************************************************************
PrintRegs:
jsr ClearData ;clear screen
LoadW r6,DATA_LEFT*8+2
LoadB counter,$00
LoadB r7H,ENTRY_TOP*8-REG_W
LoadW r5,Reg1
40$ jsr DumpNum
inc counter
CmpBI counter,$08
beq 50$
LoadB r7L,REG_W ;Each Reg gets REG_W scanlines
SubB r7L,r7H
AddVW $05,r5
bra 40$
; ******************************************************************************
; ErrorMess,OvFloErr,UnFloErr -- Print an error message, wait for a click
; ******************************************************************************
ErrorMess:
LoadW r0,Err_String
jmp PrintErr
Err_String: .byte 24,"Error!",27," (click)",0
OvFloErr:
LoadW r0,Ov_String
jmp PrintErr
Ov_String: .byte 24,"Overflow",27," (click)",0
UnFloErr:
LoadW r0,Un_String
jmp PrintErr
Un_String: .byte 24,"Underflow",27," (click)",0
@PrintErr:
jsr ClrEntry ;This does too much, but oh well
LoadW leftMargin,DATA_LEFT*8+4
LoadW r11,DATA_LEFT*8+7
LoadB r1H,ENTRY_TOP*8+12
jsr PutString
10$ CmpBI mouseData,%10000000 ;wait for click
bne 20$
bra 10$
20$ jsr ClrEntry
LoadW leftMargin,$00
LoadB oprint,true ;Print out
registers
@ jmp PostOPrint
; ***************************************************************************
; *****************************************************************************
; ClrEntry -- clear entry screen, turn off prompt
; *****************************************************************************
ClrEntry:
lda #$00
jsr SetPattern
jsr i_Rectangle
.byte ENTRY_TOP*8+1
.byte (ENTRY_TOP+2)*8-2
.word ENTRY_LEFT*8+1
.word (ENTRY_LEFT+DATA_WIDTH)*8-2
jsr PromptOff
LoadB alphaFlag,0
lda #$00 ;Clear EnterStr
ldy #$00
10$ sta EnterStr,y
cpy #$11
beq 20$
bra 10$
; *****************************************************************************
; ClearData -- Clear the data screen
; *****************************************************************************
ClearData:
lda #$00
jsr SetPattern
jsr i_Rectangle
.byte DATA_TOP*8+1
.byte (DATA_TOP+DATA_HEIGHT)*8-2
.word DATA_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
beq 90$ ;Don't swap in BASIC if it's already in
ldx #$00
10$ lda $22,x ;Save GEOS Kernal's zero page space
sta GEOSzero,x
cpx #$3f
bne 10$
jsr InitForIO
lda $01
sta BeforeBAS
ora #KRNL_BAS_IO_IN
sta $01
FLUSHBASIC:
lda $01
and #KRNL_BAS_IO_IN
cmp #KRNL_BAS_IO_IN
bne 90$ ;Don't Flush if it's not here!
ldx #$00
10$ lda GEOSzero,x ;Restore GEOS Kernal's zero-page space
sta $22,x
cpx #$3f ;Restore $22-$60; I hope GEOS doesn't need $61-$6f,
bne 10$ ; because that includes the FAC's!
lda BeforeBAS
sta $01
jsr DoneWithIO
sr GETBASIC
ldx #<(Reg1)