0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

概要

micropythonでshrike-lite、やってみた。
verilogでAVRを書く。
javascriptでavrのシミュレーター書いてみた。
rom化に使用する。

写真

image.png

投入したソースコード

    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++;
	}
};



成果物

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?