@@ -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