From eaa517f3022887e368e1a7ee8da6ca55747d2e17 Mon Sep 17 00:00:00 2001 From: Rikard Nordgren Date: Wed, 8 Apr 2026 19:31:39 +0200 Subject: [PATCH] Update toggle_sign_FAC1 --- STATUS.md | 2 +- src/basic/math/bfb4.toggle_sign_FAC1.s | 30 +++++++++++--------------- tools/similarity.c | 3 ++- 3 files changed, 15 insertions(+), 20 deletions(-) diff --git a/STATUS.md b/STATUS.md index 55c17c18..38842206 100644 --- a/STATUS.md +++ b/STATUS.md @@ -255,7 +255,7 @@ Floating point mathematical routines - not official, but well known and broadly | `$BF74` | `sqr_FAC2` | NOT DONE | | | `$BF78` | `pwr_FAC2_MEM` | PARTIAL | needs `pwr_FAC2_FAC1` | | `$BF7B` | `pwr_FAC2_FAC1` | NOT DONE | | -| `$BFB4` | `toggle_sign_FAC1` | DONE | | +| `$BFB4` | `toggle_sign_FAC1` | DONE | From the Microsoft BASIC, original name: NEGOP | | `$BFED` | `exp_FAC1` | NOT DONE | | | `$E043` | `poly1_FAC1` | PARTIAL | not fully tested yet | | `$E059` | `poly2_FAC1` | PARTIAL | not fully tested yet | diff --git a/src/basic/math/bfb4.toggle_sign_FAC1.s b/src/basic/math/bfb4.toggle_sign_FAC1.s index c3b7b079..5ac7f1ad 100644 --- a/src/basic/math/bfb4.toggle_sign_FAC1.s +++ b/src/basic/math/bfb4.toggle_sign_FAC1.s @@ -3,29 +3,23 @@ ;; #LAYOUT# * BASIC_0 #TAKE ;; #LAYOUT# * * #IGNORE -; +; This file is under the MIT license, it contains code released by Microsoft Corporation. +; See LICENSE for more information. + ; Math package - toggle FAC1 sign (if not 0) ; +; This is verified to be identical to the original Microsoft implementation where it was named NEGOP. +; ; See also: ; - [CM64] Computes Mapping the Commodore 64 - page 117 ; - https://www.c64-wiki.com/wiki/Floating_point_arithmetic ; toggle_sign_FAC1: - - lda FAC1_exponent - beq toggle_sign_FAC1_end ; do not toggle the sign if value is 0 - - ; FALLTROUGH - -toggle_sign_FAC1_skipcheck: ; entry for other routines - - lda FAC1_sign - eor #$FF - sta FAC1_sign - - ; FALLTROUGH - -toggle_sign_FAC1_end: - - rts + lda FAC1_exponent + beq NEGRTS + lda FAC1_sign + eor #$FF + sta FAC1_sign +NEGRTS: + rts diff --git a/tools/similarity.c b/tools/similarity.c index f6e4dac8..f199988d 100644 --- a/tools/similarity.c +++ b/tools/similarity.c @@ -20,7 +20,7 @@ int matches[MAX_SIZE]; int phase_mask[MAX_SIZE+MAX_SIZE]; -#define NUM_CHUNKS 5 +#define NUM_CHUNKS 6 // Pairs of start, end memory addresses of known exact similarity with the open source Microsoft BASIC unsigned short microsoft_basic_chunks[NUM_CHUNKS * 2] = { 0xB391, 0xB39D, @@ -28,6 +28,7 @@ unsigned short microsoft_basic_chunks[NUM_CHUNKS * 2] = { 0xB849, 0xB97D, 0xB983, 0xB9BB, 0xBA28, 0xBCF2, + 0xBFB4, 0xBFBE, };