Skip to content

Commit 7d6f50d

Browse files
committed
Transition to AES or MVS pitch tables for NSS
Added dedicated pitch tables to generate the exact frequency specific in Furnace modules based on the YM2610 clock used by the hardware (either AES or MVS). Modify furtool to generate Delta-N values that are based on the clock used by Furnace modules (AES or MVS). By default, we now stick to the MVS tables, and we provide a new nullsound-aes.lib if one wants to get precise frequency rendition for Furnace modules which have been authored for the AES. The generated tables are included in this commit, so are the input scripts used to generate the tables.
1 parent ea3bce1 commit 7d6f50d

19 files changed

Lines changed: 44977 additions & 116 deletions

nullsound/Makefile.in

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2018-2024 Damien Ciabrini
1+
# Copyright (c) 2018-2026 Damien Ciabrini
22
# This file is part of ngdevkit
33
#
44
# ngdevkit is free software: you can redistribute it and/or modify
@@ -14,36 +14,71 @@
1414
# You should have received a copy of the GNU Lesser General Public License
1515
# along with ngdevkit. If not, see <http://www.gnu.org/licenses/>.
1616

17-
all: nullsound.lib linkcheck.map
17+
all: nullsound.lib nullsound-aes.lib linkcheck.map
1818

1919
-include ../Makefile.config
2020

2121
INCLUDE_FILES=helpers ports ym2610
22-
OBJS=entrypoint memory bios-commands adpcm ym2610 stream timer utils nss-fm nss-ssg nss-adpcm-a nss-adpcm-b fx-vibrato fx-slide fx-trigger fx-arpeggio fx-legato volume
23-
LIB=nullsound.lib
22+
OBJS=\
23+
memory \
24+
bios-commands \
25+
adpcm \
26+
ym2610 \
27+
stream \
28+
timer \
29+
utils \
30+
nss-fm \
31+
nss-ssg \
32+
nss-adpcm-a \
33+
nss-adpcm-b \
34+
fx-vibrato \
35+
fx-slide \
36+
fx-trigger \
37+
fx-arpeggio \
38+
fx-legato \
39+
volume
40+
OBJS_MVS=entrypoint-mvs $(OBJS)
41+
OBJS_AES=entrypoint-aes $(OBJS)
42+
LIB_MVS=nullsound.lib
43+
LIB_AES=nullsound-aes.lib
2444

2545
VERSION=@version@
2646

2747
# nullsound assumes that various data blocks are linked in RAM
2848
# within a 16bits address range that has constant MSB, to speed up
2949
# 8-bit pointer addition. This target ensure bounds are valid
30-
linkcheck.map: $(LIB)
31-
$(NGSDLD) -n -b DATA=0xf800 $@ $(LIB) -g cmd_jmptable=0 -i -w -m && \
50+
linkcheck.map: $(LIB_MVS)
51+
$(NGSDLD) -n -b DATA=0xf800 $@ $(LIB_MVS) -g cmd_jmptable=0 -i -w -m && \
3252
$(PYTHON) check-bounds.py $@
3353

3454
# NOTE: it's unclear whether a real ar lib can be passed as a .rel
3555
# argument to the linker, at least it sometimes fail to parse on MSYS2
3656
# make a bare concatenation of all .rel instead, as it does not contain
3757
# binary characters and can be reliably parsed by ASLink/sdld
38-
$(LIB): $(OBJS:%=%.rel)
58+
$(LIB_MVS): $(OBJS_MVS:%=%.rel)
3959
cat $^ > $@
4060

61+
$(LIB_AES): $(OBJS_AES:%=%.rel)
62+
cat $^ > $@
63+
64+
# The driver has specific sound tables for MVS and AES to generate
65+
# the right playback frequency depending on the hardware's audio clock.
66+
# In practice, this makes little difference, so by default, the MVS
67+
# clock is considered is used in nullsound.lib
68+
# But if you want exact playback frequency for Furnace modules that have
69+
# been authored for AES, you can link against nullsound-aes.lib
70+
entrypoint-mvs.rel: entrypoint.s
71+
$(NGSDAS) -a -g -l -p -s -u -Imvs -o $@ $<
72+
73+
entrypoint-aes.rel: entrypoint.s
74+
$(NGSDAS) -a -g -l -p -s -u -Iaes -o $@ $<
75+
4176
%.rel: %.s
4277
$(NGSDAS) -a -g -l -p -s -u -o $@ $<
4378

