Skip to content

Commit 7cbe789

Browse files
author
Parshwa
committed
RGBLED working + added 16 Bit Bus, and 16 Bit IN?OUT the 16 Bit merges and Splits arent working yet
1 parent 4b4646e commit 7cbe789

18 files changed

Lines changed: 487 additions & 11 deletions

File tree

.vscode/extensions.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"recommendations": [
3+
"visualstudiotoolsforunity.vstuc"
4+
]
5+
}

.vscode/launch.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"version": "0.2.0",
3+
"configurations": [
4+
{
5+
"name": "Attach to Unity",
6+
"type": "vstuc",
7+
"request": "attach"
8+
}
9+
]
10+
}

.vscode/settings.json

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
{
2+
"files.exclude": {
3+
"**/.DS_Store": true,
4+
"**/.git": true,
5+
"**/.vs": true,
6+
"**/.gitmodules": true,
7+
"**/.vsconfig": true,
8+
"**/*.booproj": true,
9+
"**/*.pidb": true,
10+
"**/*.suo": true,
11+
"**/*.user": true,
12+
"**/*.userprefs": true,
13+
"**/*.unityproj": true,
14+
"**/*.dll": true,
15+
"**/*.exe": true,
16+
"**/*.pdf": true,
17+
"**/*.mid": true,
18+
"**/*.midi": true,
19+
"**/*.wav": true,
20+
"**/*.gif": true,
21+
"**/*.ico": true,
22+
"**/*.jpg": true,
23+
"**/*.jpeg": true,
24+
"**/*.png": true,
25+
"**/*.psd": true,
26+
"**/*.tga": true,
27+
"**/*.tif": true,
28+
"**/*.tiff": true,
29+
"**/*.3ds": true,
30+
"**/*.3DS": true,
31+
"**/*.fbx": true,
32+
"**/*.FBX": true,
33+
"**/*.lxo": true,
34+
"**/*.LXO": true,
35+
"**/*.ma": true,
36+
"**/*.MA": true,
37+
"**/*.obj": true,
38+
"**/*.OBJ": true,
39+
"**/*.asset": true,
40+
"**/*.cubemap": true,
41+
"**/*.flare": true,
42+
"**/*.mat": true,
43+
"**/*.meta": true,
44+
"**/*.prefab": true,
45+
"**/*.unity": true,
46+
"build/": true,
47+
"Build/": true,
48+
"Library/": true,
49+
"library/": true,
50+
"obj/": true,
51+
"Obj/": true,
52+
"Logs/": true,
53+
"logs/": true,
54+
"ProjectSettings/": true,
55+
"UserSettings/": true,
56+
"temp/": true,
57+
"Temp/": true
58+
},
59+
"files.associations": {
60+
"*.asset": "yaml",
61+
"*.meta": "yaml",
62+
"*.prefab": "yaml",
63+
"*.unity": "yaml",
64+
},
65+
"explorer.fileNesting.enabled": true,
66+
"explorer.fileNesting.patterns": {
67+
"*.sln": "*.csproj",
68+
},
69+
"dotnet.defaultSolution": "Digital-Logic-Sim.sln"
70+
}

Assets/Scripts/Description/Helpers/ChipTypeHelper.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,22 @@ public static class ChipTypeHelper
2121
{ ChipType.Split_4To1Bit, "4-1BIT" },
2222
{ ChipType.Split_8To1Bit, "8-1BIT" },
2323
{ ChipType.Split_8To4Bit, "8-4BIT" },
24+
{ ChipType.Split_16To1Bit, "16-1BIT" },
25+
{ ChipType.Split_16To4Bit, "16-4BIT" },
26+
{ ChipType.Split_16To8Bit, "16-8BIT" },
2427
{ ChipType.Merge_4To8Bit, "4-8BIT" },
2528
{ ChipType.Merge_1To8Bit, "1-8BIT" },
2629
{ ChipType.Merge_1To4Bit, "1-4BIT" },
30+
{ ChipType.Merge_1To16Bit, "1-16BIT" },
31+
{ ChipType.Merge_4To16Bit, "4-16BIT" },
32+
{ ChipType.Merge_8To16Bit, "8-16BIT" },
2733

