Hi Chuck,
I would LOVE a scan of the booklet, also a scan of the
cpu side would help.
Is SIMPLEX on the web? or is it somthing you were working on
yourself?
====================
Chuck McManis wrote:
I have a CARDIAC, perhaps I could scan the booklet for
you. Or would you
like to build something unique? I have a similar project called SIMPLEX
which is a PDP/CARDIAC/uP inspired instructional computer architecture.
--Chuck
At 03:27 PM 8/12/01 -0700, you wrote:
> I was going to write a simulator for Bell Labs "Cardiac" (cardboard
> slide the slides and move bits be the cpu your self) computer, but all
> I can find is the Instruction Set, none of how the instructions are
> implemented.
>
> So, I decieded to write my own...
> Here is the instruction set, I thought it best to consult with you
> all before beginning to code. What
> do you think?
> Opcodes
>
> 0 1 2 3 4 5 6 7
> Z N o1 o2 o3
> =================================================================
> Z N 0 0 1 i r r get copy (indirect) register rr to acx
>
> Z N 0 1 0 i r r put copy (indirect) acx to register rr
>
> Z N 0 1 1 o o o Mathop
>
> 0 0 0 nop
> 0 0 1 add acx + acy ==> acx
> 0 1 0 sub acx - acy ==> acx
> 0 1 1 and acx & acy ==> acx
> 1 0 0 exor acx xor acy ==> acx
> 1 0 1 or acx | acy ==> acx
> 1 1 0 cmp acx cmp acy set Z and N
> 1 1 1 cpz acx cmp 0 set Z and N
>
> Z N 1 0 0 p p p inp copy port ppp ==> acx
>
> Z N 1 0 1 p p p out copy acx ==> port ppp
>
> Z N 1 1 0 i r r swp acx ==> (ind) Rn == > acx
>
> Z N 1 1 1 0 o o acx op group
>
> 0 0 0 not r1 <== ! r1
> 0 0 1 shl Shift left
> 0 1 0 shr Shift right
> 0 1 1 inc Increment r1 <== r1 + 1
>
> Z N 1 1 1 1 o o Jump Group
>
> 1 0 0 jmp ind [pc] pc <== [pc]
> 1 0 1 jsr ind [pc] R2 <== pc , pc <==
> [pc]
> 1 1 0 rtn pc <== R2
> 1 1 1 Halt,reset [pc] <== 0
>
> Zero and Negative flags
>
> On execution of the cmp and cpz instructions the Z and N flags are
> set, following instructions can test these flags and choose to execute
> or not.
>
> Z N Meaning
> 0 0 Execute if acx was positive on test (acx > 0 / acx > acy)
> 0 1 Execute if acx was negative on test (acx < 0 / acx < acy)
> 1 0 Execute if acx was zeron on test (acx = 0 / acx = acy)
> 1 1 Always execute
>
>
> Registers
> 00 r0 acx 1st operand
> 01 r1 acy 2nd operand
> 10 r2 ptr Pointer register
> 11 r3 pc Program Counter
>
>
> here is an example of an assembled program....
>
> Assembly of a simple program
>
> org $10 ; program starts at 10 10
>
> get ind pc ; load value1 acy 10 11001111 00010000
> adr value1 11 00011001 00010001
> swp acy 12 11110110 00010010
>
> get ind pc ; load value2 acx 13 11001111 00010011
> adr value2 14 00011010 00010100
>
> add ; sum values 15 11011001 00010101
>
> put ind pc ; store sum 16 11010111 00010110
> adr sum 17 00011011 00010111
>
> hlt ; end of program 18 11111111 00011000
>
> value1 byt 19 00011001
> value2 byt 1A 00011010
> sum byt 1B 00011011
>
>
> end ; end of code
>
>
>
> I know, it only has 256 words of 8 bit memory, but isn't this as much
> as some of the early machines?
>