diff --git a/README.md b/README.md index eaaabe1..d49ad9c 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,10 @@ Designing a computer from scratch. The only components that I didn't made were the ports. #### Todo +*Unsigned 1 byte* +- [X] ULA +- [ ] Clock +- [ ] RAM - [ ] Control Unit - [ ] Signed integer - [ ] Float diff --git a/copy.circ b/copy.circ new file mode 100644 index 0000000..6d4e351 --- /dev/null +++ b/copy.circ @@ -0,0 +1,1774 @@ + + + This file is intended to be loaded by Logisim-evolution (https://github.com/reds-heig/logisim-evolution). + + + + + + + + + + + + + + + addr/data: 8 8 +0 + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/createRam/content/OR_PORT.circ b/createRam/content/OR_PORT.circ new file mode 100755 index 0000000..2e773d2 --- /dev/null +++ b/createRam/content/OR_PORT.circ @@ -0,0 +1,298 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/createRam/content/RAM.circ b/createRam/content/RAM.circ new file mode 100755 index 0000000..02b235e --- /dev/null +++ b/createRam/content/RAM.circ @@ -0,0 +1,283 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/createRam/data.go b/createRam/data.go new file mode 100644 index 0000000..2fad5d9 --- /dev/null +++ b/createRam/data.go @@ -0,0 +1,50 @@ +package main + +import "fmt" + +type pair struct { + x int + y int +} + +func newPair(x int, y int) pair { + return pair{x, y} +} + +type wire struct { + from pair + to pair +} + +func newWire(from pair, to pair) wire { + return wire{from, to} +} + +func (w wire) toCircuit() string { + return fmt.Sprintf("", w.from.x, w.from.y, w.to.x, w.to.y) +} + +type pin struct { + loc pair + name string +} + +func newPin(loc pair, name string) pin { + return pin{loc: loc, name: name} +} + +func (p pin) toCircuit() string { + return fmt.Sprintf(" %s %s ", p.loc.x, p.loc.y, newLine, p.name, newLine) +} + +type ramByte struct { + loc pair +} + +func newRAMByte(loc pair) ramByte { + return ramByte{loc: loc} +} + +func (r ramByte) toCircuit() string { + return fmt.Sprintf(" %s %s ", r.loc.x, r.loc.y, newLine, newLine) +} diff --git a/createRam/main.go b/createRam/main.go new file mode 100644 index 0000000..f9934e5 --- /dev/null +++ b/createRam/main.go @@ -0,0 +1,81 @@ +package main + +import ( + "fmt" + "io/ioutil" + "log" + "math" +) + +const ramFileName = "../RAM.circ" +const orPortFileName = "../OR_PORT.circ" +const fileMode = 777 +const newLine = "\n" + +const amntBitsComputer = 8 //this will not work "out of the box" if you change this + +func getMaxBytesRAM() int { + return int(math.Pow(2, amntBitsComputer)) +} + +func main() { + fmt.Println("MENU: ") + fmt.Println("1. Generate RAM") + fmt.Println("2. Create PortOr") + + fmt.Print("Menu item choosen: ") + var item int + _, err := fmt.Scanf("%d", &item) + if err != nil { + log.Fatal(err) + } + + switch item { + case 1: + generateRAMCircuitWithUser() + break + case 2: + generateOrPortWithUser() + break + } + + fmt.Println() + fmt.Println("End of execution") +} + +func generateOrPortWithUser() { + fmt.Print("Amount of inputs: ") + var amntInputs int + _, err := fmt.Scanf("%d", &amntInputs) + if err != nil { + log.Fatal(err) + } + + orPortCircuitStr, errOrPort := generateOrPort(amntInputs) + if errOrPort != nil { + log.Fatal(errOrPort) + } + + errWrite := ioutil.WriteFile(orPortFileName, []byte(orPortCircuitStr), fileMode) + if errWrite != nil { + log.Fatal(errWrite) + } +} + +func generateRAMCircuitWithUser() { + fmt.Print("Amount of bytes in the RAM: ") + var amntBytes int + _, err := fmt.Scanf("%d", &amntBytes) + if err != nil { + log.Fatal(err) + } + if amntBytes <= 0 { + amntBytes = getMaxBytesRAM() - 1 + } + + ramCircuitStr := generateRAMCircuit(amntBytes) + errWrite := ioutil.WriteFile(ramFileName, []byte(ramCircuitStr), fileMode) + if errWrite != nil { + log.Fatal(err) + } +} diff --git a/createRam/portOR.go b/createRam/portOR.go new file mode 100644 index 0000000..2633008 --- /dev/null +++ b/createRam/portOR.go @@ -0,0 +1,162 @@ +package main + +import ( + "errors" + "fmt" +) + +const maxInputsPort = 32 + +const xInputs = 150 +const yFirstPort = 300 +const yDistanceBwtInputs = 10 + +const spaceBtwPorts = 100 +const xDistanceInputPort = 100 +const yDistancePortFromFirstInput = 160 +const widthPort = 50 + +const imenseOrInputNamePrefix = "input" + +func generateOrPort(amntInputs int) (string, error) { + imenseOrPort := newImenseOrPort() + + if amntInputs > maxInputsPort*maxInputsPort { + return "", errors.New("This port is not able to deal with this much inputs") + } + + amntInputsRemaining := amntInputs + yCurPort := yFirstPort + for amntInputsRemaining > 0 { + var amntInputsCurPort int + if amntInputsRemaining > maxInputsPort { + amntInputsCurPort = maxInputsPort + } else { + amntInputsCurPort = amntInputsRemaining + } + + portLoc := newPair(xInputs+xDistanceInputPort, yCurPort) + imenseOrPort.addOrPort(portLoc) + + for i := 0; i < amntInputsCurPort; i++ { + y := yCurPort - yDistancePortFromFirstInput + i*yDistanceBwtInputs + if i >= maxInputsPort/2 { + y += yDistanceBwtInputs + } + + inputPinLoc := newPair(xInputs, y) + imenseOrPort.addInputPins(inputPinLoc) + + wireFrom := inputPinLoc + wireTo := newPair(portLoc.x-widthPort, inputPinLoc.y) + imenseOrPort.addWire(newWire(wireFrom, wireTo)) + } + + yCurPort += spaceBtwPorts + (maxInputsPort+1)*yDistanceBwtInputs + amntInputsRemaining -= maxInputsPort + } + + return imenseOrPort.toCircuit(), nil +} + +///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// +///////////////////////////////// PORT ////////////////////////////////// +///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// + +type portType string + +const ( + orPort = "OR Gate" + andPort = "AND Gate" + notPort = "NOT Gate" +) + +type direction string + +const ( + south = "south" + north = "north" + east = "east" + west = "west" +) + +type port struct { + loc pair + amntInputs int + portType portType + facingDirection direction +} + +func newPort(loc pair, amntInputs int, portType portType, facingDirection direction) port { + return port{loc: loc, amntInputs: amntInputs, portType: portType, facingDirection: facingDirection} +} + +func (p port) toCircuit() string { + ret := fmt.Sprintf("", p.loc.x, p.loc.y, p.portType) + ret += newLine + fmt.Sprintf("", p.facingDirection) + ret += newLine + fmt.Sprintf("", p.amntInputs) + ret += newLine + "" + return ret +} + +///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// +//////////////////////////// IMENSE OR PORT ///////////////////////////// +///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////// + +type imenseOrPort struct { + ports []port + wires []wire + inputPins []pin + outputPin pin +} + +func newImenseOrPort() imenseOrPort { + return imenseOrPort{} +} + +func (p *imenseOrPort) addOrPort(loc pair) { + port := newPort(loc, maxInputsPort, orPort, east) + p.ports = append(p.ports, port) +} + +func (p *imenseOrPort) addWire(wire wire) { + p.wires = append(p.wires, wire) +} + +func (p *imenseOrPort) addInputPins(loc pair) { + pinName := fmt.Sprintf("%s%d", imenseOrInputNamePrefix, len(p.inputPins)) + p.inputPins = append(p.inputPins, newPin(loc, pinName)) +} + +func (p *imenseOrPort) setOutputPins(pin pin) { + p.outputPin = pin +} + +func (p imenseOrPort) toCircuit() string { + portsStr := "" + for _, port := range p.ports { + portsStr += port.toCircuit() + newLine + } + + wiresStr := "" + for _, wire := range p.wires { + wiresStr += wire.toCircuit() + newLine + } + + inputsStr := "" + for _, pin := range p.inputPins { + inputsStr += pin.toCircuit() + newLine + } + + outputStr := p.outputPin.toCircuit() + + return portsStr + wiresStr + outputStr + inputsStr +} diff --git a/createRam/ram.go b/createRam/ram.go new file mode 100644 index 0000000..771de59 --- /dev/null +++ b/createRam/ram.go @@ -0,0 +1,125 @@ +package main + +import ( + "errors" + "fmt" + "log" +) + +const ramInputNamePrefix = "input" + +const xPins = 100 +const yFirstPin = 120 +const yDistanceBtwPins = 40 + +const yByteRams = 870 +const xFirstByteRAM = 840 +const xDistanceBtwByteRams = 250 +const xDeltaStartWireFromByteRams = -180 +const xDistanceBtwByteRAMInputs = 20 +const yDeltaStartWireFromByteRams = -160 + +func getInputBeforeBits() []string { + inputs := []string{"is_write", "select_value"} + for i := 0; i < amntBitsComputer; i++ { + inputs = append(inputs, fmt.Sprintf("%s%d", ramInputNamePrefix, i)) + } + return inputs +} + +// WIRE FROM BYTE RAM HAS TO START IN BYTE_RAM AND GO UP +// BYTE RAM HAVE TO BE ADDED IN ORDER (from left to right) + +func generateRAMCircuit(amntBytes int) string { + if amntBytes >= getMaxBytesRAM() { + log.Fatal(errors.New("Computer won't be able to access these bytes")) + } + + inputs := getInputBeforeBits() + ram := newRAM(len(inputs)) + + for i := 0; i < len(inputs); i++ { + locPin := newPair(xPins, yFirstPin+i*yDistanceBtwPins) + curPin := newPin(locPin, inputs[i]) + ram.addPin(curPin) + + startWire := locPin + ram.addWireFromPin(startWire, i) + } + + for i := 0; i < amntBytes; i++ { + locByteRAM := newPair(xFirstByteRAM+i*xDistanceBtwByteRams, yByteRams) + byteRAM := newRAMByte(locByteRAM) + ram.addRAMByte(byteRAM) + + for i := 0; i < len(inputs); i++ { + xWire := (locByteRAM.x + xDeltaStartWireFromByteRams) + i*xDistanceBtwByteRAMInputs + yWire := byteRAM.loc.y + yDeltaStartWireFromByteRams + startWire := newPair(xWire, yWire) + + bitIndex := len(inputs) - i - 1 + ram.addWireFromByte(startWire, bitIndex) + } + } + + return ram.toCircuit() +} + +type ram struct { + pinWiresStart []pair + wires []wire + inputPins []pin + ramBytes []ramByte + // TODO: + // outputPins []pin + // orPorts []port +} + +func newRAM(amntPins int) ram { + return ram{pinWiresStart: make([]pair, amntPins)} +} + +func (r *ram) addWireFromPin(pinWireStart pair, i int) { + r.pinWiresStart[i] = pinWireStart +} + +func (r *ram) addWireFromByte(byteWireStart pair, i int) { + intersectionWires := newPair(byteWireStart.x, r.pinWiresStart[i].y) + + wireFromByte := newWire(byteWireStart, intersectionWires) + r.wires = append(r.wires, wireFromByte) + + fromPinWire := r.pinWiresStart[i] + toPinWire := intersectionWires + + wireFromPin := newWire(fromPinWire, toPinWire) + r.wires = append(r.wires, wireFromPin) + r.pinWiresStart[i] = toPinWire +} + +func (r *ram) addPin(pin pin) { + r.inputPins = append(r.inputPins, pin) +} + +func (r *ram) addRAMByte(ramByte ramByte) { + r.ramBytes = append(r.ramBytes, ramByte) +} + +func (r ram) toCircuit() string { + wiresStr := "" + for _, wire := range r.wires { + wiresStr += wire.toCircuit() + newLine + } + + pinsStr := "" + for _, pin := range r.inputPins { + pinsStr += pin.toCircuit() + newLine + } + + ramBytesStr := "" + for _, ramByte := range r.ramBytes { + ramBytesStr += ramByte.toCircuit() + newLine + } + + return wiresStr + pinsStr + ramBytesStr +} diff --git "a/divis\303\243o_v3" "b/divis\303\243o_v3" new file mode 100644 index 0000000..e913cd7 --- /dev/null +++ "b/divis\303\243o_v3" @@ -0,0 +1,7 @@ +v2.0 raw +7ff 7fe 1fe 4f0 d30 3f0 2f2 2f3 +1ff 2f1 2f5 1f1 4f0 d40 2f1 1f2 +4f0 2f2 d20 a0b 12*0 1f1 2f5 1f4 +3f0 2f4 1f3 2f2 a0b 8*0 2f5 1ff +2f4 a40 12*0 8f4 63*0 8f5 63*0 900 +47*0 1 diff --git a/main.circ b/main.circ index 8954a4a..0c189d1 100644 --- a/main.circ +++ b/main.circ @@ -1,8 +1,7 @@ - This file is intended to be loaded by Logisim-evolution (https://github.com/reds-heig/logisim-evolution). - - +This file is intended to be loaded by Logisim-evolution (https://github.com/reds-heig/logisim-evolution). + @@ -60,6 +59,7 @@ + @@ -68,8 +68,243 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -661,13 +896,13 @@ - + - + @@ -675,7 +910,7 @@ - + @@ -684,6 +919,10 @@ + + + + @@ -819,7 +1058,7 @@ - + @@ -831,7 +1070,7 @@ - + @@ -843,7 +1082,7 @@ - + @@ -890,264 +1129,1247 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + + + + - + - - - + - + + - + - - - + + - - + - - - + + - + + + - - - + + + + + + + + - + + - - + + - + + + + + + + + + + - - + + + - + + + - + - - + + + - - - + - + + + + - + - - + + + + + - - + + + + + - - + + + + - - + + + - + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + - + + - + - + - + - + - + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + - + - - + + + + + + - - + + + + - - + + - - + + + + + + - + - + - - + + + + + + + + - + + - + - - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + + + + - - + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/new.circ b/new.circ new file mode 100644 index 0000000..98ca27e --- /dev/null +++ b/new.circ @@ -0,0 +1,2259 @@ + + +This file is intended to be loaded by Logisim-evolution (https://github.com/reds-heig/logisim-evolution). + + + + + + + + + + + + + + addr/data: 8 8 +0 + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/newest.circ b/newest.circ new file mode 100644 index 0000000..224f7f7 --- /dev/null +++ b/newest.circ @@ -0,0 +1,2083 @@ + + +This file is intended to be loaded by Logisim-evolution (https://github.com/reds-heig/logisim-evolution). + + + + + + + + + + + + + + addr/data: 8 8 +0 + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +