CrayCore - A CRAY YMP-EL Emulator

Current Status

A new system is in testing, which handles "program" scripts. These are just simple text files containing a list of opcodes, however they will be very helpfull in automating checking opcodes for proper functionality.

Version .3 has been released, and is downloadable from the 'Download' link.
Changes between version .3 and version .2 include:
Memory has been turned on, and has slight load/store support.
Minor support for Semaphores.
Support of some of the exp opcodes.
Population Count, and Population Count Parity. (Although neither are exactly fast, some changes will undoubtably be made later.)
Boolean Functions: Logical Difference, Logical Product, and Logical Sum.
Shifts of single registers. (I am still not clear on how opcodes like 057ij0: Shift Sj and Si right one place to Si work, nor how "Double Shifts" work.)
A good percentage of the Vector operations, though they may run slow.

About 1/3 to 1/2 (rough estimate) of the known instructions for the YMP-EL have been implemented. Main memory is not yet active, although there is some support for it in the code, only a few opcodes that handle memory have been implemented, and they are probably not correct. For now, registers may only hold Unsigned Integer values. Most arithmetic operations are supported, with the exception of: Floating Point operations, Leading Zero, Logical Equivalence, Scalar Merge, and some operations requiring use of expressions (see Cray Assembly reference). Shifts are also somewhat implemented, although I am currently unable to implement them properly on 32-bit processors.

Currently working opcodes are:
000000: Error Exit
0013j0: XA Aj
0014j0: RT Sj
0014j3: CLN Aj
0014j4: PCI Sj
00200k: VL Ak
002000: VL 1
0030j0: VM Sj
003000: VM 0
0036jk: SMjk 0
0037jk: SMjk 1
004000: EX (Normal Exit, currently used to exit CrayCore)
020i00nm: Ai exp
021i00nm: Ai exp
022ijk: Ai exp
023ij0: Ai Sj
023i01: Ai VL
024ijk: Ai Bjk
025ijk: Bjk Ai
026ij0: Ai PSj
026ij1: Ai QSj
026ij7: Ai SBj
027ij7: SBj Ai
030ijk: Ai Aj + Ak
030ij0: Ai Aj + 1
030i0k: Ai Ak
031ijk: Ai Aj - Ak
031ij0: Ai Aj - 1
031i00: Ai -1
031i0k: Ai -Ak
032ijk: Ai Aj * Ak
036ijk: Tjk,Ai ,A0
037ijk: ,A0 Tjk,Ai
040i00nm: Si exp
042i77: Si 1
042i00: Si -1
043i00: Si 0
044ijk: Si Sj & Sk
045ijk: Si #Sk & Sj
046ijk: Si Sj \ Sk
047i0k: Si #Sk
051ijk: Si Sj ! Sk
051i0k: Si Sk
052ijk: S0 Si<exp
053ijk: Si Si>exp
056i0k: Si Si < Ak
057i0k: Si Si > Ak
060ijk: Si Sj + Sk
061ijk: Si Sj - Sk
061i0k: Si -Sk
072i00: Si RT
072i02: Si SM
072ij3: Si STj
073i00: Si VM
073i01: Si SR0
073i02: SM Si
074ijk: Si Tjk
075ijk: Tjk Si
076ijk: Si Vj,Ak
077ijk: Vi,Ak Sj
077i0k: Vi,Ak 0
140ijk: Vi Sj & Vk
141ijk: Vi Vj & Vk
142ijk: Vi Sj ! Vk
142i0k: Vi Vk
143ijk: Vi Vj ! Vk
144ijk: Vi Sj \ Vk
145ijk: Vi Vj \ Vk
150ijk: Vi Vj<Ak
150ij0: Vi Vj<1
151ijk: Vi Vj>Ak
151ij0: Vi Vj>1
154ijk: Vi Sj + Vk
155ijk: Vi Vj + Vk
156ijk: Vi Sj - Vk
157ijk: Vi Vj - Vk
174ij1: Vi PVj
174ij2: Vi QVj
1750j0: VM Vj,Z
1750j1: VM Vj,N
1750j2: VM Vj,P
1750j3: VM Vj,M

Currently implemented, but do nothing:
0010jk: CA,Aj Ak
001000: PASS
0011jk: CL,Aj
0012j0: CI,Aj
0012j1: MC,Aj
001401: SIPI
001402: CIPI
001405: CCI
001406: ECI
001407: DCI
002100: EFI
002200: DFI
002300: ERI
002400: DRI
002500: DBM
002600: EBM
002700: CMR
027ij0: Ai ZSj
044ij0: Si Sj & SB
045ij0: Si #SB & Sj
046ij0: Si Sj \ SB
047ijk: Si #Sj \ Sk
047ij0: Si #Sj \ SB
051i00: Si SB
1750j4: Vi,VM Vj,Z
1750j5: Vi,VM Vj,N
1750j6: Vi,VM Vj,P
1750j7: Vi,VM Vj,M

If you have any ideas, information, or suggestions, you can use the forums, or contact me through Sourceforge.

Currently, I am looking for:
Suggestions on a new user interface, preferably able to run on windows and unix-like systems
Suggestions on how to handle Signed, Unsigned, and Floating Point in the Scalar and Vector registers

I am also looking for a copy of, (pdf or plain text versions are preferable):
Symbolic Machine Instructions Reference Manual SR-0085B
Any Hardware Reference Manuals, preferably for the EL-92

Last Updated: May 20, 2006