2834
// ---- Displays -----
2935
{ ChipType.DisplayRGB, "RGB DISPLAY" },
3036
{ ChipType.DisplayDot, "DOT DISPLAY" },
3137
{ ChipType.SevenSegmentDisplay, "7-SEGMENT" },
3238
{ ChipType.DisplayLED, "LED" },
39+
{ ChipType.DisplayRGBLED, "RGBLED" },
3340

3441
// ---- Not really chips (but convenient to treat them as such anyway) ----
3542

@@ -58,9 +65,9 @@ public static class ChipTypeHelper
5865

5966
public static bool IsBusType(ChipType type) => IsBusOriginType(type) || IsBusTerminusType(type);
6067

61-
public static bool IsBusOriginType(ChipType type) => type is ChipType.Bus_1Bit or ChipType.Bus_4Bit or ChipType.Bus_8Bit;
68+
public static bool IsBusOriginType(ChipType type) => type is ChipType.Bus_1Bit or ChipType.Bus_4Bit or ChipType.Bus_8Bit or ChipType.Bus_16Bit;
6269

63-
public static bool IsBusTerminusType(ChipType type) => type is ChipType.BusTerminus_1Bit or ChipType.BusTerminus_4Bit or ChipType.BusTerminus_8Bit;
70+
public static bool IsBusTerminusType(ChipType type) => type is ChipType.BusTerminus_1Bit or ChipType.BusTerminus_4Bit or ChipType.BusTerminus_8Bit or ChipType.BusTerminus_16Bit;
6471

6572
public static bool IsRomType(ChipType type) => type == ChipType.Rom_256x16;
6673

Assets/Scripts/Description/Types/SubTypes/ChipTypes.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,27 @@ public enum ChipType
1515
Rom_256x16,
1616

1717
// ---- Displays ----
18+
//TODO: Make all displays use 0 to 255 for RGB, and make sure you duplicate them first so only if needed overide them, also make the RGBLED
1819
SevenSegmentDisplay,
1920
DisplayRGB,
2021
DisplayDot,
2122
DisplayLED,
23+
DisplayRGBLED,
2224

2325
// ---- Merge / Split ----
26+
//TODO: Make the 16 MERGES AND SPLITS atcually work
2427
Merge_1To4Bit,
2528
Merge_1To8Bit,
2629
Merge_4To8Bit,
30+
Merge_1To16Bit,
31+
Merge_4To16Bit,
32+
Merge_8To16Bit,
2733
Split_4To1Bit,
2834
Split_8To4Bit,
2935
Split_8To1Bit,
36+
Split_16To1Bit,
37+
Split_16To4Bit,
38+
Split_16To8Bit,
3039

3140
// ---- In / Out Pins ----
3241
In_1Bit,

Assets/Scripts/Game/Elements/DevPinInstance.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public DevPinInstance(PinDescription pinDescription, bool isInput)
4242
PinBitCount.Bit1 => new Vector2Int(1, 1),
4343
PinBitCount.Bit4 => new Vector2Int(2, 2),
4444
PinBitCount.Bit8 => new Vector2Int(4, 2),
45+
PinBitCount.Bit16 => new Vector2Int(4, 4),
4546
_ => throw new Exception("Bit count not implemented")
4647
};
4748
StateGridSize = BitCount switch

Assets/Scripts/Game/Elements/SubChipInstance.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ public static float PinHeightFromBitCount(PinBitCount bitCount)
304304
PinBitCount.Bit1 => DrawSettings.PinRadius * 2,
305305
PinBitCount.Bit4 => DrawSettings.PinHeight4Bit,
306306
PinBitCount.Bit8 => DrawSettings.PinHeight8Bit,
307-
PinBitCount.Bit8 => DrawSettings.PinHeight16Bit,
307+
PinBitCount.Bit16 => DrawSettings.PinHeight16Bit,
308308
_ => throw new Exception("Bit count not implemented " + bitCount)
309309
};
310310
}

