"Von Neumann Maschine" simulation in SimCirJs

SimcirJS(a.k.a. Simcir) is a circuit simulator in HTML5 and JavaScript.
This setup uses 1795 basic logic gates with 3161 connections

Usage

{ "width":1700, "height":1200, "showToolbox":true, "toolbox":[ {"type":"In"}, {"type":"Out"}, {"type":"Joint"}, {"type":"DC"}, {"type":"LED"}, {"type":"PushOff"}, {"type":"PushOn"}, {"type":"Toggle"}, {"type":"BUF"}, {"type":"NOT"}, {"type":"AND"}, {"type":"NAND"}, {"type":"OR"}, {"type":"NOR"}, {"type":"XOR"}, {"type":"XNOR"}, {"type":"OSC"}, {"type":"if0"}, {"type":"4BitRam"}, {"type":"16ByteRam"}, {"type":"4BitCounter"}, {"type":"4BitNOD"}, {"type":"4bitAdder"}, {"type":"4BitSub"}, {"type":"4BitMulti"}, {"type":"BinToDez"}, {"type":"10OR"}, {"type":"7seg"}, {"type":"16seg"}, {"type":"4bit7seg"}, {"type":"RotaryEncoder"}, {"type":"BusIn"}, {"type":"BusOut"}, {"type":"RS-FF"}, {"type":"JK-FF"}, {"type":"T-FF"}, {"type":"D-FF"}, {"type":"8bitCounter"}, {"type":"HalfAdder"}, {"type":"FullAdder"}, {"type":"2to4BinaryDecoder"}, {"type":"3to8BinaryDecoder"}, {"type":"4to16BinaryDecoder"}, {"type":"AltFullAdder"}, {"type":"Transmitter"}, {"type":"Delay"}, {"type":"NumSrc"}, {"type":"NumDsp"}, {"type":"DSO"} ], "devices":[ {"type":"DC","id":"dev0","x":320,"y":1024,"label":"DC"}, {"type":"AND","id":"dev1","x":176,"y":976,"label":"AND"}, {"type":"NOT","id":"dev2","x":104,"y":968,"label":"NOT"}, {"type":"T-FF","id":"dev3","x":168,"y":544,"label":"T-FF"}, {"type":"DC","id":"dev4","x":856,"y":312,"label":"DC"}, {"type":"4BitNOD","id":"dev5","x":768,"y":336,"label":"4BitNOD"}, {"type":"OR","id":"dev6","x":856,"y":472,"label":"OR"}, {"type":"Toggle","id":"dev7","x":680,"y":128,"label":"Toggle","state":{"on":false}}, {"type":"Toggle","id":"dev8","x":680,"y":232,"label":"Toggle","state":{"on":false}}, {"type":"Toggle","id":"dev9","x":680,"y":288,"label":"Toggle","state":{"on":false}}, {"type":"DC","id":"dev10","x":608,"y":208,"label":"DC"}, {"type":"PushOn","id":"dev11","x":784,"y":208,"label":"PushOn"}, {"type":"4BitNOD","id":"dev12","x":616,"y":344,"label":"4BitNOD"}, {"type":"Toggle","id":"dev13","x":432,"y":200,"label":"Toggle","state":{"on":false}}, {"type":"Toggle","id":"dev14","x":432,"y":296,"label":"Toggle","state":{"on":false}}, {"type":"Toggle","id":"dev15","x":432,"y":248,"label":"Toggle","state":{"on":false}}, {"type":"Toggle","id":"dev16","x":368,"y":296,"label":"Toggle","state":{"on":false}}, {"type":"DC","id":"dev17","x":280,"y":216,"label":"DC"}, {"type":"AND","id":"dev18","x":256,"y":544,"label":"AND"}, {"type":"AND","id":"dev19","x":360,"y":560,"label":"AND"}, {"type":"AND","id":"dev20","x":264,"y":608,"label":"AND"}, {"type":"OR","id":"dev21","x":184,"y":488,"label":"OR"}, {"type":"4BitRam","id":"dev22","x":264,"y":920,"label":"4BitRam"}, {"type":"4bitAdder","id":"dev23","x":640,"y":536,"label":"4bitAdder"}, {"type":"4BitNOD","id":"dev24","x":728,"y":664,"label":"4BitNOD"}, {"type":"4bitAdder","id":"dev25","x":824,"y":528,"label":"4bitAdder"}, {"type":"4BitSub","id":"dev26","x":984,"y":536,"label":"4BitSub"}, {"type":"4BitSub","id":"dev27","x":1152,"y":520,"label":"4BitSub"}, {"type":"16ByteRam","id":"dev28","x":920,"y":344,"label":"16ByteRam"}, {"type":"4BitNOD","id":"dev29","x":504,"y":352,"label":"4BitNOD"}, {"type":"4BitNOD","id":"dev30","x":904,"y":656,"label":"4BitNOD"}, {"type":"4BitNOD","id":"dev31","x":1080,"y":656,"label":"4BitNOD"}, {"type":"4BitNOD","id":"dev32","x":1232,"y":656,"label":"4BitNOD"}, {"type":"4BitNOD","id":"dev33","x":624,"y":928,"label":"4BitNOD"}, {"type":"4BitNOD","id":"dev34","x":832,"y":936,"label":"4BitNOD"}, {"type":"4BitNOD","id":"dev35","x":976,"y":936,"label":"4BitNOD"}, {"type":"4BitNOD","id":"dev36","x":1112,"y":936,"label":"4BitNOD"}, {"type":"4BitNOD","id":"dev37","x":1368,"y":936,"label":"4BitNOD"}, {"type":"BinToDez","id":"dev38","x":376,"y":848,"label":"BinToDez"}, {"type":"10OR","id":"dev39","x":336,"y":664,"label":"10OR"}, {"type":"AND","id":"dev40","x":424,"y":712,"label":"AND"}, {"type":"AND","id":"dev41","x":776,"y":496,"label":"AND"}, {"type":"4BitNOD","id":"dev42","x":1240,"y":936,"label":"4BitNOD"}, {"type":"4BitMulti","id":"dev43","x":536,"y":840,"label":"4BitMulti"}, {"type":"4BitMulti","id":"dev44","x":720,"y":848,"label":"4BitMulti"}, {"type":"OR","id":"dev45","x":200,"y":408,"label":"OR"}, {"type":"OR","id":"dev46","x":200,"y":360,"label":"OR"}, {"type":"DC","id":"dev47","x":224,"y":280,"label":"DC"}, {"type":"OR","id":"dev48","x":248,"y":384,"label":"OR"}, {"type":"4BitRam","id":"dev49","x":520,"y":536,"label":"4BitRam"}, {"type":"4BitRam","id":"dev50","x":472,"y":640,"label":"4BitRam"}, {"type":"if0","id":"dev51","x":480,"y":752,"label":"if0"}, {"type":"AND","id":"dev52","x":480,"y":1024,"label":"AND"}, {"type":"Toggle","id":"dev53","x":680,"y":176,"label":"Toggle","state":{"on":false}}, {"type":"AND","id":"dev54","x":272,"y":440,"label":"AND"}, {"type":"Joint","id":"dev55","x":344,"y":528,"label":"Joint","state":{"direction":0}}, {"type":"4BitCounter","id":"dev56","x":336,"y":352,"label":"4BitCounter"}, {"type":"AND","id":"dev57","x":288,"y":344,"label":"AND"}, {"type":"Toggle","id":"dev58","x":432,"y":144,"label":"Toggle","state":{"on":false}}, {"type":"DC","id":"dev59","x":120,"y":600,"label":"DC"}, {"type":"AND","id":"dev60","x":216,"y":608,"label":"AND"}, {"type":"PushOn","id":"dev61","x":168,"y":600,"label":"PushOn"}, {"type":"NOT","id":"dev62","x":168,"y":664,"label":"NOT"} ], "connectors":[ {"from":"dev1.in0","to":"dev55.out0"}, {"from":"dev1.in1","to":"dev2.out0"}, {"from":"dev2.in0","to":"dev56.out4"}, {"from":"dev3.in0","to":"dev21.out0"}, {"from":"dev3.in1","to":"dev60.out0"}, {"from":"dev5.in0","to":"dev7.out0"}, {"from":"dev5.in1","to":"dev53.out0"}, {"from":"dev5.in2","to":"dev8.out0"}, {"from":"dev5.in3","to":"dev9.out0"}, {"from":"dev5.in4","to":"dev50.out0"}, {"from":"dev5.in5","to":"dev50.out1"}, {"from":"dev5.in6","to":"dev50.out2"}, {"from":"dev5.in7","to":"dev50.out3"}, {"from":"dev5.in8","to":"dev11.out0"}, {"from":"dev6.in0","to":"dev11.out0"}, {"from":"dev6.in1","to":"dev41.out0"}, {"from":"dev7.in0","to":"dev10.out0"}, {"from":"dev8.in0","to":"dev10.out0"}, {"from":"dev9.in0","to":"dev10.out0"}, {"from":"dev11.in0","to":"dev10.out0"}, {"from":"dev12.in0","to":"dev56.out0"}, {"from":"dev12.in1","to":"dev56.out1"}, {"from":"dev12.in2","to":"dev56.out2"}, {"from":"dev12.in3","to":"dev56.out3"}, {"from":"dev12.in4","to":"dev29.out0"}, {"from":"dev12.in5","to":"dev29.out1"}, {"from":"dev12.in6","to":"dev29.out2"}, {"from":"dev12.in7","to":"dev29.out3"}, {"from":"dev12.in8","to":"dev55.out0"}, {"from":"dev13.in0","to":"dev17.out0"}, {"from":"dev14.in0","to":"dev17.out0"}, {"from":"dev15.in0","to":"dev17.out0"}, {"from":"dev16.in0","to":"dev17.out0"}, {"from":"dev18.in0","to":"dev3.out1"}, {"from":"dev18.in1","to":"dev60.out0"}, {"from":"dev19.in0","to":"dev56.out4"}, {"from":"dev19.in1","to":"dev55.out0"}, {"from":"dev20.in0","to":"dev3.out0"}, {"from":"dev20.in1","to":"dev60.out0"}, {"from":"dev21.in0","to":"dev56.out4"}, {"from":"dev21.in1","to":"dev20.out0"}, {"from":"dev22.in0","to":"dev28.out0"}, {"from":"dev22.in1","to":"dev28.out1"}, {"from":"dev22.in2","to":"dev28.out2"}, {"from":"dev22.in3","to":"dev28.out3"}, {"from":"dev22.in4","to":"dev1.out0"}, {"from":"dev23.in1","to":"dev49.out0"}, {"from":"dev23.in2","to":"dev49.out1"}, {"from":"dev23.in3","to":"dev49.out2"}, {"from":"dev23.in4","to":"dev49.out3"}, {"from":"dev23.in5","to":"dev50.out0"}, {"from":"dev23.in6","to":"dev50.out1"}, {"from":"dev23.in7","to":"dev50.out2"}, {"from":"dev23.in8","to":"dev50.out3"}, {"from":"dev24.in0","to":"dev23.out0"}, {"from":"dev24.in1","to":"dev23.out1"}, {"from":"dev24.in2","to":"dev23.out2"}, {"from":"dev24.in3","to":"dev23.out3"}, {"from":"dev24.in8","to":"dev38.out0"}, {"from":"dev25.in1","to":"dev28.out0"}, {"from":"dev25.in2","to":"dev28.out1"}, {"from":"dev25.in3","to":"dev28.out2"}, {"from":"dev25.in4","to":"dev28.out3"}, {"from":"dev25.in5","to":"dev50.out0"}, {"from":"dev25.in6","to":"dev50.out1"}, {"from":"dev25.in7","to":"dev50.out2"}, {"from":"dev25.in8","to":"dev50.out3"}, {"from":"dev26.in1","to":"dev50.out0"}, {"from":"dev26.in2","to":"dev50.out1"}, {"from":"dev26.in3","to":"dev50.out2"}, {"from":"dev26.in4","to":"dev50.out3"}, {"from":"dev26.in5","to":"dev49.out0"}, {"from":"dev26.in6","to":"dev49.out1"}, {"from":"dev26.in7","to":"dev49.out2"}, {"from":"dev26.in8","to":"dev49.out3"}, {"from":"dev27.in1","to":"dev50.out0"}, {"from":"dev27.in2","to":"dev50.out1"}, {"from":"dev27.in3","to":"dev50.out2"}, {"from":"dev27.in4","to":"dev50.out3"}, {"from":"dev27.in5","to":"dev28.out0"}, {"from":"dev27.in6","to":"dev28.out1"}, {"from":"dev27.in7","to":"dev28.out2"}, {"from":"dev27.in8","to":"dev28.out3"}, {"from":"dev28.in0","to":"dev4.out0"}, {"from":"dev28.in1","to":"dev5.out0"}, {"from":"dev28.in2","to":"dev5.out1"}, {"from":"dev28.in3","to":"dev5.out2"}, {"from":"dev28.in4","to":"dev5.out3"}, {"from":"dev28.in5","to":"dev12.out0"}, {"from":"dev28.in6","to":"dev12.out1"}, {"from":"dev28.in7","to":"dev12.out2"}, {"from":"dev28.in8","to":"dev12.out3"}, {"from":"dev28.in9","to":"dev6.out0"}, {"from":"dev29.in0","to":"dev58.out0"}, {"from":"dev29.in1","to":"dev13.out0"}, {"from":"dev29.in2","to":"dev15.out0"}, {"from":"dev29.in3","to":"dev14.out0"}, {"from":"dev29.in4","to":"dev49.out0"}, {"from":"dev29.in5","to":"dev49.out1"}, {"from":"dev29.in6","to":"dev49.out2"}, {"from":"dev29.in7","to":"dev49.out3"}, {"from":"dev29.in8","to":"dev16.out0"}, {"from":"dev30.in0","to":"dev25.out0"}, {"from":"dev30.in1","to":"dev25.out1"}, {"from":"dev30.in2","to":"dev25.out2"}, {"from":"dev30.in3","to":"dev25.out3"}, {"from":"dev30.in4","to":"dev24.out0"}, {"from":"dev30.in5","to":"dev24.out1"}, {"from":"dev30.in6","to":"dev24.out2"}, {"from":"dev30.in7","to":"dev24.out3"}, {"from":"dev30.in8","to":"dev38.out1"}, {"from":"dev31.in0","to":"dev26.out0"}, {"from":"dev31.in1","to":"dev26.out1"}, {"from":"dev31.in2","to":"dev26.out2"}, {"from":"dev31.in3","to":"dev26.out3"}, {"from":"dev31.in4","to":"dev30.out0"}, {"from":"dev31.in5","to":"dev30.out1"}, {"from":"dev31.in6","to":"dev30.out2"}, {"from":"dev31.in7","to":"dev30.out3"}, {"from":"dev31.in8","to":"dev38.out2"}, {"from":"dev32.in0","to":"dev27.out0"}, {"from":"dev32.in1","to":"dev27.out1"}, {"from":"dev32.in2","to":"dev27.out2"}, {"from":"dev32.in3","to":"dev27.out3"}, {"from":"dev32.in4","to":"dev31.out0"}, {"from":"dev32.in5","to":"dev31.out1"}, {"from":"dev32.in6","to":"dev31.out2"}, {"from":"dev32.in7","to":"dev31.out3"}, {"from":"dev32.in8","to":"dev38.out3"}, {"from":"dev33.in0","to":"dev43.out0"}, {"from":"dev33.in1","to":"dev43.out1"}, {"from":"dev33.in2","to":"dev43.out2"}, {"from":"dev33.in3","to":"dev43.out3"}, {"from":"dev33.in4","to":"dev32.out0"}, {"from":"dev33.in5","to":"dev32.out1"}, {"from":"dev33.in6","to":"dev32.out2"}, {"from":"dev33.in7","to":"dev32.out3"}, {"from":"dev33.in8","to":"dev38.out4"}, {"from":"dev34.in0","to":"dev44.out0"}, {"from":"dev34.in1","to":"dev44.out1"}, {"from":"dev34.in2","to":"dev44.out2"}, {"from":"dev34.in3","to":"dev44.out3"}, {"from":"dev34.in4","to":"dev33.out0"}, {"from":"dev34.in5","to":"dev33.out1"}, {"from":"dev34.in6","to":"dev33.out2"}, {"from":"dev34.in7","to":"dev33.out3"}, {"from":"dev34.in8","to":"dev38.out5"}, {"from":"dev35.in4","to":"dev34.out0"}, {"from":"dev35.in5","to":"dev34.out1"}, {"from":"dev35.in6","to":"dev34.out2"}, {"from":"dev35.in7","to":"dev34.out3"}, {"from":"dev35.in8","to":"dev38.out6"}, {"from":"dev36.in4","to":"dev35.out0"}, {"from":"dev36.in5","to":"dev35.out1"}, {"from":"dev36.in6","to":"dev35.out2"}, {"from":"dev36.in7","to":"dev35.out3"}, {"from":"dev36.in8","to":"dev38.out7"}, {"from":"dev37.in0","to":"dev28.out0"}, {"from":"dev37.in1","to":"dev28.out1"}, {"from":"dev37.in2","to":"dev28.out2"}, {"from":"dev37.in3","to":"dev28.out3"}, {"from":"dev37.in4","to":"dev42.out0"}, {"from":"dev37.in5","to":"dev42.out1"}, {"from":"dev37.in6","to":"dev42.out2"}, {"from":"dev37.in7","to":"dev42.out3"}, {"from":"dev37.in8","to":"dev38.out9"}, {"from":"dev38.in0","to":"dev22.out0"}, {"from":"dev38.in1","to":"dev22.out1"}, {"from":"dev38.in2","to":"dev22.out2"}, {"from":"dev38.in3","to":"dev22.out3"}, {"from":"dev38.in4","to":"dev0.out0"}, {"from":"dev39.in0","to":"dev38.out0"}, {"from":"dev39.in1","to":"dev38.out1"}, {"from":"dev39.in2","to":"dev38.out2"}, {"from":"dev39.in3","to":"dev38.out3"}, {"from":"dev39.in4","to":"dev38.out4"}, {"from":"dev39.in5","to":"dev38.out5"}, {"from":"dev39.in6","to":"dev38.out6"}, {"from":"dev39.in7","to":"dev38.out7"}, {"from":"dev39.in8","to":"dev38.out8"}, {"from":"dev39.in9","to":"dev38.out9"}, {"from":"dev40.in0","to":"dev20.out0"}, {"from":"dev40.in1","to":"dev39.out0"}, {"from":"dev41.in0","to":"dev20.out0"}, {"from":"dev41.in1","to":"dev38.out10"}, {"from":"dev42.in0","to":"dev49.out0"}, {"from":"dev42.in1","to":"dev49.out1"}, {"from":"dev42.in2","to":"dev49.out2"}, {"from":"dev42.in3","to":"dev49.out3"}, {"from":"dev42.in4","to":"dev36.out0"}, {"from":"dev42.in5","to":"dev36.out1"}, {"from":"dev42.in6","to":"dev36.out2"}, {"from":"dev42.in7","to":"dev36.out3"}, {"from":"dev42.in8","to":"dev38.out8"}, {"from":"dev43.in0","to":"dev49.out0"}, {"from":"dev43.in1","to":"dev49.out1"}, {"from":"dev43.in2","to":"dev49.out2"}, {"from":"dev43.in3","to":"dev49.out3"}, {"from":"dev43.in4","to":"dev50.out0"}, {"from":"dev43.in5","to":"dev50.out1"}, {"from":"dev43.in6","to":"dev50.out2"}, {"from":"dev43.in7","to":"dev50.out3"}, {"from":"dev44.in0","to":"dev28.out0"}, {"from":"dev44.in1","to":"dev28.out1"}, {"from":"dev44.in2","to":"dev28.out2"}, {"from":"dev44.in3","to":"dev28.out3"}, {"from":"dev44.in4","to":"dev50.out0"}, {"from":"dev44.in5","to":"dev50.out1"}, {"from":"dev44.in6","to":"dev50.out2"}, {"from":"dev44.in7","to":"dev50.out3"}, {"from":"dev45.in0","to":"dev38.out11"}, {"from":"dev45.in1","to":"dev52.out0"}, {"from":"dev46.in0","to":"dev55.out0"}, {"from":"dev48.in0","to":"dev46.out0"}, {"from":"dev48.in1","to":"dev45.out0"}, {"from":"dev49.in0","to":"dev28.out0"}, {"from":"dev49.in1","to":"dev28.out1"}, {"from":"dev49.in2","to":"dev28.out2"}, {"from":"dev49.in3","to":"dev28.out3"}, {"from":"dev49.in4","to":"dev19.out0"}, {"from":"dev50.in0","to":"dev37.out0"}, {"from":"dev50.in1","to":"dev37.out1"}, {"from":"dev50.in2","to":"dev37.out2"}, {"from":"dev50.in3","to":"dev37.out3"}, {"from":"dev50.in4","to":"dev40.out0"}, {"from":"dev51.in0","to":"dev50.out0"}, {"from":"dev51.in1","to":"dev50.out1"}, {"from":"dev51.in2","to":"dev50.out2"}, {"from":"dev51.in3","to":"dev50.out3"}, {"from":"dev52.in0","to":"dev51.out0"}, {"from":"dev52.in1","to":"dev38.out12"}, {"from":"dev53.in0","to":"dev10.out0"}, {"from":"dev54.in0","to":"dev45.out0"}, {"from":"dev54.in1","to":"dev20.out0"}, {"from":"dev55.in0","to":"dev18.out0"}, {"from":"dev56.in0","to":"dev57.out0"}, {"from":"dev56.in1","to":"dev47.out0"}, {"from":"dev56.in2","to":"dev49.out0"}, {"from":"dev56.in3","to":"dev49.out1"}, {"from":"dev56.in4","to":"dev49.out2"}, {"from":"dev56.in5","to":"dev49.out3"}, {"from":"dev56.in6","to":"dev54.out0"}, {"from":"dev57.in0","to":"dev48.out0"}, {"from":"dev57.in1","to":"dev60.out0"}, {"from":"dev58.in0","to":"dev17.out0"}, {"from":"dev60.in0","to":"dev61.out0"}, {"from":"dev60.in1","to":"dev62.out0"}, {"from":"dev61.in0","to":"dev59.out0"}, {"from":"dev62.in0","to":"dev38.out14"} ] }

