Jump to content
Sign in to follow this  
analmux

RMT 1.28 Patch 8 theory

Recommended Posts

The standard setting of RMT (1.28) contains a distortion table, 16-bit mode select and some note-2-pitch (frqtab) tables. The memory size of this total set of tables is 5*64 = 320 bytes:

tabbeganddistor (distortion table)

frqtabpure-frqtab,$00
frqtabpure-frqtab,$20
frqtabpure-frqtab,$40
frqtabbass1-frqtab,$c0
frqtabpure-frqtab,$80
frqtabpure-frqtab,$a0
frqtabbass1-frqtab,$c0
frqtabbass2-frqtab,$c0

frqtabbasslo (= frqtab-$40)

 dta $F2,$33,$96,$E2,$38,$8C,$00,$6A,$E8,$6A,$EF,$80
 dta $08,$AE,$46,$E6,$95,$41,$F6,$B0,$6E,$30,$F6,$BB
 dta $84,$52,$22,$F4,$C8,$A0,$7A,$55,$34,$14,$F5,$D8
 dta $BD,$A4,$8D,$77,$60,$4E,$38,$27,$15,$06,$F7,$E8
 dta $DB,$CF,$C3,$B8,$AC,$A2,$9A,$90,$88,$7F,$78,$70
 dta $6A,$64,$5E,$00

frqtabbass1 (= frqtab)

 dta $BF,$B6,$AA,$A1,$98,$8F,$89,$80,$F2,$E6,$DA,$CE
 dta $BF,$B6,$AA,$A1,$98,$8F,$89,$80,$7A,$71,$6B,$65
 dta $5F,$5C,$56,$50,$4D,$47,$44,$3E,$3C,$38,$35,$32
 dta $2F,$2D,$2A,$28,$25,$23,$21,$1F,$1D,$1C,$1A,$18
 dta $17,$16,$14,$13,$12,$11,$10,$0F,$0E,$0D,$0C,$0B
 dta $0A,$09,$08,$07

frqtabbass2 (= frqtab+$40)

 dta $FF,$F1,$E4,$D8,$CA,$C0,$B5,$AB,$A2,$99,$8E,$87
 dta $7F,$79,$73,$70,$66,$61,$5A,$55,$52,$4B,$48,$43
 dta $3F,$3C,$39,$37,$33,$30,$2D,$2A,$28,$25,$24,$21
 dta $1F,$1E,$1C,$1B,$19,$17,$16,$15,$13,$12,$11,$10
 dta $0F,$0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04
 dta $03,$02,$01,$00

frqtabpure (= frqtab+$80)

 dta $F3,$E6,$D9,$CC,$C1,$B5,$AD,$A2,$99,$90,$88,$80
 dta $79,$72,$6C,$66,$60,$5B,$55,$51,$4C,$48,$44,$40
 dta $3C,$39,$35,$32,$2F,$2D,$2A,$28,$25,$23,$21,$1F
 dta $1D,$1C,$1A,$18,$17,$16,$14,$13,$12,$11,$10,$0F
 dta $0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03
 dta $02,$01,$00,$00

frqtabbasshi (= frqtab+$c0)

 dta $0D,$0D,$0C,$0B,$0B,$0A,$0A,$09,$08,$08,$07,$07
 dta $07,$06,$06,$05,$05,$05,$04,$04,$04,$04,$03,$03
 dta $03,$03,$03,$02,$02,$02,$02,$02,$02,$02,$01,$01
 dta $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00
 dta $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 dta $00,$00,$00,$00

My prediction says that it is possible to change these tables totally with a different form, and my next little project is to make another patch. This patch will be based on the 15 kHz mode, and the base note of a 'chromatic scale approximation' will be 256*114 = 29184 cycles. It will contain:

(1) Square bass, with a table of 48 bytes
(2) High notes with distortion 2, at 1.79 MHz mode, with another table of 48 bytes
(3) Very high notes with distortion C, at 1.79 MHz mode, with another table of 48 bytes
(4) Sawtooth (& triangle), i.e. filtered square wave at 1.79 MHz, with another table of 48 bytes
(5) Electric distortion guitar (poly 9, 16-bit), with a split-table of 2*32 bytes
(6) Clarinet (poly 4, 16-bit), with a split-table of 2*32 bytes

