2021-10-11 21:15:16 +00:00
|
|
|
|
|
|
|
|
2021-10-12 21:07:35 +00:00
|
|
|
function mod(a,b) {
|
|
|
|
return ((a % b) + b) % b;
|
|
|
|
}
|
2021-10-11 21:15:16 +00:00
|
|
|
|
|
|
|
function sine() {
|
|
|
|
|
2021-10-12 21:07:35 +00:00
|
|
|
const a = 127;
|
|
|
|
const p = 256;
|
|
|
|
|
2021-10-11 21:15:16 +00:00
|
|
|
var rv = [];
|
|
|
|
for (var n = 0; n < 256; ++n) {
|
2021-10-12 21:07:35 +00:00
|
|
|
var x = 128 + Math.round(a * Math.sin(n * Math.PI / 128));
|
2021-10-11 21:15:16 +00:00
|
|
|
rv.push( x || 1 );
|
|
|
|
}
|
|
|
|
return rv;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function square() {
|
|
|
|
|
|
|
|
var rv = [];
|
|
|
|
for (var n = 0; n < 128; ++n) rv.push(255);
|
|
|
|
for (var n = 0; n < 128; ++n) rv.push(1);
|
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
|
|
|
function triangle() {
|
|
|
|
// 0x80 -> 0xff [25%] -> 0x80 [50%] -> 0x01 [75%] -> 0x80 [100%]
|
|
|
|
var rv = [];
|
2021-10-12 21:07:35 +00:00
|
|
|
|
|
|
|
const a = 127;
|
|
|
|
const p = 256;
|
|
|
|
for (var n = 0; n < 256; ++n) {
|
|
|
|
var x = 128 + Math.round(4*a/p * Math.abs(mod(n-p/4, p) - p/2)) - a;
|
|
|
|
rv.push(x || 1);
|
|
|
|
|
|
|
|
}
|
2021-10-11 21:15:16 +00:00
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function sawtooth() {
|
|
|
|
|
|
|
|
var rv = [];
|
2021-10-12 21:07:35 +00:00
|
|
|
|
|
|
|
const a = 127;
|
|
|
|
const p = 256;
|
|
|
|
for (var n = 0; n < 256; ++n) {
|
|
|
|
var x = 128 + Math.round(a * 2 * (n/p - Math.floor(.5 + n/p)));
|
|
|
|
rv.push(x || 1);
|
|
|
|
}
|
2021-10-11 21:15:16 +00:00
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export function WaveData(props) {
|
|
|
|
|
|
|
|
|
|
|
|
var {assembler, shape} = props;
|
|
|
|
|
|
|
|
var data;
|
|
|
|
switch(shape) {
|
|
|
|
case 0: data = sine(); break;
|
|
|
|
case 1: data = square(); break;
|
|
|
|
case 2: data = triangle(); break;
|
|
|
|
case 3: data = sawtooth(); break;
|
|
|
|
}
|
|
|
|
|
|
|
|
var hex = data.map( (x) => x < 0x10 ? "0" + x.toString(16) : x.toString(16) );
|
|
|
|
|
|
|
|
var code = [];
|
|
|
|
if (assembler == 0) {
|
|
|
|
// merlin
|
|
|
|
for (var n = 0; n < 16; ++n) {
|
|
|
|
var line = " hex " + hex.slice(n * 16, n * 16 + 16).join("") + "\n"
|
|
|
|
code.push(line);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (assembler == 1) {
|
|
|
|
// orca/m
|
|
|
|
for (var n = 0; n < 16; ++n) {
|
|
|
|
var line = " dc h'" + hex.slice(n * 16, n * 16 + 16).join("") + "'\n"
|
|
|
|
code.push(line);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-10-12 02:39:29 +00:00
|
|
|
if (assembler == 2) {
|
|
|
|
// mpw
|
|
|
|
for (var n = 0; n < 32; ++n) {
|
|
|
|
var line = " dc.b $" + hex.slice(n * 8, n * 8 + 8).join(",$") + "\n"
|
|
|
|
code.push(line);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-10-11 21:15:16 +00:00
|
|
|
return (
|
|
|
|
<code>
|
|
|
|
<pre>
|
|
|
|
{code}
|
|
|
|
</pre>
|
|
|
|
</code>
|
|
|
|
);
|
|
|
|
}
|