summaryrefslogtreecommitdiff
path: root/blog
diff options
context:
space:
mode:
authorGravatar Chris Xiong <chirs241097@gmail.com> 2022-07-02 00:44:46 +0800
committerGravatar Chris Xiong <chirs241097@gmail.com> 2022-07-02 00:44:46 +0800
commit713ab4ab167d56e61512e179a7a55b4e64bf7c26 (patch)
tree995ee1900ad1321b24c09db695a0ea887ffdb60b /blog
parent888af35264cc7515137e0e0c489f01014ba73de9 (diff)
downloadweb-713ab4ab167d56e61512e179a7a55b4e64bf7c26.tar.xz
make the SD-20 post public.
Diffstat (limited to 'blog')
-rw-r--r--blog/list/0.html14
-rw-r--r--blog/list/1.html12
-rw-r--r--blog/list/2.html12
-rw-r--r--blog/list/3.html12
-rw-r--r--blog/list/4.html12
-rw-r--r--blog/list/5.html12
-rw-r--r--blog/list/6.html12
-rw-r--r--blog/list/7.html12
-rw-r--r--blog/list/8.html12
-rw-r--r--blog/list/9.html7
-rw-r--r--blog/list/daily-life/0.html40
-rw-r--r--blog/list/daily-life/1.html38
-rw-r--r--blog/list/device-review/0.html14
-rw-r--r--blog/list/device-review/1.html7
-rw-r--r--blog/list/garbage/0.html24
-rw-r--r--blog/list/garbage/1.html26
-rw-r--r--blog/list/garbage/2.html24
-rw-r--r--blog/list/garbage/3.html21
-rw-r--r--blog/list/hands-on/0.html2
-rw-r--r--blog/list/midi/0.html9
-rw-r--r--blog/list/music/0.html9
-rw-r--r--blog/post/2019-04-25.html3
-rw-r--r--blog/post/2020-11-20.html15
-rw-r--r--blog/post/2021-10-10.html738
24 files changed, 896 insertions, 191 deletions
diff --git a/blog/list/0.html b/blog/list/0.html
index 96f1a54..5b56be8 100644
--- a/blog/list/0.html
+++ b/blog/list/0.html
@@ -1,4 +1,4 @@
-<html><head>
+<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
@@ -57,6 +57,11 @@ function ol()
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#special-page</span>
<span class="right" id="">2019-09-03/2019-09-03</span></div>
</div><div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2021-10-10.html">EDIROL SD-20: the Crumbling of the Canvas?</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#device-review #midi #music</span>
+ <span class="right" id="">2021-10-10/2022-07-01</span></div>
+ </div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2021-06-03.html">No, I'm not dead</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage</span>
@@ -65,12 +70,7 @@ function ol()
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2020-11-20.html">EDIROL SD-80: The Adventure Continues</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#device-review #midi #music</span>
- <span class="right" id="">2020-11-20/2022-06-30</span></div>
- </div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2019-09-04.html">September 2019 Site Update</a></h3>
- <br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#web</span>
- <span class="right" id="">2019-09-04/2019-11-12</span></div>
+ <span class="right" id="">2020-11-20/2022-07-01</span></div>
</div></div>
<div id="insanch" style="height:5em;"></div>
<div id="footer">
diff --git a/blog/list/1.html b/blog/list/1.html
index 161d3ae..84e13c9 100644
--- a/blog/list/1.html
+++ b/blog/list/1.html
@@ -1,4 +1,4 @@
-<html><head>
+<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
@@ -47,6 +47,11 @@ function ol()
<div id="postslist">
<div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2019-09-04.html">September 2019 Site Update</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#web</span>
+ <span class="right" id="">2019-09-04/2019-11-12</span></div>
+ </div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2019-04-25.html">EDIROL SD-80: A Trapped Beast</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#device-review #midi #music #hands-on</span>
@@ -66,11 +71,6 @@ function ol()
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#web #devel #js</span>
<span class="right" id="">2018-10-11/2018-10-11</span></div>
- </div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-06-07.html">Should this site still be alive by 2035...</a></h3>
- <br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#sophistry #garbage</span>
- <span class="right" id="">2018-06-07/2018-10-11</span></div>
</div></div>
<div id="insanch" style="height:5em;"></div>
<div id="footer">
diff --git a/blog/list/2.html b/blog/list/2.html
index 05ab497..98ad464 100644
--- a/blog/list/2.html
+++ b/blog/list/2.html
@@ -1,4 +1,4 @@
-<html><head>
+<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
@@ -47,6 +47,11 @@ function ol()
<div id="postslist">
<div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-06-07.html">Should this site still be alive by 2035...</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#sophistry #garbage</span>
+ <span class="right" id="">2018-06-07/2018-10-11</span></div>
+ </div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-06-05.html">Software Project Management in the Free Software World</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#sophistry</span>
@@ -66,11 +71,6 @@ function ol()
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage #interactive</span>
<span class="right" id="">2018-05-03/2019-02-09</span></div>
- </div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-04-22.html">ICPC类比赛中计算几何问题之「乱象」</a></h3>
- <br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage #acmicpc</span>
- <span class="right" id="">2018-04-22/2018-10-11</span></div>
</div></div>
<div id="insanch" style="height:5em;"></div>
<div id="footer">
diff --git a/blog/list/3.html b/blog/list/3.html
index d07396e..e3df347 100644
--- a/blog/list/3.html
+++ b/blog/list/3.html
@@ -1,4 +1,4 @@
-<html><head>
+<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
@@ -47,6 +47,11 @@ function ol()
<div id="postslist">
<div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-04-22.html">ICPC类比赛中计算几何问题之「乱象」</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage #acmicpc</span>
+ <span class="right" id="">2018-04-22/2018-10-11</span></div>
+ </div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-04-17.html">The "Deepin is spyware" problem</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#linux #garbage #sophistry</span>
@@ -66,11 +71,6 @@ function ol()
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage #daily-life</span>
<span class="right" id="">2018-01-07/2018-10-30</span></div>
- </div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-01-05.html">Now using reverse proxy to deliver content</a></h3>
- <br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#web #random-xp</span>
- <span class="right" id="">2018-01-05/2018-10-11</span></div>
</div></div>
<div id="insanch" style="height:5em;"></div>
<div id="footer">
diff --git a/blog/list/4.html b/blog/list/4.html
index 1bb9009..5b5f7e9 100644
--- a/blog/list/4.html
+++ b/blog/list/4.html
@@ -1,4 +1,4 @@
-<html><head>
+<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
@@ -47,6 +47,11 @@ function ol()
<div id="postslist">
<div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-01-05.html">Now using reverse proxy to deliver content</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#web #random-xp</span>
+ <span class="right" id="">2018-01-05/2018-10-11</span></div>
+ </div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2017-12-21.html">为什么我<i>就是不</i>使用Mac</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage #device-review</span>
@@ -66,11 +71,6 @@ function ol()
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#daily-life</span>
<span class="right" id="">2017-06-08/2018-10-11</span></div>
- </div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2017-05-08.html">2017省赛流水帐</a></h3>
- <br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#contest #acmicpc</span>
- <span class="right" id="">2017-05-08/2019-02-12</span></div>
</div></div>
<div id="insanch" style="height:5em;"></div>
<div id="footer">
diff --git a/blog/list/5.html b/blog/list/5.html
index d8843c3..1e3132a 100644
--- a/blog/list/5.html
+++ b/blog/list/5.html
@@ -1,4 +1,4 @@
-<html><head>
+<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
@@ -47,6 +47,11 @@ function ol()
<div id="postslist">
<div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2017-05-08.html">2017省赛流水帐</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#contest #acmicpc</span>
+ <span class="right" id="">2017-05-08/2019-02-12</span></div>
+ </div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2017-04-11.html">SBS 2.0 is now the default blog browser</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#devel #web</span>
@@ -66,11 +71,6 @@ function ol()
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#computer-repairing #garbage</span>
<span class="right" id="">2017-01-09/2019-02-12</span></div>
- </div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2016-09-24.html">2-in-1</a></h3>
- <br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#devel #qmidiplayer #c++ #qt</span>
- <span class="right" id="">2016-09-24/2018-10-11</span></div>
</div></div>
<div id="insanch" style="height:5em;"></div>
<div id="footer">
diff --git a/blog/list/6.html b/blog/list/6.html
index 147fa48..07c26b4 100644
--- a/blog/list/6.html
+++ b/blog/list/6.html
@@ -1,4 +1,4 @@
-<html><head>
+<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
@@ -47,6 +47,11 @@ function ol()
<div id="postslist">
<div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2016-09-24.html">2-in-1</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#devel #qmidiplayer #c++ #qt</span>
+ <span class="right" id="">2016-09-24/2018-10-11</span></div>
+ </div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2016-06-21.html">Trash dump for the first academic year</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage #daily-life</span>
@@ -66,11 +71,6 @@ function ol()
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#contest #acmicpc</span>
<span class="right" id="">2016-03-26/2018-10-11</span></div>
- </div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2016-02-18.html">Cross Noodles Recooked</a></h3>
- <br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#devel #js #webgl</span>
- <span class="right" id="">2016-02-18/2018-10-11</span></div>
</div></div>
<div id="insanch" style="height:5em;"></div>
<div id="footer">
diff --git a/blog/list/7.html b/blog/list/7.html
index 380f817..5e12389 100644
--- a/blog/list/7.html
+++ b/blog/list/7.html
@@ -1,4 +1,4 @@
-<html><head>
+<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
@@ -47,6 +47,11 @@ function ol()
<div id="postslist">
<div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2016-02-18.html">Cross Noodles Recooked</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#devel #js #webgl</span>
+ <span class="right" id="">2016-02-18/2018-10-11</span></div>
+ </div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2016-02-14.html">Why Do I Prefer a Computer over a Girlfriend/<s>(Boyfriend)</s></a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#sophistry</span>
@@ -66,11 +71,6 @@ function ol()
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#devel #design</span>
<span class="right" id="">2016-01-03/2018-10-11</span></div>
- </div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2015-12-27.html">QMidiPlayer got its repo</a></h3>
- <br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#devel #qmidiplayer</span>
- <span class="right" id="">2015-12-27/2018-10-11</span></div>
</div></div>
<div id="insanch" style="height:5em;"></div>
<div id="footer">
diff --git a/blog/list/8.html b/blog/list/8.html
index d64655e..0344775 100644
--- a/blog/list/8.html
+++ b/blog/list/8.html
@@ -1,4 +1,4 @@
-<html><head>
+<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
@@ -47,6 +47,11 @@ function ol()
<div id="postslist">
<div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2015-12-27.html">QMidiPlayer got its repo</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#devel #qmidiplayer</span>
+ <span class="right" id="">2015-12-27/2018-10-11</span></div>
+ </div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2015-12-23.html">Chris' First Development Blog</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#devel</span>
@@ -66,11 +71,6 @@ function ol()
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#random-xp</span>
<span class="right" id="">2015-11-01/2015-11-22</span></div>
- </div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2015-10-31.html">大学入学两个月了……</a></h3>
- <br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage</span>
- <span class="right" id="">2015-10-31/2018-10-11</span></div>
</div></div>
<div id="insanch" style="height:5em;"></div>
<div id="footer">
diff --git a/blog/list/9.html b/blog/list/9.html
index 4f0ec5f..e20913e 100644
--- a/blog/list/9.html
+++ b/blog/list/9.html
@@ -1,4 +1,4 @@
-<html><head>
+<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
@@ -47,6 +47,11 @@ function ol()
<div id="postslist">
<div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2015-10-31.html">大学入学两个月了……</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage</span>
+ <span class="right" id="">2015-10-31/2018-10-11</span></div>
+ </div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2015-10-30.html">First CCPC sightseeing tour</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#contest</span>
diff --git a/blog/list/daily-life/0.html b/blog/list/daily-life/0.html
index 3701e9c..46d9e60 100644
--- a/blog/list/daily-life/0.html
+++ b/blog/list/daily-life/0.html
@@ -4,6 +4,7 @@
<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>
<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">
@@ -25,41 +26,8 @@ function ol()
else unsetevents();
}
window.onresize();
+ loadTheme();
}
-function loadTheme(){
- var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1");
- if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz';
- var ent="";
- var d=new Date();
- if(thm[0]=='z')
- {
- var m=d.getMonth()+1;
- if(m>=3&&m<6)thm='0'+thm[1];
- else if(m>=6&&m<9)thm='1'+thm[1];
- else if(m>=9&&m<12)thm='2'+thm[1];
- else thm='3'+thm[1];
- }
- if(thm[1]=='z')
- {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';}
- ent=`theme${thm}`;
- var R=new RegExp('theme[0-4][ab]');
- for(var i=0;i<document.styleSheets.length;++i)
- {
- if(R.exec(document.styleSheets[i].ownerNode.id)!==null&&document.styleSheets[i].ownerNode.id!=ent)
- document.styleSheets[i].disabled=true;
- else document.styleSheets[i].disabled=false;
- }
- var thmcolor="";
- switch(thm[0])
- {
- case '0':thmcolor=thm[1]=='a'?'#f59dda':'#2f0933';break;
- case '1':thmcolor=thm[1]=='a'?'#9df59d':'#090933';break;
- case '2':thmcolor=thm[1]=='a'?'#edb47b':'#1f1205';break;
- case '3':thmcolor=thm[1]=='a'?'#a0cdfa':'#051933';break;
- }
- document.querySelector("meta[name=theme-color]").setAttribute('content',thmcolor);
-}
-loadTheme();
</script>
</head>
<body onload="ol()" style="overflow-x:hidden;">
@@ -71,7 +39,7 @@ loadTheme();
<ul id="tagslist">
- <li id=""><a href="/blog/list/acmicpc">acmicpc</a></li><li id=""><a href="/blog/list/c++">c++</a></li><li id=""><a href="/blog/list/computer-repairing">computer-repairing</a></li><li id=""><a href="/blog/list/contest">contest</a></li><li id=""><a class="active" href="/blog/list/daily-life">daily-life</a></li><li id=""><a href="/blog/list/design">design</a></li><li id=""><a href="/blog/list/devel">devel</a></li><li id=""><a href="/blog/list/device-review">device-review</a></li><li id=""><a href="/blog/list/garbage">garbage</a></li><li id=""><a href="/blog/list/hands-on">hands-on</a></li><li id=""><a href="/blog/list/interactive">interactive</a></li><li id=""><a href="/blog/list/js">js</a></li><li id=""><a href="/blog/list/linux">linux</a></li><li id=""><a href="/blog/list/midi">midi</a></li><li id=""><a href="/blog/list/music">music</a></li><li id=""><a href="/blog/list/opengl">opengl</a></li><li id=""><a href="/blog/list/qmidiplayer">qmidiplayer</a></li><li id=""><a href="/blog/list/qt">qt</a></li><li id=""><a href="/blog/list/random-xp">random-xp</a></li><li id=""><a href="/blog/list/sophistry">sophistry</a></li><li id=""><a href="/blog/list/special-page">special-page</a></li><li id=""><a href="/blog/list/toxic-stuff">toxic-stuff</a></li><li id=""><a href="/blog/list/web">web</a></li><li id=""><a href="/blog/list/webgl">webgl</a></li></ul>
+ <li id=""><a href="/blog/list/acmicpc">acmicpc</a></li><li id=""><a href="/blog/list/c++">c++</a></li><li id=""><a href="/blog/list/computer-repairing">computer-repairing</a></li><li id=""><a href="/blog/list/contest">contest</a></li><li id=""><a class="active" href="/blog/list/daily-life">daily-life</a></li><li id=""><a href="/blog/list/design">design</a></li><li id=""><a href="/blog/list/devel">devel</a></li><li id=""><a href="/blog/list/device-review">device-review</a></li><li id=""><a href="/blog/list/garbage">garbage</a></li><li id=""><a href="/blog/list/hands-on">hands-on</a></li><li id=""><a href="/blog/list/interactive">interactive</a></li><li id=""><a href="/blog/list/js">js</a></li><li id=""><a href="/blog/list/linux">linux</a></li><li id=""><a href="/blog/list/midi">midi</a></li><li id=""><a href="/blog/list/music">music</a></li><li id=""><a href="/blog/list/opengl">opengl</a></li><li id=""><a href="/blog/list/qmidiplayer">qmidiplayer</a></li><li id=""><a href="/blog/list/qt">qt</a></li><li id=""><a href="/blog/list/random-xp">random-xp</a></li><li id=""><a href="/blog/list/sophistry">sophistry</a></li><li id=""><a href="/blog/list/special-page">special-page</a></li><li id=""><a href="/blog/list/web">web</a></li><li id=""><a href="/blog/list/webgl">webgl</a></li></ul>
</li>
</ul>
</div>
@@ -87,7 +55,7 @@ loadTheme();
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2017-06-29.html">Trash dump for the fourth semester</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage #daily-life</span>
- <span class="right" id="">2017-06-29/2018-10-11</span></div>
+ <span class="right" id="">2017-06-29/2021-06-26</span></div>
</div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2017-06-09.html">Fuck Windows et cetera</a></h3>
<br>
diff --git a/blog/list/daily-life/1.html b/blog/list/daily-life/1.html
index 3e81752..06f82be 100644
--- a/blog/list/daily-life/1.html
+++ b/blog/list/daily-life/1.html
@@ -4,6 +4,7 @@
<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>
<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">
@@ -25,41 +26,8 @@ function ol()
else unsetevents();
}
window.onresize();
+ loadTheme();
}
-function loadTheme(){
- var thm=document.cookie.replace(new RegExp("(?:(?:^|.*;\\s*)thm\\s*\\=\\s*([^;]*).*$)|^.*$"),"$1");
- if(thm.length<2||'0123z'.indexOf(thm[0])==-1||'abz'.indexOf(thm[1])==-1)thm='zz';
- var ent="";
- var d=new Date();
- if(thm[0]=='z')
- {
- var m=d.getMonth()+1;
- if(m>=3&&m<6)thm='0'+thm[1];
- else if(m>=6&&m<9)thm='1'+thm[1];
- else if(m>=9&&m<12)thm='2'+thm[1];
- else thm='3'+thm[1];
- }
- if(thm[1]=='z')
- {if(d.getHours()>=18||d.getHours()<6)thm=thm[0]+'b';else thm=thm[0]+'a';}
- ent=`theme${thm}`;
- var R=new RegExp('theme[0-4][ab]');
- for(var i=0;i<document.styleSheets.length;++i)
- {
- if(R.exec(document.styleSheets[i].ownerNode.id)!==null&&document.styleSheets[i].ownerNode.id!=ent)
- document.styleSheets[i].disabled=true;
- else document.styleSheets[i].disabled=false;
- }
- var thmcolor="";
- switch(thm[0])
- {
- case '0':thmcolor=thm[1]=='a'?'#f59dda':'#2f0933';break;
- case '1':thmcolor=thm[1]=='a'?'#9df59d':'#090933';break;
- case '2':thmcolor=thm[1]=='a'?'#edb47b':'#1f1205';break;
- case '3':thmcolor=thm[1]=='a'?'#a0cdfa':'#051933';break;
- }
- document.querySelector("meta[name=theme-color]").setAttribute('content',thmcolor);
-}
-loadTheme();
</script>
</head>
<body onload="ol()" style="overflow-x:hidden;">
@@ -71,7 +39,7 @@ loadTheme();
<ul id="tagslist">
- <li id=""><a href="/blog/list/acmicpc">acmicpc</a></li><li id=""><a href="/blog/list/c++">c++</a></li><li id=""><a href="/blog/list/computer-repairing">computer-repairing</a></li><li id=""><a href="/blog/list/contest">contest</a></li><li id=""><a class="active" href="/blog/list/daily-life">daily-life</a></li><li id=""><a href="/blog/list/design">design</a></li><li id=""><a href="/blog/list/devel">devel</a></li><li id=""><a href="/blog/list/device-review">device-review</a></li><li id=""><a href="/blog/list/garbage">garbage</a></li><li id=""><a href="/blog/list/hands-on">hands-on</a></li><li id=""><a href="/blog/list/interactive">interactive</a></li><li id=""><a href="/blog/list/js">js</a></li><li id=""><a href="/blog/list/linux">linux</a></li><li id=""><a href="/blog/list/midi">midi</a></li><li id=""><a href="/blog/list/music">music</a></li><li id=""><a href="/blog/list/opengl">opengl</a></li><li id=""><a href="/blog/list/qmidiplayer">qmidiplayer</a></li><li id=""><a href="/blog/list/qt">qt</a></li><li id=""><a href="/blog/list/random-xp">random-xp</a></li><li id=""><a href="/blog/list/sophistry">sophistry</a></li><li id=""><a href="/blog/list/special-page">special-page</a></li><li id=""><a href="/blog/list/toxic-stuff">toxic-stuff</a></li><li id=""><a href="/blog/list/web">web</a></li><li id=""><a href="/blog/list/webgl">webgl</a></li></ul>
+ <li id=""><a href="/blog/list/acmicpc">acmicpc</a></li><li id=""><a href="/blog/list/c++">c++</a></li><li id=""><a href="/blog/list/computer-repairing">computer-repairing</a></li><li id=""><a href="/blog/list/contest">contest</a></li><li id=""><a class="active" href="/blog/list/daily-life">daily-life</a></li><li id=""><a href="/blog/list/design">design</a></li><li id=""><a href="/blog/list/devel">devel</a></li><li id=""><a href="/blog/list/device-review">device-review</a></li><li id=""><a href="/blog/list/garbage">garbage</a></li><li id=""><a href="/blog/list/hands-on">hands-on</a></li><li id=""><a href="/blog/list/interactive">interactive</a></li><li id=""><a href="/blog/list/js">js</a></li><li id=""><a href="/blog/list/linux">linux</a></li><li id=""><a href="/blog/list/midi">midi</a></li><li id=""><a href="/blog/list/music">music</a></li><li id=""><a href="/blog/list/opengl">opengl</a></li><li id=""><a href="/blog/list/qmidiplayer">qmidiplayer</a></li><li id=""><a href="/blog/list/qt">qt</a></li><li id=""><a href="/blog/list/random-xp">random-xp</a></li><li id=""><a href="/blog/list/sophistry">sophistry</a></li><li id=""><a href="/blog/list/special-page">special-page</a></li><li id=""><a href="/blog/list/web">web</a></li><li id=""><a href="/blog/list/webgl">webgl</a></li></ul>
</li>
</ul>
</div>
diff --git a/blog/list/device-review/0.html b/blog/list/device-review/0.html
index b94c8ac..92e637f 100644
--- a/blog/list/device-review/0.html
+++ b/blog/list/device-review/0.html
@@ -1,4 +1,4 @@
-<html><head>
+<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
@@ -47,10 +47,15 @@ function ol()
<div id="postslist">
<div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2021-10-10.html">EDIROL SD-20: the Crumbling of the Canvas?</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#device-review #midi #music</span>
+ <span class="right" id="">2021-10-10/2022-07-01</span></div>
+ </div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2020-11-20.html">EDIROL SD-80: The Adventure Continues</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#device-review #midi #music</span>
- <span class="right" id="">2020-11-20/2022-06-30</span></div>
+ <span class="right" id="">2020-11-20/2022-07-01</span></div>
</div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2019-04-25.html">EDIROL SD-80: A Trapped Beast</a></h3>
<br>
@@ -66,11 +71,6 @@ function ol()
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage #device-review</span>
<span class="right" id="">2017-12-21/2019-02-12</span></div>
- </div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2017-02-13.html">[多大图警告]ls /dev</a></h3>
- <br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#device-review</span>
- <span class="right" id="">2017-02-13/2019-02-12</span></div>
</div></div>
<div id="insanch" style="height:5em;"></div>
<div id="footer">
diff --git a/blog/list/device-review/1.html b/blog/list/device-review/1.html
index 31c9b3c..59bf5d2 100644
--- a/blog/list/device-review/1.html
+++ b/blog/list/device-review/1.html
@@ -1,4 +1,4 @@
-<html><head>
+<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
@@ -47,6 +47,11 @@ function ol()
<div id="postslist">
<div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2017-02-13.html">[多大图警告]ls /dev</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#device-review</span>
+ <span class="right" id="">2017-02-13/2019-02-12</span></div>
+ </div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2016-05-12.html">ThinkPad X1 Yoga初体验</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#device-review</span>
diff --git a/blog/list/garbage/0.html b/blog/list/garbage/0.html
index 63d6bfd..ed2eaf1 100644
--- a/blog/list/garbage/0.html
+++ b/blog/list/garbage/0.html
@@ -52,31 +52,31 @@ function ol()
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage</span>
<span class="right" id="">2016-02-13/2018-10-11</span></div>
</div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2021-06-03.html">No, I'm not dead</a></h3>
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2021-09-13.html">O.R.A., the 'Rona, and other shite</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage</span>
- <span class="right" id="">2021-06-03/2021-06-03</span></div>
+ <span class="right" id="">2021-09-13/2022-04-04</span></div>
</div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2019-02-13.html">Site Revamp and Other Rants -- 2019 Edition</a></h3>
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2021-06-26.html">(尝试)好好用中文写一篇文章</a></h3>
<br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#web #random-xp #garbage</span>
- <span class="right" id="">2019-02-13/2019-07-25</span></div>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage</span>
+ <span class="right" id="">2021-06-26/2021-06-26</span></div>
</div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-06-07.html">Should this site still be alive by 2035...</a></h3>
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2021-06-03.html">No, I'm not dead</a></h3>
<br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#sophistry #garbage</span>
- <span class="right" id="">2018-06-07/2018-10-11</span></div>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage</span>
+ <span class="right" id="">2021-06-03/2021-06-02</span></div>
</div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-05-18.html">Ideology vs Pragmatism &amp;c.</a></h3>
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2019-02-13.html">Site Revamp and Other Rants -- 2019 Edition</a></h3>
<br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#sophistry #garbage</span>
- <span class="right" id="">2018-05-18/2018-10-11</span></div>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#web #random-xp #garbage</span>
+ <span class="right" id="">2019-02-13/2019-07-24</span></div>
</div></div>
<div id="insanch" style="height:5em;"></div>
<div id="footer">
<div id="pagesw" class="TText" style="display:table;width:100%;padding:1em 0;">
<span style="display:table-cell;"><a id="prepage" href="#">&lt;&lt;</a></span>
- <span style="text-align:center;display:table-cell;" id="page">1/4</span>
+ <span style="text-align:center;display:table-cell;" id="page">1/5</span>
<span style="text-align:right;display:table-cell;"><a id="nexpage" href="/blog/list/garbage/1.html">&gt;&gt;</a></span>
</div>
<div style="text-align:center;" class="TText">
diff --git a/blog/list/garbage/1.html b/blog/list/garbage/1.html
index 0b7cd89..ee92972 100644
--- a/blog/list/garbage/1.html
+++ b/blog/list/garbage/1.html
@@ -47,36 +47,36 @@ function ol()
<div id="postslist">
<div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-06-07.html">Should this site still be alive by 2035...</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#sophistry #garbage</span>
+ <span class="right" id="">2018-06-07/2018-10-11</span></div>
+ </div><div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-05-18.html">Ideology vs Pragmatism &amp;c.</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#sophistry #garbage</span>
+ <span class="right" id="">2018-05-18/2018-10-11</span></div>
+ </div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-05-08.html">Respecting your job</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#sophistry #garbage #acmicpc</span>
- <span class="right" id="">2018-05-08/2019-02-13</span></div>
+ <span class="right" id="">2018-05-08/2019-02-12</span></div>
</div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-05-03.html">Are you an Apple fanboy/fangirl?</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage #interactive</span>
- <span class="right" id="">2018-05-03/2019-02-10</span></div>
+ <span class="right" id="">2018-05-03/2019-02-09</span></div>
</div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-04-22.html">ICPC类比赛中计算几何问题之「乱象」</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage #acmicpc</span>
<span class="right" id="">2018-04-22/2018-10-11</span></div>
- </div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-04-17.html">The "Deepin is spyware" problem</a></h3>
- <br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#linux #garbage #sophistry</span>
- <span class="right" id="">2018-04-17/2018-10-11</span></div>
- </div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-02-05.html">Does gaming make me merrier &amp; more relaxed or the opposite?</a></h3>
- <br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage</span>
- <span class="right" id="">2018-02-05/2018-10-11</span></div>
</div></div>
<div id="insanch" style="height:5em;"></div>
<div id="footer">
<div id="pagesw" class="TText" style="display:table;width:100%;padding:1em 0;">
<span style="display:table-cell;"><a id="prepage" href="/blog/list/garbage/0.html">&lt;&lt;</a></span>
- <span style="text-align:center;display:table-cell;" id="page">2/4</span>
+ <span style="text-align:center;display:table-cell;" id="page">2/5</span>
<span style="text-align:right;display:table-cell;"><a id="nexpage" href="/blog/list/garbage/2.html">&gt;&gt;</a></span>
</div>
<div style="text-align:center;" class="TText">
diff --git a/blog/list/garbage/2.html b/blog/list/garbage/2.html
index c161b21..1ecde9e 100644
--- a/blog/list/garbage/2.html
+++ b/blog/list/garbage/2.html
@@ -47,6 +47,16 @@ function ol()
<div id="postslist">
<div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-04-17.html">The "Deepin is spyware" problem</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#linux #garbage #sophistry</span>
+ <span class="right" id="">2018-04-17/2018-10-11</span></div>
+ </div><div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-02-05.html">Does gaming make me merrier &amp; more relaxed or the opposite?</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage</span>
+ <span class="right" id="">2018-02-05/2018-10-11</span></div>
+ </div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2018-01-07.html">Trash dump for the fifth semester</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage #daily-life</span>
@@ -55,28 +65,18 @@ function ol()
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2017-12-21.html">为什么我<i>就是不</i>使用Mac</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage #device-review</span>
- <span class="right" id="">2017-12-21/2019-02-13</span></div>
+ <span class="right" id="">2017-12-21/2019-02-12</span></div>
</div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2017-11-25.html">A short post on Cakewalk's death and my music production</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#music #garbage</span>
<span class="right" id="">2017-11-25/2018-10-11</span></div>
- </div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2017-06-29.html">Trash dump for the fourth semester</a></h3>
- <br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage #daily-life</span>
- <span class="right" id="">2017-06-29/2018-10-11</span></div>
- </div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2017-01-18.html">Trash dump for the third semester</a></h3>
- <br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage #daily-life</span>
- <span class="right" id="">2017-01-09/2018-10-11</span></div>
</div></div>
<div id="insanch" style="height:5em;"></div>
<div id="footer">
<div id="pagesw" class="TText" style="display:table;width:100%;padding:1em 0;">
<span style="display:table-cell;"><a id="prepage" href="/blog/list/garbage/1.html">&lt;&lt;</a></span>
- <span style="text-align:center;display:table-cell;" id="page">3/4</span>
+ <span style="text-align:center;display:table-cell;" id="page">3/5</span>
<span style="text-align:right;display:table-cell;"><a id="nexpage" href="/blog/list/garbage/3.html">&gt;&gt;</a></span>
</div>
<div style="text-align:center;" class="TText">
diff --git a/blog/list/garbage/3.html b/blog/list/garbage/3.html
index 803ba41..bd3d9d5 100644
--- a/blog/list/garbage/3.html
+++ b/blog/list/garbage/3.html
@@ -47,10 +47,20 @@ function ol()
<div id="postslist">
<div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2017-06-29.html">Trash dump for the fourth semester</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage #daily-life</span>
+ <span class="right" id="">2017-06-29/2021-06-26</span></div>
+ </div><div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2017-01-18.html">Trash dump for the third semester</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage #daily-life</span>
+ <span class="right" id="">2017-01-09/2018-10-11</span></div>
+ </div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2017-01-09.html">[多大图警告]终究还是改不了修电脑的命</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#computer-repairing #garbage</span>
- <span class="right" id="">2017-01-09/2019-02-13</span></div>
+ <span class="right" id="">2017-01-09/2019-02-12</span></div>
</div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2016-06-21.html">Trash dump for the first academic year</a></h3>
<br>
@@ -61,18 +71,13 @@ function ol()
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage</span>
<span class="right" id="">2015-10-31/2018-10-11</span></div>
- </div><div class="block TText" id="" style="display:block;">
- <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2015-10-29.html">noname01.pas</a></h3>
- <br>
- <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#garbage</span>
- <span class="right" id="">2015-10-29/2018-10-11</span></div>
</div></div>
<div id="insanch" style="height:5em;"></div>
<div id="footer">
<div id="pagesw" class="TText" style="display:table;width:100%;padding:1em 0;">
<span style="display:table-cell;"><a id="prepage" href="/blog/list/garbage/2.html">&lt;&lt;</a></span>
- <span style="text-align:center;display:table-cell;" id="page">4/4</span>
- <span style="text-align:right;display:table-cell;"><a id="nexpage" href="#">&gt;&gt;</a></span>
+ <span style="text-align:center;display:table-cell;" id="page">4/5</span>
+ <span style="text-align:right;display:table-cell;"><a id="nexpage" href="/blog/list/garbage/4.html">&gt;&gt;</a></span>
</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
diff --git a/blog/list/hands-on/0.html b/blog/list/hands-on/0.html
index 3dd10d3..c36f036 100644
--- a/blog/list/hands-on/0.html
+++ b/blog/list/hands-on/0.html
@@ -1,4 +1,4 @@
-<html><head>
+<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
diff --git a/blog/list/midi/0.html b/blog/list/midi/0.html
index 8085bb6..10795cd 100644
--- a/blog/list/midi/0.html
+++ b/blog/list/midi/0.html
@@ -1,4 +1,4 @@
-<html><head>
+<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
@@ -47,10 +47,15 @@ function ol()
<div id="postslist">
<div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2021-10-10.html">EDIROL SD-20: the Crumbling of the Canvas?</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#device-review #midi #music</span>
+ <span class="right" id="">2021-10-10/2022-07-01</span></div>
+ </div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2020-11-20.html">EDIROL SD-80: The Adventure Continues</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#device-review #midi #music</span>
- <span class="right" id="">2020-11-20/2022-06-30</span></div>
+ <span class="right" id="">2020-11-20/2022-07-01</span></div>
</div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2019-04-25.html">EDIROL SD-80: A Trapped Beast</a></h3>
<br>
diff --git a/blog/list/music/0.html b/blog/list/music/0.html
index 813c5bf..b9121e0 100644
--- a/blog/list/music/0.html
+++ b/blog/list/music/0.html
@@ -1,4 +1,4 @@
-<html><head>
+<!DOCTYPE html><html><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="theme-color" content="#000000">
@@ -47,10 +47,15 @@ function ol()
<div id="postslist">
<div class="block TText" id="" style="display:block;">
+ <h3 style="line-height:1.5em;"><a id="" href="/blog/post/2021-10-10.html">EDIROL SD-20: the Crumbling of the Canvas?</a></h3>
+ <br>
+ <div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#device-review #midi #music</span>
+ <span class="right" id="">2021-10-10/2022-07-01</span></div>
+ </div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2020-11-20.html">EDIROL SD-80: The Adventure Continues</a></h3>
<br>
<div style="display:table;width:100%;table-layout:fixed;"><span class="left" id="">#device-review #midi #music</span>
- <span class="right" id="">2020-11-20/2022-06-30</span></div>
+ <span class="right" id="">2020-11-20/2022-07-01</span></div>
</div><div class="block TText" id="" style="display:block;">
<h3 style="line-height:1.5em;"><a id="" href="/blog/post/2019-04-25.html">EDIROL SD-80: A Trapped Beast</a></h3>
<br>
diff --git a/blog/post/2019-04-25.html b/blog/post/2019-04-25.html
index 46be210..8d9a13a 100644
--- a/blog/post/2019-04-25.html
+++ b/blog/post/2019-04-25.html
@@ -77,6 +77,9 @@ for(let x of cl)
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(' ['));
diff --git a/blog/post/2020-11-20.html b/blog/post/2020-11-20.html
index f1b68ae..9d258fb 100644
--- a/blog/post/2020-11-20.html
+++ b/blog/post/2020-11-20.html
@@ -77,6 +77,9 @@ for(let x of cl)
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(' ['));
@@ -612,7 +615,7 @@ MB87731A (EP) + MB87424A (TVF)
2 * TC6088AF (CSP), 4 Mbit RAM
</td>
<td>
-3 * 16 Mbit = 6 MiB
+3 * 16 Mbit = 6 MiB, expandable w/ SL-JD80, SO-PCM1, PN-JV80 and SR-JV80 boards
</td>
<td>
H8/570
@@ -1091,7 +1094,7 @@ HD6437016E29FV, SH7016 (SH2)
660i + 23r
</td>
<td>
-Reverb, Chorus
+Reverb, Chorus, EQ
</td>
</tr>
<tr>
@@ -1299,7 +1302,7 @@ Reverb, Chorus, MFX (16 slots, 67 types), EQ, compressor (drum part), Surround,
</tr>
</tbody></table>
</div>
-<p>The following section summarizes generation-over-generation improvements of the synth engine noticed by me reading the manuals. It is <strong>not</strong> based on analysis of the actual chip, but instead 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.</p>
+<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>
@@ -1331,15 +1334,15 @@ Reverb, Chorus, MFX (16 slots, 67 types), EQ, compressor (drum part), Surround,
<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.</p>
+<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 &amp; 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.</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.</p>
+<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>
diff --git a/blog/post/2021-10-10.html b/blog/post/2021-10-10.html
new file mode 100644
index 0000000..e897ac2
--- /dev/null
+++ b/blog/post/2021-10-10.html
@@ -0,0 +1,738 @@
+<!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-20: the Crumbling of the Canvas?</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">The Encounter</a></li><li><a class="toctarg" href="#tocanch1">The Module</a></li><li><a class="toctarg" href="#tocanch2">The Setup</a></li><li><a class="toctarg" href="#tocanch3">The Sounds</a></li><li><a class="toctarg" href="#tocanch4">The Editability</a></li><li><ul class="tocnode"><li><a class="toctarg" href="#tocanch5">The Quirks</a></li></ul></li><li><a class="toctarg" href="#tocanch6">The Manual</a></li><li><a class="toctarg" href="#tocanch7">The Insides</a></li><li><a class="toctarg" href="#tocanch8">The Secrets</a></li><li><ul class="tocnode"><li><a class="toctarg" href="#tocanch9">Test mode</a></li><li><a class="toctarg" href="#tocanch10">unknown (likely firmware update) mode</a></li></ul></li><li><a class="toctarg" href="#tocanch11">The Conclusion</a></li><li><a class="toctarg" href="#tocanch12">The … Death?</a></li></ul>
+ </li>
+ <li style="margin-left:-0.5em"><a id="prevp" href="2021-06-03.html">Prev post</a></li>
+ <li style="margin-left:-0.5em"><a id="nextp" href="Privacy.html">Next post</a></li>
+ </ul>
+ </div>
+ <div id="content">
+ <h2 id="titleh" class="TText" style="font-wight:normal;">EDIROL SD-20: the Crumbling of the Canvas?</h2>
+ <div id="datetags" class="TText" style="margin-bottom:1em;">2021-10-10<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>I was intrigued by the insides of EDIROL’s SD-20. How on earth did Roland squeeze half of SD-80’s content in to a package that’s smaller than SD-80’s main board? Turns out it was by crippling the product…</p>
+<h2 id="tocanch0" class="tvis">The Encounter</h2>
+<p>I didn’t get my SD-20 for $50 as promised in my SD-80 article. The lowest price I found when I started watching for spares again was $75. It stayed there for over half a year. But just weeks before I got into the States, it was gone. All the rest of the listings asked for ridiculous prices ranging from $150 to $250. There’s no way I will pay over $100 for a SD-20. So I waited and waited…</p>
+<p>Until one day a new listing popped up. It was exactly $100 (with free shipping). “Well,” I thought, “this is it.” It accepts best offer, but nobody else offered to buy it until the listing ended. That’s the bizarre story of me getting my SD-20 at my max acceptable price…</p>
+<h2 id="tocanch1" class="tvis">The Module</h2>
+<p>I felt the cheapness inside instantly when I picked up the package: the SD-20 (with the included, somewhat dodgy aftermarket power adapter) weights absolutely nothing! It’s even lighter than the ThinkPad mouse I occasionally use. That doesn’t inspire much faith on its insides.</p>
+<p>The exterior of the module is made of plastic exclusively. No metal whatsoever (except on the connectors). SD-80’s metal front cover weights more than this entire thing…</p>
+<p>Flipping the module around reveals the dreaded three word phrase: “Made in China”. I wonder how many products that are never available in China at all are assembled in China.</p>
+<p>There’s only one button and one knob on the front panel of the SD-20. This is even more cut down than the SC-8820, which also has only one button and one knob, but the volume knob doubles as a preview button.</p>
+<p>Roland clearly made SD-20 the intended successor of SC-8820. Just look at the pictures in the manuals. They have nearly identical form factors. Let’s see how their sounds will compare.</p>
+<p>The choice of ports is kind of weird on the SD-20. It’s almost identical to the ports on the back of the SC-8820, except the audio input being replaced by a 3.5mm combo jack, addition of an optical S/PDIF TOSLINK port, and omission of the DIN MIDI out port. The serial port (mini DIN 8-pin) featured on all older SC models made its only reappearance in the SD series. Despite having an audio input port, the SD-20, just like its predecessors in the SC family, doesn’t have any digital audio interface functionality. The audio input is merely passed through to the analog output.</p>
+<table>
+<tbody><tr>
+<td>
+<div style="text-align:center;max-width:98%;">
+<a href="//filestorage.chrisoft.org/blog/img/sd20_module.jpg"><img style="width: 48%;" src="//filestorage.chrisoft.org/blog/img/ssbsthumb_1536x1536_sd20_module.jpg"></a> <br>SD-20 on top of the SD-80
+</div>
+</td>
+<td>
+<div style="text-align:center;max-width:98%;">
+<a href="//filestorage.chrisoft.org/blog/img/sd20_bottom.jpg"><img style="width: 48%;" src="//filestorage.chrisoft.org/blog/img/ssbsthumb_1536x1536_sd20_bottom.jpg"></a> <br>Bottom with serial number censored
+</div>
+</td>
+</tr>
+</tbody></table>
+<h2 id="tocanch2" class="tvis">The Setup</h2>
+<p>Like the SD-80, Roland has discontinued driver support for the SD-20. The SD-20 will not even appear powered on if you choose to power the unit through USB bus power and have no driver installed. The same trick to make SD-80’s driver work on Windows 10 also works for the SD-20. You can search the Internet for the trick, or check out my first post on the SD-80 for the directions.</p>
+<p>The module works out of the box on Linux as long as you have proper kernel support (that is, you shouldn’t have to worry about this unless you build the kernel yourself). Required kernel modules are identical to those of the SD-80.</p>
+<p>The use of RCA jacks for analog audio output means that I don’t have the suitable cable to connect them to my audio interfaces at the moment. Fortunately I can still make digital recordings thanks to the inclusion of the S/PDIF output. The digital signal has a sample rate of 44100 Hz, the same as SD-80.</p>
+<h2 id="tocanch3" class="tvis">The Sounds</h2>
+<p>(Unless otherwise stated, all hardware demos in this section are recorded through the digital S/PDIF interface with EDIROL UA-25. All files are level normalized to -1 dB. Excerpts are not normalized after being extracted from the normalized original.)</p>
+<p>It’s the same StudioCanvas sound, but …</p>
+<p>With a few exceptions, preset instruments shared by the SD-20 and the SD-80 sound roughly identical. However, note the different mix levels on each model.</p>
+<div>
+<table style="position:relative;left:50%;transform:translate(-50%,0);text-align:center">
+<tbody><tr>
+<th>
+SD-20
+</th>
+<th>
+SD-20 Converter
+</th>
+<th>
+SD-80
+</th>
+</tr>
+<tr>
+<td>
+<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-20/AMEDLEY.SD20.NCREX.OGG">
+</audio>
+</td>
+<td>
+<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-20/AMEDLEY.SD20C.NCREX.OGG">
+</audio>
+</td>
+<td>
+<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-20/AMEDLEY.SD80.NCREX.OGG">
+</audio>
+</td>
+</tr>
+<tr>
+</tr><tr>
+<td colspan="3">
+Excerpt from AMEDLEY.MID by Earl Gray Fowler from Voyetra Technologies, arranged for SD-80 (Native Mode)
+</td>
+</tr>
+</tbody></table>
+</div>
+<p>However significant differences show up as soon as you start tuning any non-GM1 controls (this includes new controls defined by GM2, e.g.&nbsp;cc 74).</p>
+<div>
+<table style="position:relative;left:50%;transform:translate(-50%,0);text-align:center">
+<tbody><tr>
+<th>
+SD-20
+</th>
+<th>
+SD-20 Converter
+</th>
+<th>
+SD-80
+</th>
+</tr>
+<tr>
+<td>
+<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-20/th06_13.sd20.ncrex.ogg">
+</audio>
+</td>
+<td>
+<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-20/th06_13.sd20c.ncrex.ogg">
+</audio>
+</td>
+<td>
+<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-20/th06_13.sd80.ncrex.ogg">
+</audio>
+</td>
+</tr>
+<tr>
+</tr><tr>
+<td colspan="3">
+Excerpt from th06_13.mid
+</td>
+</tr>
+</tbody></table>
+</div>
+<p>Note the very different filter characteristics on the piano.</p>
+<p>What make this module nearly unusable is its 64 voices polyphony. Roland has been using this “voice” concept for polyphony since the very beginning of their PCM based synths. An instrument can have up to four “layers” (or “WGs”, wave generators in Roland’s terms) in these Roland PCM synthesizers. Each layer can consist of up to two channels (for stereo samples). Each one of these channels takes up a “voice” when played. The contemporary set and solo set of the StudioCanvas make heavy use of layering, as well as stereo samples. Some of these patches casually use up to 4 voices per note, with a (theoretical) maximum of 8. Unlike the SC-8850 vs SC-8820, when Roland stripped down the polyphony of the SD-20, they did not create simplified patches that use fewer voices like they did for the SC-8820. This immediately brings down the actual note polyphony of the SD-20 down to the same (or even lower) level of SC-55, and is no where near usable. Hence in terms of polyphony, the SD-20 is a downgrade compared to its predecessor SC-8820: Even you have Roland’s (then) latest studio sounds inside a tiny box, you have to take great precaution while using them, as they deplete your available polyphony <em>very</em> fast. Both tracks below demonstrate how 64 voices is nowhere close to enough for the SD-20.</p>
+<div>
+<table style="position:relative;left:50%;transform:translate(-50%,0);text-align:center">
+<tbody><tr>
+<th>
+SD-20
+</th>
+<th>
+SD-20 Converter
+</th>
+<th>
+SD-80
+</th>
+</tr>
+<tr>
+<td>
+<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-20/th06_13.sd20.ncr.ogg">
+</audio>
+</td>
+<td>
+<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-20/th06_13.sd20c.ncr.ogg">
+</audio>
+</td>
+<td>
+<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-20/th06_13.sd80.ncr.ogg">
+</audio>
+</td>
+</tr>
+<tr>
+</tr><tr>
+<td colspan="3">
+“Crude” replica of Septette for a Dead Princess by ZUN. The original tuning was not replicated.
+</td>
+</tr>
+</tbody></table>
+</div>
+<p>The SD-20 drops notes like crazy in the final section. The SD-20 MIDI Converter drops percussion notes instead.</p>
+<p>Unlike my SD-80, which sometimes messes up timing a bit and slows down when the load is high, the SD-20 simply cut off existing notes instantly without causing timing errors.</p>
+<div>
+<table style="position:relative;left:50%;transform:translate(-50%,0);text-align:center">
+<tbody><tr>
+<th>
+SD-20
+</th>
+<th>
+SD-20 Converter
+</th>
+<th>
+SD-80
+</th>
+</tr>
+<tr>
+<td>
+<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-20/kog_09.sd20.ncr.ogg">
+</audio>
+</td>
+<td>
+<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-20/kog_09.sd20c.ncr.ogg">
+</audio>
+</td>
+<td>
+<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-20/kog_09.sd80.ncr.ogg">
+</audio>
+</td>
+</tr>
+<tr>
+</tr><tr>
+<td colspan="3">
+“Crude” replica of Enigmatic Doll from KiohGyoku by ZUN.
+</td>
+</tr>
+</tbody></table>
+</div>
+<p>Besides the obvious fact that Loose Lips is missing, pay attention to the way the piano notes are cut short. Also note each model has its own filter response for the synth bass.</p>
+<p>Finally, a GM-ish track for comparing vanilla GM2 patches without any tweaking. Reed Romance and SH-2 Lead from the SD special set are used in this adaptation.</p>
+<div>
+<table style="position:relative;left:50%;transform:translate(-50%,0);text-align:center">
+<tbody><tr>
+<th>
+SD-20
+</th>
+<th>
+SD-20 Converter
+</th>
+<th>
+SD-80
+</th>
+</tr>
+<tr>
+<td>
+<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-20/AMEDLEY.SD20.NCR.OGG">
+</audio>
+</td>
+<td>
+<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-20/AMEDLEY.SD20C.NCR.OGG">
+</audio>
+</td>
+<td>
+<audio controls="" preload="none" src="//filestorage.chrisoft.org/blog/data/SD-20/AMEDLEY.SD80.NCR.OGG">
+</audio>
+</td>
+</tr>
+<tr>
+</tr><tr>
+<td colspan="3">
+AMEDLEY.MID by Earl Gray Fowler from Voyetra Technologies, arranged for SD-80 (Native Mode)
+</td>
+</tr>
+</tbody></table>
+</div>
+<p>Patches in SD-80’s special set are substituted with patches in the solo set when played with the SD-20 Converter. However hardware SD-20 doesn’t do this substitution and doesn’t produce any sound if a patch from SD-80’s special set is selected, making the last two segments sound like a backing track on the SD-20. The choir in the ballad segment also has a notably shorter release on the hardware SD-20, possibly to mitigate the impact of a reduced polyphony.</p>
+<p>The SD-20 MIDI Converter is actually a reasonably good recreation of the SD-20 sounds. That is not saying so much, as the hardware of SD-20 itself is simply not capable of recreate the StudioCanvas sounds very well if the MIDI sequence you feed to it has any complexity to it at all. Sometimes the output from converter is actually closer to the SD-80 than the SD-20, especially if you take parameter response curves into consideration.</p>
+<h2 id="tocanch4" class="tvis">The Editability</h2>
+<p>It’s virtually nothing compared to the SD-80.</p>
+<p>The official SD-20 editor can only tune GM2 parameters. The available parameters are even fewer than the HyperCanvas (HQ-GM2) or TTS-1, mostly because the SD-20 doesn’t expose those parameters at all. As mentioned in my first post on the SD-80, the SD-20 editor is essentially the SD-90 editor with the audio / AFX section removed.</p>
+<table>
+<tbody><tr>
+<td>
+<div style="text-align:center;max-width:98%;">
+<a href="//filestorage.chrisoft.org/blog/img/sd20_editor_main.png"><img style="width: 48%;" src="//filestorage.chrisoft.org/blog/img/ssbsthumb_600x600_sd20_editor_main.png"></a> <br>SD-20 editor. SD-90 GM2 editor on the right for comparison.
+</div>
+</td>
+<td>
+<div style="text-align:center;max-width:98%;">
+<a href="//filestorage.chrisoft.org/blog/img/sd20_editor_mixer.png"><img style="width: 48%;" src="//filestorage.chrisoft.org/blog/img/ssbsthumb_600x600_sd20_editor_mixer.png"></a> <br>The mixer. It has a very similar layout to the main page of HyperCanvas / TTS-1.
+</div>
+</td>
+</tr>
+<tr>
+<td>
+<div style="text-align:center;max-width:98%;">
+<a href="//filestorage.chrisoft.org/blog/img/sd20_editor_synth.png"><img style="width: 48%;" src="//filestorage.chrisoft.org/blog/img/ssbsthumb_600x600_sd20_editor_synth.png"></a> <br>The instrument editor. Only GM2 parameters are exposed.
+</div>
+</td>
+<td>
+<div style="text-align:center;max-width:98%;">
+<a href="//filestorage.chrisoft.org/blog/img/sd20_editor_instp.png"><img style="width: 48%;" src="//filestorage.chrisoft.org/blog/img/ssbsthumb_600x600_sd20_editor_instp.png"></a> <br>The instrument picker. The instrument picker of the SD-90 GM2 editor is on the right.
+</div>
+</td>
+</tr>
+</tbody></table>
+<p>The SD-80 editor doesn’t work on the SD-20. Nor does the XV-2020 (which uses the same synth engine as the SD-20) editor. This makes the SD-20 far less editable than the SD-80. Forget about manually piecing together presets on the SD-20 to mimic the SD-80. I don’t even know how to change the samples used by a part on the SD-20 or is it even possible (the MIDI implementation doesn’t mention it).</p>
+<h3 id="tocanch5" class="tvis">The Quirks</h3>
+<p>The address mapping used by SD-20’s DT1 system exclusive messages is similar to that employed by GS-based Sound Canvas models. Therefore the SD-20 is still somewhat editable, but nowhere close to the level offered by the SD-80. GSAE (GS Advanced Editor) may work with the SD-20, but there could be major compatibility issues.</p>
+<p>The SD-20 still responds to GS NRPN messages in native and GM2 mode. SD-90 and SD-80 doesn’t have such behavior.</p>
+<p>SD-20 has a special NRPN for selecting sound sets (MSB: <code>0x41</code> LSB: <code>0x00</code>, send set # to value MSB) in GM2 mode. On the SD-90 and SD-80, only system exclusive messages can be used to select sound sets in GM2 mode. The manual mentioned this feature, however it doesn’t tell you which NRPN to use.</p>
+<h2 id="tocanch6" class="tvis">The Manual</h2>
+<p>This really doesn’t deserve its own paragraph, but here it is. Unless otherwise noted, this is referring to the English manual, not the Japanese version (which is somewhat better, but still horrible).</p>
+<p>The user manual of Roland products has been criticized for being convoluted, unclear and difficult to navigate through for a long time. The user manual for SD-20 is on a whole new level. It’s an absolute abomination.</p>
+<p>To be fair, it’s not like one can write a lot about a product that only have one button and one knob on the front panel. Someone in Roland must have been forced through this …</p>
+<p>Content wise, it’s an amalgamation of SD-80’s “owner’s manual” and “quick start guide”. This make the entire thing even more confusing. You can find traces of SD-80’s manual everywhere. Just take a look at the huge gaps in the instrument list and drum set list. That sad drum set table even has a missing border. There’s also the sentence that goes something like this “you can’t edit the sounds in GS mode using the front panel” <a id="n1" href="#note1" class="note">[1]</a>, which is copied straight from SD-80’s manual. Well, duh … you can’t do much editing with one button (which instantly erases all changed parameters when pressed) and one knob in any mode!</p>
+<p>Since the SD-20 can only be controlled through MIDI, there would be plenty of information on how to operate the module using MIDI messages in the manual, right? Here Roland took the worst move imaginable and included ZERO information on that in the English manual, not even the system exclusive messages to switch between sound generator modes (the Japanese manual does include this), nor does it include a list of parameters that can be controlled by MIDI. It’s almost like Roland doesn’t want you to learn about the parameters it has at all, unless you read the ultra technical MIDI implementation (which, to make it even better, only has a download for the Japanese version left on the official website. Screw everyone who can’t read Japanese I guess).</p>
+<h2 id="tocanch7" class="tvis">The Insides</h2>
+<p>I spent $100 on this thing mostly because I’m curious about its insides. After testing it out, I don’t have any hope that there’s a chance this thing could have an XV chip inside. Having no screwdrivers did not hinder me even a little bit. I used the scissors in my nail care kit to remove the only 4 screws in the bottom of the module, and one screw holding the board. The board came out without any resistance.</p>
+<div style="text-align:center;max-width:90%;">
+<a href="//filestorage.chrisoft.org/blog/img/sd20_board_bottom.jpg"><img style="width: 50%;" src="//filestorage.chrisoft.org/blog/img/ssbsthumb_1536x1536_sd20_board_bottom.jpg"></a> <br>No ICs on the bottom side of the board. The scissor used to undo the screws is visible.
+</div>
+<table>
+<tbody><tr>
+<td>
+<div style="text-align:center;max-width:98%;">
+<p><a href="//filestorage.chrisoft.org/blog/img/sd20_icmap.jpg"><img style="width: 50%;" src="//filestorage.chrisoft.org/blog/img/ssbsthumb_1536x1536_sd20_icmap.jpg"></a></p>
+</div>
+</td>
+<td>
+<div>
+<div>
+<p><x style="display:inline-block;width:0.9em;height:0.9em;border:solid 2px #888;background-color:#ff0000;margin-right:0.5em;transform: translateY(0.2em);"></x> <a href="//filestorage.chrisoft.org/blog/img/sd20_cpu.jpg">CPU (SH7016)</a></p>
+</div>
+<div>
+<p><x style="display:inline-block;width:0.9em;height:0.9em;border:solid 2px #888;background-color:#ffa000;margin-right:0.5em;transform: translateY(0.2em);"></x> <a href="//filestorage.chrisoft.org/blog/img/sd20_io.jpg">8bit MCU, I/O Controller</a></p>
+</div>
+<div>
+<p><x style="display:inline-block;width:0.9em;height:0.9em;border:solid 2px #888;background-color:#fff300;margin-right:0.5em;transform: translateY(0.2em);"></x> <a href="//filestorage.chrisoft.org/blog/img/sd20_cpu.jpg">4 Mb System DRAM</a></p>
+</div>
+<div>
+<p><x style="display:inline-block;width:0.9em;height:0.9em;border:solid 2px #888;background-color:#00f300;margin-right:0.5em;transform: translateY(0.2em);"></x> <a href="//filestorage.chrisoft.org/blog/img/sd20_cpu.jpg">16 Mb Flash</a></p>
+</div>
+<div>
+<p><x style="display:inline-block;width:0.9em;height:0.9em;border:solid 2px #888;background-color:#00ffff;margin-right:0.5em;transform: translateY(0.2em);"></x> <a href="//filestorage.chrisoft.org/blog/img/sd20_io.jpg">RS-232 driver</a></p>
+</div>
+<div>
+<p><x style="display:inline-block;width:0.9em;height:0.9em;border:solid 2px #888;background-color:#00a0ff;margin-right:0.5em;transform: translateY(0.2em);"></x> <a href="//filestorage.chrisoft.org/blog/img/sd20_xp.jpg">Synth DSP (RA0C-003, “XP7”)</a></p>
+</div>
+<div>
+<p><x style="display:inline-block;width:0.9em;height:0.9em;border:solid 2px #888;background-color:#00c060;margin-right:0.5em;transform: translateY(0.2em);"></x> <a href="//filestorage.chrisoft.org/blog/img/sd20_audioio.jpg">4Mb Effects DRAM</a></p>
+</div>
+<div>
+<p><x style="display:inline-block;width:0.9em;height:0.9em;border:solid 2px #888;background-color:#0000ff;margin-right:0.5em;transform: translateY(0.2em);"></x> <a href="//filestorage.chrisoft.org/blog/img/sd20_wrom.jpg">2 * 128 Mb Wave ROM</a></p>
+</div>
+<div>
+<p><x style="display:inline-block;width:0.9em;height:0.9em;border:solid 2px #888;background-color:#a000ff;margin-right:0.5em;transform: translateY(0.2em);"></x> <a href="//filestorage.chrisoft.org/blog/img/sd20_audioio.jpg">Digital Audio Modulator, S/PDIF interface</a></p>
+</div>
+<div>
+<p><x style="display:inline-block;width:0.9em;height:0.9em;border:solid 2px #888;background-color:#ff60ff;margin-right:0.5em;transform: translateY(0.2em);"></x> <a href="//filestorage.chrisoft.org/blog/img/sd20_audioio.jpg">DAC (AK4382A)</a></p>
+</div>
+</div>
+Click any IC above for a detailed shot of components around that chip.<br> <a href="//filestorage.chrisoft.org/blog/img/sd20_board_top.jpg">Click here for the whole board shot without the IC markings.</a>
+</td>
+</tr>
+</tbody></table>
+<p>No, it isn’t an XV chip. It’s an XP7 (RA0C-003) chip. This chip is also used by the bottom-of-the-barrel model in the XV line-up, the XV-2020. This is likely the final iteration of the codename XP. The CPU is a SH7016, same as SC-8850 and SC-D70. Other major chips include two 4Mbit EDO DRAM chips (one for CPU and one for XP7), a 16Mbit flash memory for system and parameters, and two 128Mbit Wave ROM chips. The part number and mask ID of the wave ROMs are different from those used by the SD-80 (either in the service manual or my particular module), suggesting they may contain different data.</p>
+<p>This is a major let down, sort of speak. The hardware is almost as capable as the XV-2020 (which has a larger CPU RAM and flash memory chip, 16Mbit and 32Mbit respectively). The XP7 is even capable of using 40 types of classical JV/XP insertion effects (MFX), which is not used at all by the SD-20. Maybe the reduced system resources prevented Roland to squeeze the XV-level editability inside.</p>
+<p>The XP7 chip runs much hotter compared to the XV chip in the SD-80. It’s almost too hot to touch when the synthesizer load is high. The XP7 chip in the SD-20 is clock much higher than any previous XP chips (33.868 MHz vs 24.576 MHz) to achieve the 44.1 kHz digital output, which is probably the cause of the excessive heat. For a more detailed technical assessment of the chip (and other Roland PCM synth chips), see <a href="https://chrisoft.org/blog/post/2020-11-20.html#tocanch16">my second post on SD-80</a>.</p>
+<p>There are 4 unpopulated switch headers on the board. Two are DPDT switches (SW4 and SW2), two seem to be buttons (SW3 and SW5). SW4 and SW5 seem to be electrically connected to the peripherals of the USB controller, SW2 and SW3 seem to be connected to the CPU. One side of SW4 seems to short the USB power. SW2 resets the unit. SW3 puts the unit into an inoperable state (USB indicator turns off, SPIDF output shuts down, does not respond to any key press / MIDI input). SW2 is weird. One side of the upper pole shorts the power to ground. The same side of the lower pole puts the unit into another inoperable state (just like frozen in place). The other side doesn’t do anything consistent. Sometimes the upper pole acts like a perpetual sustain pedal if engaged (no notes are released even after letting the connection go). All of these switches behave the same in test mode and doesn’t seem to affect boot mode selection.</p>
+<div class="collapse" data-caption="Incomplete list of integrated circuit chips in the SD-20">
+<table>
+<colgroup>
+<col style="width: 9%">
+<col style="width: 30%">
+<col style="width: 59%">
+</colgroup>
+<thead>
+<tr class="header">
+<th style="text-align: center;">Label</th>
+<th style="text-align: center;">Engravement</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;">2360 6061B JRC</td>
+<td style="text-align: center;">DC to DC converter</td>
+</tr>
+<tr class="even">
+<td style="text-align: center;">IC 2,5</td>
+<td style="text-align: center;">4570 652</td>
+<td style="text-align: center;">?</td>
+</tr>
+<tr class="odd">
+<td style="text-align: center;">IC 3</td>
+<td style="text-align: center;">4556A G034F JRC</td>
+<td style="text-align: center;">OpAmp</td>
+</tr>
+<tr class="even">
+<td style="text-align: center;">IC 4</td>
+<td style="text-align: center;">AKM 4382AT 4N647</td>
+<td style="text-align: center;">DAC</td>
+</tr>
+<tr class="odd">
+<td style="text-align: center;">IC 6</td>
+<td style="text-align: center;">ROHM BP5220A 0707S</td>
+<td style="text-align: center;">Regulator</td>
+</tr>
+<tr class="even">
+<td style="text-align: center;">IC 7</td>
+<td style="text-align: center;">PC401L SOK V2</td>
+<td style="text-align: center;">Optocoupler</td>
+</tr>
+<tr class="odd">
+<td style="text-align: center;">IC 8,18,12,15</td>
+<td style="text-align: center;">VHC 245 G43</td>
+<td style="text-align: center;">74xx245 Transceiver / Buffer</td>
+</tr>
+<tr class="even">
+<td style="text-align: center;">IC 9</td>
+<td style="text-align: center;">E 6</td>
+<td style="text-align: center;">?</td>
+</tr>
+<tr class="odd">
+<td style="text-align: center;">IC 10,13</td>
+<td style="text-align: center;">0634H LVX4245 404495</td>
+<td style="text-align: center;">74xx245 Transceiver / Buffer</td>
+</tr>
+<tr class="even">
+<td style="text-align: center;">IC 11</td>
+<td style="text-align: center;">Roland R03017389 HD6437016E29FV 6J1</td>
+<td style="text-align: center;">CPU (SH7016), SH2</td>
+</tr>
+<tr class="odd">
+<td style="text-align: center;">IC 14</td>
+<td style="text-align: center;">E ? (covered)</td>
+<td style="text-align: center;">?</td>
+</tr>
+<tr class="even">
+<td style="text-align: center;">IC 16</td>
+<td style="text-align: center;">H 4</td>
+<td style="text-align: center;">?</td>
+</tr>
+<tr class="odd">
+<td style="text-align: center;">IC 17,25</td>
+<td style="text-align: center;">7WU04F 6X</td>
+<td style="text-align: center;">74xx04 Inverter</td>
+</tr>
+<tr class="even">
+<td style="text-align: center;">IC 19</td>
+<td style="text-align: center;">0625H VHC04 301303</td>
+<td style="text-align: center;">74xx04 Inverter</td>
+</tr>
+<tr class="odd">
+<td style="text-align: center;">IC 20</td>
+<td style="text-align: center;">953B 69B</td>
+<td style="text-align: center;">?</td>
+</tr>
+<tr class="even">
+<td style="text-align: center;">IC 21</td>
+<td style="text-align: center;">2933 G2 5L</td>
+<td style="text-align: center;">?</td>
+</tr>
+<tr class="odd">
+<td style="text-align: center;">IC 22</td>
+<td style="text-align: center;">0626H TC9271FSG</td>
+<td style="text-align: center;">Digital Audio Modulator</td>
+</tr>
+<tr class="even">
+<td style="text-align: center;">IC 23</td>
+<td style="text-align: center;">7W14F 6W</td>
+<td style="text-align: center;">74xx14 Schmitt-Trigger Inverter</td>
+</tr>
+<tr class="odd">
+<td style="text-align: center;">IC 24</td>
+<td style="text-align: center;">Roland R02677490 RA0C-003 JAPAN 0645EGI B0106ZAC</td>
+<td style="text-align: center;">ASIC DSP, “XP7” Synth Engine</td>
+</tr>
+<tr class="even">
+<td style="text-align: center;">IC 26</td>
+<td style="text-align: center;">Roland R03010612 23C128BL832J 0620K7002</td>
+<td style="text-align: center;">128 Mbit Mask ROM, Wave ROM</td>
+</tr>
+<tr class="odd">
+<td style="text-align: center;">IC 27</td>
+<td style="text-align: center;">Roland R03010623 23C128BL833K 0620K7005</td>
+<td style="text-align: center;">128 Mbit Mask ROM, Wave ROM</td>
+</tr>
+<tr class="even">
+<td style="text-align: center;">IC 28</td>
+<td style="text-align: center;">VHC T245A F5 51</td>
+<td style="text-align: center;">74xx245 Transceiver / Buffer</td>
+</tr>
+<tr class="odd">
+<td style="text-align: center;">IC 29</td>
+<td style="text-align: center;">EliteMT M11L416256SA- 35T SZV2C51GR 0627</td>
+<td style="text-align: center;">EDO DRAM 4 Mbit, XP Effects RAM</td>
+</tr>
+<tr class="even">
+<td style="text-align: center;">IC 30</td>
+<td style="text-align: center;">LH28F160BJE-BTL80 SHARP JAPAN 0631 5 XN</td>
+<td style="text-align: center;">Flash Memory, 16 Mbit, System / Parameters</td>
+</tr>
+<tr class="odd">
+<td style="text-align: center;">IC 31</td>
+<td style="text-align: center;">ti 71CN1RKG4 75C1168</td>
+<td style="text-align: center;">RS-232 driver</td>
+</tr>
+<tr class="even">
+<td style="text-align: center;">IC 32</td>
+<td style="text-align: center;">EliteMT M11L416256SA- 35T SZV2C51GR 0627</td>
+<td style="text-align: center;">EDO DRAM 4 Mbit, System RAM</td>
+</tr>
+<tr class="odd">
+<td style="text-align: center;">IC 33</td>
+<td style="text-align: center;">Roland R03011089 138 620B100</td>
+<td style="text-align: center;">USB Controller, 8-bit MCU</td>
+</tr>
+<tr class="even">
+<td style="text-align: center;">IC 34</td>
+<td style="text-align: center;">2008 680</td>
+<td style="text-align: center;">?</td>
+</tr>
+<tr class="odd">
+<td style="text-align: center;">IC 35</td>
+<td style="text-align: center;">7W04F 6V</td>
+<td style="text-align: center;">74xx04 Inverter</td>
+</tr>
+<tr class="even">
+<td style="text-align: center;">IC 36</td>
+<td style="text-align: center;">E 1</td>
+<td style="text-align: center;">?</td>
+</tr>
+<tr class="odd">
+<td style="text-align: center;">IC 37</td>
+<td style="text-align: center;">7W139F 61</td>
+<td style="text-align: center;">74xx139 Decoder</td>
+</tr>
+</tbody>
+</table>
+</div>
+<h2 id="tocanch8" class="tvis">The Secrets</h2>
+<p>It seems dead easy to enter the secret test mode on the SD-20 – there’s only one button. Hold the button and turn the power on, the USB indicator will light up. This is the boot mode selection prompt. Release the button. Now you have around 4 seconds to do one of the following:</p>
+<ul>
+<li>Pressing the button twice. The unit will boot into test mode.</li>
+<li>Pressing the button three times. The unit will boot into an unknown mode (likely firmware update).</li>
+</ul>
+<p>If your action matches none of these, the unit will boot into normal mode.</p>
+<p>This section will employ the following notation for the status of the indicator LEDs.</p>
+<pre><code> PWR USB OUTPUT o o o o
+ o o MODE o o o o
+ GM2 G X
+ S G
+o=on
+-=off
+*=faint</code></pre>
+<h3 id="tocanch9" class="tvis">Test mode</h3>
+<p>The test mode is far less interesting than that of the SD-80 because I don’t necessarily understand what does every indicators pattern mean.</p>
+<div class="collapse" data-caption="SD-20 Tests">
+<pre><code> test 1 (some sort of version?)
+ PWR USB OUTPUT - - - o
+ o - MODE - - - o
+
+Mode key pressed = next
+
+ test 2 (some other sort of version? self test? serial port test? midi test?)
+ PWR USB OUTPUT - - - o
+ o o MODE - - o o
+
+Mode key pressed = next
+
+ test 3 (same as 2)
+ PWR USB OUTPUT - - - o
+ - o MODE - - - -
+
+Mode key pressed = power LED flashes once, enters next test
+
+ test 4 (LED test)
+ LEDs lights up in sequence, one by one:
+ output 1, 2, 3, 4, mode 1, 2, 3, 4 (GM2 L, GM2 R, GS, XG),
+ all lights off, power, usb
+
+Mode key pressed = next
+
+ test 5a (Sound test 1)
+ PWR USB OUTPUT - o o -
+ o - MODE - - o -
+Resets synthesizer to native mode.
+MIDI Channel 1 is set to play a sine waveform.
+Plays sine wave on both channels.
+
+Mode key pressed = next
+
+ test 5b (Sound test 2)
+ PWR USB OUTPUT o - - -
+ o - MODE - - o -
+Plays sine wave on left channel.
+
+Mode key pressed = next
+
+ test 5c (Sound test 3)
+ PWR USB OUTPUT - - - o
+ o - MODE - - o -
+Plays sine wave on right channel.
+
+Mode key pressed = next
+
+ test 5d (Effects test)
+ PWR USB OUTPUT o o o o
+ o - MODE - - - o
+Resets synthesizer to native mode.
+MIDI Channel 1 is set to play a melodic tom sound.
+Plays a tom sound with loud reverb periodically.
+
+Mode key pressed = next
+
+ test 6 (probably hardware check)
+ PWR USB OUTPUT - - o -
+ o - MODE - - - -
+
+Synthesizer resets again.
+The module no longer respond to any key presses from this point.</code></pre>
+</div>
+<h3 id="tocanch10" class="tvis">unknown (likely firmware update) mode</h3>
+<pre><code> PWR USB OUTPUT o o o o
+ o - MODE o o o *
+ Doesn't respond to any key presses. (long, short, multiple presses)
+ Shows up as a USB device with normal ID (0582:0027).
+ Does not function as synthesizer.</code></pre>
+<h2 id="tocanch11" class="tvis">The Conclusion</h2>
+<p>For a low, low price of $300 in 2002, you get 3 set of mediocre (with a few exceptions) GM2 patches. The sounds themselves are reasonably new and refreshing back then, but the higher average voice-per-note of the new StudioCanvas sounds make the SD-20 a less desirable choice than previous 64-polyphony models. The lack of advanced editing of any sort removes all possibility to explore custom sound design with the module. It’s a cheaply built unit that Roland asked for too much. Even for a Touhou music fanatic today, there are much cheaper ways to get access to the most sought-after instruments.</p>
+<h2 id="tocanch12" class="tvis">The … Death?</h2>
+<p>My SD-20 is in temporary coma right now, as it’s receiving a brain surgery …</p>
+<p>I will give updates in a separate post when it’s complete.</p>
+<table>
+<tbody><tr>
+<td>
+<div style="text-align:center;max-width:98%;">
+<a href="//filestorage.chrisoft.org/blog/img/sd20_wromds.jpg"><img style="width: 48%;" src="//filestorage.chrisoft.org/blog/img/ssbsthumb_1536x1536_sd20_wromds.jpg"></a> <br>I don’t know what I’m doing …
+</div>
+</td>
+<td>
+<div style="text-align:center;max-width:98%;">
+<a href="//filestorage.chrisoft.org/blog/img/sd20_wromdmp.jpg"><img style="width: 48%;" src="//filestorage.chrisoft.org/blog/img/ssbsthumb_1536x1536_sd20_wromdmp.jpg"></a> <br>… or do I?
+</div>
+</td>
+</tr>
+</tbody></table>
+</article>
+</div><br><hr>
+ <div class="TText" id="notediv" style="font-size:80%;"><span class="TText"><a id="note1" href="#n1">[1]</a>: Had to paraphrase this, because Roland prohibits reproducing contents from their manuals…<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> \ No newline at end of file