Instructions Set

# Instructions Command Note
0 0000 ADD Constant
1 0001 ADD Register
2 0010 SUB Constant
3 0011 SUB Register
4 0100 MUL Constant
5 0101 MUL Register
6 0110 DIV Constant
7 0111 DIV Register
8 1000 LOD Constant
9 1001 LOD Register
10 1010 STO Register Be careful not to overwrite something important
11 1011 JMP Constant
12 1100 JMZ Constant
13 1101 NOP Be awary that every command uses 2 Bytes
14 1110 HLT Be awary that every command uses 2 Bytes

This will show the unfolded circuit. May cause a bit of lag

Embed your circuit

Ctrl+Click(Mac:command+Click) on your circuit and copy a circuit data.
Then paste it into template below.

<!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <script type="text/javascript" src="simcir.js"></script> <link rel="stylesheet" type="text/css" href="simcir.css" /> <script type="text/javascript" src="simcir-basicset.js"></script> <link rel="stylesheet" type="text/css" href="simcir-basicset.css" /> <script type="text/javascript" src="simcir-library.js"></script> <title></title> </head> <body> <div class="simcir"> <!-- paste here your circuit data --> </div> </body> </html>

Reuse your circuit

To reuse your circuit as library, use device 'In' and 'Out'.

{ "width":500, "height":200, "showToolbox":true, "toolbox":[ {"type":"In"}, {"type":"Out"}, {"type":"DC"}, {"type":"PushOff"}, {"type":"PushOn"}, {"type":"Toggle"}, {"type":"NAND"} ], "devices":[ {"type":"DC","id":"dev0","x":64,"y":80,"label":"DC"}, {"type":"PushOff","id":"dev1","x":120,"y":48,"label":"PushOff"}, {"type":"PushOff","id":"dev2","x":120,"y":112,"label":"PushOff"}, {"type":"In","id":"dev3","x":176,"y":48,"label":"~S"}, {"type":"In","id":"dev4","x":176,"y":112,"label":"~R"}, {"type":"NAND","id":"dev5","x":232,"y":56,"label":"NAND"}, {"type":"NAND","id":"dev6","x":232,"y":104,"label":"NAND"}, {"type":"Out","id":"dev7","x":288,"y":56,"label":"Q"}, {"type":"Out","id":"dev8","x":288,"y":104,"label":"~Q"} ], "connectors":[ {"from":"dev1.in0","to":"dev0.out0"}, {"from":"dev2.in0","to":"dev0.out0"}, {"from":"dev3.in0","to":"dev1.out0"}, {"from":"dev4.in0","to":"dev2.out0"}, {"from":"dev5.in0","to":"dev3.out0"}, {"from":"dev5.in1","to":"dev6.out0"}, {"from":"dev6.in0","to":"dev5.out0"}, {"from":"dev6.in1","to":"dev4.out0"}, {"from":"dev7.in0","to":"dev5.out0"}, {"from":"dev8.in0","to":"dev6.out0"} ] }

