static void writeA(RomMapperRsIde* rm, UInt8 value)
{
    rm->ideAddress = value & 0x07;
    rm->ideIoRead = value & 0x40 ? 0:1;
    rm->ideIoWrite = value & 0x20 ? 0:1;

    if (rm->ideIoRead)
    {
        switch (rm->ideAddress)
        {
        case 0:
            rm->ideData = harddiskIdeRead(rm->hdide);
            break;
        default:
            rm->ideData = harddiskIdeReadRegister(rm->hdide, rm->ideAddress);
            break;
        }
    }

    if (rm->ideIoWrite)
    {
        switch (rm->ideAddress)
        {
        case 0:
            harddiskIdeWrite(rm->hdide, rm->ideData);
            break;
        default:
            harddiskIdeWriteRegister(rm->hdide, rm->ideAddress, (UInt8)rm->ideData);
            break;
        }
    }
}
Example #2
0
static UInt8 readIo(RomMapperGIde* rm, UInt16 ioPort) 
{
    switch (ioPort & 0x0f)
    {
    case 0x04:    // Reserved for expansion board
        return 0xff;

    case 0x05:    // RTC 72421
        return rtc72421Read(ioPort >> 8);

    case 0x06:    // GIDE alternate status
        return rm->altStatus;

    case 0x07:    // GIDE drive address register
        return rm->drvSelect;

    case 0x08:    // IDE data register
        return (UInt8)harddiskIdeRead(rm->hdide);

    case 0x09:    // IDE error register
        return harddiskIdeReadRegister(rm->hdide, 1);

    case 0x0a:    // IDE sector count register
        return harddiskIdeReadRegister(rm->hdide, 2);

    case 0x0b:    // IDE sector number register
        return harddiskIdeReadRegister(rm->hdide, 3);

    case 0x0c:    // IDE cylinder low register
        return harddiskIdeReadRegister(rm->hdide, 4);

    case 0x0d:    // IDE cylinder high register
        return harddiskIdeReadRegister(rm->hdide, 5);

    case 0x0e:    // IDE drive/head register
        return harddiskIdeReadRegister(rm->hdide, 6);

    case 0x0f:    // IDE status register
        rm->altStatus = harddiskIdeReadRegister(rm->hdide, 7);
        return rm->altStatus;
    }
    return 0xff;
}
Example #3
0
UInt16 sunriseIdeRead(SunriseIde* ide)
{
    return harddiskIdeRead(ide->hdide[ide->currentDevice]);
}