4479
install: install-nullsound install-include
4580

46-
install-nullsound: $(LIB)
81+
install-nullsound: $(LIB_MVS) $(LIB_AES)
4782
$(INSTALL) -d $(DESTDIR)$(prefix)/z80-neogeo-ihx/lib && \
4883
$(INSTALL) $^ $(DESTDIR)$(prefix)/z80-neogeo-ihx/lib
4984

nullsound/aes/fm-tables.inc

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
;;; FM pitched note tables (AES) for nullsound, the ngdevkit sound driver
2+
;;; Generated with build-pitch-tables.py
3+
;;;
4+
5+
.macro .fm_fnum_deltas_data
6+
.dw 0x0000, 0x01f1, 0x03e3, 0x05d5, 0x07c7, 0x09b9, 0x0bac, 0x0d9e
7+
.dw 0x0f92, 0x1185, 0x1378, 0x156c, 0x1760, 0x1954, 0x1b49, 0x1d3d
8+
.dw 0x1f32, 0x2127, 0x231c, 0x2512, 0x2708, 0x28fe, 0x2af4, 0x2cea
9+
.dw 0x2ee1, 0x30d8, 0x32cf, 0x34c6, 0x36be, 0x38b6, 0x3aae, 0x3ca6
10+
.dw 0x3e9e, 0x4097, 0x4290, 0x4489, 0x4683, 0x487c, 0x4a76, 0x4c70
11+
.dw 0x4e6a, 0x5065, 0x5260, 0x545b, 0x5656, 0x5851, 0x5a4d, 0x5c49
12+
.dw 0x5e45, 0x6041, 0x623e, 0x643b, 0x6638, 0x6835, 0x6a33, 0x6c30
13+
.dw 0x6e2e, 0x702c, 0x722b, 0x742a, 0x7628, 0x7828, 0x7a27, 0x7c27
14+
.dw 0x7e26, 0x8026, 0x8227, 0x8427, 0x8628, 0x8829, 0x8a2a, 0x8c2c
15+
.dw 0x8e2d, 0x902f, 0x9231, 0x9434, 0x9636, 0x9839, 0x9a3c, 0x9c3f
16+
.dw 0x9e43, 0xa047, 0xa24b, 0xa44f, 0xa653, 0xa858, 0xaa5d, 0xac62
17+
.dw 0xae67, 0xb06d, 0xb273, 0xb479, 0xb67f, 0xb886, 0xba8d, 0xbc94
18+
.dw 0xbe9b, 0xc0a2, 0xc2aa, 0xc4b2, 0xc6ba, 0xc8c3, 0xcacb, 0xccd4
19+
.dw 0xcedd, 0xd0e7, 0xd2f0, 0xd4fa, 0xd704, 0xd90f, 0xdb19, 0xdd24
20+
.dw 0xdf2f, 0xe13a, 0xe346, 0xe551, 0xe75d, 0xe96a, 0xeb76, 0xed83
21+
.dw 0xef90, 0xf19d, 0xf3aa, 0xf5b8, 0xf7c6, 0xf9d4, 0xfbe2, 0xfdf1
22+
.endm
23+
24+
.macro .fm_fnums_data
25+
.db 0xf0, 0x52, 0x26 ; C-n
26+
.db 0x55, 0x9a, 0x28 ; C#n
27+
.db 0x68, 0x04, 0x2b ; D-n
28+
.db 0x3d, 0x93, 0x2d ; D#n
29+
.db 0x02, 0x49, 0x30 ; E-n
30+
.db 0x08, 0x28, 0x33 ; F-n
31+
.db 0xc3, 0x32, 0x36 ; F#n
32+
.db 0xcd, 0x6b, 0x39 ; G-n
33+
.db 0xe7, 0xd5, 0x3c ; G#n
34+
.db 0xf7, 0x73, 0x40 ; A-n
35+
.db 0x1b, 0x49, 0x44 ; A#n
36+
.db 0x98, 0x58, 0x48 ; B-n
37+
.endm
38+
39+
.macro .fm_dists_data
40+
.db 0x65, 0x47, 0x02 ; C-n
41+
.db 0x13, 0x6a, 0x02 ; C#n
42+
.db 0xd5, 0x8e, 0x02 ; D-n
43+
.db 0xc5, 0xb5, 0x02 ; D#n
44+
.db 0x06, 0xdf, 0x02 ; E-n
45+
.db 0xbb, 0x0a, 0x03 ; F-n
46+
.db 0x0a, 0x39, 0x03 ; F#n
47+
.db 0x1a, 0x6a, 0x03 ; G-n
48+
.db 0x10, 0x9e, 0x03 ; G#n
49+
.db 0x24, 0xd5, 0x03 ; A-n
50+
.db 0x7d, 0x0f, 0x04 ; A#n
51+
.db 0x4b, 0x4d, 0x04 ; B-n
52+
.endm

