B5500: Added architecture description to head of b5500_cpu.c.
This commit is contained in:
parent
057120e0b3
commit
2503532d13
1 changed files with 235 additions and 165 deletions
|
@ -19,6 +19,77 @@
|
||||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
The Burroughs 5500 was a unique machine, first introduced in 1961 as the
|
||||||
|
B5000. Later advanced to the B5500 (1964) adding disks and finally the B5700
|
||||||
|
(1971) adding solid state drum. It was the first computer to use the stack
|
||||||
|
as it's only means of accessing data. The machine could access at most
|
||||||
|
32k words of memory.
|
||||||
|
|
||||||
|
The machine used 48 bit numbers, all of which were considered to be floating
|
||||||
|
point numbers, integers were represented by a zero exponent. A word could
|
||||||
|
also be used to hold up to 8 6-bit characters.
|
||||||
|
|
||||||
|
The differences between the various models were minor. The 5500 added
|
||||||
|
the LLL, TUS, FBS and XRT instructions to improve performance of the OS. The
|
||||||
|
5700 added a core memory drum instead of spinning disk.
|
||||||
|
|
||||||
|
The 5500 series tagged memory to assist in controlling access.
|
||||||
|
|
||||||
|
The 5000 series did not have many programer accessible registers, all
|
||||||
|
operations were done on the stack. It had two modes of operation, character
|
||||||
|
and word mode.
|
||||||
|
|
||||||
|
A register 48 bits, held the top of stack.
|
||||||
|
AROF flag indicated whether A was full or not.
|
||||||
|
B register 48 bits, held the second element of the stack.
|
||||||
|
BROF flag indicated whether B was full or not.
|
||||||
|
|
||||||
|
S register 15 bits held a pointer to the top of stack in memory.
|
||||||
|
F register 15 bits held the Frame pointer.
|
||||||
|
R register 15 bits held a pointer to the per process procedures and
|
||||||
|
variables.
|
||||||
|
C register 15 bits together with the L register (2 bits) held the
|
||||||
|
pointer to the current executing sylable.
|
||||||
|
|
||||||
|
When in character mode the registers changed meaning a bit.
|
||||||
|
|
||||||
|
A held the Source word. GH two 3 bit registers held the character,bit
|
||||||
|
offset in the word.
|
||||||
|
B held the Destination word. KV two 3 bit registers held the
|
||||||
|
character and bit offset in the word.
|
||||||
|
|
||||||
|
The M register used to access memory held the address of the source
|
||||||
|
characters.
|
||||||
|
The S register held the address of the destination characters.
|
||||||
|
The R register held a count register refered to as TALLY.
|
||||||
|
The F register held the info need to return back to word mode.
|
||||||
|
|
||||||
|
The generic data word was: Flag = 0.
|
||||||
|
|
||||||
|
11111111112222222222333333333344444444
|
||||||
|
0 1 2 345678 901234567890123456789012345678901234567
|
||||||
|
+-+-+-+------+---------------------------------------+
|
||||||
|
|F|M|E|Exp | Mantissa |
|
||||||
|
|l|s|s|in | |
|
||||||
|
|a|i|i|octant| |
|
||||||
|
|g|g|g| | |
|
||||||
|
| |n|n| | |
|
||||||
|
+-+-+-+------+---------------------------------------+
|
||||||
|
|
||||||
|
Also 8 6 bit characters could be used.
|
||||||
|
|
||||||
|
With the Flag bit 1 various data pointers could be constructed.
|
||||||
|
|
||||||
|
11111111 112222222222333 333333344444444
|
||||||
|
0 1 2 345 678901234567 890123456789012 345678901234567
|
||||||
|
+-+-+-+---+------------+---------------+---------------+
|
||||||
|
|F|D|P|f | Word count | F Field | Address |
|
||||||
|
|l|f|r|l | R Field | | |
|
||||||
|
|a|l|e|a | | | |
|
||||||
|
|g|a|s|g | | | |
|
||||||
|
| |g| |s | | | |
|
||||||
|
+-+-+-+---+------------+---------------+---------------+
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "b5500_defs.h"
|
#include "b5500_defs.h"
|
||||||
|
@ -1978,7 +2049,6 @@ sim_instr(void)
|
||||||
if (TROF == 0)
|
if (TROF == 0)
|
||||||
next_prog();
|
next_prog();
|
||||||
|
|
||||||
/* TODO: Add support to detect IDLE loop */
|
|
||||||
crf_loop:
|
crf_loop:
|
||||||
opcode = T & 077;
|
opcode = T & 077;
|
||||||
field = (T >> 6) & 077;
|
field = (T >> 6) & 077;
|
||||||
|
|
Loading…
Add table
Reference in a new issue