Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics

Thanks for your kind words and the great suggestions :)

(S)RAM component: I've been thinking about it. The only reason I haven't implemented it yet is because you can always use a scripted component to implement something similar. The problem is that there are many types of SRAMs out there (sync/async, fall-through, pipelined, burst reads/writes, etc.) and I have to study them a bit more to figure out the proper way to implement such a component. And the only reason to actually implement it is ease of use (just drop a RAM in the circuit) and the ability to inspect its contents like ROMs. Other than that, I cannot see any other benefit over scripts. I can create a simple SRAM script for you to use if you want, until I figure everything out.

Wires and T-junctions: Unfortunately, I didn't understand your suggestion. You always start a new wire from an output pin. If you drop it on an existing wire, what I would expect to happen is to connect the output pin to the input the old wire is currently connected to. No T-junction can be created in this case (each input pin has only 1 source). What you suggest might have made sense if you could start a new wire from an input pin, but that's not the case currently. Am I missing something?

Regarding how the T-junction option of the context menu works. It creates an new wire from the old wire's output pin up to the nearest node/corner. The last line segment of the new wire is from the nearest node to the mouse cursor. I could kind of fix that by rounding the right click mouse location to the nearest grid location and add an extra node there, but it won't look good with wires crossing the grid at angles other than 45/90/135/180/etc. angles. Hope it makes sense :)

LEDs: There is a LED matrix component in the toolbar. You can create a 1x1 matrix and connect an 1-bit wire to it. Please correct me if I didn't understand your suggestion. Regarding changing the color of a LED matrix, I'll add it to my TODO list.

Wire thickness: Sounds good. Will try it and see if it'll look good too :) Will report back for feedback.

Thanks again for trying out DLS. If you have anything else to share I'll be glad to hear it :)


In case of "LED", yes, I saw that it is possible to create 1x1 LED Matrix and this is ok (anyway maybe it would be good to have directly something like single LED component) it is useful as visual indicator. But my main idea is to have option to select color - when you building big circuits you can use different colors to indicate some states of circuit. For example flags from ALU. I know also that there is output component which shows the value but visual indicator is sometimes also very useful.

As for T-junction I understand that it is some specific property because you always start from output to imput. For example creating junction is very anoying in LogicCircuit because if you want to create T-junction you need to click on wire with some keyboard button and then it splits the wire and you can connect other wire to this split point. The way which I like it is implemented in many tools like Altium Designer and LogicWorks - you can start by connecting components by any direction (you can start from output to imput but it doesnt create problems because still output is output and imput is imput, this is more editing behavior, I think). Or for example if you create mux with tri-state buffers you need to connect in some point two inputs to one output, ofcourse this works in DLS, it is just editing thing, in this other apps I could create wire from buffer to output and when I want to connect second buffer to output (with NOTed control input) I just start wire from buffer output and when I drop end of new wire to existing one it will create junction in this place.

It is described here on page 19:

And also on this image (the red dots are T-junctions):

As for RAM I think that it could be just simple device, I know that there are many types of memory but as always there should be some simplifications. Maybe something like this in LogicCircuit: in this example there is separate port for data in and data out but in LogicWorks you can select if there should be input and output or bidirectional port.

If I will have other ideas I will write them here. Anyway your application is great and I thing that it is now the best logic simulator, also it is the only one with this "game" option which have great education purpose. If you will add option to add other languages I can help by translating DLS to Polish language (as I translated LogicCircuit). Greetings

PS: I created 8-bit CPU for my final thesis on my IT studies. Belowe there is partial schematic but it evolved much since this version (for example I added interrupts controller) but I was searching for app like DLS to create this new version so I think that I will soon to start building it in DLS, it would be 16-bit (I was thinking about 32-bit but I know that DLS is 16-bit max). I'm working also on FPU but I must redraw all of this in DLS because I was using LogicWorks before but it was too old and glitchy.

LED colors: Do you want to have both states (on/off) configurable (e.g. on = green, off = red) or just one color with different brightness will be enough (e.g. like it's implement now, on = light green, off = dark green)?

T-Junctions: Yes it's only an editing thing. To be honest, a couple of other users suggested that you should be able to start a wire from an input pin. It's already in my TODO list but I've categorized it as not important so it's a bit low on priority :) Hope it's not much of a hassle until it's "fixed".

RAM: As far as I can tell, the RAM described in the page you linked is async. One Write input which works as a clock signal (whenever a rising/falling edge is detected, data is written to the RAM). Problem with implementing just this version is that if you want to implement anything more sophisticated on top of it (e.g. synchronous pipelined SRAM with burst reads/writes), you'd have to build a component and you'll loose the ability to inspect the RAM's contents (once a RAM is inside a component you don't have access to it from the master schematic). That's why I'm thinking whether it'll be good to implement extra (configurable) features for it or not.

16-bit limit: Unfortunately, the way the simulator is implemented (how signals are stored and moved around and how special values such as Undefined and Error have been implemented) doesn't allow for a larger signal width at the moment. It bugs me too and it's on my list of thins to "fix", but since it's still early in development and it's supposed to be a game at some point, 16-bits should be enough for now.

Would love to see what you manage to build with DLS :)

In case of LED color I was thinking about something else - like it is implemented but with option to set LED color (green, red, blue, etc.). So before you place LED component you can select it color and then in circuit for e.g. it is dark red or green or whatever color you can pick and when on light red, green, etc. Something like standard LED.

There is a little bug - when you place buttons in a column label from other button is overlay button and it is hard to click on a button because it will open edit label dialog, maybe label should be on the left side of button?

OK about the LEDs.

Regarding the push buttons (and any other I/O port in general). This isn't actually a bug. It's by design. In order to avoid something like that, please arrange the buttons in reverse order. All ports are rendered in the same order they are created.So by reversing their order, you can hide their label behind the newer port.

Putting the label on the left side of the button will not look good in case the button has a large name. Sorry about that :)