nullsound/aes/ssg-tables.inc

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
;;; SSG pitched note tables (AES) for nullsound, the ngdevkit sound driver
2+
;;; Generated with build-pitch-tables.py
3+
;;;
4+
5+
.macro .ssg_tune_deltas_data
6+
.dw 0x0000, 0x020e, 0x041d, 0x062b, 0x0839, 0x0a47, 0x0c55, 0x0e62
7+
.dw 0x106f, 0x127c, 0x1489, 0x1695, 0x18a2, 0x1aae, 0x1cb9, 0x1ec5
8+
.dw 0x20d0, 0x22db, 0x24e6, 0x26f0, 0x28fb, 0x2b05, 0x2d0f, 0x2f18
9+
.dw 0x3122, 0x332b, 0x3534, 0x373c, 0x3945, 0x3b4d, 0x3d55, 0x3f5d
10+
.dw 0x4164, 0x436b, 0x4572, 0x4779, 0x4980, 0x4b86, 0x4d8c, 0x4f92
11+
.dw 0x5198, 0x539d, 0x55a2, 0x57a7, 0x59ac, 0x5bb0, 0x5db4, 0x5fb8
12+
.dw 0x61bc, 0x63c0, 0x65c3, 0x67c6, 0x69c9, 0x6bcb, 0x6dce, 0x6fd0
13+
.dw 0x71d2, 0x73d3, 0x75d5, 0x77d6, 0x79d7, 0x7bd8, 0x7dd8, 0x7fd9
14+
.dw 0x81d9, 0x83d8, 0x85d8, 0x87d7, 0x89d7, 0x8bd5, 0x8dd4, 0x8fd3
15+
.dw 0x91d1, 0x93cf, 0x95cc, 0x97ca, 0x99c7, 0x9bc4, 0x9dc1, 0x9fbe
16+
.dw 0xa1ba, 0xa3b6, 0xa5b2, 0xa7ae, 0xa9a9, 0xaba4, 0xad9f, 0xaf9a
17+
.dw 0xb195, 0xb38f, 0xb589, 0xb783, 0xb97c, 0xbb76, 0xbd6f, 0xbf68
18+
.dw 0xc161, 0xc359, 0xc551, 0xc749, 0xc941, 0xcb39, 0xcd30, 0xcf27
19+
.dw 0xd11e, 0xd315, 0xd50b, 0xd701, 0xd8f7, 0xdaed, 0xdce3, 0xded8
20+
.dw 0xe0cd, 0xe2c2, 0xe4b6, 0xe6ab, 0xe89f, 0xea93, 0xec87, 0xee7a
21+
.dw 0xf06d, 0xf261, 0xf453, 0xf646, 0xf838, 0xfa2a, 0xfc1c, 0xfe0e
22+
.endm
23+
24+
.macro .ssg_dists_lsb_data
25+
;; C-n, C#n, D-n, D#n, E-n, F-n, F#n, G-n, G#n, A-n, A#n, B-n
26+
.dw 0x806e, 0xbe70, 0x0754, 0x5a80, 0xb75f, 0x1d66, 0x8c11, 0x02e4, 0x816a, 0x0735, 0x93db, 0x26fb, 0, 0, 0, 0
27+
.dw 0x806e, 0xbe70, 0x0754, 0x5a80, 0xb75f, 0x1d66, 0x8c11, 0x02e4, 0x816a, 0x0735, 0x93db, 0x26fb, 0, 0, 0, 0
28+
.dw 0xc037, 0x5f38, 0x03aa, 0xad40, 0x5bb0, 0x0eb3, 0xc608, 0x8172, 0x40b5, 0x039b, 0xc9f0, 0x937b, 0, 0, 0, 0
29+
.dw 0x601b, 0x2f9c, 0x01d5, 0xd6a0, 0xadd8, 0x875a, 0x6304, 0x40b9, 0x205a, 0x01ce, 0xe4f9, 0xc9bc, 0, 0, 0, 0
30+
.dw 0xb00e, 0x97ce, 0x80ea, 0x6b50, 0x56ec, 0x43ad, 0x3182, 0x205d, 0x102d, 0x00e7, 0xf27b, 0xe4df, 0, 0, 0, 0
31+
.dw 0xd807, 0xcbe7, 0xc075, 0xb5a8, 0xab76, 0xa1d7, 0x98c1, 0x902e, 0x8817, 0x8073, 0x793e, 0x726f, 0, 0, 0, 0
32+
.dw 0x6c04, 0x65f3, 0x603b, 0x5ad4, 0x55bb, 0x50eb, 0x4c61, 0x4817, 0x440b, 0x403a, 0x3c9f, 0x3937, 0, 0, 0, 0
33+
.dw 0x3602, 0x32fa, 0x301d, 0x2d6a, 0x2ade, 0x2875, 0x2631, 0x240b, 0x2206, 0x201d, 0x1e4f, 0x1c9c, 0, 0, 0, 0
34+
.endm
35+
36+
.macro .ssg_tunes_msb_data
37+
;; C-n, C#n, D-n, D#n, E-n, F-n, F#n, G-n, G#n, A-n, A#n, B-n
38+
.dw 0xf08f, 0xe30f, 0xd650, 0xca49, 0xbeef, 0xb437, 0xaa1a, 0xa08e, 0x978b, 0x8f09, 0x8702, 0x7f6e, 0, 0, 0, 0
39+
.dw 0xf08f, 0xe30f, 0xd650, 0xca49, 0xbeef, 0xb437, 0xaa1a, 0xa08e, 0x978b, 0x8f09, 0x8702, 0x7f6e, 0, 0, 0, 0
40+
.dw 0x7847, 0x7187, 0x6b28, 0x6524, 0x5f77, 0x5a1b, 0x550d, 0x5047, 0x4bc5, 0x4784, 0x4381, 0x3fb7, 0, 0, 0, 0
41+
.dw 0x3c23, 0x38c3, 0x3594, 0x3292, 0x2fbb, 0x2d0d, 0x2a86, 0x2823, 0x25e2, 0x23c2, 0x21c0, 0x1fdb, 0, 0, 0, 0
42+
.dw 0x1e11, 0x1c61, 0x1aca, 0x1949, 0x17dd, 0x1686, 0x1543, 0x1411, 0x12f1, 0x11e1, 0x10e0, 0x0fed, 0, 0, 0, 0
43+
.dw 0x0f08, 0x0e30, 0x0d65, 0x0ca4, 0x0bee, 0x0b43, 0x0aa1, 0x0a08, 0x0978, 0x08f0, 0x0870, 0x07f6, 0, 0, 0, 0
44+
.dw 0x0784, 0x0718, 0x06b2, 0x0652, 0x05f7, 0x05a1, 0x0550, 0x0504, 0x04bc, 0x0478, 0x0438, 0x03fb, 0, 0, 0, 0
45+
.dw 0x03c2, 0x038c, 0x0359, 0x0329, 0x02fb, 0x02d0, 0x02a8, 0x0282, 0x025e, 0x023c, 0x021c, 0x01fd, 0, 0, 0, 0
46+
.endm
47+
48+
.macro .ssg_tunes_lsb_data
49+
;; C-n, C#n, D-n, D#n, E-n, F-n, F#n, G-n, G#n, A-n, A#n, B-n
50+
.db 0xc2, 0x54, 0xe4, 0x90, 0x10, 0xb1, 0x4b, 0x3a, 0x56, 0xec, 0xb7, 0xdc, 0, 0, 0, 0
51+
.db 0xc2, 0x54, 0xe4, 0x90, 0x10, 0xb1, 0x4b, 0x3a, 0x56, 0xec, 0xb7, 0xdc, 0, 0, 0, 0
52+
.db 0xe1, 0xaa, 0x72, 0xc8, 0x88, 0xd8, 0x25, 0x1d, 0xab, 0xf6, 0x5b, 0x6b, 0, 0, 0, 0
53+
.db 0xf0, 0xd5, 0x39, 0x64, 0xc4, 0xec, 0x92, 0x8e, 0xd5, 0x7b, 0xad, 0xb4, 0, 0, 0, 0
54+
.db 0xf8, 0xea, 0x1c, 0x32, 0xe2, 0xf6, 0x49, 0xc7, 0x6a, 0x3d, 0x56, 0xdb, 0, 0, 0, 0
55+
.db 0xfc, 0xf5, 0x0e, 0x99, 0xf1, 0x7b, 0xa4, 0xe3, 0xb5, 0x9e, 0x2b, 0xed, 0, 0, 0, 0
56+
.db 0x7e, 0x7a, 0x87, 0x4c, 0x78, 0xbd, 0xd2, 0x71, 0x5a, 0x4f, 0x15, 0x76, 0, 0, 0, 0
57+
.db 0x3f, 0x3d, 0x43, 0x26, 0xbc, 0xde, 0x69, 0x38, 0x2d, 0x27, 0x0a, 0xbb, 0, 0, 0, 0
58+
.endm
59+
60+
.macro .ssg_dists_msb_data
61+
;; C-n, C#n, D-n, D#n, E-n, F-n, F#n, G-n, G#n, A-n, A#n, B-n
62+
.db 0x0d, 0x0c, 0x0c, 0x0b, 0x0a, 0x0a, 0x09, 0x09, 0x08, 0x08, 0x07, 0x07, 0, 0, 0, 0
63+
.db 0x0d, 0x0c, 0x0c, 0x0b, 0x0a, 0x0a, 0x09, 0x09, 0x08, 0x08, 0x07, 0x07, 0, 0, 0, 0
64+
.db 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0, 0, 0, 0
65+
.db 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0, 0, 0, 0
66+
.db 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0, 0, 0, 0
67+
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0, 0, 0, 0
68+
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0, 0, 0, 0
69+
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0, 0, 0, 0
70+
.endm