Thus, the sum will again be a total table of 320 bytes. Note that it is not that easy to implement 2-tone-filter in RMT itself; a 'by-pass' is needed.

Especially interesting: (5) and (6) could be supported with fat undertones, when also the 2nd voice is turned on!!!

Or will it be impossible? ;)

Share this post


Link to post
Share on other sites
STEP ONE:

I will replace standard RMT 1.28, Pure, 64 bytes (5.3333 octaves)
 
frqtabpure
	dta $F3,$E6,$D9,$CC,$C1,$B5,$AD,$A2,$99,$90,$88,$80,$79,$72,$6C,$66
	dta $60,$5B,$55,$51,$4C,$48,$44,$40,$3C,$39,$35,$32,$2F,$2D,$2A,$28
	dta $25,$23,$21,$1F,$1D,$1C,$1A,$18,$17,$16,$14,$13,$12,$11,$10,$0F
	dta $0E,$0D,$0C,$0B,$0A,$09,$08,$07,$06,$05,$04,$03,$02,$01,$00,$00

with RMT 1.28 Patch 8, Pure, 48 bytes (4 octaves)
 
frqtabpure
	dta $FF,$F1,$E3,$D6,$CA,$BF,$B4,$AA,$A0,$97,$8F,$87
	dta $7F,$78,$71,$6B,$65,$5F,$5A,$54,$50,$4B,$47,$43
	dta $3F,$3B,$38,$35,$32,$2F,$2C,$2A,$27,$25,$23,$21
	dta $1F,$1D,$1C,$1A,$18,$17,$16,$14,$13,$12,$11,$10

See also AA topic How to improve the PoKey "NOTE-2-PITCH" table, compared to RMT.

Share this post


Link to post
Share on other sites

Sorry for post-after-post.

 

My "ideal" RMT should have well-tuned metalic sound ($2), well tuned 16-bit bass ($a0) alloving vibratos on it and of course well tuned triangle/sawtooth sounds. I may keep some C & E type basses but only fragmentarily (omitting bad-notes or so). All the rest can be sacrificed. :)

 

Edt: of course besides "pure"-table. :)

Edited by miker

Share this post


Link to post
Share on other sites

Ok, it may look irrevelant. Swiety/Zelax has just released sources os his SIDplayer and Synthtracker.

 

And small excerpt from it. Load TRK7.XEX and press Ctrl+Shift+P. :)

Edited by miker

Share this post


Link to post
Share on other sites
Hi miker,

Of course Rybags' table is far more accurate, but it is 16-bit. And besides, the advanced sawtooth and triangle tables are rather different. This will take many bytes. My plan is to use 48 bytes at max, and only reuse the simple sawtooth / triangle table. Doing a simple RMT patch, I can't add extra table space, and the maximum size is 320 bytes. By the way, I can help you in triangle tables. The Simpson rule is easy.

To my opinion the 8-bit square bass at 15 kHz is enough, it supports vibratos, and then the 16-bit bass isn't that important. I'm sorry, but there's no place left for the C/E and A/C 16-bit basses. Just wait until patch 8 is finished. It has other advantages. ;)

My idea is to use 16-bit mode with a slightly different control, but also this is still a secret. ;)

Share this post


Link to post
Share on other sites
STEP TWO:

RMT 1.28 Patch 8, high notes with distortion 2 at 1.79 MHz mode, 48 bytes (4 octaves)
 
frqtabdist2179
	dta $E7,$DA,$CE,$C2,$B7,$AC,$A2,$99,$90,$88,$80,$79
	dta $72,$6B,$65,$5F,$5A,$54,$4F,$4B,$46,$42,$3E,$3B
	dta $37,$34,$30,$2D,$2B,$28,$26,$23,$21,$1F,$1D,$1C
	dta $19,$18,$16,$15,$13,$12,$11,$10,$0F,$0E,$0D,$0C

