The MECHANISM_STATUS CD-ROM command now correctly calculates length from the CDB instead of the CD buffer, fixes crash with NT 4.0 and the BT-542b controller;
Applied the remaining mainline PCem commits.
This commit is contained in:
@@ -2197,14 +2197,17 @@ void taskswitch286(uint16_t seg, uint16_t *segdat, int is32)
|
|||||||
if (optype==OPTYPE_INT || optype==CALL)
|
if (optype==OPTYPE_INT || optype==CALL)
|
||||||
{
|
{
|
||||||
writememl(base,0,tr.seg);
|
writememl(base,0,tr.seg);
|
||||||
new_flags|=NT_FLAG;
|
if (cpu_state.abrt)
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if (cpu_state.abrt) return;
|
|
||||||
|
|
||||||
new_cr3=readmeml(base,0x1C);
|
new_cr3=readmeml(base,0x1C);
|
||||||
new_pc=readmeml(base,0x20);
|
new_pc=readmeml(base,0x20);
|
||||||
new_flags=readmeml(base,0x24);
|
new_flags=readmeml(base,0x24);
|
||||||
|
|
||||||
|
if (optype == OPTYPE_INT || optype == CALL)
|
||||||
|
new_flags |= NT_FLAG;
|
||||||
|
|
||||||
new_eax=readmeml(base,0x28);
|
new_eax=readmeml(base,0x28);
|
||||||
new_ecx=readmeml(base,0x2C);
|
new_ecx=readmeml(base,0x2C);
|
||||||
new_edx=readmeml(base,0x30);
|
new_edx=readmeml(base,0x30);
|
||||||
@@ -2383,13 +2386,16 @@ void taskswitch286(uint16_t seg, uint16_t *segdat, int is32)
|
|||||||
if (optype==OPTYPE_INT || optype==CALL)
|
if (optype==OPTYPE_INT || optype==CALL)
|
||||||
{
|
{
|
||||||
writememw(base,0,tr.seg);
|
writememw(base,0,tr.seg);
|
||||||
new_flags|=NT_FLAG;
|
if (cpu_state.abrt)
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if (cpu_state.abrt) return;
|
|
||||||
|
|
||||||
new_pc=readmemw(base,0x0E);
|
new_pc=readmemw(base,0x0E);
|
||||||
new_flags=readmemw(base,0x10);
|
new_flags=readmemw(base,0x10);
|
||||||
|
|
||||||
|
if (optype == OPTYPE_INT || optype == CALL)
|
||||||
|
new_flags |= NT_FLAG;
|
||||||
|
|
||||||
new_eax=readmemw(base,0x12);
|
new_eax=readmemw(base,0x12);
|
||||||
new_ecx=readmemw(base,0x14);
|
new_ecx=readmemw(base,0x14);
|
||||||
new_edx=readmemw(base,0x16);
|
new_edx=readmemw(base,0x16);
|
||||||
|
|||||||
@@ -2400,7 +2400,7 @@ void cdrom_command(uint8_t id, uint8_t *cdb)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case GPCMD_MECHANISM_STATUS:
|
case GPCMD_MECHANISM_STATUS:
|
||||||
len = (cdbufferb[7] << 16) | (cdbufferb[8] << 8) | cdbufferb[9];
|
len = (cdb[7] << 16) | (cdb[8] << 8) | cdb[9];
|
||||||
|
|
||||||
memset(cdbufferb, 0, 8);
|
memset(cdbufferb, 0, 8);
|
||||||
cdbufferb[5] = 1;
|
cdbufferb[5] = 1;
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ MODEL models[] =
|
|||||||
{"[386SX] Amstrad MegaPC", ROM_MEGAPC, "megapc", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 1, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE, 1, 16, 1, 127, at_wd76c10_init, NULL },
|
{"[386SX] Amstrad MegaPC", ROM_MEGAPC, "megapc", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 1, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE, 1, 16, 1, 127, at_wd76c10_init, NULL },
|
||||||
{"[386SX] DTK 386SX clone", ROM_DTK386, "dtk386", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 0, MODEL_AT | MODEL_HAS_IDE, 512,16384, 128, 127, at_neat_init, NULL },
|
{"[386SX] DTK 386SX clone", ROM_DTK386, "dtk386", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 0, MODEL_AT | MODEL_HAS_IDE, 512,16384, 128, 127, at_neat_init, NULL },
|
||||||
{"[386SX] IBM PS/1 model 2121", ROM_IBMPS1_2121, "ibmps1_2121", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 1, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE, 1, 16, 1, 127, ps1_m2121_init, NULL },
|
{"[386SX] IBM PS/1 model 2121", ROM_IBMPS1_2121, "ibmps1_2121", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 1, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE, 1, 16, 1, 127, ps1_m2121_init, NULL },
|
||||||
{"[386SX] IBM PS/1 m.2121+ISA", ROM_IBMPS1_2121_ISA, "ibmps1_2121_isa", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 1, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE, 1, 16, 1, 127, ps1_m2121_init, NULL },
|
{"[386SX] IBM PS/1 m.2121+ISA", ROM_IBMPS1_2121_ISA, "ibmps1_2121_isa", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 0, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE, 1, 16, 1, 127, ps1_m2121_init, NULL },
|
||||||
{"[386SX] IBM PS/2 Model 55SX", ROM_IBMPS2_M55SX, "ibmps2_m55sx", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 1, MODEL_AT | MODEL_PS2 | MODEL_PS2_HDD | MODEL_MCA, 1, 8, 1, 63, ps2_model_55sx_init, NULL },
|
{"[386SX] IBM PS/2 Model 55SX", ROM_IBMPS2_M55SX, "ibmps2_m55sx", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 1, MODEL_AT | MODEL_PS2 | MODEL_PS2_HDD | MODEL_MCA, 1, 8, 1, 63, ps2_model_55sx_init, NULL },
|
||||||
|
|
||||||
{"[386DX] AMI 386DX clone", ROM_AMI386DX_OPTI495, "ami386dx", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, 0, MODEL_AT | MODEL_HAS_IDE, 1, 64, 1, 127, at_opti495_init, NULL },
|
{"[386DX] AMI 386DX clone", ROM_AMI386DX_OPTI495, "ami386dx", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, 0, MODEL_AT | MODEL_HAS_IDE, 1, 64, 1, 127, at_opti495_init, NULL },
|
||||||
@@ -192,7 +192,7 @@ MODEL models[] =
|
|||||||
{"[486] AMI 486 clone", ROM_AMI486, "ami486", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MODEL_AT | MODEL_HAS_IDE, 1, 64, 1, 127, at_ali1429_init, NULL },
|
{"[486] AMI 486 clone", ROM_AMI486, "ami486", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MODEL_AT | MODEL_HAS_IDE, 1, 64, 1, 127, at_ali1429_init, NULL },
|
||||||
{"[486] AMI WinBIOS 486", ROM_WIN486, "win486", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MODEL_AT | MODEL_HAS_IDE, 1, 64, 1, 127, at_ali1429_init, NULL },
|
{"[486] AMI WinBIOS 486", ROM_WIN486, "win486", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MODEL_AT | MODEL_HAS_IDE, 1, 64, 1, 127, at_ali1429_init, NULL },
|
||||||
{"[486] DTK PKM-0038S E-2", ROM_DTK486, "dtk486", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MODEL_AT | MODEL_HAS_IDE, 1, 64, 1, 127, at_dtk486_init, NULL },
|
{"[486] DTK PKM-0038S E-2", ROM_DTK486, "dtk486", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MODEL_AT | MODEL_HAS_IDE, 1, 64, 1, 127, at_dtk486_init, NULL },
|
||||||
{"[486] IBM PS/1 model 2133", ROM_IBMPS1_2133, "ibmps1_2133", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 1, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE, 1, 64, 1, 127, ps1_m2133_init, NULL },
|
{"[486] IBM PS/1 model 2133", ROM_IBMPS1_2133, "ibmps1_2133", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE, 1, 64, 1, 127, ps1_m2133_init, NULL },
|
||||||
{"[486] Rise Computer R418", ROM_R418, "r418", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MODEL_AT | MODEL_HAS_IDE | MODEL_PCI, 1, 64, 1, 127, at_r418_init, NULL },
|
{"[486] Rise Computer R418", ROM_R418, "r418", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MODEL_AT | MODEL_HAS_IDE | MODEL_PCI, 1, 64, 1, 127, at_r418_init, NULL },
|
||||||
|
|
||||||
{"[Socket 4 LX] Intel Premiere/PCI",ROM_REVENGE, "revenge", {{"Intel", cpus_Pentium5V}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE | MODEL_PCI, 1, 128, 1, 127, at_batman_init, NULL },
|
{"[Socket 4 LX] Intel Premiere/PCI",ROM_REVENGE, "revenge", {{"Intel", cpus_Pentium5V}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MODEL_AT | MODEL_PS2 | MODEL_HAS_IDE | MODEL_PCI, 1, 128, 1, 127, at_batman_init, NULL },
|
||||||
|
|||||||
Reference in New Issue
Block a user