|
|
| version 1.27, 2004/06/18 07:42:13 | version 1.35, 2005/05/15 18:48:36 |
|---|---|
| Line 68 static void biosfd_setchrn(void) { | Line 68 static void biosfd_setchrn(void) { |
| #if 0 | #if 0 |
| static void biosfd_resultout(UINT32 result) { | static void biosfd_resultout(UINT32 result) { |
| BYTE *ptr; | UINT8 *ptr; |
| ptr = mem + 0x00564 + (fdc.us*8); | ptr = mem + 0x00564 + (fdc.us*8); |
| ptr[0] = (BYTE)(result & 0xff) | (fdc.hd << 2) | fdc.us; | ptr[0] = (UINT8)(result & 0xff) | (fdc.hd << 2) | fdc.us; |
| ptr[1] = (BYTE)(result >> 8); | ptr[1] = (UINT8)(result >> 8); |
| ptr[2] = (BYTE)(result >> 16); | ptr[2] = (UINT8)(result >> 16); |
| ptr[3] = fdc.C; | ptr[3] = fdc.C; |
| ptr[4] = fdc.H; | ptr[4] = fdc.H; |
| ptr[5] = fdc.R; | ptr[5] = fdc.R; |
| Line 235 static void b0patch(void) { | Line 235 static void b0patch(void) { |
| REG8 c; | REG8 c; |
| REG8 cl; | REG8 cl; |
| REG8 last; | REG8 last; |
| addr = ES_BASE + CPU_BP; | addr = CPU_BP; |
| size = CPU_BX; | size = CPU_BX; |
| cnt = 0; | cnt = 0; |
| last = 0; | last = 0; |
| while(size--) { | while(size--) { |
| c = i286_memoryread(addr++); | c = MEML_READ8(ES_BASE, addr++); |
| cl = 0; | cl = 0; |
| do { | do { |
| REG8 now = c & 0x80; | REG8 now = c & 0x80; |
| Line 264 static void b0patch(void) { | Line 264 static void b0patch(void) { |
| } | } |
| } | } |
| if ((b0p.pos >> 3) < CPU_BX) { | if ((b0p.pos >> 3) < CPU_BX) { |
| UINT32 addr; | UINT addr; |
| REG8 c; | REG8 c; |
| addr = ES_BASE + CPU_BP + (b0p.pos >> 3); | addr = CPU_BP + (b0p.pos >> 3); |
| c = i286_memoryread(addr); | c = MEML_READ8(CPU_ES, addr); |
| c ^= (1 << (b0p.pos & 7)); | c ^= (1 << (b0p.pos & 7)); |
| b0p.pos++; | b0p.pos++; |
| i286_memorywrite(addr, c); | MEML_WRITE8(CPU_ES, addr, c); |
| } | } |
| } | } |
| } | } |
| Line 288 static REG8 fdd_operate(REG8 type, REG8 | Line 288 static REG8 fdd_operate(REG8 type, REG8 |
| UINT16 accesssize; | UINT16 accesssize; |
| UINT16 secsize; | UINT16 secsize; |
| UINT16 para; | UINT16 para; |
| BYTE s; | UINT8 s; |
| BYTE ID[4]; | UINT8 ID[4]; |
| BYTE hd; | UINT8 hd; |
| int result = FDCBIOS_NORESULT; | int result = FDCBIOS_NORESULT; |
| UINT32 addr; | UINT32 addr; |
| UINT8 mtr_c; | UINT8 mtr_c; |
| Line 334 static REG8 fdd_operate(REG8 type, REG8 | Line 334 static REG8 fdd_operate(REG8 type, REG8 |
| } | } |
| if (!fdd_diskready(fdc.us)) { | if (!fdd_diskready(fdc.us)) { |
| fdd_int(FDCBIOS_NONREADY); | fdd_int(FDCBIOS_NONREADY); |
| if (CPU_AH == 0x84) { | ret_ah = 0x60; |
| return(0x68); // 新センスは 両用ドライブ情報も | if ((CPU_AX & 0x8f40) == 0x8400) { |
| } | ret_ah |= 8; // 1MB/640KB両用ドライブ |
| if (CPU_AH == 0xc4) { // ver0.31 | if ((CPU_AH & 0x40) && (fdc.support144)) { |
| if (fdc.support144) { | ret_ah |= 4; // 1.44対応ドライブ |
| return(0x6c); | |
| } | } |
| return(0x68); | |
| } | } |
| return(0x60); | return(ret_ah); |
| } | } |
| } | } |
| Line 444 static REG8 fdd_operate(REG8 type, REG8 | Line 442 static REG8 fdd_operate(REG8 type, REG8 |
| if (mem[fmode] & (0x01 << fdc.us)) { | if (mem[fmode] & (0x01 << fdc.us)) { |
| ret_ah |= 0x01; | ret_ah |= 0x01; |
| } | } |
| if (mem[fmode] & (0x10 << fdc.us)) { // ver0.30 | if (mem[fmode] & (0x10 << fdc.us)) { |
| ret_ah |= 0x04; | ret_ah |= 0x04; |
| } | } |
| } | } |
| if (CPU_AH & 0x80) { // ver0.30 | if ((CPU_AX & 0x8f40) == 0x8400) { |
| ret_ah |= 8; // 1MB/640KB両用ドライブ | ret_ah |= 8; // 1MB/640KB両用ドライブ |
| if ((CPU_AH & 0x40) && (fdc.support144)) { | if ((CPU_AH & 0x40) && (fdc.support144)) { |
| ret_ah |= 4; // 1.44対応ドライブ | ret_ah |= 4; // 1.44対応ドライブ |
| Line 784 static UINT16 boot_fd(REG8 drv, REG8 typ | Line 782 static UINT16 boot_fd(REG8 drv, REG8 typ |
| // 2DD | // 2DD |
| bootseg = boot_fd1(0, 0); | bootseg = boot_fd1(0, 0); |
| if (bootseg) { | if (bootseg) { |
| mem[MEMB_DISK_BOOT] = (BYTE)(0x70 + drv); | mem[MEMB_DISK_BOOT] = (UINT8)(0x70 + drv); |
| fddbios_equip(0, TRUE); | fddbios_equip(0, TRUE); |
| return(bootseg); | return(bootseg); |
| } | } |
| Line 806 static REG16 boot_hd(REG8 drv) { | Line 804 static REG16 boot_hd(REG8 drv) { |
| REG16 bootstrapload(void) { | REG16 bootstrapload(void) { |
| BYTE i; | UINT8 i; |
| REG16 bootseg; | REG16 bootseg; |
| // fdmode = 0; | // fdmode = 0; |
| Line 873 void bios0x1b(void) { | Line 871 void bios0x1b(void) { |
| REG8 ret_ah; | REG8 ret_ah; |
| REG8 flag; | REG8 flag; |
| #if defined(SUPPORT_SCSI) | |
| if ((CPU_AL & 0xf0) == 0xc0) { | |
| TRACEOUT(("%.4x:%.4x AX=%.4x BX=%.4x CX=%.4x DX=%.4 ES=%.4x BP=%.4x", | |
| MEML_READ16(CPU_SS, CPU_SP+2), | |
| MEML_READ16(CPU_SS, CPU_SP), | |
| CPU_AX, CPU_BX, CPU_CX, CPU_DX, CPU_ES, CPU_BP)); | |
| scsicmd_bios(); | |
| return; | |
| } | |
| #endif | |
| #if 1 // bypass to disk bios | #if 1 // bypass to disk bios |
| { | |
| REG8 seg; | REG8 seg; |
| UINT sp; | UINT sp; |
| Line 920 void bios0x1b(void) { | Line 906 void bios0x1b(void) { |
| CPU_IP = 0x18; | CPU_IP = 0x18; |
| return; | return; |
| } | } |
| } | #endif |
| #if defined(SUPPORT_SCSI) | |
| if ((CPU_AL & 0xf0) == 0xc0) { | |
| TRACEOUT(("%.4x:%.4x AX=%.4x BX=%.4x CX=%.4x DX=%.4 ES=%.4x BP=%.4x", | |
| MEML_READ16(CPU_SS, CPU_SP+2), | |
| MEML_READ16(CPU_SS, CPU_SP), | |
| CPU_AX, CPU_BX, CPU_CX, CPU_DX, CPU_ES, CPU_BP)); | |
| scsicmd_bios(); | |
| return; | |
| } | |
| #endif | #endif |
| switch(CPU_AL & 0xf0) { | switch(CPU_AL & 0xf0) { |
| Line 962 void bios0x1b(void) { | Line 958 void bios0x1b(void) { |
| ret_ah = 0x40; | ret_ah = 0x40; |
| break; | break; |
| } | } |
| #if 1 | #if 0 |
| TRACEOUT(("%04x:%04x AX=%04x BX=%04x %02x:%02x:%02x:%02x\n" \ | TRACEOUT(("%04x:%04x AX=%04x BX=%04x %02x:%02x:%02x:%02x\n" \ |
| "ES=%04x BP=%04x \nret=%02x", | "ES=%04x BP=%04x \nret=%02x", |
| MEML_READ16(CPU_SS, CPU_SP+2), | MEML_READ16(CPU_SS, CPU_SP+2), |
| Line 984 UINT bios0x1b_wait(void) { | Line 980 UINT bios0x1b_wait(void) { |
| REG8 bit; | REG8 bit; |
| if (fddmtr.busy) { | if (fddmtr.busy) { |
| CPU_IP--; | |
| CPU_REMCLOCK = -1; | CPU_REMCLOCK = -1; |
| } | } |
| else { | else { |