Decimal source, with a minimal explanation of 4 'manual corrections', at place 16,23,35 and 45
 
231   218   206   194   183   172   162   153   144   136   128   121
114   107   101    95    89+1  84    79    75    70    66    62    58+1
 55    52    48    45    43    40    38    35    33    31    29    27+1
 25    24    22    21    19    18    17    16    15    13+1  13    12

Some explanation:

[attachment=376292:FTD2179.png]

LOAD "D:FTD2179.BAS"

And here's an update of the TEST2015.ATR file.

Share this post


Link to post
Share on other sites

I know the original programmer, Radek Sterba had an unfortunate encounter with a train. I am wondering if anyone became interested in improving the RMT asm player to see if they can get to use less CPU and memory. I looked at it myself and see several possibilities. However each time I did something, it ended up not working correctly. I prefer doing 3 voice at standard Pokey settings with one voice for sound effects.

Share this post


Link to post
Share on other sites
Every time I am using and implementing RMT I need to think of Radek and his pass away... Strange.

But yeah the RMT player might need at least some facelift?

Anybody else have a 'shortened' tailored version for his game/Demo?

Share this post


Link to post
Share on other sites

I am wondering if anyone became interested in improving the RMT asm player to see if they can get to use less CPU and memory.


Less CPU = more memory & less memory = more CPU. I just want to focus on making another very easy patch of the existing RMT asm: only changing tables. Then it's also easy to patch RMT.exe, with a simple hex-editor. The RMT.exe contains copies of the binary asm / rmtplayr.a65.
 

But yeah the RMT player might need at least some facelift?


Is there anyone who still has the RMT.exe win32 source code? Edited by analmux

Share this post


Link to post
Share on other sites
Meanwhile, I have created a new table schedule. I'm still not sure yet how to split up the 8-bit poly 4 degenerate 1 / 3 table. Here's a provisional version of the table set:
 
Patch 8 Table:

RMT          PoKey        Bits:  Clock:    Number     Instrument
distortion:  distortion:                   of bytes:  name:

0            0            8      x         x          White noise
2            2            8      1.79 MHz  48         Poly 5 / Generator 2
4            A            8      1.79 MHz  36         Sawtooth (Triangle)
6            C            16     1.79 MHz  32*2       Clarinet (Poly 4)
8            C            8      1.79 MHz  36         Poly 4 degenerate 3 (polydeg43)
A            A            8      15 kHz    48         Pure bass
C            C            8      1.79 MHz  24         Poly 4 degenerate 1 (polydeg41)
E            8            16     1.79 MHz  32*2       Distortion guitar (Poly 9)

Share this post


Link to post
Share on other sites
I have change my mind a little bit:

RMT          PoKey        Bits:  Clock:    Number     Instrument
distortion:  distortion:                   of bytes:  name:

0            0            8      x         x          White noise
2            2            8      1.79 MHz  48         Poly 5 / Generator 2
4            A            8      1.79 MHz  36         Sawtooth / Triangle
6            C            8LSB   1.79 MHz  32         Clarinet (Poly 4), LSB
8            A            8HSB   1.79 MHz  64         Harmonic square undertones of Clarinet / Distortion guitar, HSB
A            A            8      15 kHz    48         Pure bass
C            C            8      1.79 MHz  60         Poly 4 (degenerate 1 and 3)
E            8            8LSB   1.79 MHz  32         Distortion guitar (Poly 9), LSB

Share this post


Link to post
Share on other sites
More about 'Poly 4 at 1.79 MHz', then only select D1 and D3:
 
Degenerate numbers, AUDF+4:
                    
