MCPcopy Create free account
hub / github.com/AppleWin/AppleWin / IORead

Method IORead

source/Disk.cpp:2155–2200  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2153}
2154
2155BYTE __stdcall Disk2InterfaceCard::IORead(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nExecutedCycles)
2156{
2157 CpuCalcCycles(nExecutedCycles); // g_nCumulativeCycles needed by most Disk I/O functions
2158
2159 UINT uSlot = ((addr & 0xff) >> 4) - 8;
2160 Disk2InterfaceCard* pCard = (Disk2InterfaceCard*) MemGetSlotParameters(uSlot);
2161
2162 ImageInfo* pImage = pCard->m_floppyDrive[pCard->m_currDrive].m_disk.m_imagehandle;
2163 bool isWOZ = ImageIsWOZ(pImage);
2164
2165 if (isWOZ && pCard->m_seqFunc.function == dataShiftWrite) // Occurs at end of sector write ($C0EE)
2166 pCard->DataShiftWriteWOZ(pc, addr, nExecutedCycles); // Finish any previous write
2167
2168 pCard->SetSequencerFunction(addr, nExecutedCycles);
2169
2170 switch (addr & 0xF)
2171 {
2172 case 0x0: pCard->ControlStepper(pc, addr, bWrite, d, nExecutedCycles); break;
2173 case 0x1: pCard->ControlStepper(pc, addr, bWrite, d, nExecutedCycles); break;
2174 case 0x2: pCard->ControlStepper(pc, addr, bWrite, d, nExecutedCycles); break;
2175 case 0x3: pCard->ControlStepper(pc, addr, bWrite, d, nExecutedCycles); break;
2176 case 0x4: pCard->ControlStepper(pc, addr, bWrite, d, nExecutedCycles); break;
2177 case 0x5: pCard->ControlStepper(pc, addr, bWrite, d, nExecutedCycles); break;
2178 case 0x6: pCard->ControlStepper(pc, addr, bWrite, d, nExecutedCycles); break;
2179 case 0x7: pCard->ControlStepper(pc, addr, bWrite, d, nExecutedCycles); break;
2180 case 0x8: pCard->ControlMotor(pc, addr, bWrite, d, nExecutedCycles); break;
2181 case 0x9: pCard->ControlMotor(pc, addr, bWrite, d, nExecutedCycles); break;
2182 case 0xA: isWOZ = pCard->Enable(pc, addr, bWrite, d, nExecutedCycles); break;
2183 case 0xB: isWOZ = pCard->Enable(pc, addr, bWrite, d, nExecutedCycles); break;
2184 case 0xC: if (!isWOZ) pCard->ReadWrite(pc, addr, bWrite, d, nExecutedCycles); break;
2185 case 0xD: pCard->LoadWriteProtect(pc, addr, bWrite, d, nExecutedCycles); break;
2186 case 0xE: pCard->SetReadMode(pc, addr, bWrite, d, nExecutedCycles); break;
2187 case 0xF: pCard->SetWriteMode(pc, addr, bWrite, d, nExecutedCycles); break;
2188 }
2189
2190 // only even addresses return the latch (UTAIIe Table 9.1)
2191 if (!(addr & 1))
2192 {
2193 if (isWOZ && pCard->m_seqFunc.function != dataShiftWrite)
2194 pCard->DataLatchReadWriteWOZ(pc, addr, bWrite, nExecutedCycles);
2195
2196 return pCard->m_floppyLatch;
2197 }
2198
2199 return MemReadFloatingBus(nExecutedCycles);
2200}
2201
2202BYTE __stdcall Disk2InterfaceCard::IOWrite(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nExecutedCycles)
2203{

Callers

nothing calls this directly

Calls 14

CpuCalcCyclesFunction · 0.85
MemGetSlotParametersFunction · 0.85
ImageIsWOZFunction · 0.85
DataShiftWriteWOZMethod · 0.80
SetSequencerFunctionMethod · 0.80
ControlStepperMethod · 0.80
ControlMotorMethod · 0.80
EnableMethod · 0.80
LoadWriteProtectMethod · 0.80
SetReadModeMethod · 0.80
SetWriteModeMethod · 0.80
DataLatchReadWriteWOZMethod · 0.80

Tested by

no test coverage detected