public final void register(InstructionSet is)
	{
		int base;
		Instruction i;

		// r2m
		for(int sz = 0; sz < 2; sz++)
		{
			if(sz == 0)
			{
				//word
				base = 0x0188;
				i = new Instruction() {
					public int execute(int opcode)
					{
						return r2m_word(opcode);
					}
					public DisassembledInstruction disassemble(int address, int opcode)
					{
						return disassembleOp(address, opcode, Size.Word, true);
					}
				};
			}
			else
			{
				// long
				base = 0x01c8;
				i = new Instruction() {
					public int execute(int opcode)
					{
						return r2m_long(opcode);
					}
					public DisassembledInstruction disassemble(int address, int opcode)
					{
						return disassembleOp(address, opcode, Size.Long, true);
					}
				};
			}

			for(int dreg = 0; dreg < 8; dreg++)
			{
				for(int areg = 0; areg < 8; areg++)
				{
					is.addInstruction(base + (dreg << 9) + areg, i);
				}
			}
		}

		// m2r
		for(int sz = 0; sz < 2; sz++)
		{
			if(sz == 0)
			{
				//word
				base = 0x0108;
				i = new Instruction() {
					public int execute(int opcode)
					{
						return m2r_word(opcode);
					}
					public DisassembledInstruction disassemble(int address, int opcode)
					{
						return disassembleOp(address, opcode, Size.Word, false);
					}
				};
			}
			else
			{
				// long
				base = 0x0148;
				i = new Instruction() {
					public int execute(int opcode)
					{
						return m2r_long(opcode);
					}
					public DisassembledInstruction disassemble(int address, int opcode)
					{
						return disassembleOp(address, opcode, Size.Long, false);
					}
				};
			}

			for(int dreg = 0; dreg < 8; dreg++)
			{
				for(int areg = 0; areg < 8; areg++)
				{
					is.addInstruction(base + (dreg << 9) + areg, i);
				}
			}
		}
	}