概要
micropythonでshrike-lite、やってみた。
verilogでAVRを書く。
javascriptでavrのシミュレーター書いてみた。
rom化に使用する。
写真
投入したソースコード
avr.ldi(16, 1)
avr.ldi(17, 2)
avr.out(1, 16)
avr.out(1, 17)
シミュレーション結果
1 2
サンプルコード
function hen(x) {
var a,
b,
c,
d,
e,
f,
g,
h;
if ((x & 0x01) > 0)
{
a = true;
}
else
{
a = false;
}
if ((x & 0x02) > 0)
{
b = true;
}
else
{
b = false;
}
if ((x & 0x04) > 0)
{
c = true;
}
else
{
c = false;
}
if ((x & 0x08) > 0)
{
d = true;
}
else
{
d = false;
}
if ((x & 0x10) > 0)
{
e = true;
}
else
{
e = false;
}
if ((x & 0x20) > 0)
{
f = true;
}
else
{
f = false;
}
if ((x & 0x40) > 0)
{
g = true;
}
else
{
g = false;
}
if ((x & 0x80) > 0)
{
h = true;
}
else
{
h = false;
}
K = [a, b, c, d, e, f, g, h];
return K;
}
function kan(K) {
var x = 0;
if (K[0]) x += 0x01;
if (K[1]) x += 0x02;
if (K[2]) x += 0x04;
if (K[3]) x += 0x08;
if (K[4]) x += 0x10;
if (K[5]) x += 0x20;
if (K[6]) x += 0x40;
if (K[7]) x += 0x80;
return String.fromCharCode(x);
}
function kan2(K) {
var x = 0;
if (K[0]) x += 0x01;
if (K[1]) x += 0x02;
if (K[2]) x += 0x04;
if (K[3]) x += 0x08;
if (K[4]) x += 0x10;
if (K[5]) x += 0x20;
if (K[6]) x += 0x40;
if (K[7]) x += 0x80;
return x;
}
var avr = {
PC: 0,
spl: 0x5d,
sph: 0x5e,
sreg: 0x5f,
dataspace: {
0x00: [false, false, false, false, false, false, false, false], /* R0 */
0x01: [false, false, false, false, false, false, false, false], /* R1 */
0x02: [false, false, false, false, false, false, false, false], /* R2 */
0x03: [false, false, false, false, false, false, false, false], /* R3 */
0x04: [false, false, false, false, false, false, false, false], /* R4 */
0x05: [false, false, false, false, false, false, false, false], /* R5 */
0x06: [false, false, false, false, false, false, false, false], /* R6 */
0x07: [false, false, false, false, false, false, false, false], /* R7 */
0x08: [false, false, false, false, false, false, false, false], /* R8 */
0x09: [false, false, false, false, false, false, false, false], /* R9 */
0x0a: [false, false, false, false, false, false, false, false], /* R10 */
0x0b: [false, false, false, false, false, false, false, false], /* R11 */
0x0c: [false, false, false, false, false, false, false, false], /* R12 */
0x0d: [false, false, false, false, false, false, false, false], /* R13 */
0x0e: [false, false, false, false, false, false, false, false], /* R14 */
0x0f: [false, false, false, false, false, false, false, false], /* R15 */
0x10: [false, false, false, false, false, false, false, false], /* R16 */
0x11: [false, false, false, false, false, false, false, false], /* R17 */
0x12: [false, false, false, false, false, false, false, false], /* R18 */
0x13: [false, false, false, false, false, false, false, false], /* R19 */
0x14: [false, false, false, false, false, false, false, false], /* R20 */
0x15: [false, false, false, false, false, false, false, false], /* R21 */
0x16: [false, false, false, false, false, false, false, false], /* R22 */
0x17: [false, false, false, false, false, false, false, false], /* R23 */
0x18: [false, false, false, false, false, false, false, false], /* R24 */
0x19: [false, false, false, false, false, false, false, false], /* R25 */
0x1a: [false, false, false, false, false, false, false, false], /* R26 X-register Low Byte */
0x1b: [false, false, false, false, false, false, false, false], /* R27 X-register High Byte */
0x1c: [false, false, false, false, false, false, false, false], /* R28 Y-register Low Byte */
0x1d: [false, false, false, false, false, false, false, false], /* R29 Y-register High Byte */
0x1e: [false, false, false, false, false, false, false, false], /* R30 Z-register Low Byte */
0x1f: [false, false, false, false, false, false, false, false], /* R31 Z-register High Byte */
0x20: [false, false, false, false, false, false, false, false],
0x21: [false, false, false, false, false, false, false, false],
0x22: [false, false, false, false, false, false, false, false],
0x23: [false, false, false, false, false, false, false, false],
0x24: [false, false, false, false, false, false, false, false],
0x25: [false, false, false, false, false, false, false, false],
0x26: [false, false, false, false, false, false, false, false],
0x27: [false, false, false, false, false, false, false, false],
0x28: [false, false, false, false, false, false, false, false],
0x29: [false, false, false, false, false, false, false, false],
0x2a: [false, false, false, false, false, false, false, false],
0x2b: [false, false, false, false, false, false, false, false],
0x2c: [false, false, false, false, false, false, false, false],
0x2d: [false, false, false, false, false, false, false, false],
0x2e: [false, false, false, false, false, false, false, false],
0x2f: [false, false, false, false, false, false, false, false],
0x30: [false, false, false, false, false, false, false, false],
0x31: [false, false, false, false, false, false, false, false],
0x32: [false, false, false, false, false, false, false, false],
0x33: [false, false, false, false, false, false, false, false],
0x34: [false, false, false, false, false, false, false, false],
0x35: [false, false, false, false, false, false, false, false],
0x36: [false, false, false, false, false, false, false, false],
0x37: [false, false, false, false, false, false, false, false],
0x38: [false, false, false, false, false, false, false, false],
0x39: [false, false, false, false, false, false, false, false],
0x3a: [false, false, false, false, false, false, false, false],
0x3b: [false, false, false, false, false, false, false, false],
0x3c: [false, false, false, false, false, false, false, false],
0x3d: [false, false, false, false, false, false, false, false],
0x3e: [false, false, false, false, false, false, false, false],
0x3f: [false, false, false, false, false, false, false, false],
0x40: [false, false, false, false, false, false, false, false],
0x41: [false, false, false, false, false, false, false, false],
0x42: [false, false, false, false, false, false, false, false],
0x43: [false, false, false, false, false, false, false, false],
0x44: [false, false, false, false, false, false, false, false],
0x45: [false, false, false, false, false, false, false, false],
0x46: [false, false, false, false, false, false, false, false],
0x47: [false, false, false, false, false, false, false, false],
0x48: [false, false, false, false, false, false, false, false],
0x49: [false, false, false, false, false, false, false, false],
0x4a: [false, false, false, false, false, false, false, false],
0x4b: [false, false, false, false, false, false, false, false],
0x4c: [false, false, false, false, false, false, false, false],
0x4d: [false, false, false, false, false, false, false, false],
0x4e: [false, false, false, false, false, false, false, false],
0x4f: [false, false, false, false, false, false, false, false],
0x50: [false, false, false, false, false, false, false, false],
0x51: [false, false, false, false, false, false, false, false],
0x52: [false, false, false, false, false, false, false, false],
0x53: [false, false, false, false, false, false, false, false],
0x54: [false, false, false, false, false, false, false, false],
0x55: [false, false, false, false, false, false, false, false],
0x56: [false, false, false, false, false, false, false, false],
0x57: [false, false, false, false, false, false, false, false],
0x58: [false, false, false, false, false, false, false, false],
0x59: [false, false, false, false, false, false, false, false],
0x5a: [false, false, false, false, false, false, false, false],
0x5b: [false, false, false, false, false, false, false, false],
0x5c: [false, false, false, false, false, false, false, false],
0x5d: [false, false, false, false, false, false, false, false],
0x5e: [false, false, false, false, false, false, false, false],
0x5f: [false, false, false, false, false, false, false, false],
0x60: [false, false, false, false, false, false, false, false],
0x61: [false, false, false, false, false, false, false, false],
0x62: [false, false, false, false, false, false, false, false],
0x63: [false, false, false, false, false, false, false, false],
0x64: [false, false, false, false, false, false, false, false],
0x65: [false, false, false, false, false, false, false, false],
0x66: [false, false, false, false, false, false, false, false],
0x67: [false, false, false, false, false, false, false, false],
0x68: [false, false, false, false, false, false, false, false],
0x69: [false, false, false, false, false, false, false, false],
0x6a: [false, false, false, false, false, false, false, false],
0x6b: [false, false, false, false, false, false, false, false],
0x6c: [false, false, false, false, false, false, false, false],
0x6d: [false, false, false, false, false, false, false, false],
0x6e: [false, false, false, false, false, false, false, false],
0x6f: [false, false, false, false, false, false, false, false],
0x70: [false, false, false, false, false, false, false, false],
0x71: [false, false, false, false, false, false, false, false],
0x72: [false, false, false, false, false, false, false, false],
0x73: [false, false, false, false, false, false, false, false],
0x74: [false, false, false, false, false, false, false, false],
0x75: [false, false, false, false, false, false, false, false],
0x76: [false, false, false, false, false, false, false, false],
0x77: [false, false, false, false, false, false, false, false],
0x78: [false, false, false, false, false, false, false, false],
0x79: [false, false, false, false, false, false, false, false],
0x7a: [false, false, false, false, false, false, false, false],
0x7b: [false, false, false, false, false, false, false, false],
0x7c: [false, false, false, false, false, false, false, false],
0x7d: [false, false, false, false, false, false, false, false],
0x7e: [false, false, false, false, false, false, false, false],
0x7f: [false, false, false, false, false, false, false, false],
0x80: [false, false, false, false, false, false, false, false],
0x81: [false, false, false, false, false, false, false, false],
0x82: [false, false, false, false, false, false, false, false],
0x83: [false, false, false, false, false, false, false, false],
0x84: [false, false, false, false, false, false, false, false],
0x85: [false, false, false, false, false, false, false, false],
0x86: [false, false, false, false, false, false, false, false],
0x87: [false, false, false, false, false, false, false, false],
0x88: [false, false, false, false, false, false, false, false],
0x89: [false, false, false, false, false, false, false, false],
0x8a: [false, false, false, false, false, false, false, false],
0x8b: [false, false, false, false, false, false, false, false],
0x8c: [false, false, false, false, false, false, false, false],
0x8d: [false, false, false, false, false, false, false, false],
0x8e: [false, false, false, false, false, false, false, false],
0x8f: [false, false, false, false, false, false, false, false],
0x90: [false, false, false, false, false, false, false, false],
0x91: [false, false, false, false, false, false, false, false],
0x92: [false, false, false, false, false, false, false, false],
0x93: [false, false, false, false, false, false, false, false],
0x94: [false, false, false, false, false, false, false, false],
0x95: [false, false, false, false, false, false, false, false],
0x96: [false, false, false, false, false, false, false, false],
0x97: [false, false, false, false, false, false, false, false],
0x98: [false, false, false, false, false, false, false, false],
0x99: [false, false, false, false, false, false, false, false],
0x9a: [false, false, false, false, false, false, false, false],
0x9b: [false, false, false, false, false, false, false, false],
0x9c: [false, false, false, false, false, false, false, false],
0x9d: [false, false, false, false, false, false, false, false],
0x9e: [false, false, false, false, false, false, false, false],
0x9f: [false, false, false, false, false, false, false, false],
0xa0: [false, false, false, false, false, false, false, false],
0xa1: [false, false, false, false, false, false, false, false],
0xa2: [false, false, false, false, false, false, false, false],
0xa3: [false, false, false, false, false, false, false, false],
0xa4: [false, false, false, false, false, false, false, false],
0xa5: [false, false, false, false, false, false, false, false],
0xa6: [false, false, false, false, false, false, false, false],
0xa7: [false, false, false, false, false, false, false, false],
0xa8: [false, false, false, false, false, false, false, false],
0xa9: [false, false, false, false, false, false, false, false],
0xaa: [false, false, false, false, false, false, false, false],
0xab: [false, false, false, false, false, false, false, false],
0xac: [false, false, false, false, false, false, false, false],
0xad: [false, false, false, false, false, false, false, false],
0xae: [false, false, false, false, false, false, false, false],
0xaf: [false, false, false, false, false, false, false, false],
0xb0: [false, false, false, false, false, false, false, false],
0xb1: [false, false, false, false, false, false, false, false],
0xb2: [false, false, false, false, false, false, false, false],
0xb3: [false, false, false, false, false, false, false, false],
0xb4: [false, false, false, false, false, false, false, false],
0xb5: [false, false, false, false, false, false, false, false],
0xb6: [false, false, false, false, false, false, false, false],
0xb7: [false, false, false, false, false, false, false, false],
0xb8: [false, false, false, false, false, false, false, false],
0xb9: [false, false, false, false, false, false, false, false],
0xba: [false, false, false, false, false, false, false, false],
0xbb: [false, false, false, false, false, false, false, false],
0xbc: [false, false, false, false, false, false, false, false],
0xbd: [false, false, false, false, false, false, false, false],
0xbe: [false, false, false, false, false, false, false, false],
0xbf: [false, false, false, false, false, false, false, false],
0xc0: [false, false, false, false, false, false, false, false],
0xc1: [false, false, false, false, false, false, false, false],
0xc2: [false, false, false, false, false, false, false, false],
0xc3: [false, false, false, false, false, false, false, false],
0xc4: [false, false, false, false, false, false, false, false],
0xc5: [false, false, false, false, false, false, false, false],
0xc6: [false, false, false, false, false, false, false, false],
0xc7: [false, false, false, false, false, false, false, false],
0xc8: [false, false, false, false, false, false, false, false],
0xc9: [false, false, false, false, false, false, false, false],
0xca: [false, false, false, false, false, false, false, false],
0xcb: [false, false, false, false, false, false, false, false],
0xcc: [false, false, false, false, false, false, false, false],
0xcd: [false, false, false, false, false, false, false, false],
0xce: [false, false, false, false, false, false, false, false],
0xcf: [false, false, false, false, false, false, false, false],
0xd0: [false, false, false, false, false, false, false, false],
0xd1: [false, false, false, false, false, false, false, false],
0xd2: [false, false, false, false, false, false, false, false],
0xd3: [false, false, false, false, false, false, false, false],
0xd4: [false, false, false, false, false, false, false, false],
0xd5: [false, false, false, false, false, false, false, false],
0xd6: [false, false, false, false, false, false, false, false],
0xd7: [false, false, false, false, false, false, false, false],
0xd8: [false, false, false, false, false, false, false, false],
0xd9: [false, false, false, false, false, false, false, false],
0xda: [false, false, false, false, false, false, false, false],
0xdb: [false, false, false, false, false, false, false, false],
0xdc: [false, false, false, false, false, false, false, false],
0xdd: [false, false, false, false, false, false, false, false],
0xde: [false, false, false, false, false, false, false, false],
0xdf: [false, false, false, false, false, false, false, false],
0xe0: [false, false, false, false, false, false, false, false],
0xe1: [false, false, false, false, false, false, false, false],
0xe2: [false, false, false, false, false, false, false, false],
0xe3: [false, false, false, false, false, false, false, false],
0xe4: [false, false, false, false, false, false, false, false],
0xe5: [false, false, false, false, false, false, false, false],
0xe6: [false, false, false, false, false, false, false, false],
0xe7: [false, false, false, false, false, false, false, false],
0xe8: [false, false, false, false, false, false, false, false],
0xe9: [false, false, false, false, false, false, false, false],
0xea: [false, false, false, false, false, false, false, false],
0xeb: [false, false, false, false, false, false, false, false],
0xec: [false, false, false, false, false, false, false, false],
0xed: [false, false, false, false, false, false, false, false],
0xee: [false, false, false, false, false, false, false, false],
0xef: [false, false, false, false, false, false, false, false],
0xf0: [false, false, false, false, false, false, false, false],
0xf1: [false, false, false, false, false, false, false, false],
0xf2: [false, false, false, false, false, false, false, false],
0xf3: [false, false, false, false, false, false, false, false],
0xf4: [false, false, false, false, false, false, false, false],
0xf5: [false, false, false, false, false, false, false, false],
0xf6: [false, false, false, false, false, false, false, false],
0xf7: [false, false, false, false, false, false, false, false],
0xf8: [false, false, false, false, false, false, false, false],
0xf9: [false, false, false, false, false, false, false, false],
0xfa: [false, false, false, false, false, false, false, false],
0xfb: [false, false, false, false, false, false, false, false],
0xfc: [false, false, false, false, false, false, false, false],
0xfd: [false, false, false, false, false, false, false, false],
0xfe: [false, false, false, false, false, false, false, false],
0xff: [false, false, false, false, false, false, false, false]
},
adc: function(_Rd, _Rr) {
var Rd = this.dataspace[_Rd];
var Rr = this.dataspace[_Rr];
var R = [false, false, false, false, false, false, false, false];
var C = [false, false, false, false, false, false, false, false];
var SREG = this.dataspace[SREG];
C[0] = SREG[0];
R[0] = !!(Rd[0] ^ Rr[0]);
C[1] = Rd[0] && Rr[0];
R[1] = !!(Rd[1] ^ Rr[1] ^ C[1]);
C[2] = (Rd[1] || Rr[1]) && C[1];
R[2] = !!(Rd[2] ^ Rr[2] ^ C[2]);
C[3] = (Rd[2] || Rr[2]) && C[2];
R[3] = !!(Rd[3] ^ Rr[3] ^ C[3]);
C[4] = (Rd[3] || Rr[3]) && C[3];
R[4] = !!(Rd[4] ^ Rr[4] ^ C[4]);
C[5] = (Rd[4] || Rr[4]) && C[4];
R[5] = !!(Rd[5] ^ Rr[5] ^ C[5]);
C[6] = (Rd[5] || Rr[5]) && C[5];
R[6] = !!(Rd[6] ^ Rr[6] ^ C[6]);
C[7] = (Rd[6] || Rr[6]) && C[6];
R[7] = !!(Rd[7] ^ Rr[7] ^ C[7]);
this.dataspace[SREG][0] = Rd[7] && Rr[7] || Rr[7] && !R[7] || !R[7] && Rd[7];
SREG[1] = !R[7] && !R[6] && !R[5] && !R[4] && !R[3] && !R[2] && !R[1] && R[0];
SREG[2] = R[7];
SREG[3] = Rd[7] && Rr[7] && !Rr[7] || !Rd[7] && !Rr[7] && R[7];
SREG[4] = !!(SREG[2] ^ SREG[3]);
SREG[5] = Rd[3] && Rr[3] || Rr[3] && !R[3] || !R[3] && Rd[3];
this.PC++;
this.dataspace[_Rd] = R;
this.dataspace[this.sreg] = SREG;
},
add: function(_Rd, _Rr) {
var Rd = kan2(this.dataspace[_Rd]);
var Rr = kan2(this.dataspace[_Rr]);
var v = (Rd + Rr) & 0xff;
this.dataspace[_Rd] = hen(v);
var SREG = this.dataspace[this.sreg];
this.PC++;
this.dataspace[this.sreg] = SREG;
},
adiw: function(_Rd, _Rr) {
var Rd = this.dataspace[_Rd];
var Rr = this.dataspace[_Rr];
var SREG = this.dataspace[this.sreg];
this.PC++;
},
and: function(_Rd, _Rr) {
var Rd = this.dataspace[_Rd];
var Rr = this.dataspace[_Rr];
var SREG = this.dataspace[this.sreg];
Rd[0] = Rd[0] && Rr[0];
Rd[1] = Rd[1] && Rr[1];
Rd[2] = Rd[2] && Rr[2];
Rd[3] = Rd[3] && Rr[3];
Rd[4] = Rd[4] && Rr[4];
Rd[5] = Rd[5] && Rr[5];
Rd[6] = Rd[6] && Rr[6];
Rd[7] = Rd[7] && Rr[7];
SREG[4];
SREG[3] = false;
SREG[2] = Rd[7];
SREG[1] = !Rd[7] && !Rd[6] && !Rd[5] && !Rd[4] && !Rd[3] && !Rd[2] && !Rd[1] && !Rd[0];
this.PC++;
this.dataspace[_Rd] = Rd;
this.dataspace[this.sreg] = SREG;
},
andi: function(_Rd, K) {
var Rd = this.dataspace[_Rd];
var SREG = this.dataspace[this.sreg];
Rd[0] = Rd[0] && K[0];
Rd[1] = Rd[1] && K[1];
Rd[2] = Rd[2] && K[2];
Rd[3] = Rd[3] && K[3];
Rd[4] = Rd[4] && K[4];
Rd[5] = Rd[5] && K[5];
Rd[6] = Rd[6] && K[6];
Rd[7] = Rd[7] && K[7];
SREG[4];
SREG[3] = false;
SREG[2] = Rd[7];
SREG[1] = !Rd[7] && !Rd[6] && !Rd[5] && !Rd[4] && !Rd[3] && !Rd[2] && !Rd[1] && !Rd[0];
this.PC++;
this.dataspace[_Rd] = Rd;
this.dataspace[this.sreg] = SREG;
},
asr: function(_Rd) {
var Rd = this.dataspace[_Rd];
var SREG = this.dataspace[this.sreg];
SREG[0] = Rd[0];
Rd[0] = Rd[1];
Rd[1] = Rd[2];
Rd[2] = Rd[3];
Rd[3] = Rd[4];
Rd[4] = Rd[5];
Rd[5] = Rd[6];
Rd[6] = Rd[7];
Rd[7] = Rd[7];
SREG[1] = !Rd[7] && !Rd[6] && !Rd[5] && !Rd[4] && !Rd[3] && !Rd[2] && !Rd[1] && !Rd[0];
SREG[2] = Rd[7];
SREG[3] = !!(SREG[2] ^ SREG[0]);
SREG[4] = !!(SREG[2] ^ SREG[3]);
this.PC++;
this.dataspace[_Rd] = Rd;
this.dataspace[this.sreg] = SREG;
},
bclr: function(s) {
this.dataspace[this.sreg][s] = false;
this.PC++;
},
bld: function(_Rd, b) {
this.dataspace[_Rd] = this.dataspace[this.sreg][6];
this.PC++;
},
brbc: function(s, k) {
if (this.dataspace[this.sreg][s] === false)
{
this.PC = this.PC + k;
}
this.PC++;
},
brbs: function(s, k) {
if (this.dataspace[this.sreg][s] === true)
{
this.PC = this.PC + k;
}
this.PC++;
},
brcc: function(k) {
if (this.dataspace[this.sreg][0] === false)
{
this.PC = this.PC + k;
}
this.PC++;
},
brcs: function(k) {
if (this.dataspace[this.sreg][0] === true)
{
this.PC = this.PC + k;
}
this.PC++;
},
'break': function() {
this.PC++;
},
breq: function(k) {
if (this.dataspace[this.sreg][1] === true)
{
this.PC = this.PC + k;
}
this.PC++;
},
brge: function(k) {
if (this.dataspace[this.sreg][4] === false)
{
this.PC = this.PC + k;
}
this.PC++;
},
brhc: function(k) {
if (this.dataspace[this.sreg][5] === false)
{
this.PC = this.PC + k;
}
this.PC++;
},
brhs: function(k) {
if (this.dataspace[this.sreg][5] === true)
{
this.PC = this.PC + k;
}
this.PC++;
},
brid: function(k) {
if (this.dataspace[this.sreg][7] === false)
{
this.PC = this.PC + k;
}
this.PC++;
},
brie: function(k) {
if (this.dataspace[this.sreg][7] === true)
{
this.PC = this.PC + k;
}
this.PC++;
},
brlo: function(k) {
if (this.dataspace[this.sreg][0] === true)
{
this.PC = this.PC + k;
}
this.PC++;
},
brlt: function(k) {
if (this.dataspace[this.sreg][4] === true)
{
this.PC = this.PC + k;
}
this.PC++;
},
brmi: function(k) {
if (this.dataspace[this.sreg][2] === true)
{
this.PC = this.PC + k;
}
this.PC++;
},
brne: function(k) {
if (this.dataspace[this.sreg][1] === false)
{
this.PC = this.PC + k;
}
this.PC++;
},
brpl: function(k) {
if (this.dataspace[this.sreg][2] === false)
{
this.PC = this.PC + k;
}
this.PC++;
},
brsh: function(k) {
if (this.dataspace[this.sreg][0] === false)
{
this.PC = this.PC + k;
}
this.PC++;
},
brtc: function(k) {
if (this.dataspace[this.sreg][6] === false)
{
this.PC = this.PC + k;
}
this.PC++;
},
brts: function(k) {
if (this.dataspace[this.sreg][6] === true)
{
this.PC = this.PC + k;
}
this.PC++;
},
brvc: function(k) {
if (this.dataspace[this.sreg][3] === false)
{
this.PC = this.PC + k;
}
this.PC++;
},
brvs: function(k) {
if (this.dataspace[this.sreg][3] === true)
{
this.PC = this.PC + k;
}
this.PC++;
},
bset: function(s) {
this.dataspace[this.sreg][s] = true;
this.PC++;
},
bst: function(_Rd, b) {
this.dataspace[this.sreg][6] = _Rd[b];
this.PC++;
},
call: function(k) {
this.PC = k;
},
cbi: function(A, b) {
},
cbr: function(_Rd, K) {
var Rd = this.dataspace[_Rd];
var SREG = this.dataspace[this.sreg];
Rd[0] = Rd[0] && !K[0];
Rd[1] = Rd[1] && !K[1];
Rd[2] = Rd[2] && !K[2];
Rd[3] = Rd[3] && !K[3];
Rd[4] = Rd[4] && !K[4];
Rd[5] = Rd[5] && !K[5];
Rd[6] = Rd[6] && !K[6];
Rd[7] = Rd[7] && !K[7];
SREG[1] = !Rd[7] && !Rd[6] && !Rd[5] && !Rd[4] && !Rd[3] && !Rd[2] && !Rd[1] && Rd[0];
SREG[2] = Rd[7];
SREG[3] = false;
SREG[4] = !!(SREG[2] ^ SREG[3]);
this.PC++;
this.dataspace[_Rd] = Rd;
this.dataspace[this.sreg] = SREG;
},
clc: function() {
this.dataspace[this.sreg][0] = false;
this.PC++;
},
clh: function() {
this.dataspace[this.sreg][5] = false;
this.PC++;
},
cli: function() {
this.dataspace[this.sreg][7] = false;
this.PC++;
},
cln: function() {
this.dataspace[this.sreg][2] = false;
this.PC++;
},
clr: function(_Rd) {
var Rd = this.dataspace[_Rd];
var SREG = this.dataspace[this.sreg];
Rd[0] = Rd[0] !== Rd[0];
Rd[1] = Rd[1] !== Rd[1];
Rd[2] = Rd[2] !== Rd[2];
Rd[3] = Rd[3] !== Rd[3];
Rd[4] = Rd[4] !== Rd[4];
Rd[5] = Rd[5] !== Rd[5];
Rd[6] = Rd[6] !== Rd[6];
Rd[7] = Rd[7] !== Rd[7];
SREG[4] = false;
SREG[3] = false;
SREG[2] = false;
SREG[1] = true;
this.PC++;
this.dataspace[_Rd] = Rd;
this.dataspace[this.sreg] = SREG;
},
cls: function() {
this.dataspace[this.sreg][4] = false;
this.PC++;
},
clt: function() {
this.dataspace[this.sreg][6] = false;
this.PC++;
},
clv: function() {
this.dataspace[this.sreg][3] = false;
this.PC++;
},
clz: function() {
this.dataspace[this.sreg][1] = false;
this.PC++;
},
com: function(_Rd) {
var Rd = this.dataspace[_Rd];
var SREG = this.dataspace[this.sreg];
Rd[0] = !Rd[0];
Rd[1] = !Rd[1];
Rd[2] = !Rd[2];
Rd[3] = !Rd[3];
Rd[4] = !Rd[4];
Rd[5] = !Rd[5];
Rd[6] = !Rd[6];
Rd[7] = !Rd[7];
SREG[0] = true;
SREG[1] = !Rd[7] && !Rd[6] && !Rd[5] && !Rd[4] && !Rd[3] && !Rd[2] && !Rd[1] && Rd[0];
SREG[2] = Rd[7];
SREG[3] = false;
SREG[4] = !!(SREG[2] ^ SREG[3]);
this.PC++;
this.dataspace[_Rd] = Rd;
this.dataspace[this.sreg] = SREG;
},
cp: function(_Rd, _Rr) {
var Rd = this.dataspace[_Rd];
var Rr = this.dataspace[_Rr];
var R = [false, false, false, false, false, false, false, false];
var SREG = this.dataspace[this.sreg];
SREG[0] = !Rd[7] && Rr[7] || Rr[7] && R[7] || R[7] && !Rd[7];
SREG[1] = !R[7] && !R[6] && !R[5] && !R[4] && !R[3] && !R[2] && !R[1] && R[0];
SREG[2] = R[7];
SREG[3] = Rd[7] && !Rr[7] && !R[7] || !Rd[7] && Rr[7] && R[7];
SREG[4] = !!(SREG[2] ^ SREG[3]);
SREG[5] = !Rd[3] && Rr[3] || Rr[3] && R[3] || R[3] && !Rd[3];
this.PC++;
},
cpc: function(_Rd, _Rr) {
var Rd = this.dataspace[_Rd];
var Rr = this.dataspace[_Rr];
var R = [false, false, false, false, false, false, false, false];
var SREG = this.dataspace[this.sreg];
SREG[0] = !Rd[7] && Rr[7] || Rr[7] && R[7] || R[7] && !Rd[7];
SREG[1] = !R[7] && !R[6] && !R[5] && !R[4] && !R[3] && !R[2] && !R[1] && R[0];
SREG[2] = R[7];
SREG[3] = Rd[7] && !Rr[7] && !R[7] || !Rd[7] && Rr[7] && R[7];
SREG[4] = !!(SREG[2] ^ SREG[3]);
SREG[5] = !Rd[3] && Rr[3] || Rr[3] && R[3] || R[3] && !Rd[3];
this.PC++;
this.dataspace[this.sreg] = SREG;
},
cpi: function(_Rd, K) {
var Rd = kan2(this.dataspace[_Rd]);
var SREG = [false, false, false, false, false, false, false, false];
var c;
var z;
if (Rd > K)
{
c = true;
}
else
{
c = false;
}
if ((Rd - K) == 0)
{
z = true;
}
else
{
z = false;
}
SREG[0] = c;
SREG[1] = z;
this.PC++;
this.dataspace[this.sreg] = SREG;
},
cpse: function(_Rd, _Rr) {
var Rd = this.dataspace[_Rd];
var Rr = this.dataspace[_Rr];
var SREG = this.dataspace[this.sreg];
if (Rd[0] === Rr[0] && Rd[1] === Rr[1] && Rd[2] === Rr[2] && Rd[3] === Rr[3] && Rd[4] === Rr[4] && Rd[5] === Rr[5] && Rd[6] === Rr[6] && Rd[7] === Rr[7])
{
this.PC += 2;
}
else
{
this.PC++;
}
},
dec: function(_Rd) {
this.PC++;
},
des: function(K) {
},
eicall: function() {
},
eijmp: function() {
},
elpm: function() {
},
eor: function(_Rd, _Rr) {
var Rd = this.dataspace[_Rd];
var Rr = this.dataspace[_Rr];
var SREG = this.dataspace[this.sreg];
Rd[0] = Rd[0] !== Rr[0];
Rd[1] = Rd[1] !== Rr[1];
Rd[2] = Rd[2] !== Rr[2];
Rd[3] = Rd[3] !== Rr[3];
Rd[4] = Rd[4] !== Rr[4];
Rd[5] = Rd[5] !== Rr[5];
Rd[6] = Rd[6] !== Rr[6];
Rd[7] = Rd[7] !== Rr[7];
SREG[4];
SREG[3] = false;
SREG[2] = Rd[7];
SREG[1] = !Rd[7] && !Rd[6] && !Rd[5] && !Rd[4] && !Rd[3] && !Rd[2] && !Rd[1] && !Rd[0];
this.PC++;
this.dataspace[_Rd] = Rd;
this.dataspace[this.sreg] = SREG;
},
fmul: function() {
},
fmuls: function() {
},
fmulsu: function() {
},
icall: function() {
},
ijmp: function() {
},
in: function(_Rd, A) {
var Rd = this.dataspace[Rd];
var A = this.io[A];
Rd[0] = A[0];
Rd[1] = A[1];
Rd[2] = A[2];
Rd[3] = A[3];
Rd[4] = A[4];
Rd[5] = A[5];
Rd[6] = A[6];
Rd[7] = A[7];
this.PC++;
this.dataspace[_Rd] = Rd;
},
inc: function(_Rd) {
var Rd = this.dataspace[_Rd];
var R = [false, false, false, false, false, false, false, false];
var C = [false, false, false, false, false, false, false, false];
var SREG = this.dataspace[this.sreg];
C[0] = false;
R[0] = !Rd[0];
C[1] = Rd[0];
R[1] = !!(Rd[1] ^ C[1]);
C[2] = Rd[1] && C[1];
R[2] = !!(Rd[2] ^ C[2]);
C[3] = Rd[2] && C[2];
R[3] = !!(Rd[3] ^ C[3]);
C[4] = Rd[3] && C[3];
R[4] = !!(Rd[4] ^ C[4]);
C[5] = Rd[4] && C[4];
R[5] = !!(Rd[5] ^ C[5]);
C[6] = Rd[5] && C[5];
R[6] = !!(Rd[6] ^ C[6]);
C[7] = Rd[6] && C[6];
R[7] = !!(Rd[7] ^ C[7]);
SREG[1] = !R[7] && !R[6] && !R[5] && !R[4] && !R[3] && !R[2] && !R[1] && R[0];
SREG[2] = R[7];
SREG[3] = R[7] && !R[6] && !R[5] && !R[4] && !R[3] && !R[2] && !R[1] && !R[0];
SREG[4] = !!(SREG[2] ^ SREG[3]);
this.PC++;
this.dataspace[_Rd] = R;
this.dataspace[this.sreg] = SREG;
},
jmp: function(k) {
this.PC = k;
},
lac: function(Z, _Rd) {
this.PC++;
},
las: function(Z, _Rd) {
this.PC++;
},
lat: function(Z, _Rd) {
this.PC++;
},
ld: function() {
},
ldi: function(_Rd, K) {
K = hen(K);
var Rd = this.dataspace[_Rd];
Rd[0] = K[0];
Rd[1] = K[1];
Rd[2] = K[2];
Rd[3] = K[3];
Rd[4] = K[4];
Rd[5] = K[5];
Rd[6] = K[6];
Rd[7] = K[7];
this.PC++;
this.dataspace[_Rd] = Rd;
},
lds: function(_Rd, k) {
var Rd = this.dataspace[_Rd];
Rd[0] = this.ds[k][0];
Rd[1] = this.ds[k][1];
Rd[2] = this.ds[k][2];
Rd[3] = this.ds[k][3];
Rd[4] = this.ds[k][4];
Rd[5] = this.ds[k][5];
Rd[6] = this.ds[k][6];
Rd[7] = this.ds[k][7];
this.PC++;
this.dataspace[_Rd] = Rd;
},
lpm: function() {
this.PC++;
},
lsl: function(_Rd) {
var Rd = this.dataspace[_Rd];
var SREG = this.dataspace[this.sreg];
SREG[0] = Rd[7];
Rd[7] = Rd[6];
Rd[6] = Rd[5];
Rd[5] = Rd[4];
Rd[4] = Rd[3];
Rd[3] = Rd[2];
Rd[2] = Rd[1];
Rd[1] = Rd[0];
Rd[0] = false;
SREG[5] = Rd[3];
SREG[4] = !!(SREG[2] ^ SREG[3]);
SREG[3] = !!(SREG[2] ^ SREG[0]);
SREG[2] = Rd[7];
SREG[1] = !Rd[7] && !Rd[6] && !Rd[5] && !Rd[4] && !Rd[3] && !Rd[2] && !Rd[1] && !Rd[0];
this.PC++;
this.dataspace[_Rd] = Rd;
this.dataspace[this.sreg] = SREG;
},
lsr: function(_Rd) {
var Rd = this.dataspace[_Rd];
var SREG = this.dataspace[this.sreg];
SREG[0] = Rd[0];
Rd[0] = Rd[1];
Rd[1] = Rd[2];
Rd[2] = Rd[3];
Rd[3] = Rd[4];
Rd[4] = Rd[5];
Rd[5] = Rd[6];
Rd[6] = Rd[7];
Rd[7] = false;
SREG[4] = !!(SREG[2] ^ SREG[3]);
SREG[3] = !!(SREG[2] ^ SREG[0]);
SREG[2] = false;
SREG[1] = !Rd[7] && !Rd[6] && !Rd[5] && !Rd[4] && !Rd[3] && !Rd[2] && !Rd[1] && !Rd[0];
this.PC++;
this.dataspace[_Rd] = Rd;
this.dataspace[this.sreg] = SREG;
},
mov: function(_Rd, _Rr) {
var Rd = this.dataspace[_Rd];
var Rr = this.dataspace[_Rr];
Rd[0] = Rr[0];
Rd[1] = Rr[1];
Rd[2] = Rr[2];
Rd[3] = Rr[3];
Rd[4] = Rr[4];
Rd[5] = Rr[5];
Rd[6] = Rr[6];
Rd[7] = Rr[7];
this.PC++;
this.dataspace[_Rd] = Rd;
},
movw: function(_Rd, _Rr) {
var Rd = this.dataspace[_Rd];
var Rd1 = this.dataspace[_Rd + 1];
var Rr = this.dataspace[_Rr];
var Rr1 = this.dataspace[_Rr + 1];
this.PC++;
},
mul: function(_Rd, _Rr) {
var Rd = kan2(this.dataspace[_Rd]);
var Rr = kan2(this.dataspace[_Rr]);
var v = (Rd * Rr) & 0xffff;
this.dataspace[0] = hen(v & 0xff);
this.dataspace[1] = hen((v >> 7) & 0xff);
var SREG = this.dataspace[this.sreg];
this.PC++;
this.dataspace[this.sreg] = SREG;
},
muls: function() {
this.PC++;
},
mulsu: function() {
this.PC++;
},
neg: function() {
this.PC++;
},
nop: function() {
this.PC++;
},
or: function(_Rd, _Rr) {
var Rd = this.dataspace[_Rd];
var Rr = this.dataspace[_Rr];
var SREG = this.dataspace[this.sreg];
Rd[0] = Rd[0] || Rr[0];
Rd[1] = Rd[1] || Rr[1];
Rd[2] = Rd[2] || Rr[2];
Rd[3] = Rd[3] || Rr[3];
Rd[4] = Rd[4] || Rr[4];
Rd[5] = Rd[5] || Rr[5];
Rd[6] = Rd[6] || Rr[6];
Rd[7] = Rd[7] || Rr[7];
SREG[4];
SREG[3] = false;
SREG[2] = Rd[7];
SREG[1] = !Rd[7] && !Rd[6] && !Rd[5] && !Rd[4] && !Rd[3] && !Rd[2] && !Rd[1] && !Rd[0];
this.PC++;
this.dataspace[_Rd] = Rd;
this.dataspace[this.sreg] = SREG;
},
ori: function(_Rd, K) {
var Rd = this.dataspace[_Rd];
var SREG = this.dataspace[this.sreg];
Rd[0] = Rd[0] || K[0];
Rd[1] = Rd[1] || K[1];
Rd[2] = Rd[2] || K[2];
Rd[3] = Rd[3] || K[3];
Rd[4] = Rd[4] || K[4];
Rd[5] = Rd[5] || K[5];
Rd[6] = Rd[6] || K[6];
Rd[7] = Rd[7] || K[7];
SREG[4];
SREG[3] = false;
SREG[2] = Rd[7];
SREG[1] = !Rd[7] && !Rd[6] && !Rd[5] && !Rd[4] && !Rd[3] && !Rd[2] && !Rd[1] && !Rd[0];
this.PC++;
this.dataspace[_Rd] = Rd;
this.dataspace[this.sreg] = SREG;
},
out: function(A, _Rr) {
var Rr = this.dataspace[_Rr];
var v;
if (A == 0)
{
v = kan(Rr);
}
else
{
v = kan2(Rr) + " ";
}
out.value += v;
this.PC++;
},
pop: function(_Rd) {
var SPL = this.dataspace[this.spl];
var SPH = this.dataspace[this.sph];
var C = [false, false, false, false, false, false, false, false];
C[0] = false;
SPL[0] = !SPL[0];
C[1] = SPL[0];
SPL[1] = !!(SPL[1] ^ C[1]);
C[2] = SPL[1] && C[1];
SPL[2] = !!(SPL[2] ^ C[2]);
C[3] = SPL[2] && C[2];
SPL[3] = !!(SPL[3] ^ C[3]);
C[4] = SPL[3] && C[3];
SPL[4] = !!(SPL[4] ^ C[4]);
C[5] = SPL[4] && C[4];
SPL[5] = !!(SPL[5] ^ C[5]);
C[6] = SPL[5] && C[5];
SPL[6] = !!(SPL[6] ^ C[6]);
C[7] = SPL[6] && C[6];
SPL[7] = !!(SPL[7] ^ C[7]);
this.PC++;
},
push: function(_Rr) {
var Rr = this.dataspace[_Rr];
var SPL = this.dataspace[this.spl];
var SPH = this.dataspace[this.sph];
this.PC++;
},
rcall: function() {
this.PC++;
},
ret: function() {
this.PC++;
},
reti: function() {
this.PC++;
},
rjmp: function(k) {
this.PC += k + 1;
},
rol: function(_Rd) {
var Rd = this.dataspace[_Rd];
var SREG = this.dataspace[this.sreg];
SREG[5] = Rd[3];
SREG[0] = Rd[7];
Rd[7] = Rd[6];
Rd[6] = Rd[5];
Rd[5] = Rd[4];
Rd[4] = Rd[3];
Rd[3] = Rd[2];
Rd[2] = Rd[1];
Rd[1] = Rd[0];
Rd[0] = SREG[0];
SREG[2] = Rd[7];
SREG[3] = !!(SREG[2] ^ SREG[0]);
SREG[4] = !!(SREG[2] ^ SREG[3]);
SREG[1] = !Rd[0] && !Rd[1] && !Rd[2] && !Rd[3] && !Rd[4] && !Rd[5] && !Rd[6] && !Rd[7];
this.PC++;
this.dataspace[_Rd] = Rd;
this.dataspace[this.sreg] = SREG;
},
ror: function(_Rd) {
var Rd = this.dataspace[_Rd];
var SREG = this.dataspace[this.sreg];
SREG[5] = Rd[3];
SREG[0] = Rd[0];
Rd[0] = Rd[1];
Rd[1] = Rd[2];
Rd[2] = Rd[3];
Rd[3] = Rd[4];
Rd[4] = Rd[5];
Rd[5] = Rd[6];
Rd[6] = Rd[7];
Rd[7] = SREG[0];
SREG[2] = Rd[7];
SREG[3] = !!(SREG[2] ^ SREG[0]);
SREG[4] = !!(SREG[2] ^ SREG[3]);
SREG[1] = !Rd[0] && !Rd[1] && !Rd[2] && !Rd[3] && !Rd[4] && !Rd[5] && !Rd[6] && !Rd[7];
this.PC++;
this.dataspace[_Rd] = Rd;
this.dataspace[this.sreg] = SREG;
},
sbc: function(_Rd, _Rr) {
this.PC++;
},
sbci: function(_Rd, K) {
this.PC++;
},
sbi: function(A, b) {
this.io[A][b] = true;
this.PC++;
},
sbic: function(A, b) {
if (this.io[A][b] === false)
{
this.PC += 2;
}
else
{
this.PC++;
}
},
sbis: function(A, b) {
if (this.io[A][b] === true)
{
this.PC += 2;
}
else
{
this.PC++;
}
},
sbiw: function(_Rd, K) {
},
sbr: function(_Rd, K) {
var Rd = this.dataspace[_Rd];
var SREG = this.dataspace[this.ssreg];
Rd[0] = Rd[0] || K[0];
Rd[1] = Rd[1] || K[1];
Rd[2] = Rd[2] || K[2];
Rd[3] = Rd[3] || K[3];
Rd[4] = Rd[4] || K[4];
Rd[5] = Rd[5] || K[5];
Rd[6] = Rd[6] || K[6];
Rd[7] = Rd[7] || K[7];
SREG[1] = !Rd[7] && !Rd[6] && !Rd[5] && !Rd[4] && !Rd[3] && !Rd[2] && !Rd[1] && !Rd[0];
SREG[2] = Rd[7];
SREG[3] = false;
SREG[4] = !!(this.dataspace[2] ^ this.dataspace[3]);
this.PC++;
this.dataspace[_Rd] = Rd;
this.dataspace[this.sreg] = SREG;
},
sbrc: function(_Rr, b) {
if (this.dataspace[_Rr][b] === false)
{
this.PC += 2;
}
else
{
this.PC++;
}
},
sbrs: function(_Rr, b) {
if (this.dataspace[_Rr][b] === true)
{
this.PC += 2;
}
else
{
this.PC++;
}
},
sec: function() {
this.dataspace[this.sreg][0] = true;
this.PC++;
},
seh: function() {
this.dataspace[this.sreg][5] = true;
this.PC++;
},
sei: function() {
this.dataspace[this.sreg][7] = true;
this.PC++;
},
sen: function() {
this.dataspace[this.sreg][2] = true;
this.PC++;
},
ser: function(_Rd) {
var Rd = this.dataspace[_Rd];
Rd[0] = true;
Rd[1] = true;
Rd[2] = true;
Rd[3] = true;
Rd[4] = true;
Rd[5] = true;
Rd[6] = true;
Rd[7] = true;
this.PC++;
this.dataspace[_Rd] = Rd;
},
ses: function() {
SREG[4] = true;
this.PC++;
},
set: function() {
SREG[6] = true;
this.PC++;
},
sev: function() {
SREG[3] = true;
this.PC++;
},
sez: function() {
SREG[1] = true;
this.PC++;
},
sleep: function() {
this.PC++;
},
spm: function() {
this.PC++;
},
st: function() {
this.PC++;
},
sts: function(k, _Rr) {
this.memory[k] = this.dataspace[_Rr];
this.PC += 2;
},
sub: function(_Rd, _Rr) {
var Rd = kan2(this.dataspace[_Rd]);
var Rr = kan2(this.dataspace[_Rr]);
var v = (Rd - Rr) & 0xff;
this.dataspace[_Rd] = hen(v);
var SREG = this.dataspace[this.sreg];
this.PC++;
this.dataspace[this.sreg] = SREG;
},
subi: function(_Rd, K) {
var Rd = kan2(this.dataspace[_Rd]);
var v = (Rd - K) & 0xff;
this.dataspace[_Rd] = hen(v);
this.PC++;
},
swap: function(_Rd) {
var Rd = this.dataspace[_Rd];
var R = [false, false, false, false, false, false, false, false];
R[7] = Rd[3];
R[6] = Rd[2];
R[5] = Rd[1];
R[4] = Rd[0];
R[3] = Rd[7];
R[2] = Rd[6];
R[1] = Rd[5];
R[0] = Rd[4];
this.PC++;
this.dataspace[_Rd] = R;
},
tst: function(_Rd) {
var Rd = this.dataspace[_Rd];
var SREG = this.dataspace[this.sreg];
Rd[0] = Rd[0] && Rd[0];
Rd[1] = Rd[1] && Rd[1];
Rd[2] = Rd[2] && Rd[2];
Rd[3] = Rd[3] && Rd[3];
Rd[4] = Rd[4] && Rd[4];
Rd[5] = Rd[5] && Rd[5];
Rd[6] = Rd[6] && Rd[6];
Rd[7] = Rd[7] && Rd[7];
SREG[1] = !Rd[0] && !Rd[1] && !Rd[2] && !Rd[3] && !Rd[4] && !Rd[5] && !Rd[6] && !Rd[7];
SREG[2] = Rd[7];
SREG[3] = false;
SREG[4] = !!(SREG[2] ^ SREG[3]);
this.PC++;
this.dataspace[_Rd] = Rd;
this.dataspace[this.sreg] = SREG;
},
wd: function() {
this.PC++;
}
};
成果物
以上。