Then register it in JavaScript and add to the toolbox in HTML.

simcir.registerDevice('MyDevice', // paste here your circuit data );
<div class="simcir"> ⋮ "toolbox":[ {"type":"DC"}, {"type":"PushOff"}, ⋮ {"type":"MyDevice"} ], ⋮ </div>

In this case, a new device 'RS-FF' is added. Try to Double-Click the 'RS-FF' :)
Remember that all the connectors on an input of 'In' and an output of 'Out' are disconnected internally when the device is reused.

{ "width":500, "height":200, "showToolbox":true, "toolbox":[ {"type":"DC"}, {"type":"PushOff"}, {"type":"RS-FF"} ], "devices":[ {"type":"DC","id":"dev0","x":104,"y":80,"label":"DC"}, {"type":"PushOff","id":"dev1","x":160,"y":48,"label":"PushOff"}, {"type":"PushOff","id":"dev2","x":160,"y":112,"label":"PushOff"}, {"type":"RS-FF","id":"dev3","x":216,"y":80,"label":"RS-FF"} ], "connectors":[ {"from":"dev1.in0","to":"dev0.out0"}, {"from":"dev2.in0","to":"dev0.out0"}, {"from":"dev3.in0","to":"dev1.out0"}, {"from":"dev3.in1","to":"dev2.out0"} ] }

