O2Hawk: Finish disasm, start execution
This commit is contained in:
parent
c427d280ba
commit
138a2bcef5
|
@ -56,214 +56,214 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
"XCH A,R5", // 2d
|
||||
"XCH A,R6", // 2e
|
||||
"XCH A,R7", // 2f
|
||||
"LEAX ix16", // 30
|
||||
"LEAY ix16", // 31
|
||||
"LEAS ix16", // 32
|
||||
"LEAU ix16", // 33
|
||||
"PSHS i8", // 34
|
||||
"PULS i8", // 35
|
||||
"PSHU i8", // 36
|
||||
"PULU i8", // 37
|
||||
"XCHD A,@R0", // 30
|
||||
"XCHD A,@R1", // 31
|
||||
"JPB 1", // 32
|
||||
"???", // 33
|
||||
"CALL 1", // 34
|
||||
"DN", // 35
|
||||
"JP T0", // 36
|
||||
"COM A", // 37
|
||||
"???", // 38
|
||||
"RTS", // 39
|
||||
"ABX", // 3a
|
||||
"RTI", // 3b
|
||||
"CWAI i8", // 3c
|
||||
"MUL", // 3d
|
||||
"???", // 3e
|
||||
"SWI1", // 3f
|
||||
"NEG A", // 40
|
||||
"???", // 41
|
||||
"???", // 42
|
||||
"COM A", // 43
|
||||
"LSR A", // 44
|
||||
"???", // 45
|
||||
"ROR A", // 46
|
||||
"ASR A", // 47
|
||||
"ASL A", // 48
|
||||
"ROL A", // 49
|
||||
"DEC A", // 4a
|
||||
"???", // 4b
|
||||
"INC A", // 4c
|
||||
"TST A", // 4d
|
||||
"???", // 4e
|
||||
"CLR A", // 4f
|
||||
"NEG B", // 50
|
||||
"???", // 51
|
||||
"???", // 52
|
||||
"COM B", // 53
|
||||
"LSR B", // 54
|
||||
"???", // 55
|
||||
"ROR B", // 56
|
||||
"ASR B", // 57
|
||||
"ASL B", // 58
|
||||
"ROL B", // 59
|
||||
"DEC B", // 5a
|
||||
"???", // 5b
|
||||
"INC B", // 5c
|
||||
"TST B", // 5d
|
||||
"???", // 5e
|
||||
"CLR B", // 5f
|
||||
"NEG ix16", // 60
|
||||
"???", // 61
|
||||
"???", // 62
|
||||
"COM ix16", // 63
|
||||
"LSR ix16", // 64
|
||||
"???", // 65
|
||||
"ROR ix16", // 66
|
||||
"ASR ix16", // 67
|
||||
"ASL ix16", // 68
|
||||
"ROL ix16", // 69
|
||||
"DEC ix16", // 6a
|
||||
"???", // 6b
|
||||
"INC ix16", // 6c
|
||||
"TST ix16", // 6d
|
||||
"JMP ix16", // 6e
|
||||
"CLR ix16", // 6f
|
||||
"NEG ex16", // 70
|
||||
"???", // 71
|
||||
"???", // 72
|
||||
"COM ex16", // 73
|
||||
"LSR ex16", // 74
|
||||
"???", // 75
|
||||
"ROR ex16", // 76
|
||||
"ASR ex16", // 77
|
||||
"ASL ex16", // 78
|
||||
"ROL ex16", // 79
|
||||
"DEC ex16", // 7a
|
||||
"???", // 7b
|
||||
"INC ex16", // 7c
|
||||
"TST ex16", // 7d
|
||||
"JMP ex16", // 7e
|
||||
"CLR ex16", // 7f
|
||||
"SUB A,i8", // 80
|
||||
"CMP A,i8", // 81
|
||||
"SBC A,i8", // 82
|
||||
"SUB D,i16", // 83
|
||||
"AND A,i8", // 84
|
||||
"BIT A,i8", // 85
|
||||
"LD A,i8", // 86
|
||||
"OUT P1", // 39
|
||||
"OUT P2", // 3a
|
||||
"???", // 3b
|
||||
"MOV P4,A", // 3c
|
||||
"MOV P5,A", // 3d
|
||||
"MOV P6,A", // 3e
|
||||
"MOV P7,A", // 3f
|
||||
"OR A,@R0", // 40
|
||||
"OR A,@R1", // 41
|
||||
"MOV A,TIM", // 42
|
||||
"OR A,i8", // 43
|
||||
"JP 2K 2", // 44
|
||||
"START CNT", // 45
|
||||
"JP NT1", // 46
|
||||
"SWP", // 47
|
||||
"OR A,R0", // 48
|
||||
"OR A,R1", // 49
|
||||
"OR A,R2", // 4a
|
||||
"OR A,R3", // 4b
|
||||
"OR A,R4", // 4c
|
||||
"OR A,R5", // 4d
|
||||
"OR A,R6", // 4e
|
||||
"OR A,R7", // 4f
|
||||
"AND A,@R0", // 50
|
||||
"AND A,@R1", // 51
|
||||
"JPB 2", // 52
|
||||
"AND A,i8", // 53
|
||||
"CALL 2", // 54
|
||||
"START TIM", // 55
|
||||
"JP T1", // 56
|
||||
"DAA", // 57
|
||||
"AND A,R0", // 58
|
||||
"AND A,R1", // 59
|
||||
"AND A,R2", // 5a
|
||||
"AND A,R3", // 5b
|
||||
"AND A,R4", // 5c
|
||||
"AND A,R5", // 5d
|
||||
"AND A,R6", // 5e
|
||||
"AND A,R7", // 5f
|
||||
"ADD A,@R0", // 60
|
||||
"ADD A,@R1", // 61
|
||||
"MOV TIM,A", // 62
|
||||
"???", // 63
|
||||
"JP 2K 3", // 64
|
||||
"STOP CNT", // 65
|
||||
"???", // 66
|
||||
"RRC", // 67
|
||||
"ADD A,R0", // 68
|
||||
"ADD A,R1", // 69
|
||||
"ADD A,R2", // 6a
|
||||
"ADD A,R3", // 6b
|
||||
"ADD A,R4", // 6c
|
||||
"ADD A,R5", // 6d
|
||||
"ADD A,R6", // 6e
|
||||
"ADD A,R7", // 6f
|
||||
"ADC A,@R0", // 70
|
||||
"ADC A,@R1", // 71
|
||||
"JPB 3", // 72
|
||||
"???", // 73
|
||||
"CALL 3", // 74
|
||||
"ENT0 CLK", // 75
|
||||
"JP F1", // 76
|
||||
"ROR", // 77
|
||||
"ADC A,R0", // 78
|
||||
"ADC A,R1", // 79
|
||||
"ADC A,R2", // 7a
|
||||
"ADC A,R3", // 7b
|
||||
"ADC A,R4", // 7c
|
||||
"ADC A,R5", // 7d
|
||||
"ADC A,R6", // 7e
|
||||
"ADC A,R7", // 7f
|
||||
"MOVX A,@R0", // 80
|
||||
"MOVX A,@R1", // 81
|
||||
"???", // 82
|
||||
"RET", // 83
|
||||
"JP 2K 4", // 84
|
||||
"CLR F0", // 85
|
||||
"JP !IRQ", // 86
|
||||
"???", // 87
|
||||
"EOR A,i8", // 88
|
||||
"ADC A,i8", // 89
|
||||
"OR A,i8", // 8a
|
||||
"ADD A,i8", // 8b
|
||||
"CMP X,i16", // 8c
|
||||
"BSR i8", // 8d
|
||||
"LD X,i16", // 8e
|
||||
"???", // 8f
|
||||
"SUB A,DP+i8", // 90
|
||||
"CMP A,DP+i8", // 91
|
||||
"SBC A,DP+i8", // 92
|
||||
"SUB D,DP+i8", // 93
|
||||
"AND A,DP+i8", // 94
|
||||
"BIT A,DP+i8", // 95
|
||||
"LD A,DP+i8", // 96
|
||||
"ST A,DP+i8", // 97
|
||||
"EOR A,DP+i8", // 98
|
||||
"ADC A,DP+i8", // 99
|
||||
"OR A,DP+i8", // 9a
|
||||
"ADD A,DP+i8", // 9b
|
||||
"CMP X,DP+i8", // 9c
|
||||
"JSR DP+i8", // 9d
|
||||
"LD X,DP+i8", // 9e
|
||||
"ST X,DP+i8", // 9f
|
||||
"SUB A,ix16", // a0
|
||||
"CMP A,ix16", // a1
|
||||
"SBC A,ix16", // a2
|
||||
"SUB D,ix16", // a3
|
||||
"AND A,ix16", // a4
|
||||
"BIT A,ix16", // a5
|
||||
"LD A,ix16", // a6
|
||||
"ST A,ix16", // a7
|
||||
"EOR A,ix16", // a8
|
||||
"ADC A,ix16", // a9
|
||||
"OR A,ix16", // aa
|
||||
"ADD A,ix16", // ab
|
||||
"CMP X,ix16", // ac
|
||||
"JSR ix16", // ad
|
||||
"LD X,ix16", // ae
|
||||
"ST X,ix16", // af
|
||||
"SUB A,ex16", // b0
|
||||
"CMP A,ex16", // b1
|
||||
"SBC A,ex16", // b2
|
||||
"SUB D,ex16", // b3
|
||||
"AND A,ex16", // b4
|
||||
"BIT A,ex16", // b5
|
||||
"LD A,ex16", // b6
|
||||
"ST A,ex16", // b7
|
||||
"EOR A,ex16", // b8
|
||||
"ADC A,ex16", // b9
|
||||
"OR A,ex16", // ba
|
||||
"ADD A,ex16", // bb
|
||||
"CMP X,ex16", // bc
|
||||
"JSR ex16", // bd
|
||||
"LD X,ex16", // be
|
||||
"ST X,ex16", // bf
|
||||
"SUB B,i8", // c0
|
||||
"CMP B,i8", // c1
|
||||
"SBC B,i8", // c2
|
||||
"ADD D,i16", // c3
|
||||
"AND B,i8", // c4
|
||||
"BIT B,i8", // c5
|
||||
"LD B,i8", // c6
|
||||
"???", // c7
|
||||
"EOR B,i8", // c8
|
||||
"ADC B,i8", // c9
|
||||
"OR B,i8", // ca
|
||||
"ADD B,i8", // cb
|
||||
"LD D,i16", // cc
|
||||
"???", // cd
|
||||
"LD U,i16", // ce
|
||||
"???", // cf
|
||||
"SUB B,DP+i8", // d0
|
||||
"CMP B,DP+i8", // d1
|
||||
"SBC B,DP+i8", // d2
|
||||
"ADD D,DP+i8", // d3
|
||||
"AND B,DP+i8", // d4
|
||||
"BIT B,DP+i8", // d5
|
||||
"LD B,DP+i8", // d6
|
||||
"ST B,DP+i8", // d7
|
||||
"EOR B,DP+i8", // d8
|
||||
"ADC B,DP+i8", // d9
|
||||
"OR B,DP+i8", // da
|
||||
"ADD B,DP+i8", // db
|
||||
"LD D,DP+i8", // dc
|
||||
"ST D,DP+i8", // dd
|
||||
"LD U,DP+i8", // de
|
||||
"ST U,DP+i8", // df
|
||||
"SUB B,ix16", // e0
|
||||
"CMP B,ix16", // e1
|
||||
"SBC B,ix16", // e2
|
||||
"ADD D,ix16", // e3
|
||||
"AND B,ix16", // e4
|
||||
"BIT B,ix16", // e5
|
||||
"LD B,ix16", // e6
|
||||
"ST B,ix16", // e7
|
||||
"EOR B,ix16", // e8
|
||||
"ADC B,ix16", // e9
|
||||
"OR B,ix16", // ea
|
||||
"ADD B,ix16", // eb
|
||||
"LD D,ix16", // ec
|
||||
"ST D,ix16", // ed
|
||||
"LD U,ix16", // ee
|
||||
"ST U,ix16", // ef
|
||||
"SUB B,ex16", // f0
|
||||
"CMP B,ex16", // f1
|
||||
"SBC B,ex16", // f2
|
||||
"ADD D,ex16", // f3
|
||||
"AND B,ex16", // f4
|
||||
"BIT B,ex16", // f5
|
||||
"LD B,ex16", // f6
|
||||
"ST B,ex16", // f7
|
||||
"EOR B,ex16", // f8
|
||||
"ADC B,ex16", // f9
|
||||
"OR B,ex16", // fa
|
||||
"ADD B,ex16", // fb
|
||||
"LD D,ex16", // fc
|
||||
"ST D,ex16", // fd
|
||||
"LD U,ex16", // fe
|
||||
"ST U,ex16", // ff
|
||||
"OR BUS,i8", // 88
|
||||
"OR P1,i8", // 89
|
||||
"OR P2,i8", // 8a
|
||||
"???", // 8b
|
||||
"OR P4,A", // 8c
|
||||
"OR P5,A", // 8d
|
||||
"OR P6,A", // 8e
|
||||
"OR P7,A", // 8f
|
||||
"MOVX @R0,A", // 90
|
||||
"MOVX @R1,A", // 91
|
||||
"JPB 4", // 92
|
||||
"RETR", // 93
|
||||
"CALL 4", // 94
|
||||
"COM F0", // 95
|
||||
"JP A!=0", // 96
|
||||
"CLR C", // 97
|
||||
"AND BUS,i8", // 98
|
||||
"AND P1,i8", // 99
|
||||
"AND P2,i8", // 9a
|
||||
"???", // 9b
|
||||
"AND P4,A", // 9c
|
||||
"AND P5,A", // 9d
|
||||
"AND P6,A", // 9e
|
||||
"AND P7,A", // 9f
|
||||
"MOV @R0,A", // a0
|
||||
"MOV @R1,A", // a1
|
||||
"???", // a2
|
||||
"MOV A,@A", // a3
|
||||
"JP 2K 5", // a4
|
||||
"CLR F1", // a5
|
||||
"???", // a6
|
||||
"COM C", // a7
|
||||
"MOV R0,A", // a8
|
||||
"MOV R1,A", // a9
|
||||
"MOV R2,A", // aa
|
||||
"MOV R3,A", // ab
|
||||
"MOV R4,A", // ac
|
||||
"MOV R5,A", // ad
|
||||
"MOV R6,A", // ae
|
||||
"MOV R7,A", // af
|
||||
"???", // b0
|
||||
"???", // b1
|
||||
"JPB 5", // b2
|
||||
"JPP A", // b3
|
||||
"CALL 5", // b4
|
||||
"COM F1", // b5
|
||||
"JP F0", // b6
|
||||
"???", // b7
|
||||
"MOV R0,i8", // b8
|
||||
"MOV R1,i8", // b9
|
||||
"MOV R2,i8", // ba
|
||||
"MOV R3,i8", // bb
|
||||
"MOV R4,i8", // bc
|
||||
"MOV R5,i8", // bd
|
||||
"MOV R6,i8", // be
|
||||
"MOV R7,i8", // bf
|
||||
"???", // c0
|
||||
"???", // c1
|
||||
"???", // c2
|
||||
"???", // c3
|
||||
"JP 2K 6", // c4
|
||||
"SEL RB 0", // c5
|
||||
"JP A==0", // c6
|
||||
"MOV A,PSW", // c7
|
||||
"DEC R0", // c8
|
||||
"DEC R1", // c9
|
||||
"DEC R2", // ca
|
||||
"DEC R3", // cb
|
||||
"DEC R4", // cc
|
||||
"DEC R5", // cd
|
||||
"DEC R6", // ce
|
||||
"DEC R7", // cf
|
||||
"XOR A,@R0", // d0
|
||||
"XOR A,@R1", // d1
|
||||
"JPB 6", // d2
|
||||
"XOR A,i8", // d3
|
||||
"CALL 6", // d4
|
||||
"SEL RB 1", // d5
|
||||
"???", // d6
|
||||
"MOV PSW,A", // d7
|
||||
"XOR A,R0", // d8
|
||||
"XOR A,R1", // d9
|
||||
"XOR A,R2", // da
|
||||
"XOR A,R3", // db
|
||||
"XOR A,R4", // dc
|
||||
"XOR A,R5", // dd
|
||||
"XOR A,R6", // de
|
||||
"XOR A,R7", // df
|
||||
"???", // e0
|
||||
"???", // e1
|
||||
"???", // e2
|
||||
"MOV3 A,@A", // e3
|
||||
"JP 2K 7", // e4
|
||||
"SEL MB 0", // e5
|
||||
"JP NC", // e6
|
||||
"ROL", // e7
|
||||
"DJNZ R0", // e8
|
||||
"DJNZ R1", // e9
|
||||
"DJNZ R2", // ea
|
||||
"DJNZ R3", // eb
|
||||
"DJNZ R4", // ec
|
||||
"DJNZ R5", // ed
|
||||
"DJNZ R6", // ee
|
||||
"DJNZ R7", // ef
|
||||
"MOV A,@R0", // f0
|
||||
"MOV A,@R1", // f1
|
||||
"JPB 7", // f2
|
||||
"???", // f3
|
||||
"CALL 7", // f4
|
||||
"SEL MB 1", // f5
|
||||
"JP C", // f6
|
||||
"RLC", // f7
|
||||
"MOV A,R0", // f8
|
||||
"MOV A,R1", // f9
|
||||
"MOV A,R2", // fa
|
||||
"MOV A,R3", // fb
|
||||
"MOV A,R4", // fc
|
||||
"MOV A,R5", // fd
|
||||
"MOV A,R6", // fe
|
||||
"MOV A,R7" // ff
|
||||
};
|
||||
|
||||
public static string Disassemble(ushort addr, Func<ushort, byte> reader, out ushort size)
|
||||
|
@ -280,14 +280,6 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
bytes.Add(d);
|
||||
result = result.Replace("i8", string.Format("#{0:X2}h", d));
|
||||
}
|
||||
else if (result.Contains("i16"))
|
||||
{
|
||||
byte dhi = reader(addr++);
|
||||
byte dlo = reader(addr++);
|
||||
bytes.Add(dhi);
|
||||
bytes.Add(dlo);
|
||||
result = result.Replace("i16", string.Format("#{0:X2}{1:X2}h", dhi, dlo));
|
||||
}
|
||||
|
||||
StringBuilder ret = new StringBuilder();
|
||||
ret.Append(string.Format("{0:X4}: ", origaddr));
|
||||
|
|
|
@ -39,8 +39,8 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
case 0x0D: MOV_A_P4(5); break; // MOV A,P5
|
||||
case 0x0E: MOV_A_P4(6); break; // MOV A,P6
|
||||
case 0x0F: MOV_A_P4(7); break; // MOV A,P7
|
||||
case 0x10: OP_A_R(INC_RAM, R0); break; // INC #,R0
|
||||
case 0x11: OP_A_R(INC_RAM, R1); break; // INC #,R1
|
||||
case 0x10: OP_A_R(INC_RAM, R0); break; // INC #,@R0
|
||||
case 0x11: OP_A_R(INC_RAM, R1); break; // INC #,@R1
|
||||
case 0x12: JPB(0); break; // JPB 0
|
||||
case 0x13: OP_A_DIR(ADC8); break; // ADC A,#
|
||||
case 0x14: CALL(0); break; // CALL
|
||||
|
@ -62,7 +62,7 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
case 0x24: JP_2k(1); break; // JP 2K 1
|
||||
case 0x25: OP_IMP(EN); break; // EN
|
||||
case 0x26: JP_COND(!T0, IDLE); break; // JP NT0
|
||||
case 0x27: OP_IMP(CLR); break; // CLR A
|
||||
case 0x27: OP_IMP(CLRA); break; // CLR A
|
||||
case 0x28: OP_A_R(XCH, R0); break; // XCH A,R0
|
||||
case 0x29: OP_A_R(XCH, R1); break; // XCH A,R1
|
||||
case 0x2A: OP_A_R(XCH, R2); break; // XCH A,R2
|
||||
|
@ -72,13 +72,13 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
case 0x2E: OP_A_R(XCH, R6); break; // XCH A,R6
|
||||
case 0x2F: OP_A_R(XCH, R7); break; // XCH A,R7
|
||||
case 0x30: OP_A_R(XCHD_RAM, R0); break; // XCHD A,@R0
|
||||
case 0x31: OP_A_R(XCHD_RAM, R1); break; // XCHD A,@R0
|
||||
case 0x31: OP_A_R(XCHD_RAM, R1); break; // XCHD A,@R1
|
||||
case 0x32: JPB(1); break; // JPB 1
|
||||
case 0x33: ILLEGAL(); break; // ILLEGAL
|
||||
case 0x34: CALL(1); break; // CALL
|
||||
case 0x35: OP_IMP(DN); break; // DN
|
||||
case 0x36: JP_COND(T0, IDLE); break; // JP T0
|
||||
case 0x37: OP_IMP(COM); break; // COM A
|
||||
case 0x37: OP_IMP(COMA); break; // COM A
|
||||
case 0x38: ILLEGAL(); break; // ILLEGAL
|
||||
case 0x39: OUT_P(1); break; // OUT P1,A
|
||||
case 0x3A: OUT_P(2); break; // OUT P2,A
|
||||
|
@ -151,8 +151,8 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
case 0x7D: OP_A_R(ADC8, R5); break; // ADC A,R5
|
||||
case 0x7E: OP_A_R(ADC8, R6); break; // ADC A,R6
|
||||
case 0x7F: OP_A_R(ADC8, R7); break; // ADC A,R7
|
||||
case 0x80: MOVX_A_R(0); break; // MOVX A,R0
|
||||
case 0x81: MOVX_A_R(1); break; // MOVX A,R1
|
||||
case 0x80: MOVX_A_R(0); break; // MOVX A,@R0
|
||||
case 0x81: MOVX_A_R(1); break; // MOVX A,@R1
|
||||
case 0x82: ILLEGAL(); break; // ILLEGAL
|
||||
case 0x83: RET(); break; // RET
|
||||
case 0x84: JP_2k(4); break; // JP 2K 4
|
||||
|
@ -167,8 +167,8 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
case 0x8D: OP_EXP_A(OR8, P5); break; // OR P5,A
|
||||
case 0x8E: OP_EXP_A(OR8, P6); break; // OR P6,A
|
||||
case 0x8F: OP_EXP_A(OR8, P7); break; // OR P7,A
|
||||
case 0x90: MOVX_R_A(0); break; // MOVX R0,A
|
||||
case 0x91: MOVX_R_A(1); break; // MOVX R1,A
|
||||
case 0x90: MOVX_R_A(0); break; // MOVX @R0,A
|
||||
case 0x91: MOVX_R_A(1); break; // MOVX @R1,A
|
||||
case 0x92: JPB(4); break; // JPB 4
|
||||
case 0x93: RETR(); break; //RETR
|
||||
case 0x94: CALL(4); break; // CALL
|
||||
|
@ -222,7 +222,7 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
case 0xC4: JP_2k(6); break; // JP 2K 6
|
||||
case 0xC5: OP_IMP(SEL_RB0); break; // SEL RB 0
|
||||
case 0xC6: JP_COND(Regs[A] == 0, IDLE); break; // JP (A == 0)
|
||||
case 0xC7: MOV_R(A, PSW); break; // MOV A, PSW
|
||||
case 0xC7: MOV_R(A, PSW); break; // MOV A,PSW
|
||||
case 0xC8: OP_R_IMP(DEC8, R0); break; // DEC R0
|
||||
case 0xC9: OP_R_IMP(DEC8, R1); break; // DEC R1
|
||||
case 0xCA: OP_R_IMP(DEC8, R2); break; // DEC R2
|
||||
|
|
|
@ -29,7 +29,7 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
public const ushort RLC = 18;
|
||||
public const ushort RRC = 19;
|
||||
public const ushort SWP = 20;
|
||||
public const ushort COM = 21;
|
||||
public const ushort COMA = 21;
|
||||
public const ushort CMC = 22;
|
||||
public const ushort CM0 = 23;
|
||||
public const ushort CM1 = 24;
|
||||
|
@ -48,7 +48,7 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
public const ushort SET_ADDR = 37;
|
||||
public const ushort NEG = 38;
|
||||
public const ushort TST = 39;
|
||||
public const ushort CLR = 40;
|
||||
public const ushort CLRA = 40;
|
||||
public const ushort CLC = 41;
|
||||
public const ushort CL0 = 42;
|
||||
public const ushort CL1 = 43;
|
||||
|
@ -56,7 +56,6 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
public const ushort EN = 45;
|
||||
public const ushort DI = 46;
|
||||
public const ushort DN = 47;
|
||||
public const ushort TFR = 48;
|
||||
public const ushort ADD8BR = 49;
|
||||
public const ushort ABX = 50;
|
||||
public const ushort JPE = 51;
|
||||
|
@ -66,7 +65,6 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
public const ushort ADD16 = 55;
|
||||
public const ushort CMP16 = 56;
|
||||
public const ushort CMP16D = 57;
|
||||
public const ushort CLR_E = 63;
|
||||
public const ushort CLK_OUT = 64;
|
||||
public const ushort IN = 65;
|
||||
public const ushort OUT = 66;
|
||||
|
@ -188,9 +186,6 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
case TR:
|
||||
TR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]);
|
||||
break;
|
||||
case TFR:
|
||||
TFR_Func(cur_instr[instr_pntr++]);
|
||||
break;
|
||||
case SET_ADDR:
|
||||
reg_d_ad = cur_instr[instr_pntr++];
|
||||
reg_h_ad = cur_instr[instr_pntr++];
|
||||
|
@ -204,11 +199,17 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
case TST:
|
||||
TST_Func(cur_instr[instr_pntr++]);
|
||||
break;
|
||||
case CLR:
|
||||
CLR_Func(cur_instr[instr_pntr++]);
|
||||
case CLRA:
|
||||
Regs[A] = 0;
|
||||
break;
|
||||
case CLR_E:
|
||||
|
||||
case CLC:
|
||||
FlagC = false;
|
||||
break;
|
||||
case CL0:
|
||||
FlagF0 = false;
|
||||
break;
|
||||
case CL1:
|
||||
F1 = false;
|
||||
break;
|
||||
case ADD16BR:
|
||||
ADD16BR_Func(cur_instr[instr_pntr++], cur_instr[instr_pntr++]);
|
||||
|
@ -246,8 +247,17 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
case ROR:
|
||||
ROR_Func(cur_instr[instr_pntr++]);
|
||||
break;
|
||||
case COM:
|
||||
COM_Func(cur_instr[instr_pntr++]);
|
||||
case COMA:
|
||||
Regs[A] = (ushort)((~Regs[A]) & 0xFF);
|
||||
break;
|
||||
case CMC:
|
||||
FlagC = !FlagC;
|
||||
break;
|
||||
case CM0:
|
||||
FlagF0 = !FlagF0;
|
||||
break;
|
||||
case CM1:
|
||||
F1 = !F1;
|
||||
break;
|
||||
case DA:
|
||||
DA_Func(cur_instr[instr_pntr++]);
|
||||
|
@ -283,7 +293,9 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
|
||||
break;
|
||||
case XCH:
|
||||
|
||||
Regs[ALU] = Regs[cur_instr[instr_pntr]];
|
||||
Regs[cur_instr[instr_pntr++]] = Regs[cur_instr[instr_pntr]];
|
||||
Regs[cur_instr[instr_pntr++]] = Regs[ALU];
|
||||
break;
|
||||
case XCH_RAM:
|
||||
|
||||
|
@ -298,10 +310,10 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
|
||||
break;
|
||||
case SEL_RB0:
|
||||
|
||||
RB = 0;
|
||||
break;
|
||||
case SEL_RB1:
|
||||
|
||||
RB = 24;
|
||||
break;
|
||||
case INC_RAM:
|
||||
|
||||
|
@ -310,7 +322,7 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
|
||||
break;
|
||||
case MOV:
|
||||
|
||||
Regs[cur_instr[instr_pntr++]] = Regs[cur_instr[instr_pntr++]];
|
||||
break;
|
||||
case MOV_RAM:
|
||||
|
||||
|
@ -330,6 +342,19 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
case ST_T:
|
||||
|
||||
break;
|
||||
case EI:
|
||||
IntEn = true;
|
||||
break;
|
||||
case DI:
|
||||
IntEn = false;
|
||||
break;
|
||||
case INCA:
|
||||
INC8_Func(A);
|
||||
break;
|
||||
case DECA:
|
||||
DEC8_Func(A);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if (++irq_pntr == IRQS)
|
||||
|
@ -374,16 +399,16 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
{
|
||||
Disassembly = $"{(disassemble ? Disassemble(Regs[PC], ReadMemory, out notused) : "---")} ".PadRight(50),
|
||||
RegisterInfo = string.Format(
|
||||
"A:{0:X2} R0:{1:X2} R1:{2:X2} R2:{3:X2} R3:{4:X2} R4:{5:X2} R5:{6:X2} R6:{7:X2} R7:{8:X2} PSW:{9:X4} Cy:{10} {11}{12}{13}{14} {15}{16}{17}{18}",
|
||||
"A:{0:X2} R0:{1:X2} R1:{2:X2} R2:{3:X2} R3:{4:X2} R4:{5:X2} R5:{6:X2} R6:{7:X2} R7:{8:X2} PSW:{9:X4} Cy:{10} {11}{12}{13}{14} {15}{16}{17}{18}{19}",
|
||||
Regs[A],
|
||||
Regs[R0],
|
||||
Regs[R1],
|
||||
Regs[R2],
|
||||
Regs[R3],
|
||||
Regs[R4],
|
||||
Regs[R5],
|
||||
Regs[R6],
|
||||
Regs[R7],
|
||||
Regs[(ushort)(R0 + RB)],
|
||||
Regs[(ushort)(R1 + RB)],
|
||||
Regs[(ushort)(R2 + RB)],
|
||||
Regs[(ushort)(R3 + RB)],
|
||||
Regs[(ushort)(R4 + RB)],
|
||||
Regs[(ushort)(R5 + RB)],
|
||||
Regs[(ushort)(R6 + RB)],
|
||||
Regs[(ushort)(R7 + RB)],
|
||||
Regs[PSW],
|
||||
TotalExecutedCycles,
|
||||
FlagC ? "C" : "c",
|
||||
|
@ -393,7 +418,8 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
IntEn ? "I" : "i",
|
||||
F1 ? "F" : "f",
|
||||
T0 ? "T" : "t",
|
||||
T1 ? "T" : "t"
|
||||
T1 ? "T" : "t",
|
||||
RB > 0 ? "R" : "r"
|
||||
)
|
||||
};
|
||||
}
|
||||
|
@ -438,8 +464,10 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
ser.Sync(nameof(TF), ref TF);
|
||||
ser.Sync(nameof(timer_en), ref timer_en);
|
||||
|
||||
ser.Sync(nameof(RB), ref RB);
|
||||
ser.Sync(nameof(RAM_ptr), ref RAM_ptr);
|
||||
|
||||
ser.Sync(nameof(Regs), ref Regs, false);
|
||||
ser.Sync(nameof(RAM), ref RAM, false);
|
||||
|
||||
ser.Sync(nameof(F1), ref F1);
|
||||
ser.Sync(nameof(T0), ref T0);
|
||||
|
|
|
@ -32,7 +32,7 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
PopulateCURINSTR(IDLE,
|
||||
IDLE,
|
||||
IDLE,
|
||||
oper, reg);
|
||||
oper, (ushort)(reg + RB));
|
||||
|
||||
IRQS = 4;
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
PopulateCURINSTR(IDLE,
|
||||
IDLE,
|
||||
IDLE,
|
||||
oper, A, reg);
|
||||
oper, A, (ushort)(reg + RB));
|
||||
|
||||
IRQS = 4;
|
||||
}
|
||||
|
|
|
@ -50,13 +50,6 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
|
||||
}
|
||||
|
||||
public void CLR_Func(ushort src)
|
||||
{
|
||||
Regs[src] = 0;
|
||||
|
||||
FlagC = false;
|
||||
}
|
||||
|
||||
// source is considered a 16 bit signed value, used for long relative branch
|
||||
// no flags used
|
||||
public void ADD16BR_Func(ushort dest, ushort src)
|
||||
|
@ -79,10 +72,6 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
|
||||
ushort ans = (ushort)(Reg16_d & 0xFF);
|
||||
|
||||
// redo for half carry flag
|
||||
Reg16_d = Regs[dest] & 0xF;
|
||||
Reg16_d += (Regs[src] & 0xF);
|
||||
|
||||
Regs[dest] = ans;
|
||||
}
|
||||
|
||||
|
@ -95,10 +84,6 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
|
||||
ushort ans = (ushort)(Reg16_d & 0xFF);
|
||||
|
||||
// redo for half carry flag
|
||||
Reg16_d = Regs[dest] & 0xF;
|
||||
Reg16_d -= (Regs[src] & 0xF);
|
||||
|
||||
Regs[dest] = ans;
|
||||
}
|
||||
|
||||
|
@ -111,10 +96,6 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
FlagC = Reg16_d.Bit(8);
|
||||
|
||||
ushort ans = (ushort)(Reg16_d & 0xFF);
|
||||
|
||||
// redo for half carry flag
|
||||
Reg16_d = Regs[dest] & 0xF;
|
||||
Reg16_d -= (Regs[src] & 0xF);
|
||||
}
|
||||
|
||||
public void BIT_Func(ushort dest, ushort src)
|
||||
|
@ -145,13 +126,6 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
Regs[src] = (ushort)(Regs[src] >> 1);
|
||||
}
|
||||
|
||||
public void COM_Func(ushort src)
|
||||
{
|
||||
Regs[src] = (ushort)((~Regs[src]) & 0xFF);
|
||||
|
||||
FlagC = true;
|
||||
}
|
||||
|
||||
public void AND8_Func(ushort dest, ushort src)
|
||||
{
|
||||
Regs[dest] = (ushort)(Regs[dest] & Regs[src]);
|
||||
|
@ -232,10 +206,6 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
|
||||
ushort ans = (ushort)(Reg16_d & 0xFF);
|
||||
|
||||
// redo for half carry flag
|
||||
Reg16_d = Regs[dest] & 0xF;
|
||||
Reg16_d += ((Regs[src] & 0xF) + c);
|
||||
|
||||
Regs[dest] = ans;
|
||||
}
|
||||
|
||||
|
@ -277,15 +247,5 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
|
||||
ushort ans = (ushort)(Reg16_d & 0xFFFF);
|
||||
}
|
||||
|
||||
public void EXG_Func(ushort sel)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void TFR_Func(ushort sel)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,10 +5,7 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
public partial class I8048
|
||||
{
|
||||
// registers
|
||||
public ushort[] Regs = new ushort[22];
|
||||
|
||||
// 64 bytes of onboard ram
|
||||
public ushort[] RAM = new ushort[64];
|
||||
public ushort[] Regs = new ushort[78];
|
||||
|
||||
// The 8048 has 2 flags that can be used for conditionals
|
||||
// F0 is on the PSW, F1 is seperate
|
||||
|
@ -21,28 +18,35 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
// The 8048 has 2 test lines which can be used for conditionals, T0 can be used as an output
|
||||
public bool T0, T1;
|
||||
|
||||
public const ushort PC = 0;
|
||||
public const ushort PSW = 1;
|
||||
public const ushort BUS = 2;
|
||||
public const ushort A = 3;
|
||||
public const ushort R0 = 4;
|
||||
public const ushort R1 = 5;
|
||||
public const ushort R2 = 6;
|
||||
public const ushort R3 = 7;
|
||||
public const ushort R4 = 8;
|
||||
public const ushort R5 = 9;
|
||||
public const ushort R6 = 10;
|
||||
public const ushort R7 = 11;
|
||||
public const ushort ADDR = 12; // internal
|
||||
public const ushort ALU = 13; // internal
|
||||
public const ushort ALU2 = 14; // internal
|
||||
public const ushort P1 = 15;
|
||||
public const ushort P2 = 16;
|
||||
public const ushort P4 = 17;
|
||||
public const ushort P5 = 18;
|
||||
public const ushort P6 = 19;
|
||||
public const ushort P7 = 20;
|
||||
public const ushort TIM = 21;
|
||||
// 8 'registers' but really they point to locations in RAM
|
||||
public const ushort R0 = 0;
|
||||
public const ushort R1 = 1;
|
||||
public const ushort R2 = 2;
|
||||
public const ushort R3 = 3;
|
||||
public const ushort R4 = 4;
|
||||
public const ushort R5 = 5;
|
||||
public const ushort R6 = 6;
|
||||
public const ushort R7 = 7;
|
||||
|
||||
// the location pointed to by the registers is controlled by the RAM bank
|
||||
public ushort RB = 0;
|
||||
public ushort RAM_ptr = 0;
|
||||
|
||||
//RAM occupies registers 0-63
|
||||
public const ushort PC = 64;
|
||||
public const ushort PSW = 65;
|
||||
public const ushort BUS = 66;
|
||||
public const ushort A = 67;
|
||||
public const ushort ADDR = 68; // internal
|
||||
public const ushort ALU = 69; // internal
|
||||
public const ushort ALU2 = 70; // internal
|
||||
public const ushort P1 = 71;
|
||||
public const ushort P2 = 72;
|
||||
public const ushort P4 = 73;
|
||||
public const ushort P5 = 74;
|
||||
public const ushort P6 = 75;
|
||||
public const ushort P7 = 76;
|
||||
public const ushort TIM = 77;
|
||||
|
||||
public bool Flag3
|
||||
{
|
||||
|
@ -76,7 +80,7 @@ namespace BizHawk.Emulation.Common.Components.I8048
|
|||
|
||||
private void ResetRegisters()
|
||||
{
|
||||
for (int i = 0; i < 22; i++)
|
||||
for (int i = 0; i < 78; i++)
|
||||
{
|
||||
Regs[i] = 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue