
Untitled
By: a guest on
Sep 6th, 2012 | syntax:
C | size: 1.43 KB | views:
25 | expires: Never
void GZU_Write(int Addr,byte Value)
{
byte *GZU_Ptr=GZU[scr_Page_Acces]+(Addr&0x3fff)*4;
byte mask;
int a0,a1,a2,c0,c1,c2;
// char md;
a0=*(GZU_Ptr+0);
a1=*(GZU_Ptr+1);
a2=*(GZU_Ptr+2);
LineUpdateFlag[(Addr&0x3fff)>>6]=1;
if (NCREG & COLORMD) { //Color mode
*(GZU_Ptr+0)=(*(GZU_Ptr+0) & ~Value) | ((NCREG & 2)?Value:0);
*(GZU_Ptr+1)=(*(GZU_Ptr+1) & ~Value) | ((NCREG & 4)?Value:0);
*(GZU_Ptr+2)=(*(GZU_Ptr+2) & ~Value) | ((NCREG & 8)?Value:0);
} else { //Plane mode
// WBIT !!!!!!!!!!!!!!!!!!!!!!!
mask=(NCREG&WBIT)?Value:0;
if (!(NCREG & ~WSEL0)) {
*(GZU_Ptr+0)=(*(GZU_Ptr+0) & ~Value) | mask;
}
if (!(NCREG & ~WSEL1)) {
*(GZU_Ptr+1)=(*(GZU_Ptr+1) & ~Value) | mask;
}
if (!(NCREG & ~WSEL2)) {
*(GZU_Ptr+2)=(*(GZU_Ptr+2) & ~Value) | mask;
}
}
c0=*(GZU_Ptr+0);
c1=*(GZU_Ptr+1);
c2=*(GZU_Ptr+2);
}
byte GZU_Read(int Addr)
{
unsigned char *GZU_Ptr=GZU[scr_Page_Acces]+(Addr&0x3fff)*4;
unsigned char Value=0;
unsigned char C0;
unsigned char C1;
unsigned char C2;
C0=*GZU_Ptr++;
C1=*GZU_Ptr++;
C2=*GZU_Ptr++;
if (NCREG & COLORMD) { //Color mode
if (!(NCREG & RSEL0)) C0^=0xff;
if (!(NCREG & RSEL1)) C1^=0xff;
if (!(NCREG & RSEL2)) C2^=0xff;
Value=(C0&C1&C2)^0xff;
} else { //Plane mode
if (NCREG & RSEL0) Value|=C0;
if (NCREG & RSEL1) Value|=C1;
if (NCREG & RSEL2) Value|=C2;
}
return Value;
}