108 lines
1.9 KiB
C++
108 lines
1.9 KiB
C++
//////////////////////////////////////////////////////////////////////////
|
|
// Oekakids Tablet //
|
|
//////////////////////////////////////////////////////////////////////////
|
|
void EXPAD_OekakidsTablet::Reset()
|
|
{
|
|
olddata = 0;
|
|
outbits = 0;
|
|
databits = 0;
|
|
|
|
zapper_x = 0;
|
|
zapper_y = 0;
|
|
zapper_button = 0;
|
|
}
|
|
|
|
BYTE EXPAD_OekakidsTablet::Read4017()
|
|
{
|
|
return outbits;
|
|
}
|
|
|
|
void EXPAD_OekakidsTablet::Write4016( BYTE data )
|
|
{
|
|
if( zapper_y < 48 ) {
|
|
DirectDraw.SetZapperDrawMode( TRUE );
|
|
} else {
|
|
DirectDraw.SetZapperDrawMode( FALSE );
|
|
}
|
|
|
|
if( !(data & 0x01) ) {
|
|
outbits = 0;
|
|
databits = 0;
|
|
|
|
if( zapper_button )
|
|
databits |= 0x0001;
|
|
|
|
LONG x, y;
|
|
|
|
if( zapper_y >= 48 ) {
|
|
databits |= 0x0002;
|
|
} else if( zapper_button ) {
|
|
databits |= 0x0003;
|
|
}
|
|
|
|
if( zapper_x < 0 ) {
|
|
x = 0;
|
|
} else {
|
|
x = ((240*zapper_x)/256)+8;
|
|
}
|
|
if( zapper_y < 0 ) {
|
|
y = 0;
|
|
} else {
|
|
y = ((256*zapper_y)/240)-12;
|
|
if( y < 0 )
|
|
y = 0;
|
|
}
|
|
|
|
databits = databits | (x << 10) | (y << 2);
|
|
} else {
|
|
// L->H
|
|
if( ((~olddata)&data) & 0x02 ) {
|
|
databits <<= 1;
|
|
}
|
|
if( !(data & 0x02) ) {
|
|
outbits = 0x04;
|
|
} else
|
|
if( databits & 0x40000 ) {
|
|
outbits = 0x00;
|
|
} else {
|
|
outbits = 0x08;
|
|
}
|
|
olddata = data;
|
|
}
|
|
}
|
|
|
|
void EXPAD_OekakidsTablet::Sync()
|
|
{
|
|
nes->GetZapperPos( zapper_x, zapper_y );
|
|
|
|
zapper_button = 0;
|
|
if( ::GetAsyncKeyState(VK_LBUTTON)&0x8000 )
|
|
zapper_button = 0xFF;
|
|
}
|
|
|
|
void EXPAD_OekakidsTablet::SetSyncData( INT type, LONG data )
|
|
{
|
|
if( type == 0 ) {
|
|
zapper_x = data;
|
|
} else if( type == 1 ) {
|
|
zapper_y = data;
|
|
} else if( type == 2 ) {
|
|
zapper_button = data?0xFF:0x00;
|
|
}
|
|
}
|
|
|
|
LONG EXPAD_OekakidsTablet::GetSyncData( INT type )
|
|
{
|
|
LONG data = 0;
|
|
|
|
if( type == 0 ) {
|
|
data = zapper_x;
|
|
} else if( type == 1 ) {
|
|
data = zapper_y;
|
|
} else if( type == 2 ) {
|
|
data = zapper_button?0xFF:0x00;
|
|
}
|
|
return data;
|
|
}
|
|
|