modem: better handling of reset register
This commit is contained in:
parent
3694e8e87a
commit
89842c6d30
|
@ -167,7 +167,7 @@ static int modem_sched_func(int tag, int cycles, int jitter)
|
||||||
switch (connect_state)
|
switch (connect_state)
|
||||||
{
|
{
|
||||||
case DIALING:
|
case DIALING:
|
||||||
if (last_dial_time != 0 && sh4_sched_now64() - last_dial_time >= SH4_MAIN_CLOCK + jitter)
|
if (last_dial_time != 0 && sh4_sched_now64() - last_dial_time >= (u64)(SH4_MAIN_CLOCK + jitter))
|
||||||
{
|
{
|
||||||
LOG("Switching to RINGING state");
|
LOG("Switching to RINGING state");
|
||||||
connect_state = RINGING;
|
connect_state = RINGING;
|
||||||
|
@ -429,20 +429,23 @@ static void ControllerTestStart()
|
||||||
|
|
||||||
static void modem_reset(u32 v)
|
static void modem_reset(u32 v)
|
||||||
{
|
{
|
||||||
if (v==0)
|
if (v == 0)
|
||||||
{
|
{
|
||||||
memset(&modem_regs,0,sizeof(modem_regs));
|
memset(&modem_regs, 0, sizeof(modem_regs));
|
||||||
state=MS_RESET;
|
state = MS_RESET;
|
||||||
LOG("Modem reset start ...");
|
LOG("Modem reset start ...");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
stop_pppd();
|
if (state == MS_RESET)
|
||||||
memset(&modem_regs,0,sizeof(modem_regs));
|
{
|
||||||
state=MS_RESETING;
|
stop_pppd();
|
||||||
modem_regs.ptr[0x20]=1;
|
memset(&modem_regs, 0, sizeof(modem_regs));
|
||||||
ControllerTestStart();
|
state = MS_RESETING;
|
||||||
INFO_LOG(MODEM, "MODEM Reset");
|
ControllerTestStart();
|
||||||
|
INFO_LOG(MODEM, "MODEM Reset");
|
||||||
|
}
|
||||||
|
modem_regs.ptr[0x20] = v;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -647,21 +650,17 @@ static void ModemNormalWrite(u32 reg, u32 data)
|
||||||
|
|
||||||
u32 ModemReadMem_A0_006(u32 addr, u32 size)
|
u32 ModemReadMem_A0_006(u32 addr, u32 size)
|
||||||
{
|
{
|
||||||
u32 reg=addr&0x7FF;
|
u32 reg = (addr & 0x7FF) >> 2;
|
||||||
verify((reg&3)==0);
|
|
||||||
reg>>=2;
|
|
||||||
|
|
||||||
if (reg<0x100)
|
if (reg < 0x100)
|
||||||
|
return MODEM_ID[reg & 1];
|
||||||
|
|
||||||
|
reg -= 0x100;
|
||||||
|
if (reg < 0x21)
|
||||||
{
|
{
|
||||||
verify(reg<=1);
|
switch (state)
|
||||||
return MODEM_ID[reg];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
reg-=0x100;
|
|
||||||
if (reg<0x21)
|
|
||||||
{
|
{
|
||||||
if (state==MS_NORMAL)
|
case MS_NORMAL:
|
||||||
{
|
{
|
||||||
// Dial tone is detected if TONEA, TONEB and TONEC are set
|
// Dial tone is detected if TONEA, TONEB and TONEC are set
|
||||||
//if (reg==0xF)
|
//if (reg==0xF)
|
||||||
|
@ -696,73 +695,56 @@ u32 ModemReadMem_A0_006(u32 addr, u32 size)
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
else if (state==MS_ST_CONTROLER || state==MS_ST_DSP)
|
|
||||||
|
case MS_ST_CONTROLER:
|
||||||
|
case MS_ST_DSP:
|
||||||
|
if (reg==0x10)
|
||||||
{
|
{
|
||||||
if (reg==0x10)
|
modem_regs.reg1e.TDBE=0;
|
||||||
{
|
return 0;
|
||||||
modem_regs.reg1e.TDBE=0;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return modem_regs.ptr[reg];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (state==MS_RESETING)
|
|
||||||
{
|
|
||||||
return 0; //still reset
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//LOG("Read (reset) reg %03x == %x", reg, modem_regs.ptr[reg]);
|
return modem_regs.ptr[reg];
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
case MS_RESETING:
|
||||||
{
|
return 0; //still reset
|
||||||
LOG("modem reg %03X read -- wtf is it ?",reg);
|
|
||||||
|
default:
|
||||||
|
//LOG("Read (reset) reg %03x == %x", reg, modem_regs.ptr[reg]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG("modem reg %03X read -- wtf is it ?",reg);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModemWriteMem_A0_006(u32 addr, u32 data, u32 size)
|
void ModemWriteMem_A0_006(u32 addr, u32 data, u32 size)
|
||||||
{
|
{
|
||||||
u32 reg=addr&0x7FF;
|
u32 reg = (addr & 0x7FF) >> 2;
|
||||||
verify((reg&3)==0);
|
if (reg < 0x100)
|
||||||
reg>>=2;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (reg<0x100)
|
|
||||||
{
|
{
|
||||||
verify(reg<=1);
|
|
||||||
LOG("modem reg %03X write -- MODEM ID?!",reg);
|
LOG("modem reg %03X write -- MODEM ID?!",reg);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
reg -= 0x100;
|
||||||
|
if (reg < 0x20)
|
||||||
{
|
{
|
||||||
reg-=0x100;
|
if (state == MS_NORMAL)
|
||||||
if (reg<0x20)
|
ModemNormalWrite(reg,data);
|
||||||
{
|
|
||||||
if (state==MS_NORMAL)
|
|
||||||
{
|
|
||||||
ModemNormalWrite(reg,data);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOG("modem reg %03X write %X -- undef state?",reg,data);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (reg==0x20)
|
|
||||||
{
|
|
||||||
//Hard reset
|
|
||||||
modem_reset(data);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
LOG("modem reg %03X write %X -- undef state?", reg, data);
|
||||||
LOG("modem reg %03X write %X -- wtf is it?",reg,data);
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
if (reg == 0x20)
|
||||||
|
{
|
||||||
|
//Hard reset
|
||||||
|
modem_reset(data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG("modem reg %03X write %X -- wtf is it?",reg,data);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue