Implement communication port
This commit is contained in:
+9
-8
@@ -9,12 +9,12 @@
|
||||
static void padEmulate(VB *sim, uint32_t clocks) {
|
||||
|
||||
/* No hardware read in progress */
|
||||
if (sim->pad.si_stat == 0)
|
||||
if (!sim->pad.si_stat)
|
||||
return;
|
||||
|
||||
/* Hardware read completes after time to process */
|
||||
if (sim->pad.si_stat > clocks) {
|
||||
sim->pad.si_stat -= clocks;
|
||||
if (sim->pad.clocks > clocks) {
|
||||
sim->pad.clocks -= clocks;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ static int32_t padReadControl(VB *sim) {
|
||||
sim->pad.k_int_inh << 7 |
|
||||
sim->pad.para_si << 5 |
|
||||
sim->pad.soft_ck << 4 |
|
||||
!!sim->pad.si_stat << 1 |
|
||||
sim->pad.si_stat << 1 |
|
||||
sim->pad.s_abt_dis
|
||||
;
|
||||
}
|
||||
@@ -78,7 +78,8 @@ static void padWriteControl(VB *sim, uint8_t value) {
|
||||
sim->pad.si_stat == 0 && /* No hardware read underway */
|
||||
!sim->pad.s_abt_dis /* Hardware reads enabled */
|
||||
) {
|
||||
sim->pad.si_stat = 10240; /* 512us */
|
||||
sim->pad.clocks = 10240; /* 512us */
|
||||
sim->pad.si_stat = 1;
|
||||
sim->pad.step = 0; /* Abort software read */
|
||||
}
|
||||
|
||||
@@ -86,7 +87,7 @@ static void padWriteControl(VB *sim, uint8_t value) {
|
||||
sim->pad.para_si = value >> 5 & 1;
|
||||
if (
|
||||
sim->pad.para_si &&
|
||||
sim->pad.si_stat == 0 /* No hardware read underway */
|
||||
!sim->pad.si_stat /* No hardware read underway */
|
||||
) sim->pad.step = 32;
|
||||
|
||||
/* Signal a bit for a software read */
|
||||
@@ -107,8 +108,8 @@ static void padWriteControl(VB *sim, uint8_t value) {
|
||||
|
||||
/* Determine how many clocks are guaranteed to process */
|
||||
static uint32_t padUntil(VB *sim, uint32_t clocks) {
|
||||
return sim->pad.si_stat != 0 && sim->pad.si_stat < clocks ?
|
||||
sim->pad.si_stat : clocks;
|
||||
return sim->pad.si_stat && sim->pad.clocks < clocks ?
|
||||
sim->pad.clocks : clocks;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user