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

Method IOWrite

source/Disk.cpp:2202–2247  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2200}
2201
2202BYTE __stdcall Disk2InterfaceCard::IOWrite(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nExecutedCycles)
2203{
2204 CpuCalcCycles(nExecutedCycles); // g_nCumulativeCycles needed by most Disk I/O functions
2205
2206 UINT uSlot = ((addr & 0xff) >> 4) - 8;
2207 Disk2InterfaceCard* pCard = (Disk2InterfaceCard*) MemGetSlotParameters(uSlot);
2208
2209 ImageInfo* pImage = pCard->m_floppyDrive[pCard->m_currDrive].m_disk.m_imagehandle;
2210 bool isWOZ = ImageIsWOZ(pImage);
2211
2212 if (isWOZ && pCard->m_seqFunc.function == dataShiftWrite)
2213 pCard->DataShiftWriteWOZ(pc, addr, nExecutedCycles); // Finish any previous write
2214
2215 pCard->SetSequencerFunction(addr, nExecutedCycles);
2216
2217 switch (addr & 0xF)
2218 {
2219 case 0x0: pCard->ControlStepper(pc, addr, bWrite, d, nExecutedCycles); break;
2220 case 0x1: pCard->ControlStepper(pc, addr, bWrite, d, nExecutedCycles); break;
2221 case 0x2: pCard->ControlStepper(pc, addr, bWrite, d, nExecutedCycles); break;
2222 case 0x3: pCard->ControlStepper(pc, addr, bWrite, d, nExecutedCycles); break;
2223 case 0x4: pCard->ControlStepper(pc, addr, bWrite, d, nExecutedCycles); break;
2224 case 0x5: pCard->ControlStepper(pc, addr, bWrite, d, nExecutedCycles); break;
2225 case 0x6: pCard->ControlStepper(pc, addr, bWrite, d, nExecutedCycles); break;
2226 case 0x7: pCard->ControlStepper(pc, addr, bWrite, d, nExecutedCycles); break;
2227 case 0x8: pCard->ControlMotor(pc, addr, bWrite, d, nExecutedCycles); break;
2228 case 0x9: pCard->ControlMotor(pc, addr, bWrite, d, nExecutedCycles); break;
2229 case 0xA: isWOZ = pCard->Enable(pc, addr, bWrite, d, nExecutedCycles); break;
2230 case 0xB: isWOZ = pCard->Enable(pc, addr, bWrite, d, nExecutedCycles); break;
2231 case 0xC: if (!isWOZ) pCard->ReadWrite(pc, addr, bWrite, d, nExecutedCycles); break;
2232 case 0xD: pCard->LoadWriteProtect(pc, addr, bWrite, d, nExecutedCycles); break;
2233 case 0xE: pCard->SetReadMode(pc, addr, bWrite, d, nExecutedCycles); break;
2234 case 0xF: pCard->SetWriteMode(pc, addr, bWrite, d, nExecutedCycles); break;
2235 }
2236
2237 // any address writes the latch via sequencer LD command (74LS323 datasheet)
2238 if (pCard->m_seqFunc.function == dataLoadWrite)
2239 {
2240 pCard->m_floppyLatch = d;
2241
2242 if (isWOZ)
2243 pCard->DataLatchReadWriteWOZ(pc, addr, bWrite, nExecutedCycles);
2244 }
2245
2246 return 0;
2247}
2248
2249//===========================================================================
2250

Callers

nothing calls this directly

Calls 13

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