nullsound/buffers.s

Lines changed: 16 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121

2222
.module nullsound
2323

24+
.include "fm-tables.inc"
25+
.include "ssg-tables.inc"
26+
2427
.area CODE
2528

2629
.bndry 256
@@ -61,7 +64,7 @@ sine::
6164

6265
;;; Delta factor for all possible fractional semitones
6366
;;; ------
64-
;;; Internally nullsound works with decimal semitones (8:8 fixed point) to encode
67+
;;; Internally nullsound works with decimal semitones (8:7 fixed point) to encode
6568
;;; the tune shift of a note after FX (e.g. pitch, vibrato, slide...)
6669
;;; There are 128 possible fractional semitones between two integer semitones.
6770
;;;
@@ -82,41 +85,11 @@ sine::
8285

8386
;;; SSG tune delta for all 128 fractional semitones
8487
ssg_tune_deltas::
85-
.dw 0x0000, 0x020e, 0x041d, 0x062b, 0x0839, 0x0a47, 0x0c55, 0x0e62
86-
.dw 0x106f, 0x127c, 0x1489, 0x1695, 0x18a2, 0x1aae, 0x1cb9, 0x1ec5
87-
.dw 0x20d0, 0x22db, 0x24e6, 0x26f0, 0x28fb, 0x2b05, 0x2d0f, 0x2f18
88-
.dw 0x3122, 0x332b, 0x3534, 0x373c, 0x3945, 0x3b4d, 0x3d55, 0x3f5d
89-
.dw 0x4164, 0x436b, 0x4572, 0x4779, 0x4980, 0x4b86, 0x4d8c, 0x4f92
90-
.dw 0x5198, 0x539d, 0x55a2, 0x57a7, 0x59ac, 0x5bb0, 0x5db4, 0x5fb8
91-
.dw 0x61bc, 0x63c0, 0x65c3, 0x67c6, 0x69c9, 0x6bcb, 0x6dce, 0x6fd0
92-
.dw 0x71d2, 0x73d3, 0x75d5, 0x77d6, 0x79d7, 0x7bd8, 0x7dd8, 0x7fd9
93-
.dw 0x81d9, 0x83d8, 0x85d8, 0x87d7, 0x89d7, 0x8bd5, 0x8dd4, 0x8fd3
94-
.dw 0x91d1, 0x93cf, 0x95cc, 0x97ca, 0x99c7, 0x9bc4, 0x9dc1, 0x9fbe
95-
.dw 0xa1ba, 0xa3b6, 0xa5b2, 0xa7ae, 0xa9a9, 0xaba4, 0xad9f, 0xaf9a
96-
.dw 0xb195, 0xb38f, 0xb589, 0xb783, 0xb97c, 0xbb76, 0xbd6f, 0xbf68
97-
.dw 0xc161, 0xc359, 0xc551, 0xc749, 0xc941, 0xcb39, 0xcd30, 0xcf27
98-
.dw 0xd11e, 0xd315, 0xd50b, 0xd701, 0xd8f7, 0xdaed, 0xdce3, 0xded8
99-
.dw 0xe0cd, 0xe2c2, 0xe4b6, 0xe6ab, 0xe89f, 0xea93, 0xec87, 0xee7a
100-
.dw 0xf06d, 0xf261, 0xf453, 0xf646, 0xf838, 0xfa2a, 0xfc1c, 0xfe0e
88+
.ssg_tune_deltas_data
10189

