PC Let's Make Some Hard Drives!

Even if we were to use 'blocks' for each character as small as 8x8, we would need 64 wires to carry the mapping from the read-only memory to the display.
If we were to stack wires, this large wire would still be 32 blocks thick, unless we build some sort of timing load-unload thing (gaps in time between signals, either one length or another for every pixel on the screen?), which could be done across a single wire (although for now, I'm not even going to try building
honestly I think the only practical way to do a display would be to use 8 bits for all columns, then a bit for each row. each of the 8 bits is.. anded to a bit for each row, but you have to activate one row at a time instead of the entire 8x8 square. So it may be 8 times slower, but the wiring is more efficient.
 
We now have readable memory! You guys are amazing.

This might not be the best thread to post in. I'm posting this anyway.

Now: screens and displays!
It would be amazing if we could store a register of characters (end goal, copy 0-127 of unicode?) and map them onto a screen using some sort of read-only drive with characters stored inside.

A problem comes quickly; the data required to transport the signal to this screen would be huge and awkward to carry across large distances.

Even if we were to use 'blocks' for each character as small as 8x8, we would need 64 wires to carry the mapping from the read-only memory to the display.
If we were to stack wires, this large wire would still be 32 blocks thick, unless we build some sort of timing load-unload thing (gaps in time between signals, either one length or another for every pixel on the screen?), which could be done across a single wire (although for now, I'm not even going to try building one [EDIT: I might have to]).

Edit, thanks to NiraExecuto who has built a transmission system using one wire for any amount of signal, I will be using to use 8 wires per 'block'/character.


A second problem, how do we build this screen?

In real life, our screens are two dimensional, with the data flowing in from the behind, in the third dimension. In three-dimensional games like minecraft, this can be easy enough to recreate.

However, Terraria is far less three-dimensional. The transparency of wires and the presence of multiple colours help, however a large two-dimensional screen would require massive amounts of signal travelling through every part of the screen.
If someone could make such a screen, I'd be astounded.

We should instead try to use a one-dimensional screen.

Yes, it sounds boring. But then I realised that there are four colours of wire, each of which could form a row in the second dimension.
On top of this, there can be both a top and bottom input section, increasing the height to 8.

Granted enough space between 8x8 'Blocks', we could make it a proper 2D screen,
although for now, an 8-pixel thick screen, longer across the other dimension using a load-unload system involving timing seems to be the way to go.


Now, to build this in-game. I'll give an update if I work something out.

After looking at another thread, i realized we would simply have to space the pixels of the display out. (I imagine 2 blocks in between each pixel, vertical and horizontal). It would reduce aesthetics, but it may be the only way to get a 2D full pixel screen as of 1.3.1.
 
a set of 8 transistors would make for a single byte storage which can hold a single character... in Binary... then just convert that to the binary character based on what is on I guess.
 
I did try to make a section of 8 bit address ram (ironically for an 8 bit computer with 16 bit address for ram, 24 bit address for rom and alu (not completed yet, may take a decade))
using the sr flip flops shown here http://forums.terraria.org/index.ph...atalog-basics-to-advanced.46000/#post-1030075 .
It would there would be a mode for saving the location that will be accessed, a mode for enabling data to be written to the section of ram, a mode to reset all location registers, and a mode to enable data to be written out to the data output register
( the input write register needs to be toggled when the data selected outputs due to the device using a bidirectional wire. here is a unit for the register that can be selected. the green painted part of the 3 and 9 lamps of the and gates (made that way to save space) are used to label which register it is.

here is the link http://imgur.com/3S3YYhS
 
Here's the memory device that I'm using for my calculator:

x0u1b9.png


If you ignore the extra 3 bits at the right, then what you have is a RAM chip that can store up to 16 16-bit numbers, though the device can easily be tiled to increase the storage size. Also, by replacing the vertical bit shifter on the left with a binary multiplexer, you can select a memory location using another binary integer.
 
Here's the memory device that I'm using for my calculator:

If you ignore the extra 3 bits at the right, then what you have is a RAM chip that can store up to 16 16-bit numbers, though the device can easily be tiled to increase the storage size. Also, by replacing the vertical bit shifter on the left with a binary multiplexer, you can select a memory location using another binary integer.

I noticed the design could be compacted slightly by having the input and output tiling on top of each other. It makes the design 4x5, but can be tiled on top of itself, in a way, essentially making it 3x5.
ac60e34d03.png

Although tiling this would make it look way more rectangular instead of square. Just a tip; I didn't know if you were interested in compacting it.
65109208d2.png
 
I noticed the design could be compacted slightly by having the input and output tiling on top of each other. It makes the design 4x5, but can be tiled on top of itself, in a way, essentially making it 3x5.
ac60e34d03.png

Although tiling this would make it look way more rectangular instead of square. Just a tip; I didn't know if you were interested in compacting it.
65109208d2.png

The reason i didn't do that was because wire colors don't visually merge in TEdit. Instead, the blue wire would hide the red wire beneath, making it harder for me to fix the RAM if I forgot to draw some of the red wire. Also, I almost always put 3 blocks of space between the bits in my devices (just a personal convention I set for myself).
[doublepost=1471931295,1470349505][/doublepost]So, after some experimenting and some research on actual RAM chips and hard drives, I came up with two new and super compact storage units:

RAM chip:

11bt0so.png


28iazhy.png


This RAM device is very similar to the one I showed a few weeks ago. However, this one is a good bit more compact since it uses the same set of wires to read and write, instead of having two separate groups of wires. This version also features a multiplexer instead of a vertical bit shifter, allowing the user to select a byte and operate on it in one tick.

Hard drive:

2ep633t.png


fon6zc.png


This hard drive, like a real hard drive, is far more compact that a RAM chip. However, it also takes much more time to read and write data. Instead of using a multiplexer to select a specific byte, this hard drive functions by using a series of tightly packed rotating left bit shifters that shift the different bytes into the operable area, one by one, and then shift them back to the right end of the drive. This way the bytes can be managed one at a time. Unfortunately, this means that in order to extract a byte from the middle of the hard drive, multiple bit shifts must be performed in order to slide that byte into position. Also, to prevent data in the drive from becoming misaligned, every single byte must be read through before the user is allowed to stop reading.

To show exactly how compact the hard drive can be though, here is an expanded example that contains 256 bytes of data:

16apt7q.png


2iub8xx.png


To read through this entire hard drive, it would take 256 ticks (a bit over 4 seconds) to read all of it.
 
Back
Top Bottom