Assets/Scripts/Game/Project/BuiltinChipCreator.cs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,23 @@ public static ChipDescription[] CreateAllBuiltinChipDescriptions()
3636
CreateBitConversionChip(ChipType.Split_4To1Bit, PinBitCount.Bit4, PinBitCount.Bit1, 1, 4),
3737
CreateBitConversionChip(ChipType.Split_8To4Bit, PinBitCount.Bit8, PinBitCount.Bit4, 1, 2),
3838
CreateBitConversionChip(ChipType.Split_8To1Bit, PinBitCount.Bit8, PinBitCount.Bit1, 1, 8),
39+
CreateBitConversionChip(ChipType.Split_16To1Bit, PinBitCount.Bit16, PinBitCount.Bit1, 1, 8),
40+
CreateBitConversionChip(ChipType.Split_16To4Bit, PinBitCount.Bit16, PinBitCount.Bit4, 1, 4),
41+
CreateBitConversionChip(ChipType.Split_16To8Bit, PinBitCount.Bit16, PinBitCount.Bit8, 1, 2),
3942

4043
CreateBitConversionChip(ChipType.Merge_1To8Bit, PinBitCount.Bit1, PinBitCount.Bit8, 8, 1),
4144
CreateBitConversionChip(ChipType.Merge_1To4Bit, PinBitCount.Bit1, PinBitCount.Bit4, 4, 1),
4245
CreateBitConversionChip(ChipType.Merge_4To8Bit, PinBitCount.Bit4, PinBitCount.Bit8, 2, 1),
46+
CreateBitConversionChip(ChipType.Merge_1To16Bit, PinBitCount.Bit1, PinBitCount.Bit16, 16, 1),
47+
CreateBitConversionChip(ChipType.Merge_4To16Bit, PinBitCount.Bit4, PinBitCount.Bit16, 4, 1),
48+
CreateBitConversionChip(ChipType.Merge_8To16Bit, PinBitCount.Bit8, PinBitCount.Bit16, 2, 1),
49+
4350
// ---- Displays ----
4451
CreateDisplay7Seg(),
4552
CreateDisplayRGB(),
4653
CreateDisplayDot(),
4754
CreateDisplayLED(),
55+
CreateDisplayRGBLED(),
4856
// ---- Bus ----
4957
CreateBus(PinBitCount.Bit1),
5058
CreateBusTerminus(PinBitCount.Bit1),
@@ -330,7 +338,36 @@ static ChipDescription CreateBus(PinBitCount bitCount)
330338