D15:  15-degenerate   -   15  30  45  60  75  90   105  120  135  150  165  180  195  210  225  240  255
D1:   1-degenerate    -   16  31  46  61  76  91   106  121  136  151  166  181  196  211  226  241  256
D1:   1-degenerate    -   17  32  47  62  77  92   107  122  137  152  167  182  197  212  227  242  257
D3:   3-degenerate    -   18  33  48  63  78  93   108  123  138  153  168  183  198  213  228  243  258
D1:   1-degenerate    4   19  34  49  64  79  94   109  124  139  154  169  184  199  214  229  244  259
D5:   5-degenerate    5   20  35  50  65  80  95   110  125  140  155  170  185  200  215  230  245  -
D3:   3-degenerate    6   21  36  51  66  81  96   111  126  141  156  171  186  201  216  231  246  -
D1:   1-degenerate    7   22  37  52  67  82  97   112  127  142  157  172  187  202  217  232  247  -
D1:   1-degenerate    8   23  38  53  68  83  98   113  128  143  158  173  188  203  218  233  248  -
D3:   3-degenerate    9   24  39  54  69  84  99   114  129  144  159  174  189  204  219  234  249  -
D5:   5-degenerate    10  25  40  55  70  85  100  115  130  145  160  175  190  205  220  235  250  -
D1:   1-degenerate    11  26  41  56  71  86  101  116  131  146  161  176  191  206  221  236  251  -
D3:   3-degenerate    12  27  42  57  72  87  102  117  132  147  162  177  192  207  222  237  252  -
D1:   1-degenerate    13  28  43  58  73  88  103  118  133  148  163  178  193  208  223  238  253  -
D1:   1-degenerate    14  29  44  59  74  89  104  119  134  149  164  179  194  209  224  239  254  -

D1, 1-degenerate numbers, AUDF+4:

-   16  31  46  61  76  91   106  121  136  151  166  181  196  211  226  241  256
-   17  32  47  62  77  92   107  122  137  152  167  182  197  212  227  242  257
4   19  34  49  64  79  94   109  124  139  154  169  184  199  214  229  244  259
7   22  37  52  67  82  97   112  127  142  157  172  187  202  217  232  247  -
8   23  38  53  68  83  98   113  128  143  158  173  188  203  218  233  248  -
11  26  41  56  71  86  101  116  131  146  161  176  191  206  221  236  251  -
13  28  43  58  73  88  103  118  133  148  163  178  193  208  223  238  253  -
14  29  44  59  74  89  104  119  134  149  164  179  194  209  224  239  254  -

D3, 3-degenerate numbers, AUDF+4:

-   18  33  48  63  78  93   108  123  138  153  168  183  198  213  228  243  258
6   21  36  51  66  81  96   111  126  141  156  171  186  201  216  231  246  -
9   24  39  54  69  84  99   114  129  144  159  174  189  204  219  234  249  -
12  27  42  57  72  87  102  117  132  147  162  177  192  207  222  237  252  -

And reordered, from AUDF+4 to AUDF:
 
Degenerate numbers, AUDF:
                    
D15:  15-degenerate   -   11  26  41  56  71  86   101  116  131  146  161  176  191  206  221  236  251
D1:   1-degenerate    -   12  27  42  57  72  87   102  117  132  147  162  177  192  207  222  237  252
D1:   1-degenerate    -   13  28  43  58  73  88   103  118  133  148  163  178  193  208  223  238  253
D3:   3-degenerate    -   14  29  44  59  74  89   104  119  134  149  164  179  194  209  224  239  254
D1:   1-degenerate    0   15  30  45  60  75  90   105  120  135  150  165  180  195  210  225  240  255
D5:   5-degenerate    1   16  31  46  61  76  91   106  121  136  151  166  181  196  211  226  241  -
D3:   3-degenerate    2   17  32  47  62  77  92   107  122  137  152  167  182  197  212  227  242  -
D1:   1-degenerate    3   18  33  48  63  78  93   108  123  138  153  168  183  198  213  228  243  -
D1:   1-degenerate    4   19  34  49  64  79  94   109  124  139  154  169  184  199  214  229  244  -
D3:   3-degenerate    5   20  35  50  65  80  95   110  125  140  155  170  185  200  215  230  245  -
D5:   5-degenerate    6   21  36  51  66  81  96   111  126  141  156  171  186  201  216  231  246  -
D1:   1-degenerate    7   22  37  52  67  82  97   112  127  142  157  172  187  202  217  232  247  -
D3:   3-degenerate    8   23  38  53  68  83  98   113  128  143  158  173  188  203  218  233  248  -
D1:   1-degenerate    9   24  39  54  69  84  99   114  129  144  159  174  189  204  219  234  249  -
D1:   1-degenerate    10  25  40  55  70  85  100  115  130  145  160  175  190  205  220  235  250  -

