1
//============================================================================
5
// SS tttttt eeee ll ll aaaa
6
// SSSS tt ee ee ll ll aa
7
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
8
// SS SS tt ee ll ll aa aa
9
// SSSS ttt eeeee llll llll aaaaa
11
// Copyright (c) 1995-2005 by Bradford W. Mott and the Stella team
13
// See the file "license" for information on usage and redistribution of
14
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
16
// $Id: TIADebug.cxx,v 1.23 2005/10/13 18:53:07 stephena Exp $
17
//============================================================================
20
#include "Debugger.hxx"
22
#include "TIADebug.hxx"
24
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
25
TIADebug::TIADebug(Debugger* dbg, Console* console)
26
: DebuggerSystem(dbg, console),
27
mySystem(&console->system()),
28
myTIA((TIA*)&console->mediaSource())
30
nusizStrings[0] = "size=8 copy=1";
31
nusizStrings[1] = "size=8 copy=2 spac=8";
32
nusizStrings[2] = "size=8 copy=2 spac=$18";
33
nusizStrings[3] = "size=8 copy=3 spac=8";
34
nusizStrings[4] = "size=8 copy=2 spac=$38";
35
nusizStrings[5] = "size=$10 copy=1";
36
nusizStrings[6] = "size=8 copy=3 spac=$18";
37
nusizStrings[7] = "size=$20 copy=1";
40
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
41
DebuggerState& TIADebug::getState()
44
for(int i = 0; i < 0x010; ++i)
45
myState.ram.push_back(myTIA->peek(i));
48
myState.coluRegs.clear();
49
myState.coluRegs.push_back(coluP0());
50
myState.coluRegs.push_back(coluP1());
51
myState.coluRegs.push_back(coluPF());
52
myState.coluRegs.push_back(coluBK());
54
// Player 1 & 2 graphics registers
56
myState.gr.push_back(grP0());
57
myState.gr.push_back(grP1());
61
myState.pos.push_back(posP0());
62
myState.pos.push_back(posP1());
63
myState.pos.push_back(posM0());
64
myState.pos.push_back(posM1());
65
myState.pos.push_back(posBL());
67
// Horizontal move registers
69
myState.hm.push_back(hmP0());
70
myState.hm.push_back(hmP1());
71
myState.hm.push_back(hmM0());
72
myState.hm.push_back(hmM1());
73
myState.hm.push_back(hmBL());
75
// Playfield registers
77
myState.pf.push_back(pf0());
78
myState.pf.push_back(pf1());
79
myState.pf.push_back(pf2());
83
myState.size.push_back(nusizP0());
84
myState.size.push_back(nusizP1());
85
myState.size.push_back(nusizM0());
86
myState.size.push_back(nusizM1());
87
myState.size.push_back(sizeBL());
91
myState.aud.push_back(audF0());
92
myState.aud.push_back(audF1());
93
myState.aud.push_back(audC0());
94
myState.aud.push_back(audC1());
95
myState.aud.push_back(audV0());
96
myState.aud.push_back(audV1());
101
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
102
void TIADebug::saveOldState()
104
myOldState.ram.clear();
105
for(int i = 0; i < 0x010; ++i)
106
myOldState.ram.push_back(myTIA->peek(i));
109
myOldState.coluRegs.clear();
110
myOldState.coluRegs.push_back(coluP0());
111
myOldState.coluRegs.push_back(coluP1());
112
myOldState.coluRegs.push_back(coluPF());
113
myOldState.coluRegs.push_back(coluBK());
115
// Player 1 & 2 graphics registers
116
myOldState.gr.clear();
117
myOldState.gr.push_back(grP0());
118
myOldState.gr.push_back(grP1());
120
// Position registers
121
myOldState.pos.clear();
122
myOldState.pos.push_back(posP0());
123
myOldState.pos.push_back(posP1());
124
myOldState.pos.push_back(posM0());
125
myOldState.pos.push_back(posM1());
126
myOldState.pos.push_back(posBL());
128
// Horizontal move registers
129
myOldState.hm.clear();
130
myOldState.hm.push_back(hmP0());
131
myOldState.hm.push_back(hmP1());
132
myOldState.hm.push_back(hmM0());
133
myOldState.hm.push_back(hmM1());
134
myOldState.hm.push_back(hmBL());
136
// Playfield registers
137
myOldState.pf.clear();
138
myOldState.pf.push_back(pf0());
139
myOldState.pf.push_back(pf1());
140
myOldState.pf.push_back(pf2());
143
myOldState.size.clear();
144
myOldState.size.push_back(nusizP0());
145
myOldState.size.push_back(nusizP1());
146
myOldState.size.push_back(nusizM0());
147
myOldState.size.push_back(nusizM1());
148
myOldState.size.push_back(sizeBL());
151
myOldState.aud.clear();
152
myOldState.aud.push_back(audF0());
153
myOldState.aud.push_back(audF1());
154
myOldState.aud.push_back(audC0());
155
myOldState.aud.push_back(audC1());
156
myOldState.aud.push_back(audV0());
157
myOldState.aud.push_back(audV1());
160
/* the set methods now use mySystem->poke(). This will save us the
161
trouble of masking the values here, since TIA::poke() will do it
164
This means that the GUI should *never* just display the value the
165
user entered: it should always read the return value of the set
166
method and display that.
170
User enters "ff" in the AUDV0 field. GUI calls value = tiaDebug->audV0(0xff).
171
The AUDV0 register is only 4 bits wide, so "value" is 0x0f. That's what
174
In a perfect world, the GUI would only allow one hex digit to be entered...
175
but we allow decimal or binary input in the GUI (with # or \ prefix). The
176
only way to make that work would be to validate the data entry after every
177
keystroke... which would be a pain for both us and the user. Using poke()
178
here is a compromise that allows the TIA to do the range-checking for us,
179
so the GUI and/or TIADebug don't have to duplicate logic from TIA::poke().
182
// bool vdelP0(int newVal = -1);
183
// bool vdelP1(int newVal = -1);
184
// bool vdelBL(int newVal = -1);
186
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
187
bool TIADebug::vdelP0(int newVal)
190
mySystem->poke(VDELP0, ((bool)newVal));
192
return myTIA->myVDELP0;
195
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
196
bool TIADebug::vdelP1(int newVal)
199
mySystem->poke(VDELP1, ((bool)newVal));
201
return myTIA->myVDELP1;
204
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
205
bool TIADebug::vdelBL(int newVal)
208
mySystem->poke(VDELBL, ((bool)newVal));
210
return myTIA->myVDELBL;
213
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
214
bool TIADebug::enaM0(int newVal)
217
mySystem->poke(ENAM0, ((bool)newVal) << 1);
219
return myTIA->myENAM0;
222
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
223
bool TIADebug::enaM1(int newVal)
226
mySystem->poke(ENAM1, ((bool)newVal) << 1);
228
return myTIA->myENAM1;
231
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
232
bool TIADebug::enaBL(int newVal)
235
mySystem->poke(ENABL, ((bool)newVal) << 1);
237
return myTIA->myENABL;
240
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
241
bool TIADebug::resMP0(int newVal)
244
mySystem->poke(RESMP0, ((bool)newVal) << 1);
246
return myTIA->myRESMP0;
249
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
250
bool TIADebug::resMP1(int newVal)
253
mySystem->poke(RESMP1, ((bool)newVal) << 1);
255
return myTIA->myRESMP1;
258
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
259
bool TIADebug::refP0(int newVal)
262
mySystem->poke(REFP0, ((bool)newVal) << 3);
264
return myTIA->myREFP0;
267
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
268
bool TIADebug::refP1(int newVal)
271
mySystem->poke(REFP1, ((bool)newVal) << 3);
273
return myTIA->myREFP1;
276
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
277
bool TIADebug::refPF(int newVal)
281
int tmp = myTIA->myCTRLPF;
286
mySystem->poke(CTRLPF, tmp);
289
return myTIA->myCTRLPF & 0x01;
292
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
293
bool TIADebug::scorePF(int newVal)
297
int tmp = myTIA->myCTRLPF;
302
mySystem->poke(CTRLPF, tmp);
305
return myTIA->myCTRLPF & 0x02;
308
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
309
bool TIADebug::priorityPF(int newVal)
313
int tmp = myTIA->myCTRLPF;
318
mySystem->poke(CTRLPF, tmp);
321
return myTIA->myCTRLPF & 0x04;
324
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
325
bool TIADebug::collision(int collID, int newVal)
327
unsigned int mask = 1 << collID;
332
myTIA->myCollision |= mask;
334
myTIA->myCollision &= ~mask;
337
return myTIA->myCollision & mask;
340
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
341
uInt8 TIADebug::audC0(int newVal)
344
mySystem->poke(AUDC0, newVal);
346
return myTIA->myAUDC0;
349
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
350
uInt8 TIADebug::audC1(int newVal)
353
mySystem->poke(AUDC1, newVal);
355
return myTIA->myAUDC1;
358
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
359
uInt8 TIADebug::audV0(int newVal)
362
mySystem->poke(AUDV0, newVal);
364
return myTIA->myAUDV0;
367
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
368
uInt8 TIADebug::audV1(int newVal)
371
mySystem->poke(AUDV1, newVal);
373
return myTIA->myAUDV1;
376
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
377
uInt8 TIADebug::audF0(int newVal)
380
mySystem->poke(AUDF0, newVal);
382
return myTIA->myAUDF0;
385
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
386
uInt8 TIADebug::audF1(int newVal)
389
mySystem->poke(AUDF1, newVal);
391
return myTIA->myAUDF1;
394
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
395
uInt8 TIADebug::pf0(int newVal)
398
mySystem->poke(PF0, newVal << 4);
400
return myTIA->myPF & 0x0f;
403
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
404
uInt8 TIADebug::pf1(int newVal)
407
mySystem->poke(PF1, newVal);
409
return (myTIA->myPF & 0xff0) >> 4;
412
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
413
uInt8 TIADebug::pf2(int newVal)
416
mySystem->poke(PF2, newVal);
418
return (myTIA->myPF & 0xff000) >> 12;
421
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
422
uInt8 TIADebug::coluP0(int newVal)
425
mySystem->poke(COLUP0, newVal);
427
return myTIA->myCOLUP0 & 0xff;
430
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
431
uInt8 TIADebug::coluP1(int newVal)
434
mySystem->poke(COLUP1, newVal);
436
return myTIA->myCOLUP1 & 0xff;
439
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
440
uInt8 TIADebug::coluPF(int newVal)
443
mySystem->poke(COLUPF, newVal);
445
return myTIA->myCOLUPF & 0xff;
448
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
449
uInt8 TIADebug::coluBK(int newVal)
452
mySystem->poke(COLUBK, newVal);
454
return myTIA->myCOLUBK & 0xff;
457
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
458
uInt8 TIADebug::nusiz0(int newVal)
461
mySystem->poke(NUSIZ0, newVal);
463
return myTIA->myNUSIZ0;
466
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
467
uInt8 TIADebug::nusiz1(int newVal)
470
mySystem->poke(NUSIZ1, newVal);
472
return myTIA->myNUSIZ1;
475
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
476
uInt8 TIADebug::nusizP0(int newVal)
480
uInt8 tmp = myTIA->myNUSIZ0 & ~0x07;
481
tmp |= (newVal & 0x07);
482
mySystem->poke(NUSIZ0, tmp);
485
return myTIA->myNUSIZ0 & 0x07;
488
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
489
uInt8 TIADebug::nusizP1(int newVal)
493
uInt8 tmp = myTIA->myNUSIZ1 & ~0x07;
494
tmp |= newVal & 0x07;
495
mySystem->poke(NUSIZ1, tmp);
498
return myTIA->myNUSIZ1 & 0x07;
501
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
502
uInt8 TIADebug::nusizM0(int newVal)
506
uInt8 tmp = myTIA->myNUSIZ0 & ~0x30;
507
tmp |= (newVal & 0x04) << 4;
508
mySystem->poke(NUSIZ0, tmp);
511
return (myTIA->myNUSIZ0 & 0x30) >> 4;
514
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
515
uInt8 TIADebug::nusizM1(int newVal)
519
uInt8 tmp = myTIA->myNUSIZ1 & ~0x30;
520
tmp |= (newVal & 0x04) << 4;
521
mySystem->poke(NUSIZ1, tmp);
524
return (myTIA->myNUSIZ1 & 0x30) >> 4;
527
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
528
uInt8 TIADebug::grP0(int newVal)
531
mySystem->poke(GRP0, newVal);
533
return myTIA->myGRP0;
536
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
537
uInt8 TIADebug::grP1(int newVal)
540
mySystem->poke(GRP1, newVal);
542
return myTIA->myGRP1;
545
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
546
uInt8 TIADebug::posP0(int newVal)
549
myTIA->myPOSP0 = newVal;
550
return myTIA->myPOSP0;
553
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
554
uInt8 TIADebug::posP1(int newVal)
557
myTIA->myPOSP1 = newVal;
558
return myTIA->myPOSP1;
561
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
562
uInt8 TIADebug::posM0(int newVal)
566
mySystem->poke(???, newVal);
568
return myTIA->myPOSM0;
571
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
572
uInt8 TIADebug::posM1(int newVal)
576
mySystem->poke(???, newVal);
578
return myTIA->myPOSM1;
581
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
582
uInt8 TIADebug::posBL(int newVal)
586
mySystem->poke(???, newVal);
588
return myTIA->myPOSBL;
591
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
592
uInt8 TIADebug::ctrlPF(int newVal)
595
mySystem->poke(CTRLPF, newVal);
597
return myTIA->myCTRLPF;
600
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
601
uInt8 TIADebug::sizeBL(int newVal)
605
uInt8 tmp = myTIA->myCTRLPF & ~0x30;
606
tmp |= (newVal & 0x04) << 4;
607
mySystem->poke(CTRLPF, tmp);
610
return (myTIA->myCTRLPF & 0x30) >> 4;
613
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
614
uInt8 TIADebug::hmP0(int newVal)
617
mySystem->poke(HMP0, newVal << 4);
619
return myTIA->myHMP0;
622
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
623
uInt8 TIADebug::hmP1(int newVal)
626
mySystem->poke(HMP1, newVal << 4);
628
return myTIA->myHMP1;
631
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
632
uInt8 TIADebug::hmM0(int newVal)
635
mySystem->poke(HMM0, newVal << 4);
637
return myTIA->myHMM0;
640
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
641
uInt8 TIADebug::hmM1(int newVal)
644
mySystem->poke(HMM1, newVal << 4);
646
return myTIA->myHMM1;
649
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
650
uInt8 TIADebug::hmBL(int newVal)
653
mySystem->poke(HMBL, newVal << 4);
655
return myTIA->myHMBL;
658
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
659
int TIADebug::frameCount()
661
return myTIA->myFrameCounter;
664
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
665
int TIADebug::scanlines()
667
return myTIA->scanlines();
670
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
671
int TIADebug::clocksThisLine()
673
return myTIA->clocksThisLine();
676
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
677
bool TIADebug::vsync()
679
return (myTIA->myVSYNC & 2) == 2;
682
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
683
bool TIADebug::vblank()
685
return (myTIA->myVBLANK & 2) == 2;
688
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
689
string TIADebug::colorSwatch(uInt8 c)
693
ret += char((c >> 1) | 0x80);
700
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
701
const string audFreq(uInt8 div)
708
sprintf(buf, "%5.1f", hz);
715
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
716
const string booleanWithLabel(string label, bool value)
724
const char *q = label.c_str();
725
while((*p++ = toupper(*q++)))
735
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
736
string TIADebug::state()
740
// TODO: inverse video for changed regs. Core needs to track this.
741
// TODO: strobes? WSYNC RSYNC RESP0/1 RESM0/1 RESBL HMOVE HMCLR CXCLR
743
TiaState state = (TiaState&) getState();
744
// FIXME - change tracking TiaState oldstate = (TiaState&) getOldState();
746
// build up output, then return it.
749
ret += myDebugger->valueToString(myTIA->scanlines());
752
ret += booleanWithLabel("vsync", vsync());
755
ret += booleanWithLabel("vblank", vblank());
758
ret += booleanWithLabel("inpt0", myTIA->peek(0x08) & 0x80);
760
ret += booleanWithLabel("inpt1", myTIA->peek(0x09) & 0x80);
762
ret += booleanWithLabel("inpt2", myTIA->peek(0x0a) & 0x80);
764
ret += booleanWithLabel("inpt3", myTIA->peek(0x0b) & 0x80);
766
ret += booleanWithLabel("inpt4", myTIA->peek(0x0c) & 0x80);
768
ret += booleanWithLabel("inpt5", myTIA->peek(0x0d) & 0x80);
770
ret += booleanWithLabel("dump_gnd_0123", myTIA->myDumpEnabled);
774
ret += myDebugger->valueToString(state.coluRegs[0]);
776
ret += colorSwatch(state.coluRegs[0]);
779
ret += myDebugger->valueToString(state.coluRegs[1]);
781
ret += colorSwatch(state.coluRegs[1]);
784
ret += myDebugger->valueToString(state.coluRegs[2]);
786
ret += colorSwatch(state.coluRegs[2]);
789
ret += myDebugger->valueToString(state.coluRegs[3]);
791
ret += colorSwatch(state.coluRegs[3]);
796
ret += Debugger::to_bin_8(state.gr[P0]);
798
ret += myDebugger->valueToString(state.gr[P0]);
800
ret += myDebugger->valueToString(state.pos[P0]);
802
ret += myDebugger->valueToString(state.hm[P0]);
804
ret += nusizP0String();
806
ret += booleanWithLabel("reflect", refP0());
808
ret += booleanWithLabel("delay", vdelP0());
812
ret += Debugger::to_bin_8(state.gr[P1]);
814
ret += myDebugger->valueToString(state.gr[P1]);
816
ret += myDebugger->valueToString(state.pos[P1]);
818
ret += myDebugger->valueToString(state.hm[P1]);
820
ret += nusizP1String();
822
ret += booleanWithLabel("reflect", refP1());
824
ret += booleanWithLabel("delay", vdelP1());
828
ret += (myTIA->myENAM0 ? " ENABLED" : "disabled");
830
ret += myDebugger->valueToString(state.pos[M0]);
832
ret += myDebugger->valueToString(state.hm[M0]);
834
ret += myDebugger->valueToString(state.size[M0]);
836
ret += booleanWithLabel("reset", resMP0());
840
ret += (myTIA->myENAM1 ? " ENABLED" : "disabled");
842
ret += myDebugger->valueToString(state.pos[M1]);
844
ret += myDebugger->valueToString(state.hm[M1]);
846
ret += myDebugger->valueToString(state.size[M1]);
848
ret += booleanWithLabel("reset", resMP1());
852
ret += (myTIA->myENABL ? " ENABLED" : "disabled");
854
ret += myDebugger->valueToString(state.pos[BL]);
856
ret += myDebugger->valueToString(state.hm[BL]);
858
ret += myDebugger->valueToString(state.size[BL]);
860
ret += booleanWithLabel("delay", vdelBL());
864
ret += Debugger::to_bin_8(state.pf[0]);
866
ret += myDebugger->valueToString(state.pf[0]);
868
ret += Debugger::to_bin_8(state.pf[1]);
870
ret += myDebugger->valueToString(state.pf[1]);
872
ret += Debugger::to_bin_8(state.pf[2]);
874
ret += myDebugger->valueToString(state.pf[2]);
876
ret += booleanWithLabel("reflect", refPF());
878
ret += booleanWithLabel("score", scorePF());
880
ret += booleanWithLabel("priority", priorityPF());
883
ret += "Collisions: ";
884
ret += booleanWithLabel("m0_p1 ", collM0_P1());
885
ret += booleanWithLabel("m0_p0 ", collM0_P0());
886
ret += booleanWithLabel("m1_p0 ", collM1_P0());
887
ret += booleanWithLabel("m1_p1 ", collM1_P1());
888
ret += booleanWithLabel("p0_pf ", collP0_PF());
889
ret += booleanWithLabel("p0_bl ", collP0_BL());
890
ret += booleanWithLabel("p1_pf ", collP1_PF());
892
ret += booleanWithLabel("p1_bl ", collP1_BL());
893
ret += booleanWithLabel("m0_pf ", collM0_PF());
894
ret += booleanWithLabel("m0_bl ", collM0_BL());
895
ret += booleanWithLabel("m1_pf ", collM1_PF());
896
ret += booleanWithLabel("m1_bl ", collM1_BL());
897
ret += booleanWithLabel("bl_pf ", collBL_PF());
898
ret += booleanWithLabel("p0_p1 ", collP0_P1());
899
ret += booleanWithLabel("m0_m1 ", collM0_M1());
903
ret += myDebugger->valueToString(myTIA->myAUDF0);
905
ret += audFreq(myTIA->myAUDF0);
909
ret += myDebugger->valueToString(myTIA->myAUDC0);
913
ret += myDebugger->valueToString(myTIA->myAUDV0);
917
ret += myDebugger->valueToString(myTIA->myAUDF1);
919
ret += audFreq(myTIA->myAUDF1);
923
ret += myDebugger->valueToString(myTIA->myAUDC1);
927
ret += myDebugger->valueToString(myTIA->myAUDV1);
930
// note: last "ret +=" line should not contain \n, caller will add.