|
|
| version 1.1, 2004/01/22 01:10:03 | version 1.8, 2005/02/09 20:11:33 |
|---|---|
| Line 6 | Line 6 |
| #include "cpucore.h" | #include "cpucore.h" |
| #include "pccore.h" | #include "pccore.h" |
| #include "iocore.h" | #include "iocore.h" |
| #include "sxsi.h" | |
| #include "sasiio.h" | #include "sasiio.h" |
| #include "sxsi.h" | |
| #include "sasibios.res" | #include "sasibios.res" |
| Line 145 static void checkcmd(void) { | Line 145 static void checkcmd(void) { |
| sasiio.phase = SASIPHASE_SENSE; | sasiio.phase = SASIPHASE_SENSE; |
| sasiio.senspos = 0; | sasiio.senspos = 0; |
| sasiio.sens[0] = sasiio.error; | sasiio.sens[0] = sasiio.error; |
| sasiio.sens[1] = (BYTE)((sasiio.unit << 5) + | sasiio.sens[1] = (UINT8)((sasiio.unit << 5) + |
| ((sasiio.sector >> 16) & 0x1f)); | ((sasiio.sector >> 16) & 0x1f)); |
| sasiio.sens[2] = (BYTE)(sasiio.sector >> 8); | sasiio.sens[2] = (UINT8)(sasiio.sector >> 8); |
| sasiio.sens[3] = (BYTE)sasiio.sector; | sasiio.sens[3] = (UINT8)sasiio.sector; |
| sasiio.error = 0x00; | sasiio.error = 0x00; |
| sasiio.stat = 0x00; | sasiio.stat = 0x00; |
| break; | break; |
| Line 311 static void IOOUTCALL sasiio_o80(UINT po | Line 311 static void IOOUTCALL sasiio_o80(UINT po |
| case SASIPHASE_CMD: | case SASIPHASE_CMD: |
| // TRACEOUT(("sasi cmd = %.2x", dat)); | // TRACEOUT(("sasi cmd = %.2x", dat)); |
| sasiio.cmd[sasiio.cmdpos] = (BYTE)dat; | sasiio.cmd[sasiio.cmdpos] = (UINT8)dat; |
| sasiio.cmdpos++; | sasiio.cmdpos++; |
| if (sasiio.cmdpos >= 6) { | if (sasiio.cmdpos >= 6) { |
| checkcmd(); | checkcmd(); |
| Line 329 static void IOOUTCALL sasiio_o80(UINT po | Line 329 static void IOOUTCALL sasiio_o80(UINT po |
| sasi_datawrite(dat); | sasi_datawrite(dat); |
| break; | break; |
| } | } |
| (void)port; | |
| } | } |
| static void IOOUTCALL sasiio_o82(UINT port, REG8 dat) { | static void IOOUTCALL sasiio_o82(UINT port, REG8 dat) { |
| Line 336 static void IOOUTCALL sasiio_o82(UINT po | Line 337 static void IOOUTCALL sasiio_o82(UINT po |
| UINT8 oldocr; | UINT8 oldocr; |
| oldocr = sasiio.ocr; | oldocr = sasiio.ocr; |
| sasiio.ocr = (BYTE)dat; | sasiio.ocr = (UINT8)dat; |
| if ((oldocr & SASIOCR_RST) && (!(dat & SASIOCR_RST))) { | if ((oldocr & SASIOCR_RST) && (!(dat & SASIOCR_RST))) { |
| sasiio.phase = SASIPHASE_FREE; | sasiio.phase = SASIPHASE_FREE; |
| TRACEOUT(("SASI reset")); | TRACEOUT(("SASI reset")); |
| } | } |
| sasidmac(); | sasidmac(); |
| (void)port; | |
| } | } |
| static REG8 IOINPCALL sasiio_i80(UINT port) { | static REG8 IOINPCALL sasiio_i80(UINT port) { |
| REG8 ret; | REG8 ret; |
| ret = 0; | |
| switch(sasiio.phase) { | switch(sasiio.phase) { |
| case SASIPHASE_READ: | case SASIPHASE_READ: |
| ret = sasi_dataread(); | ret = sasi_dataread(); |
| Line 378 static REG8 IOINPCALL sasiio_i80(UINT po | Line 381 static REG8 IOINPCALL sasiio_i80(UINT po |
| } | } |
| break; | break; |
| } | } |
| (void)port; | |
| return(ret); | return(ret); |
| } | } |
| static REG8 IOINPCALL sasiio_i82(UINT port) { | static REG8 IOINPCALL sasiio_i82(UINT port) { |
| REG8 ret; | REG8 ret; |
| SXSIDEV sxsi; | |
| if (sasiio.ocr & SASIOCR_NRDSW) { | if (sasiio.ocr & SASIOCR_NRDSW) { |
| ret = sasiio.isrint; | ret = sasiio.isrint; |
| Line 410 static REG8 IOINPCALL sasiio_i82(UINT po | Line 415 static REG8 IOINPCALL sasiio_i82(UINT po |
| break; | break; |
| } | } |
| } | } |
| return(ret); | |
| } | } |
| else { | else { |
| return((6 << 3) + 6); // 256/256/40MB/40MB | ret = 0; |
| sxsi = sxsi_getptr(0x00); // SASI-1 | |
| if ((sxsi) && ((sxsi->type & SXSITYPE_IFMASK) == SXSITYPE_SASI)) { | |
| ret |= (sxsi->type >> (8 - 3)) & 0x38; | |
| } | |
| else { | |
| ret |= 0x38; | |
| } | |
| sxsi = sxsi_getptr(0x01); // SASI-2 | |
| if ((sxsi) && ((sxsi->type & SXSITYPE_IFMASK) == SXSITYPE_SASI)) { | |
| ret |= (sxsi->type >> 8) & 7; | |
| } | |
| else { | |
| ret |= 7; | |
| } | |
| } | } |
| (void)port; | |
| return(ret); | |
| } | } |
| Line 429 void sasiio_reset(void) { | Line 449 void sasiio_reset(void) { |
| if (pccore.hddif & PCHDD_SASI) { | if (pccore.hddif & PCHDD_SASI) { |
| dmac_attach(DMADEV_SASI, SASI_DMACH); | dmac_attach(DMADEV_SASI, SASI_DMACH); |
| fh = file_open_rb_c("sasi.rom"); | CPU_RAM_D000 &= ~(1 << 0); |
| fh = file_open_rb_c(OEMTEXT("sasi.rom")); | |
| r = 0; | |
| if (fh != FILEH_INVALID) { | if (fh != FILEH_INVALID) { |
| r = file_read(fh, mem + 0xd0000, 0x1000); | r = file_read(fh, mem + 0xd0000, 0x1000); |
| file_close(fh); | file_close(fh); |
| Line 453 void sasiio_bind(void) { | Line 475 void sasiio_bind(void) { |
| iocore_attachinp(0x0082, sasiio_i82); | iocore_attachinp(0x0082, sasiio_i82); |
| } | } |
| } | } |
| #endif | #endif |