10290
;;; FM F-num delta for all 128 fractional semitones
10391
fm_fnum_deltas::
104-
.dw 0x0000, 0x01f1, 0x03e3, 0x05d5, 0x07c7, 0x09b9, 0x0bac, 0x0d9e
105-
.dw 0x0f92, 0x1185, 0x1378, 0x156c, 0x1760, 0x1954, 0x1b49, 0x1d3d
106-
.dw 0x1f32, 0x2127, 0x231c, 0x2512, 0x2708, 0x28fe, 0x2af4, 0x2cea
107-
.dw 0x2ee1, 0x30d8, 0x32cf, 0x34c6, 0x36be, 0x38b6, 0x3aae, 0x3ca6
108-
.dw 0x3e9e, 0x4097, 0x4290, 0x4489, 0x4683, 0x487c, 0x4a76, 0x4c70
109-
.dw 0x4e6a, 0x5065, 0x5260, 0x545b, 0x5656, 0x5851, 0x5a4d, 0x5c49
110-
.dw 0x5e45, 0x6041, 0x623e, 0x643b, 0x6638, 0x6835, 0x6a33, 0x6c30
111-
.dw 0x6e2e, 0x702c, 0x722b, 0x742a, 0x7628, 0x7828, 0x7a27, 0x7c27
112-
.dw 0x7e26, 0x8026, 0x8227, 0x8427, 0x8628, 0x8829, 0x8a2a, 0x8c2c
113-
.dw 0x8e2d, 0x902f, 0x9231, 0x9434, 0x9636, 0x9839, 0x9a3c, 0x9c3f
114-
.dw 0x9e43, 0xa047, 0xa24b, 0xa44f, 0xa653, 0xa858, 0xaa5d, 0xac62
115-
.dw 0xae67, 0xb06d, 0xb273, 0xb479, 0xb67f, 0xb886, 0xba8d, 0xbc94
116-
.dw 0xbe9b, 0xc0a2, 0xc2aa, 0xc4b2, 0xc6ba, 0xc8c3, 0xcacb, 0xccd4
117-
.dw 0xcedd, 0xd0e7, 0xd2f0, 0xd4fa, 0xd704, 0xd90f, 0xdb19, 0xdd24
118-
.dw 0xdf2f, 0xe13a, 0xe346, 0xe551, 0xe75d, 0xe96a, 0xeb76, 0xed83
119-
.dw 0xef90, 0xf19d, 0xf3aa, 0xf5b8, 0xf7c6, 0xf9d4, 0xfbe2, 0xfdf1
92+
.fm_fnum_deltas_data
12093

