Changes

CRTC

2,438 bytes added, Wednesday at 08:20
/* Internal Counters */
The only value that is saved in a buffer in the CRTC is the video pointer MA because it is reloaded at each line start. The exception is the CRTC 1 for which the MA is reloaded with R12/R13 instead of MA' as long as C4=0.
 
<br>
 
=== HSC (C3l) overflow ===
 
During an HSYNC, if HSYNC Width (R3l) is changed with a value less than the current HSC, then HSC overflows and will continue to count up to its maximum value (15) before looping back.
 
The only exception is for CRTC 1 with a value of 0, which cancels the current HSYNC.
 
<br>
 
=== VSC (C3h) overflow ===
 
During a VSYNC on CRTCs 0/3/4, if VSYNC Width (R3h) is changed with a value less than the current VSC, then VSC overflows and will continue to count up to its maximum value (15) before looping back.
 
On CRTCs 1/2, the VSYNC width is fixed to 16 characters. It is not possible to modify it. Therefore, VSC cannot be overflowed.
 
<br>
 
=== VCC (C4) overflow ===
 
On all CRTCs, if Vertical Total (R4) is changed with a value less than VCC, then:
* if this update was done when VCC < R4, then VCC overflows and will continue to count up to its maximum value (127) before looping back
* if this update was done when VCC = R4, the current character line was already decided to be the last one of the current frame. No update to R4 will make the CRTC change its mind for the current frame
 
The only exception when VCC = R4 is for CRTC 1 with a value of 0, which will cause VCC to overflow.
 
<br>
 
=== HCC (C0) overflow ===
 
If Horizontal Total (R0) is changed with a value less than the current HCC, then:
* on CRTCs 0/1/2, HCC overflows and will count up to its maximum value (255) before looping back
* on CRTCs 3/4, the current line is considered finished and HCC is immediately reset to 0 on the next line
 
<br>
 
=== VLC (C9) overflow ===
 
If Number of Scan Lines (R9) is changed with a value less than the current VLC, then:
* on CRTCs 0/1/2, VLC overflows and will count up to its maximum value (31) before looping back
* on CRTCs 3/4, the current line is considered the last one of this CRTC character and VLC changes to 0 on the next line
 
<br>
 
=== VTAC overflow ===
 
During vertical adjustment mode, if Vertical Total Adjust (R5) is changed with a value less than the current VTAC, then:
* on CRTCs 0/1/2, VTAC overflows and will continue to count up to its maximum value (31) before looping back
* on CRTCs 3/4, the current line is considered the last one of the current frame and vertical adjustment ends
 
<br>
 
=== Vertical Adjustment mode ===
 
On CRTCs 0/1/2, this mode increments VCC and so VCC goes beyond R4.
 
On CRTCs 3/4, this mode does not increment VCC and so VCC stays equal to R4.
<br>
5,617
edits