- v50 information can now be added to pages in the main namespace. v0.47 information can still be found in the DF2014 namespace. See here for more details on the new versioning policy.
- Use this page to report any issues related to the migration.
Difference between revisions of "User:Green Sprite"
Green Sprite (talk | contribs) |
Green Sprite (talk | contribs) |
||
Line 131: | Line 131: | ||
</frame> | </frame> | ||
</diagram> | </diagram> | ||
− | In the design, each row of red gear assemblies {{Raw Tile|☼|4:1}} are linked to the row of pressure plates in a byte. The purple gear assemblies {{Raw Tile|☼|5:0}} are normally inverted and decide which byte to read. A binary decoder selects which purple gear assembly to engage. Reading works by first letting power flow through a single purple gear assembly corresponding to one byte and then through the red gear assemblies that are engaged. The lower z level (0) carries the power to a [[Mechanical_logic#Power_to_signal_converter|power to signal converter]]. | + | In the design, each row of red gear assemblies {{Raw Tile|☼|4:1}} are linked to the row of pressure plates in a byte. The purple gear assemblies {{Raw Tile|☼|5:0}} are normally inverted and decide which byte to read. A binary decoder selects which purple gear assembly to engage. Reading works by first letting power flow through a single purple gear assembly corresponding to one byte and then through the red gear assemblies that are engaged. The lower z level (0) carries the power to a [[Mechanical_logic#Power_to_signal_converter|power to signal converter]] (pts converter). |
==Binary Decoder== | ==Binary Decoder== | ||
I will be using [[User:Jong/Dwarven_Computer#Decoder|Jong's design]] for a binary decoder. Binary decoders allow for memory addressing and selecting operations from an opcode. | I will be using [[User:Jong/Dwarven_Computer#Decoder|Jong's design]] for a binary decoder. Binary decoders allow for memory addressing and selecting operations from an opcode. | ||
Line 138: | Line 138: | ||
Components: | Components: | ||
− | <diagram fg= | + | <diagram fg=7:0> |
− | + | O══════════════════════O | |
− | [#5:1]^[#0:0][@7:0]■[@][#1:1]☼☼[# | + | [#5:1]^[#0:0][@7:0]■[@][#1:1]☼☼[#] And gate |1| |
− | [#7:1]╚╝[# | + | [#7:1]╚╝[#] |
− | + | O══════════════════════O | |
− | [#5:1]^[#0:0][@7:0]■[@][#4:1]☼[# | + | [#5:1]^[#0:0][@7:0]■[@][#4:1]☼[#] Xor gate |2| |
− | [#7:1]╚╝[# | + | [#7:1]╚╝[#] |
− | + | O══════════════════════O | |
− | OO[#] | + | OO[#]☼[#4:1]☼[#2:1]☼[#] (x and y) or z |3| |
− | [#5:1]^[#0:0][@7:0]■[@#] | + | [#5:1]^[#0:0][@7:0]■[@#]☼[#1:1]☼☼ |
[#7:1]╚╝ | [#7:1]╚╝ | ||
</diagram> | </diagram> | ||
+ | In the and gate, power is fed to the rightmost gear assembly. Both gear assemblies are inverted. Each gear assembly is linked to one input, power goes into the pts converter only when both inputs are open. | ||
+ | |||
+ | In the xor gate, power is fed to the gear assembly. The gear assembly is inverted and linked to both inputs. When either input, but not both, are open, power goes to the pts converter. | ||
+ | |||
+ | In the last component, there are three non-commutative inputs. Power is fed to the green gear assembly {{Raw Tile|☼|#0F0}}. Input z is linked to the red gear assembly {{Raw Tile|☼|#F00}}. Inputs x and y are linked to either blue gear assembly {{Raw Tile|☼|#00F}}, creating an and gate. Both blue gears and the reg gear are inverted. | ||
==Edge Detectors (Rising and Falling)== | ==Edge Detectors (Rising and Falling)== | ||
Rising edge detector design: | Rising edge detector design: | ||
Line 156: | Line 161: | ||
╚═════╝ | ╚═════╝ | ||
</diagram> | </diagram> | ||
− | The rising edge detector sends a pulse when an open signal is sent. Both rollers {{Raw Tile|╢|7:0}} are always active and sending the cart from west to east. The red door {{Raw Tile|┼|#C0C0C0|#F00}} is linked to the input. The input is also connected to a not gate, which feeds to a | + | The rising edge detector sends a pulse when an open signal is sent. Both rollers {{Raw Tile|╢|7:0}} are always active and sending the cart from west to east. The red door {{Raw Tile|┼|#C0C0C0|#F00}} is linked to the input. The input is also connected to a not gate, which feeds to a pts converter. The pts converter connects to the red door {{Raw Tile|┼|#C0C0C0|#0F0}}. The pressure plate {{Raw Tile|^|5:1}} is the output. A minecart is placed on the roller between both doors. When the input sends a open signal the green door opens, letting the minecart past the pressure plate. The pressure plate sends a pulse starting instantly for 99 ticks. At the same time, the red door closes, stopping the minecart from going through. When the input sends a closed signal again, the red door opens, but the green door closes, so the minecart is set back to the original position. |
The falling edge detector is the same as the rising edge detector, but the green and red doors are flipped. | The falling edge detector is the same as the rising edge detector, but the green and red doors are flipped. |
Revision as of 06:45, 7 June 2021
Dwarftel Core d1
The Dwarftel Core d1 is a dwarven computer that uses primarily toggle-based mechanical logic. It is a simple processor that can add, subtract, binary shift, perform bitwise 'and' and 'not'. The processor also has 16 bytes of memory which it can write and read to. The program is kept on the memory.
Registers
A | Main register, input of arithmetic operators and where the results are written. |
B | Secondary register, most operations that need two inputs will use this register. |
C | Conditional register, involved in low-level if statements. |
PC | Program counter which keeps track of the memory address for the next instruction. |
Instructions
0x0 | Halt. |
0x1 | Load memory address to A. |
0x2 | Copy A to B. |
0x3 | Copy A to C. |
0x4 | Copy A to PC if C is not 0. |
0x5 | Store A to memory address. |
0x6 | \--- |
0x7 | \--- |
0x8 | Add A + B. Write result to A. |
0x9 | Increment 1 to A. |
0xA | Subtract A - B. Write result to A. |
0xB | Decrement 1 from A. |
0xC | Shift A left by given amount. |
0xD | Shift A right by given amount. |
0xE | Bitwise A and B. Write result to A. |
0xF | Bitwise not A. Write result to A. |
Memory Cell
Single bit cell
Design for single bit memory cell found here
Byte cell
Design for byte:
O | ═ | ╦ | ╦ | ═ | ═ | ╦ | ╦ | ═ | ═ | ╦ | ╦ | ═ | ═ | ╦ | ╗ |
╥ | ☼ | ╚ | ╝ | ╥ | ☼ | ╚ | ╝ | ╥ | ☼ | ╚ | ╝ | ╥ | ☼ | ╚ | ╝ |
║ | O | ╥ | ☼ | ║ | O | ╥ | ☼ | ║ | O | ╥ | ☼ | ║ | O | ╥ | ☼ |
╨ | ☼ | ║ | O | ╨ | ☼ | ║ | O | ╨ | ☼ | ║ | O | ╨ | ☼ | ║ | O |
╔ | ╗ | ╨ | ☼ | ╔ | ╗ | ╨ | ☼ | ╔ | ╗ | ╨ | ☼ | ╔ | ╗ | ╨ | ☼ |
╚ | ╩ | ═ | ═ | ╩ | ╩ | ═ | ═ | ╩ | ╩ | ═ | ═ | ╩ | ╩ | ═ | O |
The byte cell is made up of eight individual single bit memory cells. The diagram shows only the track layer, the minecart and roller/furniture layers can be derived from the diagram above and the single bit design.
Memory write
Multiple byte cells are created close together to create the actual memory. A register for writing to memory, consisting of a byte cell is created. The pressure plate in each bit of the register connects to the ☼ northern gear and the ☼ sourthern gear assembly of the respective bit of all bytes in memory. The southern gear assembly is inverted. On a layer above, power is provided to all of the gears assemblies of each byte. A binary decoder selects a byte to activate in the layer above. Writing works by letting power flow first only to the byte being written to, and then the individual bits being turned on or off. To minimize the number of linkages in the reading of memory, the pressure plate being activated corresponds to a 0, and the pressure plate being lifted (unactivated) corresponds to a 1.
Memory read
The following diagram has multiple z-levels, click the diagram and press < or > to go up and down.
║ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ||||||||
☼ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | |
║ | ||||||||||||||||
║ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ||||||||
☼ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | |
║ | ||||||||||||||||
║ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ||||||||
☼ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | |
║ | ||||||||||||||||
║ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ||||||||
☼ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | |
. | ||||||||||||||||
. | Z | = | 1 | |||||||||||||
. | ||||||||||||||||
║ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ||||||||
☼ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ | ═ | ☼ |
O | O | O | O | O | O | O | O | |||||||||
^ | ■ | ☼ | ^ | ■ | ☼ | ^ | ■ | ☼ | ^ | ■ | ☼ | |||||
╚ | ╝ | ║ | ╚ | ╝ | ║ | ╚ | ╝ | ║ | ╚ | ╝ | ║ | |||||
☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | |||||||||
║ | ║ | ║ | ║ | ║ | ║ | ║ | ||||||||||
║ | ║ | ║ | ║ | ║ | ║ | ║ | ||||||||||
☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | |||||||||
║ | ║ | ║ | ║ | ║ | ║ | ║ | ||||||||||
║ | ║ | ║ | ║ | ║ | ║ | ║ | ||||||||||
☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | |||||||||
║ | ║ | ║ | ║ | ║ | ║ | ║ | ||||||||||
║ | ║ | ║ | ║ | ║ | ║ | ║ | ||||||||||
☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | |||||||||
║ | ║ | ║ | ║ | ║ | ║ | ║ | ||||||||||
. | ||||||||||||||||
. | Z | = | 0 | |||||||||||||
. | ||||||||||||||||
☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | ☼ | |||||||||
O | O | ║ | O | O | ║ | O | O | ║ | O | O | ║ | |||||
^ | ■ | ☼ | ^ | ■ | ☼ | ^ | ■ | ☼ | ^ | ■ | ☼ | |||||
╚ | ╝ | ╚ | ╝ | ╚ | ╝ | ╚ | ╝ |
In the design, each row of red gear assemblies ☼ are linked to the row of pressure plates in a byte. The purple gear assemblies ☼ are normally inverted and decide which byte to read. A binary decoder selects which purple gear assembly to engage. Reading works by first letting power flow through a single purple gear assembly corresponding to one byte and then through the red gear assemblies that are engaged. The lower z level (0) carries the power to a power to signal converter (pts converter).
Binary Decoder
I will be using Jong's design for a binary decoder. Binary decoders allow for memory addressing and selecting operations from an opcode.
Adder
The adder used in the Dwarftel Core d1 is a kogge-stone adder, which is a type of carry-lookahead adder. It consists of 3 components chained in a certain way.
Components:
O | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | O |
^ | ■ | ☼ | ☼ | A | n | d | g | a | t | e | | | 1 | | | ||||||||||
╚ | ╝ | ||||||||||||||||||||||
O | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | O |
^ | ■ | ☼ | X | o | r | g | a | t | e | | | 2 | | | |||||||||||
╚ | ╝ | ||||||||||||||||||||||
O | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | ═ | O |
O | O | ☼ | ☼ | ☼ | ( | x | a | n | d | y | ) | o | r | z | | | 3 | | | ||||||
^ | ■ | ☼ | ☼ | ☼ | |||||||||||||||||||
╚ | ╝ |
In the and gate, power is fed to the rightmost gear assembly. Both gear assemblies are inverted. Each gear assembly is linked to one input, power goes into the pts converter only when both inputs are open.
In the xor gate, power is fed to the gear assembly. The gear assembly is inverted and linked to both inputs. When either input, but not both, are open, power goes to the pts converter.
In the last component, there are three non-commutative inputs. Power is fed to the green gear assembly ☼. Input z is linked to the red gear assembly ☼. Inputs x and y are linked to either blue gear assembly ☼, creating an and gate. Both blue gears and the reg gear are inverted.
Edge Detectors (Rising and Falling)
Rising edge detector design:
╔ | ╢ | ┼ | ╢ | ┼ | ^ | ╗ |
╚ | ═ | ═ | ═ | ═ | ═ | ╝ |
The rising edge detector sends a pulse when an open signal is sent. Both rollers ╢ are always active and sending the cart from west to east. The red door ┼ is linked to the input. The input is also connected to a not gate, which feeds to a pts converter. The pts converter connects to the red door ┼. The pressure plate ^ is the output. A minecart is placed on the roller between both doors. When the input sends a open signal the green door opens, letting the minecart past the pressure plate. The pressure plate sends a pulse starting instantly for 99 ticks. At the same time, the red door closes, stopping the minecart from going through. When the input sends a closed signal again, the red door opens, but the green door closes, so the minecart is set back to the original position.
The falling edge detector is the same as the rising edge detector, but the green and red doors are flipped.