To customize the layout of library, add the "layout" property to your device with a text editor.
"rows" and "cols" define the size. nodes property contains 'label - position' pairs of nodes.

simcir.registerDevice('AltFullAdder', { ⋮ "layout":{"rows":8,"cols":8,"hideLabelOnWorkspace":true, "nodes":{"A":"T2","B":"T6","S":"B4","Cin":"R4","Cout":"L4"}}, "devices":[ ⋮
L1 L0 L2 L3 L4 T0 T1 T2 T3 T4 R0 R1 R2 R3 R4 B0 B1 B2 B3 B4 Left Right Bottom Top rows cols

Customize a device

label, color, number of inputs, freq ...

{ "width":500, "height":400, "showToolbox":true, "toolbox":[ {"type":"DC"}, {"type":"Toggle"}, {"type":"LED","color":"#00ff00","label":"LED(G)"}, {"type":"NAND","numInputs":"3","label":"NAND(3in)"}, {"type":"OSC","freq":1,"label":"OSC(1Hz)"}, {"type":"7seg","color":"#000000","bgColor":"#889988"} ], "devices":[ {"type":"NAND","numInputs":"3","label":"NAND(3in)","id":"dev0","x":208,"y":128}, {"type":"Toggle","id":"dev1","x":152,"y":80,"label":"Toggle"}, {"type":"Toggle","id":"dev2","x":152,"y":128,"label":"Toggle"}, {"type":"Toggle","id":"dev3","x":152,"y":176,"label":"Toggle"}, {"type":"DC","id":"dev4","x":96,"y":128,"label":"DC"}, {"type":"LED","color":"#00ff00","label":"LED(G)","id":"dev5","x":264,"y":128}, {"type":"OSC","freq":1,"label":"OSC(1Hz)","id":"dev6","x":96,"y":232}, {"type":"NAND","numInputs":"3","label":"NAND(3in)","id":"dev7","x":152,"y":272}, {"type":"7seg","color":"#000000","bgColor":"#889988","id":"dev8","x":208,"y":232,"label":"7seg"} ], "connectors":[ {"from":"dev0.in0","to":"dev1.out0"}, {"from":"dev0.in1","to":"dev2.out0"}, {"from":"dev0.in2","to":"dev3.out0"}, {"from":"dev1.in0","to":"dev4.out0"}, {"from":"dev2.in0","to":"dev4.out0"}, {"from":"dev3.in0","to":"dev4.out0"}, {"from":"dev5.in0","to":"dev0.out0"}, {"from":"dev7.in0","to":"dev6.out0"}, {"from":"dev7.in1","to":"dev6.out0"}, {"from":"dev7.in2","to":"dev6.out0"}, {"from":"dev8.in0","to":"dev6.out0"}, {"from":"dev8.in1","to":"dev7.out0"}, {"from":"dev8.in2","to":"dev7.out0"}, {"from":"dev8.in3","to":"dev6.out0"}, {"from":"dev8.in4","to":"dev7.out0"}, {"from":"dev8.in5","to":"dev7.out0"}, {"from":"dev8.in6","to":"dev6.out0"} ] }

Contents Copyright © Kazuhiko Arase