AxibugEmuOnline/References/VirtuaNESex_src_191105/NES/Mapper/Mapper169.cpp
2024-08-05 17:58:53 +08:00

660 lines
17 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//////////////////////////////////////////////////////////////////////////
// Mapper169 for YuXing //
//////////////////////////////////////////////////////////////////////////
//for FDC code by fanoble
static const Mapper169::FDC_CMD_DESC FdcCmdTable[32] =
{
/* 0x00 */ { 1, 1, Mapper169::FdcNop },
/* 0x01 */ { 1, 1, Mapper169::FdcNop },
/* 0x02 */ { 9, 7, Mapper169::FdcReadTrack },
/* 0x03 */ { 3, 0, Mapper169::FdcSpecify },
/* 0x04 */ { 2, 1, Mapper169::FdcSenseDriveStatus },
/* 0x05 */ { 9, 7, Mapper169::FdcWriteData },
/* 0x06 */ { 9, 7, Mapper169::FdcReadData },
/* 0x07 */ { 2, 0, Mapper169::FdcRecalibrate },
/* 0x08 */ { 1, 2, Mapper169::FdcSenseIntStatus },
/* 0x09 */ { 9, 7, Mapper169::FdcWriteDeletedData },
/* 0x0A */ { 2, 7, Mapper169::FdcReadID },
/* 0x0B */ { 1, 1, Mapper169::FdcNop },
/* 0x0C */ { 9, 7, Mapper169::FdcReadDeletedData },
/* 0x0D */ { 6, 7, Mapper169::FdcFormatTrack },
/* 0x0E */ { 1, 1, Mapper169::FdcNop },
/* 0x0F */ { 3, 0, Mapper169::FdcSeek },
/* 0x10 */ { 1, 1, Mapper169::FdcNop },
/* 0x11 */ { 9, 7, Mapper169::FdcScanEqual },
/* 0x12 */ { 1, 1, Mapper169::FdcNop },
/* 0x13 */ { 1, 1, Mapper169::FdcNop },
/* 0x14 */ { 1, 1, Mapper169::FdcNop },
/* 0x15 */ { 1, 1, Mapper169::FdcNop },
/* 0x16 */ { 1, 1, Mapper169::FdcNop },
/* 0x17 */ { 1, 1, Mapper169::FdcNop },
/* 0x18 */ { 1, 1, Mapper169::FdcNop },
/* 0x19 */ { 9, 7, Mapper169::FdcScanLowOrEqual },
/* 0x1A */ { 1, 1, Mapper169::FdcNop },
/* 0x1B */ { 1, 1, Mapper169::FdcNop },
/* 0x1C */ { 1, 1, Mapper169::FdcNop },
/* 0x1D */ { 9, 7, Mapper169::FdcScanHighOrEqual },
/* 0x1E */ { 1, 1, Mapper169::FdcNop },
/* 0x1F */ { 1, 1, Mapper169::FdcNop },
};
void Mapper169::Reset()
{
DWORD crc = nes->rom->GetPROM_CRC();
if(crc == 0x2B1B969E //YX_V8.2-D
|| crc == 0xA70FD0F3) //YX_V8.3-D
{
YX_type = 0; //DÐÍ
}
if(crc == 0x6085FEE8 //YX_V9.0-98
|| crc == 0x2A1E4D89 //YX_V9.2-98
|| crc == 0x5C6CE13E) //YX_V9.2-F
{
YX_type = 1; //98ÐÍ & FÐÍ
}
nes->ppu->SetExtLatchMode( TRUE );
reg[0] = 0xFF; //$5002
reg[1] = 0x00; //$4800
reg[2] = 0x00; //$5500
reg[3] = 0x00; //$5501
reg[4] = 0x00; //PPU_Latch
reg[5] = 0x00; //$8000
reg[6] = 0x00;
reg[7] = 0x01;
cmd_4800_6 = 0x00;
cmd_4800_7 = 0x00;
cmd_4800_8 = 0x00;
cmd_5500_3 = 0x00;
cmd_5500_8 = 0x00;
cmd_5501_8 = 0x00;
key_map_row = 0x00;
MMC3_mode = 0x00;
SetPROM_32K_Bank( 0 );
SetYCRAM_8K_Bank( 0 );
/*
//--for test disk program-----------------------------------------
int fs;
fs = 0x000000;
fs = 0x100000;
memcpy( YWRAM, PROM+fs, PROM_8K_SIZE*0x2000-fs);
memcpy( YWRAM+0xFC000, PROM+(PROM_16K_SIZE-1)*0x4000, 0x4000);
SetYWRAM_32K_Bank( 0, 1, 0x7e, 0x7f );
//----------------------------------------------------------------
*/
lpDisk = NULL;
DISK = NULL;
if(Load_DiskIMG() != NULL) DISK = Load_DiskIMG();
read_mode = 0;
read_mode1 = 0;
nnn = 0;
//for FDC code by fanoble
pFdcDataPtr = DISK;
bFdcIrq = FALSE;
bFdcHwReset = FALSE;
bFdcSoftReset = FALSE;
bFdcDmaInt = FALSE;
nFdcDrvSel = 0;
nFdcMotor = 0;
nFdcMainStatus = FDC_MS_RQM;
nFDCStatus[0] = 0;
nFDCStatus[1] = 0;
nFDCStatus[2] = 0;
nFDCStatus[3] = 0;
bFdcCycle = 0;
bFdcPhase = FDC_PH_IDLE;
nFdcCylinder = 0;
nFdcHeadAddres = 0;
nFdcRecord = 0;
nFdcNumber = 0;
}
BYTE Mapper169::ReadLow( WORD addr )
{
// if(addr>0x4207) DEBUGOUT( "ReadL A=%04X D=%02X L=%3d CYC=%d\n", addr&0xFFFF, Mapper::ReadLow( addr ), nes->GetScanline(), nes->cpu->GetTotalCycles() );
int key_map[14][8] = { //YuXing_Keyboard data by tpu (fix by temryu)
{DIK_ESCAPE, DIK_F9, DIK_7, DIK_R, DIK_A, 0x00, 0x00, DIK_LSHIFT},
{0x00, DIK_NUMPADENTER,0x00, DIK_MULTIPLY,DIK_DIVIDE, DIK_UP, DIK_BACKSPACE,DIK_F12 },
{0x00, 0x00, 0x00, DIK_ADD, DIK_NUMLOCK,DIK_LEFT, DIK_DOWN, DIK_RIGHT },
{0x00, DIK_NUMPAD7, DIK_NUMPAD8,DIK_SUBTRACT,DIK_NUMPAD9,DIK_F11, DIK_END, DIK_PGDN },
{DIK_F8, DIK_6, DIK_E, DIK_RBRACKET,DIK_L, DIK_Z, DIK_N, DIK_SPACE },
{DIK_F7, DIK_5, DIK_W, DIK_LBRACKET,DIK_K, DIK_DELETE, DIK_B, DIK_SLASH },
{DIK_F6, DIK_4, DIK_Q, DIK_P, DIK_J, DIK_BACKSLASH, DIK_V, DIK_PERIOD},
{DIK_F5, DIK_3, DIK_EQUALS, DIK_O, DIK_H, DIK_APOSTROPHE,DIK_C, DIK_COMMA },
{DIK_F4, DIK_2, DIK_MINUS, DIK_I, DIK_G, DIK_SEMICOLON, DIK_X, DIK_M },
{DIK_F3, DIK_1, DIK_0, DIK_U, DIK_F, DIK_CAPITAL, DIK_LWIN, 0x00 },
{DIK_F2, DIK_GRAVE, DIK_9, DIK_Y, DIK_D, DIK_LCONTROL, DIK_LMENU, DIK_SCROLL},
{DIK_F1, DIK_RETURN, DIK_8, DIK_T, DIK_S, 0x00, DIK_RWIN, DIK_APPS },
{DIK_DECIMAL,DIK_F10, DIK_NUMPAD4,DIK_NUMPAD6, DIK_NUMPAD5,DIK_INSERT, DIK_HOME, DIK_PGUP },
{0x00, DIK_NUMPAD0, DIK_NUMPAD1,DIK_NUMPAD3, DIK_NUMPAD2,DIK_SYSRQ, DIK_TAB, DIK_PAUSE },
};
if( YX_type == 0 ) //for D (without new keys)
{
key_map[9][6] = 0x00;
key_map[11][6] = 0x00;
key_map[11][7] = 0x00;
}
switch( addr ) {
case 0x4207: //YuXing_Keyboard code by tpu
int r, i, data;
data = 0;
for(r=0; r<14; r++){
if(key_map_row&(1<<r)){
for(i=0; i<8; i++){
if(key_map[r][i])
if(DirectInput.m_Sw[key_map[r][i]]) data |= 1<<i;
//special cases
if((r== 0)&&(i==7))
if(DirectInput.m_Sw[DIK_RSHIFT ]) data |= 1<<i;
if((r==10)&&(i==5))
if(DirectInput.m_Sw[DIK_RCONTROL ]) data |= 1<<i;
if((r==10)&&(i==6))
if(DirectInput.m_Sw[DIK_RMENU ]) data |= 1<<i;
}
}
}
return data;
break;
case 0x5002:
return reg[0];
break;
case 0x4304: //FDCÖ÷״̬¼Ä´æÆ÷(STATUS)
// DEBUGOUT( "Read 0x4304 = %04X\n", nFdcMainStatus );
return nFdcMainStatus;
break;
case 0x4305: //FDC¶ÁÊý¾Ý???
if(read_mode){
read_mode1++;
if(read_mode1==512) read_mode=0;
if(read_mode1==512) nnn++;
// if(read_mode1==512) DEBUGOUT( "nnn = %04X\n", nnn );
// if(nFdcRecord==0x12) nFdcMainStatus = FDC_MS_RQM;
reg[6] = *(pFdcDataPtr++);
return reg[6];
}
DEBUGOUT( "Read 0x4305 = %04X\n", bFdcResults[bFdcCycle] );
read_mode1 = 0;
reg[6] = bFdcResults[bFdcCycle];
bFdcCycle++;
if (bFdcCycle == pFdcCmd->bRLength)
{
bFdcCycle = 0;
bFdcPhase = FDC_PH_IDLE;
nFdcMainStatus &= ~FDC_MS_DATA_IN;
nFdcMainStatus |= FDC_MS_RQM;
// if((bFdcCommands[0]&0x0F)==0x06) read_mode1 = 1;
}
return reg[6];
break;
}
if(addr>=0x6000) return CPU_MEM_BANK[addr>>13][addr&0x1FFF];
return Mapper::ReadLow( addr );
}
void Mapper169::WriteLow( WORD addr, BYTE data )
{
if(addr>=0x6000) CPU_MEM_BANK[addr>>13][addr&0x1FFF]=data;
// if(addr>0x4207) DEBUGOUT( "WriteL A=%04X D=%02X L=%3d CYC=%d\n", addr&0xFFFF, data&0xFF, nes->GetScanline(), nes->cpu->GetTotalCycles() );
switch( addr ) {
case 0x4200://DCR
DEBUGOUT( "Write 0x4200 = %04X\n", data );
//
break;
case 0x4201://FDCÊý×ÖÊä³ö¼Ä´æÆ÷(DOR)(Êý×Ö¿ØÖƼĴæÆ÷)
DEBUGOUT( "Write 0x4201 = %04X\n", data );
bFdcDmaInt = (data & 8) ? TRUE : FALSE;
nFdcDrvSel = data & 3;
nFdcMotor = data >> 4;
if (data & 4)
{
if (bFdcSoftReset)
{
FdcSoftReset();
bFdcSoftReset = FALSE;
// irq after soft reset
if (0 == nFdcDrvSel)
bFdcIrq = TRUE; // Drv A Only
else
bFdcIrq = FALSE;
}
}
else
{
if (!bFdcSoftReset)
{
bFdcSoftReset = TRUE;
bFdcIrq = FALSE;
}
}
/*
if (data & 0x80)
{
if (!bFdcHwReset)
{
bFdcHwReset = TRUE;
bFdcIrq = FALSE;
}
}
else
{
if (bFdcHwReset)
{
FdcHardReset();
bFdcHwReset = FALSE;
}
}
*/
break;
case 0x4205: //FDCдÊý¾Ý???
DEBUGOUT( "Write 0x4205 = %04X\n", data );
read_mode = 0;
switch (bFdcPhase)
{
case FDC_PH_EXECUTION:
case FDC_PH_RESULT:
// ERROR
break;
case FDC_PH_IDLE:
default:
bFdcCycle = 0;
bFdcPhase = FDC_PH_COMMAND;
pFdcCmd = &FdcCmdTable[data & FDC_CC_MASK];
// fall through
case FDC_PH_COMMAND:
bFdcCommands[bFdcCycle] = data;
bFdcCycle++;
if (bFdcCycle == pFdcCmd->bWLength)
{
bFdcPhase = FDC_PH_EXECUTION;
pFdcCmd->pFun(this);
if (pFdcCmd->bRLength)
{
nFdcMainStatus |= FDC_MS_DATA_IN;
nFdcMainStatus |= FDC_MS_RQM;
bFdcPhase = FDC_PH_RESULT;
if((bFdcCommands[0]&0x0F)==0x06) read_mode = 1;
}
else
{
bFdcPhase = FDC_PH_IDLE;
}
bFdcCycle = 0;
}
break;
}
break;
case 0x4202: //YuXing_Keyboard
key_map_row &= 0xff00;
key_map_row |= data;
break;
case 0x4203: //YuXing_Keyboard
case 0x4303:
key_map_row &= 0x00ff;
key_map_row |= (data & 0x3f)<<8;
break;
case 0x4800:
reg[1] = data;
cmd_4800_6 = reg[1]&0x20; //»ñÈ¡µÚ6룬RAM¿ª¹Ø£¬1´ò¿ª£¬0¹Ø±Õ
cmd_4800_7 = reg[1]&0x40; //»ñÈ¡µÚ7λ
cmd_4800_8 = reg[1]&0x80; //»ñÈ¡µÚ8룬ÓÃÓÚ¿ØÖÆPPU_ExtLatch
SetBank_CPU();
break;
case 0x5500:
reg[2] = data;
cmd_5500_3 = reg[2]&0x04; //»ñÈ¡µÚ3룬Óë¿ØÖÆRAMÓйØ
cmd_5500_8 = reg[2]&0x80; //»ñÈ¡µÚ8룬ÓÃÓÚ¿ØÖÆPPU_Latch
SetBank_CPU();
break;
case 0x5501:
reg[3] = data;
cmd_5501_8 = reg[3]&0x80; //»ñÈ¡µÚ8룬¿ªÆôMMC3ģʽ£¬µ÷Óá°ÉñÆæ»­°å¡±Ñ¡Ïî(???)
SetYCRAM_8K_Bank( reg[3] & 0x7F );
if(cmd_5501_8){
MMC3_mode = 1;
SetYWRAM_16K_Bank( 6, 0x1F );
}else{
MMC3_mode = 0;
}
break;
}
}
void Mapper169::Write( WORD addr, BYTE data )
{
if(cmd_5500_3 && MMC3_mode){
MMC3_WriteH( addr, data );
return;
}
if(cmd_5500_3){
if(cmd_4800_6){
reg[5] = data&0x3F;
}else{
WriteCPU_PRAM( addr, data );
}
}
}
void Mapper169::SetBank_CPU()
{
if(cmd_5500_3 && MMC3_mode) return;
if(cmd_5500_3){
SetYWRAM_16K_Bank( 4, reg[5] );
SetYWRAM_16K_Bank( 6, 0x3F );
}else{
SetPROM_32K_Bank(reg[1]&0x1F);
}
// DEBUGOUT( "reg[2] = %04X\n", reg[2] );
SetPROM_Bank( 3, &YSRAM[0x2000*(reg[2]&0x3)], BANKTYPE_RAM );
// CPU_MEM_PAGE[3]=reg[2]&0x3;
if((reg[2]&0x3)==0) SetPROM_Bank( 3, &YWRAM[0x78000], BANKTYPE_RAM );
}
void Mapper169::WriteCPU_PRAM( WORD addr, BYTE data )
{
if(addr<0xC000){
YWRAM[(addr-0x8000)+(reg[5]*0x4000)] = data;
}else{
YWRAM[addr+0xF0000] = data; //HOME BANK
}
}
void Mapper169::PPU_Latch( WORD addr )
{
if((addr&0xF000)==0x2000){
reg[4]=(addr>>8)&0x03;
if(cmd_4800_8 && cmd_5500_8){
SetYCRAM_8K_Bank((reg[4]<<2)+(reg[3]&0x03));
SetYCRAM_4K_Bank(0,reg[3]<<1);
}
}
/*
if(DirectInput.m_Sw[DIK_PAUSE]){
nes->Dump_YWRAM();
nes->Dump_YSRAM();
nes->Dump_CPULMEM();
nes->Dump_CPUHMEM();
}
*/
}
void Mapper169::PPU_ExtLatchX( INT x )
{
a3 = (x&1)<<3;
}
void Mapper169::PPU_ExtLatch( WORD ntbladr, BYTE& chr_l, BYTE& chr_h, BYTE& attr )
{
INT loopy_v = nes->ppu->GetPPUADDR();
INT loopy_y = nes->ppu->GetTILEY();
INT tileofs = (PPUREG[0]&PPU_BGTBL_BIT)<<8;
INT attradr = 0x23C0+(loopy_v&0x0C00)+((loopy_v&0x0380)>>4);
INT attrsft = (ntbladr&0x0040)>>4;
LPBYTE pNTBL = PPU_MEM_BANK[ntbladr>>10];
INT ntbl_x = ntbladr&0x001F;
INT tileadr;
attradr &= 0x3FF;
attr = ((pNTBL[attradr+(ntbl_x>>2)]>>((ntbl_x&2)+attrsft))&3)<<2;
tileadr = tileofs+pNTBL[ntbladr&0x03FF]*0x10+loopy_y;
if(cmd_4800_8 && !cmd_5500_8){
if(reg[4]&0x02) tileadr |= 0x1000;
else tileadr &= ~0x1000;
tileadr = (tileadr&0xfff7)|a3;
chr_l = chr_h = PPU_MEM_BANK[tileadr>>10][ tileadr&0x03FF ];
}else{
chr_l = PPU_MEM_BANK[tileadr>>10][ tileadr&0x03FF ];
chr_h = PPU_MEM_BANK[tileadr>>10][(tileadr&0x03FF)+8];
}
}
BYTE Mapper169::PPU_ExtLatchSP() //²¿·ÖÐÞÕý¾«ÁéÑÕÉ«ÎÊÌ⣬δÍêÈ«
{
if(cmd_4800_8 && !cmd_5500_8)
return 2; //ÔÝʱÈç´Ë´¦Àí£¬¾ßÌåÔ­Òòδ֪£¬¼«ÓпÉÄÜÊÇVirtuaNES±¾ÉíµÄÎÊÌâ¡£
return 0;
}
void Mapper169::MMC3_WriteH( WORD addr, BYTE data )
{
switch(addr) {
case 0x8000:
MMC3_reg = data;
MMC3_SetBank_CPU();
MMC3_SetBank_PPU();
break;
case 0x8001:
switch(MMC3_reg&0x07) {
case 0x02:
MMC3_chr4 = data;
MMC3_SetBank_PPU();
break;
case 0x03:
MMC3_chr5 = data;
MMC3_SetBank_PPU();
break;
case 0x04:
MMC3_chr6 = data;
MMC3_SetBank_PPU();
break;
case 0x05:
MMC3_chr7 = data;
MMC3_SetBank_PPU();
break;
case 0x06:
MMC3_prg0 = data;
MMC3_SetBank_CPU();
break;
case 0x07:
MMC3_prg1 = data;
MMC3_SetBank_CPU();
break;
}
break;
}
}
void Mapper169::MMC3_SetBank_CPU()
{
SetYWRAM_32K_Bank( MMC3_prg0, MMC3_prg1, 0x3E, 0x3F );
}
void Mapper169::MMC3_SetBank_PPU()
{
SetYCRAM_1K_Bank( 4, MMC3_chr4&0x0F );
SetYCRAM_1K_Bank( 5, MMC3_chr5&0x0F );
SetYCRAM_1K_Bank( 6, MMC3_chr6&0x0F );
SetYCRAM_1K_Bank( 7, MMC3_chr7&0x0F );
}
LPBYTE Mapper169::Load_DiskIMG()
{
FILE *fp = NULL;
if( !(lpDisk = (LPBYTE)malloc( 0x168000 )) ) {
throw CApp::GetErrorString( IDS_ERROR_OUTOFMEMORY );
}
if( !(fp = ::fopen( "YuXing.img", "rb" )) ) {
LPCSTR szErrStr = CApp::GetErrorString( IDS_ERROR_OPEN );
::wsprintf( szErrorString, szErrStr, "YuXing.img" );
throw szErrorString;
}
::fread(lpDisk, 0x168000, 1, fp);
FCLOSE(fp);
return lpDisk;
}
//for FDC code by fanoble
void Mapper169::FdcHardReset(void)
{
DEBUGOUT( "FdcHardReset!!!\n" );
bFdcDmaInt = FALSE;
FdcSoftReset();
}
void Mapper169::FdcSoftReset(void)
{
DEBUGOUT( "FdcSoftReset!!!\n" );
nFdcDrvSel = 0;
nFdcMotor = 0;
nFdcMainStatus = FDC_MS_RQM;
nFDCStatus[0] = 0;
nFDCStatus[1] = 0;
nFDCStatus[2] = 0;
nFDCStatus[3] = 0;
bFdcCycle = 0;
bFdcPhase = FDC_PH_IDLE;
}
//¶ÁÊý¾ÝÃüÁî(READ DATA)
void Mapper169::FdcReadData(Mapper169* thiz)
{
DEBUGOUT( "FdcReadData!!!\n" );
BYTE C = thiz->bFdcCommands[2]; //´ÅµÀºÅ
BYTE H = thiz->bFdcCommands[3]; //´ÅÍ·ºÅ
BYTE R = thiz->bFdcCommands[4]; //ÉÈÇøºÅ
BYTE N = thiz->bFdcCommands[5];
INT LBA = H * 18 + C * 36 + (R - 1);
DEBUGOUT( "C = %04X\n", C );
DEBUGOUT( "H = %04X\n", H );
DEBUGOUT( "R = %04X\n", R );
DEBUGOUT( "N = %04X\n", N );
thiz->pFdcDataPtr = thiz->DISK + LBA * 512;
R++;
if (19 == R)
{
R = 1;
H++;
if (2 == H)
{
C++;
if (80 == C)
C = 0;
}
}
thiz->nFDCStatus[0] = 0;
thiz->bFdcResults[0] = thiz->nFDCStatus[0]; // ST0
thiz->bFdcResults[1] = thiz->nFDCStatus[1]; // ST1
thiz->bFdcResults[2] = thiz->nFDCStatus[2]; // ST2
thiz->bFdcResults[3] = C;
thiz->bFdcResults[4] = H;
thiz->bFdcResults[5] = R;
thiz->bFdcResults[6] = N;
thiz->nFdcCylinder = C;
thiz->nFdcHeadAddres = H;
thiz->nFdcRecord = R;
thiz->nFdcNumber = N;
}
//дÊý¾ÝÃüÁî(WRITE DATA)
void Mapper169::FdcWriteData(Mapper169* thiz)
{
DEBUGOUT( "FdcWriteData!!!\n" );
thiz = thiz;
}
void Mapper169::FdcNop(Mapper169* thiz)
{
DEBUGOUT( "FdcNop!!!\n" );
thiz->nFDCStatus[0] = FDC_S0_IC1;
thiz->bFdcResults[0] = thiz->nFDCStatus[0];
}
void Mapper169::FdcReadTrack(Mapper169* thiz)
{
DEBUGOUT( "FdcReadTrack!!!\n" );
thiz = thiz;
}
void Mapper169::FdcSpecify(Mapper169* thiz)
{
DEBUGOUT( "FdcSpecify!!!\n" );
thiz = thiz;
}
void Mapper169::FdcSenseDriveStatus(Mapper169* thiz)
{
DEBUGOUT( "FdcSenseDriveStatus!!!\n" );
thiz->bFdcResults[0] = thiz->nFDCStatus[3];
}
void Mapper169::FdcRecalibrate(Mapper169* thiz)
{
DEBUGOUT( "FdcRecalibrate!!!\n" );
thiz->nFdcCylinder = 0; //´ÅÍ·»Øµ½0´ÅµÀ
thiz->nFDCStatus[0] |= FDC_S0_SE;
}
void Mapper169::FdcSenseIntStatus(Mapper169* thiz)
{
DEBUGOUT( "FdcSenseIntStatus!!!\n" );
thiz->bFdcResults[0] = thiz->nFDCStatus[0];
thiz->bFdcResults[1] = thiz->nFdcCylinder;
}
void Mapper169::FdcWriteDeletedData(Mapper169* thiz)
{
DEBUGOUT( "FdcWriteDeletedData!!!\n" );
thiz = thiz;
}
void Mapper169::FdcReadID(Mapper169* thiz)
{
DEBUGOUT( "FdcReadID!!!\n" );
thiz->nFDCStatus[0] = 0;
thiz->bFdcResults[0] = thiz->nFDCStatus[0];
thiz->bFdcResults[1] = thiz->nFDCStatus[1];
thiz->bFdcResults[2] = thiz->nFDCStatus[2];
thiz->bFdcResults[3] = thiz->nFdcCylinder;
thiz->bFdcResults[4] = thiz->nFdcHeadAddres;
thiz->bFdcResults[5] = thiz->nFdcRecord;
thiz->bFdcResults[6] = thiz->nFdcNumber;
}
void Mapper169::FdcReadDeletedData(Mapper169* thiz)
{
DEBUGOUT( "FdcReadDeletedData!!!\n" );
thiz = thiz;
}
void Mapper169::FdcFormatTrack(Mapper169* thiz)
{
DEBUGOUT( "FdcFormatTrack!!!\n" );
thiz = thiz;
}
void Mapper169::FdcSeek(Mapper169* thiz)
{
DEBUGOUT( "FdcSeek!!!\n" );
BYTE US;
US = thiz->bFdcCommands[1] & 3;
thiz->nFdcHeadAddres = ( thiz->bFdcCommands[1] & 7 ) >> 2;
thiz->nFdcCylinder = thiz->bFdcCommands[2];
thiz->nFDCStatus[0] = FDC_S0_SE;
}
void Mapper169::FdcScanEqual(Mapper169* thiz)
{
DEBUGOUT( "FdcScanEqual!!!\n" );
thiz = thiz;
}
void Mapper169::FdcScanLowOrEqual(Mapper169* thiz)
{
DEBUGOUT( "FdcScanLowOrEqual!!!\n" );
thiz = thiz;
}
void Mapper169::FdcScanHighOrEqual(Mapper169* thiz)
{
DEBUGOUT( "FdcScanHighOrEqual!!!\n" );
thiz = thiz;
}