Page 1 of 2
float asm...read the value with peek?
Posted: Fri Apr 12, 2024 8:56 pm
by funkheld
Hi good afternoon.
Where is the string stored in float's memory so that it can be read with peek and written with "print"?
I would like to output this loop in basic with print/poke and not in asm:
-------------------------
loop:
lda ($02),y
beq done
jsr CHROUT
iny
bne loop
done:
------------------------
Thanks.
Code: Select all
; calculate how far an object has fallen: d = 1/2 * g * t^2.
; we set g = 9.81 m/sec^2, time = 5 sec -> d = 122.625 m.
org $00
CHROUT = $ffd2
FOUT = $fe06
FMULTT = $fe21
FDIV = $fe24
CONUPK = $fe5a
MOVFM = $fe63
lda #4
sta $01 ; rom bank 4 (BASIC) contains the fp routines.
lda #<flt_two
ldy #>flt_two
jsr MOVFM
lda #<flt_g
ldy #>flt_g
jsr FDIV ; FACC= g/2
lda #<flt_time
ldy #>flt_time
jsr CONUPK ; ARG = time
jsr FMULTT ; FACC = g/2 * time
lda #<flt_time
ldy #>flt_time
jsr CONUPK ; again ARG = time
jsr FMULTT ; FACC = g/2 * time * time
jsr FOUT ; to string
; print string in AY
sta $02
sty $03
ldy #0
loop:
lda ($02),y
beq done
jsr CHROUT
iny
bne loop
done:
rts
flt_g: .byte $84, $1c, $f5, $c2, $8f ; float 9.81
flt_time: .byte $83, $20, $00, $00, $00 ; float 5.0
flt_two: .byte $82, $00, $00, $00, $00 ; float 2.0
Re: float asm...read the value with peek?
Posted: Sat Apr 13, 2024 7:52 am
by ahenry3068
Floating point numbers are a lot more complicated internally that ints and bytes. Even more complicated than a String representation (which uses a pointer to the actual string data). Unless you need to manipulate them in an Assembly routine it's usually better to leave the internal stuff to BASIC. POINTER(A) does return the floats address, but dealing with what's there is complicated.
That being said here's a good treatise. X16 uses the same Floating Point format as C64. (Anything you read about
ROM here is almost certainly
WRONG for X16). The math stuff should be applicable.
https://c64os.com/post/floatingpointmath
Re: float asm...read the value with peek?
Posted: Sat Apr 13, 2024 8:41 am
by funkheld
I'm looking for the address where the string is located.
I had already found it once on the c64, but it was a long time ago.
Since the x16 works with the c64, I thought that you would know the address for the string.
Thanks.
Re: float asm...read the value with peek?
Posted: Sat Apr 13, 2024 8:49 am
by ahenry3068
funkheld wrote: ↑Sat Apr 13, 2024 8:41 am
I'm looking for the address where the string is located.
I had already found it once on the c64, but it was a long time ago.
Since the x16 works with the c64, I thought that you would know the address for the string.
Thanks.
Are you talking about the variable Name ? If so I believe it is Pointer(X) - 2.
OK Tested some code. The above is correct. If the Variable is a float it's name is there in ASCII value.
If the Variable is an Integer it's characters are OR'd with 128 so you AND it with 127 to get the ASCII value.
10 XX=100
20 P=POINTER(XX)
30 PRINT CHR$(PEEK(P-2));CHR$(PEEK(P-1));
Will Print XX if it's a float. If XX was an Integer
30 PRINT CHR$(PEEK(P-2) AND 127);CHR$(PEEK(P-1) AND 127);
Would print the same.
Remember when using BASLOAD you are going to get the 2 character names BASLOAD creates, Not what is in your source.
Re: float asm...read the value with peek?
Posted: Sat Apr 13, 2024 9:27 am
by funkheld
Hello.
forget my program, there is an error in it.
greeting
Re: float asm...read the value with peek?
Posted: Sat Apr 13, 2024 9:30 am
by ahenry3068
I really haven't figured out what your trying to do.
If you want to make a STRING out of any number in BASIC (Int or Float)
A=122.25
A$=STR$(A)
PRINT A$
122.25.
Re: float asm...read the value with peek?
Posted: Sat Apr 13, 2024 6:55 pm
by funkheld
hello thanks for your solution.
greeting
Re: float asm...read the value with peek?
Posted: Sat Apr 13, 2024 8:32 pm
by funkheld
Hi good afternoon.
a result printed out by the asm program and underneath simply the string from address $100
read out with peek and printed out.
greeting
Code: Select all
BANK 1
RESTORE ASM
READ Z
FOR P = 0 TO Z-1
READ A
POKE $a000+P,A
NEXT
SYS $a000
PRINT ""
PRINT ""
FOR A=0 TO 10
PRINT CHR$(PEEK($100+A));
NEXT
ASM:
DATA 73
DATA $A9, $04, $85, $01, $A9, $44, $A0, $A0, $20, $63
DATA $FE, $A9, $3A, $A0, $A0, $20, $24, $FE, $A9, $3F
DATA $A0, $A0, $20, $5A, $FE, $20, $21, $FE, $A9, $3F
DATA $A0, $A0, $20, $5A, $FE, $20, $21, $FE, $20, $06
DATA $FE, $85, $02, $84, $03, $A0, $00, $B1, $02, $F0
DATA $06, $20, $D2, $FF, $C8, $D0, $F6, $60, $84, $1C
DATA $F5, $C2, $8F, $83, $20, $00, $00, $00, $82, $00
DATA $00, $00, $00,
Re: float asm...read the value with peek?
Posted: Sun Apr 14, 2024 1:52 am
by Edmond D
Rather than poke the code into memory then execute it, consider creating an auto launching program directly.
To start read:
https://github.com/commanderx16/x16-emu ... 2-programs
Then try this example:
https://techblog.dansbo.dk/?p=38
If you don't have an Assembler, you can use the built in monitor (MON) to the CodeX environment -
https://sites.google.com/view/x16asmenv/v0-90-beta
Re: float asm...read the value with peek?
Posted: Sun Apr 14, 2024 7:04 am
by funkheld
Thanks for the info.
the editor is already in R47.
I only want to use the data on demand in basic and should not be output by the ASM program. I'm doing a test that float
in linine is faster than in basic.
i have the mads-asm-compiler :
https://mads.atari8.info/mad-assembler-mkdocs/en/
also for him 65C816 CPU from x16 (Emulator).
I have a self-written program which creates an inline data from the prg for basic.
greeting