12194

12295
;;; Semitone frequency table
@@ -132,48 +105,19 @@ fm_fnum_deltas::
132105
;;; SSG tune table for AES masterclock (8M=8055943)
133106
.bndry 256
134107
ssg_dists_lsb::
135-
;; C-n, C#n, D-n, D#n, E-n, F-n, F#n, G-n, G#n, A-n, A#n, B-n
136-
.dw 0x806e, 0xbe70, 0x0754, 0x5a80, 0xb75f, 0x1d66, 0x8c11, 0x02e4, 0x816a, 0x0735, 0x93db, 0x26fb, 0, 0, 0, 0
137-
.dw 0x806e, 0xbe70, 0x0754, 0x5a80, 0xb75f, 0x1d66, 0x8c11, 0x02e4, 0x816a, 0x0735, 0x93db, 0x26fb, 0, 0, 0, 0
138-
.dw 0xc037, 0x5f38, 0x03aa, 0xad40, 0x5bb0, 0x0eb3, 0xc608, 0x8172, 0x40b5, 0x039b, 0xc9f0, 0x937b, 0, 0, 0, 0
139-
.dw 0x601b, 0x2f9c, 0x01d5, 0xd6a0, 0xadd8, 0x875a, 0x6304, 0x40b9, 0x205a, 0x01ce, 0xe4f9, 0xc9bc, 0, 0, 0, 0
140-
.dw 0xb00e, 0x97ce, 0x80ea, 0x6b50, 0x56ec, 0x43ad, 0x3182, 0x205d, 0x102d, 0x00e7, 0xf27b, 0xe4df, 0, 0, 0, 0
141-
.dw 0xd807, 0xcbe7, 0xc075, 0xb5a8, 0xab76, 0xa1d7, 0x98c1, 0x902e, 0x8817, 0x8073, 0x793e, 0x726f, 0, 0, 0, 0
142-
.dw 0x6c04, 0x65f3, 0x603b, 0x5ad4, 0x55bb, 0x50eb, 0x4c61, 0x4817, 0x440b, 0x403a, 0x3c9f, 0x3937, 0, 0, 0, 0
143-
.dw 0x3602, 0x32fa, 0x301d, 0x2d6a, 0x2ade, 0x2875, 0x2631, 0x240b, 0x2206, 0x201d, 0x1e4f, 0x1c9c, 0, 0, 0, 0
108+
.ssg_dists_lsb_data
109+
144110
.bndry 256
145111
ssg_tunes_msb::
146-
;; C-n, C#n, D-n, D#n, E-n, F-n, F#n, G-n, G#n, A-n, A#n, B-n
147-
.dw 0xf097, 0xe317, 0xd658, 0xca51, 0xbef7, 0xb43f, 0xaa22, 0xa096, 0x9793, 0x8f11, 0x870a, 0x7f76, 0, 0, 0, 0
148-
.dw 0xf097, 0xe317, 0xd658, 0xca51, 0xbef7, 0xb43f, 0xaa22, 0xa096, 0x9793, 0x8f11, 0x870a, 0x7f76, 0, 0, 0, 0
149-
.dw 0x784f, 0x718f, 0x6b30, 0x652c, 0x5f7f, 0x5a23, 0x5515, 0x504f, 0x4bcd, 0x478c, 0x4389, 0x3fbf, 0, 0, 0, 0
150-
.dw 0x3c2b, 0x38cb, 0x359c, 0x329a, 0x2fc3, 0x2d15, 0x2a8e, 0x282b, 0x25ea, 0x23ca, 0x21c8, 0x1fe3, 0, 0, 0, 0
151-
.dw 0x1e19, 0x1c69, 0x1ad2, 0x1951, 0x17e5, 0x168e, 0x154b, 0x1419, 0x12f9, 0x11e9, 0x10e8, 0x0ff5, 0, 0, 0, 0
152-
.dw 0x0f10, 0x0e38, 0x0d6d, 0x0cac, 0x0bf6, 0x0b4b, 0x0aa9, 0x0a10, 0x0980, 0x08f8, 0x0878, 0x07fe, 0, 0, 0, 0
153-
.dw 0x078c, 0x0720, 0x06ba, 0x065a, 0x05ff, 0x05a9, 0x0558, 0x050c, 0x04c4, 0x0480, 0x0440, 0x0403, 0, 0, 0, 0
154-
.dw 0x03ca, 0x0394, 0x0361, 0x0331, 0x0303, 0x02d8, 0x02b0, 0x028a, 0x0266, 0x0244, 0x0224, 0x0205, 0, 0, 0, 0
112+
.ssg_dists_msb_data
113+
155114
.bndry 128
156115
ssg_tunes_lsb::
157-
;; C-n, C#n, D-n, D#n, E-n, F-n, F#n, G-n, G#n, A-n, A#n, B-n
158-
.db 0xc2, 0x54, 0xe4, 0x90, 0x10, 0xb1, 0x4b, 0x3a, 0x56, 0xec, 0xb7, 0xdc, 0, 0, 0, 0
159-
.db 0xc2, 0x54, 0xe4, 0x90, 0x10, 0xb1, 0x4b, 0x3a, 0x56, 0xec, 0xb7, 0xdc, 0, 0, 0, 0
160-
.db 0xe1, 0xaa, 0x72, 0xc8, 0x88, 0xd8, 0x25, 0x1d, 0xab, 0xf6, 0x5b, 0x6b, 0, 0, 0, 0
161-
.db 0xf0, 0xd5, 0x39, 0x64, 0xc4, 0xec, 0x92, 0x8e, 0xd5, 0x7b, 0xad, 0xb4, 0, 0, 0, 0
162-
.db 0xf8, 0xea, 0x1c, 0x32, 0xe2, 0xf6, 0x49, 0xc7, 0x6a, 0x3d, 0x56, 0xdb, 0, 0, 0, 0
163-
.db 0xfc, 0xf5, 0x0e, 0x99, 0xf1, 0x7b, 0xa4, 0xe3, 0xb5, 0x9e, 0x2b, 0xed, 0, 0, 0, 0
164-
.db 0x7e, 0x7a, 0x87, 0x4c, 0x78, 0xbd, 0xd2, 0x71, 0x5a, 0x4f, 0x15, 0x76, 0, 0, 0, 0
165-
.db 0x3f, 0x3d, 0x43, 0x26, 0xbc, 0xde, 0x69, 0x38, 0x2d, 0x27, 0x0a, 0xbb, 0, 0, 0, 0
116+
.ssg_tunes_lsb_data
117+
166118
.bndry 128
167119
ssg_dists_msb::
168-
;; C-n, C#n, D-n, D#n, E-n, F-n, F#n, G-n, G#n, A-n, A#n, B-n
169-
.db 0x0d, 0x0c, 0x0c, 0x0b, 0x0a, 0x0a, 0x09, 0x09, 0x08, 0x08, 0x07, 0x07, 0, 0, 0, 0
170-
.db 0x0d, 0x0c, 0x0c, 0x0b, 0x0a, 0x0a, 0x09, 0x09, 0x08, 0x08, 0x07, 0x07, 0, 0, 0, 0
171-
.db 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0, 0, 0, 0
172-
.db 0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0, 0, 0, 0
173-
.db 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0, 0, 0, 0
174-
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0, 0, 0, 0
175-
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0, 0, 0, 0
176-
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0, 0, 0, 0
120+
.ssg_dists_lsb_data
177121

