Пример #1
0
void sunriseIdeReset(SunriseIde* ide)
{
    ide->currentDevice = 0;
    ide->softReset = 0;
    harddiskIdeReset(ide->hdide[0]);
    harddiskIdeReset(ide->hdide[1]);
}
Пример #2
0
static void writeIo(RomMapperGIde* rm, UInt16 ioPort, UInt8 value) 
{
    switch (ioPort & 0x0f)
    {
    case 0x04:    // Reserved for expansion board
        break; 

    case 0x05:    // RTC 72421
        rtc72421Write(ioPort >> 8, value);
        break; 

    case 0x06:    // GIDE digital output register
        rm->intEnable = value & 0x01?1:0;
        if (value & 0x02)
            harddiskIdeReset(rm->hdide);
        break; 

    case 0x07:    // GIDE drive address register
        break; 

    case 0x08:    // IDE data register
        harddiskIdeWrite(rm->hdide, value);
        break; 

    case 0x09:    // IDE write precomp register
        harddiskIdeWriteRegister(rm->hdide, 1, value);
        break; 

    case 0x0a:    // IDE sector count register
        harddiskIdeWriteRegister(rm->hdide, 2, value);
        break; 

    case 0x0b:    // IDE sector number register
        harddiskIdeWriteRegister(rm->hdide, 3, value);
        break; 

    case 0x0c:    // IDE cylinder low register
        harddiskIdeWriteRegister(rm->hdide, 4, value);
        break; 

    case 0x0d:    // IDE cylinder high register
        harddiskIdeWriteRegister(rm->hdide, 5, value);
        break; 

    case 0x0e:    // IDE drive/head register
        rm->drvSelect = value;
        harddiskIdeWriteRegister(rm->hdide, 6, value);
        break; 

    case 0x0f:    // IDE command register
        harddiskIdeWriteRegister(rm->hdide, 7, value);
        break; 
    }
}
Пример #3
0
HarddiskIde* harddiskIdeCreate(int diskId)
{
    HarddiskIde* hd = malloc(sizeof(HarddiskIde));

    hd->diskId = diskId;
    hd->transferRead = 0;
    hd->transferWrite = 0;

    harddiskIdeReset(hd);

    return hd;
}
Пример #4
0
void sunriseIdeWriteRegister(SunriseIde* ide, UInt8 reg, UInt8 value)
{
    if (ide->softReset) {
        if ((reg == 14) && !(value & 0x04)) {
            ide->softReset = 0;
        }
        return;
    }

    if (reg == 0) {
        sunriseIdeWrite(ide, (value << 8) | value);
        return;
    }

    if ((reg == 14) && (value & 0x04)) {
        ide->softReset = 1;
        harddiskIdeReset(ide->hdide[0]);
        harddiskIdeReset(ide->hdide[1]);
        return;
    }

    if (reg == 6) {
        ide->currentDevice = (value >> 4) & 1;
    }
Пример #5
0
static void reset(RomMapperGIde* rm)
{
    harddiskIdeReset(rm->hdide);
}
static void reset(RomMapperRsIde* rm)
{
    harddiskIdeReset(rm->hdide);

    i8255Reset(rm->i8255);
}