1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
|
<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
<title>Chrisoft::Blog</title>
<script type="text/javascript" src="/panel.js"></script>
<script type="text/javascript" src="/themer.js"></script>
<script type="text/javascript" src="/blog/footnoter.js"></script>
<script type="text/javascript" src="/blog/aes-js.js"></script>
<script type="text/javascript" src="/blog/scrypt.js"></script>
<script type="text/javascript" src="/blog/sha256.js"></script>
<script type="text/javascript" src="/blog/decryptor.js"></script>
<link rel="stylesheet" type="text/css" href="/common.css">
<link rel="stylesheet" type="text/css" href="/panel.css">
<link rel="stylesheet" type="text/css" href="/theme0a.css" id="theme0a">
<link rel="stylesheet" type="text/css" href="/theme0b.css" id="theme0b">
<link rel="stylesheet" type="text/css" href="/theme1a.css" id="theme1a">
<link rel="stylesheet" type="text/css" href="/theme1b.css" id="theme1b">
<link rel="stylesheet" type="text/css" href="/theme2a.css" id="theme2a">
<link rel="stylesheet" type="text/css" href="/theme2b.css" id="theme2b">
<link rel="stylesheet" type="text/css" href="/theme3a.css" id="theme3a">
<link rel="stylesheet" type="text/css" href="/theme3b.css" id="theme3b">
<link rel="stylesheet" type="text/css" href="/blog/blogext.css">
<script>
function ol()
{
window.onresize=function()
{
if(window.innerWidth<768)
setupevents();
else unsetevents();
}
window.onresize();
loadTheme();
_decryptonload();
}
</script>
</head>
<body onload="ol()" style="overflow-x:hidden;">
<div id="panel" class="TText">
<ul id="panellist">
<li><a href="/"><h1>Chrisoft</h1></a></li>
<li><a href="/blog"><h2>Blog</h2></a></li>
<li><a href="#"><h3 id="title">EDIROL SD-80: The Adventure Continues</h3></a></li>
<li><span>Tags</span>
<ul id="tagslist">
<li><a href="/blog/list/device-review/">device-review</a></li><li><a href="/blog/list/midi/">midi</a></li><li><a href="/blog/list/music/">music</a></li></ul>
</li>
<li id="tocouter">
<span>Table of Contents</span>
<ul id="tocroot">
<li><a class="toctarg" href="#tocanch0">“Official” Service Manual</a></li><li><a class="toctarg" href="#tocanch1">USB-PD Mod</a></li><li><ul class="tocnode"><li><a class="toctarg" href="#tocanch2">(Accidentally) Circuit bent
SD-80</a></li></ul></li><li><a class="toctarg" href="#tocanch3">Recording Setup Update Part
1</a></li><li><a class="toctarg" href="#tocanch4">Recording Setup Update Part
2</a></li><li><a class="toctarg" href="#tocanch5">Recording Setup Update Part
3, 4, 5…</a></li><li><a class="toctarg" href="#tocanch6">Rompler Preservation</a></li><li><ul class="tocnode"><li><a class="toctarg" href="#tocanch7">Emulation</a></li><li><a class="toctarg" href="#tocanch8">Sampling the Rompler</a></li><li><a class="toctarg" href="#tocanch9">Dumping and Deciphering</a></li><li><ul class="tocnode"><li><a class="toctarg" href="#tocanch10">Extra rambling about the ROM
chip</a></li></ul></li><li><a class="toctarg" href="#tocanch11">SD-20 MIDI File Converter</a></li><li><ul class="tocnode"><li><a class="toctarg" href="#tocanch12">FrankenTTS-1</a></li><li><a class="toctarg" href="#tocanch13">Other observations</a></li><li><a class="toctarg" href="#tocanch14">So… is this it?</a></li></ul></li><li><a class="toctarg" href="#tocanch15">Roland Cloud</a></li></ul></li><li><a class="toctarg" href="#tocanch16">A
History lesson from someone who barely knows anything about it</a></li><li><ul class="tocnode"><li><a class="toctarg" href="#tocanch17">LA</a></li><li><a class="toctarg" href="#tocanch18">(Unnamed synth engine in
U-110)</a></li><li><a class="toctarg" href="#tocanch19">EP</a></li><li><a class="toctarg" href="#tocanch20">GP</a></li><li><a class="toctarg" href="#tocanch21">XP</a></li><li><ul class="tocnode"><li><a class="toctarg" href="#tocanch22">Original XP</a></li><li><a class="toctarg" href="#tocanch23">XP2</a></li><li><a class="toctarg" href="#tocanch24">XP3</a></li><li><a class="toctarg" href="#tocanch25">XP6</a></li><li><a class="toctarg" href="#tocanch26">XP7</a></li></ul></li><li><a class="toctarg" href="#tocanch27">XV</a></li><li><a class="toctarg" href="#tocanch28">WX</a></li><li><a class="toctarg" href="#tocanch29">Beyond WX</a></li></ul></li><li><a class="toctarg" href="#tocanch30">Role played by the
CPU in sound generation</a></li><li><a class="toctarg" href="#tocanch31">Other Curious Stuff</a></li><li><ul class="tocnode"><li><a class="toctarg" href="#tocanch32">SD-80 is an XV-5080 …</a></li><li><ul class="tocnode"><li><a class="toctarg" href="#tocanch33">SD-80’s sound content</a></li></ul></li><li><a class="toctarg" href="#tocanch34">More on SD-80 vs SD-90 vs
SD-20</a></li><li><ul class="tocnode"><li><a class="toctarg" href="#tocanch35">What does a SD-90 have
that SD-80 doesn’t?</a></li><li><a class="toctarg" href="#tocanch36">What does a SD-80 have
that SD-90 doesn’t?</a></li><li><a class="toctarg" href="#tocanch37">What’s the SD-20 anyway?</a></li><li><a class="toctarg" href="#tocanch38">What role does MFX play?</a></li></ul></li><li><a class="toctarg" href="#tocanch39"><code>Light Load</code> vs
<code>High Load</code></a></li><li><a class="toctarg" href="#tocanch40">Block Diagram</a></li><li><a class="toctarg" href="#tocanch41">Other weird and interesting
stuff</a></li></ul></li><li><a class="toctarg" href="#tocanch42">Errata of the original post</a></li><li><a class="toctarg" href="#tocanch43">References</a></li></ul>
</li>
<li style="margin-left:-0.5em"><a id="prevp" href="2019-09-04.html">Prev post</a></li>
<li style="margin-left:-0.5em"><a id="nextp" href="2021-06-03.html">Next post</a></li>
</ul>
</div>
<div id="content">
<h2 id="titleh" class="TText" style="font-wight:normal;">EDIROL SD-80: The Adventure Continues</h2>
<div id="datetags" class="TText" style="margin-bottom:1em;">2020-11-20<br>#device-review #midi #music</div>
<hr><div id="article" class="TText"><script>
window.addEventListener("DOMContentLoaded",function(){
const cl=document.querySelectorAll('div.collapse');
let n=0;
for(let x of cl)
{
const d=document.createElement('blockquote');
const dd=x.cloneNode(true);
x.parentNode.insertBefore(d,x);
x.parentNode.removeChild(x);
dd.id=`cc${n++}`;
dd.style.display='none';
const s=document.createElement('span');
const b=document.createElement('b');
const a=document.createElement('a');
a.classList.add('ca');
a.setAttribute('x',n-1);
a.innerHTML='show';
a.href='javascript:void(0)';
if (dd.hasAttribute('caption'))
b.innerHTML=dd.getAttribute('caption');
else
b.innerHTML=dd.getAttribute('data-caption');
s.appendChild(b);
s.appendChild(document.createTextNode(' ['));
s.appendChild(a);
s.appendChild(document.createTextNode(']'));
d.appendChild(s);
d.appendChild(dd);
a.onclick=function()
{
let x='none';
if(a.innerHTML=='show')
{
a.innerHTML='hide';
x='block';
}
else
{
a.innerHTML='show'
}
document.getElementById(`cc${a.getAttribute('x')}`).style.display=x;
}
}
const al=document.querySelectorAll('audio');
n=0;
for(let x of al)
{
x.id=`a${n++}`;
x.onplay=function()
{
for(let x of al)
{
if(x.id!=this.id)x.pause();
}
}
}
});
</script>
<article>
<p>This the follow up article of my first post on the SD-80. View it <a href="https://chrisoft.org/blog/post/2019-04-25.html">here</a>.</p>
<p>It’s been <del>one year and a half</del>
<del style="text-decoration-style: double">two years</del> three years
since I got my SD-80. A lot of stuff happened (including the great
pandemic of COVID-19 and my escape from Wuhan). I’ve also discovered a
lot more about the SD-80. Instead of updating the original post (which
is already excessively long), I decided to start a new post instead.</p>
<p>The actual publish date of this post is 2022-06-30 <del>because I
have crippling procrastination</del>.</p>
<p>My special thanks go to:</p>
<ul>
<li>Kalas, who contacted me for my original SD-80 post, without whom
half of this article wouldn’t even exist.</li>
<li>Discord user KR.Palto#7592, who also has a <a href="https://www.youtube.com/c/KRPalto47_th_MIDI">YouTube channel</a>,
for providing plenty of useful information and PCB shots of various
Roland synth modules.</li>
</ul>
<p>I’ve been procrastinating the release of this post for too long
(almost 2 years by now). For this reason, the information I had on these
modules may have updated half-way through the writing of this post.
Therefore this post may contain self-contradicting statements. I’ll try
to clear up any confusing parts. Feel free to reach to me if you find
any, or just for any thoughts you have on this post. I would encourage
anyone reading this post to get in touch with me if you have anything to
discuss or find a mistake in this post. Every message will be greatly
apprecitated. You can find ways to contact me in the “about” section of
the home page.</p>
<h2 id="tocanch0" class="tvis">“Official” Service Manual</h2>
<p>The site where I got my other service manuals for Roland synths (none
of which I really own) has been updated with a service manual for SD-80.
I got one copy immediately once I knew about this (Special thanks go to
Kalas for letting me know).</p>
<p>Most of the service manual goes as expected: the general format, most
chips (I correctly identified all chips that has Roland marking on them
somehow), the block diagram and testing mode. There’s really not that
much information in this manual that is new to me. The schematics are
extremely useful for modding and repairing though.</p>
<div class="collapse" data-caption="Updated list of integrated circuit chips on SD-80 main board">
<table>
<colgroup>
<col style="width: 8%">
<col style="width: 18%">
<col style="width: 21%">
<col style="width: 51%">
</colgroup>
<thead>
<tr class="header">
<th style="text-align: center;">Label</th>
<th style="text-align: center;">Engravement</th>
<th style="text-align: center;">Model</th>
<th style="text-align: center;">Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: center;">IC 1</td>
<td style="text-align: center;">62292 361</td>
<td style="text-align: center;">M62292FP-D60J</td>
<td style="text-align: center;">Regulator</td>
</tr>
<tr class="even">
<td style="text-align: center;">IC 2</td>
<td style="text-align: center;">6417706 SH3 BC13008 133 0413</td>
<td style="text-align: center;">HD6417706</td>
<td style="text-align: center;">SH3 CPU</td>
</tr>
<tr class="odd">
<td style="text-align: center;">IC 3</td>
<td style="text-align: center;">LH28F 160BJE-BTL80 SHARP JAPAN 0428
7xN</td>
<td style="text-align: center;">LH28F 160BJE-BTL80</td>
<td style="text-align: center;">16Mbit Flash Memory</td>
</tr>
<tr class="even">
<td style="text-align: center;">IC 4, IC 6</td>
<td style="text-align: center;">SANYO LC381616IET-70 KZA7G0CD1 0042</td>
<td style="text-align: center;">SDRAM LC3816161ET-70-TLM</td>
<td style="text-align: center;">16Mbit SDRAM (System RAM)</td>
</tr>
<tr class="odd">
<td style="text-align: center;">IC 5, IC 37</td>
<td style="text-align: center;">‘H5’ or ‘115’ (illegible)</td>
<td style="text-align: center;">TC7SH04FU</td>
<td style="text-align: center;">Inverter</td>
</tr>
<tr class="even">
<td style="text-align: center;">IC 7</td>
<td style="text-align: center;">4D46 LV 00A</td>
<td style="text-align: center;">HD74LV00A</td>
<td style="text-align: center;">NAND Gate</td>
</tr>
<tr class="odd">
<td style="text-align: center;">IC 8, IC 20, IC 22~25</td>
<td style="text-align: center;">4C1Y LV 245A</td>
<td style="text-align: center;">HD74LV245A</td>
<td style="text-align: center;">8-bit Transceiver</td>
</tr>
<tr class="even">
<td style="text-align: center;">IC 9, IC 11</td>
<td style="text-align: center;">F P42AB VT245A</td>
<td style="text-align: center;">74VHCT245A</td>
<td style="text-align: center;">8-bit Transceiver</td>
</tr>
<tr class="odd">
<td style="text-align: center;">IC 10, IC 12</td>
<td style="text-align: center;">0431H LVXC3245</td>
<td style="text-align: center;">TC74LVXC3245FS</td>
<td style="text-align: center;">Configurable 8-bit Transceiver</td>
</tr>
<tr class="even">
<td style="text-align: center;">IC 13</td>
<td style="text-align: center;">VHC T139A 4 23</td>
<td style="text-align: center;">TC74VHCT139AFT</td>
<td style="text-align: center;">Dual 2/4 Decoder</td>
</tr>
<tr class="odd">
<td style="text-align: center;">IC 14</td>
<td style="text-align: center;">‘H12’ or ‘H2’ (illegible)</td>
<td style="text-align: center;">TC7SH08FU</td>
<td style="text-align: center;">AND Gate</td>
</tr>
<tr class="even">
<td style="text-align: center;">IC 15</td>
<td style="text-align: center;">4D36 LV 04A</td>
<td style="text-align: center;">HD74LV04A</td>
<td style="text-align: center;">Hex Inverter</td>
</tr>
<tr class="odd">
<td style="text-align: center;">IC 16</td>
<td style="text-align: center;">4D16 LV 14A</td>
<td style="text-align: center;">HD74LV14A</td>
<td style="text-align: center;">Hex Schmitt-Trigger Inverter</td>
</tr>
<tr class="even">
<td style="text-align: center;">IC 17</td>
<td style="text-align: center;">Roland R02902867 137 352B100</td>
<td style="text-align: center;">M37641M8-137FP</td>
<td style="text-align: center;">7641 8-bit microcontroller, MIDI/USB
interface</td>
</tr>
<tr class="odd">
<td style="text-align: center;">IC 18</td>
<td style="text-align: center;">VH3 139 4 24</td>
<td style="text-align: center;">TC74VHC139FT</td>
<td style="text-align: center;">Dual 2/4 Decoder</td>
</tr>
<tr class="even">
<td style="text-align: center;">IC 19, IC 27</td>
<td style="text-align: center;">Roland R01455956 RA08-503 JAPAN 0330EAI
F0032ZAC</td>
<td style="text-align: center;">TC223C660CF-503</td>
<td style="text-align: center;">Tone Generator + Effects Processor with
integrated LCD & Input Controller</td>
</tr>
<tr class="odd">
<td style="text-align: center;">IC 21</td>
<td style="text-align: center;">7WU04 4.F</td>
<td style="text-align: center;">TC7WU04FU</td>
<td style="text-align: center;">Inverter</td>
</tr>
<tr class="even">
<td style="text-align: center;">IC 26, IC 30</td>
<td style="text-align: center;">HYUNDAI GM71C18163CJ6 0040 AG1
KOREA</td>
<td style="text-align: center;">GM71C18163CJ-6</td>
<td style="text-align: center;">16Mbit EDO DRAM (XV RAM / Effects delay
line)</td>
</tr>
<tr class="odd">
<td style="text-align: center;">IC 28</td>
<td style="text-align: center;">Roland R02678601 23C128L-529J
0224E7007</td>
<td style="text-align: center;">UPD23C128040ALGY-***-MJH</td>
<td style="text-align: center;">128Mbit Mask ROM (Wave ROM)</td>
</tr>
<tr class="even">
<td style="text-align: center;">IC 29</td>
<td style="text-align: center;">Roland R02678612 23C128L-535K
0222E7005</td>
<td style="text-align: center;">UPD23C128040ALGY-***-MKH</td>
<td style="text-align: center;">128Mbit Mask ROM (Wave ROM)</td>
</tr>
<tr class="odd">
<td style="text-align: center;">IC 31, IC 35</td>
<td style="text-align: center;">4570 431</td>
<td style="text-align: center;">UPC4570G2</td>
<td style="text-align: center;">Operational Amplifiers</td>
</tr>
<tr class="even">
<td style="text-align: center;">IC 32, IC 34</td>
<td style="text-align: center;">PCM1716E 27ZDHFM</td>
<td style="text-align: center;">PCM1716E</td>
<td style="text-align: center;">DAC</td>
</tr>
<tr class="odd">
<td style="text-align: center;">IC 33</td>
<td style="text-align: center;">04 16H TC9271FS</td>
<td style="text-align: center;">TC9271FS</td>
<td style="text-align: center;">Digital Audio Modulator/Transmitter</td>
</tr>
<tr class="even">
<td style="text-align: center;">IC 36</td>
<td style="text-align: center;">A E</td>
<td style="text-align: center;">TA78L05F</td>
<td style="text-align: center;">Regulator</td>
</tr>
</tbody>
</table>
<p>The CPU is in clock mode 1 (MD2=MD1=0, MD0=1). Input clock is 12MHz
from the 8-bit 7641 controller. Actual clock of the SH-3 CPU depends on
the value of its FRQCR register. However, the only possible values of
the internal clock speed is either 48MHz or 96MHz (refer to the
datasheet of SH7706 for details) <a id="n1" href="#note1" class="note">[1]</a>. Either way, the CPU is downclocked by quite a
large margin.</p>
<p>The tone generator RA08-503 “XV” is an ASIC manufactured by Toshiba
on a 300nm process (type TC223C).</p>
</div>
<h2 id="tocanch1" class="tvis">USB-PD Mod</h2>
<p>WARNING: I’m a computer scientist (in its loosest sense), not an
electrical engineer. Do not take any part of this section as advice. If
you fried your equipment (I did!!) following this as an instruction,
don’t blame it on me.</p>
<p>The 220V to 110V converter brick I have to carry around has been
bugging me since the very first day I got my SD-80. Because the unit
only consumes around 10 watts of power, I’ve always been dreaming of
alternative ways to power it. When I first cracked my module open, I
measured the power rails going out from the power supply unit: there is
a ±15V pair, plus a +5V rail.</p>
<p>My top candidate was a solution based around USB-PD. I’ve seen people
modding their ThinkPads to charge through USB Type-C on r/ThinkPad, so I
thought that module plus some DC-DC converter circuitry will do the job.
I also had a fallback plan, which is basically to use any switching mode
power supply that accepts universal voltage has two output rails (one
positive and one negative), and stick some additional regulator
circuitry to generate the 5V output.</p>
<p>The USB-PD trigger module is actually very easy to come by nowadays,
especially for someone in China. While others struggles to find these
weird stuff on ebay and aliexpress, we just source them straight from
taobao (which is essentially aliexpress for domestic users). There are
even ready-to-use multi-rail voltage converter modules out there (they
are either based around LM337/LM317, or TPS543x). Finally I picked the
(seemingly) most popular PD trigger module people use to mod laptops
from YZXstudio, and an adjustable voltage converter module based around
TPS5430. The pictures below are from their sellers.</p>
<table>
<tbody><tr>
<td>
<div style="text-align:center;max-width:98%;">
<a href="//filestorage.chrisoft.org/blog/img/sdp2_pdtrigerboard.jpg"><img style="width: 50%;" src="//filestorage.chrisoft.org/blog/img/ssbsthumb_600x600_sdp2_pdtrigerboard.jpg"></a> <br>USB-PD
trigger board
</div>
</td>
<td>
<div style="text-align:center;max-width:98%;">
<a href="//filestorage.chrisoft.org/blog/img/sdp2_vrm.jpg"><img style="width: 50%;" src="//filestorage.chrisoft.org/blog/img/ssbsthumb_600x600_sdp2_vrm.jpg"></a> <br>Adjustable VRM
Module
</div>
</td>
</tr>
</tbody></table>
<p>I also bought some basic tools for soldering (Chinese knock-off of
Quick 936A, lead-based solder and solder wick – I was too dumb to
remember purchasing any flux) to make sure I can do the modding in my
dorm.</p>
<p>I waited a few days for all packages to arrive. After that I tested
every component I need and they worked just fine. It’s time to pull the
trigger. I started with desoldering the AC input socket. That went
decently smoothly. My confidence started to build up and proceeded to
desolder the original SMPS module, which is a rectangular daughter board
that has quite a few pins soldered on both sides of the board. Things
went horribly wrong (particularly because I didn’t have any flux and the
original lead-free solder refused to flow or blend with my leaded
solder) and I started ripping tracks off the base board. Finally I
decided it was an impossible task for me to desolder it without
completely destroying both boards, so I simply drilled the pins out of
the board. While the base board wasn’t totally destroyed, it was pretty
close. I soldered wires directly to the components on the base board
(because tracks on the other end have been ripped off). At this time my
soldering job was just totally awful because I was pissed and it was
super late into the night. Anyway, when I finally piecing everything
together, it somehow worked.</p>
<p>Next it was time to put everything back into place. I had the idea of
designing a 3d-printed holder for the USB Type-C extension cable that
fills the hole for the original AC socket, however I couldn’t even
afford a proper 2d-printing setup, let alone a 3d one. So I have to
scrap that idea for now. None of the screw holes on the converter board
can fit the holes on the chassis, so I just taped the module down. It
was a complete mess inside my SD-80 now, but at least everything still
worked (until a couple minutes later). I did mention that I had the wish
to make custom acrylic chassis for my SD-80 some day in the future,
hopefully I can get this mess fixed by then.</p>
<div style="text-align:center;max-width:90%;">
<a href="//filestorage.chrisoft.org/blog/img/sdp2_pdmodded.jpg"><img style="width: 50%;" src="//filestorage.chrisoft.org/blog/img/ssbsthumb_1536x1536_sdp2_pdmodded.jpg"></a> <br>The USB-PD
modded SD-80
</div>
<h3 id="tocanch2" class="tvis">(Accidentally) Circuit bent
SD-80</h3>
<p>I started messing around and decided to try to run the SD-80 without
the ±15V rail. Everything except the front panel phones output and
output 1 on the back panel worked just fine. This is not very surprising
– all chips on the main board only takes <= 5V, and it makes sense to
derivate all those voltages from the 5V rail. After a quick look at the
service notes, I found that the ±15V rail is only used by the OpAmps in
the final output stage of output 1, which is on the volume board.</p>
<p>And then something extremely stupid happened. Any proper electrical
engineer will cringe hard. At this point I was getting cocky, and
started randomly probing around with my multimeter on the volume board.
I “accidentally” shorted the first two pins of the connector going from
the main board into the volume board (pin 1 and pin 2 on CN7 of volume
board). The output from the headphone jack immediately turns into
complete garbage (severe distortions on low frequencies). The OpAmps
chip on the volume board started getting ridiculously hot… crap! I still
managed to fry something for an otherwise “perfect” modding project!</p>
<p>Of course this is undesirable. So I had to find a fix to this.</p>
<p>Fortunately, nothing on the main board seemed to be hurt. I can just
bypass the volume control and get the correct output on output 1 using
some jumper wires. So the fault is contained in the volume board. I’ve
basically sent -15V straight into the base of two transistors, but
measuring those transistors didn’t reveal anything wrong with them. So I
had to assume I have fried the amp chip (NJM4565). I got a few
replacements (NJM4580, compatible spec-wise) from taobao, and replaced
the “faulty” NJM4565 (still without using flux). But the audio output is
still messed up and the opamp chip still gets very hot after the
replacement. I decided to give up for now, and look into the thing
later. Meanwhile I just tucked some of the wires from CN6 into CN7 so
that I can still get analog output from output 1 on the back panel.</p>
<table>
<tbody><tr>
<td>
<div style="text-align:center;max-width:98%;">
<a href="//filestorage.chrisoft.org/blog/img/sdp2_volbrd_fixattempt.jpg"><img style="width: 33%;" src="//filestorage.chrisoft.org/blog/img/ssbsthumb_1536x1536_sdp2_volbrd_fixattempt.jpg"></a> <br>My
terrible SMD soldering
</div>
</td>
<td>
<div style="text-align:center;max-width:98%;">
<a href="//filestorage.chrisoft.org/blog/img/sdp2_bypass.jpg"><img style="width: 33%;" src="//filestorage.chrisoft.org/blog/img/ssbsthumb_1536x1536_sdp2_bypass.jpg"></a> <br>Recombined plug
for volume board bypass
</div>
</td>
</tr>
</tbody></table>
<div style="text-align:center;max-width:90%;">
<br>
</div>
<h2 id="tocanch3" class="tvis">Recording Setup Update Part
1</h2>
<p>Since I have always wanted to record my SD-80 through a digital link
(even before frying the analog output), I have been keeping an eye on
cheap digital recording solutions. Modern professional audio interfaces
never come with digital input on budget models. Among the older
interfaces, UA-25(EX) from Roland (EDIROL / Cakewalk) seems to be a
reasonable choice. There are also a bunch of different models from
various brands of the same era that have digital inputs. However these
models are virtually impossible to get in China. Then some cheapo
consumer grade stuff caught my attention – several relatively nameless
brands have “sound cards” for home theater uses that have digital I/O.
Those are priced at roughly 200~300 Chinese yuan. Among those I found a
more widely recognized brand called Terratec. They have PCI-e and USB
sound cards that comes with digital I/O and are available for purchase
in China. Price are on the higher end (300+ CNY), however still way
cheaper than the cheapest professional audio interface that doesn’t have
digital I/O (those start from ~800 CNY). Plus these models seem to have
a reasonable Linux user base, so I got their Aureon 7.1 USB.</p>
<p>This thing feels extremely cheap on first sight, weights close to
nothing, and is made entirely out of plastic. It comes with an extremely
thin S/PDIF fiber optical cable which looks so fragile that a single
touch may break it. It does work out of the box. ALSA recognizes it as
“Aureon 7.1 USB” without further clue about the chip it uses, however
the Windows driver is more telling. Its control panel associates the
chip with a Taiwanese company called Cmedia, and the kernel driver is
named <code>cm106.sys</code>. Upon further investigation this thing is
likely to be based on their CM106 chip (which is an ancient solution
from 2003), or its pin-compatible successor CM6206. I don’t have
interest in disassembling it right now (update: confirmed by a teardown
later. It’s indeed based around the CM6206), but either way it’s a cheap
consumer grade solution.</p>
<p>SD-80’s digital output is fixed at 44100 Hz sample rate. So the sound
card must also record at 44100 Hz to make a correct recording (unless it
has internal resampling). This is easily doable under Windows (just
select the appropriate sampling rate in the device properties dialog).
It’s also reasonably easy with Jack, where you can just start the server
on that specific device with the correct sampling rate. But this is not
that easy to achieve for pulseaudio. By default, recent versions of
pulseaudio auto detects cards with the <code>module-udev-detect</code>
module, which doesn’t allow setting a different sample rate for a single
sound card. Setting <code>alternate-sample-rate</code> doesn’t work
either because this card supports digital signals at 48000Hz which in my
case is the value for <code>default-sample-rate</code>, and therefore
would not fallback to <code>alternate-sample-rate</code>. I had to write
a small function to fix this:</p>
<pre><code>spdif_samplerate()
{
pacmd unload-module `pacmd list-modules | grep -B 2 Aureon_7 | awk '/index:/ {print $2}'`
pacmd load-module module-alsa-card device_id=`awk '/Aureon 7\.1 USB$/{print $1}' /proc/asound/cards` name="usb-0ccd_Aureon_7.1_USB-00" card_name="alsa_card.usb-0ccd_Aureon_7.1_USB-00" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no rate=44100
}</code></pre>
<p><del>Using a cheap consumer grade card does come with consequences.
The recording seems to have a small DC bias – it’s not real DC though,
the offset changes from time to time. When the input signal goes silent,
the offset might differ from the offset when the signal was silent last
time.</del> <a id="n2" href="#note2" class="note">[2]</a> For this reason, I always add a high-pass filter
when using the material recorded by this sound card. With the HPF
applied, this sound card does produce clearer digital recording than my
Scarlett Solo with very cheap cables.</p>
<p>There’s no ASIO driver for this card either (Aureon 7.1 PCIe does
have ASIO driver, but I can’t install that card on my laptop), which
means I have to either use Steinberg’s generic ASIO driver, or ASIO4ALL,
both of which are… kind of trash, but still usable. The card doesn’t
have a bad latency issue though: it’s obviously way worse than the
Scarlett, but still tolerable.</p>
<p>So that’s my <del>current</del> recording setup. I’m currently OK
with it. However I’m not going to stick with it forever. I’ll upgrade to
a UA-25(EX), or better yet, an SD-90 because that way I can use its ASIO
output directly, plus I’ll be able to chain my SD-80 to it and use both
at the same time.</p>
<h2 id="tocanch4" class="tvis">Recording Setup Update Part
2</h2>
<p>(This part is written Q4 2021)</p>
<p>Yes I did upgrade to a UA-25 (non-EX). I got mine for about $60
(after a long struggle against eBay’s virtually non-existent customer
service to lift a stupid suspension on my account).</p>
<p>Gentoo Linux handles this new interface without any problem. The
troublesome part is Windows (again). Just like the SD-80, Roland didn’t
release any Windows 10 driver for the UA-25. <a href="https://chrisoft.org/blog/post/2019-04-25.html#tocanch4">The
trick</a> I used to make their SD-80 Windows 8/8.1 driver install on
Windows 10 worked fine, and the driver installed correctly. But things
quickly went down hill. Whenever I open an application that uses ASIO,
the driver freaks out and causes audio dropouts like crazy. This glitch
makes the driver basically unusable.</p>
<p>I tried drivers for different Windows versions. Nothing changed. When
I was desperate and searching around the web, I discovered that UA-25EX
has an official Windows 10 driver. UA-25EX is virtually the same as
UA-25 except it comes with an improved limiter section which I assume
has largely nothing to do with the driver. So I decided to try some “mad
hax”.</p>
<p>Windows driver for UA-25EX is only available from Microsoft as a
Windows update package. Roland says if you have a UA-25EX, the package
will automatically install itself once you plug it in. But I don’t have
a UA-25EX: I only have a UA-25. So I had to go to the Windows Update
Catalog, looked for the driver package there, and download the build for
my computer (which turned out to be much harder than it needs to be, but
I won’t go deeper into that here). I extracted the package, and modified
the USB product ID the driver is designed for in the INF file:</p>
<pre><code>%DriverDeviceDesc%=DriverInstall, USB\VID_0582&PID_00E6 ; UA-25EX</code></pre>
<p>Just change <code>PID_00E6</code> to <code>PID_0074</code> (and also
the comment if you wish). AND IT FRICKING INSTALLED. ASIO also worked
perfectly. (Insert a thousand-word essay trashing Roland’s bad practice
here.)</p>
<p>So did the upgrade work? Nope. The DC bias is still there. Now it’s
more likely that the DC bias is from the SD-80 itself. Also another very
telling clue is that when the sound generator inside the SD-80 is reset,
the DC bias immediately goes away. I did some additional research on the
Internet and discovered people have theorized that the DC bias is from
the effect processor. They are having a <a href="https://gearspace.com/board/electronic-music-instruments-and-electronic-music-production/1302162-roland-xv5080-spdif-issue.html">similar
problem</a> with their XV-5080 and XV-5050 as well, both of which have
the same synth engine as the SD-80. By replicating their experiments and
getting the same result, I personally conclude that the DC bias comes
from the amp / gain / filter section of the integrated effects
processor. So I guess I’ll have to keep using high-pass filters on the
output for now.</p>
<p>So the only upgrade is that now I can record S/PDIF signal with
native ASIO. Besides that, it’s actually a downgrade: Output from the
computer will be muted if the digital input of the UA-25 is enabled.
This forced me to keep using the analog input for monitoring.</p>
<h2 id="tocanch5" class="tvis">Recording Setup Update Part
3, 4, 5…</h2>
<p>Yes I did upgrade. (again!!)</p>
<p>I saw a UA-101 in a listing for $80. I bought it. Then there was a
whole saga which ended in me getting two of them for the price of one.
And then I saw a SD-90 for $120… you know what happened.</p>
<p>This is getting too long to write in detail here. I’ll give detailed
information on my current recording setup in a new post, if I care to
write it at all.</p>
<h2 id="tocanch6" class="tvis">Rompler Preservation</h2>
<p>Kalas was extremely keen on preserving the sounds of SD-90/80 during
our communications. I have the intention to keep these legendary Roland
sounds around long into the future as well. We discussed the following
possibilities. Note that due to the locked-down nature of SD-90/80, we
referred to them mostly as “Romplers”, but these methods listed below
apply to those expandable models as well, especially considering they
are nothing but romplers that you can add more ROMs to, and the
architecture of Roland’s PCM synth.</p>
<p>In this section I’ll start using the word “SD-90” and “SD-80”
interchangeably, and by saying “SD-90”, I’m actually referring to the
synthesizer module built into it. If Roland was being honest when they
were saying “the newly developed multitimbral MIDI sound module, as
built into the well-received SD-90” when they were introducing the SD-80
<a id="n3" href="#note3" class="note">[3]</a>, it should be
safe to assume they are virtually the same thing. I know this is kind of
sloppy. If you want to read more on this, checkout the <a href="#tocanch33">“More on SD-80 vs SD-90 vs SD-20”</a> section.</p>
<h3 id="tocanch7" class="tvis">Emulation</h3>
<p>This method was brought up by Kalas. Indeed there are a couple of
sound modules / synthesizers that has been emulated with reasonable
success. <a href="https://github.com/munt/munt">Munt</a> has an amazing
emulation of Roland’s LA synthesis found in the MT-32 or D-50.
<a id="n4" href="#note4" class="note">[4]</a> Yamaha’s FM
synthesis chips have been reverse engineered from inside out: there are
<a href="https://github.com/gtaylormb/opl3_fpga">implementations on
FPGA</a>, multiple nearly perfect software implementations, and other
bizarre stuff. MAME has emulation for multiple MU-series models, plus
work has been put into making an emulated SC-55 in MAME.</p>
<p>However, I personally don’t think emulation is the way to go for
SD-90/80. The success (or lack thereof) of these emulated models does
have their reasons:</p>
<ul>
<li>Emulation of Yamaha’s FM chips is a success because those chips are
available to third-party sound card makers, and therefore have public
datasheets that contains critical information for emulating the chip,
which includes register mapping, and the detailed architecture of the FM
synthesizer. This drastically decreased the amount of reverse
engineering required to get a perfect emulated implementation. Roland
has never made their synthesizer chips available to third-party vendors,
and therefore it’s impossible to take advantage of public
datasheets.</li>
<li>Emulation of several early gaming consoles’ sound system has been
successful because
<ul>
<li>They are relatively sample.</li>
<li>Similar to Yamaha’s FM chips, programmers can also directly
interface with them. Therefore their programming manuals have detailed
description on how sound generation works in the chips. SD-90/80’s
synthesizer chip XV meets neither of these two criteria.</li>
</ul></li>
<li>Most emulated sound modules in MAME have been a failure in terms of
real-world usability. The emulated MU-series either freezes, produces no
sound at all, or makes loud unexpected noise when playing the demo
track. The SC-55 emulation barely works – they only got the CPU working
and running its dumped control ROM. Please don’t get me wrong: the fact
that some emulated MU model could make any sound is almost a miracle for
me, and definitely a huge achievement despite the far-from-ideal results
it currently has, as Yamaha’s sample based synth chips
(<code>GEW/SWP</code> stuff) are no easy nut to crack. This approach is
highly unlikely to work for the SD-90/80 because unlike gaming consoles,
getting the CPU to run its system code doesn’t mean much for synthesizer
emulation. It’s the emulation of the actual synth/DSP chip that matters.
And the XV chip found in SD-90/80 is a <strong>monstrosity</strong>
compared to the early SWP chip in the MU-series. For this reason, I find
a pure emulation based solution difficult to implement for
SD-90/80.</li>
<li>Munt is successful because instead of an instruction-to-instruction
emulation, it’s more like a software reimplementation of the LA synth.
It doesn’t try to run the control ROM on an emulated Intel 8098 CPU, but
instead only use it for determining some characteristics of the software
implementation of the LA synth. This approach makes the most sense when
trying to recreate SD-90/80 in software form, but still definitely
require tons of reverse engineering (either blackbox or whitebox).</li>
</ul>
<p>For these reasons, I don’t think an OPL3-level emulation of SD-90/80
is possible <a id="n5" href="#note5" class="note">[5]</a>. However, I will discuss an approach that
resembles Munt’s in the <a href="#tocanch8">Dumping and Deciphering</a>
section.</p>
<h3 id="tocanch8" class="tvis">Sampling the Rompler</h3>
<p>Many people have attempted to sample the SD-90. We already have the
(in)famous THFont from forever ago that contains some samples from the
SD-90, plus <a href="https://musical-artifacts.com/artifacts/1367">these</a> efforts to
create a complete set of sampled instruments from the SD-90. However,
these folks aren’t doing it in the most efficient way IMHO. Since the
SD-90/80 is extremely editable, one can craft presets ideal for raw
sample extraction (no filters, no LFO, just a plain tone with a constant
amplitude envelope). Since many preset instruments in the SD-90/80
consist of multiple layers using different samples, instead of sampling
the patches, one can sample every individual waveform and layer the
samples in a way similar to the original presets to make close
imitations of SD-90/80 instruments. If done properly under ideal
conditions, the resulting sample library should be around the same size
of SD-90/80’s sample ROM, but decompressed (my guess is ~64 MiB
<a id="n6" href="#note6" class="note">[6]</a>).</p>
<p>If you’re only going to use the vanilla SD patches without any sort
of modification (including filter response, envelope, and effect
parameters), those existing samples will work just fine and they are
probably the most accurate out there if recorded properly. Of course,
the “efficient” approach of sampling sacrifices some level of that
accuracy (due to a different engine being used for playing back the
samples). But in exchange you get the highest level of freedom to
recombine the raw samples into custom patches including tweaking all
possible parameters and effects available in the synth engine of your
choice (which is a huge plus for me personally, as I love to create
whacky patches).</p>
<p>One problem for extracting the samples is that, a single waveform in
the SD-80 may contain different samples assigned for different key
ranges. This is often called a “multisample” by some sources. The way
the samples are mapped to the keys must be figured out before actually
sampling them. I have written a small(ish) python script to do exactly
that. It records the SD-80 playing two different keys at the same pitch
one after another, and compare them by calculating the correlation. If
the correlation is lower than a threshold, the two keys use different
samples. This approach works reasonably well for most samples, but for a
few analog synth samples, it works poorly. For those samples, I had to
resort to relying on the human ear (DTW, dynamic time warping, is also
used sometimes, but it usually has poor results for these samples as
well). Also the XV engine have some weird quirks near the keys C7-D8
(96-110). The actual waveform produced within that range varies very
slightly from time to time. This is possibly due to the effect of <a href="https://en.wikipedia.org/wiki/Aliasing">aliasing</a> becoming
prominent for these high-pitched notes. I have already figured out
key-sample mapping for all multisamples (they are not guaranteed to be
correct, due to reasons mentioned above).</p>
<p>Another problem is looping. Roland uses sample looping extensively in
their PCM synths. It’s basically their secret sauce to squeeze thousands
of instruments into a unit with only tens of megabytes of samples.
Sample loop points can also be computed using cross-correlation. But is
nowhere near perfect. Of course it can be done manually, but that would
be a tedious task.</p>
<p>No actual recording of the raw samples have been done by me yet.</p>
<p>I have also dumped the instrument configuration for all preset
instruments and rhythm sets as part of my SD-80 dumping project (for
SD-80’s native mode only. I’m not sure whether this is doable for its
GS/XGLite instruments without a lot of reverse engineering, but nobody
cares about those anyway). For now, it can be used to recreate
parameter-accurate SD-80 patches in Roland’s SRX/Zenology plugins.
However it’s not yet in a very human-readable form (either raw binary
registers dump or decimal values with field names).</p>
<p>Once the samples are there, one can easily piece them together within
the sample playback engine of their choice, be it HALion, KONTAKT, or
even just soundfont synthesizers. Sure the feature set of each
sample-based synth engine is not exactly the same, but I think decent
results could be achieved for most instruments.</p>
<h3 id="tocanch9" class="tvis">Dumping and Deciphering</h3>
<p>The wave ROM in the SD-80 is a standard part despite the custom
Roland engravement on it <a id="n7" href="#note7" class="note">[7]</a>. This is expected because Roland has been
using standard mask ROM parts from various manufacturers for the wave
ROM. This means the content of SD-80’s wave ROM can be easily
dumped.</p>
<p>This might be shocking for some of the readers, but Roland does
compress their samples. This is evident from the specification of
XV-5080 “Wave memory: 64MB (16-bit linear format)” while the XV-5080
only has 32 MiB wave ROM. The compression, previously unknown to me, has
been identified to be a variant of the differential pulse-code
modulation (DPCM) called FCE-DPCM by <a href="http://www.dtech.lv/techarticles_roland_exp.html">some amazing
person</a>. The same person seemed also figured out the structure of the
wave ROM used by sample-based synthesizers from Roland of that general
era. Unfortunately, I wasn’t able to find the article on the technical
details of the compression method at the time of writing. Anyway, hats
off to Edward of dtech.lv!</p>
<p>I <strong>will surely</strong> make a dump of the wave ROMs of my
SD-80. However, I want to do it in an nondestructive manner – I don’t
want to get a ROM dump and an unusable SD-80 (or end up with no valid
ROM dump and an unusable SD-80). Since I have proved my SMT soldering
job is terrible and shall never be in the vicinity of a SMT board
holding a soldering iron or hot air gun, I might try some clipping the
chip instead. I’m considering to try <a href="https://www.360-clip.com/uni-48.htm">this</a> clip from 360-clip.
It claims to be applicable to any 48-pin TSOP chips. If that’s true,
with the help of this clip and a Raspberry Pi <a id="n8" href="#note8" class="note">[8]</a>, I
can suck that juicy content out of the wave ROM chips of the SD-80.</p>
<p>Once we have the ROM dump, we can start trying to figure out its
structure. If we somehow managed to do that, we would be able to feed
the decompressed samples together with the already dumped patch
parameters to some existing or new, custom sample-based software
synthesizer, and achieve decent results mimicking the SD-90/80. Patches
that make use of MFX would certainly be a pain to deal with. However one
can always simulate MFX with external DAW effects. To hear the
difference MFX makes for various preset patches that use it, see the <a href="#tocanch37">“What role does MFX play?”</a> section.</p>
<p>I believe this approach is very similar to that one used by Munt
(although I only read a small part of Munt’s code base, and I didn’t
read anything about their reverse engineering approach). The SH3 CPU
plays a relatively minor part in the tone generation of SD-80. Instead,
we should focus on replicating the sounds of the XV engine. Also, an
logic-level reverse engineering of the XV chip doesn’t seem reasonable
because it’s such a huge and complex chip (or rather, a huge gate
array). Just save the hassle, treat it like a blackbox and try to
reproduce its output using a software implementation should be able to
produce acceptable result on its own.</p>
<h4 id="tocanch10" class="tvis">Extra rambling about the ROM
chip</h4>
<p>In the part number of <code>μPD23C128040ALGY-***-MJH/MKH</code>, the
<code>***</code> part is the ROM code. When a mask ROM chip is
commissioned, the customer (Roland in this case) needs to submit the
desired ROM content and their choice for various other options (in case
of <code>μPD23C128040ALGY</code>, they can choose how the logic level on
a certain pin controls the outputs). The manufacturer then arrange the
mask according to this information and assigns a ROM code to this
specific mask <a id="n9" href="#note9" class="note">[9]</a>. Therefore, for two
chips of the same type, if they have the same ROM code, their contents
should be identical. This way we can guess with fair amount of certainty
that the XV-3080, XV-5080 and XV-5050 have identical wave ROM contents
(they all use <code>μPD23C128040ALGY-849-MJH</code> and
<code>μPD23C128040ALGY-850-MJH</code>).</p>
<p>Among the chips with Roland markings in the SD-80, the XV chip and
8-bit MCU with Roland-programmed ROM has other markings that matches
Roland’s internal part numbers (the numbers with a prefix R, like
<code>R01455956</code> and <code>R02902867</code>), and followed by a
indicative part number of the actual chip (<code>137</code> and
<code>RA08-503</code>). However, none of these features matches on the
wave ROM chips. The wave ROM chips has internal part number
<code>R02678601</code> and <code>R02678612</code>, while the numbers on
the service manual are <code>03010612</code> and <code>03010623</code>
respectively. The indicative part also doesn’t match either: the chips
in my unit have <code>23C128L-529J</code> and <code>23C128L-535K</code>.
While the J/K variant and the <code>23C128L</code> part does match, what
I presumed is the ROM code doesn’t (529 vs 525 on IC28, 535 vs 526 on
IC29). What does this mean? I don’t really know. My SD-80 is built
relatively late into production (date code on the main board is
2004-08-27, date on the service manual is May 2002 – when the SD-80 was
initially released). Maybe Roland did revise the wave ROM content. If
that’s the case, it would be interesting to find one with the original
ROMs and compare them. I wouldn’t expect there to be any significant
differences, though.</p>
<h3 id="tocanch11" class="tvis">SD-20 MIDI File Converter</h3>
<p>This extremely intriguing piece of software is brought up by Kalas
during our communications. At the time of writing, this application can
be still found <a href="https://www.roland.com/jp/support/by_product/sd-20/">here</a>. The
installer can only proceed if an SD-20 is detected. This can be easily
circumvented by using a InstallSheld extractor. The converter does try
to access a registry key
<code>HKLM\Software\Wow6432Node\Edirol\SD-20 MIDI File Converter\BaseDataFile</code>,
which should be set to a string pointing to the url of its param.dat
file. However, even with this key set, the converter still refuse to do
anything, saying it failed to initialize. By the way even with an SD-20
connected to the computer via USB, the converter still refuses to start
on Windows 10.</p>
<p>However, this kind of nonsense is not going to stop me. I quickly
found cracks floating around on the Internet. This converter is
extremely simplistic: you pick the midi file to convert, it spits the
wav file into the same folder. Here are some quick samples.</p>
<div>
<table style="position:relative;left:50%;transform:translate(-50%,0);text-align:center">
<tbody><tr>
<td>
SD-80
</td>
<td>
SD-20 Converter
</td>
</tr>
<tr>
<td>
<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-80/AMEDLEY.SD80.N.ogg">
</audio>
</td>
<td>
<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-80/AMEDLEY.SD80.SD20C.N.ogg">
</audio>
</td>
</tr>
<tr>
</tr><tr>
<td colspan="2">
AMEDLEY.MID by Earl Gray Fowler from Voyetra Technologies, arranged for
SD-80 (Native Mode)
</td>
</tr>
</tbody></table>
</div>
<p>Used instruments: St.Strings, St.Timpani, St.Harp, St.Fr Horns, Flute
vib, St.Tubular, St.Harp, St.Xylophone, St.Music Box, St.Room, Bassoon
vib, SpaceVoice 3, Atmosphere 3, Ice Rain 3, PanFlute vib, Bird Tweet,
Seashore, Sweep Pad 3, Rockabilly, St.Kalimba, Piccolo vib, Steel Drums,
Tuba vib, Romantic Tp, St.Banjo, Trombone vib, JazzClarinet, Gunshot,
Clavi Bass 3, St.Brass, Dist.Gt 2, St.Orc Hit, Jazz Organ 2,
PhaseFrtless, Solo Vox 3, Reed Romance, Ice Rain 2, St.Power, Oct.JP
Saw, SH-2 Lead, Jazz Slap, OverdriveGt2, Applause.</p>
<p>Reed Romance and SH-2 Lead are from the special 2 set, therefore
cannot be used by the SD-20 MIDI File Converter. They are substituted by
Violin 2 vib and Warm SynHorn automatically. A single SD-80 system
exclusive DT1 message is used to change the patch volume of SH-2
Lead.</p>
<div>
<table style="position:relative;left:50%;transform:translate(-50%,0);text-align:center">
<tbody><tr>
<td>
SD-80
</td>
<td>
SD-20 Converter
</td>
</tr>
<tr>
<td>
<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-80/YOSEMITE.SD80.N.ogg">
</audio>
</td>
<td>
<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-80/YOSEMITE.SD80.SD20C.N.ogg">
</audio>
</td>
</tr>
<tr>
</tr><tr>
<td colspan="2">
YOSEMITE.MID by Passport Designs, arranged for SD-80 (Native Mode)
</td>
</tr>
</tbody></table>
</div>
<p>Used instruments: Enh.Nylon o, Ocarina vib, St.Slow Str2,
PhaseFrtless, Celtic Ens, St.Standard, Soft60’Organ, Pre Bass,
St.BritePno.</p>
<p>St.BritePno is a custom patch. It’s selected using system exclusive
messages generated by SD-80’s bulk dump feature. Enh.Nylon o, Celtic
Ens, Pre Bass are not available in the SD-20 Converter.</p>
<p>The output from the converter is significantly louder than SD-80’s
digital output. I normalized all recordings before uploading them.
Despite the lack of a lot of features and patches, the converter
actually sounded exceptionally good, and exceeded my expectation by
quite a large margin.</p>
<p>The converter is not a software implementation of SD-20’s internals.
There’s misinformation out there claiming so, but that’s simply not the
case. Roland explicitly disclosed this in the readme file of the
converter.</p>
<h4 id="tocanch12" class="tvis">FrankenTTS-1</h4>
<p>Something smells fishy instantly when I got this converter. That file
name “param.dat” looks really familiar. If you have used any of Roland’s
HQ software synthesizer products from the early 2000s
<a id="n10" href="#note10" class="note">[10]</a>, you might feel the same. They all use this file to
store their samples and patch data.</p>
<p>One natural thing to do is to replace the param.dat file of these
plugins with the one supplied with the converter. The result are as
follows:</p>
<ul>
<li>HQ-OR/HQ-QT refuses to load at all after the swap.</li>
<li>HQ-GM2 loads correctly. Instrument names changes to the names from
SD-20’s Classical set (for example, 1:0 changes from Piano 1 st. to
Piano 1w). Only instruments from the Classical set are available. No
NRPN messages can change the instrument set. The sound is pretty much
identical to that from the converter.</li>
<li>GrooveSynth (P5antom) also loads correctly. Besides all instruments
from the Classical set, a couple of instruments from the Contemporary
set and Solo set are also available, but there’s no obvious pattern
there. All rhythm sets are available in the Franken-GrooveSynth.</li>
</ul>
<p>This reveals that the synthesizer engine is identical to that used by
these HQ software synthesizers, proving the claim that this converter is
a software implementation of SD-20 wrong again.</p>
<p>There’s not much information about the structure of this “param.dat”
file online, nor could I figure it out myself (I’m not a huge fan of
doing such work). However this interchangeablility is somewhat
delighting.</p>
<h4 id="tocanch13" class="tvis">Other observations</h4>
<p>The executable of the converter is a mere ~500KiB and doesn’t seem to
use an executable packer. This suggests the “HQ” engine couldn’t be
super complex.</p>
<p>The executable contains references to “Automation”, “User Rhythm” and
such. Apparently they still left some code from the plugin version of
the HQ engine in this converter.</p>
<p>I think I found the entry to the function where param.dat is loaded
(0x004228e0). No idea where to go from there though.</p>
<h4 id="tocanch14" class="tvis">So… is this it?</h4>
<p>Nah, we should not depend on a piece of proprietary junk for the
preservation of anything.</p>
<p>Maybe some wizards could find a way to hack the plugins and make all
instruments available in TTS-1 or something. But that doesn’t really
work as a way to preserve the synth if the binary code it depends on
could stop working at an arbitrary point of time in the future, does
it?</p>
<h3 id="tocanch15" class="tvis">Roland Cloud</h3>
<p>Roland has been pushing their subscription service “Roland Cloud”
since 2018. When it first came out there was no plugin of my interest.
The deal breaker for me back then was there was no permanent licensing
option. If you know me, I’m strongly opposed to the subscription model
used for software products.</p>
<p>Starting from May 2020 though, Roland started offering “lifetime
keys”, which now puts this service within my radar. I took the ultimate
tier trial and installed every piece of plugin replicating SRX boards
and the XV-5080, as well as the then-new “Zenology” synth. I’ve got
mixed results.</p>
<p>The software aspect is okay. It’s much better than SoundCanvas VA
I’ve used years ago, which has glitchy TVA and TVF and was never fixed.
The user interface scales perfectly on high DPI screens. Editing
experience of the SRX/XV plugins is basically the same as the editors
for later Roland PCM synths (such as the SonicCell and the Integra-7) –
that is, much better than the original XV or SD-80 editor. These plugins
still have terrible performance as most previous Roland software synths
do (each instance needs plenty of processing power – if you use a
computer that predates the release of these plugins, the performance
will probably suffer).</p>
<p>The sound is … fine? Didn’t give me the same astonishment when I
heard a real XV-5080 on YouTube though (I thought “no way this thing
only has 32 MiB of sample content!”). For most patches, they sound
“close enough” to an actual XV-5080, despite a handful of caveats. The
synth engine do behave nearly identical to actual XV-based synths, at
least according to my tests. The XV-5080 plugin is especially
underwhelming, considering the original XV-5080 is expandable and can
also load external samples. If only the XV-5080 plugin could load
samples and patches from other SRX plugins installed, it would have been
a lot better (although this is solved by Zenology, it has its own
issues). The MFX uses a different set of effect types from the original
XV-5080 and SD-80: they are modeled after synths after the Fantom-S
era). However I’d say the effects bearing the same name as XV effects do
sound largely the same.</p>
<p>The executables contain a resource folder named “WROM”, and it
contains the wave ROMs used by the plugins. They are all exactly 32 MiB.
The wave ROM files contains a similar 32-byte header to dumps of actual
wave ROM of earlier Roland PCM synths (see the JD-800 wave ROM dump from
Edward of dtech.lv).</p>
<p>I do have some major complaints though. Each executable contains a
copy of the wave ROMs. If you choose to install all plugin formats, that
will install 4 copy of exactly the same wave ROM on your computer. Also
it’s impossible to combine the sounds of different SRX boards. Most
samples originated from Spectrasonics are missing from the SRX plugins
but are reincluded in the EXZ expansions which can be used in Zenology,
indicating a copyright dispute between the two companies that was
resolved later <a id="n11" href="#note11" class="note">[11]</a>. These problems
can be partially solved if you use the newer Zenology plugin instead.
But Zenology is riddled with its own issues. It uses a nearly entirely
new set of MFX (identical to the MFX from their 2019 Fantom-6/7/8
workstations and other “ZEN-CORE” based products), and completely lacks
reverb effects. Effects that have the same name in Zenology and XV-based
synths doesn’t necessarily behave the same. And Zenology still can’t
load samples from different sample groups to left and right channels of
a single voice. I know it’s a thing in the original XV, but since it’s a
software reimplementation, they don’t have to stick to the same
restrictions do they? Also, why are all these plugins monotimbral? If
your answer is “just use multiple instances”, I would remind you that
these are Roland software synths, and they don’t perform well if you add
multiple to your virtual rack…</p>
<p>Recreating patches of the SD-80 using these plugins does seem to be
possible, and there are already plenty of people doing that. See the
section <a href="#tocanch32">“SD-80’s sound content”</a> for details.
However it does still rely on proprietary Roland software products
(which, if they want to, can cease the support at any time), requires
pricy licenses, and on top of all that, a crappy authenticating
system.</p>
<div>
<table style="position:relative;left:50%;transform:translate(-50%,0);text-align:center">
<tbody><tr>
<td>
SD-80
</td>
<td>
XV-5080 VST
</td>
</tr>
<tr>
<td>
<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-80/passport_Driving.sd_pretending_to_be_xv.ogg">
</audio>
</td>
<td>
<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-80/passport_Driving.xvvst.ogg">
</audio>
</td>
</tr>
<tr>
<td>
SD-80 using patch parameters pulled from XV-5080
</td>
<td>
5 instances of XV-5080 VST using factory patches
</td>
</tr>
<tr>
<td colspan="2">
“Driving”, by Passport Designs
</td>
</tr>
</tbody></table>
</div>
<h2 id="tocanch16" class="tvis">A
History lesson from someone who barely knows anything about it</h2>
<p>AKA a short history of Roland’s sample-based synths from someone who
has used almost none of them.</p>
<p>Below is a comparison chart of selected sample-based synths from
Roland using information available from their manuals (mostly sysex
address mapping in the MIDI implementation) and service manuals. In a
few occasions sources from the Internet are used as well.</p>
<div class="collapse" data-caption="More detailed comparison of various Roland's PCM based sound modules">
<p>Chip information on following modules are from actual units:</p>
<ul>
<li>SD-90</li>
<li>SD-80</li>
<li>SD-20</li>
<li>SC-8850</li>
<li>SC-D70 (courtesy of Palto)</li>
<li>SC-55 (courtesy of Palto)</li>
<li>SC-55mkII (courtesy of Palto)</li>
<li>Fantom-XR</li>
<li>XV-5080</li>
</ul>
<p>Others come from service notes.</p>
<table>
<tbody><tr>
<th>
Model
</th>
<th>
Synth Tone Generator
</th>
<th>
Effects Processor
</th>
<th>
Wave ROM
</th>
<th>
CPU
</th>
<th>
Multitimbral Parts
</th>
<th>
Polyphony (partials / voices)
</th>
<th>
Preset Patches
</th>
<th>
Synth Effects
</th>
</tr>
<tr>
<td>
MT-32
</td>
<td>
MB87136A (LA32)
</td>
<td>
HG61H20R36F (Reverb), 4*64Kbit RAM
</td>
<td>
4 Mbit = 0.5 MiB
</td>
<td>
Intel 8098
</td>
<td>
9
</td>
<td>
32
</td>
<td>
128i + 30r
</td>
<td>
Reverb
</td>
</tr>
<tr>
<td>
JD-990
</td>
<td>
MB87731A (EP) + MB87424A (TVF)
</td>
<td>
2 * TC6088AF (CSP), 4 Mbit RAM
</td>
<td>
3 * 16 Mbit = 6 MiB, expandable w/ SL-JD80, SO-PCM1, PN-JV80 and SR-JV80
boards
</td>
<td>
H8/570
</td>
<td>
8
</td>
<td>
24
</td>
<td>
128i + 2r + 32p
</td>
<td>
JD Multi (EQ + Dist + Phaser + Spectrum + Enhancer + Chorus + Delay +
Reverb)
</td>
</tr>
<tr>
<td>
SC-55
</td>
<td>
24201F002, TC24SC201AF-002 (GP)
</td>
<td>
Integrated, 256 Kbit RAM
</td>
<td>
3 * 8 Mbit = 3 MiB
</td>
<td>
H8/532
</td>
<td>
16
</td>
<td>
24
</td>
<td>
317i + 10r
</td>
<td>
Reverb, Chorus
</td>
</tr>
<tr>
<td>
SC-55MkII
</td>
<td>
TC6116AF (GP4)
</td>
<td>
Integrated, 256 Kbit RAM
</td>
<td>
16 Mbit + 8 Mbit = 3 MiB
</td>
<td>
H8/532
</td>
<td>
16
</td>
<td>
28
</td>
<td>
354i + 10r
</td>
<td>
Reverb, Chorus
</td>
</tr>
<tr>
<td>
JV-880
</td>
<td>
TC6116AF (GP4)
</td>
<td>
Integrated, 256 Kbit RAM
</td>
<td>
2 * 16 Mbit = 4 MiB, expandable w/ SR-JV80 boards & PN-JV80 / SO-PCM
cards
</td>
<td>
H8/532
</td>
<td>
8
</td>
<td>
28
</td>
<td>
192i + 3r + 48p
</td>
<td>
Reverb, Chorus
</td>
</tr>
<tr>
<td>
SC-88
</td>
<td>
MBCS30109 (XP)
</td>
<td>
Integrated, 2 * 1 Mbit RAM
</td>
<td>
4 * 16 Mbit = 8 MiB
</td>
<td>
H8/510
</td>
<td>
32
</td>
<td>
64
</td>
<td>
654i + 24r
</td>
<td>
Reverb, Chorus, Delay, EQ
</td>
</tr>
<tr>
<td>
JV-1080
</td>
<td>
MBCS30109B (XP)
</td>
<td>
Integrated, 2 * 1 Mbit RAM
</td>
<td>
4 * 16 Mbit = 8 MiB, expandable w/ SR-JV80 boards & PN-JV80 / SO-PCM
cards
</td>
<td>
HD6477034, SH7034 (SH1)
</td>
<td>
16
</td>
<td>
64
</td>
<td>
512i + 8r + 64p
</td>
<td>
Reverb, Chorus, EFX (40 types)
</td>
</tr>
<tr>
<td>
SC-88VL
</td>
<td>
MB87B105PF-G RHR-2342 (XP2) <a id="n12" href="#note12" class="note">[12]</a>
</td>
<td>
Integrated, 2 * 1 MBit RAM
</td>
<td>
4 * 16 Mbit = 8 MiB
</td>
<td>
H8/510
</td>
<td>
32
</td>
<td>
64
</td>
<td>
654i + 24r
</td>
<td>
Reverb, Chorus, Delay, EQ
</td>
</tr>
<tr>
<td>
SC-88Pro
</td>
<td>
TC170C200AF-005, RA01-005 (XP3), 2 * 1 MBit RAM
</td>
<td>
MB87837PF, 1 MBit RAM
</td>
<td>
5 * 32 Mbit = 20 MiB
</td>
<td>
H8/510
</td>
<td>
32
</td>
<td>
64
</td>
<td>
1117i + 42r
</td>
<td>
Reverb, Chorus, Delay, EQ, EFX (64 types)
</td>
</tr>
<tr>
<td>
JV-2080
</td>
<td>
TC170C200AF-005, RA01-005 (XP3), 4 MBit RAM
</td>
<td>
TC170C110AF-002, RA03-002, 4 MBit + 1 MBit RAM
</td>
<td>
2 * 32 Mbit = 8 MiB, expandable w/ SR-JV80 boards
</td>
<td>
HD6437034, SH7034 (SH1)
</td>
<td>
16
</td>
<td>
64
</td>
<td>
640i + 10r + 64p
</td>
<td>
Reverb, Chorus, EFX (3 slots, 40 types)
</td>
</tr>
<tr>
<td>
SC-8850
</td>
<td>
2 * TC203C180AF-002, RA09-002 (XP6), 2 * 4 MBit RAM
</td>
<td>
MB87837PF, 4 MBit RAM
</td>
<td>
2 * 128 Mbit = 32 MiB
</td>
<td>
HD6437016E09F, SH7016 (SH2) <a id="n13" href="#note13" class="note">[13]</a>
</td>
<td>
64
</td>
<td>
128
</td>
<td>
1640i + 63r
</td>
<td>
Reverb, Chorus, Delay, EQ, EFX (64 types)
</td>
</tr>
<tr>
<td>
SC-8820
</td>
<td>
TC203C180AF-002, RA09-002 (XP6), 4 MBit RAM
</td>
<td>
MB87837PF, 4 MBit RAM
</td>
<td>
128 Mbit + 64 Mbit = 24 MiB
</td>
<td>
HD64F7017F28, SH7017 (SH2)
</td>
<td>
32
</td>
<td>
64
</td>
<td>
1608i + 63r
</td>
<td>
Reverb, Chorus, Delay, EQ, EFX (64 types)
</td>
</tr>
<tr>
<td>
SC-D70
</td>
<td>
TC203C180AF-002, RA09-002 (XP6), 4 MBit RAM
</td>
<td>
MB87837PF, 4 MBit RAM; TC223C080AF-101, RA0A-101 (ESP4), 4 Mbit RAM
</td>
<td>
128 Mbit + 64 Mbit = 24 MiB
</td>
<td>
HD6437016E19F, SH7016 (SH2)
</td>
<td>
32
</td>
<td>
64
</td>
<td>
1608i + 63r
</td>
<td>
Reverb, Chorus, Delay, EQ, EFX (64 types)
</td>
</tr>
<tr>
<td>
XV-3080
</td>
<td>
2 * TC203C180AF-002, RA09-002 (XP6)
</td>
<td>
Integrated, 2 * 4 MBit RAM
</td>
<td>
2 * 128 Mbit = 32 MiB, expandable w/ SRX & SR-JV80 boards
</td>
<td>
HD6437042F33, SH7042 (SH2)
</td>
<td>
16
</td>
<td>
128
</td>
<td>
1024i + 16r + 64p
</td>
<td>
Reverb, Chorus, MFX (1 slot, 63 types)
</td>
</tr>
<tr>
<td>
JV-1010
</td>
<td>
TC203C180AF-002, RA09-002 (XP6)
</td>
<td>
Integrated, 4 MBit RAM
</td>
<td>
2 * 64 Mbit = 16 MiB, expandable w/ SR-JV80 boards
</td>
<td>
HD6437016F28, SH7016 (SH2)
</td>
<td>
16
</td>
<td>
64
</td>
<td>
895i + 18r + 64p
</td>
<td>
Reverb, Chorus, EFX (40 types)
</td>
</tr>
<tr>
<td>
SD-80
</td>
<td>
2 * TC223C660CF-503, RA08-503 (XV)
</td>
<td>
Integrated, 2 * 16 Mbit RAM
</td>
<td>
2 * 128 Mbit = 32 MiB
</td>
<td>
HD6417706, SH7706 (SH3)
</td>
<td>
32
</td>
<td>
128
</td>
<td>
1050i + 30r
</td>
<td>
Reverb, Chorus, EQ, MFX (3 slots, 90 types)
</td>
</tr>
<tr>
<td>
SD-90
</td>
<td>
2 * TC223C660CF-503, RA08-503 (XV)
</td>
<td>
Integrated, 2 * 16 Mbit RAM; RA0B-B01 for AFX
</td>
<td>
2 * 128 Mbit = 32 MiB
</td>
<td>
HD6417709A, SH7709 (SH3)
</td>
<td>
32
</td>
<td>
128
</td>
<td>
1050i + 30r
</td>
<td>
Reverb, Chorus, EQ, MFX (3 slots, 90 types)
</td>
</tr>
<tr>
<td>
SD-20
</td>
<td>
TC203C180AF-003, RA0C-003 (XP7)
</td>
<td>
Integrated, 4 Mbit RAM
</td>
<td>
2 * 128 Mbit = 32 MiB
</td>
<td>
HD6437016E29FV, SH7016 (SH2)
</td>
<td>
32
</td>
<td>
64
</td>
<td>
660i + 23r
</td>
<td>
Reverb, Chorus, EQ
</td>
</tr>
<tr>
<td>
XV-5080
</td>
<td>
2 * TC223C660CF-503, RA08-503 (XV)
</td>
<td>
Integrated, 2 * 16 Mbit RAM
</td>
<td>
2 * 128 Mbit = 32 MiB (expandable w/ SRX & SR-JV80 boards and EDO
DRAM up to 128 MiB)
</td>
<td>
HD6437042A13F, SH7042 (SH2)
</td>
<td>
32
</td>
<td>
128
</td>
<td>
1152i + 23r + 64p
</td>
<td>
Reverb, Chorus, EQ, MFX (3 slots, 90 types)
</td>
</tr>
<tr>
<td>
XV-5050
</td>
<td>
TC223C660CF-503, RA08-503 (XV)
</td>
<td>
Integrated, 16 Mbit RAM
</td>
<td>
2 * 128 Mbit = 32 MiB (expandable w/ SRX boards)
</td>
<td>
HD6437016E22, SH7016 (SH2)
</td>
<td>
16
</td>
<td>
64
</td>
<td>
1280i + 25r + 64p
</td>
<td>
Reverb, Chorus, EQ, MFX (3 slots with restrictions <a id="n14" href="#note14" class="note">[14]</a>, 90 types)
</td>
</tr>
<tr>
<td>
XV-2020
</td>
<td>
TC203C180AF-003, RA0C-003 (XP7)
</td>
<td>
Integrated, 4 Mbit RAM
</td>
<td>
2 * 128 Mbit = 32 MiB (expandable w/ SRX boards)
</td>
<td>
HD6437016E, SH7016 (SH2)
</td>
<td>
16
</td>
<td>
64
</td>
<td>
768i + 17r + 64p
</td>
<td>
Reverb, Chorus, MFX (1 slot, 40 types)
</td>
</tr>
<tr>
<td>
Fantom S-88
</td>
<td>
TC223C660CF-503, RA08-503 (XV), 4 Mbit RAM
</td>
<td>
TC223C080AF-101, RA0A-101 (ESP4), 16 Mbit RAM
</td>
<td>
2 * 128 Mbit = 32 MiB (w/ 2 * 128 Mbit = 32 MiB sampling RAM, expandable
up to 288 MiB, plus SRX boards)
</td>
<td>
HD6417706, SH7706 (SH3)
</td>
<td>
16
</td>
<td>
64
</td>
<td>
904i + 41r + 64p
</td>
<td>
Reverb, Chorus, MFX (3 slots, 78 types), Mastering & Input Effects
</td>
</tr>
<tr>
<td>
Fantom XR/X6/X7/X8
</td>
<td>
T6TV2TBG-0002 (WX)
</td>
<td>
Integrated, 64 Mbit RAM
</td>
<td>
4 * 128 Mbit = 64 MiB (w/ 2 * 64 Mbit = 16 MiB sampling RAM, expandable
up to 528 MiB, plus SRX boards)
</td>
<td>
HD6417706, SH7706 (SH3)
</td>
<td>
16
</td>
<td>
128
</td>
<td>
1280i + 49r + 64p
</td>
<td>
Reverb, Chorus, MFX (3 slots, 78 types), Mastering & Input Effects
</td>
</tr>
<tr>
<td>
Fantom G6/G7/G8
</td>
<td>
T6TV2TBG-0002 (WX)
</td>
<td>
2 * T6TZ3AFG-0001 (WSP) w/ 64 Mbit RAM each + WX Integrated, 64 Mbit RAM
</td>
<td>
2 * 512 Mbit = 128 MiB (w/ 2 * 128Mbit = 32MiB sampling RAM, expandable
upto 544 MiB, plus ARX boards (external SSC synthesis))
</td>
<td>
SH7785 (SH4A)
</td>
<td>
16
</td>
<td>
128
</td>
<td>
1920i + 73r + 8p
</td>
<td>
Reverb, Chorus, PFX (16 slots, one per channel, 76 types), MFX (2 slots,
78 types), Mastering & Input Effects
</td>
</tr>
<tr>
<td>
INTEGRA-7
</td>
<td>
R8A02021ABG (SSC7, CPU w/ integrated DSP?) + MB8AA4181 (ESC2)
</td>
<td>
ESC2 256Mbit Effect RAM + SSC7 64Mbit Effect RAM
</td>
<td>
3 * 1Gbit = 384MiB (w/ 4 * 256Mbit = 128MiB DRAM)
</td>
<td>
R8A02021ABG (SSC7), SH4?
</td>
<td>
16
</td>
<td>
128
</td>
<td>
6030i + 258r + 64p
<!--64 "Studio Sets" (performances), SuperNATURAL (256 Ac, 1109 Sy, 26 Dr) + XV-5080 PCM (896i, 14d) + GM2 (256i, 9d) + ExSN1-6 (17i, 17i, 50i, 12i, 12i, 7d) + SRX01-12 (41i + 79d, 50i, 128i + 12d, 128i, 312i + 34d, 449i + 5d, 475i + 11d, 448i + 21d, 414i + 12d, 100i, 42i, 50i) + HQGM2 (256i, 9d) + HQPCM (512i, 19d)-->
</td>
<td>
Reverb, Chorus, MFX (16 slots, 67 types), EQ, compressor (drum part),
Surround, Mastering (EQ)
</td>
</tr>
</tbody></table>
</div>
<p>The following section summarizes generation-over-generation
improvements of the synth engine noticed by me reading the manuals.
There is a little bit of technical assessment of the chips, however most
of it is <strong>not</strong> based on analysis of the actual chip,
instead it’s based on analysis of the most capable synth model using
that chip. Some of the features might be added with newer version of
system software (such as the multisampling feature on XV-based synths
mentioned below) rather than improvements on the actual synth chip. It’s
in no way, shape or form complete. A lot of synthesizer keyboard models
are not listed. It could be way too technical for some readers. If
that’s the case, feel free to skip this section.</p>
<h3 id="tocanch17" class="tvis">LA</h3>
<p>Not strictly a PCM synth. Only uses PCM for the attack phase of the
sound. Already showing Roland’s base designs for later PCM synths: 4
“partials” (this term is from 80s Roland samplers, and was referred to
as either voices or tones in later products) for each patch. Each
partial has its “timbre”, which consists of a WG (“wave generator”),
5-stage envelope generators for filters and amplifiers (which in later
PCM synths were reduced to 4-stage), and a single LFO for mod wheel.
Filters are always low-pass. Poor panning resolution (15 steps instead
of GM’s 128). Rhythm patches reference to individual “timbres” on each
key. Usually paired with external reverb and chorus processing chips. Up
to 32 polyphony.</p>
<p>Used in MT-32, CM-64, CM-32L, D-110 (as MB87136A “LA32”, QFP), and
D-50 (as MB87136, PGA).</p>
<p>Due to the popularity of MT-32, which is supported by a whole bunch
of DOS games, emulation of this engine is pretty well-developed already
(see the aforementioned Munt project).</p>
<h3 id="tocanch18" class="tvis">(Unnamed synth engine in
U-110)</h3>
<p>An early (late-1980s) incarnation of Roland’s PCM only synth. No
filters at all. Amp env reduced to 3 stages (?). The synth structure
looks more closely related to that of LA rather than later Roland PCM
synths. 31 polyphony. The synth consists of two chips: MB87419 and
MB87420. The former seems to act as a controller, while the latter does
the actual sound generation. There’s an additional chip to handle output
selection. Also relies on external chips for effects.</p>
<p>Interestingly, MAME has a partial implementation of this synth engine
(src/devices/sound/rolandpcm.cpp).</p>
<p>Found in U-110, U-220, CM-32P and various R-8 variants.</p>
<h3 id="tocanch19" class="tvis">EP</h3>
<p>Early-1990s PCM synth. Has filters but requires an external TVF
chip.</p>
<p>The models using this engine seems to have roughly the same feature
set as GP-based models. However they lack a lot of controls for rhythm
patches. Some models come with a much more powerful effects engine
(which is external to the EP chip).</p>
<p>Used in HP-3700/2700 (as MB87731), and JD-800/990 (as MB87731A).</p>
<h3 id="tocanch20" class="tvis">GP</h3>
<p>Uses 4-stage envelope generators for filter and amplitude. Has two
filter modes (LPF and HPF). Individual tones can be delayed after the
note is triggered. Each tone has 2 independent LFOs. Has a rudimentary
modulation matrix (with fixed modulation sources). Reverb and chorus
effects are integrated in the chip. Most parameters now accepts values
from 0 to 127 (rather than 0 to 100 in LA-based units). Has FxM
(frequency modulation) capability. More parameters can be modulated by
key follow or velocity, which now also supports velocity curves and
sensitivity offsets. Up to 28 polyphony on GP4 (24 on the original
GP).</p>
<p>The original GP (TC24SC201AF-002) is used in JV-80 and SC-55.</p>
<p>A later variant “GP4” (TC6116AF) is used in JV-880, SC-55mkII and
MC-303. It contains an additional gate array as LCD controller and
handles extra IO.</p>
<h3 id="tocanch21" class="tvis">XP</h3>
<p>This iteration has a lot of variants.</p>
<h4 id="tocanch22" class="tvis">Original XP</h4>
<p>Two additional filter modes (BPF and PKG). Modulation matrix has
partially configurable modulation sources. Introduced random panning and
alternate panning. Key ranges of tones can be limited. Voice priority
(which note to steal when a new note is played if polyphony is maxed)
can be adjusted. Has integrated effects processor with 40 available
effect types. Up to 64 polyphony. This chip seems to have the facilities
for pairing two of them together, but none of the production rack units
make use of this feature as far as I know. 24-bit wave address bus for a
maximum of 16777216 words (=32 MiB) addressable wave ROM per chip.</p>
<p>Used in JV-1080 (as MBCS30109B), and SC-88 (as MBCS30109).</p>
<h4 id="tocanch23" class="tvis">XP2</h4>
<p>Seems to be a drop-in replacement of the original XP.</p>
<p>Used in production units of XP-80 (designed with the original XP) and
SC-88VL (both as MB87B105PF-G or RHR-2342).</p>
<h4 id="tocanch24" class="tvis">XP3</h4>
<p>Seems pin-compatible with the original XP.</p>
<p>Used in JV-2080, SC-88Pro, and JX-305 (as TC170C200AF-005 or
RA01-005).</p>
<h4 id="tocanch25" class="tvis">XP6</h4>
<p>Tones can have different samples on each stereo channel. Two extra
filter modes (LPF2 and LPF3). Fully configurable modulation matrix. 63
internal effect types. Up to 64 polyphony. Actual models with two of
these chips exist (XV-3080 and SC-8850).</p>
<p>Used in XV-3080, JV-1010, XV-88, SC-8850, SC-8820 and SC-D70 (as
TC203C180AF-002 or RA09-002). XV-88, XV-3080 and SC-8850 use a pair of
XP6.</p>
<h4 id="tocanch26" class="tvis">XP7</h4>
<p>Cut-down variant used in low cost models. Only the 40 “classical”
JV/XP effect types are present. All XP chips <em>before</em> XP7 work at
a 32 kHz output sampling rate (24.576 MHz clock input, 768 clock cycles
per output sample, or 12 clock cycles per voice). XP7 is also capable of
operating at 44.1 kHz with a 33.868 MHz clock input (found in the SD-20
and DR-880).</p>
<p>Used in XV-2020, SD-20, DR-880, and E-09 (as TC203C180AF-003 or
RA0C-003).</p>
<h3 id="tocanch27" class="tvis">XV</h3>
<p>Mostly the same as XP6, but with COSM effects (guitar/bass
amplifiers, speaker & microphone emulation) and two additional
effect slots. 90 internal effect types. 3 insertion effect slots (40 of
the 90 effect types takes all 3 slots if only one chip is used). Up to
64 polyphony. Has an additional memory controller for sample RAM,
enabling dynamic sampling. Can be paired to double the maximum polyphony
and improve effects DSP power. 25-bit wave address bus for a maximum of
33554432 words (=64 MiB) addressable wave ROM per chip (all XPs have a
24-bit wave address bus).</p>
<p>Used in XV-5080, XV-5050, SD-90, SD-80, Fantom, Fantom S/S88,
MV-8800, and MC-909 (as TC223C660CF-503 or RA08-503). XV-5080, SD-90 and
SD-80 use a pair of XV.</p>
<p>XV-5080 seems unique among these models as it has a (software) switch
between two master clocks for the XV chip that allows for switching
between 44.1 kHz and 48 kHz output. The XV engine in all other models
listed above outputs at 44.1 kHz. Twice efficient compared to the XP
series, the XV chip needs 6 clock cycles to process each voice, which
translate to a input clock of 16.9344 MHz (44.1 kHz output) or 18.432
MHz (48 kHz output).</p>
<p>Earlier models with sampling capability using this chip doesn’t have
proper external multisample support until Fantom S/S88, suggesting the
multisample support is added with system firmware rather modifications
to the synth engine.</p>
<h3 id="tocanch28" class="tvis">WX</h3>
<p>Capability wise, WX seems to be the equivalent of dual XV with the
external effects chip used in Fantom S/S88 (TC223C080AF-101, RA0A-101)
integrated. 78 internal effect types plus mastering + input effects.
Also added proper multisample support for external samples, which the
XV-5080 lacks. <a id="n15" href="#note15" class="note">[15]</a> Up to 128 polyphony. 25-bit
wave address bus for a maximum of 33554432 words (=64 MiB) addressable
wave ROM per chip. Wave RAM on general data bus instead of wave bus. WX
chip is only seen operating at a 44.1 kHz output, and uses a input clock
of 16.9344 MHz (3 clock cycles per voice).</p>
<p>Found in the Fantom-X series and Fantom-G series, as well as MC-808.
(SonicCell and SD-50 are also likely equipped with this chip, but I’m
not 100% sure.)</p>
<h3 id="tocanch29" class="tvis">Beyond WX</h3>
<p>From this point on the service manuals from Roland have become less
useful. They stopped listing the ICs in their parts list. However the
block diagram and schematics remain.</p>
<p>Roland introduced the so-called “SuperNATURAL” sounds with their
Fantom-G series, together with its new expansion board format (ARX).
These boards has a CPU built on it (the same SSC7 CPU used in
Integra-7). The CPU is connected to a set of RAM named “Effects RAM” in
Roland service manuals. Fantom-G by itself doesn’t appear to have any
“SuperNATURAL” sounds preloaded, and these new sounds clearly breaks
some of the limitations of the old synth engines. This leads to my
suspicion that the ARX boards have self-contained synth engines on
board, and the new “SuperNATURAL” engine is either software based, or
the SSC7 chip has some sort of extra bits that doesn’t belong to the CPU
(that is, an integrated ASIC DSP block). The SSC/SSC7 chip is seen on
all ARX boards, as well as the Integra-7.</p>
<p>Along with this new CPU thing, there are new effect processors/DSPs:
WSP and ESC2. WSP is found in a few relatively earlier (2009-ish)
models, while ESC2 is appears in almost all post 2010 Roland synths
(Integra-7, probably all Boutique models, and the latest Fantom-6/7/8
series). A single ESC2 chip is able to provide 16 individual effect
slots in the Integra-7. However sometimes two of these chips can be seen
in some of the Boutique units. It also has a JTAG interface, and handles
USB connectivity in the Integra-7, leading to the suspicion that it also
has a microcontroller built-in.</p>
<h2 id="tocanch30" class="tvis">Role played by the
CPU in sound generation</h2>
<p>When I started writing this post, my thoughts were the vast majority
of the synth functionality is contained in the synth chip. In other
words, the synth chip provides a very high level of abstraction, and the
CPU only needs to pass processed voice events to the synth chip. In
retrospect this is not plausible, due to the following facts:</p>
<ul>
<li>Models with the same chips sometimes have significant feature
disparity (Fantom-S with external multisamples which is not found on any
other XV-based models).</li>
<li>Only the CPU has direct access to the memory that stores patch
parameters.</li>
<li>There’s no reason for such a powererful CPU in some low-end
models.</li>
</ul>
<p>My current hypothesis is the CPU handles:</p>
<ul>
<li>control matrix mapping, preprocessing of some parameters (velocity
curves, for example)</li>
<li>voice (individual tone) allocation and parameter specification</li>
<li>effect and output routing configuration (actual routing happens in
the synth chip/DSP obviously)</li>
<li>certain LFOs (maybe? <a id="n16" href="#note16" class="note">[16]</a>). Envelopes (even less likely).</li>
</ul>
<p>This means the synth chip could contain basic blocks for various
subsystems (sample playback, modulation, effect processing, etc).
Routing among these blocks is controlled by the CPU. If you are somewhat
familiar with hardware accelerated rasterization in computer graphics,
you may find this architecture has resemblance to the old fixed function
graphics pipeline.</p>
<h2 id="tocanch31" class="tvis">Other Curious Stuff</h2>
<h3 id="tocanch32" class="tvis">SD-80 is an XV-5080 …</h3>
<p>… locked into performance mode and with samples cherry-picked by
Roland?</p>
<p>Indeed, the address mapping <a id="n17" href="#note17" class="note">[17]</a> for the SD-80 is almost
fully compatible with that of XV-5080. Even a lot of parameters that
make no sense for the SD-80 are preserved: SD-80 has a parameter to
select which wave expansion board to use, wave groups (which the SD-80
only has one), as well as parameters for “multi-partial” patches, which
on the XV-5080 is a way to put together patches that use samples loaded
into the RAM. Only the first one has its description changed to
“reserved” in the documentation. The SD-80 doesn’t have any wave
expansion board slots hidden inside, nor does it have support for
external sample loading.</p>
<p>Of course from the form factor side of things, the SD-80 looks more
like a cut-down version of XV-5050 which is a full 1U rack unit while
the SD-80 has a 3/4 rack design. However the SD-80 does retain XV-5080’s
128 polyphony and dual XV guts.</p>
<p>What is called “Performance” in XV-5080’s address map is called
“Multitimbre” in SD-80’s address map. They have the exact same content
inside (well, not really exact – SD-80 has quite a few extra parameters
in the “Multitimbre Common” section, mainly to expose some GM2
parameters and parameters that earlier SoundCanvases had in their
address maps). On the XV-5080, you can save the performance to one of
its 64 performance memory slots. Configuration of all 32 parts of the
synthesizer is restored from the save slot when a performance is loaded.
Just like the XV-5080, the SD-80 has a name assigned to its
“Multitimbre”, which is set to “Native Mode” upon entering its native
mode. But there are no memory slots for “multitimbres” in the SD-80, nor
is the name of multitimbre shown anywhere (either on the LCD screen, or
in the SD-80 Editor), rendering this name useless. This name is not
read-only. You can change it as you wish using system exclusive
messages, and is preserved until the next native mode reset message is
received.</p>
<p>Since the SD-80 is straight up the same when compared to the XV-5080
in terms of synthesizer engine, and also has extremely similar MIDI
implementation <a id="n18" href="#note18" class="note">[18]</a>, the SD-80 can be seen as a
XV-5080 with locked-down samples. What the StudioCanvas series does
improve over its SoundCanvas predecessors, is its editability in native
mode, which is brought on par with its professional counterparts and
allow the user take full control of the sound for the first time
<a id="n19" href="#note19" class="note">[19]</a>. This is a huge step forward from the
lame set of a few parameters offered by earlier GS models. However there
is also stuff found in earlier models that’s no longer available in the
StudioCanvas, which we are going to touch on in a moment.</p>
<h4 id="tocanch33" class="tvis">SD-80’s sound content</h4>
<p>Only a small chunk of SD-80’s content is brand new (at least to me) –
for example, the harpsichord <a id="n20" href="#note20" class="note">[20]</a>, the clarinet, a few saxes and stereo crash cymbals.
The rest are either from other Roland products, or modified from their
existing content.</p>
<ul>
<li>The sample “Trumpet Vib” used by the now infamous Romantic Tp
(thanks to ZUN) is from SR-JV80-18 Latin expansion board. The original
sample name is “Tp Vib MariA” (or B, or less likely C) <a id="n21" href="#note21" class="note">[21]</a> There are a lot more samples for various trumpet
techniques in SR-JV80-18, particularly designed for Mexican mariachi
music. These samples are also found in SRX-09 World Collection, which
contains all samples from SR-JV80-18.</li>
<li>Acoustic drum set from the solo set is a cut down version of the
studio kit from SRX-03 Studio, which is also the source of Super
Quartet’s drums.</li>
<li>Piano patches are pulled straight from SR-JV80-09, which is also
included in SRX-07. <del>SC-8850 has the same Piano sound.</del> No it
doesn’t. It uses the stereo piano samples from XV. Thanks for Arie on
Discord to point this out.</li>
<li>Clavi is almost identical to one of the many clavi patches from
SC-8820/8850, and is likely ultimately from the JVs and SR-JV80
boards.</li>
<li>Samples of Flute vib sound identical to those with the same name
(“Flute Vib3 A/B/C”) in SRX-03.</li>
<li>Samples of St.Brass and St.Sm Choir also come straight from
SRX-03.</li>
<li>Multiple sound effects are from earlier SC models. Some are also
used by XV-5080’s GM2 mode.</li>
<li>A lot of patches in the special sets are pulled from the XV-5080.
They use the exact same parameters, except the waveforms. If you can
find a preset with the same name as an instrument from SD-80’s special
set in the XV-5080, chances are they sound almost identical, especially
since a lot of them are analog/digital synth patches, and waveforms
don’t matter as much. There are a few exceptions – a preset with the
name “Cascade” is found in both instruments, but they have nothing in
common except the name. There are also a lot of XV-5080 “inspired”
patches: they have different names from the original XV-5080 patch, but
very similar sound design. In fact, the “Cascade” patch mentioned above
is one of these XV-5080 “inspired” patch, but you have to figure out the
original yourself as I forgot which one it is.</li>
<li>Rave Set, Rust Set and Bully Set are adapted versions of XV’s
RaveDrumSet, XV Rust Kit and XV Bully Kit respectively. The original XV
kits are not GM-compatible.</li>
<li>Multiple orchestral instruments from the contemporary set and solo
set use samples from SRX-06 (SR-JV80-02/16).</li>
<li>Bass and guitar are a mishmash from SR-JV80-09, SRX-03, SRX-07,
SRX-09 and XV-5080. Some of them are used in other Roland products.
(Fingered Bs2 vs SC-8850 Heart Bass, which is also almost identical to
Rock Bass in Super Quartet, and the sample is from SR-JV80-09).</li>
</ul>
<p>This list is far from complete. There has been extensive efforts to
map the multisamples in the SD-80 to XV-5080 and SRX multisamples. <a href="//filestorage.chrisoft.org/blog/data/SD-80/SD-80_Waveform_Comparison.pdf">Here</a>
is one made by Palto. These mappings are extremely useful if you wish to
recreate SD-80 patches with Roland’s VSTi plugins.</p>
<p>So the content of the SD-80 is actually a mixture of XV-5080, SRX
wave expansion boards, SR-JV80 boards, earlier SoundCanvas patches and
maybe a few new sounds. Reusing stuff isn’t surprising for Roland, nor
should it be considered “bad”. They’ve been known to do this <a href="https://www.soundonsound.com/reviews/roland-sc88">since the early
SC days</a>, where they used JV- and SR-JV80 expansion board sounds in
the old SC series. Evidently, the waveforms come with XV-5080 itself
include everything from the JV-2080/1080, which are in turn partially
from the JV-880, and eventually from the JD-800… I’ve also noted that
SuperQuartet has a substantial overlapping set of instruments with
SRX-03. All I want to say in this section is that if you want to get
some particular sounds from the Studio Canvas, instead of waiting for a
second-hand offering, maybe look somewhere else.</p>
<p>Since the content of SD-80 is mostly just cherrypicked XV/SRX
content, it really doesn’t need any additional praise from me. However I
think it’s worth pointing out that Roland’s samples of that era, just
like sounds from most other vendors, are heavily looped. They have loop
periods that are quite short (usually less than a second). They are also
usually heavily preprocessed. As the amount of memory used for
reproducing the instruments saw a huge boom in the 2000s, they no longer
sound downright “fake” or “plasticky” compared to romplers from a decade
ago. However when compared against huge modern sample libraries, most
instruments from these 2000s Roland romplers sound more “idealistic”
rather than “realistic”, just like your average Japanese anime girls
with unrealistically huge eyes. Not saying that such sound is bad,
though.</p>
<p>The GS sounds and XGLite sounds of the SD-80 are completely trash.
The GS sound set is pretty much just the SC-55 map in later SoundCanvas
models using SD-80 samples. The XGLite sound set however, is notably
larger than the average bottom-of-the-line Yamaha Portatones from the
early 2000s (the XGLite instrument listing in SD-80/90’s manual is
incomplete. Check my first SD-80 post for a complete list). There are
probably only 5 or so usable sounds offered in these modes in total
(most of which are in the XGLite sound set, which is kind of ironic for
a Roland sound module). It’s not worth it to switch modes just for those
sounds, especially since these modes don’t support low-level editing
like the native mode.</p>
<p>The SD-80 features 1050 instruments and 30 drum sets, which is a
significant decrease from the last generation SC-8850 (1640 instruments
and 63 drum sets). The loss of SC-8850’s ethnic and analog instruments
is a shame. But the quality of instruments does receive a general
uplift.</p>
<h3 id="tocanch34" class="tvis">More on SD-80 vs SD-90 vs
SD-20</h3>
<h4 id="tocanch35" class="tvis">What does a SD-90 have
that SD-80 doesn’t?</h4>
<p>Easy. The audio interface (together with post-processing effects) and
the large screen.</p>
<p>It is a shame that Roland didn’t implement full XV-level editability
of patches on such a large screen though.</p>
<p>SD-80 is also not capable of switching the output sample rate on its
digital audio outputs.</p>
<h4 id="tocanch36" class="tvis">What does a SD-80 have
that SD-90 doesn’t?</h4>
<p>This may come as a shocker, because the list is surprisingly
long.</p>
<ul>
<li>User instruments and user rhythm sets. <a id="n22" href="#note22" class="note">[22]</a></li>
<li>A few weird switches controlling its global state (MFX on/off,
reverb/chorus switch). They are weird because they are not affected by
the native mode reset message. These switches are also featured in the
SD-80 editor, which Roland says don’t do anything if used with an SD-90.
They are also present in the professional XV line-up.</li>
<li>Multiple outputs from the synthesizer. The SD-90 does have a
secondary output, but the internal synthesizer can only use one of them.
The SD-80 has two stereo outputs, which can also be used as four mono
outputs. This also allows the SD-80 to have…</li>
<li>Ability to output synthesizer effects to a separate bus. You can
specify the output for the internal reverb, chorus and multi-effects as
well.</li>
</ul>
<h4 id="tocanch37" class="tvis">What’s the SD-20 anyway?</h4>
<p>Turns out it’s not much.</p>
<p><a href="https://chrisoft.org/blog/post/2021-10-10.html">There’s
going to be a separate article on this.</a></p>
<h4 id="tocanch38" class="tvis">What role does MFX play?</h4>
<p>It depends. If the MFX is just some reverb, EQ, or chorus, it really
doesn’t make a whole world of difference and can be easily replaced with
basic external effects. If its an amplifier simulator, a pitch shifter,
or an auto filter, disabling MFX will result in a drastic sound change.
Plugins simulating these effects are also usually harder to come by /
more expensive. A few demonstrations of patches with and without MFX are
in the table below.</p>
<div>
<table style="position:relative;left:50%;transform:translate(-50%,0);text-align:center">
<tbody><tr>
<th>
Patch
</th>
<th>
MFX Type
</th>
<th>
Audio demo (with MFX, then without MFX)
</th>
</tr>
<tr>
<td>
3D Crystal
</td>
<td>
Modulation Delay
</td>
<td>
<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-80/3D_Crystal.ogg">
</audio>
</td>
</tr>
<tr>
<td>
96 Year
</td>
<td>
Rotary
</td>
<td>
<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-80/96_Year.ogg">
</audio>
</td>
</tr>
<tr>
<td>
Celtic Ens
</td>
<td>
Reverb
</td>
<td>
<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-80/Celtic_Ens.ogg">
</audio>
</td>
</tr>
<tr>
<td>
MonoDLY Dist
</td>
<td>
Guitar Multi A
</td>
<td>
<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-80/MonoDLY_Dist.ogg">
</audio>
</td>
</tr>
<tr>
<td>
Oxigenizer
</td>
<td>
Keysync Flanger
</td>
<td>
<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-80/Oxigenizer.ogg">
</audio>
</td>
</tr>
<tr>
<td>
Quasar
</td>
<td>
Ring Modulator
</td>
<td>
<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-80/Quasar.ogg">
</audio>
</td>
</tr>
<tr>
<td>
Reed Romance
</td>
<td>
Enhancer
</td>
<td>
<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-80/Reed_Romance.ogg">
</audio>
</td>
</tr>
<tr>
<td>
Wah Ana.Clav
</td>
<td>
Stereo Auto Wah
</td>
<td>
<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-80/Wah_Ana.Clav.ogg">
</audio>
</td>
</tr>
</tbody></table>
</div>
<h3 id="tocanch39" class="tvis"><code>Light Load</code> vs
<code>High Load</code></h3>
<p>There is a toggle for “Light Load” mode in the driver for SD-80 on
all platforms, including Linux. What this option actually does is not
documented. The only thing I know is that in the Linux driver this is
implemented with a single <code>usb_set_interface</code> call.</p>
<p>This setting doesn’t seem to affect the synth engine, only the way
how midi data is transmitted / processed (because the drivers for UA-25
has this option as well). Weirdly, Roland’s contemporary software
synthesizers (HyperCanvas/TTS-1, SuperQuartet, Orchestral) also have
this option.</p>
<h3 id="tocanch40" class="tvis">Block Diagram</h3>
<p>I made <a href="//filestorage.chrisoft.org/blog/data/SD-80/sd80blk_notext_o.svg">this
vectorized version</a> of SD-80’s block diagram printed on its chassis
when I was bored. You can also get a <a href="//filestorage.chrisoft.org/blog/data/SD-80/sd80blk_notext_o_nt.png">rasterized
version</a>.</p>
<h3 id="tocanch41" class="tvis">Other weird and interesting
stuff</h3>
<ul>
<li>Very few (if any) preset patches uses the modulation matrix of the
XV engine correctly. All of them has the modulation source set to
‘OFF’.</li>
<li>Only 5 of all preset patches used non-default tone structures:
“Runaway Rez”, “Purple Spin”, “FM layer”, “FM Delight”, and “Xmod EP”.
All of them are in the special sets. 3 of them are unmodified XV-5080
patches.</li>
<li>There doesn’t seem to be a way to set the system tempo of the
SD-80/90 with MIDI messages, nor can the SD-80/90 sync its MIDI clock
with a host, rendering the system clock mostly useless. Neither of these
two is true for the XV-5080.</li>
<li>Ever wondered why some patches have seemingly nonsensical waveforms
selected in disabled tones <a id="n23" href="#note23" class="note">[23]</a>? Just look up those wave
numbers in the waveform list of XV-5080 or the corresponding SRX board!
<a id="n24" href="#note24" class="note">[24]</a> This, once again, suggests
Roland used the XV-5080 as the development platform for the
StudioCanvas.</li>
<li>From Sound On Sound’s review of the SD-90: “To me, however, USB
audio and the Sound Canvas sound set don’t add up to £799, and although
I grew to like the SD90, I’m not sure how many people will find it
attractive at this price point.” – ZUN, apparently.</li>
</ul>
<h2 id="tocanch42" class="tvis">Errata of the original post</h2>
<ul>
<li>The non-zero “modulation level” (which is actually “modulation
depth”) on the SD-80 isn’t the value of the modulation wheel itself, but
rather how deep a modulation wheel pushed all the way to the top will
modulate the sound. SD-90 also has a default value of 10 for it (“Mod
LFO Pitch Depth” in the address mapping). There’s no GM incompatibility
here.</li>
<li>Instruments sampled with vibrato are not from the XV-5080, they are
from the SRX / SR-JV80 boards. Duh.</li>
<li>XP6 <em>was</em> used in professional products. In fact, a handful
of them (XV-3080, XV-88, JV-1010 and possibly more).</li>
<li>Roland still makes romplers today. It’s a model from a decade ago.
You’ll have to guess which model it is.</li>
</ul>
<h2 id="tocanch43" class="tvis">References</h2>
<ul>
<li><a href="https://www.dtech.lv/techarticles_roland_exp.html">Roland
Wave Expansion Cards by Edward D-tech</a></li>
<li><a href="http://www.donsolaris.com/?p=404">Don Solaris’ ultimate
Roland JV/JD/XV FAQ</a></li>
<li><a href="https://www.sweetwater.com/insync/cosm/">What is
COSM?</a></li>
<li><a href="https://www.soundonsound.com/reviews/roland-xv5080">SOS
Review of XV-5080</a></li>
<li><a href="https://www.soundonsound.com/reviews/edirol-sd90">SOS
Review of SD-90</a></li>
<li><a href="https://www.soundonsound.com/reviews/edirol-sd80">SOS
Review of SD-80</a></li>
<li><a href="https://www.soundonsound.com/reviews/roland-sc88">SOS
Review of SC-88</a></li>
</ul>
</article>
</div><br><hr>
<div class="TText" id="notediv" style="font-size:80%;"><span class="TText"><a id="note1" href="#n1">[1]</a>: Judging by the way Roland
utilized the SH-3 CPU in MC-909, which has a 16MHz external clock input
and a 8x multiplier (128MHz internal clock), I would guess the CPU in
SD-80 also works at 8x multiplier and therefore 96MHz
internally.<br></span><span class="TText"><a id="note2" href="#n2">[2]</a>: Later the source of this DC bias is determined to
be SD-80 itself, not the recording device. See the next
section.<br></span><span class="TText"><a id="note3" href="#n3">[3]</a>: オールインワン・モデルSD-90でご好評いただいた、新開発MIDI音源部を搭載したマルチティンバー音源が登場。
As seen <a href="https://web.archive.org/web/20020604015208/http://www.roland.co.jp/products/dtm/SD-80.html">here</a>.
I don’t actually know any Japanese and just pieced stuff together
randomly. Sorry if I butchered your language.<br></span><span class="TText"><a id="note4" href="#n4">[4]</a>: Munt isn’t strictly an emulation. It doesn’t emulate the CPU
or actual circuitry of the MT-32. See below.<br></span><span class="TText"><a id="note5" href="#n5">[5]</a>: without Roland losing their mind and releasing all
internal documentation on the XV engine, or some absolute madlad
spending 15 hours everyday on reverse engineering the thing for half a
year, that is.<br></span><span class="TText"><a id="note6" href="#n6">[6]</a>: SD-80 has 32MiB of compressed wave ROM, see the “list of
integrated circuit chips on SD-80 main board” in the first section.
Roland’s waveform compression scheme usually results in a ~50%
compression ratio. Therefore the content is roughly equal to 64 MiB of
uncompressed 16-bit PCM wave.<br></span><span class="TText"><a id="note7" href="#n7">[7]</a>: The “23C128” kind of gave it away –
they are the <code>μPD23C128040ALGY</code> mask ROM chips from NEC,
which is the exact same type of ROM used in XV-5080. Unlike the XV-5080
though, the SD-80 makes use of both its J variant and K variant, while
the XV-5080 only uses the J variant (these variants have symmetric pin
configuration). <br></span><span class="TText"><a id="note8" href="#n8">[8]</a>: Well, the
Raspberry Pi isn’t really suitable for this task because it doesn’t have
enough GPIO pins. But there’s an easy workaround for that.<br></span><span class="TText"><a id="note9" href="#n9">[9]</a>: For readers who wonders what “mask” means in
this context: you can treat a mask ROM as a huge array of tiny switches
that can’t be turned on or off once manufactured. You can access the
state of a group of switches by giving an address to its input pins. The
mask is used as a template of the states of these switches during the
manufacture process. This is electrical engineering amateur Chris trying
to explain mask ROM in layman’s terms.<br></span><span class="TText"><a id="note10" href="#n10">[10]</a>: HyperCanvas (HQ-GM2) or Cakewalk TTS-1, which is a rebranding
of the former; SuperQuartet (HQ-QT) and Orchestral (HQ-OR). A plugin
called GrooveSynth (P5antom) bundled with several earlier Cakewalk
products providing patches from the MC-303 Groovebox also uses this
engine.<br></span><span class="TText"><a id="note11" href="#n11">[11]</a>: which is kind of weird considering
Spectrasonics basically spun off from Roland<br></span><span class="TText"><a id="note12" href="#n12">[12]</a>: Also used in XP-80, see the errata
section of its service manual.<br></span><span class="TText"><a id="note13" href="#n13">[13]</a>: HD64F7017F28, SH7017 in parts
list<br></span><span class="TText"><a id="note14" href="#n14">[14]</a>: 40 of the
90 types will take up all three slots, most likely due to the reduced
DSP power.<br></span><span class="TText"><a id="note15" href="#n15">[15]</a>: Support for multisamples also exist in Fantom
S/S88, so this is more likely due to an updated system software rather
than changes of the synth engine.<br></span><span class="TText"><a id="note16" href="#n16">[16]</a>: There is evidence that some of them
are handled by software (SD-80 having one more LFO per part than the
XV-5080). However it can also be using LFO blocks in the XV chip that is
unused in the XV-5080.<br></span><span class="TText"><a id="note17" href="#n17">[17]</a>: This mapping is used for
DT1/RQ1 system exclusive messages.<br></span><span class="TText"><a id="note18" href="#n18">[18]</a>: The first half is also true for earlier SC
models (SC-55 <-> JV-880, SC-88 <-> JV-1080, SC-88Pro
<-> JV-2080, SC-8850 <-> XV-3080). However the second half
isn’t. Earlier SC models employs a GS-specific address map which looks
nothing like their counterparts.<br></span><span class="TText"><a id="note19" href="#n19">[19]</a>: And also the last time, since neither the SD-20 nor the SD-50
has such editability.<br></span><span class="TText"><a id="note20" href="#n20">[20]</a>: Apparently it’s from the
SC-8850.<br></span><span class="TText"><a id="note21" href="#n21">[21]</a>: The
multisample from Roland Cloud seem to have an extra sample in the
highest register, which sounds like it’s processed with a low-pass
filter with very low cut off frequency and makes it sound like garbage.
This is also the case for the version included in the original SRX-09
boards.<br></span><span class="TText"><a id="note22" href="#n22">[22]</a>: The owner’s manual
of the SD-80 contains blatant lies. It says “It is not possible for the
edited sounds to be saved in the internal memory of the SD-80” (which is
directly copied from SD-90’s manual), and goes on to teach you how to
save a user patch.<br></span><span class="TText"><a id="note23" href="#n23">[23]</a>: For example, nearly all acoustic
bass patches have a disabled tone with wave number 249 “TenBlwSaxVib”
selected, and the Fiddle 2 vib patch have a disabled tone with wave
number 276 “Blow Pipe” selected.<br></span><span class="TText"><a id="note24" href="#n24">[24]</a>: Wave #249 in XV-5080 is UprightBs 2A, and Wave #276 in SRX-09
is Fdl Pizz 1C (Fiddle Pizzicato).<br></span></div>
<div id="insanch" style="height:3em;"></div>
<div id="footer" style="">
<div id="pagesw" class="TText" style="width:100%;height:0.5em;"></div>
<div style="text-align:center;" class="TText">
Proudly powered by SSBS <reduced style="font-size:70%;">(the static stupid blogging system)</reduced> 2.5
<br>
Content licensed under CC BY-SA 4.0. <span id="purgep" style="display:none;font-size:70%;">This page has passphrase(s) stored. Click <a href="javascript:_purgep()">here</a> to purge.</span>
</div>
</div>
<div id="cmdbuf" class="TText" style="transition:500ms;padding:1em;font-size:2em;color:white;position:absolute;background-color:rgba(0,0,0,0.6);left:50%;top:50%;transform:translate(-50%,-50%);pointer-events:none;opacity:0;">
</div>
</div>
<div id="decryptui" style="display:none;opacity:0;color:white;z-index:1000;position:fixed;left:0;top:0;width:100%;height:100%;background-color:rgba(0,0,0,0.4);transition:opacity 0.5s;">
<div id="decryptdlg" class="TText" style="padding:10px 20px;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);background-color:rgba(0,0,0,0.6);">
<div id="keyhint" style="margin-bottom:8px;"></div>
<div style="margin-bottom:8px;">Key: <input id="keyinp" type="text" style="color:#fff;"></div>
<div style="height:2.25em;">
<button id="btndecrypt" onclick="decryptor(decid,document.getElementById('keyinp').value);" style="position:absolute;left:20px;">Decrypt</button>
<button onclick="hidedecryptui();" style="position:absolute;right:20px;">Cancel</button>
</div>
</div>
</div></body></html>
|