This basic computer is built from these components:
| Component | Bits | Functionality |
| DR | 16 | Data Register |
| AR | 12 | Address Register |
| AC | 16 | Accumulator |
| IR | 16 | Instruction Register |
| PC | 12 | Program Counter |
| TR | 16 | Temporary Register |
| INPR | 8 | Input Register |
| OUTR | 8 | Output Register |
| MEMORY | 16 | Memory 4096 x 16 |
| FGI | 1 | Input Flag |
| FGO | 1 | Output Flag |
| IEN | 1 | Interrupt Enabled Status |
| R | 1 | Interruption Status |
| I | 1 | Decode Bit |
| S | 1 | Halt Status |
| E | 1 | Carry Bit |
| SC | 3 | Sequence Counter |
And the table of instructions it supports is:
| Symbol | Hexcode | Description | ||
| I = 0 | I = 1 | |||
| M E M O R Y | AND | 0xxx | 8xxx | AND memory word to AC |
| ADD | 1xxx | 9xxx | Add memory word to AC | |
| LDA | 2xxx | Axxx | Load AC from memory | |
| STA | 3xxx | Bxxx | Store content of AC into memory | |
| BUN | 4xxx | Cxxx | Branch unconditionally | |
| BSA | 5xxx | Dxxx | Branch and save return address | |
| ISZ | 6xxx | Exxx | Increment and skip if zero | |
| R E G I S T E R | CLA | 7800 | Clear AC | |
| CLE | 7400 | Clear E | ||
| CMA | 7200 | Complement AC | ||
| CME | 7100 | Complement E | ||
| CIR | 7080 | Circulate right AC and E | ||
| CIL | 7040 | Circulate left AC and E | ||
| INC | 7020 | Increment AC | ||
| SPA | 7010 | Skip next instruction if AC is positive | ||
| SNA | 7008 | Skip next instruction if AC is negative | ||
| SZA | 7004 | Skip next instruction if AC is zero | ||
| SZE | 7002 | Skip next instruction if E is zero | ||
| HLT | 7001 | Halt computer | ||
| I/O | INP | F800 | Input character to AC | |
| OUT | F400 | Output character from AC | ||
| SKI | F200 | Skip on input flag | ||
| SKO | F100 | Skip on output flag | ||
| ION | F080 | Interrupt on | ||
| IOF | F040 | Interrupt off | ||
The assembler is a bit different than the book, it supports labels of any size and uses the character (:) instead of (,) also I added the LBL pseudo instruction that can help in some cases:
| ORG | N | Hexadecimal number N is the memory location |
| for the instruction or operand listed in the following line | ||
| DEC | N | Signed decimal number N to be converted to the binary |
| HEX | N | Hexadecimal number N to be converted to the binary |
| LBL | L | Address of label L to be converted to the binary |
| END | End of symbolic program |
There are 3 sample programs to select, or you can enter your own. After your program is ready press the [Assemble] button, if the program is correct you will need to load the binary codes of the program into memory, you can do this pressing the [Load] button. Now you are ready to run the whole program with [Run] or just go cycle by cycle with [Next].
The source is available under the MIT license in:
http://code.google.com/p/basic-computer-simulator/
Have fun!
A programmable, mechanical, digital machine
ReplyDeleteCould carryout any calculation
Could make decisions based upon the results of the previous calculation
Components: input; memory; processor; output
http://camnetway.blogspot.com
This comment has been removed by a blog administrator.
ReplyDeletemuchas gracias! ha sido de gran ayuda!
ReplyDeleteExcelente contenido, sigue actualizando asi!
ReplyDeletemuy bueno!
ReplyDeleteSimulator has a bug with carry bit (E). When you try to add 5000H and 6000H, E is set to 1 instead of 0.
ReplyDeleteTry...
ORG 100
CLA
ADD A
ADD B
STA C
HLT
A: HEX 5000
B: HEX 6000
C: HEX 0
END