HP3000: Release 7, update 1
See HP3000/hp3000_release.txt for details of the release.
This commit is contained in:
parent
221d72f057
commit
0e5c60b58f
3 changed files with 17 additions and 16 deletions
|
@ -2641,7 +2641,7 @@ else /* otherwise this is a r
|
||||||
dprintf (atcd_dev, DEB_CSRW, "Receive channel %u invalid\n",
|
dprintf (atcd_dev, DEB_CSRW, "Receive channel %u invalid\n",
|
||||||
channel);
|
channel);
|
||||||
|
|
||||||
else if (data & DPI_IS_PARAM) { /* otherwise this is a parameter store */
|
else if (data & DPI_IS_PARAM) { /* otherwise if this is a parameter store */
|
||||||
recv_param [channel] = data; /* then save it */
|
recv_param [channel] = data; /* then save it */
|
||||||
|
|
||||||
if (channel <= LAST_TERM) { /* if this is a terminal channel */
|
if (channel <= LAST_TERM) { /* if this is a terminal channel */
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* hp3000_mem.c: HP 3000 main memory simulator
|
/* hp3000_mem.c: HP 3000 main memory simulator
|
||||||
|
|
||||||
Copyright (c) 2016, J. David Bryan
|
Copyright (c) 2016-2018, J. David Bryan
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -25,6 +25,7 @@
|
||||||
|
|
||||||
MEM HP 3000 Series III Main Memory
|
MEM HP 3000 Series III Main Memory
|
||||||
|
|
||||||
|
21-May-18 JDB Changed "access" to "mem_access" to avoid clashing
|
||||||
10-Oct-16 JDB Created
|
10-Oct-16 JDB Created
|
||||||
|
|
||||||
References:
|
References:
|
||||||
|
@ -175,7 +176,7 @@ typedef struct {
|
||||||
} ACCESS_PROPERTIES;
|
} ACCESS_PROPERTIES;
|
||||||
|
|
||||||
|
|
||||||
static const ACCESS_PROPERTIES access [] = { /* indexed by ACCESS_CLASS */
|
static const ACCESS_PROPERTIES mem_access [] = { /* indexed by ACCESS_CLASS */
|
||||||
/* bank_ptr debug_flag name */
|
/* bank_ptr debug_flag name */
|
||||||
/* -------- ----------- ------------------- */
|
/* -------- ----------- ------------------- */
|
||||||
{ NULL, DEB_MDATA, "absolute" }, /* absolute */
|
{ NULL, DEB_MDATA, "absolute" }, /* absolute */
|
||||||
|
@ -374,14 +375,14 @@ t_bool mem_read (DEVICE *dptr, ACCESS_CLASS classification, uint32 offset, HP_WO
|
||||||
{
|
{
|
||||||
uint32 bank, address;
|
uint32 bank, address;
|
||||||
|
|
||||||
if (access [classification].bank_ptr == NULL) { /* if this is an absolute or DMA access */
|
if (mem_access [classification].bank_ptr == NULL) { /* if this is an absolute or DMA access */
|
||||||
address = offset; /* then the "offset" is already a physical address */
|
address = offset; /* then the "offset" is already a physical address */
|
||||||
bank = TO_BANK (offset); /* separate the bank and offset */
|
bank = TO_BANK (offset); /* separate the bank and offset */
|
||||||
offset = TO_OFFSET (offset); /* in case tracing is active */
|
offset = TO_OFFSET (offset); /* in case tracing is active */
|
||||||
}
|
}
|
||||||
|
|
||||||
else { /* otherwise the bank register is implied */
|
else { /* otherwise the bank register is implied */
|
||||||
bank = *access [classification].bank_ptr; /* by the access classification */
|
bank = *mem_access [classification].bank_ptr; /* by the access classification */
|
||||||
address = bank << LA_WIDTH | offset; /* form the physical address with the supplied offset */
|
address = bank << LA_WIDTH | offset; /* form the physical address with the supplied offset */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -450,10 +451,10 @@ else { /* otherwise the access
|
||||||
break;
|
break;
|
||||||
} /* all cases are handled */
|
} /* all cases are handled */
|
||||||
|
|
||||||
dpprintf (dptr, access [classification].debug_flag,
|
dpprintf (dptr, mem_access [classification].debug_flag,
|
||||||
BOV_FORMAT " %s%s\n", bank, offset, *value,
|
BOV_FORMAT " %s%s\n", bank, offset, *value,
|
||||||
access [classification].name,
|
mem_access [classification].name,
|
||||||
access [classification].debug_flag == DEB_MDATA ? " read" : "");
|
mem_access [classification].debug_flag == DEB_MDATA ? " read" : "");
|
||||||
|
|
||||||
return TRUE; /* indicate success with the returned value stored */
|
return TRUE; /* indicate success with the returned value stored */
|
||||||
}
|
}
|
||||||
|
@ -505,14 +506,14 @@ t_bool mem_write (DEVICE *dptr, ACCESS_CLASS classification, uint32 offset, HP_W
|
||||||
{
|
{
|
||||||
uint32 bank, address;
|
uint32 bank, address;
|
||||||
|
|
||||||
if (access [classification].bank_ptr == NULL) { /* if this is an absolute or DMA access */
|
if (mem_access [classification].bank_ptr == NULL) { /* if this is an absolute or DMA access */
|
||||||
address = offset; /* then "offset" is already a physical address */
|
address = offset; /* then "offset" is already a physical address */
|
||||||
bank = TO_BANK (offset); /* separate the bank and offset */
|
bank = TO_BANK (offset); /* separate the bank and offset */
|
||||||
offset = TO_OFFSET (offset); /* in case tracing is active */
|
offset = TO_OFFSET (offset); /* in case tracing is active */
|
||||||
}
|
}
|
||||||
|
|
||||||
else { /* otherwise the bank register is implied */
|
else { /* otherwise the bank register is implied */
|
||||||
bank = *access [classification].bank_ptr; /* by the access classification */
|
bank = *mem_access [classification].bank_ptr; /* by the access classification */
|
||||||
address = bank << LA_WIDTH | offset; /* form the physical address with the supplied offset */
|
address = bank << LA_WIDTH | offset; /* form the physical address with the supplied offset */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -567,9 +568,9 @@ else { /* otherwise the access
|
||||||
|
|
||||||
} /* all cases are handled */
|
} /* all cases are handled */
|
||||||
|
|
||||||
dpprintf (dptr, access [classification].debug_flag,
|
dpprintf (dptr, mem_access [classification].debug_flag,
|
||||||
BOV_FORMAT " %s write\n", bank, offset, value,
|
BOV_FORMAT " %s write\n", bank, offset, value,
|
||||||
access [classification].name);
|
mem_access [classification].name);
|
||||||
|
|
||||||
return TRUE; /* indicate success with the value written */
|
return TRUE; /* indicate success with the value written */
|
||||||
}
|
}
|
||||||
|
@ -685,10 +686,10 @@ bap->word_address = cpu_byte_ea (INVERT_CHECK (bap->class), /* convert the new b
|
||||||
*bap->byte_offset, /* and check the bounds if originally requested */
|
*bap->byte_offset, /* and check the bounds if originally requested */
|
||||||
bap->count);
|
bap->count);
|
||||||
|
|
||||||
if (access [bap->class].bank_ptr == NULL) /* if this is an absolute or DMA access */
|
if (mem_access [bap->class].bank_ptr == NULL) /* if this is an absolute or DMA access */
|
||||||
bank = 0; /* then the byte offset is already a physical address */
|
bank = 0; /* then the byte offset is already a physical address */
|
||||||
else /* otherwise */
|
else /* otherwise */
|
||||||
bank = *access [bap->class].bank_ptr; /* the bank register is implied by the classification */
|
bank = *mem_access [bap->class].bank_ptr; /* the bank register is implied by the classification */
|
||||||
|
|
||||||
bap->initial_byte_address = TO_PA (bank, bap->word_address) * 2 /* save the physical starting byte address */
|
bap->initial_byte_address = TO_PA (bank, bap->word_address) * 2 /* save the physical starting byte address */
|
||||||
+ (bap->initial_byte_offset & 1);
|
+ (bap->initial_byte_offset & 1);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* hp3000_sys.c: HP 3000 system common interface
|
/* hp3000_sys.c: HP 3000 system common interface
|
||||||
|
|
||||||
Copyright (c) 2016-2017, J. David Bryan
|
Copyright (c) 2016-2018, J. David Bryan
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -2335,7 +2335,7 @@ while ((bitfmt.alternate || bitset) /* while more bits */
|
||||||
bnptr = bitfmt.names [index]; /* point at the name for the current bit */
|
bnptr = bitfmt.names [index]; /* point at the name for the current bit */
|
||||||
|
|
||||||
if (bnptr) /* if the name is defined */
|
if (bnptr) /* if the name is defined */
|
||||||
if (*bnptr == '\1') /* then if this name has an alternate */
|
if (*bnptr == '\1' && bitfmt.alternate) /* then if this name has an alternate */
|
||||||
if (bitset & test_bit) /* then if the bit is asserted */
|
if (bitset & test_bit) /* then if the bit is asserted */
|
||||||
bnptr++; /* then point at the name for the "1" state */
|
bnptr++; /* then point at the name for the "1" state */
|
||||||
else /* otherwise */
|
else /* otherwise */
|
||||||
|
|
Loading…
Add table
Reference in a new issue