/// <summary> /// Define how to handle an unattached port /// </summary> /// <param name="addr">Port address</param> /// <returns>Port value for the unhandled port address</returns> public override byte UnhandledRead(ushort addr) { var tact = HostVm.CurrentFrameTact % ScreenDevice.RenderingTactTable.Length; var rt = ScreenDevice.RenderingTactTable[tact]; var memAddr = (ushort)0; switch (rt.Phase) { case ScreenRenderingPhase.BorderFetchPixel: case ScreenRenderingPhase.DisplayB1FetchB2: case ScreenRenderingPhase.DisplayB2FetchB1: memAddr = rt.PixelByteToFetchAddress; break; case ScreenRenderingPhase.BorderFetchPixelAttr: case ScreenRenderingPhase.DisplayB1FetchA2: case ScreenRenderingPhase.DisplayB2FetchA1: memAddr = rt.AttributeToFetchAddress; break; } if (memAddr == 0) { return(0xFF); } var readValue = _memoryDevice.Read(memAddr, true); return(readValue); }