D1, 1-degenerate numbers, AUDF:

-   12  27  42  57  72  87   102  117  132  147  162  177  192  207  222  237  252
-   13  28  43  58  73  88   103  118  133  148  163  178  193  208  223  238  253
0   15  30  45  60  75  90   105  120  135  150  165  180  195  210  225  240  255
3   18  33  48  63  78  93   108  123  138  153  168  183  198  213  228  243  -
4   19  34  49  64  79  94   109  124  139  154  169  184  199  214  229  244  -
7   22  37  52  67  82  97   112  127  142  157  172  187  202  217  232  247  -
9   24  39  54  69  84  99   114  129  144  159  174  189  204  219  234  249  -
10  25  40  55  70  85  100  115  130  145  160  175  190  205  220  235  250  -

D3, 3-degenerate numbers, AUDF:

-   14  29  44  59  74  89  104  119  134  149  164  179  194  209  224  239  254
2   17  32  47  62  77  92  107  122  137  152  167  182  197  212  227  242  -
5   20  35  50  65  80  95  110  125  140  155  170  185  200  215  230  245  -
8   23  38  53  68  83  98  113  128  143  158  173  188  203  218  233  248  -

Share this post


Link to post
Share on other sites

I know the original programmer, Radek Sterba had an unfortunate encounter with a train.

 

Maybe its just me but that sounds pretty crass...

 

A very well respected community person who met an untimely death and you make it sound like a joke?

 

Maybe I'm just tired?

Share this post


Link to post
Share on other sites
STEP THREE:

RMT 1.28 Patch 8, very high notes with distortion C at 1.79 MHz mode, 48 bytes (3 octaves, 1 octave double). (12 bytes still unused.)

frqtabpolydeg4

frqtabpolydeg41
	dta $F0,$E1,$D5,$CA,$BD,$B2,$A8,$9D,$96,$8E,$84,$7C
	dta $76,$70,$69,$63,$5D,$57,$52,$4E,$49,$45,$40,$3C
	dta $39,$36,$31,$30,$2D,$2A,$27

frqtabpolydeg43
	dta $EF,$E3,$D4,$C8,$BC,$B3,$A7,$9E,$95,$8C,$86,$7D
	dta $77,$6E,$68,$62,$5C

It only works under TurboBasic:

LOAD "D:FTDC179.TBB"

[attachment=376832:FTDC179.png]

(And another TEST2015.ATR update.)

Share this post


Link to post
Share on other sites
And some more explanation of "3 octaves, 1 octave double":

D1, 1-degenerate numbers, AUDF+4:

-   16  31  46  61  76  91   106  121  136  151  166  181  196  211  226  241  256
-   17  32  47  62  77  92   107  122  137  152  167  182  197  212  227  242  257
4   19  34  49  64  79  94   109  124  139  154  169  184  199  214  229  244  259
7   22  37  52  67  82  97   112  127  142  157  172  187  202  217  232  247  -
8   23  38  53  68  83  98   113  128  143  158  173  188  203  218  233  248  -
11  26  41  56  71  86  101  116  131  146  161  176  191  206  221  236  251  -
13  28  43  58  73  88  103  118  133  148  163  178  193  208  223  238  253  -
14  29  44  59  74  89  104  119  134  149  164  179  194  209  224  239  254  -

D3, 3-degenerate numbers, AUDF+4:

-   18  33  48  63  78  93   108  123  138  153  168  183  198  213  228  243  258
6   21  36  51  66  81  96   111  126  141  156  171  186  201  216  231  246  -
9   24  39  54  69  84  99   114  129  144  159  174  189  204  219  234  249  -
12  27  42  57  72  87  102  117  132  147  162  177  192  207  222  237  252  -


Index 1:  POLY4DG1:  INT41:  Index 3:  POLY4DG3:  INT43:

