B5500: Added architecture description to head of b5500_cpu.c.

This commit is contained in:
Richard Cornwell 2017-01-30 20:55:16 -05:00
parent 057120e0b3
commit 2503532d13

View file

@ -19,6 +19,77 @@
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.
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"
@ -1978,7 +2049,6 @@ sim_instr(void)
if (TROF == 0)
next_prog();
/* TODO: Add support to detect IDLE loop */
crf_loop:
opcode = T & 077;
field = (T >> 6) & 077;