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
|
||||
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;
|
||||
|
|
Loading…
Add table
Reference in a new issue