Skip to content

Commit bf31f8d

Browse files
committed
segdip: Add support for 7-segmented displays.
1 parent 62c14c2 commit bf31f8d

File tree

1 file changed

+24
-23
lines changed

1 file changed

+24
-23
lines changed

VisualPinball.Engine.PinMAME.Unity/Runtime/PinMameGamelogicEngine.cs

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,6 @@ private void Start()
9494

9595
public void OnInit(Player player, TableApi tableApi, BallManager ballManager)
9696
{
97-
_frameBuffer.Clear();
98-
9997
// turn off all lamps
10098
foreach (var lamp in _lamps.Values) {
10199
OnLampChanged?.Invoke(this, new LampEventArgs(lamp.Id, 0));
@@ -109,8 +107,8 @@ public void OnInit(Player player, TableApi tableApi, BallManager ballManager)
109107
_player = player;
110108

111109
try {
112-
_pinMame.StartGame("fh_906h");
113-
//_pinMame.StartGame(romId);
110+
//_pinMame.StartGame("fh_906h");
111+
_pinMame.StartGame(romId);
114112

115113
} catch (Exception e) {
116114
Logger.Error(e);
@@ -150,8 +148,9 @@ private void Update()
150148

151149
private void DisplayUpdated(object sender, EventArgs e, int index, IntPtr framePtr, PinMameDisplayLayout displayLayout)
152150
{
153-
if ((displayLayout.type & PinMameDisplayType.DMD) > 0) {
151+
if (displayLayout.IsDmd) {
154152
UpdateDmd(index, displayLayout, framePtr);
153+
155154
} else {
156155
UpdateSegDisp(index, displayLayout, framePtr);
157156
}
@@ -198,6 +197,7 @@ private void UpdateSegDisp(int index, PinMameDisplayLayout displayLayout, IntPtr
198197

199198
_displayAnnounced.Add(index);
200199
_frameBuffer[index] = new byte[displayLayout.length * 2];
200+
Logger.Info($"[PinMAME] Display {DisplayPrefix}{index} is of type {displayLayout.type} at {displayLayout.length} wide.");
201201
}
202202

203203
Marshal.Copy(framePtr, _frameBuffer[index], 0, displayLayout.length * 2);
@@ -268,6 +268,11 @@ private void UpdateCaches()
268268
}
269269

270270
private void OnDestroy()
271+
{
272+
StopGame();
273+
}
274+
275+
public void StopGame()
271276
{
272277
if (_pinMame != null) {
273278
_pinMame.StopGame();
@@ -276,6 +281,8 @@ private void OnDestroy()
276281
_pinMame.OnDisplayUpdated -= DisplayUpdated;
277282
_pinMame.OnSolenoidUpdated -= SolenoidUpdated;
278283
}
284+
_frameBuffer.Clear();
285+
_displayAnnounced.Clear();
279286
}
280287

281288
public void Switch(string id, bool isClosed)
@@ -303,36 +310,31 @@ private Dictionary<byte, byte> GetMap(PinMameDisplayLayout displayLayout)
303310
private static DisplayFrameFormat GetDisplayType(PinMameDisplayType dp)
304311
{
305312
switch (dp) {
306-
case PinMameDisplayType.SEG16: // 16 segments
313+
case PinMameDisplayType.SEG16: // 16 segments
307314
case PinMameDisplayType.SEG16R: // 16 segments with comma and period reversed
308315
case PinMameDisplayType.SEG16N: // 16 segments without commas
309316
case PinMameDisplayType.SEG16D: // 16 segments with periods only
317+
case PinMameDisplayType.SEG16S: // 16 segments with split top and bottom line
310318
return DisplayFrameFormat.Segment16;
311319

320+
case PinMameDisplayType.SEG8: // 7 segments and comma
321+
case PinMameDisplayType.SEG8D: // 7 segments and period
322+
case PinMameDisplayType.SEG7: // 7 segments
323+
case PinMameDisplayType.SEG87: // 7 segments, comma every three
324+
case PinMameDisplayType.SEG87F: // 7 segments, forced comma every three
325+
case PinMameDisplayType.SEG7S: // 7 segments, small
326+
case PinMameDisplayType.SEG7SC: // 7 segments, small, with comma
327+
return DisplayFrameFormat.Segment7;
328+
312329
case PinMameDisplayType.SEG10: // 9 segments and comma
313330
break;
314331
case PinMameDisplayType.SEG9: // 9 segments
315332
break;
316-
case PinMameDisplayType.SEG8: // 7 segments and comma
317-
break;
318-
case PinMameDisplayType.SEG8D: // 7 segments and period
319-
break;
320-
case PinMameDisplayType.SEG7: // 7 segments
321-
break;
322-
case PinMameDisplayType.SEG87: // 7 segments, comma every three
323-
break;
324-
case PinMameDisplayType.SEG87F: // 7 segments, forced comma every three
325-
break;
326333
case PinMameDisplayType.SEG98: // 9 segments, comma every three
327334
break;
328335
case PinMameDisplayType.SEG98F: // 9 segments, forced comma every three
329336
break;
330-
case PinMameDisplayType.SEG7S: // 7 segments, small
331-
break;
332-
case PinMameDisplayType.SEG7SC: // 7 segments, small, with comma
333-
break;
334-
case PinMameDisplayType.SEG16S: // 16 segments with split top and bottom line
335-
break;
337+
336338
case PinMameDisplayType.DMD:
337339
return DisplayFrameFormat.Dmd2;
338340

@@ -366,6 +368,5 @@ private static DisplayFrameFormat GetDisplayType(PinMameDisplayType dp)
366368
{ 0x41, 0x8 }, { 0x46, 0x9 }, { 0x4B, 0xa }, { 0x50, 0xb },
367369
{ 0x55, 0xc }, { 0x5A, 0xd }, { 0x5F, 0xe }, { 0x64, 0xf }
368370
};
369-
370371
}
371372
}

0 commit comments

Comments
 (0)