0         243.20     244     -         -          -
1         229.55     229     -         -          -
2         216.67     217     -         -          -
3         204.51     206     -         -          -
4         193.03     193     -         -          -
5         182.19     182     -         -          -
6         171.97     172     -         -          -
7         162.32     161     -         -          -
8         153.21     154     -         -          -
9         144.61     146     -         -          -
10        136.49     136     -         -          -
11        128.83     128     -         -          -
12        121.60     122     -         -          -
13        114.78     116     -         -          -
14        108.33     109     -         -          -
15        102.25     103     -         -          -
16        96.51      97      -         -          -
17        91.10      91      -         -          -
18        85.98      86      -         -          -
19        81.16      82      31        243.47     243
20        76.60      77      32        229.81     231
21        72.30      73      33        216.91     216
22        68.25      68      34        204.74     204
23        64.42      64      35        193.25     192
24        60.80      61      36        182.40     183
25        57.39      58      37        172.16     171
26        54.17      53      38        162.50     162
27        51.13      52      39        153.38     153
28        48.26      49      40        144.77     144
29        45.55      46      41        136.65     138
30        42.99      43      42        128.98     129
-         -          -       43        121.74     123
-         -          -       44        114.90     114
-         -          -       45        108.46     108
-         -          -       46        102.37     102
-         -          -       47        96.62      96

Share this post


Link to post
Share on other sites

... And a small hint:

 

• "Deg 1" vs "Deg 3" is equivalent to the "freq 1" : "freq 3" ratio.

• The ratio of "base note" vs "octave + quint", thus 12 + 7 = 19 semitones.

• Note that 1 : 3 has an approximation of 2^(19/12)

 

Thus, this gives a small explanation of post 21.

Share this post


Link to post
Share on other sites

 

Maybe its just me but that sounds pretty crass...

 

A very well respected community person who met an untimely death and you make it sound like a joke?

 

Maybe I'm just tired?

I did not intend this one as a joke. I respect this guy as much as anyone because many of us made use of his programming. I am glad someone is looking to go forward with upgrading RMT. I am not sure if anyone took it over or if anyone took control of it.

Share this post


Link to post
Share on other sites

I did not intend this one as a joke. I respect this guy as much as anyone because many of us made use of his programming. I am glad someone is looking to go forward with upgrading RMT. I am not sure if anyone took it over or if anyone took control of it.

 

In that case my apologies, just looked wrong to my tired eyes..

Share this post


Link to post
Share on other sites
Now it's time to refresh my memory and study the sawtooth formula. See here for example:

AtariAge Forums - Atari Systems - Atari 8-Bit Computers - POKEY help
 

This is a lot less simple.
When F3=F1+1, we know for sure that LCM(F1,F3)=F1*F3, as they are always relatively prime
(here LCM is the least common multiple of two values).

When f.e. F3=F1+2 then only for odd F1, we have LCM(F1,F3)=F1*F3.

It's really a long story, but when F3 (=F1+N) and F1 are relatively prime, then there's still a nice formula. The positive thing is that for the purpose of getting better note precision this is exactly what we need: relatively prime pitches.

So, when we do:

POKE 53760,F1-4:POKE 53764,F3-4

where F3=F1+N, we get:

PHI = LCM(F1,F3) =F1*F3 = F1*(F1+N). Now solve this by ABC-formula for quadratic functions.

F1^2+N*F1-PHI=0 then:
F1=(-N+SQR(N^2+4*PHI))/2
now, because we want P1 (=pitch1) = F1+4, and P3=P1+N, we get:

P1=F1-4 = (-N+SQR(N^2+4*PHI)/2 -4=(-N-8+SQR(N^2+4*PHI)/2

you can check that this will obtain the original formula, when you choose N=1.


There's another effect when using non-relatively-prime pitches: some subharmonic expansions will be added to the sound, such that it is not a pure sawtooth wave anymore, but a richer type of sound: The richness of Pokey features really lies in all the possible 'resonances' of more simple settings. This is only an example of a small part of Pokey's features. Some features may one day surprise all of us icon_shades.gif

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...