178122

179123
;;; F-num frequency table
@@ -194,29 +138,7 @@ ssg_dists_msb::
194138

195139
;;; FM F-num table for AES masterclock (8M=8055943)
196140
fm_fnums::
197-
.db 0xee, 0x56, 0x26 ; C-n
198-
.db 0x52, 0x9e, 0x28 ; C#n
199-
.db 0x7e, 0x08, 0x2b ; D-n
200-
.db 0x17, 0x97, 0x2d ; D#n
201-
.db 0x1d, 0x4d, 0x30 ; E-n
202-
.db 0xf8, 0x2b, 0x33 ; F-n
203-
.db 0x7c, 0x36, 0x36 ; F#n
204-
.db 0xd3, 0x6f, 0x39 ; G-n
205-
.db 0xe4, 0xd9, 0x3c ; G#n
206-
.db 0x20, 0x78, 0x40 ; A-n
207-
.db 0x0c, 0x4d, 0x44 ; A#n
208-
.db 0x01, 0x5d, 0x48 ; B-n
209-
.db 0xe7, 0xa9, 0x4c ; C-n+1
141+
.fm_fnums_data
142+
210143
fm_dists::
211-
.db 0x64, 0x47, 0x02 ; C-n
212-
.db 0x2c, 0x6a, 0x02 ; C#n
213-
.db 0x99, 0x8e, 0x02 ; D-n
214-
.db 0x06, 0xb6, 0x02 ; D#n
215-
.db 0xdb, 0xde, 0x02 ; E-n
216-
.db 0x84, 0x0a, 0x03 ; F-n
217-
.db 0x57, 0x39, 0x03 ; F#n
218-
.db 0x11, 0x6a, 0x03 ; G-n
219-
.db 0x3c, 0x9e, 0x03 ; G#n
220-
.db 0xec, 0xd4, 0x03 ; A-n
221-
.db 0xf5, 0x0f, 0x04 ; A#n
222-
.db 0xe6, 0x4c, 0x04 ; B-n
144+
.fm_dists_data

0 commit comments

Comments
 (0)