331339
return CreateBuiltinChipDescription(type, BusChipSize(bitCount), col, inputs, outputs, hideName: true);
332340
}
341+
static ChipDescription CreateDisplayRGBLED()
342+
{
343+
PinDescription[] inputPins =
344+
{
345+
CreatePinDescription("IN", 0),
346+
CreatePinDescription("RED", 1, PinBitCount.Bit8),
347+
CreatePinDescription("GREEN", 2, PinBitCount.Bit8),
348+
CreatePinDescription("BLUE", 3, PinBitCount.Bit8),
349+
};
350+
351+
float height = SubChipInstance.MinChipHeightForPins(inputPins, null);
352+
float width = height;
353+
float displayWidth = height - GridSize * 0.5f;
354+
355+
Color col = new(0.1f, 0.1f, 0.1f);
356+
Vector2 size = new(width, height);
333357

358+
359+
DisplayDescription[] displays =
360+
{
361+
new()
362+
{
363+
Position = Vector2.right * PinRadius / 3 * 0,
364+
Scale = displayWidth,
365+
SubChipID = -1
366+
}
367+
};
368+
369+
return CreateBuiltinChipDescription(ChipType.DisplayRGBLED, size, col, inputPins, null, displays, true);
370+
}
334371
static ChipDescription CreateDisplayLED()
335372
{
336373
PinDescription[] inputPins =

Assets/Scripts/Game/Project/BuiltinCollectionCreator.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,15 @@ public static ChipCollection[] CreateDefaultChipCollections()
3939
ChipType.Merge_1To4Bit,
4040
ChipType.Merge_1To8Bit,
4141
ChipType.Merge_4To8Bit,
42+
ChipType.Merge_1To16Bit,
43+
ChipType.Merge_4To16Bit,
44+
ChipType.Merge_8To16Bit,
4245
ChipType.Split_4To1Bit,
4346
ChipType.Split_8To4Bit,
44-
ChipType.Split_8To1Bit
47+
ChipType.Split_8To1Bit,
48+
ChipType.Split_16To1Bit,
49+
ChipType.Split_16To4Bit,
50+
ChipType.Split_16To8Bit
4551
),
4652
CreateChipCollection("BUS",
4753
ChipType.Bus_1Bit,
@@ -53,7 +59,8 @@ public static ChipCollection[] CreateDefaultChipCollections()
5359
ChipType.SevenSegmentDisplay,
5460
ChipType.DisplayDot,
5561
ChipType.DisplayRGB,
56-
ChipType.DisplayLED
62+
ChipType.DisplayLED,
63+
ChipType.DisplayRGBLED
5764
),
5865
CreateChipCollection("MEMORY",
5966
ChipType.Rom_256x16

Assets/Scripts/Graphics/World/DevSceneDrawer.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,13 @@ public static Bounds2D DrawDisplay(DisplayInstance display, Vector2 posParent, f
437437
bounds = DrawDisplay_DisplayLED(posWorld, scaleWorld, isOn);
438438
}
439439

440+
else if (display.DisplayType == ChipType.DisplayRGBLED)
441+
{
442+
bool simActive = sim != null;
443+
bool isOn = simActive && sim.InputPins[0].FirstBitHigh;
444+
bounds = DrawDisplay_DisplayRGBLED(posWorld, scaleWorld, isOn, sim);
445+
}
446+
440447
display.LastDrawBounds = bounds;
441448
return bounds;
442449
}
@@ -566,6 +573,32 @@ public static Bounds2D DrawDisplay_SevenSegment(Vector2 centre, float scale, int
566573

567574
return Bounds2D.CreateFromCentreAndSize(centre, boundsSize);
568575
}
576+
public static Bounds2D DrawDisplay_DisplayRGBLED(Vector2 centre, float scale, bool isOn, SimChip sim)
577+
{
578+
const float pixelSizeT = 0.975f;
579+
float pixelSize = scale;
580+
581+
// Draw background
582+
Draw.Quad(centre, Vector2.one * scale, Color.black);
583+
Vector2 pixelDrawSize = Vector2.one * (pixelSize * pixelSizeT);
584+
Color onColor = ActiveTheme.DisplayLEDCols[1]; // default fallback
585+
if (sim == null)
586+
{
587+
onColor = Color.white;
588+
}
589+
else
590+
{
591+
onColor = new Color(
592+
Unpack8BitColChannel(sim.InternalState[0]),
593+
Unpack8BitColChannel(sim.InternalState[1]),
594+
Unpack8BitColChannel(sim.InternalState[2]),
595+
1
596+
);
597+
}
598+
Color col = isOn ? onColor : ActiveTheme.DisplayLEDCols[0];
599+
Draw.Quad(centre, pixelDrawSize, col);
600+
return Bounds2D.CreateFromCentreAndSize(centre, Vector2.one * scale);
601+
}
569602

570603
public static Bounds2D DrawDisplay_DisplayLED(Vector2 centre, float scale, bool isOn)
571604
{
@@ -581,6 +614,11 @@ public static Bounds2D DrawDisplay_DisplayLED(Vector2 centre, float scale, bool
581614
return Bounds2D.CreateFromCentreAndSize(centre, Vector2.one * scale);
582615
}
583616

617+
static float Unpack8BitColChannel(uint raw)
618+
{
619+
return (raw & 0b11111111) / 255f;
620+
}
621+
584622
public static void DrawDevPin(DevPinInstance devPin)
585623
{
586624
if (devPin.BitCount == PinBitCount.Bit1)

0 commit comments

Comments
 (0)