🤑 Indie game store🙌 Free games😂 Fun games😨 Horror games
👷 Game development🎨 Assets📚 Comics
🎉 Sales🎁 Bundles
(+1)

Thanks for very interesting app. I like to build advanced logic circuits but there is not much applications like DLS. The very old application called LogicWorks was good but it wasnt updated since many years. The other one is LogicCircuit but it is not updated also since some time. It would be great if you can add RAM module (like ROM but with W input for write and bidirectional input/output). Another thing - would it be possible to change wires in that way that if you drop end of wire onto another wire it would automaticly create T junction? For me it is a little bit strange that if I click on wire and select T junction it will start from component connection instead of this place on wire where I clicked. Another interesting feature would be visual indicator something like LED with option to select it color. Maybe it would also be possible to make bussed wires a little bit thicker? With this it would be easier to tell when looking on circuit which wires are single and which are bussed. Thanks

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 :)

(+1)

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: https://goo.gl/3pFqYY

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: http://www.logiccircuit.org/memory.html 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 :)

Hi,

I'd like to inform you that several of your suggestions have been implemented and are available in the latest version (0.13.0).

  • Wire thickness based on its bit width
  • SRAM component (synchronous, flow-through, standard write)
  • Colored LEDs
and a couple of other things. If you happen to find some time to test it out, I'll be glad to hear your feedback.

Thank you very much. I will install new version and look into new features.

Sorry for delay in response, I have a lot of work. The changes are very good and useful. As far as I see they are working fine without any problems. I have some new sugestions for UI - first: could you implement more advanced save/load dialog which would allow to select directory to/from save/load?; second: component toolbar on the left. Could it be full vertical but thin? As it is now it take more place - even if components are below or above it covers more space than vertical toolbar, also on vertical toolbar there could be labels and components could be sorted by those labels for eg. logic gates, memory devices, inputs, etc. This would make component toolbar more visible clear. And third thing: maybe text component which would allow to place text note in any place in circuit. It would be useful to place descriptions of some parts/functions. I'm working on my CPU, I'm doing it in LogicWorks but soon I will start to rebuild it in DLS. LogicWorks unfortunatly refuse to cooperate with my CPU. I think that circuit is to big...

Thanks for the suggestions.

> first: could you implement more advanced save/load dialog which would allow to select directory to/from save/load?

Unfortunately, that's harder than it sounds. Implementing a proper save/load dialog using custom UI requires correct handling of Unicode paths and filenames, which in turn requires major changes to the application. This is one of those things I decided early in development and are a bit hard to change at the moment. Don't forget that even if the simulator is capable enough to handle complex circuits, my initial thought was to make some kind of game out of it. So, arbitrary save/load paths didn't fit in such scenario.

Having said that, what I have in my TODO list is the ability to add slashes as separators when saving a schematic, in order to be able to group your circuits into subfolders inside the existing schematics folder. Still needs some work to be implemented properly, but it's a lot less than what's required for what you suggest (i.e. since DLS doesn't allow non-ASCII chars in its input boxes, there's no need to handle Unicode paths).

> second: component toolbar on the left

That sounds nice. And it might be more accessible in case I add more build-in components in the future. I'll think about it.

> And third thing: maybe text component which would allow to place text note in any place in circuit.

I had that in my list, but I cannot find it anymore :) Probably removed it as not-needed. As far as I remember, what I had in mind was something like PDF comment annotations. Small symbols on the schematic grid, which you click to show/edit a comment. Is this what you have in mind? Or you want the text to be visible at all times? Maybe a "pin note" button will allow both ways to be implemented. I'll also think about it.

> LogicWorks unfortunatly refuse to cooperate with my CPU.

I haven't used LogicWorks so I'm not familiar with its capabilities. Looking at its website, it looks way more professional than DLS :)

Do you mean that it cannot simulate your schematic fast enough? Do you have any numbers which you can compare with DLS once you manage to rebuild your circuit in it? E.g. how fast is the simulation in LogicWorks (i.e. circuit nsec per wall-clock sec), like in DLS? Is there such a metric in LogicWorks?

I don't know what kind of circuits you've managed to build with DLS so far, so I'd suggest to not expect much from it performance-wise. The largest circuit I've managed to build was a cycle-accurate i8080 CPU but the simulation performance isn't great (~750usec/sec on my i3-2100).

I had that in my list, but I cannot find it anymore :) Probably removed it as not-needed. As far as I remember, what I had in mind was something like PDF comment annotations. Small symbols on the schematic grid, which you click to show/edit a comment. Is this what you have in mind? Or you want the text to be visible at all times? Maybe a "pin note" button will allow both ways to be implemented. I'll also think about it.

The double function would be good - option to pin note to always show it content or to keep only icon. Some important notes could be pinned and others which are additional could be hidden.

> LogicWorks unfortunatly refuse to cooperate with my CPU.

I haven't used LogicWorks so I'm not familiar with its capabilities. Looking at its website, it looks way more professional than DLS :)

It is not so professional as it looks, it is not updated since long time. It is interesting that it was/is very popular in students courses, almost all universities are using it

Do you mean that it cannot simulate your schematic fast enough? Do you have any numbers which you can compare with DLS once you manage to rebuild your circuit in it? E.g. how fast is the simulation in LogicWorks (i.e. circuit nsec per wall-clock sec), like in DLS? Is there such a metric in LogicWorks?

Well, it is not speed problem at this point. It is extreme laggy and it wont work at all with around half of my CPU. I think that it would be possible to somehow compare speeds. Maybe two identical circuits, CPUs, my first LogicWorks CPU (8-bit) was computing Fibonacci series.

I don't know what kind of circuits you've managed to build with DLS so far, so I'd suggest to not expect much from it performance-wise. The largest circuit I've managed to build was a cycle-accurate i8080 CPU but the simulation performance isn't great (~750usec/sec on my i3-2100).

I must check it on my i7-4790k, currently I'm using it on notebook with i5, but I have access to dual Xeon workstation, it would be funny to check performance on it ;)

PS: new idea - pull-up resistors. Sometimes when you use tri-state buffers you want 0 instead of "Z" (not connected state) https://en.wikipedia.org/wiki/Pull-up_resistor.

> I must check it on my i7-4790k, currently I'm using it on notebook with i5, but I have access to dual Xeon workstation, it would be funny to check performance on it ;)

Unfortunately, the dual Xeons won't make a difference in performance. Currently simulation is single threaded and only 8ms of frame time is devoted to it. Until I manage to move the simulation to a separate thread and it ends up being faster than the single threaded version, 8ms should be enough for smooth interaction with the schematic.

> PS: new idea - pull-up resistors. Sometimes when you use tri-state buffers you want 0 instead of "Z" (not connected state)

Aren't pull-up resistors considered analog devices (i.e. they require a Vcc or Gnd pin to work)? If yes, they don't fit into the current simulator.

Can you describe a situation where a tri-state buffer with a 0 instead of Z output would be required? The only reason there are tri-state buffers in DLS is to be able to support buses (which are effectively wire-OR structures). Is there another usage for them? Isn't it possible to use AND/OR gates in places where you need a tri-state buffer with 0 disconnected state?