diff --git a/STATUS.md b/STATUS.md index 5e17aebe..3b02b4a5 100644 --- a/STATUS.md +++ b/STATUS.md @@ -240,7 +240,7 @@ Floating point mathematical routines - not official, but well known and broadly | `$BC9B` | `QINT` | NOT DONE | convert FAC1 to 32 bit signed integer | | `$BCCC` | `int_FAC1` | DONE | | | `$BCF3` | `FIN` | PARTIAL | Only for 38k memory model + not fully tested yet | -| `$BD7E` | `FINLOG` | NOT DONE | | +| `$BD7E` | `FINLOG` | DONE | | | `$BDDD` | `FOUT` | NOT DONE | outputs FAC1 to string at $0100 | | `$BF71` | `sqr_FAC1` | PARTIAL | needs `sqr_FAC2` | | `$BF74` | `sqr_FAC2` | NOT DONE | | diff --git a/src/basic/math/FIN.s b/src/basic/math/FIN.s index 50051527..baf3a2dd 100644 --- a/src/basic/math/FIN.s +++ b/src/basic/math/FIN.s @@ -50,11 +50,8 @@ FIN_loop: sbc #48 ; Convert to number sta FIN_DIGIT jsr mul10_FAC1 - jsr mov_FAC1_FAC2 lda FIN_DIGIT - jsr convert_A_to_FAC1 - jsr add_FAC2_FAC1 - + jsr FINLOG lda FIN_DECFOUND ; Have we passed the decimal sign? bpl FIN_next inc FIN_NUMDEC diff --git a/src/basic/,stubs_math/bd7e.FINLOG.s b/src/basic/math/bd7e.FINLOG.s similarity index 53% rename from src/basic/,stubs_math/bd7e.FINLOG.s rename to src/basic/math/bd7e.FINLOG.s index 2172420a..a5980a36 100644 --- a/src/basic/,stubs_math/bd7e.FINLOG.s +++ b/src/basic/math/bd7e.FINLOG.s @@ -4,15 +4,16 @@ ;; #LAYOUT# * * #IGNORE ; -; Math package - add an ASCII digit that has been converted to a signed integer to FAC1 +; Math package - add an ASCII digit in A that has been converted to a signed integer to FAC1 ; ; See also: ; - [CM64] Computes Mapping the Commodore 64 - page 113 ; -; XXX implement, test - - FINLOG: - - +STUB_IMPLEMENTATION + pha + jsr mov_FAC1_FAC2 + pla + jsr convert_A_to_FAC1 + jsr add_FAC2_FAC1 + rts diff --git a/src/basic/,stubs_math/bd7e.interop b/src/basic/math/bd7e.interop similarity index 100% rename from src/basic/,stubs_math/bd7e.interop rename to src/basic/math/bd7e.interop diff --git a/strings/68203CBC b/strings/68203CBC new file mode 100644 index 00000000..dfc8e227 --- /dev/null +++ b/strings/68203CBC @@ -0,0 +1,3 @@ +PLA + JSR $BC3C + +Pull accumulator + call well known floating point function diff --git a/testsuite/unit/math.vs b/testsuite/unit/math.vs index 5b77cb2c..7f14b74e 100644 --- a/testsuite/unit/math.vs +++ b/testsuite/unit/math.vs @@ -500,5 +500,35 @@ print "COMPARE" compare $61 $61 $1001 print "END" +print "TEST: FINLOG 1.0 + 1" +fill $61 $66 81 80 00 00 00 00 +r A=1 +r PC=$BD7E +ret +fill $1001 $1006 82 80 00 00 00 00 +print "COMPARE" +compare $61 $66 $1001 +print "END" + +print "TEST: FINLOG 1.0 + 0" +fill $61 $66 81 80 00 00 00 00 +r A=0 +r PC=$BD7E +ret +fill $1001 $1006 81 80 00 00 00 00 +print "COMPARE" +compare $61 $66 $1001 +print "END" + +print "TEST: FINLOG 2.0 + 9" +fill $61 $66 82 80 00 00 00 00 +r A=9 +r PC=$BD7E +ret +fill $1001 $1006 84 B0 00 00 00 00 +print "COMPARE" +compare $61 $66 $1001 +print "END" + q