private void HandleExtbioCall() { if (cpu.Registers.DE != 0x2222 || cpu.Registers.A == 0xFF) { return; } var suppliedSpecIdentifier = Encoding.ASCII.GetString(GetMemoryContents(ARG, SpecIdentifier.Length + 1)); if (!suppliedSpecIdentifier.Equals(SpecIdentifier + "\0", StringComparison.InvariantCultureIgnoreCase)) { return; } if (cpu.Registers.A == 0) { cpu.Registers.B++; return; } if (cpu.Registers.A == 1) { cpu.Registers.A = slotNumber; cpu.Registers.B = 0xFF; cpu.Registers.HL = EntryPointAddress; cpu.ExecuteRet(); return; } cpu.Registers.A--; }
private void BeforeZ80InstructionFetch(ushort instructionAddress) { if (memory.GetCurrentSlot(1) != slotNumber) { return; } if (kernelRoutines.ContainsKey(z80.Registers.PC)) { var routine = kernelRoutines[z80.Registers.PC]; routine(); z80.ExecuteRet(); } }
private void CpuOnBeforeInstructionFetch(object sender, BeforeInstructionFetchEventArgs e) { if (!hookedMethods.ContainsKey(regs.PC)) { return; } if (segmentNumber == null && (mappedRam = slotsSystem.GetSlotContents(slotsSystem.GetCurrentSlot(1)) as IMappedRam) != null && ExtractString(0x4000, 14) == "FileSysDriver") { segmentNumber = mappedRam.GetBlockInBank(1); } if (segmentNumber != null && mappedRam?.GetBlockInBank(1) == segmentNumber.Value && slotsSystem.GetSlotContents(slotsSystem.GetCurrentSlot(1)) == mappedRam) { hookedMethods[regs.PC](); cpu.ExecuteRet(); } }