emu: comment remaining opcodes as todo/unimplemented
This commit is contained in:
@@ -465,6 +465,7 @@ impl i8088 {
|
|||||||
0x24 => and[flags, reglo=a, d8] / 4, // AND al, d8
|
0x24 => and[flags, reglo=a, d8] / 4, // AND al, d8
|
||||||
0x25 => and[flags, reg=a, d16] / 4, // AND ax, d16
|
0x25 => and[flags, reg=a, d16] / 4, // AND ax, d16
|
||||||
0x26 => nop[seg=es, prefix] / 2,
|
0x26 => nop[seg=es, prefix] / 2,
|
||||||
|
// 0x27 DAA not implemented
|
||||||
0x28 _ => sub[flags, modrm8, r8] / "3/24+", // SUB r/m8, r8
|
0x28 _ => sub[flags, modrm8, r8] / "3/24+", // SUB r/m8, r8
|
||||||
0x29 _ => sub[flags, modrm16, r16] / "3/24+", // SUB r/m16, r16
|
0x29 _ => sub[flags, modrm16, r16] / "3/24+", // SUB r/m16, r16
|
||||||
0x2A _ => sub[flags, r8, modrm8] / "3/13+", // SUB r8, r/m8
|
0x2A _ => sub[flags, r8, modrm8] / "3/13+", // SUB r8, r/m8
|
||||||
@@ -472,6 +473,7 @@ impl i8088 {
|
|||||||
0x2C => sub[flags, reglo=a, d8] / 4, // SUB al, d8
|
0x2C => sub[flags, reglo=a, d8] / 4, // SUB al, d8
|
||||||
0x2D => sub[flags, reg=a, d16] / 4, // SUB ax, d16
|
0x2D => sub[flags, reg=a, d16] / 4, // SUB ax, d16
|
||||||
0x2E => nop[seg=cs, prefix] / 2,
|
0x2E => nop[seg=cs, prefix] / 2,
|
||||||
|
// 0x2F DAS not implemented
|
||||||
0x30 _ => xor[flags, modrm8, r8] / "3/24+", // XOR r/m8, r8
|
0x30 _ => xor[flags, modrm8, r8] / "3/24+", // XOR r/m8, r8
|
||||||
0x31 _ => xor[flags, modrm16, r16] / "3/24+", // XOR r/m16, r16
|
0x31 _ => xor[flags, modrm16, r16] / "3/24+", // XOR r/m16, r16
|
||||||
0x32 _ => xor[flags, r8, modrm8] / "3/13+", // XOR r8, r/m8
|
0x32 _ => xor[flags, r8, modrm8] / "3/13+", // XOR r8, r/m8
|
||||||
@@ -479,6 +481,7 @@ impl i8088 {
|
|||||||
0x34 => xor[flags, reglo=a, d8] / 4, // XOR al, d8
|
0x34 => xor[flags, reglo=a, d8] / 4, // XOR al, d8
|
||||||
0x35 => xor[flags, reg=a, d16] / 4, // XOR ax, d16
|
0x35 => xor[flags, reg=a, d16] / 4, // XOR ax, d16
|
||||||
0x36 => nop[seg=ss, prefix] / 2,
|
0x36 => nop[seg=ss, prefix] / 2,
|
||||||
|
// 0x37 AAA not implemented
|
||||||
0x38 _ => cmp[flags, modrm8, r8] / "3/24+",
|
0x38 _ => cmp[flags, modrm8, r8] / "3/24+",
|
||||||
0x39 _ => cmp[flags, modrm16, r16] / "3/24+",
|
0x39 _ => cmp[flags, modrm16, r16] / "3/24+",
|
||||||
0x3A _ => cmp[flags, r8, modrm8] / "3/24+",
|
0x3A _ => cmp[flags, r8, modrm8] / "3/24+",
|
||||||
@@ -486,6 +489,7 @@ impl i8088 {
|
|||||||
0x3C => cmp[flags, reglo=a, d8] / "3/24+",
|
0x3C => cmp[flags, reglo=a, d8] / "3/24+",
|
||||||
0x3D => cmp[flags, reg=a, d16] / "3/24+",
|
0x3D => cmp[flags, reg=a, d16] / "3/24+",
|
||||||
0x3E => nop[seg=ds, prefix] / 2,
|
0x3E => nop[seg=ds, prefix] / 2,
|
||||||
|
// 0x3F AAS not implemented
|
||||||
0x40 => inc[flags, reg=a] / 3,
|
0x40 => inc[flags, reg=a] / 3,
|
||||||
0x41 => inc[flags, reg=c] / 3,
|
0x41 => inc[flags, reg=c] / 3,
|
||||||
0x42 => inc[flags, reg=d] / 3,
|
0x42 => inc[flags, reg=d] / 3,
|
||||||
@@ -590,6 +594,8 @@ impl i8088 {
|
|||||||
0x97 => xchg[reg=a, reg=di] / 3, // XCHG ax, di
|
0x97 => xchg[reg=a, reg=di] / 3, // XCHG ax, di
|
||||||
0x98 => cbw[reg=a, reglo=a] / 2, // CBW
|
0x98 => cbw[reg=a, reglo=a] / 2, // CBW
|
||||||
0x99 => cwd[reg=d, reg=a] / 5, // CWD
|
0x99 => cwd[reg=d, reg=a] / 5, // CWD
|
||||||
|
// 0x9A CALL seg:a16 todo
|
||||||
|
// 0x9B WAIT not implemented
|
||||||
0x9C => push[bus, regval=ss, reg=sp, flags] / 14, // PUSHF
|
0x9C => push[bus, regval=ss, reg=sp, flags] / 14, // PUSHF
|
||||||
0x9D => pop[bus, regval=ss, reg=sp, flags] / 12, // POPF
|
0x9D => pop[bus, regval=ss, reg=sp, flags] / 12, // POPF
|
||||||
// 0x9E SAHF not implemented
|
// 0x9E SAHF not implemented
|
||||||
@@ -626,10 +632,18 @@ impl i8088 {
|
|||||||
0xBD => mov[reg=bp, d16] / 4, // MOV bp, d16
|
0xBD => mov[reg=bp, d16] / 4, // MOV bp, d16
|
||||||
0xBE => mov[reg=si, d16] / 4, // MOV si, d16
|
0xBE => mov[reg=si, d16] / 4, // MOV si, d16
|
||||||
0xBF => mov[reg=di, d16] / 4, // MOV di, d16
|
0xBF => mov[reg=di, d16] / 4, // MOV di, d16
|
||||||
|
// 0xC2 RET d16 todo
|
||||||
0xC3 => pop[bus, regval=ss, reg=sp, reg=ip] / 20, // RET
|
0xC3 => pop[bus, regval=ss, reg=sp, reg=ip] / 20, // RET
|
||||||
|
// 0xC4 LES todo
|
||||||
|
// 0xC5 LDS todo
|
||||||
0xC6: { 0x00 => mov[modrm8, d8] / "4/14+" }, // MOV r/m8, d8
|
0xC6: { 0x00 => mov[modrm8, d8] / "4/14+" }, // MOV r/m8, d8
|
||||||
0xC7: { 0x00 => mov[modrm16, d16] / "4/14+" }, // MOV r/m16, d16
|
0xC7: { 0x00 => mov[modrm16, d16] / "4/14+" }, // MOV r/m16, d16
|
||||||
|
// 0xCA RETF d16 todo
|
||||||
|
// 0xCB RETF todo
|
||||||
|
// 0xCC INT3/bend todo
|
||||||
0xCD => int[cpu, bus, d8] / 71,
|
0xCD => int[cpu, bus, d8] / 71,
|
||||||
|
// 0xCE INTO todo?
|
||||||
|
// 0xCF IRET todo
|
||||||
0xD0: { 0x00 => rol[form=byte3, flags, modrm8, const=1u8] / "2/23+", // ROL r/m16, 1
|
0xD0: { 0x00 => rol[form=byte3, flags, modrm8, const=1u8] / "2/23+", // ROL r/m16, 1
|
||||||
0x08 => ror[form=byte3, flags, modrm8, const=1u8] / "2/23+", // ROR r/m16, 1
|
0x08 => ror[form=byte3, flags, modrm8, const=1u8] / "2/23+", // ROR r/m16, 1
|
||||||
0x10 => rcl[form=byte3, flags, modrm8, const=1u8] / "2/23+", // RCL r/m16, 1
|
0x10 => rcl[form=byte3, flags, modrm8, const=1u8] / "2/23+", // RCL r/m16, 1
|
||||||
@@ -658,30 +672,60 @@ impl i8088 {
|
|||||||
0x20 => shl[form=word3, flags, modrm16, reglo=c] / "2/23+", // SHL r/m16, CL
|
0x20 => shl[form=word3, flags, modrm16, reglo=c] / "2/23+", // SHL r/m16, CL
|
||||||
0x28 => shr[form=word3, flags, modrm16, reglo=c] / "2/23+", // SHR r/m16, CL
|
0x28 => shr[form=word3, flags, modrm16, reglo=c] / "2/23+", // SHR r/m16, CL
|
||||||
0x38 => sar[form=word3, flags, modrm16, reglo=c] / "2/23+" }, // SAR r/m16, CL
|
0x38 => sar[form=word3, flags, modrm16, reglo=c] / "2/23+" }, // SAR r/m16, CL
|
||||||
|
// 0xD4 AAM not implemented
|
||||||
|
// 0xD5 AAD not implemented
|
||||||
|
// 0xD6 *SALC todo? (unneeded but looks easy)
|
||||||
|
// 0xD7 XLAT todo
|
||||||
|
// 0xD8-0xDF ESC0-ESC7 not implemented
|
||||||
0xE0 => loopnz[flags, reg=ip, reg=c, rel8] / "18/6", // LOOPNZ/LOOPNE rel8
|
0xE0 => loopnz[flags, reg=ip, reg=c, rel8] / "18/6", // LOOPNZ/LOOPNE rel8
|
||||||
0xE1 => loopz[flags, reg=ip, reg=c, rel8] / "18/6", // LOOPZ/LOOPE rel8
|
0xE1 => loopz[flags, reg=ip, reg=c, rel8] / "18/6", // LOOPZ/LOOPE rel8
|
||||||
0xE2 => looop[reg=ip, reg=c, rel8] / "17/5", // LOOP rel8
|
0xE2 => looop[reg=ip, reg=c, rel8] / "17/5", // LOOP rel8
|
||||||
0xE3 => jcxz[reg=ip, reg=c, rel8] / "18/6", // JCXZ rel8
|
0xE3 => jcxz[reg=ip, reg=c, rel8] / "18/6", // JCXZ rel8
|
||||||
0xE9 => jmp[reg=ip, rel16] / 15, // JMP rel16
|
// 0xE4 IN AL,[d8] todo
|
||||||
0xEB => jmp[reg=ip, rel8] / 15, // JMP rel8
|
// 0xE5 IN AX,[d16] todo
|
||||||
|
// 0xE6 OUT [d8],AL todo
|
||||||
|
// 0xE7 OUT [d16],AX todo
|
||||||
0xE8 => call[reg=ip, bus, regval=ss, reg=sp, rel16] / 23, // CALL rel16
|
0xE8 => call[reg=ip, bus, regval=ss, reg=sp, rel16] / 23, // CALL rel16
|
||||||
|
0xE9 => jmp[reg=ip, rel16] / 15, // JMP rel16
|
||||||
|
// 0xEA JMP seg:a16 todo
|
||||||
|
0xEB => jmp[reg=ip, rel8] / 15, // JMP rel8
|
||||||
|
// 0xEC IN AL,[DX] todo
|
||||||
|
// 0xED IN AX,[DX] todo
|
||||||
|
// 0xEE OUT [DX],AL todo
|
||||||
|
// 0xEF OUT [DX],AX todo
|
||||||
|
// 0xF0 not implemented
|
||||||
0xF2 => nop[rep=NotEqual, prefix] / 0, // REPNE/REPNZ
|
0xF2 => nop[rep=NotEqual, prefix] / 0, // REPNE/REPNZ
|
||||||
0xF3 => nop[rep=Equal, prefix] / 0, // REP/REPE/REPZ
|
0xF3 => nop[rep=Equal, prefix] / 0, // REP/REPE/REPZ
|
||||||
|
// 0xF4 HLT not implemented (consider making this todo)
|
||||||
0xF5 => cmc[flags] / 2, // CMC (Complement Carry Flag)
|
0xF5 => cmc[flags] / 2, // CMC (Complement Carry Flag)
|
||||||
0xF6: { 0x00 => test[flags, modrm8, d8] / "5/11+", // TEST r/m8, d8
|
0xF6: { 0x00 => test[flags, modrm8, d8] / "5/11+", // TEST r/m8, d8
|
||||||
0x10 => not[form=byte1, modrm8] / "3/24+", // NOT r/m8
|
0x10 => not[form=byte1, modrm8] / "3/24+", // NOT r/m8
|
||||||
0x18 => neg[form=byte1, flags, modrm8] / "3/24+" }, // NEG r/m8
|
0x18 => neg[form=byte1, flags, modrm8] / "3/24+" // NEG r/m8
|
||||||
|
// 0x20 MUL r/m8 todo
|
||||||
|
// 0x28 IMUL r/m8 todo
|
||||||
|
// 0x30 DIV r/m8 todo
|
||||||
|
/* 0x38 IDIV r/m8 todo */ },
|
||||||
0xF7: { 0x00 => test[flags, modrm16, d16] / "5/11+", // TEST r/m16, d16
|
0xF7: { 0x00 => test[flags, modrm16, d16] / "5/11+", // TEST r/m16, d16
|
||||||
0x10 => not[form=word1, modrm16] / "3/24+", // NOT r/m16
|
0x10 => not[form=word1, modrm16] / "3/24+", // NOT r/m16
|
||||||
0x18 => neg[form=word1, flags, modrm16] / "3/24+" }, // NEG r/m16
|
0x18 => neg[form=word1, flags, modrm16] / "3/24+" // NEG r/m16
|
||||||
|
// 0x20 MUL r/m16 todo
|
||||||
|
// 0x28 IMUL r/m16 todo
|
||||||
|
// 0x30 DIV r/m16 todo
|
||||||
|
/* 0x38 IDIV r/m16 todo */ },
|
||||||
0xF8 => clc[flags] / 2, // CLC (Clear Carry Flag)
|
0xF8 => clc[flags] / 2, // CLC (Clear Carry Flag)
|
||||||
0xF9 => stc[flags] / 2, // STC (Set Carry Flag)
|
0xF9 => stc[flags] / 2, // STC (Set Carry Flag)
|
||||||
|
// 0xFA CLI todo
|
||||||
|
// 0xFB STI todo
|
||||||
0xFC => cld[flags] / 2, // CLD (Clear Direction Flag)
|
0xFC => cld[flags] / 2, // CLD (Clear Direction Flag)
|
||||||
0xFD => std[flags] / 2, // STD (Set Direction Flag)
|
0xFD => std[flags] / 2, // STD (Set Direction Flag)
|
||||||
0xFE: { 0x00 => inc[form=byte1, flags, modrm8] / "3/23+", // INC r/m8
|
0xFE: { 0x00 => inc[form=byte1, flags, modrm8] / "3/23+", // INC r/m8
|
||||||
0x08 => dec[form=byte1, flags, modrm8] / "3/23+", }, // DEC r/m8
|
0x08 => dec[form=byte1, flags, modrm8] / "3/23+", }, // DEC r/m8
|
||||||
0xFF: { 0x00 => inc[form=word1, flags, modrm16] / "3/23+", // INC r/m16
|
0xFF: { 0x00 => inc[form=word1, flags, modrm16] / "3/23+", // INC r/m16
|
||||||
0x08 => dec[form=word1, flags, modrm16] / "3/23+", // DEC r/m16
|
0x08 => dec[form=word1, flags, modrm16] / "3/23+", // DEC r/m16
|
||||||
|
// 0x10 CALL r/m16 todo
|
||||||
|
// 0x18 CALL m32 todo
|
||||||
|
// 0x20 JMP r/m16 todo
|
||||||
|
// 0x28 JMP m32 todo
|
||||||
0x30 => push_modrm[regval=ss, reg=sp, modrm16, convert, bus] / "15/24+" },
|
0x30 => push_modrm[regval=ss, reg=sp, modrm16, convert, bus] / "15/24+" },
|
||||||
},
|
},
|
||||||
modrm: {
|
modrm: {
|
||||||
|
|||||||
Reference in New Issue
Block a user