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

Method VideoSetMode

source/Video.cpp:177–241  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

175//===========================================================================
176
177BYTE Video::VideoSetMode(WORD pc, WORD address, BYTE write, BYTE d, ULONG uExecutedCycles)
178{
179 const uint32_t oldVideoMode = g_uVideoMode;
180
181 VidHDCard* vidHD = GetCardMgr().GetVidHDCard();
182
183 address &= 0xFF;
184 switch (address)
185 {
186 case 0x00: g_uVideoMode &= ~VF_80STORE; break;
187 case 0x01: g_uVideoMode |= VF_80STORE; break;
188 case 0x0C: if (!IS_APPLE2) { g_uVideoMode &= ~VF_80COL; NTSC_SetVideoTextMode(40); } break;
189 case 0x0D: if (!IS_APPLE2) { g_uVideoMode |= VF_80COL; NTSC_SetVideoTextMode(80); } break;
190 case 0x0E: if (!IS_APPLE2) g_nAltCharSetOffset = 0; break; // Alternate char set off
191 case 0x0F: if (!IS_APPLE2) g_nAltCharSetOffset = 256; break; // Alternate char set on
192 case 0x22: if (vidHD) vidHD->VideoIOWrite(pc, address, write, d, uExecutedCycles); break; // VidHD IIgs video mode register
193 case 0x29: if (vidHD) vidHD->VideoIOWrite(pc, address, write, d, uExecutedCycles); break; // VidHD IIgs video mode register
194 case 0x34: if (vidHD) vidHD->VideoIOWrite(pc, address, write, d, uExecutedCycles); break; // VidHD IIgs video mode register
195 case 0x35: if (vidHD) vidHD->VideoIOWrite(pc, address, write, d, uExecutedCycles); break; // VidHD IIgs video mode register
196 case 0x50: g_uVideoMode &= ~VF_TEXT; break;
197 case 0x51: g_uVideoMode |= VF_TEXT; break;
198 case 0x52: g_uVideoMode &= ~VF_MIXED; break;
199 case 0x53: g_uVideoMode |= VF_MIXED; break;
200 case 0x54: g_uVideoMode &= ~VF_PAGE2; break;
201 case 0x55: g_uVideoMode |= VF_PAGE2; break;
202 case 0x56: g_uVideoMode &= ~VF_HIRES; break;
203 case 0x57: g_uVideoMode |= VF_HIRES; break;
204 case 0x5E: if (!IS_APPLE2) g_uVideoMode |= VF_DHIRES; break;
205 case 0x5F: if (!IS_APPLE2) g_uVideoMode &= ~VF_DHIRES; break;
206 }
207
208 if (vidHD && vidHD->IsSHR())
209 g_uVideoMode |= VF_SHR;
210 else
211 g_uVideoMode &= ~VF_SHR;
212
213 if (!IS_APPLE2)
214 RGB_SetVideoMode(address);
215
216 // Only 1-cycle delay for VF_TEXT & VF_MIXED mode changes (GH#656)
217 bool delay = false;
218 if ((oldVideoMode ^ g_uVideoMode) & (VF_TEXT|VF_MIXED))
219 delay = true;
220
221 uint32_t ntscVideoMode = g_uVideoMode;
222 if ((!IS_APPLE2) && (GetCardMgr().QueryAux() == CT_Empty || GetCardMgr().QueryAux() == CT_80Col)) // aux empty or 80col (GH#1341)
223 {
224 g_uVideoMode &= ~VF_DHIRES;
225 if (GetCardMgr().QueryAux() == CT_Empty)
226 {
227 if ((g_uVideoMode & VF_80COL) == 0)
228 g_uVideoMode &= ~VF_80COL_AUX_EMPTY;
229 else
230 g_uVideoMode |= VF_80COL_AUX_EMPTY;
231 }
232
233 ntscVideoMode = g_uVideoMode;
234 if (!(ntscVideoMode & VF_TEXT))

Callers 7

IOWrite_C00xFunction · 0.80
IOWrite_C02xFunction · 0.80
IOWrite_C03xFunction · 0.80
IOReadWrite_ANxFunction · 0.80
IORead_C05xFunction · 0.80
IOWrite_C05xFunction · 0.80
MemSetPagingFunction · 0.80

Calls 8

NTSC_SetVideoTextModeFunction · 0.85
RGB_SetVideoModeFunction · 0.85
NTSC_SetVideoModeFunction · 0.85
GetVidHDCardMethod · 0.80
VideoIOWriteMethod · 0.80
IsSHRMethod · 0.80
QueryAuxMethod · 0.80
MemReadFloatingBusFunction · 0.70

Tested by

no test coverage detected