| 1 | //============================================================================ | 
|---|
| 2 | // | 
|---|
| 3 | //   SSSS    tt          lll  lll | 
|---|
| 4 | //  SS  SS   tt           ll   ll | 
|---|
| 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 | 
|---|
| 10 | // | 
|---|
| 11 | // Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony | 
|---|
| 12 | // and the Stella Team | 
|---|
| 13 | // | 
|---|
| 14 | // See the file "License.txt" for information on usage and redistribution of | 
|---|
| 15 | // this file, and for a DISCLAIMER OF ALL WARRANTIES. | 
|---|
| 16 | //============================================================================ | 
|---|
| 17 |  | 
|---|
| 18 | #include "ColorWidget.hxx" | 
|---|
| 19 | #include "DataGridWidget.hxx" | 
|---|
| 20 | #include "EditTextWidget.hxx" | 
|---|
| 21 | #include "FrameBuffer.hxx" | 
|---|
| 22 | #include "Font.hxx" | 
|---|
| 23 | #include "GuiObject.hxx" | 
|---|
| 24 | #include "OSystem.hxx" | 
|---|
| 25 | #include "Debugger.hxx" | 
|---|
| 26 | #include "CartDebug.hxx" | 
|---|
| 27 | #include "TIA.hxx" | 
|---|
| 28 | #include "TIADebug.hxx" | 
|---|
| 29 | #include "ToggleBitWidget.hxx" | 
|---|
| 30 | #include "TogglePixelWidget.hxx" | 
|---|
| 31 | #include "Widget.hxx" | 
|---|
| 32 | #include "DelayQueueWidget.hxx" | 
|---|
| 33 | #include "TiaWidget.hxx" | 
|---|
| 34 |  | 
|---|
| 35 | // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
|---|
| 36 | TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, | 
|---|
| 37 | const GUI::Font& nfont, | 
|---|
| 38 | int x, int y, int w, int h) | 
|---|
| 39 | : Widget(boss, lfont, x, y, w, h), | 
|---|
| 40 | CommandSender(boss) | 
|---|
| 41 | { | 
|---|
| 42 | const int fontWidth  = lfont.getMaxCharWidth(), | 
|---|
| 43 | fontHeight = lfont.getFontHeight(), | 
|---|
| 44 | lineHeight = lfont.getLineHeight(), | 
|---|
| 45 | buttonW = 7 * fontWidth; | 
|---|
| 46 | int xpos = 10, ypos = 10 + lineHeight, buttonX = 0, buttonY = 0; | 
|---|
| 47 | StaticTextWidget* t = nullptr; | 
|---|
| 48 | ButtonWidget* b = nullptr; | 
|---|
| 49 |  | 
|---|
| 50 | // Color registers | 
|---|
| 51 | const char* const regNames[] = { "COLUP0", "COLUP1", "COLUPF", "COLUBK"}; | 
|---|
| 52 | for(int row = 0; row < 4; ++row) | 
|---|
| 53 | { | 
|---|
| 54 | new StaticTextWidget(boss, lfont, xpos, ypos + row*lineHeight + 2, | 
|---|
| 55 | 6*fontWidth, fontHeight, regNames[row], TextAlign::Left); | 
|---|
| 56 | } | 
|---|
| 57 | xpos += 6*fontWidth + 8; | 
|---|
| 58 | myColorRegs = new DataGridWidget(boss, nfont, xpos, ypos, | 
|---|
| 59 | 1, 4, 2, 8, Common::Base::F_16); | 
|---|
| 60 | myColorRegs->setTarget(this); | 
|---|
| 61 | myColorRegs->setID(kColorRegsID); | 
|---|
| 62 | addFocusWidget(myColorRegs); | 
|---|
| 63 |  | 
|---|
| 64 | xpos += myColorRegs->colWidth() + 5; | 
|---|
| 65 | myCOLUP0Color = new ColorWidget(boss, nfont, xpos, ypos+2, | 
|---|
| 66 | uInt32(1.5*lineHeight), lineHeight - 4); | 
|---|
| 67 | myCOLUP0Color->setTarget(this); | 
|---|
| 68 |  | 
|---|
| 69 | ypos += lineHeight; | 
|---|
| 70 | myCOLUP1Color = new ColorWidget(boss, nfont, xpos, ypos+2, | 
|---|
| 71 | uInt32(1.5*lineHeight), lineHeight - 4); | 
|---|
| 72 | myCOLUP1Color->setTarget(this); | 
|---|
| 73 |  | 
|---|
| 74 | ypos += lineHeight; | 
|---|
| 75 | myCOLUPFColor = new ColorWidget(boss, nfont, xpos, ypos+2, | 
|---|
| 76 | uInt32(1.5*lineHeight), lineHeight - 4); | 
|---|
| 77 | myCOLUPFColor->setTarget(this); | 
|---|
| 78 |  | 
|---|
| 79 | ypos += lineHeight; | 
|---|
| 80 | myCOLUBKColor = new ColorWidget(boss, nfont, xpos, ypos+2, | 
|---|
| 81 | uInt32(1.5*lineHeight), lineHeight - 4); | 
|---|
| 82 | myCOLUBKColor->setTarget(this); | 
|---|
| 83 |  | 
|---|
| 84 | // Fixed debug colors | 
|---|
| 85 | xpos += myCOLUP0Color->getWidth() + 30;  ypos = 10; | 
|---|
| 86 | myFixedEnabled = new CheckboxWidget(boss, lfont, xpos, ypos, "Debug Colors", kDbgClCmd); | 
|---|
| 87 | myFixedEnabled->setTarget(this); | 
|---|
| 88 | addFocusWidget(myFixedEnabled); | 
|---|
| 89 |  | 
|---|
| 90 | const char* const dbgLabels[] = { "P0", "P1", "PF", "BK", "M0", "M1", "BL", "HM"}; | 
|---|
| 91 | for(uInt32 row = 0; row <= 3; ++row) | 
|---|
| 92 | { | 
|---|
| 93 | ypos += lineHeight; | 
|---|
| 94 | t = new StaticTextWidget(boss, lfont, xpos, ypos + 2, 2*fontWidth, fontHeight, | 
|---|
| 95 | dbgLabels[row], TextAlign::Left); | 
|---|
| 96 | myFixedColors[row] = new ColorWidget(boss, nfont, xpos + 2 + t->getWidth() + 4, | 
|---|
| 97 | ypos + 2, uInt32(1.5*lineHeight), lineHeight - 4); | 
|---|
| 98 | myFixedColors[row]->setTarget(this); | 
|---|
| 99 | } | 
|---|
| 100 | xpos += t->getWidth() + myFixedColors[0]->getWidth() + 24; | 
|---|
| 101 | ypos = 10; | 
|---|
| 102 | for(uInt32 row = 4; row <= 7; ++row) | 
|---|
| 103 | { | 
|---|
| 104 | ypos += lineHeight; | 
|---|
| 105 | t = new StaticTextWidget(boss, lfont, xpos, ypos + 2, 2*fontWidth, fontHeight, | 
|---|
| 106 | dbgLabels[row], TextAlign::Left); | 
|---|
| 107 | myFixedColors[row] = new ColorWidget(boss, nfont, xpos + 2 + t->getWidth() + 4, | 
|---|
| 108 | ypos + 2, uInt32(1.5*lineHeight), lineHeight - 4); | 
|---|
| 109 | myFixedColors[row]->setTarget(this); | 
|---|
| 110 | } | 
|---|
| 111 |  | 
|---|
| 112 | //////////////////////////// | 
|---|
| 113 | // Collision register bits | 
|---|
| 114 | //////////////////////////// | 
|---|
| 115 | xpos += myFixedColors[0]->getWidth() + 2*fontWidth + 60;  ypos = 10; | 
|---|
| 116 |  | 
|---|
| 117 | // Add all 15 collision bits (with labels) | 
|---|
| 118 | uInt32 cxclrY = 0; | 
|---|
| 119 | xpos -= 2*fontWidth + 5;  ypos += lineHeight; | 
|---|
| 120 | const char* const rowLabel[] = { "P0", "P1", "M0", "M1", "BL"}; | 
|---|
| 121 | const char* const colLabel[] = { "PF", "BL", "M1", "M0", "P1"}; | 
|---|
| 122 | uInt32 lwidth = 2*fontWidth, collX = xpos + lwidth + 5, collY = ypos, idx = 0; | 
|---|
| 123 | for(uInt32 row = 0; row < 5; ++row) | 
|---|
| 124 | { | 
|---|
| 125 | // Add vertical label | 
|---|
| 126 | new StaticTextWidget(boss, lfont, xpos, ypos + row*(lineHeight+3), | 
|---|
| 127 | 2*fontWidth, fontHeight, | 
|---|
| 128 | rowLabel[row], TextAlign::Left); | 
|---|
| 129 |  | 
|---|
| 130 | for(uInt32 col = 0; col < 5 - row; ++col, ++idx) | 
|---|
| 131 | { | 
|---|
| 132 | myCollision[idx] = new CheckboxWidget(boss, lfont, collX, collY, "", CheckboxWidget::kCheckActionCmd); | 
|---|
| 133 | myCollision[idx]->setTarget(this); | 
|---|
| 134 | myCollision[idx]->setID(idx); | 
|---|
| 135 |  | 
|---|
| 136 | // We need to know where the PF_BL register is, to properly position | 
|---|
| 137 | // the CXCLR button | 
|---|
| 138 | if(idx == kBL_PFID) | 
|---|
| 139 | cxclrY = collY; | 
|---|
| 140 |  | 
|---|
| 141 | // Add horizontal label | 
|---|
| 142 | uInt32 labelx = collX; | 
|---|
| 143 | if(lwidth > uInt32(myCollision[idx]->getWidth())) | 
|---|
| 144 | labelx -= (lwidth - myCollision[idx]->getWidth()) / 2; | 
|---|
| 145 | else | 
|---|
| 146 | labelx += (myCollision[idx]->getWidth() - lwidth) / 2; | 
|---|
| 147 |  | 
|---|
| 148 | new StaticTextWidget(boss, lfont, labelx, ypos-lineHeight, lwidth, fontHeight, | 
|---|
| 149 | colLabel[col], TextAlign::Left); | 
|---|
| 150 |  | 
|---|
| 151 | collX += myCollision[idx]->getWidth() + 10; | 
|---|
| 152 | } | 
|---|
| 153 | collX = xpos + lwidth + 5; | 
|---|
| 154 | collY += lineHeight+3; | 
|---|
| 155 | } | 
|---|
| 156 |  | 
|---|
| 157 | // Clear all collision bits | 
|---|
| 158 | buttonX = collX + 5*(myCollision[0]->getWidth() + 10) - buttonW - 10; | 
|---|
| 159 | buttonY = lineHeight == 15 ? cxclrY : cxclrY - 4; | 
|---|
| 160 | b = new ButtonWidget(boss, lfont, buttonX, buttonY, buttonW, lineHeight, | 
|---|
| 161 | "CXCLR", kCxclrCmd); | 
|---|
| 162 | b->setTarget(this); | 
|---|
| 163 | addFocusWidget(b); | 
|---|
| 164 |  | 
|---|
| 165 | //////////////////////////// | 
|---|
| 166 | // P0 register info | 
|---|
| 167 | //////////////////////////// | 
|---|
| 168 | // grP0 (new) | 
|---|
| 169 | xpos = 10;  ypos = collY + 4; | 
|---|
| 170 | new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, | 
|---|
| 171 | "P0", TextAlign::Left); | 
|---|
| 172 | xpos += 2*fontWidth + 5; | 
|---|
| 173 | myGRP0 = new TogglePixelWidget(boss, nfont, xpos, ypos+1, 8, 1); | 
|---|
| 174 | myGRP0->setTarget(this); | 
|---|
| 175 | myGRP0->setID(kGRP0ID); | 
|---|
| 176 | myGRP0->clearBackgroundColor(); | 
|---|
| 177 | addFocusWidget(myGRP0); | 
|---|
| 178 |  | 
|---|
| 179 | // posP0 | 
|---|
| 180 | xpos += myGRP0->getWidth() + 12; | 
|---|
| 181 | t = new StaticTextWidget(boss, lfont, xpos, ypos+2, 4*fontWidth, fontHeight, | 
|---|
| 182 | "Pos#", TextAlign::Left); | 
|---|
| 183 | xpos += t->getWidth() + 2; | 
|---|
| 184 | myPosP0 = new DataGridWidget(boss, nfont, xpos, ypos, | 
|---|
| 185 | 1, 1, 3, 8, Common::Base::F_10); | 
|---|
| 186 | myPosP0->setTarget(this); | 
|---|
| 187 | myPosP0->setID(kPosP0ID); | 
|---|
| 188 | myPosP0->setRange(0, 160); | 
|---|
| 189 | addFocusWidget(myPosP0); | 
|---|
| 190 |  | 
|---|
| 191 | // hmP0 | 
|---|
| 192 | xpos += myPosP0->getWidth() + fontWidth + 12; | 
|---|
| 193 | new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, | 
|---|
| 194 | "HM", TextAlign::Left); | 
|---|
| 195 | xpos += 2*fontWidth + 5; | 
|---|
| 196 | myHMP0 = new DataGridWidget(boss, nfont, xpos, ypos, | 
|---|
| 197 | 1, 1, 1, 4, Common::Base::F_16_1); | 
|---|
| 198 | myHMP0->setTarget(this); | 
|---|
| 199 | myHMP0->setID(kHMP0ID); | 
|---|
| 200 | addFocusWidget(myHMP0); | 
|---|
| 201 |  | 
|---|
| 202 | // P0 reflect | 
|---|
| 203 | xpos += myHMP0->getWidth() + 15; | 
|---|
| 204 | myRefP0 = new CheckboxWidget(boss, lfont, xpos, ypos+1, | 
|---|
| 205 | "Reflect", CheckboxWidget::kCheckActionCmd); | 
|---|
| 206 | myRefP0->setTarget(this); | 
|---|
| 207 | myRefP0->setID(kRefP0ID); | 
|---|
| 208 | addFocusWidget(myRefP0); | 
|---|
| 209 |  | 
|---|
| 210 | // P0 reset | 
|---|
| 211 | xpos += myRefP0->getWidth() + 12; | 
|---|
| 212 | buttonX = xpos; | 
|---|
| 213 | b = new ButtonWidget(boss, lfont, xpos, ypos, buttonW, lineHeight, | 
|---|
| 214 | "RESP0", kResP0Cmd); | 
|---|
| 215 | b->setTarget(this); | 
|---|
| 216 | addFocusWidget(b); | 
|---|
| 217 |  | 
|---|
| 218 | // grP0 (old) | 
|---|
| 219 | xpos = 10 + 2*fontWidth + 5;  ypos += myGRP0->getHeight() + 5; | 
|---|
| 220 | myGRP0Old = new TogglePixelWidget(boss, nfont, xpos, ypos+1, 8, 1); | 
|---|
| 221 | myGRP0Old->setTarget(this); | 
|---|
| 222 | myGRP0Old->setID(kGRP0OldID); | 
|---|
| 223 | myGRP0Old->clearBackgroundColor(); | 
|---|
| 224 | addFocusWidget(myGRP0Old); | 
|---|
| 225 |  | 
|---|
| 226 | // P0 delay | 
|---|
| 227 | xpos += myGRP0Old->getWidth() + 12; | 
|---|
| 228 | myDelP0 = new CheckboxWidget(boss, lfont, xpos, ypos+1, | 
|---|
| 229 | "VDel", CheckboxWidget::kCheckActionCmd); | 
|---|
| 230 | myDelP0->setTarget(this); | 
|---|
| 231 | myDelP0->setID(kDelP0ID); | 
|---|
| 232 | addFocusWidget(myDelP0); | 
|---|
| 233 |  | 
|---|
| 234 | // NUSIZ0 (player portion) | 
|---|
| 235 | xpos += myDelP0->getWidth() + 12; | 
|---|
| 236 | new StaticTextWidget(boss, lfont, xpos, ypos+2, 5*fontWidth, fontHeight, | 
|---|
| 237 | "NuSiz", TextAlign::Left); | 
|---|
| 238 | xpos += 5*fontWidth + 5; | 
|---|
| 239 | myNusizP0 = new DataGridWidget(boss, nfont, xpos, ypos, | 
|---|
| 240 | 1, 1, 1, 3, Common::Base::F_16_1); | 
|---|
| 241 | myNusizP0->setTarget(this); | 
|---|
| 242 | myNusizP0->setID(kNusizP0ID); | 
|---|
| 243 | addFocusWidget(myNusizP0); | 
|---|
| 244 |  | 
|---|
| 245 | xpos += myNusizP0->getWidth() + 5; | 
|---|
| 246 | myNusizP0Text = new EditTextWidget(boss, nfont, xpos, ypos, 21*fontWidth, | 
|---|
| 247 | lineHeight, ""); | 
|---|
| 248 | myNusizP0Text->setEditable(false, true); | 
|---|
| 249 |  | 
|---|
| 250 | //////////////////////////// | 
|---|
| 251 | // P1 register info | 
|---|
| 252 | //////////////////////////// | 
|---|
| 253 | // grP1 (new) | 
|---|
| 254 | xpos = 10;  ypos += lineHeight + 12; | 
|---|
| 255 | new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, | 
|---|
| 256 | "P1", TextAlign::Left); | 
|---|
| 257 | xpos += 2*fontWidth + 5; | 
|---|
| 258 | myGRP1 = new TogglePixelWidget(boss, nfont, xpos, ypos+1, 8, 1); | 
|---|
| 259 | myGRP1->setTarget(this); | 
|---|
| 260 | myGRP1->setID(kGRP1ID); | 
|---|
| 261 | myGRP1->clearBackgroundColor(); | 
|---|
| 262 | addFocusWidget(myGRP1); | 
|---|
| 263 |  | 
|---|
| 264 | // posP1 | 
|---|
| 265 | xpos += myGRP1->getWidth() + 12; | 
|---|
| 266 | t = new StaticTextWidget(boss, lfont, xpos, ypos+2, 4*fontWidth, fontHeight, | 
|---|
| 267 | "Pos#", TextAlign::Left); | 
|---|
| 268 | xpos += t->getWidth() + 2; | 
|---|
| 269 | myPosP1 = new DataGridWidget(boss, nfont, xpos, ypos, | 
|---|
| 270 | 1, 1, 3, 8, Common::Base::F_10); | 
|---|
| 271 | myPosP1->setTarget(this); | 
|---|
| 272 | myPosP1->setID(kPosP1ID); | 
|---|
| 273 | myPosP1->setRange(0, 160); | 
|---|
| 274 | addFocusWidget(myPosP1); | 
|---|
| 275 |  | 
|---|
| 276 | // hmP1 | 
|---|
| 277 | xpos += myPosP1->getWidth() + fontWidth + 12; | 
|---|
| 278 | new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, | 
|---|
| 279 | "HM", TextAlign::Left); | 
|---|
| 280 | xpos += 2*fontWidth + 5; | 
|---|
| 281 | myHMP1 = new DataGridWidget(boss, nfont, xpos, ypos, | 
|---|
| 282 | 1, 1, 1, 4, Common::Base::F_16_1); | 
|---|
| 283 | myHMP1->setTarget(this); | 
|---|
| 284 | myHMP1->setID(kHMP1ID); | 
|---|
| 285 | addFocusWidget(myHMP1); | 
|---|
| 286 |  | 
|---|
| 287 | // P1 reflect | 
|---|
| 288 | xpos += myHMP1->getWidth() + 15; | 
|---|
| 289 | myRefP1 = new CheckboxWidget(boss, lfont, xpos, ypos+1, | 
|---|
| 290 | "Reflect", CheckboxWidget::kCheckActionCmd); | 
|---|
| 291 | myRefP1->setTarget(this); | 
|---|
| 292 | myRefP1->setID(kRefP1ID); | 
|---|
| 293 | addFocusWidget(myRefP1); | 
|---|
| 294 |  | 
|---|
| 295 | // P1 reset | 
|---|
| 296 | xpos += myRefP1->getWidth() + 12; | 
|---|
| 297 | b = new ButtonWidget(boss, lfont, xpos, ypos, buttonW, lineHeight, | 
|---|
| 298 | "RESP1", kResP1Cmd); | 
|---|
| 299 | b->setTarget(this); | 
|---|
| 300 | addFocusWidget(b); | 
|---|
| 301 |  | 
|---|
| 302 | // grP1 (old) | 
|---|
| 303 | xpos = 10 + 2*fontWidth + 5;  ypos += myGRP1->getHeight() + 5; | 
|---|
| 304 | myGRP1Old = new TogglePixelWidget(boss, nfont, xpos, ypos+1, 8, 1); | 
|---|
| 305 | myGRP1Old->setTarget(this); | 
|---|
| 306 | myGRP1Old->setID(kGRP1OldID); | 
|---|
| 307 | myGRP1Old->clearBackgroundColor(); | 
|---|
| 308 | addFocusWidget(myGRP1Old); | 
|---|
| 309 |  | 
|---|
| 310 | // P1 delay | 
|---|
| 311 | xpos += myGRP1Old->getWidth() + 12; | 
|---|
| 312 | myDelP1 = new CheckboxWidget(boss, lfont, xpos, ypos+1, | 
|---|
| 313 | "VDel", CheckboxWidget::kCheckActionCmd); | 
|---|
| 314 | myDelP1->setTarget(this); | 
|---|
| 315 | myDelP1->setID(kDelP1ID); | 
|---|
| 316 | addFocusWidget(myDelP1); | 
|---|
| 317 |  | 
|---|
| 318 | // NUSIZ1 (player portion) | 
|---|
| 319 | xpos += myDelP1->getWidth() + 12; | 
|---|
| 320 | new StaticTextWidget(boss, lfont, xpos, ypos+2, 5*fontWidth, fontHeight, | 
|---|
| 321 | "NuSiz", TextAlign::Left); | 
|---|
| 322 | xpos += 5*fontWidth + 5; | 
|---|
| 323 | myNusizP1 = new DataGridWidget(boss, nfont, xpos, ypos, | 
|---|
| 324 | 1, 1, 1, 3, Common::Base::F_16_1); | 
|---|
| 325 | myNusizP1->setTarget(this); | 
|---|
| 326 | myNusizP1->setID(kNusizP1ID); | 
|---|
| 327 | addFocusWidget(myNusizP1); | 
|---|
| 328 |  | 
|---|
| 329 | xpos += myNusizP1->getWidth() + 5; | 
|---|
| 330 | myNusizP1Text = new EditTextWidget(boss, nfont, xpos, ypos, 21*fontWidth, | 
|---|
| 331 | lineHeight, ""); | 
|---|
| 332 | myNusizP1Text->setEditable(false, true); | 
|---|
| 333 |  | 
|---|
| 334 | //////////////////////////// | 
|---|
| 335 | // M0 register info | 
|---|
| 336 | //////////////////////////// | 
|---|
| 337 | // enaM0 | 
|---|
| 338 | xpos = 10;  ypos += lineHeight + 12; | 
|---|
| 339 | new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, | 
|---|
| 340 | "M0", TextAlign::Left); | 
|---|
| 341 | xpos += 2*fontWidth + 5; | 
|---|
| 342 | myEnaM0 = new TogglePixelWidget(boss, nfont, xpos, ypos+1, 1, 1); | 
|---|
| 343 | myEnaM0->setTarget(this); | 
|---|
| 344 | myEnaM0->setID(kEnaM0ID); | 
|---|
| 345 | myEnaM0->clearBackgroundColor(); | 
|---|
| 346 | addFocusWidget(myEnaM0); | 
|---|
| 347 |  | 
|---|
| 348 | // posM0 | 
|---|
| 349 | xpos += myEnaM0->getWidth() + 12; | 
|---|
| 350 | t = new StaticTextWidget(boss, lfont, xpos, ypos+2, 4*fontWidth, fontHeight, | 
|---|
| 351 | "Pos#", TextAlign::Left); | 
|---|
| 352 | xpos += t->getWidth() + 2; | 
|---|
| 353 | myPosM0 = new DataGridWidget(boss, nfont, xpos, ypos, | 
|---|
| 354 | 1, 1, 3, 8, Common::Base::F_10); | 
|---|
| 355 | myPosM0->setTarget(this); | 
|---|
| 356 | myPosM0->setID(kPosM0ID); | 
|---|
| 357 | myPosM0->setRange(0, 160); | 
|---|
| 358 | addFocusWidget(myPosM0); | 
|---|
| 359 |  | 
|---|
| 360 | // hmM0 | 
|---|
| 361 | xpos += myPosM0->getWidth() + 12; | 
|---|
| 362 | new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, | 
|---|
| 363 | "HM", TextAlign::Left); | 
|---|
| 364 | xpos += 2*fontWidth + 5; | 
|---|
| 365 | myHMM0 = new DataGridWidget(boss, nfont, xpos, ypos, | 
|---|
| 366 | 1, 1, 1, 4, Common::Base::F_16_1); | 
|---|
| 367 | myHMM0->setTarget(this); | 
|---|
| 368 | myHMM0->setID(kHMM0ID); | 
|---|
| 369 | addFocusWidget(myHMM0); | 
|---|
| 370 |  | 
|---|
| 371 | // NUSIZ0 (missile portion) | 
|---|
| 372 | xpos += myHMM0->getWidth() + 12; | 
|---|
| 373 | new StaticTextWidget(boss, lfont, xpos, ypos+2, 4*fontWidth, fontHeight, | 
|---|
| 374 | "Size", TextAlign::Left); | 
|---|
| 375 | xpos += 4*fontWidth + 5; | 
|---|
| 376 | myNusizM0 = new DataGridWidget(boss, nfont, xpos, ypos, | 
|---|
| 377 | 1, 1, 1, 2, Common::Base::F_16_1); | 
|---|
| 378 | myNusizM0->setTarget(this); | 
|---|
| 379 | myNusizM0->setID(kNusizM0ID); | 
|---|
| 380 | addFocusWidget(myNusizM0); | 
|---|
| 381 |  | 
|---|
| 382 | // M0 reset to player 0 | 
|---|
| 383 | xpos += myNusizM0->getWidth() + 15; | 
|---|
| 384 | myResMP0 = new CheckboxWidget(boss, lfont, xpos, ypos+1, | 
|---|
| 385 | "Reset to P0", CheckboxWidget::kCheckActionCmd); | 
|---|
| 386 | myResMP0->setTarget(this); | 
|---|
| 387 | myResMP0->setID(kResMP0ID); | 
|---|
| 388 | addFocusWidget(myResMP0); | 
|---|
| 389 |  | 
|---|
| 390 | // M0 reset | 
|---|
| 391 | xpos = buttonX; | 
|---|
| 392 | b = new ButtonWidget(boss, lfont, xpos, ypos, buttonW, lineHeight, | 
|---|
| 393 | "RESM0", kResM0Cmd); | 
|---|
| 394 | b->setTarget(this); | 
|---|
| 395 | addFocusWidget(b); | 
|---|
| 396 |  | 
|---|
| 397 | //////////////////////////// | 
|---|
| 398 | // M1 register info | 
|---|
| 399 | //////////////////////////// | 
|---|
| 400 | // enaM1 | 
|---|
| 401 | xpos = 10;  ypos += lineHeight + 4; | 
|---|
| 402 | new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, | 
|---|
| 403 | "M1", TextAlign::Left); | 
|---|
| 404 | xpos += 2*fontWidth + 5; | 
|---|
| 405 | myEnaM1 = new TogglePixelWidget(boss, nfont, xpos, ypos+1, 1, 1); | 
|---|
| 406 | myEnaM1->setTarget(this); | 
|---|
| 407 | myEnaM1->setID(kEnaM1ID); | 
|---|
| 408 | myEnaM1->clearBackgroundColor(); | 
|---|
| 409 | addFocusWidget(myEnaM1); | 
|---|
| 410 |  | 
|---|
| 411 | // posM0 | 
|---|
| 412 | xpos += myEnaM1->getWidth() + 12; | 
|---|
| 413 | t = new StaticTextWidget(boss, lfont, xpos, ypos+2, 4*fontWidth, fontHeight, | 
|---|
| 414 | "Pos#", TextAlign::Left); | 
|---|
| 415 | xpos += t->getWidth() + 2; | 
|---|
| 416 | myPosM1 = new DataGridWidget(boss, nfont, xpos, ypos, | 
|---|
| 417 | 1, 1, 3, 8, Common::Base::F_10); | 
|---|
| 418 | myPosM1->setTarget(this); | 
|---|
| 419 | myPosM1->setID(kPosM1ID); | 
|---|
| 420 | myPosM1->setRange(0, 160); | 
|---|
| 421 | addFocusWidget(myPosM1); | 
|---|
| 422 |  | 
|---|
| 423 | // hmM0 | 
|---|
| 424 | xpos += myPosM1->getWidth() + 12; | 
|---|
| 425 | new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, | 
|---|
| 426 | "HM", TextAlign::Left); | 
|---|
| 427 | xpos += 2*fontWidth + 5; | 
|---|
| 428 | myHMM1 = new DataGridWidget(boss, nfont, xpos, ypos, | 
|---|
| 429 | 1, 1, 1, 4, Common::Base::F_16_1); | 
|---|
| 430 | myHMM1->setTarget(this); | 
|---|
| 431 | myHMM1->setID(kHMM1ID); | 
|---|
| 432 | addFocusWidget(myHMM1); | 
|---|
| 433 |  | 
|---|
| 434 | // NUSIZ1 (missile portion) | 
|---|
| 435 | xpos += myHMM1->getWidth() + 12; | 
|---|
| 436 | new StaticTextWidget(boss, lfont, xpos, ypos+2, 4*fontWidth, fontHeight, | 
|---|
| 437 | "Size", TextAlign::Left); | 
|---|
| 438 | xpos += 4*fontWidth + 5; | 
|---|
| 439 | myNusizM1 = new DataGridWidget(boss, nfont, xpos, ypos, | 
|---|
| 440 | 1, 1, 1, 2, Common::Base::F_16_1); | 
|---|
| 441 | myNusizM1->setTarget(this); | 
|---|
| 442 | myNusizM1->setID(kNusizM1ID); | 
|---|
| 443 | addFocusWidget(myNusizM1); | 
|---|
| 444 |  | 
|---|
| 445 | // M1 reset to player 0 | 
|---|
| 446 | xpos += myNusizM1->getWidth() + 15; | 
|---|
| 447 | myResMP1 = new CheckboxWidget(boss, lfont, xpos, ypos+1, | 
|---|
| 448 | "Reset to P1", CheckboxWidget::kCheckActionCmd); | 
|---|
| 449 | myResMP1->setTarget(this); | 
|---|
| 450 | myResMP1->setID(kResMP1ID); | 
|---|
| 451 | addFocusWidget(myResMP1); | 
|---|
| 452 |  | 
|---|
| 453 | // M1 reset | 
|---|
| 454 | xpos = buttonX; | 
|---|
| 455 | b = new ButtonWidget(boss, lfont, xpos, ypos, buttonW, lineHeight, | 
|---|
| 456 | "RESM1", kResM1Cmd); | 
|---|
| 457 | b->setTarget(this); | 
|---|
| 458 | addFocusWidget(b); | 
|---|
| 459 |  | 
|---|
| 460 | //////////////////////////// | 
|---|
| 461 | // BL register info | 
|---|
| 462 | //////////////////////////// | 
|---|
| 463 | // enaBL | 
|---|
| 464 | xpos = 10;  ypos += lineHeight + 4; | 
|---|
| 465 | new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, | 
|---|
| 466 | "BL", TextAlign::Left); | 
|---|
| 467 | xpos += 2*fontWidth + 5; | 
|---|
| 468 | myEnaBL = new TogglePixelWidget(boss, nfont, xpos, ypos+1, 1, 1); | 
|---|
| 469 | myEnaBL->setTarget(this); | 
|---|
| 470 | myEnaBL->setID(kEnaBLID); | 
|---|
| 471 | myEnaBL->clearBackgroundColor(); | 
|---|
| 472 | addFocusWidget(myEnaBL); | 
|---|
| 473 |  | 
|---|
| 474 | // posBL | 
|---|
| 475 | xpos += myEnaBL->getWidth() + 12; | 
|---|
| 476 | t = new StaticTextWidget(boss, lfont, xpos, ypos+2, 4*fontWidth, fontHeight, | 
|---|
| 477 | "Pos#", TextAlign::Left); | 
|---|
| 478 | xpos += t->getWidth() + 2; | 
|---|
| 479 | myPosBL = new DataGridWidget(boss, nfont, xpos, ypos, | 
|---|
| 480 | 1, 1, 3, 8, Common::Base::F_10); | 
|---|
| 481 | myPosBL->setTarget(this); | 
|---|
| 482 | myPosBL->setID(kPosBLID); | 
|---|
| 483 | myPosBL->setRange(0, 160); | 
|---|
| 484 | addFocusWidget(myPosBL); | 
|---|
| 485 |  | 
|---|
| 486 | // hmBL | 
|---|
| 487 | xpos += myPosBL->getWidth() + 12; | 
|---|
| 488 | new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, | 
|---|
| 489 | "HM", TextAlign::Left); | 
|---|
| 490 | xpos += 2*fontWidth + 5; | 
|---|
| 491 | myHMBL = new DataGridWidget(boss, nfont, xpos, ypos, | 
|---|
| 492 | 1, 1, 1, 4, Common::Base::F_16_1); | 
|---|
| 493 | myHMBL->setTarget(this); | 
|---|
| 494 | myHMBL->setID(kHMBLID); | 
|---|
| 495 | addFocusWidget(myHMBL); | 
|---|
| 496 |  | 
|---|
| 497 | // CTRLPF (size portion) | 
|---|
| 498 | xpos += myHMBL->getWidth() + 12; | 
|---|
| 499 | new StaticTextWidget(boss, lfont, xpos, ypos+2, 4*fontWidth, fontHeight, | 
|---|
| 500 | "Size", TextAlign::Left); | 
|---|
| 501 | xpos += 4*fontWidth + 5; | 
|---|
| 502 | mySizeBL = new DataGridWidget(boss, nfont, xpos, ypos, | 
|---|
| 503 | 1, 1, 1, 2, Common::Base::F_16_1); | 
|---|
| 504 | mySizeBL->setTarget(this); | 
|---|
| 505 | mySizeBL->setID(kSizeBLID); | 
|---|
| 506 | addFocusWidget(mySizeBL); | 
|---|
| 507 |  | 
|---|
| 508 | // Reset ball | 
|---|
| 509 | xpos = buttonX; | 
|---|
| 510 | b = new ButtonWidget(boss, lfont, xpos, ypos, buttonW, lineHeight, | 
|---|
| 511 | "RESBL", kResBLCmd); | 
|---|
| 512 | b->setTarget(this); | 
|---|
| 513 | addFocusWidget(b); | 
|---|
| 514 |  | 
|---|
| 515 | // Ball (old) | 
|---|
| 516 | xpos = 10 + 2*fontWidth + 5;  ypos += myEnaBL->getHeight() + 5; | 
|---|
| 517 | myEnaBLOld = new TogglePixelWidget(boss, nfont, xpos, ypos+1, 1, 1); | 
|---|
| 518 | myEnaBLOld->setTarget(this); | 
|---|
| 519 | myEnaBLOld->setID(kEnaBLOldID); | 
|---|
| 520 | myEnaBLOld->clearBackgroundColor(); | 
|---|
| 521 | addFocusWidget(myEnaBLOld); | 
|---|
| 522 |  | 
|---|
| 523 | // Ball delay | 
|---|
| 524 | xpos += myEnaBLOld->getWidth() + 12; | 
|---|
| 525 | myDelBL = new CheckboxWidget(boss, lfont, xpos, ypos+1, | 
|---|
| 526 | "VDel", CheckboxWidget::kCheckActionCmd); | 
|---|
| 527 | myDelBL->setTarget(this); | 
|---|
| 528 | myDelBL->setID(kDelBLID); | 
|---|
| 529 | addFocusWidget(myDelBL); | 
|---|
| 530 |  | 
|---|
| 531 | //////////////////////////// | 
|---|
| 532 | // PF 0/1/2 registers | 
|---|
| 533 | //////////////////////////// | 
|---|
| 534 | const GUI::Font& sf = instance().frameBuffer().smallFont(); | 
|---|
| 535 | const int sfWidth = sf.getMaxCharWidth(), | 
|---|
| 536 | sfHeight = sf.getFontHeight(); | 
|---|
| 537 | const char* const bitNames[] = { "0", "1", "2", "3", "4", "5", "6", "7"}; | 
|---|
| 538 |  | 
|---|
| 539 | // PF0 | 
|---|
| 540 | xpos = 10;  ypos += lineHeight + sfHeight + 6; | 
|---|
| 541 | new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, | 
|---|
| 542 | "PF", TextAlign::Left); | 
|---|
| 543 | xpos += 2*fontWidth + 5; | 
|---|
| 544 | myPF[0] = new TogglePixelWidget(boss, nfont, xpos, ypos+1, 4, 1); | 
|---|
| 545 | myPF[0]->setTarget(this); | 
|---|
| 546 | myPF[0]->setID(kPF0ID); | 
|---|
| 547 | addFocusWidget(myPF[0]); | 
|---|
| 548 |  | 
|---|
| 549 | // PF1 | 
|---|
| 550 | xpos += myPF[0]->getWidth() + 2; | 
|---|
| 551 | myPF[1] = new TogglePixelWidget(boss, nfont, xpos, ypos+1, 8, 1); | 
|---|
| 552 | myPF[1]->setTarget(this); | 
|---|
| 553 | myPF[1]->setID(kPF1ID); | 
|---|
| 554 | addFocusWidget(myPF[1]); | 
|---|
| 555 |  | 
|---|
| 556 | // PF2 | 
|---|
| 557 | xpos += myPF[1]->getWidth() + 2; | 
|---|
| 558 | myPF[2] = new TogglePixelWidget(boss, nfont, xpos, ypos+1, 8, 1); | 
|---|
| 559 | myPF[2]->setTarget(this); | 
|---|
| 560 | myPF[2]->setID(kPF2ID); | 
|---|
| 561 | addFocusWidget(myPF[2]); | 
|---|
| 562 |  | 
|---|
| 563 | // PFx bit labels | 
|---|
| 564 | auto start = [&](int sw) { return (sw - sfWidth) / 2; }; | 
|---|
| 565 | int colw = myPF[0]->getWidth() / 4; | 
|---|
| 566 | xpos = 10 + 2*fontWidth + 5 + start(colw); | 
|---|
| 567 | int _ypos = ypos - sfHeight; | 
|---|
| 568 | for(int i = 4; i <= 7; ++i) | 
|---|
| 569 | { | 
|---|
| 570 | new StaticTextWidget(boss, sf, xpos, _ypos, sfWidth, sfHeight, | 
|---|
| 571 | bitNames[i], TextAlign::Left); | 
|---|
| 572 | xpos += colw; | 
|---|
| 573 | } | 
|---|
| 574 | xpos = 10 + 2*fontWidth + 5 + myPF[0]->getWidth() + 2 + start(colw); | 
|---|
| 575 | for(int i = 7; i >= 0; --i) | 
|---|
| 576 | { | 
|---|
| 577 | new StaticTextWidget(boss, sf, xpos, _ypos, sfWidth, sfHeight, | 
|---|
| 578 | bitNames[i], TextAlign::Left); | 
|---|
| 579 | xpos += colw; | 
|---|
| 580 | } | 
|---|
| 581 | xpos = 10 + 2*fontWidth + 5 + myPF[0]->getWidth() + 2 + | 
|---|
| 582 | myPF[1]->getWidth() + 2 + start(colw); | 
|---|
| 583 | for(int i = 0; i <= 7; ++i) | 
|---|
| 584 | { | 
|---|
| 585 | new StaticTextWidget(boss, sf, xpos, _ypos, sfWidth, sfHeight, | 
|---|
| 586 | bitNames[i], TextAlign::Left); | 
|---|
| 587 | xpos += colw; | 
|---|
| 588 | } | 
|---|
| 589 |  | 
|---|
| 590 | // PF reflect, score, priority | 
|---|
| 591 | xpos = 10 + 4*fontWidth;  ypos += lineHeight + 6; | 
|---|
| 592 | myRefPF = new CheckboxWidget(boss, lfont, xpos, ypos+1, | 
|---|
| 593 | "Reflect", CheckboxWidget::kCheckActionCmd); | 
|---|
| 594 | myRefPF->setTarget(this); | 
|---|
| 595 | myRefPF->setID(kRefPFID); | 
|---|
| 596 | addFocusWidget(myRefPF); | 
|---|
| 597 |  | 
|---|
| 598 | xpos += myRefPF->getWidth() + 15; | 
|---|
| 599 | myScorePF = new CheckboxWidget(boss, lfont, xpos, ypos+1, | 
|---|
| 600 | "Score", CheckboxWidget::kCheckActionCmd); | 
|---|
| 601 | myScorePF->setTarget(this); | 
|---|
| 602 | myScorePF->setID(kScorePFID); | 
|---|
| 603 | addFocusWidget(myScorePF); | 
|---|
| 604 |  | 
|---|
| 605 | xpos += myScorePF->getWidth() + 15; | 
|---|
| 606 | myPriorityPF = new CheckboxWidget(boss, lfont, xpos, ypos+1, | 
|---|
| 607 | "Priority", CheckboxWidget::kCheckActionCmd); | 
|---|
| 608 | myPriorityPF->setTarget(this); | 
|---|
| 609 | myPriorityPF->setID(kPriorityPFID); | 
|---|
| 610 | addFocusWidget(myPriorityPF); | 
|---|
| 611 |  | 
|---|
| 612 | xpos = 10; | 
|---|
| 613 | ypos += 2 * lineHeight; | 
|---|
| 614 | t = new StaticTextWidget(boss, lfont, xpos, ypos, 13*fontWidth, fontHeight, | 
|---|
| 615 | "Queued Writes", TextAlign::Left); | 
|---|
| 616 |  | 
|---|
| 617 | xpos += t->getWidth() + 10; | 
|---|
| 618 | myDelayQueueWidget = new DelayQueueWidget(boss, lfont, xpos, ypos); | 
|---|
| 619 |  | 
|---|
| 620 | //////////////////////////// | 
|---|
| 621 | // Strobe buttons | 
|---|
| 622 | //////////////////////////// | 
|---|
| 623 | buttonX = xpos + myDelayQueueWidget->getWidth() + 20; | 
|---|
| 624 | buttonY = ypos; | 
|---|
| 625 | b = new ButtonWidget(boss, lfont, buttonX, buttonY, buttonW, lineHeight, | 
|---|
| 626 | "WSYNC", kWsyncCmd); | 
|---|
| 627 | b->setTarget(this); | 
|---|
| 628 | addFocusWidget(b); | 
|---|
| 629 |  | 
|---|
| 630 | buttonY += lineHeight + 3; | 
|---|
| 631 | b = new ButtonWidget(boss, lfont, buttonX, buttonY, buttonW, lineHeight, | 
|---|
| 632 | "RSYNC", kRsyncCmd); | 
|---|
| 633 | b->setTarget(this); | 
|---|
| 634 | addFocusWidget(b); | 
|---|
| 635 |  | 
|---|
| 636 | buttonY += lineHeight + 3; | 
|---|
| 637 | b = new ButtonWidget(boss, lfont, buttonX, buttonY, buttonW, lineHeight, | 
|---|
| 638 | "HMOVE", kHmoveCmd); | 
|---|
| 639 | b->setTarget(this); | 
|---|
| 640 | addFocusWidget(b); | 
|---|
| 641 |  | 
|---|
| 642 | buttonY += lineHeight + 3; | 
|---|
| 643 | b = new ButtonWidget(boss, lfont, buttonX, buttonY, buttonW, lineHeight, | 
|---|
| 644 | "HMCLR", kHmclrCmd); | 
|---|
| 645 | b->setTarget(this); | 
|---|
| 646 | addFocusWidget(b); | 
|---|
| 647 | } | 
|---|
| 648 |  | 
|---|
| 649 | // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
|---|
| 650 | void TiaWidget::handleCommand(CommandSender* sender, int cmd, int data, int id) | 
|---|
| 651 | { | 
|---|
| 652 | Debugger& dbg = instance().debugger(); | 
|---|
| 653 | TIADebug& tia = dbg.tiaDebug(); | 
|---|
| 654 |  | 
|---|
| 655 | switch(cmd) | 
|---|
| 656 | { | 
|---|
| 657 | case kWsyncCmd: | 
|---|
| 658 | tia.strobeWsync(); | 
|---|
| 659 | break; | 
|---|
| 660 |  | 
|---|
| 661 | case kRsyncCmd: | 
|---|
| 662 | tia.strobeRsync(); | 
|---|
| 663 | break; | 
|---|
| 664 |  | 
|---|
| 665 | case kResP0Cmd: | 
|---|
| 666 | tia.strobeResP0(); | 
|---|
| 667 | break; | 
|---|
| 668 |  | 
|---|
| 669 | case kResP1Cmd: | 
|---|
| 670 | tia.strobeResP1(); | 
|---|
| 671 | break; | 
|---|
| 672 |  | 
|---|
| 673 | case kResM0Cmd: | 
|---|
| 674 | tia.strobeResM0(); | 
|---|
| 675 | break; | 
|---|
| 676 |  | 
|---|
| 677 | case kResM1Cmd: | 
|---|
| 678 | tia.strobeResM1(); | 
|---|
| 679 | break; | 
|---|
| 680 |  | 
|---|
| 681 | case kResBLCmd: | 
|---|
| 682 | tia.strobeResBL(); | 
|---|
| 683 | break; | 
|---|
| 684 |  | 
|---|
| 685 | case kHmoveCmd: | 
|---|
| 686 | tia.strobeHmove(); | 
|---|
| 687 | break; | 
|---|
| 688 |  | 
|---|
| 689 | case kHmclrCmd: | 
|---|
| 690 | tia.strobeHmclr(); | 
|---|
| 691 | break; | 
|---|
| 692 |  | 
|---|
| 693 | case kCxclrCmd: | 
|---|
| 694 | tia.strobeCxclr(); | 
|---|
| 695 | break; | 
|---|
| 696 |  | 
|---|
| 697 | case kDbgClCmd: | 
|---|
| 698 | myFixedEnabled->setState(tia.tia().toggleFixedColors()); | 
|---|
| 699 | break; | 
|---|
| 700 |  | 
|---|
| 701 | case DataGridWidget::kItemDataChangedCmd: | 
|---|
| 702 | switch(id) | 
|---|
| 703 | { | 
|---|
| 704 | case kColorRegsID: | 
|---|
| 705 | changeColorRegs(); | 
|---|
| 706 | break; | 
|---|
| 707 |  | 
|---|
| 708 | case kPosP0ID: | 
|---|
| 709 | tia.posP0(myPosP0->getSelectedValue()); | 
|---|
| 710 | break; | 
|---|
| 711 |  | 
|---|
| 712 | case kPosP1ID: | 
|---|
| 713 | tia.posP1(myPosP1->getSelectedValue()); | 
|---|
| 714 | break; | 
|---|
| 715 |  | 
|---|
| 716 | case kPosM0ID: | 
|---|
| 717 | tia.posM0(myPosM0->getSelectedValue()); | 
|---|
| 718 | break; | 
|---|
| 719 |  | 
|---|
| 720 | case kPosM1ID: | 
|---|
| 721 | tia.posM1(myPosM1->getSelectedValue()); | 
|---|
| 722 | break; | 
|---|
| 723 |  | 
|---|
| 724 | case kPosBLID: | 
|---|
| 725 | tia.posBL(myPosBL->getSelectedValue()); | 
|---|
| 726 | break; | 
|---|
| 727 |  | 
|---|
| 728 | case kHMP0ID: | 
|---|
| 729 | tia.hmP0(myHMP0->getSelectedValue()); | 
|---|
| 730 | break; | 
|---|
| 731 |  | 
|---|
| 732 | case kHMP1ID: | 
|---|
| 733 | tia.hmP1(myHMP1->getSelectedValue()); | 
|---|
| 734 | break; | 
|---|
| 735 |  | 
|---|
| 736 | case kHMM0ID: | 
|---|
| 737 | tia.hmM0(myHMM0->getSelectedValue()); | 
|---|
| 738 | break; | 
|---|
| 739 |  | 
|---|
| 740 | case kHMM1ID: | 
|---|
| 741 | tia.hmM1(myHMM1->getSelectedValue()); | 
|---|
| 742 | break; | 
|---|
| 743 |  | 
|---|
| 744 | case kHMBLID: | 
|---|
| 745 | tia.hmBL(myHMBL->getSelectedValue()); | 
|---|
| 746 | break; | 
|---|
| 747 |  | 
|---|
| 748 | case kNusizP0ID: | 
|---|
| 749 | tia.nusizP0(myNusizP0->getSelectedValue()); | 
|---|
| 750 | myNusizP0Text->setText(tia.nusizP0String()); | 
|---|
| 751 | break; | 
|---|
| 752 |  | 
|---|
| 753 | case kNusizP1ID: | 
|---|
| 754 | tia.nusizP1(myNusizP1->getSelectedValue()); | 
|---|
| 755 | myNusizP1Text->setText(tia.nusizP1String()); | 
|---|
| 756 | break; | 
|---|
| 757 |  | 
|---|
| 758 | case kNusizM0ID: | 
|---|
| 759 | tia.nusizM0(myNusizM0->getSelectedValue()); | 
|---|
| 760 | break; | 
|---|
| 761 |  | 
|---|
| 762 | case kNusizM1ID: | 
|---|
| 763 | tia.nusizM1(myNusizM1->getSelectedValue()); | 
|---|
| 764 | break; | 
|---|
| 765 |  | 
|---|
| 766 | case kSizeBLID: | 
|---|
| 767 | tia.sizeBL(mySizeBL->getSelectedValue()); | 
|---|
| 768 | break; | 
|---|
| 769 |  | 
|---|
| 770 | default: | 
|---|
| 771 | cerr << "TiaWidget DG changed\n"; | 
|---|
| 772 | break; | 
|---|
| 773 | } | 
|---|
| 774 | break; | 
|---|
| 775 |  | 
|---|
| 776 | case ToggleWidget::kItemDataChangedCmd: | 
|---|
| 777 | switch(id) | 
|---|
| 778 | { | 
|---|
| 779 | case kGRP0ID: | 
|---|
| 780 | tia.grP0(myGRP0->getIntState()); | 
|---|
| 781 | break; | 
|---|
| 782 |  | 
|---|
| 783 | case kGRP0OldID: | 
|---|
| 784 | tia.setGRP0Old(myGRP0Old->getIntState()); | 
|---|
| 785 | break; | 
|---|
| 786 |  | 
|---|
| 787 | case kGRP1ID: | 
|---|
| 788 | tia.grP1(myGRP1->getIntState()); | 
|---|
| 789 | break; | 
|---|
| 790 |  | 
|---|
| 791 | case kGRP1OldID: | 
|---|
| 792 | tia.setGRP1Old(myGRP1Old->getIntState()); | 
|---|
| 793 | break; | 
|---|
| 794 |  | 
|---|
| 795 | case kEnaM0ID: | 
|---|
| 796 | tia.enaM0(myEnaM0->getIntState()); | 
|---|
| 797 | break; | 
|---|
| 798 |  | 
|---|
| 799 | case kEnaM1ID: | 
|---|
| 800 | tia.enaM1(myEnaM1->getIntState()); | 
|---|
| 801 | break; | 
|---|
| 802 |  | 
|---|
| 803 | case kEnaBLID: | 
|---|
| 804 | tia.enaBL(myEnaBL->getIntState()); | 
|---|
| 805 | break; | 
|---|
| 806 |  | 
|---|
| 807 | case kEnaBLOldID: | 
|---|
| 808 | tia.setENABLOld(myEnaBLOld->getIntState() != 0); | 
|---|
| 809 | break; | 
|---|
| 810 |  | 
|---|
| 811 | case kPF0ID: | 
|---|
| 812 | tia.pf0(myPF[0]->getIntState()); | 
|---|
| 813 | break; | 
|---|
| 814 |  | 
|---|
| 815 | case kPF1ID: | 
|---|
| 816 | tia.pf1(myPF[1]->getIntState()); | 
|---|
| 817 | break; | 
|---|
| 818 |  | 
|---|
| 819 | case kPF2ID: | 
|---|
| 820 | tia.pf2(myPF[2]->getIntState()); | 
|---|
| 821 | break; | 
|---|
| 822 | } | 
|---|
| 823 | break; | 
|---|
| 824 |  | 
|---|
| 825 | case CheckboxWidget::kCheckActionCmd: | 
|---|
| 826 | switch(id) | 
|---|
| 827 | { | 
|---|
| 828 | case kP0_PFID: | 
|---|
| 829 | tia.collision(CollisionBit::P0PF, true); | 
|---|
| 830 | break; | 
|---|
| 831 |  | 
|---|
| 832 | case kP0_BLID: | 
|---|
| 833 | tia.collision(CollisionBit::P0BL, true); | 
|---|
| 834 | break; | 
|---|
| 835 |  | 
|---|
| 836 | case kP0_M1ID: | 
|---|
| 837 | tia.collision(CollisionBit::M1P0, true); | 
|---|
| 838 | break; | 
|---|
| 839 |  | 
|---|
| 840 | case kP0_M0ID: | 
|---|
| 841 | tia.collision(CollisionBit::M0P0, true); | 
|---|
| 842 | break; | 
|---|
| 843 |  | 
|---|
| 844 | case kP0_P1ID: | 
|---|
| 845 | tia.collision(CollisionBit::P0P1, true); | 
|---|
| 846 | break; | 
|---|
| 847 |  | 
|---|
| 848 | case kP1_PFID: | 
|---|
| 849 | tia.collision(CollisionBit::P1PF, true); | 
|---|
| 850 | break; | 
|---|
| 851 | case kP1_BLID: | 
|---|
| 852 | tia.collision(CollisionBit::P1BL, true); | 
|---|
| 853 | break; | 
|---|
| 854 |  | 
|---|
| 855 | case kP1_M1ID: | 
|---|
| 856 | tia.collision(CollisionBit::M1P1, true); | 
|---|
| 857 | break; | 
|---|
| 858 | case kP1_M0ID: | 
|---|
| 859 | tia.collision(CollisionBit::M0P1, true); | 
|---|
| 860 | break; | 
|---|
| 861 |  | 
|---|
| 862 | case kM0_PFID: | 
|---|
| 863 | tia.collision(CollisionBit::M0PF, true); | 
|---|
| 864 | break; | 
|---|
| 865 |  | 
|---|
| 866 | case kM0_BLID: | 
|---|
| 867 | tia.collision(CollisionBit::M0BL, true); | 
|---|
| 868 | break; | 
|---|
| 869 |  | 
|---|
| 870 | case kM0_M1ID: | 
|---|
| 871 | tia.collision(CollisionBit::M0M1, true); | 
|---|
| 872 | break; | 
|---|
| 873 |  | 
|---|
| 874 | case kM1_PFID: | 
|---|
| 875 | tia.collision(CollisionBit::M1PF, true); | 
|---|
| 876 | break; | 
|---|
| 877 |  | 
|---|
| 878 | case kM1_BLID: | 
|---|
| 879 | tia.collision(CollisionBit::M1BL, true); | 
|---|
| 880 | break; | 
|---|
| 881 |  | 
|---|
| 882 | case kBL_PFID: | 
|---|
| 883 | tia.collision(CollisionBit::BLPF, true); | 
|---|
| 884 | break; | 
|---|
| 885 |  | 
|---|
| 886 | case kRefP0ID: | 
|---|
| 887 | tia.refP0(myRefP0->getState() ? 1 : 0); | 
|---|
| 888 | break; | 
|---|
| 889 |  | 
|---|
| 890 | case kRefP1ID: | 
|---|
| 891 | tia.refP1(myRefP1->getState() ? 1 : 0); | 
|---|
| 892 | break; | 
|---|
| 893 |  | 
|---|
| 894 | case kDelP0ID: | 
|---|
| 895 | tia.vdelP0(myDelP0->getState() ? 1 : 0); | 
|---|
| 896 | break; | 
|---|
| 897 |  | 
|---|
| 898 | case kDelP1ID: | 
|---|
| 899 | tia.vdelP1(myDelP1->getState() ? 1 : 0); | 
|---|
| 900 | break; | 
|---|
| 901 |  | 
|---|
| 902 | case kDelBLID: | 
|---|
| 903 | tia.vdelBL(myDelBL->getState() ? 1 : 0); | 
|---|
| 904 | break; | 
|---|
| 905 |  | 
|---|
| 906 | case kResMP0ID: | 
|---|
| 907 | tia.resMP0(myResMP0->getState() ? 1 : 0); | 
|---|
| 908 | break; | 
|---|
| 909 |  | 
|---|
| 910 | case kResMP1ID: | 
|---|
| 911 | tia.resMP1(myResMP1->getState() ? 1 : 0); | 
|---|
| 912 | break; | 
|---|
| 913 |  | 
|---|
| 914 | case kRefPFID: | 
|---|
| 915 | tia.refPF(myRefPF->getState() ? 1 : 0); | 
|---|
| 916 | break; | 
|---|
| 917 |  | 
|---|
| 918 | case kScorePFID: | 
|---|
| 919 | tia.scorePF(myScorePF->getState() ? 1 : 0); | 
|---|
| 920 | break; | 
|---|
| 921 |  | 
|---|
| 922 | case kPriorityPFID: | 
|---|
| 923 | tia.priorityPF(myPriorityPF->getState() ? 1 : 0); | 
|---|
| 924 | break; | 
|---|
| 925 | } | 
|---|
| 926 | break; | 
|---|
| 927 | } | 
|---|
| 928 | } | 
|---|
| 929 |  | 
|---|
| 930 | // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
|---|
| 931 | void TiaWidget::loadConfig() | 
|---|
| 932 | { | 
|---|
| 933 | IntArray alist; | 
|---|
| 934 | IntArray vlist; | 
|---|
| 935 | BoolArray blist, changed, grNew, grOld; | 
|---|
| 936 |  | 
|---|
| 937 | Debugger& dbg = instance().debugger(); | 
|---|
| 938 | TIADebug& tia = dbg.tiaDebug(); | 
|---|
| 939 | const TiaState& state    = static_cast<const TiaState&>(tia.getState()); | 
|---|
| 940 | const TiaState& oldstate = static_cast<const TiaState&>(tia.getOldState()); | 
|---|
| 941 |  | 
|---|
| 942 | // Color registers | 
|---|
| 943 | alist.clear();  vlist.clear();  changed.clear(); | 
|---|
| 944 | for(uInt32 i = 0; i < 4; ++i) | 
|---|
| 945 | { | 
|---|
| 946 | alist.push_back(i); | 
|---|
| 947 | vlist.push_back(state.coluRegs[i]); | 
|---|
| 948 | changed.push_back(state.coluRegs[i] != oldstate.coluRegs[i]); | 
|---|
| 949 | } | 
|---|
| 950 | myColorRegs->setList(alist, vlist, changed); | 
|---|
| 951 |  | 
|---|
| 952 | bool fixed = tia.tia().usingFixedColors(); | 
|---|
| 953 |  | 
|---|
| 954 | myCOLUP0Color->setColor(state.coluRegs[0]); | 
|---|
| 955 | myCOLUP1Color->setColor(state.coluRegs[1]); | 
|---|
| 956 | myCOLUPFColor->setColor(state.coluRegs[2]); | 
|---|
| 957 | myCOLUBKColor->setColor(state.coluRegs[3]); | 
|---|
| 958 | myCOLUP0Color->setCrossed(fixed); | 
|---|
| 959 | myCOLUP1Color->setCrossed(fixed); | 
|---|
| 960 | myCOLUPFColor->setCrossed(fixed); | 
|---|
| 961 | myCOLUBKColor->setCrossed(fixed); | 
|---|
| 962 |  | 
|---|
| 963 | // Fixed debug colors | 
|---|
| 964 | myFixedEnabled->setState(fixed); | 
|---|
| 965 | for(uInt32 c = 0; c < 8; ++c) | 
|---|
| 966 | { | 
|---|
| 967 | myFixedColors[c]->setColor(state.fixedCols[c]); | 
|---|
| 968 | myFixedColors[c]->setCrossed(!fixed); | 
|---|
| 969 | } | 
|---|
| 970 |  | 
|---|
| 971 | //////////////////////////// | 
|---|
| 972 | // Collision register bits | 
|---|
| 973 | //////////////////////////// | 
|---|
| 974 | myCollision[kP0_PFID]->setState(tia.collP0_PF(), state.cx[0] != oldstate.cx[0]); | 
|---|
| 975 | myCollision[kP0_BLID]->setState(tia.collP0_BL(), state.cx[1] != oldstate.cx[1]); | 
|---|
| 976 | myCollision[kP0_M1ID]->setState(tia.collM1_P0(), state.cx[2] != oldstate.cx[2]); | 
|---|
| 977 | myCollision[kP0_M0ID]->setState(tia.collM0_P0(), state.cx[3] != oldstate.cx[3]); | 
|---|
| 978 | myCollision[kP0_P1ID]->setState(tia.collP0_P1(), state.cx[4] != oldstate.cx[4]); | 
|---|
| 979 | myCollision[kP1_PFID]->setState(tia.collP1_PF(), state.cx[5] != oldstate.cx[5]); | 
|---|
| 980 | myCollision[kP1_BLID]->setState(tia.collP1_BL(), state.cx[6] != oldstate.cx[6]); | 
|---|
| 981 | myCollision[kP1_M1ID]->setState(tia.collM1_P1(), state.cx[7] != oldstate.cx[7]); | 
|---|
| 982 | myCollision[kP1_M0ID]->setState(tia.collM0_P1(), state.cx[8] != oldstate.cx[8]); | 
|---|
| 983 | myCollision[kM0_PFID]->setState(tia.collM0_PF(), state.cx[9] != oldstate.cx[9]); | 
|---|
| 984 | myCollision[kM0_BLID]->setState(tia.collM0_BL(), state.cx[10] != oldstate.cx[10]); | 
|---|
| 985 | myCollision[kM0_M1ID]->setState(tia.collM0_M1(), state.cx[11] != oldstate.cx[11]); | 
|---|
| 986 | myCollision[kM1_PFID]->setState(tia.collM1_PF(), state.cx[12] != oldstate.cx[12]); | 
|---|
| 987 | myCollision[kM1_BLID]->setState(tia.collM1_BL(), state.cx[13] != oldstate.cx[13]); | 
|---|
| 988 | myCollision[kBL_PFID]->setState(tia.collBL_PF(), state.cx[14] != oldstate.cx[14]); | 
|---|
| 989 |  | 
|---|
| 990 | //////////////////////////// | 
|---|
| 991 | // P0 register info | 
|---|
| 992 | //////////////////////////// | 
|---|
| 993 | // grP0 (new and old) | 
|---|
| 994 | if(tia.vdelP0()) | 
|---|
| 995 | { | 
|---|
| 996 | myGRP0->setColor(kBGColorLo); | 
|---|
| 997 | myGRP0Old->setColor(state.coluRegs[0]); | 
|---|
| 998 | myGRP0Old->setCrossed(false); | 
|---|
| 999 | } | 
|---|
| 1000 | else | 
|---|
| 1001 | { | 
|---|
| 1002 | myGRP0->setColor(state.coluRegs[0]); | 
|---|
| 1003 | myGRP0Old->setColor(kBGColorLo); | 
|---|
| 1004 | myGRP0Old->setCrossed(true); | 
|---|
| 1005 | } | 
|---|
| 1006 | myGRP0->setIntState(state.gr[TiaState::P0], false); | 
|---|
| 1007 | myGRP0Old->setIntState(state.gr[TiaState::P0+2], false); | 
|---|
| 1008 |  | 
|---|
| 1009 | // posP0 | 
|---|
| 1010 | myPosP0->setList(0, state.pos[TiaState::P0], | 
|---|
| 1011 | state.pos[TiaState::P0] != oldstate.pos[TiaState::P0]); | 
|---|
| 1012 |  | 
|---|
| 1013 | // hmP0 | 
|---|
| 1014 | myHMP0->setList(0, state.hm[TiaState::P0], | 
|---|
| 1015 | state.hm[TiaState::P0] != oldstate.hm[TiaState::P0]); | 
|---|
| 1016 |  | 
|---|
| 1017 | // refP0 & vdelP0 | 
|---|
| 1018 | myRefP0->setState(tia.refP0(), state.ref[TiaState::P0] != oldstate.ref[TiaState::P0]); | 
|---|
| 1019 | myDelP0->setState(tia.vdelP0(), state.vdel[TiaState::P0] != oldstate.vdel[TiaState::P0]); | 
|---|
| 1020 |  | 
|---|
| 1021 | // NUSIZ0 (player portion) | 
|---|
| 1022 | bool nusiz0changed = state.size[TiaState::P0] != oldstate.size[TiaState::P0]; | 
|---|
| 1023 | myNusizP0->setList(0, state.size[TiaState::P0], nusiz0changed); | 
|---|
| 1024 | myNusizP0Text->setText(tia.nusizP0String(), nusiz0changed); | 
|---|
| 1025 |  | 
|---|
| 1026 | //////////////////////////// | 
|---|
| 1027 | // P1 register info | 
|---|
| 1028 | //////////////////////////// | 
|---|
| 1029 | // grP1 (new and old) | 
|---|
| 1030 | if(tia.vdelP1()) | 
|---|
| 1031 | { | 
|---|
| 1032 | myGRP1->setColor(kBGColorLo); | 
|---|
| 1033 | myGRP1Old->setColor(state.coluRegs[1]); | 
|---|
| 1034 | myGRP1Old->setCrossed(false); | 
|---|
| 1035 | } | 
|---|
| 1036 | else | 
|---|
| 1037 | { | 
|---|
| 1038 | myGRP1->setColor(state.coluRegs[1]); | 
|---|
| 1039 | myGRP1Old->setColor(kBGColorLo); | 
|---|
| 1040 | myGRP1Old->setCrossed(true); | 
|---|
| 1041 | } | 
|---|
| 1042 | myGRP1->setIntState(state.gr[TiaState::P1], false); | 
|---|
| 1043 | myGRP1Old->setIntState(state.gr[TiaState::P1+2], false); | 
|---|
| 1044 |  | 
|---|
| 1045 | // posP1 | 
|---|
| 1046 | myPosP1->setList(0, state.pos[TiaState::P1], | 
|---|
| 1047 | state.pos[TiaState::P1] != oldstate.pos[TiaState::P1]); | 
|---|
| 1048 |  | 
|---|
| 1049 | // hmP1 | 
|---|
| 1050 | myHMP1->setList(0, state.hm[TiaState::P1], | 
|---|
| 1051 | state.hm[TiaState::P1] != oldstate.hm[TiaState::P1]); | 
|---|
| 1052 |  | 
|---|
| 1053 | // refP1 & vdelP1 | 
|---|
| 1054 | myRefP1->setState(tia.refP1(), state.ref[TiaState::P1] != oldstate.ref[TiaState::P1]); | 
|---|
| 1055 | myDelP1->setState(tia.vdelP1(), state.vdel[TiaState::P1] != oldstate.vdel[TiaState::P1]); | 
|---|
| 1056 |  | 
|---|
| 1057 | // NUSIZ1 (player portion) | 
|---|
| 1058 | bool nusiz1changed = state.size[TiaState::P1] != oldstate.size[TiaState::P1]; | 
|---|
| 1059 | myNusizP1->setList(0, state.size[TiaState::P1], nusiz1changed); | 
|---|
| 1060 | myNusizP1Text->setText(tia.nusizP1String(), nusiz1changed); | 
|---|
| 1061 |  | 
|---|
| 1062 | //////////////////////////// | 
|---|
| 1063 | // M0 register info | 
|---|
| 1064 | //////////////////////////// | 
|---|
| 1065 | // enaM0 | 
|---|
| 1066 | myEnaM0->setColor(state.coluRegs[0]); | 
|---|
| 1067 | myEnaM0->setIntState(tia.enaM0() ? 1 : 0, false); | 
|---|
| 1068 |  | 
|---|
| 1069 | // posM0 | 
|---|
| 1070 | myPosM0->setList(0, state.pos[TiaState::M0], | 
|---|
| 1071 | state.pos[TiaState::M0] != oldstate.pos[TiaState::M0]); | 
|---|
| 1072 |  | 
|---|
| 1073 | // hmM0 | 
|---|
| 1074 | myHMM0->setList(0, state.hm[TiaState::M0], | 
|---|
| 1075 | state.hm[TiaState::M0] != oldstate.hm[TiaState::M0]); | 
|---|
| 1076 |  | 
|---|
| 1077 | // NUSIZ0 (missile portion) | 
|---|
| 1078 | myNusizM0->setList(0, state.size[TiaState::M0], | 
|---|
| 1079 | state.size[TiaState::M0] != oldstate.size[TiaState::M0]); | 
|---|
| 1080 |  | 
|---|
| 1081 | // resMP0 | 
|---|
| 1082 | myResMP0->setState(tia.resMP0(), state.res[TiaState::P0] != oldstate.res[TiaState::P0]); | 
|---|
| 1083 |  | 
|---|
| 1084 | //////////////////////////// | 
|---|
| 1085 | // M1 register info | 
|---|
| 1086 | //////////////////////////// | 
|---|
| 1087 | // enaM1 | 
|---|
| 1088 | myEnaM1->setColor(state.coluRegs[1]); | 
|---|
| 1089 | myEnaM1->setIntState(tia.enaM1() ? 1 : 0, false); | 
|---|
| 1090 |  | 
|---|
| 1091 | // posM1 | 
|---|
| 1092 | myPosM1->setList(0, state.pos[TiaState::M1], | 
|---|
| 1093 | state.pos[TiaState::M1] != oldstate.pos[TiaState::M1]); | 
|---|
| 1094 |  | 
|---|
| 1095 | // hmM1 | 
|---|
| 1096 | myHMM1->setList(0, state.hm[TiaState::M1], | 
|---|
| 1097 | state.hm[TiaState::M1] != oldstate.hm[TiaState::M1]); | 
|---|
| 1098 |  | 
|---|
| 1099 | // NUSIZ1 (missile portion) | 
|---|
| 1100 | myNusizM1->setList(0, state.size[TiaState::M1], | 
|---|
| 1101 | state.size[TiaState::M1] != oldstate.size[TiaState::M1]); | 
|---|
| 1102 |  | 
|---|
| 1103 | // resMP1 | 
|---|
| 1104 | myResMP1->setState(tia.resMP1(),state.res[TiaState::P1] != oldstate.res[TiaState::P1]); | 
|---|
| 1105 |  | 
|---|
| 1106 | //////////////////////////// | 
|---|
| 1107 | // BL register info | 
|---|
| 1108 | //////////////////////////// | 
|---|
| 1109 | // enaBL (new and old) | 
|---|
| 1110 | if(tia.vdelBL()) | 
|---|
| 1111 | { | 
|---|
| 1112 | myEnaBL->setColor(kBGColorLo); | 
|---|
| 1113 | myEnaBLOld->setColor(state.coluRegs[2]); | 
|---|
| 1114 | myEnaBLOld->setCrossed(false); | 
|---|
| 1115 | } | 
|---|
| 1116 | else | 
|---|
| 1117 | { | 
|---|
| 1118 | myEnaBL->setColor(state.coluRegs[2]); | 
|---|
| 1119 | myEnaBLOld->setColor(kBGColorLo); | 
|---|
| 1120 | myEnaBLOld->setCrossed(true); | 
|---|
| 1121 | } | 
|---|
| 1122 | myEnaBL->setIntState(state.gr[4], false); | 
|---|
| 1123 | myEnaBLOld->setIntState(state.gr[5], false); | 
|---|
| 1124 |  | 
|---|
| 1125 | // posBL | 
|---|
| 1126 | myPosBL->setList(0, state.pos[TiaState::BL], | 
|---|
| 1127 | state.pos[TiaState::BL] != oldstate.pos[TiaState::BL]); | 
|---|
| 1128 |  | 
|---|
| 1129 | // hmBL | 
|---|
| 1130 | myHMBL->setList(0, state.hm[TiaState::BL], | 
|---|
| 1131 | state.hm[TiaState::BL] != oldstate.hm[TiaState::BL]); | 
|---|
| 1132 |  | 
|---|
| 1133 | // CTRLPF (size portion) | 
|---|
| 1134 | mySizeBL->setList(0, state.size[TiaState::BL], | 
|---|
| 1135 | state.size[TiaState::BL] != oldstate.size[TiaState::BL]); | 
|---|
| 1136 |  | 
|---|
| 1137 | // vdelBL | 
|---|
| 1138 | myDelBL->setState(tia.vdelBL(), state.vdel[2] != oldstate.vdel[2]); | 
|---|
| 1139 |  | 
|---|
| 1140 | //////////////////////////// | 
|---|
| 1141 | // PF register info | 
|---|
| 1142 | //////////////////////////// | 
|---|
| 1143 | // PF0 | 
|---|
| 1144 | myPF[0]->setColor(state.coluRegs[2]); | 
|---|
| 1145 | myPF[0]->setIntState(state.pf[0], true);  // reverse bit order | 
|---|
| 1146 |  | 
|---|
| 1147 | // PF1 | 
|---|
| 1148 | myPF[1]->setColor(state.coluRegs[2]); | 
|---|
| 1149 | myPF[1]->setIntState(state.pf[1], false); | 
|---|
| 1150 |  | 
|---|
| 1151 | // PF2 | 
|---|
| 1152 | myPF[2]->setColor(state.coluRegs[2]); | 
|---|
| 1153 | myPF[2]->setIntState(state.pf[2], true);  // reverse bit order | 
|---|
| 1154 |  | 
|---|
| 1155 | // Reflect | 
|---|
| 1156 | myRefPF->setState(tia.refPF(), state.pf[3] != oldstate.pf[3]); | 
|---|
| 1157 |  | 
|---|
| 1158 | // Score | 
|---|
| 1159 | myScorePF->setState(tia.scorePF(), state.pf[4] != oldstate.pf[4]); | 
|---|
| 1160 |  | 
|---|
| 1161 | // Priority | 
|---|
| 1162 | myPriorityPF->setState(tia.priorityPF(), state.pf[5] != oldstate.pf[5]); | 
|---|
| 1163 |  | 
|---|
| 1164 | myDelayQueueWidget->loadConfig(); | 
|---|
| 1165 | } | 
|---|
| 1166 |  | 
|---|
| 1167 | // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
|---|
| 1168 | void TiaWidget::changeColorRegs() | 
|---|
| 1169 | { | 
|---|
| 1170 | int addr  = myColorRegs->getSelectedAddr(); | 
|---|
| 1171 | int value = myColorRegs->getSelectedValue(); | 
|---|
| 1172 |  | 
|---|
| 1173 | switch(addr) | 
|---|
| 1174 | { | 
|---|
| 1175 | case kCOLUP0Addr: | 
|---|
| 1176 | instance().debugger().tiaDebug().coluP0(value); | 
|---|
| 1177 | myCOLUP0Color->setColor(value); | 
|---|
| 1178 | break; | 
|---|
| 1179 |  | 
|---|
| 1180 | case kCOLUP1Addr: | 
|---|
| 1181 | instance().debugger().tiaDebug().coluP1(value); | 
|---|
| 1182 | myCOLUP1Color->setColor(value); | 
|---|
| 1183 | break; | 
|---|
| 1184 |  | 
|---|
| 1185 | case kCOLUPFAddr: | 
|---|
| 1186 | instance().debugger().tiaDebug().coluPF(value); | 
|---|
| 1187 | myCOLUPFColor->setColor(value); | 
|---|
| 1188 | break; | 
|---|
| 1189 |  | 
|---|
| 1190 | case kCOLUBKAddr: | 
|---|
| 1191 | instance().debugger().tiaDebug().coluBK(value); | 
|---|
| 1192 | myCOLUBKColor->setColor(value); | 
|---|
| 1193 | break; | 
|---|
| 1194 | } | 
|---|
| 1195 | } | 
|---|
| 1196 |  | 
|---|