mirror of
https://github.com/simh/simh.git
synced 2026-04-27 12:28:49 +00:00
Notes For V3.2-3
RESTRICTION: The PDP-15 FPP is only partially debugged. Do NOT enable this feature for normal operations. RESTRICTION: The HP DS disk is not debugged. DO NOT enable this feature for normal operations. 1. New Features in 3.2-3 1.1 SCP - Added ECHO command (from Dave Bryan) 2. Bugs Fixed in 3.2-2 2.1 SCP - Qualified RESTORE detach with SIM_SW_REST - Fixed OS/2 issues in sim_console.c and sim_sock.h 2.2 HP2100 (all from Dave Bryan) - Changed CPU error stops to report PC not PC + 1 - Fixed CLC to DR to stop operation in progress - Functional and timing fixes to DP > controller sets ATN for all commands except read status > controller resumes polling for ATN interrupts after read status > check status on unattached drive set busy and not ready > check status tests wrong unit for write protect status > drive on line sets ATN, will set FLG if polling - Functional and timing fixes to MS > fixed erroneous execution of rejected command > fixed erroneous execution of select-only command > fixed erroneous execution of clear command > fixed odd byte handling for read > fixed spurious odd byte status on 13183A EOF > modified handling of end of medium > added detailed timing, with fast and realistic modes > added reel sizes to simulate end of tape > added debug printouts - Modified MT handling of end of medium - Added tab to TTY control char set 2.3 VAX - VAX RQ controllers start LUNs at 0 (from Andreas Cejna) - Added compatibility mode definitions - Fixed EMODD, EMODG to probe second longword of quadword destination
This commit is contained in:
committed by
Mark Pizzolato
parent
2688f2d26e
commit
2e00e1122f
@@ -25,6 +25,7 @@
|
||||
|
||||
cpu GRI-909 CPU
|
||||
|
||||
18-Jul-04 RMS Fixed missing ao_update calls in AX, AY write
|
||||
17-Jul-04 RMS Revised MSR, EAO based on additional documentation
|
||||
14-Mar-03 RMS Fixed bug in SC queue tracking
|
||||
|
||||
@@ -381,7 +382,7 @@ extern UNIT rtc_unit;
|
||||
|
||||
SC = SC & AMASK; /* load local PC */
|
||||
reason = 0;
|
||||
AO = ao_update (); /* update AO */
|
||||
ao_update (); /* update AO */
|
||||
sim_rtc_init (rtc_unit.wait); /* init calibration */
|
||||
|
||||
/* Main instruction fetch/decode loop */
|
||||
@@ -517,7 +518,7 @@ else { SC = (SC + 1) & AMASK; /* incr SC */
|
||||
|
||||
/* Simulation halted */
|
||||
|
||||
AO = ao_update (); /* update AO */
|
||||
ao_update (); /* update AO */
|
||||
scq_r->qptr = scq_p; /* update sc q ptr */
|
||||
return reason;
|
||||
}
|
||||
@@ -700,12 +701,12 @@ return SWR;
|
||||
|
||||
uint32 msr_rd (uint32 src)
|
||||
{
|
||||
return MSR;
|
||||
return MSR & MSR_RW;
|
||||
}
|
||||
|
||||
t_stat msr_wr (uint32 src, uint32 dat)
|
||||
{
|
||||
MSR = dat; /* new MSR */
|
||||
MSR = dat & MSR_RW; /* new MSR */
|
||||
ao_update (); /* update AOV */
|
||||
return SCPE_OK;
|
||||
}
|
||||
@@ -714,28 +715,27 @@ return SCPE_OK;
|
||||
|
||||
uint32 ao_update (void)
|
||||
{
|
||||
int32 t;
|
||||
int32 af = MSR_GET_FOA (MSR);
|
||||
uint32 af = MSR_GET_FOA (MSR);
|
||||
|
||||
switch (af) {
|
||||
case AO_ADD:
|
||||
t = (AX + AY) & DMASK; /* add */
|
||||
AO = (AX + AY) & DMASK; /* add */
|
||||
break;
|
||||
case AO_AND:
|
||||
t = AX & AY; /* and */
|
||||
AO = AX & AY; /* and */
|
||||
break;
|
||||
case AO_XOR: /* xor */
|
||||
t = AX ^ AY;
|
||||
AO = AX ^ AY;
|
||||
break;
|
||||
case AO_IOR:
|
||||
t = AX | AY; /* or */
|
||||
AO = AX | AY; /* or */
|
||||
break; }
|
||||
if ((AX + AY) & CBIT) MSR = MSR | MSR_AOV; /* always calc AOV */
|
||||
else MSR = MSR & ~MSR_AOV;
|
||||
if (SIGN & ((AX ^ (AX + AY)) & (~AX ^ AY))) /* always calc SOV */
|
||||
MSR = MSR | MSR_SOV;
|
||||
else MSR = MSR & ~MSR_SOV;
|
||||
return t;
|
||||
return AO;
|
||||
}
|
||||
|
||||
uint32 ax_rd (uint32 src)
|
||||
@@ -746,6 +746,7 @@ return AX;
|
||||
t_stat ax_wr (uint32 dst, uint32 dat)
|
||||
{
|
||||
AX = dat;
|
||||
ao_update ();
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
@@ -757,18 +758,19 @@ return AY;
|
||||
t_stat ay_wr (uint32 dst, uint32 dat)
|
||||
{
|
||||
AY = dat;
|
||||
ao_update ();
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
uint32 ao_rd (uint32 src)
|
||||
{
|
||||
AO = ao_update ();
|
||||
return AO;
|
||||
return ao_update ();
|
||||
}
|
||||
|
||||
t_stat ao_fo (uint32 op)
|
||||
{
|
||||
uint32 t = OP_GET_FOA (op); /* get func */
|
||||
|
||||
MSR = MSR_PUT_FOA (MSR, t); /* store in MSR */
|
||||
ao_update (); /* update AOV */
|
||||
return SCPE_OK;
|
||||
|
||||
@@ -43,13 +43,10 @@
|
||||
overflow is handled. Answer: EAO is a package of ROM subroutines
|
||||
with just four functions: multiply, divide, arithmetic right shift,
|
||||
and normalize.
|
||||
|
||||
Outstanding issues:
|
||||
|
||||
1. Is there any interaction between the byte swapper and the byte packer?
|
||||
2. Is SOV testable even if the FOA is not ADD?
|
||||
3. How does the EAO handle divide overflow? Answer: set link.
|
||||
4. What are the other EAO functions beside multiply and divide?
|
||||
4. Is SOV testable even if the FOA is not ADD? Answer: AOV and SOV are
|
||||
calculated regardless of the function.
|
||||
5. How does the EAO handle divide overflow? Answer: set link.
|
||||
6. What are the other EAO functions beside multiply and divide?
|
||||
Answer: arithmetic right shift, normalize.
|
||||
*/
|
||||
|
||||
@@ -172,11 +169,13 @@ struct gdev {
|
||||
#define MSR_V_AOV 0 /* arith carry */
|
||||
#define MSR_BOV (1u << MSR_V_BOV)
|
||||
#define MSR_L (1u << MSR_V_L)
|
||||
#define MSR_FOA (MSR_M_FOA << MSR_V_FOA)
|
||||
#define MSR_SOV (1u << MSR_V_SOV)
|
||||
#define MSR_AOV (1u << MSR_V_AOV)
|
||||
#define MSR_GET_FOA(x) (((x) >> MSR_V_FOA) & MSR_M_FOA)
|
||||
#define MSR_PUT_FOA(x,n) (((x) & ~(MSR_M_FOA << MSR_V_FOA)) | \
|
||||
(((n) & MSR_M_FOA) << MSR_V_FOA))
|
||||
#define MSR_RW (MSR_BOV|MSR_L|MSR_FOA|MSR_SOV|MSR_AOV)
|
||||
|
||||
/* Real time clock */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user