[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]
{
Hi.. I am trying to do animation by flipping the two images between
the video pages, but I keep getting lines at the bottom of my screen,
and my screen color changes.. What's up here?
Did you synchronize to the {vertical|horizontal retrace beFore
flipping? I don't know how to do this, so any helpfull code from you will
be appreciated. I took this out of my ANIVGA-Unit:
At the very beginning of your Program, detect the address of the proper port
(StatusReg is a global Word Variable):
}
Asm {check whether we are running on a monochrome or color monitor}
MOV DX,3CCh {ask Output-register:}
in AL,DX
TEST AL,1 {is it a color monitor?}
MOV DX,3D4h
JNZ @L1 {yes}
MOV DX,3B4h {no }
@L1: {DX=3B4h/3D4h = CrtAddress-register For monochrome/color}
{ MOV CrtAddress,DX not needed For this purpose}
ADD DX,6 {DX=3BAh/3DAh = Status-register For monochrome/color}
MOV StatusReg,DX
end; {of Asm}
{
Later on, when you want to switch pages:
CLI {time critical routine: do not disturb!}
mov dx,StatusReg
@WaitnotVSyncLoop:
in al,dx
and al,8
jnz @WaitnotVSyncLoop
@WaitVSyncLoop:
in al,dx
and al,8
jz @WaitVSyncLoop
{
HERE! SWITCH PAGES NOW!!! IMMEDIATELY! do not USE BIOS-inTS or OTHER
TIME-WASTERS!
}
STI
{
Well, that's all there is... if you replace the 2 "and al,8" against "and al,1"
and exchange jnz<->jz, you are syncronizing at the horizontal retrace. But this
signal is extremely short (at least Compared With the vertical retr.).
}
[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]