From 9f0c15bc3232f2fb056063f5e095a7abb002ca4e Mon Sep 17 00:00:00 2001 From: thrust26 Date: Fri, 1 Dec 2017 18:21:54 +0100 Subject: [PATCH 001/156] audio widget made editable --- src/debugger/gui/AudioWidget.cxx | 93 ++++++++++++++++++++++++++++---- src/debugger/gui/AudioWidget.hxx | 11 +++- 2 files changed, 93 insertions(+), 11 deletions(-) diff --git a/src/debugger/gui/AudioWidget.cxx b/src/debugger/gui/AudioWidget.cxx index f50ccb8ba..208d5bfa8 100644 --- a/src/debugger/gui/AudioWidget.cxx +++ b/src/debugger/gui/AudioWidget.cxx @@ -46,12 +46,11 @@ AudioWidget::AudioWidget(GuiObject* boss, const GUI::Font& lfont, 2, 1, 2, 5, Common::Base::F_16); myAudF->setTarget(this); myAudF->setID(kAUDFID); - myAudF->setEditable(false); addFocusWidget(myAudF); for(int col = 0; col < 2; ++col) { - new StaticTextWidget(boss, lfont, xpos + col*myAudF->colWidth() + 7, + new StaticTextWidget(boss, lfont, xpos + col * myAudF->colWidth() + (int)(myAudF->colWidth() / 2.5), ypos - lineHeight, fontWidth, fontHeight, Common::Base::toString(col, Common::Base::F_16_1), kTextAlignLeft); @@ -66,7 +65,6 @@ AudioWidget::AudioWidget(GuiObject* boss, const GUI::Font& lfont, 2, 1, 2, 4, Common::Base::F_16); myAudC->setTarget(this); myAudC->setID(kAUDCID); - myAudC->setEditable(false); addFocusWidget(myAudC); // AudV registers @@ -78,16 +76,9 @@ AudioWidget::AudioWidget(GuiObject* boss, const GUI::Font& lfont, 2, 1, 2, 4, Common::Base::F_16); myAudV->setTarget(this); myAudV->setID(kAUDVID); - myAudV->setEditable(false); addFocusWidget(myAudV); } -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void AudioWidget::handleCommand(CommandSender* sender, int cmd, int data, int id) -{ - // TODO - implement this -} - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void AudioWidget::loadConfig() { @@ -130,3 +121,85 @@ void AudioWidget::loadConfig() } myAudV->setList(alist, vlist, changed); } + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void AudioWidget::handleCommand(CommandSender* sender, int cmd, int data, int id) +{ + switch(cmd) + { + case DataGridWidget::kItemDataChangedCmd: + switch(id) + { + case kAUDFID: + changeFrequencyRegs(); + break; + + case kAUDCID: + changeControlRegs(); + break; + + case kAUDVID: + changeVolumeRegs(); + break; + + default: + cerr << "AudioWidget DG changed\n"; + break; + } + break; + } +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void AudioWidget::changeFrequencyRegs() +{ + int addr = myAudF->getSelectedAddr(); + int value = myAudF->getSelectedValue(); + + switch(addr) + { + case kAud0Addr: + instance().debugger().tiaDebug().audF0(value); + break; + + case kAud1Addr: + instance().debugger().tiaDebug().audF1(value); + break; + } +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void AudioWidget::changeControlRegs() +{ + int addr = myAudC->getSelectedAddr(); + int value = myAudC->getSelectedValue(); + + switch(addr) + { + case kAud0Addr: + instance().debugger().tiaDebug().audC0(value); + break; + + case kAud1Addr: + instance().debugger().tiaDebug().audC1(value); + break; + } +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void AudioWidget::changeVolumeRegs() +{ + int addr = myAudV->getSelectedAddr(); + int value = myAudV->getSelectedValue(); + + switch(addr) + { + case kAud0Addr: + instance().debugger().tiaDebug().audV0(value); + break; + + case kAud1Addr: + instance().debugger().tiaDebug().audV1(value); + break; + } +} diff --git a/src/debugger/gui/AudioWidget.hxx b/src/debugger/gui/AudioWidget.hxx index 9739c7e70..7e00da380 100644 --- a/src/debugger/gui/AudioWidget.hxx +++ b/src/debugger/gui/AudioWidget.hxx @@ -24,7 +24,6 @@ class DataGridWidget; #include "Widget.hxx" #include "Command.hxx" - class AudioWidget : public Widget, public CommandSender { public: @@ -45,7 +44,17 @@ class AudioWidget : public Widget, public CommandSender DataGridWidget* myAudC; DataGridWidget* myAudV; + // Audio channels + enum + { + kAud0Addr, + kAud1Addr + }; + private: + void changeFrequencyRegs(); + void changeControlRegs(); + void changeVolumeRegs(); void handleCommand(CommandSender* sender, int cmd, int data, int id) override; void loadConfig() override; From 6c210a9f431899a98b423abb40ac83ceb7ee19c9 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Fri, 1 Dec 2017 18:28:13 +0100 Subject: [PATCH 002/156] doc for audio tab updated --- docs/debugger.html | 5 +++-- docs/graphics/debugger_audiotab.png | Bin 0 -> 2192 bytes 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 docs/graphics/debugger_audiotab.png diff --git a/docs/debugger.html b/docs/debugger.html index b41e51fb4..c64785c4c 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -806,10 +806,11 @@ reflecting this result.


(D) Audio Tab

-

This tab lets you view the contents of the TIA audio registers. In -the current release of Stella, these are read-only displays. This tab +

This tab lets you view the contents of the TIA audio registers. This tab will grow some features in a future release.

+

+
diff --git a/docs/graphics/debugger_audiotab.png b/docs/graphics/debugger_audiotab.png new file mode 100644 index 0000000000000000000000000000000000000000..d84ab805c76230cb745975be61a3dc8800b21400 GIT binary patch literal 2192 zcmeHIi93{A82@ZziA*0?(a1Jqkmb^XOc+M9*e837kc(22t(1t$@>RlQD|GEwL&=(b zrp&cXktexj4Uy$B;gT%F{pjhhxSi)Y=e*~A&wJkI_j`Wtb09k#qJ)^77ytkgWDxhrl!8W zzMeTEZ2-_-dVOxL3wHh*zZm#GFfe76HVxwxy+m>i0)U;(Ta&MqR&*A2$_87w1RtmU z5q!lX&>Ohq;de1u`=WQS;z8}-wRH`9dduNUf{SDV-XZk#?4zi_F*Wg+pey}hn?z$Y zk1m9u$a@zGuc{)VlxJ6q8_7r4R*xhy1#%*=6!w&`y<9n)$-kno_<(~&Jc#>-U*CvO zptsE+Kj)W;e3If(M>Fh7@3Wo1R^SiUtLN>X$DCOTD#XT56x4S%w7-k=GZ`*qB@IuS zHgdr=i*o%7`t;EF9RouKCVtM@FJF;$mdr`bB}z+mWR&!qRW+uWvUP>Yh1x%9hx|y5 zZjjSw#uV{9-@8q}F3f_ZGtNuWb;x5$@w^%y1 z>3LqB*Ghgk?}t49_f78P!;{eMV@_Q6I-Q&`DXje9S8e+mMtH{B?f21qTv4d+Dd+bU24ePJ6D-?5-NMmi=6k*%h!R<={&73SYD8E zw+^OBbcq7d%o;~Aqw4)+HbqmyJ+v)c8j0jz${2XquA#0QnY_o8BCd!*B!U7Yh%cWF zP(1lz>3wbP_fdb0sHTp}sq125;MCAf zO>z&(iE`3=K`9eVlXZ`kVj2as6fAiBcrJMl>i~3P183Or94m?0I1sa$fKN+y5%4&= zA-`*tsUPthT=RRsYzG$=Xv8VqeYlT?0&Coj9Y$x~BQ)lh=(X7+vfxNNjNvkFw76lI zzoP9`$D=Pdqlp8Z49nz{GErO!r>Fa@O#5zcmrP09M1w$|sJx~u-iM)1@57MrK&Q$T z6tWWFfPNH6doHe&hFS0h?dugz=f170V5v08pv4+eHdT8Mx(E1DW8W|#p?c7^E~|J< z3^%(>sOv*hpd)lCD-pGEk5hDFn-snY-8`L1=;5|ncgZ1p&F_VfphMS;mLtoJeAfG3 z*icI1m|63J)dJ_1$3{|Iv>DjeLRnk>05gT+j9O!_OM zn2e}e3xH&6D_G_XHkc4R^7144Rv%9!N#s_8CnTiB z1xVK{_bO;sX~?a@kycDgvLn$5aB@UJn0-qATXjx)vUdf46by1k$7#H8?nK(?6%9(# zCWK8LW4CH1ZR-Y?@?8*4H-{kXPbqyCwghZ3qvttU>vt-wD2uSPG$5|5VEp=Aq)dc+ zq(*qPT{F%_6eCjqf1}Aw?;FhDId0MB2N(L!QasJtBej{<} zxOfU*p-V2OMiFyvUk_tZkqc_UFl%0?mxrB+wSO|oa&WyTZ;ev6uNiPvB)h4_6QWY} zp%2=b5tvlGjMx)TlL^u-Rj-w1w3Bdk2-U?=H`tJYc55-jS$WF(Q?H(ahU~R=Sx!av zh=Ml+9YWI2+SMy;_X+DbWNSJbflE#g{VD37tus6^Gh@O`DvT;LkksA!A;=asglA@F GZvF>B^olkB literal 0 HcmV?d00001 From a4f33127baa120955b0127ded091ea4a76112d95 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Fri, 1 Dec 2017 15:42:33 -0330 Subject: [PATCH 003/156] Added ROM properties for 'Super Cobra Arcade'. --- src/emucore/DefProps.hxx | 4 +++- src/emucore/stella.pro | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/emucore/DefProps.hxx b/src/emucore/DefProps.hxx index a369f7e40..ab92029c4 100644 --- a/src/emucore/DefProps.hxx +++ b/src/emucore/DefProps.hxx @@ -25,7 +25,7 @@ regenerated and the application recompiled. */ -#define DEF_PROPS_SIZE 3303 +#define DEF_PROPS_SIZE 3305 static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "000509d1ed2b8d30a9d94be1b3b5febb", "Greg Zumwalt", "", "Jungle Jane (2003) (Greg Zumwalt) (Hack)", "Hack of Pitfall!", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1181,6 +1181,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "59e53894b3899ee164c91cfa7842da66", "Data Age", "", "Survival Run (1983) (Data Age) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "59e96de9628e8373d1c685f5e57dcf10", "PlayAround - J.H.M.", "204", "Beat 'Em & Eat 'Em (1982) (PlayAround)", "Uses the Paddle Controllers", "Extremely Rare", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 45", "", "", "", "", "" }, { "59f596285d174233c84597dee6f34f1f", "CCE", "C-811", "River Raid (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5a0ff99ba10bd26d542e1d6f59f56850", "Champ Games", "CG-04-P", "Super Cobra Arcade (PAL60)", "Compatible with Genesis controller", "Homebrew", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "YES", "" }, { "5a17e30e6e911e74ccd7b716d02b16c6", "Activision, Dan Kitchen", "AX-029", "Crackpots (1983) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5a272012a62becabcd52920348c7c60b", "Star Game", "", "Pitfall (Star Game)", "AKA Pitfall!", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5a2f2dcd775207536d9299e768bcd2df", "Quelle", "781698", "Flippern (Double-Game Package) (1983) (Quelle) (PAL)", "AKA Video Pinball", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1754,6 +1755,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "83f50fa0fbae545e4b88bb53b788c341", "Atari, Larry Kaplan - Sears", "CX2643 - 6-99815", "Codebreaker (1978) (Atari) (4K)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "83fafd7bd12e3335166c6314b3bde528", "Epyx, Steven A. Baker, Tod Frye, Peter Engelbrite", "80561-00251", "Winter Games (1987) (Epyx)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "840a5a2eaea24d95d289f514fd12f9bb", "", "", "GBImprov (Hack)", "Hack of Ghostbusters", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "841057f83ce3731e6bbfda1707cbca58", "Champ Games", "CG-04-N", "Super Cobra Arcade (NTSC)", "Compatible with Genesis controller", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "841b7bc1cad05f5408302308777d49dc", "Activision", "", "Unknown Activision Game (10-22-1982) (Activision) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "84290e333ff7567c2380f179430083b8", "Imagic, Dave Johnson", "13211, EIX-004-04I", "Quick Step! (1983) (Imagic) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "843435eb360ed72085f7ab9374f9749a", "Joe Grand", "", "SCSIcide (1.31) (Joe Grand)", "Uses the Paddle Controllers", "New Release", "", "", "", "", "", "", "PADDLES_IAXDR", "", "", "AUTO 65", "", "", "", "", "" }, diff --git a/src/emucore/stella.pro b/src/emucore/stella.pro index 06c3e88a1..243d58b8c 100644 --- a/src/emucore/stella.pro +++ b/src/emucore/stella.pro @@ -20276,3 +20276,21 @@ "Cartridge.Name" "Spitfire Attack (1983) (Milton Bradley) [h1]" "" +"Cartridge.MD5" "5a0ff99ba10bd26d542e1d6f59f56850" +"Cartridge.Manufacturer" "Champ Games" +"Cartridge.ModelNo" "CG-04-P" +"Cartridge.Name" "Super Cobra Arcade (PAL60)" +"Cartridge.Note" "Compatible with Genesis controller" +"Cartridge.Rarity" "Homebrew" +"Display.Format" "PAL60" +"Display.Phosphor" "YES" +"" + +"Cartridge.MD5" "841057f83ce3731e6bbfda1707cbca58" +"Cartridge.Manufacturer" "Champ Games" +"Cartridge.ModelNo" "CG-04-N" +"Cartridge.Name" "Super Cobra Arcade (NTSC)" +"Cartridge.Note" "Compatible with Genesis controller" +"Cartridge.Rarity" "Homebrew" +"Display.Phosphor" "YES" +"" From b6fa51d97bce45addf4773ba8e04b6b56f18e00c Mon Sep 17 00:00:00 2001 From: thrust26 Date: Fri, 1 Dec 2017 20:57:14 +0100 Subject: [PATCH 004/156] effective volume to audio widget added fixed parser return value for "$a" --- docs/debugger.html | 6 +++-- docs/graphics/debugger_audiotab.png | Bin 2192 -> 2394 bytes src/debugger/DebuggerParser.cxx | 2 +- src/debugger/gui/AudioWidget.cxx | 40 ++++++++++++++++++++++++---- src/debugger/gui/AudioWidget.hxx | 4 +++ 5 files changed, 44 insertions(+), 8 deletions(-) diff --git a/docs/debugger.html b/docs/debugger.html index c64785c4c..fdaf8d96e 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -806,11 +806,13 @@ reflecting this result.


(D) Audio Tab

-

This tab lets you view the contents of the TIA audio registers. This tab -will grow some features in a future release.

+

This tab lets you view the contents of the TIA audio registers and the effective +volume resulting from the two channel volumes.

+

This tab will grow some features in a future release.

+
diff --git a/docs/graphics/debugger_audiotab.png b/docs/graphics/debugger_audiotab.png index d84ab805c76230cb745975be61a3dc8800b21400..0aaec2f883d73968b8e49430fda1789b06930402 100644 GIT binary patch delta 1562 zcmV+#2IcvX5!wUje5xcY z>#oM;$R|zGHc}46b4ztD@Q^QY*6sd=jMzAkg*C+w0 zF&od;;mfy8C(>aVQ83RdV-Ok`0$H`j9R?a#n0=k|+kbwYEAm3)Hjot>w}GrHH1el# zcfwaABtBAqKUjea7&v)7gLOiq3!%}4(C9*FbRjgl5E@+wjV^>n7eb>89va7=R7^kl zI|+yT9Dhza{{ZzQ_U{u^^>sb@9Qq`-?~_aoe1*nULL(3wT?maX?B6G-8tDp+>r8$j zhsGBeKYxo8!)I}q$K_%|qYI(Yh0y3iXmsISjre~BUWLy+kheAd9Wj~Va}Ojmx)2&& zC^gc*IkeS(hEQSuMZ&Tk59)Iv8uNgbchShEj7C195evym>#>JIv{f^vyop8;M$%GS z6&94G@}N^$(CCaU@1b#IPYX-&>e{w`sZ%dyXn#cDKv>lX9haez3d^EKYdQ1HAHNd^Dml*47U2%9C-?D9;_z4)Ds8DKrwbJuSL~MxfBh?WnMe zmCy(nGb*jv>!t>*kv4YM4)Ds8F=ogT3xCs&-Q}tRttDd#tVm-qz$;IttL7ERnxP%w zl_wJ#T?maX>}z}uuRNJ;jR6oET?maX>}ve}Uf6lq2D=rD}_xFTjBvFUcC^lL*rICxM04NO>uR3xB9+ z9H*7$LbTQv3oI>NkDF4Y@E1wZsnsJLX%UU-R4Py-I24chrLF?fAzrY~ZLXt>daK7Q ztz3_rVMFALq~z4LMGI?$?*LVxkqolOn`xxL)V7804g69khvTQwywqva6s$VAdJNwh zF0gBtDl~zuo@EE2#ru&X>VaHsV1F{?3Y|jt2GR%$3ysO4SS)`w=9s!y>;%=iq**KE zb+Q+O*y^S`qQwp-gYr__7P_~9Ml?8n8hNF_ITF{z7W1ivM+XnI=m6ug4_dqFc<#3_ z8T3`!%V2GJhzKu2dD! z&_PZA51vw^{n=Qx*wxX+0zk`Zp@qLddv4X*EmIu4jR~PZXzk9!($x(9ZUlpD(f;|Z zp+(o%NL_A#yf9Y`Ys3kjG#yOphC4OdZDK+wkT0Q~TxN8+zQ*KGEEX?yoyRRS2416A zmvd~Pr62?OBvZkxZafE5bYHm7c8Y2gNTZ?t*|@;-oAbJTpO|fp`K18q0xoV=)ljXS+XJbwiANkl|Nj>}eI*`8up?)Vy#OVi78nVQ{0{I{GlglRtlZf^~{QiC) zlE~{2K2*vq3hyDWfa#C1CY)rYDW&rMu3&$Ol zK)vn~`$e)hZ8ws5jSJk~I6rAupuxgPFZDx6!>l3ox=9=q&H5<6LLyDGKW(|6Z#8L1 zy;_M@ap4nvv%c059*ayVgpLG!&1MYL>xYl(4`v|C0cno^o5-(XDptyuWvfkEcUC~PTFy= zvBWaq8quK46v__IHLDV}ybSJzY}++29Od1 zNQnWY!~jxa04Xtm2#Mnd64OU}`w(!J96 zDKRC6kP-uU|13$=NLET*WqiGTh)Im)mn z4<-IHhX0R2my}ooVLkpG5&FM3eibP(fcV=P%I+L;JIk*ZHrj6-61ZPJRO0K^1}gFO zlDVMa84}^iNyJKaJmRao-vYD9!pfTGf`v!i&Z6HEvw_ z$4$=~5Y|JCbx4UddVf3jfU-Mh{MxrpO00;#o$&;=18Vo<;gwh}swc;$JiHPUPf83R zB?jL04XtmN}_uPL8ClIpoN4S2~g#p)hLq;YWKsN zfhZ?YS8iVrRaC%%W0FDbemF5CNe>>Iz`vJOk*AxhNd~q1aes*!xwF7Ss>BkHbm76- zB!k-h2$2X~v}`0+8Px7aghWUZCK=T3hnFa{?kw=6M30wI{vRLG6AxF{;ay-2;PFIYXDuDkGanogne9 z%mOwDKUVQ7{F7BPeAQ{Jd~JtQeprpF@Tg9KuQcCB?gcZ d-{$M14$002ovPDHLkV1nLoc^v=% diff --git a/src/debugger/DebuggerParser.cxx b/src/debugger/DebuggerParser.cxx index dc6c921be..9bf4a0382 100644 --- a/src/debugger/DebuggerParser.cxx +++ b/src/debugger/DebuggerParser.cxx @@ -234,7 +234,7 @@ int DebuggerParser::decipher_arg(const string& str) // Special cases (registers): const CpuState& state = static_cast(debugger.cpuDebug().getState()); - if(arg == "a") result = state.A; + if(arg == "a" && str != "$a") result = state.A; else if(arg == "x") result = state.X; else if(arg == "y") result = state.Y; else if(arg == "p") result = state.PS; diff --git a/src/debugger/gui/AudioWidget.cxx b/src/debugger/gui/AudioWidget.cxx index 208d5bfa8..2c267a4ea 100644 --- a/src/debugger/gui/AudioWidget.cxx +++ b/src/debugger/gui/AudioWidget.cxx @@ -22,6 +22,8 @@ #include "Debugger.hxx" #include "TIADebug.hxx" #include "Widget.hxx" +#include "Base.hxx" +using Common::Base; #include "AudioWidget.hxx" @@ -50,7 +52,7 @@ AudioWidget::AudioWidget(GuiObject* boss, const GUI::Font& lfont, for(int col = 0; col < 2; ++col) { - new StaticTextWidget(boss, lfont, xpos + col * myAudF->colWidth() + (int)(myAudF->colWidth() / 2.5), + new StaticTextWidget(boss, lfont, xpos + col * myAudF->colWidth() + (int)(myAudF->colWidth() / 2.75), ypos - lineHeight, fontWidth, fontHeight, Common::Base::toString(col, Common::Base::F_16_1), kTextAlignLeft); @@ -61,8 +63,8 @@ AudioWidget::AudioWidget(GuiObject* boss, const GUI::Font& lfont, new StaticTextWidget(boss, lfont, xpos, ypos+2, lwidth, fontHeight, "AUDC", kTextAlignLeft); xpos += lwidth; - myAudC = new DataGridWidget(boss, nfont, xpos, ypos, - 2, 1, 2, 4, Common::Base::F_16); + myAudC = new DataGridWidget(boss, nfont, xpos + (int)(myAudF->colWidth() / 2.75), ypos, + 2, 1, 1, 4, Common::Base::F_16_1); myAudC->setTarget(this); myAudC->setID(kAUDCID); addFocusWidget(myAudC); @@ -72,11 +74,14 @@ AudioWidget::AudioWidget(GuiObject* boss, const GUI::Font& lfont, new StaticTextWidget(boss, lfont, xpos, ypos+2, lwidth, fontHeight, "AUDV", kTextAlignLeft); xpos += lwidth; - myAudV = new DataGridWidget(boss, nfont, xpos, ypos, - 2, 1, 2, 4, Common::Base::F_16); + myAudV = new DataGridWidget(boss, nfont, xpos + (int)(myAudF->colWidth() / 2.75), ypos, + 2, 1, 1, 4, Common::Base::F_16_1); myAudV->setTarget(this); myAudV->setID(kAUDVID); addFocusWidget(myAudV); + + myAudEffV = new StaticTextWidget(boss, lfont, myAudV->getRight() + fontWidth, myAudV->getTop() + 2, + "100% (eff. volume)"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -120,6 +125,17 @@ void AudioWidget::loadConfig() changed.push_back(state.aud[i] != oldstate.aud[i]); } myAudV->setList(alist, vlist, changed); + + handleVolume(); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void AudioWidget::handleVolume() +{ + stringstream s; + + s << getEffectiveVolume() << "% (eff. volume)"; + myAudEffV->setLabel(s.str()); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -202,4 +218,18 @@ void AudioWidget::changeVolumeRegs() instance().debugger().tiaDebug().audV1(value); break; } + handleVolume(); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +uInt32 AudioWidget::getEffectiveVolume() +{ + const int EFF_VOL[] = { + 0, 6, 13, 18, 24, 29, 33, 38, + 42, 46, 50, 54, 57, 60, 64, 67, + 70, 72, 75, 78, 80, 82, 85, 87, + 89, 91, 93, 95, 97, 98,100}; + + return EFF_VOL[instance().debugger().tiaDebug().audV0() + + instance().debugger().tiaDebug().audV1()]; } diff --git a/src/debugger/gui/AudioWidget.hxx b/src/debugger/gui/AudioWidget.hxx index 7e00da380..f0cab2635 100644 --- a/src/debugger/gui/AudioWidget.hxx +++ b/src/debugger/gui/AudioWidget.hxx @@ -43,6 +43,7 @@ class AudioWidget : public Widget, public CommandSender DataGridWidget* myAudF; DataGridWidget* myAudC; DataGridWidget* myAudV; + StaticTextWidget* myAudEffV; // Audio channels enum @@ -58,6 +59,9 @@ class AudioWidget : public Widget, public CommandSender void handleCommand(CommandSender* sender, int cmd, int data, int id) override; void loadConfig() override; + void handleVolume(); + uInt32 getEffectiveVolume(); + // Following constructors and assignment operators not supported AudioWidget() = delete; AudioWidget(const AudioWidget&) = delete; From 8abc49af1f5a70170af7a12aa04381b772ee3b1f Mon Sep 17 00:00:00 2001 From: thrust26 Date: Fri, 1 Dec 2017 21:15:11 +0100 Subject: [PATCH 005/156] fixed effective volume for C = 0 --- src/debugger/gui/AudioWidget.cxx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/debugger/gui/AudioWidget.cxx b/src/debugger/gui/AudioWidget.cxx index 2c267a4ea..b977295f5 100644 --- a/src/debugger/gui/AudioWidget.cxx +++ b/src/debugger/gui/AudioWidget.cxx @@ -200,6 +200,7 @@ void AudioWidget::changeControlRegs() instance().debugger().tiaDebug().audC1(value); break; } + handleVolume(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -230,6 +231,6 @@ uInt32 AudioWidget::getEffectiveVolume() 70, 72, 75, 78, 80, 82, 85, 87, 89, 91, 93, 95, 97, 98,100}; - return EFF_VOL[instance().debugger().tiaDebug().audV0() + - instance().debugger().tiaDebug().audV1()]; + return EFF_VOL[(instance().debugger().tiaDebug().audC0() ? instance().debugger().tiaDebug().audV0() : 0) + + (instance().debugger().tiaDebug().audC1() ? instance().debugger().tiaDebug().audV1() : 0)]; } From 1341f07a36fb0491878bf4e08c04d3cc33536829 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sat, 2 Dec 2017 11:34:58 +0100 Subject: [PATCH 006/156] trap doc updated double spaces after . removed --- docs/debugger.html | 214 +++++++++++++------------ docs/index.html | 390 ++++++++++++++++++++++----------------------- 2 files changed, 303 insertions(+), 301 deletions(-) diff --git a/docs/debugger.html b/docs/debugger.html index fdaf8d96e..ce6ae0861 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -7,7 +7,7 @@

Stella Integrated Debugger (a work in progress)

The debugger in Stella may never be complete, as we're constantly -adding new features requested by homebrew developers. However, even in its +adding new features requested by homebrew developers. However, even in its current form it's still quite powerful, and is able to boast at least one feature that no other 2600 debugger has; it's completely cross-platform.

@@ -42,17 +42,17 @@ feature that no other 2600 debugger has; it's completely cross-platform.< You can advance multiple frames with one command.
  • Supports Distella 'configuration directives', which may be used to - override automatic code/data determination in the disassembly. For now, + override automatic code/data determination in the disassembly. For now, the following directives are supported: CODE, GFX, PGFX, DATA, ROW. These directives can be entered at the debugger prompt, or (automatically) loaded and saved in configuration files.
  • Extensive disassembly support, both from the emulation core and with help - from Distella. Where possible, the disassembly differentiates between code, + from Distella. Where possible, the disassembly differentiates between code, player graphics and playfield graphics (ie, addresses stored in GRPx and PFx) - and data (addresses used as an operand of a command). Code sections are also + and data (addresses used as an operand of a command). Code sections are also differentiated between actual code, and 'tentative' code (ie, areas that may - represent code sections, but haven't actually been executed yet). Such + represent code sections, but haven't actually been executed yet). Such tentative code is marked with a '*' symbol.
  • Supports visual representation of the bitmap data of graphics areas, @@ -142,9 +142,9 @@ present in the debugger):

    For space reasons, the Prompt, TIA, I/O and Audio displays are split into 4 tabs, only one of which is visible at a time. You can use the mouse or -keyboard to select which tab you want to view. Pressing Shift with the left +keyboard to select which tab you want to view. Pressing Shift with the left or right arrow keys cycles between tabs from right-to-left and left-to-right, -respectively. Pressing Tab cycles between widgets in the current tab (except +respectively. Pressing Tab cycles between widgets in the current tab (except for in the Prompt area, where 'tab' is used for something else).

    You can also enter the debugger at emulator startup by use the 'debug' command on the command line, or alternatively within the ROM launcher in 'Power-on options': @@ -164,7 +164,7 @@ for in the Prompt area, where 'tab' is used for something else).

    frame (scanline 262, for NTSC games). This is because Stella only checks for keystrokes once per frame. Once in the debugger, you can control execution by stepping one instruction, scanline, or frame at a time -(or more than one at a time, using commands in the prompt). You can +(or more than one at a time, using commands in the prompt). You can also set breakpoints or traps, which will cause the emulator to enter the debugger when they are triggered, even if it happens in mid-frame.

    @@ -209,11 +209,11 @@ Bash-style commands are also supported:

    Shift-HomeScroll to beginning of commands Shift-EndScroll to end of commands -

    You can also scroll with the mouse. Copy and paste is not yet supported.

    +

    You can also scroll with the mouse. Copy and paste is not yet supported.

    -

    To see the available commands, enter "help". For extended help, type "help cmd", -where 'cmd' is the command you wish to know about. The available commands are listed -at the end of this section. Bash-style tab completion is supported for commands, +

    To see the available commands, enter "help". For extended help, type "help cmd", +where 'cmd' is the command you wish to know about. The available commands are listed +at the end of this section. Bash-style tab completion is supported for commands, labels and functions (see below).

    For now, there are some functions that only exist in the prompt. We @@ -427,7 +427,7 @@ end of a frame. This is different from how a real 2600 works, but most ROMs only check for input once per frame anyway.

    Conditional breaks appear in "listbreaks", numbered starting from -zero. You can remove a cond-break with "delbreakif number", where +zero. You can remove a cond-break with "delbreakif number", where the number comes from "listbreaks" or by entering the same conditional break again.

    Any time the debugger is entered due to a trap, breakpoint, or @@ -460,7 +460,7 @@ presses both Select and Reset:

    User-defined functions appear in "listfunctions", which shows the label -and expression for each function. Functions can be removed with +and expression for each function. Functions can be removed with "delfunction label", where the labels come from "listfunctions".

    If you've defined a lot of complex functions, you probably will @@ -494,14 +494,14 @@ of this file will depend on the version of Stella, as follows:

    Note that these '.stella' script files are only accessed if you enter -the debugger at least once during a program run. This means you can create +the debugger at least once during a program run. This means you can create these files, and not worry about slowing down emulation unless you're actively using the debugger.

    Built-in Functions

    Stella has some pre-defined functions for use with the "breakif" -command. These allow you to break and enter the debugger on various +command. These allow you to break and enter the debugger on various conditions without having to define the conditions yourself.

    Built-in functions and pseudo-registers always start with an _ @@ -538,7 +538,7 @@ will show you a list of them.

    These "registers" are provided for you to use in your conditional breaks. They're not registers in the conventional sense, since they don't exist in -a real system. For example, while the debugger keeps track of the number +a real system. For example, while the debugger keeps track of the number of scanlines in a frame, a real system would not (there is no register that holds 'number of scanlines' on an actual console).

    @@ -603,8 +603,8 @@ or memory.

    Traps can also combined with a condition ("trapif"). If an access to a memory address is caught, the condition is evaluated additionally. -Only if the condition is true too, the emulations stops. -

    +Only if the condition is true too, the emulations stops. For details +about conditions see Conditional Breaks described above.

    An example: you are debugging a game, and you want to stop the emulation and enter the debugger whenever RESP0 is strobed. You'd use @@ -619,17 +619,18 @@ that triggered the trap. The reason for this is simple: until the instruction is executed, the emulator can't know it's going to hit a trap. After the trap is hit, the instruction is done executing, and whatever effects it may have had on e.g. the TIA state have already -happened... but we don't have a way to run the emulated VCS in reverse, +happened... but we don't have a way to run the emulated VCS in reverse, so the best we can do is stop before the next instruction runs.

    Traps come in two varieties: read access traps and write access traps. It is possible to set both types of trap on the same address (that's what the plain "trap" command does). To set a read or write only trap, -use "trapread(if)" or "trapwrite(if)". To remove a trap, you just attempt -to set it again: the commands actually toggle the trap on & off. You -can also get rid of all traps at once with the "cleartraps" command.

    +use "trapread(if)" or "trapwrite(if)". -

    Use "listtraps" to see all enabled traps.

    +

    All traps appear in "listtraps", numbered starting from zero. You +can remove a trap with "deltrap number", where the number comes from +"listtraps" or by entering the identical trap again. You can get rid of +all traps at once with the "cleartraps" command.

    Prompt commands:

    @@ -658,6 +659,7 @@ clearsavestateifs - Clear all savestate points delbreakif - Delete conditional breakif <xx> delfunction - Delete function with label xx delsavestateif - Delete conditional savestate point <xx> + deltrap - Delete trap <xx> delwatch - Delete watch <xx> disasm - Disassemble address xx [yy lines] (default=PC) dump - Dump data at address <xx> [to yy] [0..7, dumps to file] @@ -743,7 +745,7 @@ clearsavestateifs - Clear all savestate points developer.

    Many of the variables inside the TIA can only be written to by the -6502. The debugger lets you get inside the TIA and see the contents +6502. The debugger lets you get inside the TIA and see the contents of these variables. These include the color registers, player/missile graphics and positions, and the playfield.

    @@ -794,10 +796,10 @@ in another part of the debugger).

    As with the TIA tab, most of the values here will be self-explanatory to a 2600 -developer, and almost all can be modified. However, the SWCHx registers need +developer, and almost all can be modified. However, the SWCHx registers need further explanation:

    -

    SWCHx(W) can be modified; here, the (W) stands for write. Similarly, -SWACNT/SWBCNT can be directly modified. However, the results of reading back from +

    SWCHx(W) can be modified; here, the (W) stands for write. Similarly, +SWACNT/SWBCNT can be directly modified. However, the results of reading back from the SWCHx register are influenced by SWACNT/SWBCNT, and SWCHx(R) is a read-only display reflecting this result.

    @@ -822,7 +824,7 @@ volume resulting from the two channel volumes.

    video as generated by the TIA. If a complete frame hasn't been drawn, the partial contents of the current frame will be displayed up to the current scanline, with the contents of the old frame (in black & -white) filling the rest of the display. Note that if 'phosphor mode' +white) filling the rest of the display. Note that if 'phosphor mode' or TV effects are enabled, you won't see the effects here; this shows the raw TIA image only.

    @@ -837,13 +839,13 @@ as illustrated:

  • Fill to scanline: If you've already started a partial frame draw (ie, the frame is already partially 'greyed' out), selecting this option will draw all scanlines up to the vertical position where the - mouse was clicked. Note that if you weren't in partial-frame mode, + mouse was clicked. Note that if you weren't in partial-frame mode, this option will have no effect.
  • Toggle breakpoint: Will toggle a conditional breakpoint at the scanline where the mouse was clicked. You can to use the Prompt Tab to turn the breakpoint off again.
  • Set zoom position: Influences what is shown in the TIA - zoom area (further described in part (G). The zoom area will + zoom area (further described in part (G). The zoom area will contain the area centered at the position where the mouse was clicked.
  • Save snapshot: Saves the TIA image currently shown, @@ -884,9 +886,9 @@ Position, and will range from 0 to 228).

  • (G) TIA Zoom

    Below the TIA Info (F) is the TIA Zoom area. This allows you to enlarge -part of the TIA display, so you can see fine details. Note that unlike +part of the TIA display, so you can see fine details. Note that unlike the TIA display area, this one does generate frames as the real -system would. So, if you've enabled 'phosphor mode' for a ROM, it +system would. So, if you've enabled 'phosphor mode' for a ROM, it won't be honoured here (ie, you'll see alternating frames at 30Hz display, just like on a real system).

    You can also right-click anywhere in this window to show a context menu, @@ -894,7 +896,7 @@ as illustrated:

    These options allow you to zoom in on the image for even greater detail. If you click on the output window, you can scroll around using the cursor, -PageUp/Dn and Home/End keys. You can also select the zoom position from +PageUp/Dn and Home/End keys. You can also select the zoom position from a context menu in the TIA Display.

    @@ -904,7 +906,7 @@ a context menu in the TIA Display.

    Below the TIA Zoom (G), there is a status line that shows the reason the debugger was entered (if a breakpoint/trap was hit), as shown:

    -

    The output here will generally be self-explanatory. Due to space concerns, +

    The output here will generally be self-explanatory. Due to space concerns, conditional breakpoints will be shown as "CBP: ...", normal breakpoints as "BP: ...", read traps as "RTrap: ..." and write traps as "WTrap: ...". See the "Breakpoints" section for details.

    @@ -918,13 +920,13 @@ See the "Breakpoints" section for details.

    All the registers and flags are displayed, and can be changed by double-clicking on them (to the left). Flags are toggled on double-click. Selected registers here can also be changed by using the "Data Operations" buttons, -further described in (J). All items are shown in hex. Any label defined for the -current PC value is shown to the right. Decimal and binary equivalents +further described in (J). All items are shown in hex. Any label defined for the +current PC value is shown to the right. Decimal and binary equivalents are shown for SP/A/X/Y to the right (first decimal, then binary).

    The column to the far right shows the 'source' of contents of the respective -registers. For example, consider the command 'LDA ($80),Y'. The operand of +registers. For example, consider the command 'LDA ($80),Y'. The operand of the command resolves to some address, which isn't always easy to determine at -first glance. The 'Src Addr' area shows the actual resulting operand/address +first glance. The 'Src Addr' area shows the actual resulting operand/address being used with the given opcode.

    There's not much else to say about the CPU widget: if you know 6502 assembly, it's pretty self-explanatory. If you don't, well, you should @@ -938,8 +940,8 @@ learn :)

    the RIOT RAM (K), depending on which of these widgets is currently active.

    Each of these buttons also have a keyboard shortcut (indicated in square -brackets). In fact, many of the inputboxes in various parts of the debugger -respond to these same keyboard shortcuts. If in doubt, give them a try.

    +brackets). In fact, many of the inputboxes in various parts of the debugger +respond to these same keyboard shortcuts. If in doubt, give them a try.

       0   [z]    - Set the current location/register to zero.
       Inv [i !]  - Invert the current location/register [toggle all its bits].
    @@ -963,13 +965,13 @@ of the 2600's zero-page RAM.

    To change a RAM location, either double-click on it or press Enter while it's highlighted. Enter the new value (hex only for now, sorry), then press Enter to make the change. If you change your mind, press Escape -and the original value will be restored. The currently selected RAM cell +and the original value will be restored. The currently selected RAM cell can also be changed by using the Data operations buttons/associated shortcut keys (J).

    The 'Undo' button in the upper right should be self-explanatory; it will -undo the most previous operation to one cell only. The 'Revert' button is -more comprehensive. It will undo all operations on all cells +undo the most previous operation to one cell only. The 'Revert' button is +more comprehensive. It will undo all operations on all cells since you first made a change.

    The UI objects at the bottom refer to the currently selected RAM cell. The 'label' textbox shows the label attached to this RAM location (if any), @@ -985,19 +987,19 @@ energy, but it's also very useful when debugging to determine which memory location holds which quantity.

    To search RAM, click 'Search' and enter a byte value into the search editbox (0-255). -All matching values will be highlighted in the RAM widget. If 'Search' is clicked +All matching values will be highlighted in the RAM widget. If 'Search' is clicked and the input is empty, all RAM locations are highlighted.

    The 'Compare' button is used to compare the given value using all -addresses currently highlighted. This may be an absolute number (such as 2), -or a comparative number (such as -1). Using a '+' or '-' operator +addresses currently highlighted. This may be an absolute number (such as 2), +or a comparative number (such as -1). Using a '+' or '-' operator means 'search addresses for values that have changed by that amount'.

    The 'Reset' button resets the entire operation; it clears the highlighted addresses and allows another search.

    The following is an example of inspecting all addresses that have decreased by 1:

      -
    • Click 'Search' with empty input. All address/values are highlighted
    • +
    • Click 'Search' with empty input. All address/values are highlighted
    • Exit debugger mode and lose a life, let your energy decrease, or do whatever it is you're trying to debug
    • Enter debugger mode again, click 'Compare' and and enter a '-1' for input. @@ -1014,28 +1016,28 @@ decreased by 1:


      (M) ROM Disassembly

      This area contains a disassembly of the current bank of ROM. If a symbol -file is loaded, the disassembly will have labels. Even without a symbol file, the standard TIA/RIOT labels will still be present.

      +file is loaded, the disassembly will have labels. Even without a symbol file, the standard TIA/RIOT labels will still be present.

      The disassembly is often quite extensive, and whenever possible tries to automatically -differentiate between code, graphics, data and unused bytes. There are actually two -levels of disassembly in Stella. First, the emulation core tracks accesses as a game -is running, making for very accurate results. This is known as a dynamic analysis. +differentiate between code, graphics, data and unused bytes. There are actually two +levels of disassembly in Stella. First, the emulation core tracks accesses as a game +is running, making for very accurate results. This is known as a dynamic analysis. Second, the built-in Distella code does a static analysis, which tentatively fills in sections that the dynamic disassembler missed (usually because the addresses haven't been accessed at runtime yet).

      As such, code can be marked in two ways (absolute, when done by the emulation core), and tentative (when done by Distella, and the emulation core hasn't accessed it yet). Such 'tentative' code is marked with the '*' symbol, indicating that it has the potential -to be accessed as code sometime during the program run. This gives very useful information, +to be accessed as code sometime during the program run. This gives very useful information, since it can indicate areas toggled by an option in the game (ie, when a player dies, -when difficulty level changes, etc). It can also indicate whether blocks of code after +when difficulty level changes, etc). It can also indicate whether blocks of code after a relative jump are in fact code, or simply data.

      The "Bank state" is self-explanatory, and shows a summary of the current -bank information. For normal bankswitched ROMs, this will be the current bank number, -however more advanced schemes will show other types of information here. More detailed +bank information. For normal bankswitched ROMs, this will be the current bank number, +however more advanced schemes will show other types of information here. More detailed information is available in Detailed Bankswitch Information (N).

      Each line of disassembly has four fields:

      @@ -1050,32 +1052,32 @@ by the "break" command, not the conditional "breakif" breakpoints Counter isn't necessarily involved).
    • Labels: Any labels assigned to the given address, either generated automatically by Distella, read from a DASM symbol file or custom -labels created by the user. If 'PC addresses' is enabled, the address will +labels created by the user. If 'PC addresses' is enabled, the address will be shown in grey.
    • Disassembled bytes: This is either a standard 6502 mnemonic (possibly with operand), -or information about graphics and/or data. For instructions, the cycle count will be -included, separated by a semicolon. For graphics, a bitmap of the data, and the address -of the data is included. For actual data, only the address is included.
    • +or information about graphics and/or data. For instructions, the cycle count will be +included, separated by a semicolon. For graphics, a bitmap of the data, and the address +of the data is included. For actual data, only the address is included.
    • Hex bytes: These are the raw machine bytes for the code/graphics/data. Note that only code, graphics or data will show bytes and can be edited.

    At this point, we should explain the various 'types' that the disassembler -can use. These are known as 'directives', and partly correspond to configuration -options from the standalone Distella program. They are listed in order of +can use. These are known as 'directives', and partly correspond to configuration +options from the standalone Distella program. They are listed in order of decreasing hierarchy:

    +which tentatively can appear in the program counter. These can be edited in hex. +(GRP0/GRP1). These addresses are shown with a bitmap of the graphics, which +can be edited in either hex or binary. The bitmap is shown as large blocks. - + -
    CODEAddresses which have appeared in the program counter, or -which tentatively can appear in the program counter. These can be edited in hex.
    GFXAddresses which contain data stored in the player graphics registers -(GRP0/GRP1). These addresses are shown with a bitmap of the graphics, which -can be edited in either hex or binary. The bitmap is shown as large blocks.
    PGFXAddresses which contain data stored in the playfield graphics registers -(PF0/PF1/PF2). These addresses are shown with a bitmap of the graphics, which -can be edited in either hex or binary. The bitmap is shown as small dashes.
    DATAAddresses used as an operand for some opcode. These can be edited +(PF0/PF1/PF2). These addresses are shown with a bitmap of the graphics, which +can be edited in either hex or binary. The bitmap is shown as small dashes.
    DATAAddresses used as an operand for some opcode. These can be edited in hex.
    ROWAddresses not used as any of the above. These are shown up +
    ROWAddresses not used as any of the above. These are shown up to 8 per line, and cannot be edited.
    @@ -1083,7 +1085,7 @@ to 8 per line, and cannot be edited.

    For code sections, the 6502 mnemonic will be UPPERCASE for all standard instructions, or lowercase for "illegal" 6502 instructions (like "dcp"). If automatic resolving of code sections has been disabled for any reason, you'll likely see a lot -of illegal opcodes if you scroll to a data table in ROM. This can also +of illegal opcodes if you scroll to a data table in ROM. This can also occur if the disassembler hasn't yet encountered addresses in the PC. If you step/trace/scanline/frame advance into such an area, the disassembler will make note of it, and disassemble it correctly from that point on.

    @@ -1103,17 +1105,17 @@ or Scanline advance, or manually setting the PC), the disassembly will scroll to the current PC location.

    Even though ROM is supposed to be Read Only Memory, this is an -emulator: you can change ROM all you want within the debugger. The hex +emulator: you can change ROM all you want within the debugger. The hex bytes in the ROM Widget are editable. Double-click on them to edit them. When you're done, press Enter to accept the changes (in which case the cart will be re-disasembled) or Escape to cancel them. Note that only instructions that have been fully disassembled -can be edited. In particular, blank lines or 'ROW' directives -cannot be edited. Also note that certain ROMs can have -sections of address space swapped in and out dynamically. As such, changing +can be edited. In particular, blank lines or 'ROW' directives +cannot be edited. Also note that certain ROMs can have +sections of address space swapped in and out dynamically. As such, changing the contents of a certain address will change the area pointed to at -that time. In particular, modifying an address that points to internal -RAM will change the RAM, not the underlying ROM. A future release may +that time. In particular, modifying an address that points to internal +RAM will change the RAM, not the underlying ROM. A future release may graphically differentiate between RAM and ROM areas.

    The ROM Disassembly also contains a Settings dialog, accessible by right-clicking @@ -1149,14 +1151,14 @@ in either binary or hexidecimal.

  • The ROM Widget only works on ROM or zero-page RAM separately. If your game runs code from zero-page RAM, the disassembly will show addresses $80 to $FF (zero-page -RAM address space) only. Once your RAM routine returns, the ROM Widget will switch -back to ROM space ($1000 - $1FFF and mirrors). The same is true of the "disasm" +RAM address space) only. Once your RAM routine returns, the ROM Widget will switch +back to ROM space ($1000 - $1FFF and mirrors). The same is true of the "disasm" command; it will show either ROM or RAM space, not both at the same time.
  • The standard VCS memory map has the cartridge port at locations -$F000-$FFFF. However, not all the address lines exist on a 6507, so +$F000-$FFFF. However, not all the address lines exist on a 6507, so the cartridge port is "mirrored" at every other 4K chunk of address -space ($1000, $3000, up to $D000). Some developers find it easier +space ($1000, $3000, up to $D000). Some developers find it easier to think of the different banks of ROM as being at different addresses (such as: Bank 0 at $D000 and bank 1 at $F000). When such a ROM runs, the Program Counter can point to one of the mirrors instead of the main @@ -1175,7 +1177,7 @@ the same address.

  • (N) Detailed Bankswitch Information

    -

    This area shows a detailed breakdown of the bankswitching scheme. Since +

    This area shows a detailed breakdown of the bankswitching scheme. Since the bankswitch schemes can greatly vary in operation, this tab will be different for each scheme, but its specific functionality should be self-explanatory. An example of both 4K (non-bankswitched) and DPC (Pitfall II) is as follows:

    @@ -1192,22 +1194,22 @@ Go ahead and try to change something!

    (O) Detailed Cartridge extended RAM Information

    If applicable, this area shows a detailed breakdown of any extra RAM supported by -the bankswitching scheme. Since the bankswitch schemes can greatly vary in operation, +the bankswitching scheme. Since the bankswitch schemes can greatly vary in operation, this tab will be different for each scheme, but its specific functionality should be -self-explanatory. An example of both F8SC (8K Atari + ram) and DPC (Pitfall II) is +self-explanatory. An example of both F8SC (8K Atari + ram) and DPC (Pitfall II) is as follows:

    The RAM is shown in a grid similar to how zero-page RAM is shown in M6532/RIOT RAM -(K) and (L). See those sections for a description of usage. +(K) and (L). See those sections for a description of usage.

    In the cases where RAM is always mapped into the same place in the cartridge -address space (such as Sara-chip), the RAM addresses are labeled as such. In other +address space (such as Sara-chip), the RAM addresses are labeled as such. In other cases, such as when the RAM is either quiescent (and mapped in at different places), or not viewable by the 6507 at all, the RAM addresses are labeled as the cart sees them. -In the examples above, F8SC RAM is labeled starting at its read port, or $F080. However, +In the examples above, F8SC RAM is labeled starting at its read port, or $F080. However, the RAM in the DPC scheme is not viewable by the 6507, so its addresses start from $0. @@ -1239,21 +1241,21 @@ Control-R and Control-Shift-R.


    Distella Configuration Files

    As mentioned in ROM Disassembly (M), Stella supports the following directives: -CODE/GFX/PGFX/DATA/ROW. While the debugger will try to automatically mark address -space with the appropriate directive, there are times when it will fail. There are +CODE/GFX/PGFX/DATA/ROW. While the debugger will try to automatically mark address +space with the appropriate directive, there are times when it will fail. There are several options in this case:

    1. Manually set the directives: Directives can be set in the debugger -prompt with the code/gfx/pgfx/data/row commands. These accept an address range -for the given directive type. Setting a range with the same type a second time +prompt with the code/gfx/pgfx/data/row commands. These accept an address range +for the given directive type. Setting a range with the same type a second time will remove that directive from the range.
    2. Use configuration files: Configuration files can be used to automatically -load a list of directives when a ROM is loaded. These files can be generated with the -'saveconfig' command, and loaded with the 'loadconfig' command. There are also +load a list of directives when a ROM is loaded. These files can be generated with the +'saveconfig' command, and loaded with the 'loadconfig' command. There are also 'listconfig' and 'clearconfig' commands to show and erase (respectively) the current -directive listing. Upon opening the debugger for the first time, Stella attempts -to load a configuration file from several places. For this example, assume a ROM -named "rr.a26", with properties entry "River Raid". Attempts will be made as follows: +directive listing. Upon opening the debugger for the first time, Stella attempts +to load a configuration file from several places. For this example, assume a ROM +named "rr.a26", with properties entry "River Raid". Attempts will be made as follows:
      • ROM dir based on properties entry name: River Raid.cfg
      • ROM dir based on actual ROM name: rr.cfg
      • @@ -1307,15 +1309,15 @@ but it helps to know at least a little about 6502 programming.

        symbols at the bottom of the screen).
      • Enter the debugger by pressing the ` (backquote) key. Don't get - killed before you do this, though. You should still have all 5 lives.
      • + killed before you do this, though. You should still have all 5 lives.
      • In the RAM display, click the "Search" button and enter "5" for input. This searches RAM for your value and highlights all addresses that match - the input. You should see two addresses highlighted: "00a5" and "00ba". + the input. You should see two addresses highlighted: "00a5" and "00ba". These are the only two addresses that currently have the value 5, so they're the most likely candidates for "number of lives" counter. (However, some games might actually store one less than the real number of lives, or - one more, so you might have to experiment a bit. Since this is a "rigged + one more, so you might have to experiment a bit. Since this is a "rigged demo", I already know Battlezone stores the actual number of lives. Most games do, actually).
      • @@ -1325,9 +1327,9 @@ but it helps to know at least a little about 6502 programming.

      • Get killed! Ram an enemy tank, or let him shoot you. Wait for the explosion to finish. You will now have 4 lives.
      • -
      • Enter the debugger again. Click the "Compare" button in RAM widget and enter - a value of 4. Now the RAM widget should only show one highlighted address: - "00ba". What we did was search within our previous results (the ones that +
      • Enter the debugger again. Click the "Compare" button in RAM widget and enter + a value of 4. Now the RAM widget should only show one highlighted address: + "00ba". What we did was search within our previous results (the ones that were 5 before) for the new value 4. Address $00ba used to have the value 5, but now it has 4. This means that Battlezone (almost certainly) stores the current number of lives at address $00ba.
      • @@ -1355,9 +1357,9 @@ but it helps to know at least a little about 6502 programming.

        Program Counter pointing to the instruction *after* the one that wrote to location $ba. -
      • Once in the debugger, look at the ROM display. The PC should be at address +
      • Once in the debugger, look at the ROM display. The PC should be at address $f238, instruction "LDA $e1". You want to examine a few instructions before - the PC, so scroll up using the mouse or arrow keys. Do you see + the PC, so scroll up using the mouse or arrow keys. Do you see the one that affects the lives counter? That's right, it's the "DEC $ba" at location $f236.
      • @@ -1382,9 +1384,9 @@ but it helps to know at least a little about 6502 programming.

            $ea $ea
        -

        Select the line at address $f236 and enter 'ROM patch' mode. This is done - by either double-clicking the line, or pressing enter. Then delete the bytes - with backspace key and enter "ea ea". Another way to do this would have been +

        Select the line at address $f236 and enter 'ROM patch' mode. This is done + by either double-clicking the line, or pressing enter. Then delete the bytes + with backspace key and enter "ea ea". Another way to do this would have been to enter "rom $f236 $ea $ea" in the Prompt widget. diff --git a/docs/index.html b/docs/index.html index 4016d5652..05836b070 100644 --- a/docs/index.html +++ b/docs/index.html @@ -232,8 +232,8 @@ developed for Linux by Bradford W. Mott, it is now maintained by Stephen Anthony. Stella allows you to enjoy all of your favorite 2600 games once again by emulating the 2600's hardware with - software. Stella is written in C++, which allows it to be ported to other - operating systems and architectures. Since its original release Stella has + software. Stella is written in C++, which allows it to be ported to other + operating systems and architectures. Since its original release Stella has been ported to AcornOS, AmigaOS, DOS, FreeBSD, Linux, MacOS, OpenStep, OS/2, Unix, and Windows, as well as consoles such as Sega Dreamcast, GP2X, Nintendo DS and Playstation Portable (among others). @@ -371,8 +371,8 @@

        Other

        Stella is extremely portable, and in its lifetime has been ported to almost every - platform where the SDL library exists. It is 32/64-bit and endian clean in Linux/Unix, MacOSX - and Windows. The Stella Team is interested in hearing about any problems you may + platform where the SDL library exists. It is 32/64-bit and endian clean in Linux/Unix, MacOSX + and Windows. The Stella Team is interested in hearing about any problems you may encounter with diverse operating systems and CPU types.

        @@ -380,8 +380,8 @@

        2. Installation

        -

        Stella is distributed in both source and binary form. In general, you should always - download and install the appropriate binary version. Compiling from source is only +

        Stella is distributed in both source and binary form. In general, you should always + download and install the appropriate binary version. Compiling from source is only recommended for developers, or if the binary version doesn't work for some reason. Once you have a Stella distribution you should follow the instructions for your operating system given below.

        @@ -458,15 +458,15 @@

        Cartridges

        -

        Most games for the Atari 2600 came on cartridges. A cartridge usually +

        Most games for the Atari 2600 came on cartridges. A cartridge usually consists of a single Read Only Memory (ROM) chip which contains the data and - code for the game. Plugging a cartridge into the Atari 2600 allows the 2600's + code for the game. Plugging a cartridge into the Atari 2600 allows the 2600's microprocessor to access the program stored on the cartridge.

        In a similar way you must "plug" a copy of a cartridge into Stella when you - want to play it. Having a ROM image / BIN file, of the cartridge allows you to - do this. A ROM image is a file, which contains the actual data and code read - from the cartridge. There are several ways to obtain a ROM image of a + want to play it. Having a ROM image / BIN file, of the cartridge allows you to + do this. A ROM image is a file, which contains the actual data and code read + from the cartridge. There are several ways to obtain a ROM image of a cartridge:

          @@ -492,19 +492,19 @@

          Supercharger games were not stored on cartridges instead they were stored on cassette tapes. The Supercharger, which plugged into the Atari 2600's cartridge slot, loaded games into its 6K of Random Access Memory (RAM) using a - standard audio cassette player. The Supercharger also supported multi-loading, + standard audio cassette player. The Supercharger also supported multi-loading, which allowed games to be broken into several segments and loaded at different - times. This was useful for large games which had distinct parts such as role + times. This was useful for large games which had distinct parts such as role playing games.

          Most of the available Supercharger ROM images are stored in 8448 bytes files. However, ROM images of multi-load games are sometimes stored in a set of 8448 byte files. The names of these files have a two character sequence number in - them which indicates what load they are. The sequence starts with zero, skips + them which indicates what load they are. The sequence starts with zero, skips a few numbers and then increments by one.

          Stella supports multi-load games, however, the set of ROM images must be - combined into a single ROM image file. For example to create a multi-load ROM + combined into a single ROM image file. For example to create a multi-load ROM image file for Survival Island you would do the following under Unix:

             % cat survivl0.bin survivl6.bin survivl7.bin > survivl.bin
          @@ -534,7 +534,7 @@

          Integrated GUI

          -

          Stella contains an integrated GUI for all ports. Commandline support is also +

          Stella contains an integrated GUI for all ports. Commandline support is also available for those who want to use it.

          If you start Stella and do not specify a ROM image, it will start in @@ -542,21 +542,21 @@

          If this is your first time starting Stella, you will be asked to select the - default ROM directory to use. This is where you have all your ROMs, - collected as described in the previous section. Several dialogs will be shown, similar + default ROM directory to use. This is where you have all your ROMs, + collected as described in the previous section. Several dialogs will be shown, similar to the following:

             

          -

          The browser should be self-explanatory. The 'Go Up' button moves to the parent +

          The browser should be self-explanatory. The 'Go Up' button moves to the parent folder (if it exists), and the 'Base Dir' button moves to the base directory where, - by default, all Stella-related files are stored. Double-clicking an item will - enter that directory. Click 'Choose' to select the location, or 'Cancel' to exit - the browser. Note that if you don't select a ROM directory now, you will be prompted + by default, all Stella-related files are stored. Double-clicking an item will + enter that directory. Click 'Choose' to select the location, or 'Cancel' to exit + the browser. Note that if you don't select a ROM directory now, you will be prompted again the next time Stella is started.

          At this point, you may want to set the locations for snapshots and other - external paths. This is described in more detail in + external paths. This is described in more detail in Advanced Configuration - Snapshot Settings and Advanced Configuration - Config Paths. These settings are optional, and can be left at the defaults if you won't be using @@ -564,13 +564,13 @@

          Once you've correctly set the default ROM directory, you can start emulation by selecting a ROM and pressing 'Enter' or clicking 'Select', or double-clicking a ROM. - Note that some games require you to 'Reset' the console before you start playing. In this + Note that some games require you to 'Reset' the console before you start playing. In this case, you need to hit the virtual reset switch, which by default is the F2 key. Also, some games may require that you press the joystick fire button to begin, - which by default is the Left Control or Space key(s). If a game uses a + which by default is the Left Control or Space key(s). If a game uses a more complex controller, see Getting Started - Keyboard Layout - for more information. To exit a game and re-enter the ROM launcher, press the 'Escape' + for more information. To exit a game and re-enter the ROM launcher, press the 'Escape' key.

          Using the 'Search' textbox in the upper-right of the ROM launcher, the @@ -584,12 +584,12 @@ 'virtual' switches in Stella (ie, the commands associated with the function keys as described in Getting Started - Keyboard Layout). - However, another alternative is available. Pressing the '\' key toggles + However, another alternative is available. Pressing the '\' key toggles a command menu dialog as follows:

          This dialog contains a set of buttons that represent the same functionality - as the function keys. You may find this useful if you cannot remember all + as the function keys. You may find this useful if you cannot remember all the function key events, or you wish to use Stella without a keyboard (ie, in a standalone gaming system).

        @@ -598,7 +598,7 @@

        The Atari 2600 console controls and controllers are mapped to the computer's - keyboard as shown in the following tables. However, most of these events can be + keyboard as shown in the following tables. However, most of these events can be remapped to other keys on your keyboard or buttons on your joystick (see Advanced Configuration - Event Remapping). The tables below show the default settings.

        @@ -1647,7 +1647,7 @@

        Some Atari (virtual) controllers are simulated with more than one computer controller, and there are several special cases where controllers are active in certain modes only, as the table - below shows. Items marked as (+ extra) indicate that the computer controller may not have + below shows. Items marked as (+ extra) indicate that the computer controller may not have enough buttons/axes/etc. to fully emulate the device, so extra functionality must be mapped to other controllers.

        @@ -1763,9 +1763,9 @@

        The default options in Stella are meant to cater to as many situations as - possible. As such, you may never need to change many of its options. However, + possible. As such, you may never need to change many of its options. However, Stella is very configurable, and if you want to change its behaviour in some way, - there's likely a configuration option to do so. The remainder of this (lengthy) + there's likely a configuration option to do so. The remainder of this (lengthy) section details every configurable option.

        1. Using the Command Line

        @@ -1817,7 +1817,7 @@
        -framerate <number>
        - Display the given number of frames per second. Normally, Stella + Display the given number of frames per second. Normally, Stella will determine framerate based on number of scanlines. Setting this to 0 automatically enables auto-frame calculation (ie, framerate based on scanlines). @@ -1828,14 +1828,14 @@ Determines type of wait to perform between processing frames. Sleep will release the CPU as much as possible, and is the preferred method on laptops (and other low-powered devices) - and when using VSync. Busy will emulate z26 busy-wait + and when using VSync. Busy will emulate z26 busy-wait behaviour, and use all possible CPU time, but may eliminate graphical 'tearing' in software mode.
        -uimessages <1|0>
        - Enable or disable display of message in the UI. Note that messages + Enable or disable display of message in the UI. Note that messages indicating serious errors override this setting, and are always shown. @@ -1847,14 +1847,14 @@
        -fragsize <number>
        - Specify the sound fragment size to use. Linux/Mac seems to work + Specify the sound fragment size to use. Linux/Mac seems to work with 512, Windows usually needs 1024.
        -freq <number>
        Set sound sample output frequency (11025, 22050, 31400, 44100, 48000) - Default is 31400. Do not change unless you experience sound + Default is 31400. Do not change unless you experience sound issues. @@ -1893,7 +1893,7 @@
        -tia.dbgcolors <roygbp>
        Assigns the colours (R)ed, (O)range, (Y)ellow, (G)reen, (B)lue and (P)urple - to each graphical register P0/M0/P1/M1/PF/BL, respectively. Currently, + to each graphical register P0/M0/P1/M1/PF/BL, respectively. Currently, these change be changed around to apply different colours to the respective register. @@ -1908,9 +1908,9 @@
        -tv.phosphor <always|byrom>
        - Determines how phosphor mode is enabled. If 'always', then the + Determines how phosphor mode is enabled. If 'always', then the ROM properties entry is ignored, and phosphor mode is always turned - on. Otherwise, the ROM properties determine whether phosphor mode + on. Otherwise, the ROM properties determine whether phosphor mode is used for each ROM. @@ -1918,7 +1918,7 @@
        -tv.phosblend <0 - 100>
        Enable default phosphor blending level; 0 implies no mixing, and 100 - is full mixing (not recommended). Note that this doesn't actually + is full mixing (not recommended). Note that this doesn't actually enable phosphor mode; that is done for each ROM in the ROM properties. Higher blend values will intensify the phosphor effect. Depending on your display and personal preferences, the optimal default for you may vary. @@ -2006,12 +2006,12 @@
        -loglevel <0|1|2>
        - Indicates level of logging to perform while the application is running. Zero completely disables logging (except for serious errors), while the remaining numbers show increasingly more detail. + Indicates level of logging to perform while the application is running. Zero completely disables logging (except for serious errors), while the remaining numbers show increasingly more detail.
        -logtoconsole <1|0>
        - Indicates that logged output should be printed to the console/commandline as it's being collected. An internal log will still be kept, and the amount of logging is still controlled by 'loglevel'. + Indicates that logged output should be printed to the console/commandline as it's being collected. An internal log will still be kept, and the amount of logging is still controlled by 'loglevel'. @@ -2020,14 +2020,14 @@ All values within the deadzone are treated as zero-axis values, while only those values outside are registered as valid input. Accepts a number from 0 - 29, and uses the formula - 3200 + number * 1000. So the possible deadzone values + 3200 + number * 1000. So the possible deadzone values range from 3200 to 32200.
        -joyallow4 <1|0>
        Allow all 4 directions on a joystick to be pressed - simultaneously. Bumper Bash ignores this setting, + simultaneously. Bumper Bash ignores this setting, and always allows all 4 directions. @@ -2079,8 +2079,8 @@
        -ctrlcombo <1|0>
        - Use control-x key combos. This is normally enabled, since the - 'Quit' command is tied to 'Control-q'. However, there are times when + Use control-x key combos. This is normally enabled, since the + 'Quit' command is tied to 'Control-q'. However, there are times when a 2-player game is using either the 'f' or 'r' keys for movement, and pressing Control (for Fire) will perform an unwanted action associated with Control-r or Control-f. @@ -2144,7 +2144,7 @@
        -listrominfo
        Prints relevant contents of the Stella ROM database, one ROM per line, - and then exit Stella. This can be used for external frontends. + and then exit Stella. This can be used for external frontends. @@ -2186,7 +2186,7 @@
        -listdelay <delay>
        Set the amount of time to wait between treating successive keypresses as a single word in list widgets (value can range - from 300-1000). Use '0' to disable list-skipping completely, + from 300-1000). Use '0' to disable list-skipping completely, @@ -2248,7 +2248,7 @@ -

        The following are useful to developers. Only use them if you know what +

        The following are useful to developers. Only use them if you know what you're doing! Note that in all cases, the values supplied to the arguments are not case sensitive.

        @@ -2261,7 +2261,7 @@
        -dis.resolve <1|0>
        Try to differentiate between code vs. data sections in the - disassembler. See the Debugger section for more information. + disassembler. See the Debugger section for more information. @@ -2304,34 +2304,34 @@
        -holdjoy0 <U,D,L,R,F>
        Start the emulator with the left joystick direction/button held down - (ie, use 'UF' for up and fire). After entering the emulation, you will + (ie, use 'UF' for up and fire). After entering the emulation, you will have to press and release the direction again to release the event.
        -holdjoy1 <U,D,L,R,F>
        Start the emulator with the right joystick direction/button held down - (ie, use 'UF' for up and fire). After entering the emulation, you will + (ie, use 'UF' for up and fire). After entering the emulation, you will have to press and release the direction again to release the event.
        -holdselect
        - Start the emulator with the Game Select switch held down. After entering + Start the emulator with the Game Select switch held down. After entering the emulation, you will have to press and release 'Select' to release the event.
        -holdreset
        - Start the emulator with the Game Reset switch held down. After entering + Start the emulator with the Game Reset switch held down. After entering the emulation, you will have to press and release 'Reset' to release the event.
        -bs <type>
        - Set "Cartridge.Type" property. See the Game Properties section + Set "Cartridge.Type" property. See the Game Properties section for valid types. @@ -2367,13 +2367,13 @@
        -lc <type>
        - Set "Controller.Left" property. See the Game Properties + Set "Controller.Left" property. See the Game Properties section for valid types.
        -rc <type>
        - Set "Controller.Right" property. See the Game Properties + Set "Controller.Right" property. See the Game Properties section for valid types. @@ -2396,7 +2396,7 @@
        -format <format>
        - Set "Display.Format" property. See the Game Properties section + Set "Display.Format" property. See the Game Properties section for valid formats. @@ -2424,8 +2424,8 @@
        -thumb.trapfatal <1|0>
        The default of true allows the Thumb ARM emulation to - throw an exception and enter the debugger on fatal errors. When disabled, such - fatal errors are simply logged, and emulation continues. Do not use this + throw an exception and enter the debugger on fatal errors. When disabled, such + fatal errors are simply logged, and emulation continues. Do not use this unless you know exactly what you're doing, as it changes the behaviour as compared to real hardware. @@ -2701,11 +2701,11 @@ remapped).

        Note that there are currently two separate event modes in Stella; emulation - mode and user-interface (UI) mode. Each mode has separate mappings, so (for example) + mode and user-interface (UI) mode. Each mode has separate mappings, so (for example) while in emulation mode, the left arrow could mean 'joystick 0 left', while in UI - mode it could mean 'move cursor left'. Emulation mode occurs whenever you're - actually playing a game. UI mode occurs whenever a user interface is present - (ROM launcher, debugger, settings menu, etc.). Because of these different modes, + mode it could mean 'move cursor left'. Emulation mode occurs whenever you're + actually playing a game. UI mode occurs whenever a user interface is present + (ROM launcher, debugger, settings menu, etc.). Because of these different modes, there are two separate mapping areas.

        To remap an event: @@ -2715,7 +2715,7 @@ Otherwise, click the 'UI Events' tab for user interface events.

      • Select event you want to remap and click the 'Map' button.
      • Press a key or a joystick button, and that key/button will be bound - to the selected event. If nothing seems to happen, either Stella + to the selected event. If nothing seems to happen, either Stella can't see the input device, or the selected event doesn't support being remapped to the input device.
      • Cancel a remap in progress by clicking 'Cancel', erase a mapping by @@ -2768,7 +2768,7 @@

        4. ROM Launcher

        -

        Several options are configurable in the ROM launcher. The size of the +

        Several options are configurable in the ROM launcher. The size of the launcher and fonts, as well as the 'ROM info viewer' can be changed in UI Settings => Launcher dialog, as shown below:

        @@ -2776,21 +2776,21 @@ viewer', which is described below.

        Stella supports viewing snapshots and ROM properties of the currently - selected ROM in the ROM launcher. Support is automatic, as long as your - snapshot directory contains snapshots in the appropriate format. An + selected ROM in the ROM launcher. Support is automatic, as long as your + snapshot directory contains snapshots in the appropriate format. An archive of updated snapshots will be available on the Stella webpage. This archive may be updated periodically as new ROMs are found, and also - for each new release of Stella. Note that the snapshots can be any size + for each new release of Stella. Note that the snapshots can be any size generated by Stella; they will be resized accordingly.

        Currently, there are several restrictions for this feature:

        1. The ROM info viewer can be shown in 1x or 2x mode only.
        2. To view snapshots in 1x mode, the ROM launcher window must be sized at - least 640x480. If the launcher isn't large enough, the functionality + least 640x480. If the launcher isn't large enough, the functionality will be disabled.
        3. To view snapshots in 2x mode, the ROM launcher window must be sized at - least 1000x760. If the launcher isn't large enough, an attempt will + least 1000x760. If the launcher isn't large enough, an attempt will be made to use 1x mode.
        @@ -2807,25 +2807,25 @@

        The text box in the upper right corner can be used to narrow down the - results in the ROM listing. When this box is empty, all files are shown + results in the ROM listing. When this box is empty, all files are shown (subject to the restrictions from the filtering option, explained below). Typing characters here will show only those files that match that - pattern. For example, typing 'Activision' will show only files that - contain the word 'Activision' in their name. This is very useful for - quickly finding a group of related ROMs. Note that the search is not + pattern. For example, typing 'Activision' will show only files that + contain the word 'Activision' in their name. This is very useful for + quickly finding a group of related ROMs. Note that the search is not case sensitive, so you don't need to worry about capital or lower-case letters.

        The ROM launcher also contains a context menu, selected by clicking the - right mouse button anywhere in the current window. This context menu + right mouse button anywhere in the current window. This context menu contains the following items:

        1. Power-on options: Selecting this option shows a dialog whereby ROM properties can be temporarily overridden, and joystick/console buttons can be - temporarily held down. Selecting options from this dialog will cause all ROMs launched - after that to use those properties you specify. Clicking Defaults will disable - its functionality, and use ROM properties as defined by the ROM itself. The dialog is as + temporarily held down. Selecting options from this dialog will cause all ROMs launched + after that to use those properties you specify. Clicking Defaults will disable + its functionality, and use ROM properties as defined by the ROM itself. The dialog is as follows (See Advanced Configuration - Game Properties for more information concerning ROM properties):

          @@ -2852,13 +2852,13 @@
        2. Filter listing: Selecting this option shows a dialog whereby - one can filter the types of files shown in the listing. The dialog is as + one can filter the types of files shown in the listing. The dialog is as follows:

          Currently, the choices are as follows:

          • All files - self explanatory, show all files in the ROM - listing. This is the default, and emulates the behaviour of + listing. This is the default, and emulates the behaviour of all previous versions of Stella.
          • All roms - show only files with a valid ROM extension. Currently, this means extensions .a26, .bin, .rom, .gz, .zip.
          • @@ -2868,7 +2868,7 @@
          • Reload listing: Selecting this performs a reload of the - current listing. It is an alternative to pressing the Control-r + current listing. It is an alternative to pressing the Control-r key combo.
          • @@ -2877,29 +2877,29 @@

            Stella has the ability to rename all your ROMs according to the name - specified in the properties database. This is useful if you've downloaded + specified in the properties database. This is useful if you've downloaded ROMs in DOS 8.3 naming format, and wish the filenames to be more descriptive, or the current filenames are too large to see in the launcher.

            This feature is accessible from Options => Audit ROMs, and is only - available while in ROM launcher mode. The dialog box for this feature + available while in ROM launcher mode. The dialog box for this feature is as follows:

            Simply select the ROM path with the 'Audit path' button, and click the - 'Audit' button. The ROMs will then be renamed according to their internal - properties. When the operation is complete, the number of ROMs that were + 'Audit' button. The ROMs will then be renamed according to their internal + properties. When the operation is complete, the number of ROMs that were renamed (as well as ones that weren't) will be shown.

            There are several items to take note of:

              -
            • THIS OPERATION CANNOT BE UNDONE. I cannot stress this +
            • THIS OPERATION CANNOT BE UNDONE. I cannot stress this enough; if you aren't completely sure you want to rename your ROMs, - don't use this function. There is no undo feature, and one won't be + don't use this function. There is no undo feature, and one won't be added.
            • Only filenames that Stella considers to be valid ROMs will be - considered. Currently, this means files that end in '.a26', - '.bin', '.rom', '.gz' and '.zip'. Files which don't have these + considered. Currently, this means files that end in '.a26', + '.bin', '.rom', '.gz' and '.zip'. Files which don't have these extensions will be ignored.
            • If a valid ROM doesn't have a properties entry, it will be ignored.
            • @@ -2922,12 +2922,12 @@
              • The first device found will act as the left game port - on a real Atari. Depending on the device, Stella will detect it as + on a real Atari. Depending on the device, Stella will detect it as either the left joystick, paddles 0 & 1, the left driving controller, left keypad, etc.
              • The second device found will act as the right game port - on a real Atari. Depending on the device, Stella will detect it as + on a real Atari. Depending on the device, Stella will detect it as either the right joystick, paddles 2 & 3, the right driving controller, right keypad, etc.
              • @@ -2943,23 +2943,23 @@

                Stella supports a real AtariVox device for the speech/SpeakJet portion - of the controller. You will need a real AtariVox device + of the controller. You will need a real AtariVox device as well as some means of connecting it to your computer (some sort of - serial port/USB adaptor). There should be drivers for your serial convertor, + serial port/USB adaptor). There should be drivers for your serial convertor, which allow your particular operating system to 'see' the device (configuring - this is outside the scope of this document). Once your operating system + this is outside the scope of this document). Once your operating system properly detects the AtariVox, you will need to tell Stella which serial - port it is connected to. This is done by using the '-avoxport' commandline + port it is connected to. This is done by using the '-avoxport' commandline argument, or by setting it in the UI under the 'Devices & Ports' tab in Advanced Configuration - Input Devices.

                Note that you must use the entire name of the port as specified by - your operating system. For example, in Windows this would be COM1, + your operating system. For example, in Windows this would be COM1, COM2, etc.; Linux and MacOSX tend to use names similar to '/dev/xxxxxx'. For now, only Linux/UNIX, MacOSX, and Windows are supported.

                Support for the EEPROM portion of the AtariVox and SaveKey is currently - emulated. That is, a file will be created on your computer simulating the + emulated. That is, a file will be created on your computer simulating the EEPROM; the actual EEPROM hardware itself will not be accessed or modified. This is very useful in the testing stages of creating a new game, since writing to a real EEPROM many times will eventually wear it out.

                @@ -2995,9 +2995,9 @@
        3. Note that these EEPROM files will be created when necessary, and - initialized as a real EEPROM would be (containing all $FF). The + initialized as a real EEPROM would be (containing all $FF). The files can be manually deleted, which is very useful in testing - cases where a ROM is accessing the EEPROM for the first time. You can also + cases where a ROM is accessing the EEPROM for the first time. You can also reset the EEPROM to a clean state.

        @@ -3090,36 +3090,36 @@

        • Developer key-combo shortcuts, used to change TIA state dynamically - (ie, while the emulation is still running). See Keyboard Layout - + (ie, while the emulation is still running). See Keyboard Layout - Developer Keys in TIA mode for more information.
        • -
        • Commandline options influencing emulation state. See Using the Command Line - +
        • Commandline options influencing emulation state. See Using the Command Line - Developer Commands for more information.
        • -
        • Viewing TIA/console information overlaid on the TIA image. This option +
        • Viewing TIA/console information overlaid on the TIA image. This option can be enabled from the commandline or using the Alt-L key combo, and is extremely useful for viewing the current scanline count and associated - frames per second, bankswitch and display formats, etc. The following shows + frames per second, bankswitch and display formats, etc. The following shows an example of this information:

          The two lines of output describe the following:

          1. Number of scanlines in current frame, associated framerate, and - resulting display format. Note that the framerate shown is the + resulting display format. Note that the framerate shown is the internal, virtual framerate (it's calculated from the - number of scanlines). If the '*' character is present, it means - the display format was auto-detected as shown. For the given example, + number of scanlines). If the '*' character is present, it means + the display format was auto-detected as shown. For the given example, the format was auto-detected as 'NTSC'.
          2. -
          3. Cartridge information. If the '*' character is present, - it means the bankswitch format was auto-detected as shown. The item - in round brackets indicates ROM size. For the given example, +
          4. Cartridge information. If the '*' character is present, + it means the bankswitch format was auto-detected as shown. The item + in round brackets indicates ROM size. For the given example, the bankswitch type was auto-detected as 4K, and the file size was 4K (4096 bytes).

        -

        Finally, Stella contains an extensive, built-in debugger. Have a look at +

        Finally, Stella contains an extensive, built-in debugger. Have a look at this page for integrated debugger documentation.

      • @@ -3128,13 +3128,13 @@

        Stella will remember when you change a setting either at the command line or while the emulation is running, and use the settings the next time - you start the emulator. The settings are saved in a text file which can - be edited outside of Stella. This file can contain your default options, - and eliminates the need to specify them on the command line. Any + you start the emulator. The settings are saved in a text file which can + be edited outside of Stella. This file can contain your default options, + and eliminates the need to specify them on the command line. Any options specified on the command line will override those in the settings file.

        -

        The syntax for the settings file is very straightforward. Any line starting with - a ';' character is considered a comment and is ignored. Other lines must be of +

        The syntax for the settings file is very straightforward. Any line starting with + a ';' character is considered a comment and is ignored. Other lines must be of the form: command = value, where command is the same as that specified on the command line (without the '-' character), and value is dependent on the command.

        @@ -3202,7 +3202,7 @@ must be entered in hexadecimal format:
        • Per-frame RAM cheats:
          - Evaluated each frame, and apply to RAM only. Format as follows: + Evaluated each frame, and apply to RAM only. Format as follows:

              4-digit code: c041
              c0 = address
          @@ -3212,7 +3212,7 @@
           
               
        • Cheetah codes, which are explained in detail on Bob Colbert's web page, - along with a list of codes for various games. Cheetah codes + along with a list of codes for various games. Cheetah codes don't support bankswitched ROMs, so they only work for 2K or 4K ROMs. Format as follows:
          @@ -3242,8 +3242,8 @@
               
        -

        There's also the concept of one shot codes. These codes work - exactly the same as above, except they aren't saved. They are evaluated +

        There's also the concept of one shot codes. These codes work + exactly the same as above, except they aren't saved. They are evaluated once and immediately discarded.

        Here are a few cheat codes we've found:

        @@ -3262,7 +3262,7 @@ Ms Pac-Man (Stella extended codes):

        The name of the cheat database file is configurable through the '-cheatfile' commandline argument and within the application itself - (see Advanced Configuration - Config Paths). If the + (see Advanced Configuration - Config Paths). If the path for this file hasn't been set, the default filename will depend on the version of Stella, as follows:

        @@ -3292,10 +3292,10 @@ Ms Pac-Man (Stella extended codes):

        Stella maintains a log of its operations when the program first starts up, and - while it is running. In older releases, this information was only viewable from the - commandline. However, the current release allows - you to see this information from within the UI. This can be selected from the main - Options menu, where it is labelled "System Logs". Clicking on the button will show + while it is running. In older releases, this information was only viewable from the + commandline. However, the current release allows + you to see this information from within the UI. This can be selected from the main + Options menu, where it is labelled "System Logs". Clicking on the button will show a window similar to the following:

        @@ -3312,10 +3312,10 @@ Ms Pac-Man (Stella extended codes):
        -

        The log levels are self-explanatory (None, Basic, Verbose). The "Print to console" +

        The log levels are self-explanatory (None, Basic, Verbose). The "Print to console" option emulates the behaviour of older versions of Stella, whereby the logged output is also shown on the commandline from which Stella was launched (if it was launched - in that fashion). Finally, the current contents of the system log can be saved to your + in that fashion). Finally, the current contents of the system log can be saved to your home directory by clicking the "Save log to disk" button.

        @@ -3326,15 +3326,15 @@ Ms Pac-Man (Stella extended codes): game. As of version 2.2 of Stella, a default database of properties are built-in, but you may modify these through the use of a stella.pro file or within the corresponding Game Properties dialogs. - This file will contain all properties modified by the user. So this + This file will contain all properties modified by the user. So this means that when you upgrade Stella, your personal properties settings are preserved.

        Property File

        -

        A property file consists of some number of blocks. Each block in the file - contains the properties for a single game. For example the general format of +

        A property file consists of some number of blocks. Each block in the file + contains the properties for a single game. For example the general format of a property file is:

        @@ -3363,17 +3363,17 @@ Ms Pac-Man (Stella extended codes):

        Properties

        Each block in a property file consists of a set of properties for a single - game. Stella supports the properties described below:

        + game. Stella supports the properties described below:

        @@ -3390,7 +3390,7 @@ Ms Pac-Man (Stella extended codes): - @@ -3410,7 +3410,7 @@ Ms Pac-Man (Stella extended codes): + sound. The value must be Mono or Stereo. @@ -3418,7 +3418,7 @@ Ms Pac-Man (Stella extended codes): - +
        Cartridge.MD5: Indicates the MD5 checksum of the ROM image as a - string of hexadecimal digits. Stella uses this property while - attempting to match a game with its block of properties. If the + string of hexadecimal digits. Stella uses this property while + attempting to match a game with its block of properties. If the value of the property matches the MD5 checksum of the ROM image then - Stella uses that block of properties for the game. You can use the + Stella uses that block of properties for the game. You can use the GNU md5sum program, which is included with most Linux distributions, to calculate the MD5 checksum of a ROM image.
        Cartridge.Name:Indicates the actual name of the game. When you save snapshots, + Indicates the actual name of the game. When you save snapshots, load/save state files, or use the 'ROM Audit' functionality, this is the name that will be used for the respective file(s).
        Indicates if the game should use 1 or 2 channels for sound output. All original Atari 2600 machines supported 1 channel only, but some homebrew games have been written to take advantage of stereo - sound. The value must be Mono or Stereo.
        Indicates the bank-switching type for the game. The value of this property must be either Auto or one of the following (for more information about bank-switching see Kevin Horton's 2600 bankswitching - document or the documentation in each cartridges source code file). Types marked + document or the documentation in each cartridges source code file). Types marked as (¹) do not currently have reliable auto-detection, those marked as (²) are not fully supported in the debugger: @@ -3480,19 +3480,19 @@ Ms Pac-Man (Stella extended codes): + player. The value must be A or B. + right player. The value must be A or B. + game. The value must be Color or BW.
        Console.LeftDifficulty: Indicates the default difficulty setting for the left - player. The value must be A or B.
        Console.RightDifficulty: Indicates the default difficulty setting for the - right player. The value must be A or B.
        Console.TelevisionType: Indicates the default television setting for the - game. The value must be Color or BW.
        @@ -3501,7 +3501,7 @@ Ms Pac-Man (Stella extended codes):
        Controller.Left:
        Controller.Right:
        Indicates what type of controller the left and right player - uses. The value must be one of the following types: + uses. The value must be one of the following types: @@ -3526,7 +3526,7 @@ Ms Pac-Man (Stella extended codes): @@ -3534,20 +3534,20 @@ Ms Pac-Man (Stella extended codes): + 'Console.SwapPorts'. The value must be Yes or No.
         Type Description
        Joystick Atari's famous black joystick that was originally included with the system.
        Console.SwapPorts: Indicates that the left and right ports should be - swapped internally. This is used for ROMs like 'Raiders' where the + swapped internally. This is used for ROMs like 'Raiders' where the Player 0 joystick is plugged into the right joystick port. The value must be Yes or No.
        Controller.SwapPaddles: Indicates that the left and right paddles in - a particular port should be swapped. This is used for ROMs like + a particular port should be swapped. This is used for ROMs like 'Demons to Diamonds' where the default paddle is paddle 1, not - paddle 0. Other ROMs such as 'Tac-Scan' default to paddle 3, + paddle 0. Other ROMs such as 'Tac-Scan' default to paddle 3, which can be set using both 'Controller.SwapPaddles' and - 'Console.SwapPorts'. The value must be Yes or No.
        Controller.MouseAxis: Indicates how the mouse should emulate virtual controllers. - In 'Auto' mode, the system decides how to best use the mouse. Otherwise, + In 'Auto' mode, the system decides how to best use the mouse. Otherwise, XY indicates how to use the X/Y axis (ie, 02 is paddle0/paddle2). Currently, the mouse X-axis and left button are tied together, as are the - Y-axis and right button. The value must be Auto or XY, as follows: + Y-axis and right button. The value must be Auto or XY, as follows: @@ -3574,7 +3574,7 @@ Ms Pac-Man (Stella extended codes):
         Id Controller
        0 Paddle 0
        - @@ -3602,8 +3602,8 @@ Ms Pac-Man (Stella extended codes): + phosphor effect. The value must be n such that 0 <= n + <= 100. The default value is whatever is specified for tv.phosblend.
        Display.Format:Indicates the television format the game was designed for. The value + Indicates the television format the game was designed for. The value must be Auto, NTSC, PAL, SECAM, NTSC50, PAL60 or SECAM60.
        Display.PPBlend: Indicates the amount of blending which will occur while using the - phosphor effect. The value must be n such that 0 <= n - <= 100. The default value is whatever is specified for tv.phosblend.

        The name of the properties file is configurable through the '-propsfile' commandline argument and within the application itself - (see Advanced Configuration - Config Paths). If the + (see Advanced Configuration - Config Paths). If the path for this file hasn't been set, the default filename will depend on the version of Stella, as follows:

        @@ -3663,21 +3663,21 @@ Ms Pac-Man (Stella extended codes):

        A user-defined palette has certain restrictions, further described as follows:

          -
        • The palette file must be at least 792 bytes long. Colours are stored +
        • The palette file must be at least 792 bytes long. Colours are stored in 24-bit RGB, with the first byte for red, the second for green, the third for blue, for a total of 3 bytes per colour.
        • The first 384 bytes of the file (128 * 3) will be used for the NTSC - palette. The next 384 bytes (128 * 3) will be for the PAL palette. + palette. The next 384 bytes (128 * 3) will be for the PAL palette. The next 24 bytes (8 * 3) will be for the SECAM palette, which - consists of eight distinct colours. Any extra data in the file + consists of eight distinct colours. Any extra data in the file will be ignored.
        • -
        • The PAL colour-loss effect is calculated within Stella. You do not +
        • The PAL colour-loss effect is calculated within Stella. You do not need to specify those colours in the palette file.

        The name of the palette file is configurable through the '-palettefile' commandline argument and within the application itself - (see Advanced Configuration - Config Paths). If the + (see Advanced Configuration - Config Paths). If the path for this file hasn't been set, the default filename will depend on the version of Stella, as follows:

        @@ -3702,7 +3702,7 @@ Ms Pac-Man (Stella extended codes):

        Note that to actually use the external palette, the palette file must exist and be valid, and the palette option should be set to user - (in Video Settings dialog). The current ROM will have to be reloaded + (in Video Settings dialog). The current ROM will have to be reloaded for changes to this file to take effect.

        @@ -3717,8 +3717,8 @@ Ms Pac-Man (Stella extended codes): Anthony has maintained the project since around 2004. Over the years, a number of people from around the world have contributed to the project. Some people have provided technical help while others have offered suggestions - and praise. The Stella Team is grateful for all the help and support it has - received over the years. A (likely incomplete) list of the people who have + and praise. The Stella Team is grateful for all the help and support it has + received over the years. A (likely incomplete) list of the people who have played a part in bringing Stella to you is available on the main Stella webpage Credits List. If we've missed someone, please let us know.

        @@ -3751,19 +3751,19 @@ of this license document, but changing it is not allowed.

        The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public +freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This +software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by +using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.

        When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you +price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it @@ -3780,8 +3780,8 @@ distribute copies of the software, or if you modify it.

        For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their rights.

        @@ -3794,7 +3794,7 @@ distribute and/or modify the software.

        Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we +software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. @@ -3802,9 +3802,9 @@ authors' reputations.

        Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free +patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any +program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.

        @@ -3823,17 +3823,17 @@ modification follow. 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, +under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in +language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".

        Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of +covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). @@ -3884,16 +3884,16 @@ above, provided that you also meet all of these conditions: notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but + License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you +sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the @@ -3940,17 +3940,17 @@ Sections 1 and 2 above provided that you also do one of the following:

      • c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is + to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source +making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a +control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the @@ -3967,7 +3967,7 @@ compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt +except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under @@ -3978,9 +3978,9 @@ parties remain in full compliance. 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying @@ -3992,7 +3992,7 @@ the Program or works based on it. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further +these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. @@ -4004,10 +4004,10 @@ this License. infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot +excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent +may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to @@ -4024,7 +4024,7 @@ It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is -implemented by public license practices. Many people have made +implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing @@ -4043,23 +4043,23 @@ certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates +countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.

        9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will +of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

        -Each version is given a distinguishing version number. If the Program +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of +Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. @@ -4069,9 +4069,9 @@ Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free +to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals +make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. @@ -4083,12 +4083,12 @@ of promoting the sharing and reuse of software generally. 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. From 591506cc93c81dda983626cdc7949faedd7002ff Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sat, 2 Dec 2017 11:48:34 +0100 Subject: [PATCH 007/156] minor updates for dump and rewind/unwind --- docs/debugger.html | 6 +++--- docs/index.html | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/debugger.html b/docs/debugger.html index ce6ae0861..989fb15ca 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -662,7 +662,7 @@ clearsavestateifs - Clear all savestate points deltrap - Delete trap <xx> delwatch - Delete watch <xx> disasm - Disassemble address xx [yy lines] (default=PC) - dump - Dump data at address <xx> [to yy] [0..7, dumps to file] + dump - Dump data at address <xx> [to yy] [0 - 7] (dump to file options) exec - Execute script file <xx> [prefix] exitrom - Exit emulator, return to ROM launcher frame - Advance emulation by <xx> frames (default=1) @@ -694,7 +694,7 @@ clearsavestateifs - Clear all savestate points print - Evaluate/print expression xx in hex/dec/binary ram - Show ZP RAM, or set address xx to yy1 [yy2 ...] reset - Reset system to power-on state - rewind - Rewind state to last [xx] steps/traces/scanlines/frames... + rewind - Rewind state by one or [xx] steps/traces/scanlines/frames... riot - Show RIOT timer/input status rom - Set ROM address xx to yy1 [yy2 ...] row - Mark 'ROW' range in disassembly @@ -724,7 +724,7 @@ clearsavestateifs - Clear all savestate points type - Show disassembly type for address xx [yy] uhex - Toggle upper/lowercase HEX display undef - Undefine label xx (if defined) - unwind - Unwind state to next [xx] steps/traces/scanlines/frames... + unwind - Unwind state state by one or [xx] steps/traces/scanlines/frames... v - Overflow Flag: set (0 or 1), or toggle (no arg) watch - Print contents of address xx before every prompt x - Set X Register to value xx diff --git a/docs/index.html b/docs/index.html index 05836b070..736f3311d 100644 --- a/docs/index.html +++ b/docs/index.html @@ -54,7 +54,7 @@


        -

        February 1999 - July 2017
        +
        February 1999 - December 2017
        The Stella Team
        Stella Homepage
        From 88500b46ff0b0d6d8dbd3cdf5036566e50371225 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sat, 2 Dec 2017 11:51:06 +0100 Subject: [PATCH 008/156] reflected last doc changes in debugger help --- src/debugger/DebuggerParser.cxx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/debugger/DebuggerParser.cxx b/src/debugger/DebuggerParser.cxx index 9bf4a0382..2a310ee00 100644 --- a/src/debugger/DebuggerParser.cxx +++ b/src/debugger/DebuggerParser.cxx @@ -2370,7 +2370,7 @@ DebuggerParser::Command DebuggerParser::commands[kNumCommands] = { { "d", - "Carry Flag: set (0 or 1), or toggle (no arg)", + "Decimal Flag: set (0 or 1), or toggle (no arg)", "Example: d, d 0, d 1", false, true, @@ -2471,7 +2471,7 @@ DebuggerParser::Command DebuggerParser::commands[kNumCommands] = { { "dump", - "Dump data at address [to yy] [1..7]", + "Dump data at address [to yy] [0-7] (dump to file options)", "Example:\n" " dump f000 - dumps 128 bytes @ f000\n" " dump f000 f0ff - dumps all bytes from f000 to f0ff\n" @@ -2796,7 +2796,7 @@ DebuggerParser::Command DebuggerParser::commands[kNumCommands] = { { "rewind", - "Rewind state to last [xx] steps/traces/scanlines/frames...", + "Rewind state by one or [xx] steps/traces/scanlines/frames...", "Example: rewind, rewind 5", false, true, @@ -3109,7 +3109,7 @@ DebuggerParser::Command DebuggerParser::commands[kNumCommands] = { { "unwind", - "Unwind state to next [xx] steps/traces/scanlines/frames...", + "Unwind state by one or [xx] steps/traces/scanlines/frames...", "Example: unwind, unwind 5", false, true, From faf9294fd2d99ed83a3ac97c3eb2709511cbb570 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 3 Dec 2017 09:08:33 +0100 Subject: [PATCH 009/156] a very little fix here an there --- docs/index.html | 5 +++-- src/gui/LauncherFilterDialog.cxx | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/index.html b/docs/index.html index 736f3311d..49d296896 100644 --- a/docs/index.html +++ b/docs/index.html @@ -3025,7 +3025,7 @@
      • PAL color-lossUse PAL color-loss effect-plr.colorloss
        -dev.colorloss
        Debug colorsUse fixed debug colors-plr.debugcolors
        -dev.debugcolors
        Jitter/roll effectEmulate screen roll with inconsistent scanline count-plr.tv.jitter
        -dev.tv.jitter
        Jitter/roll recoveryDetermines recovery time for screen rolling-plr.tv.jitter_recovery
        -dev.tv.jitter_recovery
        (Jitter/roll) RecoveryDetermines recovery time for screen rolling-plr.tv.jitter_recovery
        -dev.tv.jitter_recovery
        Drive unused TIA pins ...Unused TIA pins are read random instead of the last databus values-plr.tiadriven
        -dev.tiadriven
        @@ -3429,7 +3429,8 @@ Ms Pac-Man (Stella extended codes): 8IN1 ¹16-64K Multicart (8 games) 16IN1 ¹32-128K Multicart (16 games) 32IN1 ¹64-128K Multicart (32 games) - 128N1 ¹256/512K Multicart + 64IN1 ¹64/128K Multicart + 128IN1 ¹256/512K Multicart 2K 64-2048 byte Atari 3E 32K Tigervision 3E+ 3E+ (TJ modified DASH) diff --git a/src/gui/LauncherFilterDialog.cxx b/src/gui/LauncherFilterDialog.cxx index 4841082d9..2e3bf531c 100644 --- a/src/gui/LauncherFilterDialog.cxx +++ b/src/gui/LauncherFilterDialog.cxx @@ -47,7 +47,7 @@ LauncherFilterDialog::LauncherFilterDialog(GuiObject* boss, const GUI::Font& fon // Types of files to show VarList::push_back(items, "All files", "allfiles"); - VarList::push_back(items, "All roms", "allroms"); + VarList::push_back(items, "All ROMs", "allroms"); VarList::push_back(items, "ROMs ending with", "__EXTS"); myFileType = new PopUpWidget(this, font, xpos, ypos, pwidth, lineHeight, items, From 7c01418c293813a703aa09fa2336d338f4a94f9b Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 3 Dec 2017 13:53:14 +0100 Subject: [PATCH 010/156] fixed #239 --- src/debugger/gui/PromptWidget.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/debugger/gui/PromptWidget.cxx b/src/debugger/gui/PromptWidget.cxx index 7b2c76bab..0a324943f 100644 --- a/src/debugger/gui/PromptWidget.cxx +++ b/src/debugger/gui/PromptWidget.cxx @@ -508,6 +508,8 @@ void PromptWidget::loadConfig() // Show the prompt the first time we draw this widget if(_firstTime) { + _firstTime = false; + // Display greetings & prompt string version = string("Stella ") + STELLA_VERSION + "\n"; print(version); @@ -528,7 +530,6 @@ void PromptWidget::loadConfig() print(PROMPT); _promptStartPos = _promptEndPos = _currentPos; - _firstTime = false; _exitedEarly = false; } else if(_exitedEarly) From 039a054ad5ff278dc5a63ab317fa1fbc188e7245 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 3 Dec 2017 16:18:23 +0100 Subject: [PATCH 011/156] saverom command fixed (broke that myself) --- src/debugger/CartDebug.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/debugger/CartDebug.cxx b/src/debugger/CartDebug.cxx index 6586c9234..108c3d62a 100644 --- a/src/debugger/CartDebug.cxx +++ b/src/debugger/CartDebug.cxx @@ -1236,7 +1236,7 @@ string CartDebug::saveRom() { const string& rom = myConsole.properties().get(Cartridge_Name) + ".a26"; - FilesystemNode node(myOSystem.defaultSaveDir() + "ROMs\\" + rom); + FilesystemNode node(myOSystem.defaultSaveDir() + rom); ofstream out(node.getPath(), std::ios::binary); if(out && myConsole.cartridge().saveROM(out)) return "saved ROM as " + node.getShortPath(); From 78a3b197f44f625f4fe4b372f814b2cc795b21e9 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 3 Dec 2017 17:07:47 +0100 Subject: [PATCH 012/156] loadconfig bug fixed save commands explained in debugger doc load/saveconfig allowed for multi-bank ROMs (with warning) --- docs/debugger.html | 119 +++++++++++++++++++++----------- src/debugger/CartDebug.cxx | 21 +++--- src/debugger/DebuggerParser.cxx | 6 +- 3 files changed, 94 insertions(+), 52 deletions(-) diff --git a/docs/debugger.html b/docs/debugger.html index 989fb15ca..ff36d303f 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -349,7 +349,7 @@ to change the meaning of an expression. The prefixes are:

        assumed to be in the default base. When you first start Stella, the default base is 16 (hexadecimal). You can change it with the "base" command. If you want to change the default base to decimal permanently, - you can put a "base #10" command in your "autoexec.stella" file (see + you can put a "base #10" command in your "autoexec.script" file (see the section on "Startup").

        Remember, you can use arbitrarily complex expressions with any @@ -357,7 +357,7 @@ to change the meaning of an expression. The prefixes are:

      - +

      Breakpoints, watches and traps, oh my!

      Breakpoints

      @@ -463,41 +463,6 @@ presses both Select and Reset:

      and expression for each function. Functions can be removed with "delfunction label", where the labels come from "listfunctions".

      -

      If you've defined a lot of complex functions, you probably will -want to re-use them in future runs of the debugger. You can save all -your functions, breakpoints, conditional breaks, and watches with the -"save" command. If you name your saved file the same as the ROM filename -and place it in the ROM directory, it'll be auto-loaded next time you -load the same ROM in Stella. The save file is just a plain text file -called "rom_filename.stella", so you can edit it and add new functions, etc.

      -

      You can also create a file called "autoexec.stella" which will be loaded -when the debugger starts, no matter what ROM you have loaded. The location -of this file will depend on the version of Stella, as follows:

      - -

      - - - - - - - - - - - - -
      Linux/Unix~/.stella/autoexec.stella
      Macintosh~/Library/Application Support/Stella/autoexec.stella
      Windows%APPDATA%\Stella\autoexec.stella    - OR
      - _BASEDIR_\autoexec.stella - (if a file named 'basedir.txt' exists in the application - directory containing the full pathname for _BASEDIR_) -
      -

      Note that these '.stella' script files are only accessed if you enter -the debugger at least once during a program run. This means you can create -these files, and not worry about slowing down emulation unless you're -actively using the debugger.

      -

      Built-in Functions

      Stella has some pre-defined functions for use with the "breakif" @@ -632,6 +597,81 @@ can remove a trap with "deltrap number", where the number comes from "listtraps" or by entering the identical trap again. You can get rid of all traps at once with the "cleartraps" command.

      +
      +

      Save your work!

      +Stella offers several commands to save your work inside the debugger for +later re-use. + +

      save

      +

      If you've defined a lot of complex functions, you probably will +want to re-use them in future runs of the debugger. You can save all +your functions, breakpoints, conditional breaks, traps and watches with the +"save" command. If you name your saved file the same as the ROM filename +and place it in the ROM directory, it'll be auto-loaded next time you +load the same ROM in Stella. The save file is just a plain text file +called "rom_filename.script", so you can edit it and add new functions, etc.

      +

      While "save" is ROM specific, you can also create a file called +"autoexec.script" which will be loaded when the debugger starts, no matter +what ROM you have loaded. The location of this file will depend on the +version of Stella, as follows:

      + +

      + + + + + + + + + + + + +
      Linux/Unix~/.stella/autoexec.script
      Macintosh~/Library/Application Support/Stella/autoexec.script
      Windows%APPDATA%\Stella\autoexec.script    + OR
      + _BASEDIR_\autoexec.script + (if a file named 'basedir.txt' exists in the application + directory containing the full pathname for _BASEDIR_) +
      +

      Note that these '.script' script files are only accessed if you enter +the debugger at least once during a program run. This means you can create +these files, and not worry about slowing down emulation unless you're +actively using the debugger.

      + +

      saveconfig

      +The "saveconfig" command creates a DiStella configuration file which is +based on Stella's runtime and static analsyis of the current ROM. +

      This will be automatically loaded the next time your start the debugger. +From there on, you can continue analyzing the ROM and then use "saveconfig" +again to update the configuration. You can also use "loadconfig" to load it +manually. +

      Note that this is not tested for multi-banked ROMs.

      + +

      savedis

      +While your are playing or debugging a game, Stella will gather runtime +information about the ROM. It can then use that information together with +a static analysis of the ROM and therefore create a better disassembly +than DiStella alone. "savedis" allows you to save that disassembly as the +result of this combined analysis. +

      Note that this currently only works for single banked ROMs. For larger +ROMs, the created disassembly is incomplete.

      + +

      saverom

      +If you have manipulated a ROM, you can save it with "saverom". The file is +named '<rom_filename>.a26'. + +

      saveses

      +The "saveses" command dumps the whole prompt session into a file named +"YYYY-MM-DD_HH-mm-ss.txt". So you can later lookup what you did exactly +when you were debugging at that time. + +

      savestate

      +

      This command work identical to the save state hotkey (F9) during emulation. +Any previously saved state can be loaded with "loadstate" plus the slot +number (0-9).

      +
      +

      Prompt commands:

      Type "help" to see this list in the debugger.
      @@ -702,11 +742,11 @@ clearsavestateifs - Clear all savestate points runto - Run until string xx in disassembly runtopc - Run until PC is set to value xx s - Set Stack Pointer to value xx - save - Save breaks, watches, traps to file xx + save - Save breaks, watches, traps and functions to file xx saveconfig - Save Distella config file (with default name) savedis - Save Distella disassembly (with default name) saverom - Save (possibly patched) ROM (with default name) - saveses - Save console session to file xx + saveses - Save console session (with default name) savesnap - Save current TIA image to PNG file savestate - Save emulator state xx (valid args 0-9) savestateif - Create savestate on <condition> @@ -732,7 +772,6 @@ clearsavestateifs - Clear all savestate points z - Zero Flag: set (0 or 1), or toggle (no arg) -

      (B) TIA Tab

      diff --git a/src/debugger/CartDebug.cxx b/src/debugger/CartDebug.cxx index 108c3d62a..8850ee4a3 100644 --- a/src/debugger/CartDebug.cxx +++ b/src/debugger/CartDebug.cxx @@ -831,9 +831,6 @@ string CartDebug::loadSymbolFile() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - string CartDebug::loadConfigFile() { - if(myConsole.cartridge().bankCount() > 1) - return DebuggerParser::red("config file for multi-bank ROM not yet supported"); - // There are two possible locations for loading config files // (in order of decreasing relevance): // 1) ROM dir based on properties entry name @@ -934,15 +931,17 @@ string CartDebug::loadConfigFile() } myDebugger.rom().invalidate(); - return "loaded " + node.getShortPath() + " OK"; + stringstream retVal; + if(myConsole.cartridge().bankCount() > 1) + retVal << DebuggerParser::red("config file for multi-bank ROM not fully supported\n"); + retVal << "loaded " << node.getShortPath() << " OK"; + return retVal.str(); + } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - string CartDebug::saveConfigFile() { - if(myConsole.cartridge().bankCount() > 1) - return DebuggerParser::red("config file for multi-bank ROM not yet supported"); - // While there are two possible locations for loading config files, // the main 'config' directory is used whenever possible when saving, // unless the rom-specific file already exists @@ -977,7 +976,11 @@ string CartDebug::saveConfigFile() getBankDirectives(out, myBankInfo[b]); } - return "saved " + node.getShortPath() + " OK"; + stringstream retVal; + if(myConsole.cartridge().bankCount() > 1) + retVal << DebuggerParser::red("config file for multi-bank ROM not fully supported\n"); + retVal << "saved " << node.getShortPath() << " OK"; + return retVal.str(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1363,7 +1366,7 @@ void CartDebug::getBankDirectives(ostream& buf, BankInfo& info) const buf << "ORG " << Base::HEX4 << info.offset << endl; // Now consider each byte - uInt16 prev = info.offset, addr = prev + 1; + uInt32 prev = info.offset, addr = prev + 1; DisasmType prevType = disasmTypeAbsolute(mySystem.getAccessFlags(prev)); for( ; addr < info.offset + info.size; ++addr) { diff --git a/src/debugger/DebuggerParser.cxx b/src/debugger/DebuggerParser.cxx index 2a310ee00..58837e270 100644 --- a/src/debugger/DebuggerParser.cxx +++ b/src/debugger/DebuggerParser.cxx @@ -2878,8 +2878,8 @@ DebuggerParser::Command DebuggerParser::commands[kNumCommands] = { { "save", - "Save breaks, watches, traps to file xx", - "Example: save commands.txt", + "Save breaks, watches, traps and functions to file xx", + "Example: save commands.script", true, false, { kARG_FILE, kARG_END_ARGS }, @@ -2920,7 +2920,7 @@ DebuggerParser::Command DebuggerParser::commands[kNumCommands] = { { "saveses", - "Save console session", + "Save console session (with default name)", "Example: saveses\n" "NOTE: saves to default save location", false, From ed25664c46c0f64e485f6024d82d48805933a525 Mon Sep 17 00:00:00 2001 From: Christian Speckner Date: Mon, 4 Dec 2017 00:25:03 +0100 Subject: [PATCH 013/156] Add two "grace lines" of black when autodetecting ystart. --- src/emucore/Console.cxx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/emucore/Console.cxx b/src/emucore/Console.cxx index 0651cbae1..3a755f853 100644 --- a/src/emucore/Console.cxx +++ b/src/emucore/Console.cxx @@ -69,6 +69,10 @@ #include "Console.hxx" +namespace { + constexpr uInt8 YSTART_EXTRA = 2; +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Console::Console(OSystem& osystem, unique_ptr& cart, const Properties& props) @@ -245,7 +249,7 @@ void Console::autodetectYStart() myTIA->setFrameManager(myFrameManager.get()); - myAutodetectedYstart = ystartDetector.detectedYStart(); + myAutodetectedYstart = ystartDetector.detectedYStart() - YSTART_EXTRA; // Don't forget to reset the SC progress bars again myOSystem.settings().setValue("fastscbios", fastscbios); From 0afd6b44d09fc92e6a58c34ee10515246457609c Mon Sep 17 00:00:00 2001 From: thrust26 Date: Mon, 4 Dec 2017 11:02:36 +0100 Subject: [PATCH 014/156] 'Contents' and links do added debugger documentation some debugger doc updates --- docs/debugger.html | 261 ++++++++++++++++++++++++++++++++------------- docs/index.html | 3 +- 2 files changed, 191 insertions(+), 73 deletions(-) diff --git a/docs/debugger.html b/docs/debugger.html index ff36d303f..65204d9d3 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -2,16 +2,81 @@ Stella Debugger + -

      Stella Integrated Debugger (a work in progress)

      +
      Stella
      +

      Release 5.1

      +

      Integrated Debugger

      +

      (a work in progress)

      +
      +

      Contents

      +
        +
      1. Features
      2. +
      3. How to use the Debugger + +
      4. +
      5. Distella Configuration Files
      6. +
      7. Tutorial: How to hack a ROM
      8. + +
      + +
      + +

      Features

      The debugger in Stella may never be complete, as we're constantly adding new features requested by homebrew developers. However, even in its current form it's still quite powerful, and is able to boast at least one feature that no other 2600 debugger has; it's completely cross-platform.

      -

      Here's a (non-comprehensive) list of what the debugger can do so far:

      +

      Here's a (non-comprehensive) list of what the debugger can do so far:

      • Display registers and memory.
      • @@ -36,11 +101,14 @@ feature that no other 2600 debugger has; it's completely cross-platform.< debugger prompt.
      • Traps - Like breakpoints, but break on read/write/any access to - *any* memory location.
      • + *any* memory location. Traps can also be combined with conditions to + become conditional traps.
      • Frame advance (automatic breakpoint at beginning of next frame) You can advance multiple frames with one command.
      • +
      • Rewind previous advance operations and undo rewinds.
      • +
      • Supports Distella 'configuration directives', which may be used to override automatic code/data determination in the disassembly. For now, the following directives are supported: CODE, GFX, PGFX, DATA, ROW. @@ -107,10 +175,10 @@ feature that no other 2600 debugger has; it's completely cross-platform.<
      • Built-in functions for use with "breakif", to support common conditions (such as breaking when the user presses Game Select...)
      • Patching ROM in-place.
      • -
      • Save patched ROM ("saverom filename.bin").
      • +
      • Save patched ROM
      -

      Future planned features:

      +

      Future planned features:

      • GUI for cheat codes (Cheetah and normal codes).
      • @@ -128,7 +196,8 @@ feature that no other 2600 debugger has; it's completely cross-platform.<
      • Various new GUI enhancements
      -

      How to use the debugger

      +
      +

      How to use the Debugger

      Pressing ` (aka backtick, backquote, grave accent) toggles the debugger on & off. When you exit the debugger, the emulation resumes at the current @@ -142,12 +211,14 @@ present in the debugger):

      For space reasons, the Prompt, TIA, I/O and Audio displays are split into 4 tabs, only one of which is visible at a time. You can use the mouse or -keyboard to select which tab you want to view. Pressing Shift with the left -or right arrow keys cycles between tabs from right-to-left and left-to-right, -respectively. Pressing Tab cycles between widgets in the current tab (except -for in the Prompt area, where 'tab' is used for something else).

      +keyboard to select which tab you want to view. Control/Cmd + Tab cycles between +tabs from left-to-right, Control/Cmd + Shift + Tab cycles right-to-left. +Pressing Tab (or Shift + Tab) cycles between widgets in the current tab (except +for in the Prompt Tab, where 'tab' is used for something else).

      -

      You can also enter the debugger at emulator startup by use the 'debug' command on the command line, or alternatively within the ROM launcher in 'Power-on options': +

      You can also enter the debugger at emulator startup by use the 'debug' +command on the command line, or alternatively within the ROM launcher in +'Power-on options':

         ; will enter the debugger before any instructions run
         stella -debug mygame.bin
      @@ -160,15 +231,87 @@ for in the Prompt area, where 'tab' is used for something else).

      -

      Using the ` key will always enter the debugger at the end of the -frame (scanline 262, for NTSC games). This is because Stella only checks +

      Using the ` key will always enter the debugger at the end of +the frame (for NTSC games usually scanline 262). This is because Stella only checks for keystrokes once per frame. Once in the debugger, you can control execution by stepping one instruction, scanline, or frame at a time (or more than one at a time, using commands in the prompt). You can also set breakpoints or traps, which will cause the emulator to enter the debugger when they are triggered, even if it happens in mid-frame.

      -

      Change Tracking

      + +
      +

      Global Buttons

      + +

      There are some buttons on the right top that always show up no matter which +tab you are looking at. This is because these are the ones which you will use +most.

      + +
        +

        +
      + +

      The larger button at the left top (labeled '<') performs the rewind operation, +which will undo the previous Step/Trace/Scan/Frame advance, the smaller button at +the left bottom (labeled '>') performs the unwind operation, which will undo the +previous rewind operation. The rewind buffer is 100 levels deep by default.

      + +

      The other operations are Step, Trace, Scan+1, Frame+1 and Exit (debugger).

      + +

      You can also use the buttons from anywhere in the GUI via hotkeys.

      + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        FunctionKey (Standard)Key (MacOSX)
        StepControl + sCmd + s
        TraceControl + tCmd + t
        Scan+1Control + LCmd + L
        Frame+1Control + fCmd + f
        RewindControl + rCmd + r
        UnwindControl + Shift + rCmd + Shift + r
        ExitBackquote (`)Backquote (`)
        +
      +

      When you use these buttons, the prompt doesn't change. This means the +status lines with the registers and disassembly will be "stale". You +can update them just by re-running the relevant commands in the prompt.

      + + + +
      +

      Change Tracking

      The debugger tracks changes to the CPU registers and RAM by displaying changed locations or registers with a red background after each step, @@ -181,9 +324,9 @@ already contained the same value, that's not considered a change (old value was $whatever, new value is the same, so nothing got tracked). This may change in a future version of Stella.

      - -

      (A) Prompt tab

      +
      +

      (A) Prompt Tab

      This is a command-line interface, similar to the DOS DEBUG command or Supermon for the C=64.

      @@ -222,7 +365,7 @@ commands in future releases. People who like command prompts will be able to use the prompt, but people who hate them will have a fully functional debugger without typing (or without typing much, anyway).

      -

      Tab completion

      +

      Tab Key Auto-Complete

      While entering a command, label or function, you can type a partial name and press the Tab key to attempt to auto-complete it. If you've ever used @@ -241,7 +384,7 @@ or set during debugging with the "define" command. It also works with built-in functions and those defined with the "function" command, but it doesn't (yet) work on filenames.

      -

      Expressions

      +

      Expressions

      Almost every command takes a value: the "a" command takes a byte to stuff into the accumulator, the "break" command @@ -286,7 +429,7 @@ operands as 0 for false, non-zero for true, and return either 0 or 1. So $1234&$5678 results in $1230, whereas $1234&&$5678 results in 1. This is just like C or C++...

      -

      Prefixes

      +

      Prefixes

      Like some programming languages, the debugger uses prefixed characters to change the meaning of an expression. The prefixes are:

      @@ -358,9 +501,9 @@ to change the meaning of an expression. The prefixes are:


      -

      Breakpoints, watches and traps, oh my!

      +

      Breakpoints, watches and traps, oh my!

      -

      Breakpoints

      +

      Breakpoints

      A breakpoint is a "hotspot" in your program that causes the emulator to stop emulating and jump into the debugger. You can set as many @@ -386,7 +529,7 @@ breakpoint on & off, like a light switch.

      You could also use "clearbreaks" to remove all the breakpoints. Also, there is a "listbreaks" command that will list them all.

      -

      Conditional Breaks

      +

      Conditional Breaks

      A conditional breakpoint causes the emulator to enter the debugger when some arbitrary condition becomes true. "True" means "not zero" here: @@ -434,7 +577,7 @@ the number comes from "listbreaks" or by entering the same conditional break aga conditional break, the reason will be displayed in the status area near the TIA Zoom display (area H).

      -

      Functions

      +

      Functions

      There is one annoyance about complex expressions: once we remove the conditional break with "delbreakif" or "clearbreaks", @@ -463,7 +606,7 @@ presses both Select and Reset:

      and expression for each function. Functions can be removed with "delfunction label", where the labels come from "listfunctions".

      -

      Built-in Functions

      +

      Built-in Functions

      Stella has some pre-defined functions for use with the "breakif" command. These allow you to break and enter the debugger on various @@ -499,7 +642,7 @@ Stella debugger.

      Don't worry about memorizing them all: the Prompt "help" command will show you a list of them.

      -

      Pseudo-Registers

      +

      Pseudo-Registers

      These "registers" are provided for you to use in your conditional breaks. They're not registers in the conventional sense, since they don't exist in @@ -539,7 +682,7 @@ beginning of the 64th scanline.

      This is similar to setting a regular breakpoint, but it will only trigger when bank 1 is selected.

      -

      Watches

      +

      Watches

      A watch is an expression that gets evaluated and printed before every prompt. This is useful for e.g. tracking the contents of a @@ -559,7 +702,7 @@ also delete them all with the "clearwatches" command.

      without dereferencing it: Labels are constants, and CPU registers are already visible in the CPU Widget

      -

      Traps

      +

      Traps

      A trap is similar to a breakpoint, except that it catches accesses to a memory address, rather than specific location in the @@ -598,7 +741,7 @@ can remove a trap with "deltrap number", where the number comes from all traps at once with the "cleartraps" command.


      -

      Save your work!

      +

      Save your work!

      Stella offers several commands to save your work inside the debugger for later re-use. @@ -672,7 +815,7 @@ Any previously saved state can be loaded with "loadstate" plus the slot number (0-9).


      -

      Prompt commands:

      +

      Prompt Commands

      Type "help" to see this list in the debugger.
      Type "help 'cmd'" to see extended information about the given command.

      @@ -774,7 +917,7 @@ clearsavestateifs - Clear all savestate points
      -

      (B) TIA Tab

      +

      (B) TIA Tab

      When selected, this tab shows detailed status of all the TIA registers (except for audio; use the Audio tab for those).

      @@ -827,7 +970,7 @@ are visualized in the debugger in the queued writes area of the TIA tab.


      -

      (C) I/O Tab

      +

      (C) I/O Tab

      When selected, this tab shows detailed status of the Input, Output, and Timer portion of the RIOT/M6532 chip (the RAM portion is accessed @@ -845,7 +988,7 @@ reflecting this result.


      -

      (D) Audio Tab

      +

      (D) Audio Tab

      This tab lets you view the contents of the TIA audio registers and the effective volume resulting from the two channel volumes.

      @@ -857,7 +1000,7 @@ volume resulting from the two channel volumes.


      -

      (E) TIA Display

      +

      (E) TIA Display

      In the upper left of the debugger, you'll see the current frame of video as generated by the TIA. If a complete frame hasn't been drawn, @@ -895,7 +1038,7 @@ as illustrated:


      -

      (F) TIA Info

      +

      (F) TIA Info

      To the right of the TIA display (E) there is TIA information, as shown:

      The indicators are as follows (note that all these are read-only):

      @@ -923,7 +1066,7 @@ Position, and will range from 0 to 228).

    3. -

      (G) TIA Zoom

      +

      (G) TIA Zoom

      Below the TIA Info (F) is the TIA Zoom area. This allows you to enlarge part of the TIA display, so you can see fine details. Note that unlike the TIA display area, this one does generate frames as the real @@ -941,7 +1084,7 @@ a context menu in the TIA Display.


      -

      (H) Breakpoint/Trap Status

      +

      (H) Breakpoint/Trap Status

      Below the TIA Zoom (G), there is a status line that shows the reason the debugger was entered (if a breakpoint/trap was hit), as shown:

      @@ -953,7 +1096,7 @@ See the "Breakpoints" section for details.


      -

      (I) CPU Registers

      +

      (I) CPU Registers

      This displays the current CPU state, as shown:

      All the registers and flags are displayed, and can be changed by @@ -974,7 +1117,7 @@ learn :)


      -

      (J) Data Operations buttons

      +

      (J) Data Operations Buttons

      These buttons can be used to change values in either CPU Registers (I), or the RIOT RAM (K), depending on which of these widgets is currently active.

      @@ -997,7 +1140,7 @@ respond to these same keyboard shortcuts. If in doubt, give them a try.


      -

      (K) M6532/RIOT RAM

      +

      (K) M6532/RIOT RAM

      This is a spreadsheet-like GUI for inspecting and changing the contents of the 2600's zero-page RAM.

      You can navigate with either the mouse or the keyboard arrow keys. @@ -1019,8 +1162,7 @@ The remaining buttons to the right are further explained in section (L).

      -
      -

      (L) M6532/RIOT RAM (search/compare mode)

      +

      (L) M6532/RIOT RAM (search/compare mode)

      The RAM widget also lets you search memory for values such as lives or remaining energy, but it's also very useful when debugging to determine which memory location holds which quantity.

      @@ -1053,7 +1195,7 @@ decreased by 1:


      -

      (M) ROM Disassembly

      +

      (M) ROM Disassembly

      This area contains a disassembly of the current bank of ROM. If a symbol file is loaded, the disassembly will have labels. Even without a symbol file, the standard TIA/RIOT labels will still be present.

      The disassembly is often quite extensive, and whenever possible tries to automatically @@ -1184,7 +1326,7 @@ in either binary or hexidecimal. -

      Limitations

      +

      Limitations

        @@ -1214,7 +1356,7 @@ the same address.
        -

        (N) Detailed Bankswitch Information

        +

        (N) Detailed Bankswitch Information

        This area shows a detailed breakdown of the bankswitching scheme. Since the bankswitch schemes can greatly vary in operation, this tab will be @@ -1230,7 +1372,7 @@ Go ahead and try to change something!


        -

        (O) Detailed Cartridge extended RAM Information

        +

        (O) Detailed Cartridge Extended RAM Information

        If applicable, this area shows a detailed breakdown of any extra RAM supported by the bankswitching scheme. Since the bankswitch schemes can greatly vary in operation, @@ -1251,34 +1393,9 @@ or not viewable by the 6507 at all, the RAM addresses are labeled as the cart se In the examples above, F8SC RAM is labeled starting at its read port, or $F080. However, the RAM in the DPC scheme is not viewable by the 6507, so its addresses start from $0. -
        -

        Global Buttons

        - -

        There are also buttons on the right top that always show up no matter which -tab you're looking at. The larger button at the left top (labeled '<') performs -the rewind operation, which will undo the previous Step/Trace/Scan/Frame advance, -the smaller button at the left bottom (labeled '>') performs the unwind operation, -which will undo the previous rewind operation. - -The rewind buffer is 100 levels deep by default.

        - -The other operations are Step, Trace, Scan+1, Frame+1 and Exit.

        -

        - -

        When you use these buttons, the prompt doesn't change. This means the -status lines with the registers and disassembly will be "stale". You -can update them just by re-running the relevant commands in the prompt.

        - -

        You can also use the Step, Trace, Scan+1, Frame+1, Rewind and Unwind buttons from -anywhere in the GUI via the keyboard, with Control-S, Control-T, Control-L, Control-F, -Control-R and Control-Shift-R.

        - - - -
        -

        Distella Configuration Files

        +

        Distella Configuration Files

        As mentioned in ROM Disassembly (M), Stella supports the following directives: CODE/GFX/PGFX/DATA/ROW. While the debugger will try to automatically mark address space with the appropriate directive, there are times when it will fail. There are @@ -1328,7 +1445,7 @@ named "rr.a26", with properties entry "River Raid". Attempts will be made as fol
        -

        Tutorial: How to hack a ROM

        +

        Tutorial: How to hack a ROM

        Here is a step-by-step guide that shows you how to use the debugger to actually do something useful. No experience with debuggers is necessary, diff --git a/docs/index.html b/docs/index.html index 49d296896..e553353b7 100644 --- a/docs/index.html +++ b/docs/index.html @@ -14,8 +14,9 @@

        User's Guide

        -

        +
        +

        Contents

        1. A Brief History of the Atari 2600
        2. Introduction
          From aef15b44b4e4eba1e0acc2ca74fa9a5fcde5fe07 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Mon, 4 Dec 2017 14:17:54 +0100 Subject: [PATCH 015/156] minimal debugger and text dialog sizes increased debugger doc updated and some links added missing ellipsis added to RAM widget --- docs/debugger.html | 172 ++++++++++++++------------- docs/graphics/debugger_ram-dpc.png | Bin 12363 -> 14221 bytes docs/graphics/debugger_ram-f8sc.png | Bin 6352 -> 6860 bytes docs/graphics/debugger_ram.png | Bin 5708 -> 7579 bytes docs/graphics/debugger_ramsearch.png | Bin 4746 -> 6094 bytes src/debugger/gui/CartDPCWidget.cxx | 3 +- src/debugger/gui/DebuggerDialog.hxx | 6 +- src/debugger/gui/RamWidget.cxx | 7 +- src/gui/InputTextDialog.cxx | 6 +- 9 files changed, 102 insertions(+), 92 deletions(-) diff --git a/docs/debugger.html b/docs/debugger.html index 65204d9d3..520a822ed 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -56,6 +56,7 @@
        3. ROM Disassembly
        4. @@ -260,50 +261,40 @@ previous rewind operation. The rewind buffer is 100 levels deep by default.

          You can also use the buttons from anywhere in the GUI via hotkeys.

          -
            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
            FunctionKey (Standard)Key (MacOSX)
            StepControl + sCmd + s
            TraceControl + tCmd + t
            Scan+1Control + LCmd + L
            Frame+1Control + fCmd + f
            RewindControl + rCmd + r
            UnwindControl + Shift + rCmd + Shift + r
            ExitBackquote (`)Backquote (`)
            -
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          KeyFunction
          Control + sStep
          Control + tTrace
          Control + LScan+1
          Control + fFrame+1
          Control + rRewind
          Control + Shift + rUnwind
          Backquote (`)Exit

          When you use these buttons, the prompt doesn't change. This means the status lines with the registers and disassembly will be "stale". You can update them just by re-running the relevant commands in the prompt.

          @@ -335,6 +326,7 @@ or Supermon for the C=64.

          Bash-style commands are also supported:

          + @@ -356,7 +348,7 @@ Bash-style commands are also supported:

          To see the available commands, enter "help". For extended help, type "help cmd", where 'cmd' is the command you wish to know about. The available commands are listed -at the end of this section. Bash-style tab completion is supported for commands, +in Prompt Commands at the end of this section. Bash-style tab completion is supported for commands, labels and functions (see below).

          For now, there are some functions that only exist in the prompt. We @@ -364,6 +356,7 @@ intend to add GUI equivalents for all (or almost all?) of the prompt commands in future releases. People who like command prompts will be able to use the prompt, but people who hate them will have a fully functional debugger without typing (or without typing much, anyway).

          +

          Tab Key Auto-Complete

          @@ -383,6 +376,7 @@ characters in the right order as a match (e.g. "twf" will be completed to or set during debugging with the "define" command. It also works with built-in functions and those defined with the "function" command, but it doesn't (yet) work on filenames.

          +

          Expressions

          @@ -700,7 +694,7 @@ also delete them all with the "clearwatches" command.

          Note that there's no real point in watching a label or CPU register without dereferencing it: Labels are constants, and CPU registers -are already visible in the CPU Widget

          +are already visible in the CPU Registers widget

          Traps

          @@ -712,7 +706,7 @@ or memory.

          Traps can also combined with a condition ("trapif"). If an access to a memory address is caught, the condition is evaluated additionally. Only if the condition is true too, the emulations stops. For details -about conditions see Conditional Breaks described above.

          +about conditions see Conditional Breaks described above.

          An example: you are debugging a game, and you want to stop the emulation and enter the debugger whenever RESP0 is strobed. You'd use @@ -750,7 +744,7 @@ later re-use. want to re-use them in future runs of the debugger. You can save all your functions, breakpoints, conditional breaks, traps and watches with the "save" command. If you name your saved file the same as the ROM filename -and place it in the ROM directory, it'll be auto-loaded next time you +and place it in the ROM directory, it will be auto-loaded next time you load the same ROM in Stella. The save file is just a plain text file called "rom_filename.script", so you can edit it and add new functions, etc.

          While "save" is ROM specific, you can also create a file called @@ -758,7 +752,7 @@ called "rom_filename.script", so you can edit it and add new functions, etc.

          what ROM you have loaded. The location of this file will depend on the version of Stella, as follows:

          -

          KeyFunction
          HomeMove cursor to beginning of line
          EndMove cursor to end of line
          DeleteRemove character to right of cursor
          +

          @@ -783,8 +777,8 @@ these files, and not worry about slowing down emulation unless you're actively using the debugger.

          saveconfig

          -The "saveconfig" command creates a DiStella configuration file which is -based on Stella's runtime and static analsyis of the current ROM. +The "saveconfig" command creates a DiStella Configuration File which is +based on Stella's dynamic and static analysis of the current ROM.

          This will be automatically loaded the next time your start the debugger. From there on, you can continue analyzing the ROM and then use "saveconfig" again to update the configuration. You can also use "loadconfig" to load it @@ -792,7 +786,7 @@ manually.

          Note that this is not tested for multi-banked ROMs.

          savedis

          -While your are playing or debugging a game, Stella will gather runtime +While your are playing or debugging a game, Stella will gather dynamic information about the ROM. It can then use that information together with a static analysis of the ROM and therefore create a better disassembly than DiStella alone. "savedis" allows you to save that disassembly as the @@ -810,7 +804,7 @@ The "saveses" command dumps the whole prompt session into a file named when you were debugging at that time.

          savestate

          -

          This command work identical to the save state hotkey (F9) during emulation. +

          This command works identical to the save state hotkey (F9) during emulation. Any previously saved state can be loaded with "loadstate" plus the slot number (0-9).


          @@ -1008,7 +1002,7 @@ the partial contents of the current frame will be displayed up to the current scanline, with the contents of the old frame (in black & white) filling the rest of the display. Note that if 'phosphor mode' or TV effects are enabled, you won't see the effects here; this shows the -raw TIA image only.

          +raw TIA image only.

          You can use the "Scan+1" button, the prompt "scan" command, or the Control-L key to watch the TIA draw the frame one scanline at a time.

          @@ -1024,8 +1018,8 @@ as illustrated:

          mouse was clicked. Note that if you weren't in partial-frame mode, this option will have no effect.
        5. Toggle breakpoint: Will toggle a conditional breakpoint at the - scanline where the mouse was clicked. You can to use - the Prompt Tab to turn the breakpoint off again.
        6. + scanline where the mouse was clicked. You can also use + the Prompt Tab commands to list and turn off the breakpoint.
        7. Set zoom position: Influences what is shown in the TIA zoom area (further described in part (G). The zoom area will contain the area centered at the position where the mouse was @@ -1079,19 +1073,28 @@ as illustrated:

          These options allow you to zoom in on the image for even greater detail. If you click on the output window, you can scroll around using the cursor, PageUp/Dn and Home/End keys. You can also select the zoom position from -a context menu in the TIA Display.

          +a context menu in the TIA Display.


          (H) Breakpoint/Trap Status

          -

          Below the TIA Zoom (G), there is a status line that shows the reason the -debugger was entered (if a breakpoint/trap was hit), as shown:

          +

          Below the TIA Zoom (G), there is a status line that shows the reason and the +address the debugger was entered (if a breakpoint or trap was hit), as shown:

          The output here will generally be self-explanatory. Due to space concerns, -conditional breakpoints will be shown as "CBP: ...", normal breakpoints -as "BP: ...", read traps as "RTrap: ..." and write traps as "WTrap: ...". -See the "Breakpoints" section for details.

          +the reasons will be shown as follows: +
            +
          • "CBP:" for conditional breakpoints
          • +
          • "BP:" for normal breakpoints
          • +
          • "RTrap:" for read traps
          • +
          • "WTrap:" for write traps
          • +
          • "RTrapIf:" for conditional read traps
          • +
          • "WTrapIf:" for conditional write traps
          • +
          +

          +See the Breakpoints, watches and traps... +section for details.

          @@ -1110,7 +1113,7 @@ registers. For example, consider the command 'LDA ($80),Y'. The operand of the command resolves to some address, which isn't always easy to determine at first glance. The 'Src Addr' area shows the actual resulting operand/address being used with the given opcode.

          -

          There's not much else to say about the CPU widget: if you know 6502 +

          There's not much else to say about the CPU Registers widget: if you know 6502 assembly, it's pretty self-explanatory. If you don't, well, you should learn :)

          @@ -1148,17 +1151,19 @@ To change a RAM location, either double-click on it or press Enter while it's highlighted. Enter the new value (hex only for now, sorry), then press Enter to make the change. If you change your mind, press Escape and the original value will be restored. The currently selected RAM cell -can also be changed by using the Data operations buttons/associated -shortcut keys (J).

          +can also be changed by using the +Data Operations Buttons or the associated +shortcut keys.

          The 'Undo' button in the upper right should be self-explanatory; it will undo the most previous operation to one cell only. The 'Revert' button is -more comprehensive. It will undo all operations on all cells +more comprehensive. It will undo all operations on all cells since you first made a change.

          The UI objects at the bottom refer to the currently selected RAM cell. -The 'label' textbox shows the label attached to this RAM location (if any), -and the other textboxes show the decimal and binary equivalent value. -The remaining buttons to the right are further explained in section (L).

          +The 'Label' textbox shows the label attached to this RAM location (if any), +and the other two textboxes show the decimal and binary equivalent value.

          + +

          The remaining buttons to the right are further explained in the next section.

          @@ -1167,11 +1172,11 @@ The remaining buttons to the right are further explained in section (L).

          energy, but it's also very useful when debugging to determine which memory location holds which quantity.

          -

          To search RAM, click 'Search' and enter a byte value into the search editbox (0-255). -All matching values will be highlighted in the RAM widget. If 'Search' is clicked -and the input is empty, all RAM locations are highlighted.

          +

          To search the RAM, click 'Search...' and enter a byte value into the search editbox (0-255). +All matching values will be highlighted in the RAM widget. If no value was entered, +all RAM locations will be highlighted.

          -

          The 'Compare' button is used to compare the given value using all +

          The 'Compare...' button is used to compare the given value using all addresses currently highlighted. This may be an absolute number (such as 2), or a comparative number (such as -1). Using a '+' or '-' operator means 'search addresses for values that have changed by that amount'.

          @@ -1180,10 +1185,10 @@ addresses and allows another search.

          The following is an example of inspecting all addresses that have decreased by 1:

            -
          • Click 'Search' with empty input. All address/values are highlighted
          • +
          • Click 'Search...' and then 'OK' (no value entered). All address/values are highlighted
          • Exit debugger mode and lose a life, let your energy decrease, or do whatever it is you're trying to debug
          • -
          • Enter debugger mode again, click 'Compare' and and enter a '-1' for input. +
          • Enter debugger mode again, click 'Compare...' and and enter a '-1' for input. This finds all values that have decreased by 1 (as compared to their current values)
          • Repeatedly following these steps may help to narrow number of @@ -1219,7 +1224,7 @@ a relative jump are in fact code, or simply data.

            The "Bank state" is self-explanatory, and shows a summary of the current bank information. For normal bankswitched ROMs, this will be the current bank number, however more advanced schemes will show other types of information here. More detailed -information is available in Detailed Bankswitch Information (N).

            +information is available in Detailed Bankswitch Information.

            Each line of disassembly has four fields:

              @@ -1228,13 +1233,14 @@ labels. Normally there will be nothing there: this indicates that there's no breakpoint set at that address. You can set and clear breakpoints by clicking in this area. When a breakpoint is set, there will be a red circle in this area. These are the same breakpoints as used -by the "break" command, not the conditional "breakif" breakpoints -(which makes sense: cond-breaks can break on any condition, the Program +by the break command, not the conditional "breakif" breakpoints +(which makes sense: conditional breaks can break on any condition, the Program Counter isn't necessarily involved).
            • Labels: Any labels assigned to the given address, either generated automatically by Distella, read from a DASM symbol file or custom -labels created by the user. If 'PC addresses' is enabled, the address will -be shown in grey.
            • +labels created by the user. If 'Show PC addresses' +(see ROM Disassembly Settings) is enabled, +the address will be shown in grey.
            • Disassembled bytes: This is either a standard 6502 mnemonic (possibly with operand), or information about graphics and/or data. For instructions, the cycle count will be included, separated by a semicolon. For graphics, a bitmap of the data, and the address @@ -1299,6 +1305,8 @@ that time. In particular, modifying an address that points to internal RAM will change the RAM, not the underlying ROM. A future release may graphically differentiate between RAM and ROM areas.

              +

              ROM Disassembly Settings

              +

              The ROM Disassembly also contains a Settings dialog, accessible by right-clicking anywhere in the listing:

              @@ -1396,7 +1404,7 @@ the RAM in the DPC scheme is not viewable by the 6507, so its addresses start fr

              Distella Configuration Files

              -

              As mentioned in ROM Disassembly (M), Stella supports the following directives: +

              As mentioned in ROM Disassembly, Stella supports the following directives: CODE/GFX/PGFX/DATA/ROW. While the debugger will try to automatically mark address space with the appropriate directive, there are times when it will fail. There are several options in this case:

              @@ -1419,7 +1427,7 @@ named "rr.a26", with properties entry "River Raid". Attempts will be made as fol

            The location of 'configdir' will depend on the version of Stella, as follows:

            -

        8. Linux/Unix ~/.stella/autoexec.script
          +

          diff --git a/docs/graphics/debugger_ram-dpc.png b/docs/graphics/debugger_ram-dpc.png index fbc42d75c77305aa3487eb28463ff681c37bd331..e3638fc189240812f7f27fe9a93d523d06be852a 100644 GIT binary patch literal 14221 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 DGM#$i literal 12363 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 E0_`z%u>b%7 diff --git a/docs/graphics/debugger_ram-f8sc.png b/docs/graphics/debugger_ram-f8sc.png index b4145c269ffb7cb2cf6d4b80748094f4a1d9ac9f..6bf31567acf32758f689dbf5f7baf47105992994 100644 GIT binary patch literal 6860 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 Bs~`XX literal 6352 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

          LlCKn&p+}wE~&`D$6 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/C!kM4v z^KqUNfNagP3@?wrdXBZ(?3EBBD)9>mi2q#C1j7|xn`%n&e;e|5Va2AxX5LPOGVe5x zMAVqGMYeSfJm=mxS#Z1y>yy`+qe37fM#&n)Qj?86GMDhiWd$5vxGTI1OYd%sv;Q#2 z0*igy+sXK6ZKM~w5*k6?eiJayX*9eVtT`vY2_gdo;SaAbKnc7#=Bxq9^-VN}i)Bdr zMwXy4uS@G%CYAsWl?6ZhPjoj+ct(dhmp!r`H#JClJwn)t#L4iy`hn#rplJRU&{osj z5s98FH<3kfm^QW1UpFEgcwRQF7VBh7=7=T|RYviH^pL4G!9B2z~#qegr&=Ky8f5x;4W7tcK>Al1Q{oqocqyx z>i>VBvFgC^vXd1!u4lwZc4UlMzg-PWIv^=7SA{K>)!6G}yRd2GP%t<_$tnl%S&N(F zB^}vipzNavs_c5q4O}#{P8$V?t2~kgKpkCH6W0X->XAmu!}1KlweE{A!AvqP>*|UVm4E5i+v) zh+UUMK!8`@k!o-qa1|ZS%xVy4dTnXI4gyAnKBn6rM3(kkfcoFdPBoiF&zo!1Ao&3% zoHMZbE4XX;gmq!KQanfZ^(@v`>-=l-drg&A+k??-8qE+ns+U+ z;*8%LNBBFQ(*hv(pva7Ik)4p|+#_3E<~(raHx5W$2a@k$EAm_1oIYg)7U$nU@hTt+ n^|lw~E{gv5BdJxC6gN<9FF#nRj(~qr;7m=-4&@y9?fSn1IB*QP diff --git a/docs/graphics/debugger_ram.png b/docs/graphics/debugger_ram.png index 0b3e983b8a9013a2c1a65316392e7421d0752f69..c16da5a95150c658b372013fec767ad13dcbb0f1 100644 GIT binary patch literal 7579 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 F{{ZE;=6V1C literal 5708 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 literal 4746 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 diff --git a/src/debugger/gui/CartDPCWidget.cxx b/src/debugger/gui/CartDPCWidget.cxx index 01d902ff1..e6354d4ae 100644 --- a/src/debugger/gui/CartDPCWidget.cxx +++ b/src/debugger/gui/CartDPCWidget.cxx @@ -252,7 +252,8 @@ string CartridgeDPCWidget::internalRamDescription() ostringstream desc; desc << "$0000 - $07FF - 2K display data\n" << " indirectly accessible to 6507\n" - << " via DPC+'s Data Fetcher registers\n"; + << " via DPC+'s Data Fetcher\n" + << " registers\n"; return desc.str(); } diff --git a/src/debugger/gui/DebuggerDialog.hxx b/src/debugger/gui/DebuggerDialog.hxx index c06c5131c..842fb0159 100644 --- a/src/debugger/gui/DebuggerDialog.hxx +++ b/src/debugger/gui/DebuggerDialog.hxx @@ -47,9 +47,9 @@ class DebuggerDialog : public Dialog { public: enum { - kSmallFontMinW = 1070, kSmallFontMinH = 720, - kMediumFontMinW = 1150, kMediumFontMinH = 770, - kLargeFontMinW = 1150, kLargeFontMinH = 870 + kSmallFontMinW = 1090, kSmallFontMinH = 720, + kMediumFontMinW = 1160, kMediumFontMinH = 790, + kLargeFontMinW = 1160, kLargeFontMinH = 920 }; DebuggerDialog(OSystem& osystem, DialogContainer& parent, diff --git a/src/debugger/gui/RamWidget.cxx b/src/debugger/gui/RamWidget.cxx index 315f9c597..33016ff1d 100644 --- a/src/debugger/gui/RamWidget.cxx +++ b/src/debugger/gui/RamWidget.cxx @@ -42,7 +42,8 @@ RamWidget::RamWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n myNumRows(numrows), myPageSize(pagesize) { - const int bwidth = lfont.getStringWidth("Compare "), + const string ELLIPSIS = "\x1d"; + const int bwidth = lfont.getStringWidth("Compare " + ELLIPSIS), bheight = myLineHeight + 2; const int VGAP = 4; @@ -71,12 +72,12 @@ RamWidget::RamWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n by += bheight + VGAP * 6; mySearchButton = new ButtonWidget(boss, lfont, bx, by, bwidth, bheight, - "Search", kSearchCmd); + "Search" + ELLIPSIS, kSearchCmd); mySearchButton->setTarget(this); by += bheight + VGAP; myCompareButton = new ButtonWidget(boss, lfont, bx, by, bwidth, bheight, - "Compare", kCmpCmd); + "Compare" + ELLIPSIS, kCmpCmd); myCompareButton->setTarget(this); by += bheight + VGAP; diff --git a/src/gui/InputTextDialog.cxx b/src/gui/InputTextDialog.cxx index 93fec098a..fa999b8e1 100644 --- a/src/gui/InputTextDialog.cxx +++ b/src/gui/InputTextDialog.cxx @@ -65,7 +65,7 @@ void InputTextDialog::initialize(const GUI::Font& lfont, const GUI::Font& nfont, WidgetArray wid; // Calculate real dimensions - _w = fontWidth * 35; + _w = fontWidth * 41; _h = lineHeight * 4 + int(labels.size()) * (lineHeight + 5); // Determine longest label @@ -84,7 +84,7 @@ void InputTextDialog::initialize(const GUI::Font& lfont, const GUI::Font& nfont, for(i = 0; i < labels.size(); ++i) { xpos = 10; - new StaticTextWidget(this, lfont, xpos, ypos, + new StaticTextWidget(this, lfont, xpos, ypos + 2, lwidth, fontHeight, labels[i], kTextAlignLeft); @@ -99,7 +99,7 @@ void InputTextDialog::initialize(const GUI::Font& lfont, const GUI::Font& nfont, xpos = 10; myTitle = new StaticTextWidget(this, lfont, xpos, ypos, _w - 2*xpos, fontHeight, - "", kTextAlignCenter); + "", kTextAlignLeft); myTitle->setTextColor(kTextColorEm); addToFocusList(wid); From 260a8b7bb048b5ff2f95ee8e56b78151aac8cf88 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Mon, 4 Dec 2017 15:59:51 +0100 Subject: [PATCH 016/156] minimal debugger sizes adjusted again --- src/debugger/gui/CartRamWidget.cxx | 2 +- src/debugger/gui/DebuggerDialog.hxx | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/debugger/gui/CartRamWidget.cxx b/src/debugger/gui/CartRamWidget.cxx index 62cb60103..183b58c24 100644 --- a/src/debugger/gui/CartRamWidget.cxx +++ b/src/debugger/gui/CartRamWidget.cxx @@ -77,7 +77,7 @@ CartRamWidget::CartRamWidget( myDesc->setList(sl); addFocusWidget(myDesc); - ypos += myDesc->getHeight() + myLineHeight + 4; + ypos += myDesc->getHeight() + myFontHeight / 2; // Add RAM widget xpos = x + _font.getStringWidth("xxxx"); diff --git a/src/debugger/gui/DebuggerDialog.hxx b/src/debugger/gui/DebuggerDialog.hxx index 842fb0159..0442870e1 100644 --- a/src/debugger/gui/DebuggerDialog.hxx +++ b/src/debugger/gui/DebuggerDialog.hxx @@ -46,10 +46,12 @@ namespace GUI { class DebuggerDialog : public Dialog { public: + // Note: these sizes make sure that all major tabs are fully visible + // cart dependend information (e.g. DPC+) may require more space enum { kSmallFontMinW = 1090, kSmallFontMinH = 720, - kMediumFontMinW = 1160, kMediumFontMinH = 790, - kLargeFontMinW = 1160, kLargeFontMinH = 920 + kMediumFontMinW = 1160, kMediumFontMinH = 770, + kLargeFontMinW = 1160, kLargeFontMinH = 870 }; DebuggerDialog(OSystem& osystem, DialogContainer& parent, From a91bcbadc9d44993d8db3721ba209b236d1645cb Mon Sep 17 00:00:00 2001 From: thrust26 Date: Mon, 4 Dec 2017 18:06:40 +0100 Subject: [PATCH 017/156] "Startup" section to debugger doc added --- docs/debugger.html | 198 ++++++++++++++++++++++++++++----------------- 1 file changed, 122 insertions(+), 76 deletions(-) diff --git a/docs/debugger.html b/docs/debugger.html index 520a822ed..8184543ae 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -16,6 +16,7 @@

        9. Features
        10. How to use the Debugger
            +
          • Startup
          • Global Buttons
          • Change Tracking
          • Prompt Tab @@ -240,6 +241,68 @@ execution by stepping one instruction, scanline, or frame at a time also set breakpoints or traps, which will cause the emulator to enter the debugger when they are triggered, even if it happens in mid-frame.

            +

            Startup

            +At startup, the debugger automatically tries load a number of files which +will provide additional information for the debugger and can make debugging +more convenient. + +
              +
            • + "autoexec.script"
              + Use this plain text file to define e.g. your own functions or settings. + They will be loaded at startup for each ROM. + +

              The location of this file will depend on the OS as follows:

              +

              +

        11. Linux/Unix ~/.stella/cfg/
          + + + + + + + + + + + + +
          Linux/Unix~/.stella/autoexec.script
          Macintosh~/Library/Application Support/Stella/autoexec.script
          Windows%APPDATA%\Stella\autoexec.script    + or
          + _BASEDIR_\autoexec.script + (if a file named 'basedir.txt' exists in the application + directory containing the full pathname for _BASEDIR_) +
          +

          + +
        12. + "<rom_filename>.script"
          + In this ROM specific, plain text file you can store breaks, traps, watches + etc. for future re-use. Use the "save" command to create this file using + the current settings. You can also manually edit the file and add more commands. +

          +
        13. +
        14. + "<rom_filename>.cfg"
          + This file is described in + Distella Configuration Files. +

          +
        15. +
        16. + "<rom_filename>.lst"
          +
        17. +
        18. + "<rom_filename>.sym"
          + If you provied the -l and -s parameters DASM will create these two files during + assembly. Stella uses the file content to display the correct labels. +
        19. +
      +

      Note that all files are only accessed if you enter +the debugger at least once during a program run. This means you can create +these files, and not worry about slowing down emulation unless you're +actively using the debugger.

      + +

      Global Buttons

      @@ -486,13 +549,12 @@ to change the meaning of an expression. The prefixes are:

      assumed to be in the default base. When you first start Stella, the default base is 16 (hexadecimal). You can change it with the "base" command. If you want to change the default base to decimal permanently, - you can put a "base #10" command in your "autoexec.script" file (see - the section on "Startup").

      - -

      Remember, you can use arbitrarily complex expressions with any - command that takes arguments.

      - + you can put a "base #10" command in your "autoexec.script" file (for details + see Startup).

      + +

      Remember, you can use arbitrarily complex expressions with any +command that takes arguments.


      Breakpoints, watches and traps, oh my!

      @@ -736,77 +798,61 @@ all traps at once with the "cleartraps" command.


      Save your work!

      -Stella offers several commands to save your work inside the debugger for -later re-use. +

      Stella offers several commands to save your work inside the debugger for +later re-use.

      -

      save

      -

      If you've defined a lot of complex functions, you probably will -want to re-use them in future runs of the debugger. You can save all -your functions, breakpoints, conditional breaks, traps and watches with the -"save" command. If you name your saved file the same as the ROM filename -and place it in the ROM directory, it will be auto-loaded next time you -load the same ROM in Stella. The save file is just a plain text file -called "rom_filename.script", so you can edit it and add new functions, etc.

      -

      While "save" is ROM specific, you can also create a file called -"autoexec.script" which will be loaded when the debugger starts, no matter -what ROM you have loaded. The location of this file will depend on the -version of Stella, as follows:

      - -

      - - - - - - - - - - - - -
      Linux/Unix~/.stella/autoexec.script
      Macintosh~/Library/Application Support/Stella/autoexec.script
      Windows%APPDATA%\Stella\autoexec.script    - OR
      - _BASEDIR_\autoexec.script - (if a file named 'basedir.txt' exists in the application - directory containing the full pathname for _BASEDIR_) -
      -

      Note that these '.script' script files are only accessed if you enter -the debugger at least once during a program run. This means you can create -these files, and not worry about slowing down emulation unless you're -actively using the debugger.

      - -

      saveconfig

      -The "saveconfig" command creates a DiStella Configuration File which is -based on Stella's dynamic and static analysis of the current ROM. -

      This will be automatically loaded the next time your start the debugger. -From there on, you can continue analyzing the ROM and then use "saveconfig" -again to update the configuration. You can also use "loadconfig" to load it -manually. -

      Note that this is not tested for multi-banked ROMs.

      - -

      savedis

      -While your are playing or debugging a game, Stella will gather dynamic -information about the ROM. It can then use that information together with -a static analysis of the ROM and therefore create a better disassembly -than DiStella alone. "savedis" allows you to save that disassembly as the -result of this combined analysis. -

      Note that this currently only works for single banked ROMs. For larger -ROMs, the created disassembly is incomplete.

      - -

      saverom

      -If you have manipulated a ROM, you can save it with "saverom". The file is -named '<rom_filename>.a26'. - -

      saveses

      -The "saveses" command dumps the whole prompt session into a file named -"YYYY-MM-DD_HH-mm-ss.txt". So you can later lookup what you did exactly -when you were debugging at that time. - -

      savestate

      -

      This command works identical to the save state hotkey (F9) during emulation. -Any previously saved state can be loaded with "loadstate" plus the slot -number (0-9).

      +
        +
      • + save: If you've defined a lot of complex functions, you probably will + want to re-use them in future runs of the debugger. You can save all + your functions, breakpoints, conditional breaks, traps and watches with the + "save" command. If you name your saved file the same as the ROM filename + and place it in the ROM directory, it will be auto-loaded next time you + load the same ROM in Stella. The saved file is just a plain text file + called "<rom_filename>.script", so you can edit it and add new functions, etc. +

        Note: While "save" is ROM specific, you can also create a file called + "autoexec.script" which will be loaded when the debugger starts, no matter + what ROM you have loaded.

        + See Startup for details. +

      • +
      • + saveconfig: The "saveconfig" command creates a + DiStella Configuration File which is + based on Stella's dynamic and static analysis of the current ROM. +

        This will be automatically loaded the next time your start the debugger. + From there on, you can continue analyzing the ROM and then use "saveconfig" + again to update the configuration. You can also use "loadconfig" to load it + manually. +

        Note that this is not tested for multi-banked ROMs.

        +
      • +
      • + savedis: + While your are playing or debugging a game, Stella will gather dynamic + information about the ROM. It can then use that information together with + a static analysis of the ROM and therefore create a better disassembly + than DiStella alone. "savedis" allows you to save that disassembly as the + result of this combined analysis. +

        Note that this currently only works for single banked ROMs. For larger + ROMs, the created disassembly is incomplete.

        +
      • +
      • +

        saverom: + If you have manipulated a ROM, you can save it with "saverom". The file is + named "<rom_filename>.a26".

        +
      • +
      • +

        saveses: + The "saveses" command dumps the whole prompt session into a file named + "<YYYY-MM-DD_HH-mm-ss>.txt". So you can later lookup what you did exactly + when you were debugging at that time.

        +
      • +
      • +

        savestate: + This command works identical to the save state hotkey (F9) during emulation. + Any previously saved state can be loaded with "loadstate" plus the slot + number (0-9).

        +
      • +

      Prompt Commands

      From 1f43539f10627d09778880dbb468d0b20b8149ac Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Mon, 4 Dec 2017 14:12:06 -0330 Subject: [PATCH 018/156] Changed Switches::update() to not evaluate settings on every call. Basically, removed determination of whether we're in 2600 or 7800 mode from the hot path, and moved it to a method that is called only when it changes (currently that method doesn't seem to be called at all, since it seems like 'console' setting cannot be changed dynamically). --- src/emucore/Console.cxx | 2 +- src/emucore/EventHandler.cxx | 28 +++++++++++++++++++--------- src/emucore/EventHandler.hxx | 11 +++++++++++ src/emucore/M6532.cxx | 2 +- src/emucore/Switches.cxx | 25 ++++++++++++++++++------- src/emucore/Switches.hxx | 24 ++++++++++++++++++------ src/gui/CommandDialog.cxx | 2 +- src/gui/DeveloperDialog.cxx | 1 + 8 files changed, 70 insertions(+), 25 deletions(-) diff --git a/src/emucore/Console.cxx b/src/emucore/Console.cxx index 3a755f853..54b9276ce 100644 --- a/src/emucore/Console.cxx +++ b/src/emucore/Console.cxx @@ -95,7 +95,7 @@ Console::Console(OSystem& osystem, unique_ptr& cart, myRiot = make_unique(*this, myOSystem.settings()); myTIA = make_unique(*this, myOSystem.sound(), myOSystem.settings()); myFrameManager = make_unique(); - mySwitches = make_unique(myEvent, myProperties); + mySwitches = make_unique(myEvent, myProperties, myOSystem.settings()); myTIA->setFrameManager(myFrameManager.get()); diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index f505096b7..943b3f883 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -65,6 +65,7 @@ EventHandler::EventHandler(OSystem& osystem) myFryingFlag(false), myUseCtrlKeyFlag(true), mySkipMouseMotion(true), + myIs7800(false), myAltKeyCounter(0), myContSnapshotInterval(0), myContSnapshotCounter(0) @@ -117,6 +118,9 @@ void EventHandler::initialize() // Default phosphor blend Properties::setDefault(Display_PPBlend, myOSystem.settings().getString("tv.phosblend")); + + // Toggle 7800 mode + set7800Mode(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -192,6 +196,15 @@ void EventHandler::toggleSAPortOrder() #endif } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void EventHandler::set7800Mode() +{ + if(myOSystem.hasConsole()) + myIs7800 = myOSystem.console().switches().toggle7800Mode(myOSystem.settings()); + else + myIs7800 = false; +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void EventHandler::poll(uInt64 time) { @@ -900,9 +913,6 @@ void EventHandler::handleEvent(Event::Type event, int state) { // Take care of special events that aren't part of the emulation core // or need to be preprocessed before passing them on - bool devSettings = myOSystem.settings().getBool("dev.settings"); - bool is7800 = (myOSystem.settings().getString(devSettings ? "dev.console" : "plr.console") == "7800"); - switch(event) { //////////////////////////////////////////////////////////////////////// @@ -1026,21 +1036,21 @@ void EventHandler::handleEvent(Event::Type event, int state) //////////////////////////////////////////////////////////////////////// // Events which relate to switches() case Event::ConsoleColor: - if(state && !is7800) + if(state && !myIs7800) { myEvent.set(Event::ConsoleBlackWhite, 0); myOSystem.frameBuffer().showMessage("Color Mode"); } break; case Event::ConsoleBlackWhite: - if(state && !is7800) + if(state && !myIs7800) { myEvent.set(Event::ConsoleColor, 0); myOSystem.frameBuffer().showMessage("BW Mode"); } break; case Event::ConsoleColorToggle: - if(state && !is7800) + if(state && !myIs7800) { if(myOSystem.console().switches().tvColor()) { @@ -1054,7 +1064,7 @@ void EventHandler::handleEvent(Event::Type event, int state) myEvent.set(Event::ConsoleColor, 1); myOSystem.frameBuffer().showMessage("Color Mode"); } - myOSystem.console().switches().update(myOSystem.settings()); + myOSystem.console().switches().update(); } return; @@ -1087,7 +1097,7 @@ void EventHandler::handleEvent(Event::Type event, int state) myEvent.set(Event::ConsoleLeftDiffB, 0); myOSystem.frameBuffer().showMessage("Left Difficulty A"); } - myOSystem.console().switches().update(myOSystem.settings()); + myOSystem.console().switches().update(); } return; @@ -1120,7 +1130,7 @@ void EventHandler::handleEvent(Event::Type event, int state) myEvent.set(Event::ConsoleRightDiffB, 0); myOSystem.frameBuffer().showMessage("Right Difficulty A"); } - myOSystem.console().switches().update(myOSystem.settings()); + myOSystem.console().switches().update(); } return; //////////////////////////////////////////////////////////////////////// diff --git a/src/emucore/EventHandler.hxx b/src/emucore/EventHandler.hxx index 62fd60e8d..9fa9645ee 100644 --- a/src/emucore/EventHandler.hxx +++ b/src/emucore/EventHandler.hxx @@ -91,6 +91,13 @@ class EventHandler */ void toggleSAPortOrder(); + /** + Toggle whether the console is in 2600 or 7800 mode. + Note that for now, this only affects whether the 7800 pause button is + supported; there is no further emulation of the 7800 itself. + */ + void set7800Mode(); + /** Collects and dispatches any pending events. This method should be called regularly (at X times per second, where X is the game framerate). @@ -558,6 +565,10 @@ class EventHandler // state change; we detect when this happens and discard the event bool mySkipMouseMotion; + // Whether the currently enabled console is emulating certain aspects + // of the 7800 (for now, only the switches are notified) + bool myIs7800; + // Sometimes key combos with the Alt key become 'stuck' after the // window changes state, and we want to ignore that event // For example, press Alt-Tab and then upon re-entering the window, diff --git a/src/emucore/M6532.cxx b/src/emucore/M6532.cxx index a0d966c4d..61167ba5f 100644 --- a/src/emucore/M6532.cxx +++ b/src/emucore/M6532.cxx @@ -106,7 +106,7 @@ void M6532::update() // Update entire port state port0.update(); port1.update(); - myConsole.switches().update(mySettings); + myConsole.switches().update(); // Get new PA7 state bool currPA7 = port0.myDigitalPinState[Controller::Four]; diff --git a/src/emucore/Switches.cxx b/src/emucore/Switches.cxx index 07df17db6..349891132 100644 --- a/src/emucore/Switches.cxx +++ b/src/emucore/Switches.cxx @@ -17,12 +17,15 @@ #include "Event.hxx" #include "Props.hxx" +#include "Settings.hxx" #include "Switches.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Switches::Switches(const Event& event, const Properties& properties) +Switches::Switches(const Event& event, const Properties& properties, + const Settings& settings) : myEvent(event), - mySwitches(0xFF) + mySwitches(0xFF), + myIs7800(false) { if(properties.get(Console_RightDifficulty) == "B") { @@ -50,15 +53,14 @@ Switches::Switches(const Event& event, const Properties& properties) { mySwitches &= ~0x08; } + + toggle7800Mode(settings); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Switches::update(const Settings& settings) +void Switches::update() { - bool devSettings = settings.getBool("dev.settings"); - bool is7800 = devSettings && (settings.getString("dev.console") == "7800"); - - if(is7800) + if(myIs7800) { if(myEvent.get(Event::Console7800Pause) != 0) { @@ -147,3 +149,12 @@ bool Switches::load(Serializer& in) } return true; } + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +bool Switches::toggle7800Mode(const Settings& settings) +{ + bool devSettings = settings.getBool("dev.settings"); + myIs7800 = devSettings && (settings.getString("dev.console") == "7800"); + + return myIs7800; +} diff --git a/src/emucore/Switches.hxx b/src/emucore/Switches.hxx index a3ac5d741..50e77e8b5 100644 --- a/src/emucore/Switches.hxx +++ b/src/emucore/Switches.hxx @@ -20,10 +20,10 @@ class Event; class Properties; +class Settings; #include "Serializable.hxx" #include "bspf.hxx" -#include "Settings.hxx" /** This class represents the console switches of the game console. @@ -40,25 +40,27 @@ class Switches : public Serializable public: /** Create a new set of switches using the specified events and - properties + properties. @param event The event object to use for events + @param props The ROM properties to use for the currently enabled ROM + @param settings The settings used by the system */ - Switches(const Event& event, const Properties& properties); + Switches(const Event& event, const Properties& props, const Settings& settings); virtual ~Switches() = default; public: /** - Get the value of the console switches + Get the value of the console switches. @return The 8 bits which represent the state of the console switches */ uInt8 read() const { return mySwitches; } /** - Update the switches variable + Update the switches variable. */ - void update(const Settings& settings); + void update(); /** Save the current state of the switches to the given Serializer. @@ -104,6 +106,13 @@ class Switches : public Serializable */ bool rightDifficultyA() const { return mySwitches & 0x80; } + /** + Toggle between 2600 and 7800 mode depending on settings. + + @return True if 7800 mode enabled, else false + */ + bool toggle7800Mode(const Settings& settings); + private: // Reference to the event object to use const Event& myEvent; @@ -111,6 +120,9 @@ class Switches : public Serializable // State of the console switches uInt8 mySwitches; + // Are we in 7800 or 2600 mode? + bool myIs7800; + private: // Following constructors and assignment operators not supported Switches() = delete; diff --git a/src/gui/CommandDialog.cxx b/src/gui/CommandDialog.cxx index 898a362bc..0df07a596 100644 --- a/src/gui/CommandDialog.cxx +++ b/src/gui/CommandDialog.cxx @@ -184,7 +184,7 @@ void CommandDialog::handleCommand(CommandSender* sender, int cmd, { instance().eventHandler().leaveMenuMode(); instance().eventHandler().handleEvent(event, 1); - instance().console().switches().update(instance().settings()); + instance().console().switches().update(); instance().console().tia().update(); instance().eventHandler().handleEvent(event, 0); } diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index 7dfda32d3..231bfdc3c 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -671,6 +671,7 @@ void DeveloperDialog::saveConfig() #endif } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DeveloperDialog::setDefaults() { bool devSettings = mySettingsGroup0->getSelected() == 1; From 5bd51fea5bd44ef427cbd22f8a32f0fcf0e80436 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Mon, 4 Dec 2017 19:57:22 +0100 Subject: [PATCH 019/156] more links added some reformatting --- docs/debugger.html | 131 +++++++++++++++++++++++++-------------------- 1 file changed, 74 insertions(+), 57 deletions(-) diff --git a/docs/debugger.html b/docs/debugger.html index 8184543ae..0c020aa47 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -45,7 +45,7 @@
    4. I/O Tab
    5. Audio Tab
    6. TIA Display
    7. -
    8. TIA Info
    9. +
    10. TIA Information
    11. TIA Zoom
    12. Breakpoint/Trap Status
    13. CPU Registers
    14. @@ -214,7 +214,7 @@ present in the debugger):

      For space reasons, the Prompt, TIA, I/O and Audio displays are split into 4 tabs, only one of which is visible at a time. You can use the mouse or keyboard to select which tab you want to view. Control/Cmd + Tab cycles between -tabs from left-to-right, Control/Cmd + Shift + Tab cycles right-to-left. +tabs from left-to-right, Shift + Control/Cmd + Tab cycles right-to-left. Pressing Tab (or Shift + Tab) cycles between widgets in the current tab (except for in the Prompt Tab, where 'tab' is used for something else).

      @@ -308,8 +308,8 @@ actively using the debugger.

      Global Buttons

      There are some buttons on the right top that always show up no matter which -tab you are looking at. This is because these are the ones which you will use -most.

      +tab you are looking at. This is because these are the ones that are most frequently +used.

        @@ -323,34 +323,34 @@ previous rewind operation. The rewind buffer is 100 levels deep by default.

        The other operations are Step, Trace, Scan+1, Frame+1 and Exit (debugger).

        You can also use the buttons from anywhere in the GUI via hotkeys.

        - +

        - + - + - + - + - + - + @@ -358,10 +358,7 @@ previous rewind operation. The rewind buffer is 100 levels deep by default.

        Key Function
        Control + sControl-s Step
        Control + tControl-t Trace
        Control + LControl-L Scan+1
        Control + fControl-f Frame+1
        Control + rControl-r Rewind
        Control + Shift + rShift-Control-r Unwind
        Exit
        -

        When you use these buttons, the prompt doesn't change. This means the -status lines with the registers and disassembly will be "stale". You -can update them just by re-running the relevant commands in the prompt.

        - +


        @@ -419,6 +416,10 @@ intend to add GUI equivalents for all (or almost all?) of the prompt commands in future releases. People who like command prompts will be able to use the prompt, but people who hate them will have a fully functional debugger without typing (or without typing much, anyway).

        + +

        Note: unlike the rest of the UI, whatever is shown in the prompt will not +be updated during debugging and thus eventually become "stale". You can update it +just by re-running the relevant commands in the prompt.


        Tab Key Auto-Complete

        @@ -494,7 +495,7 @@ to change the meaning of an expression. The prefixes are:

        • Dereference prefixes:
          -

          "*"
          +

          '*'
          Dereference a byte pointer. "*a" means "the byte at the address that the A register points to". If A is 255 (hex $ff), the result will be the value currently stored in memory location 255. This operator @@ -504,7 +505,7 @@ to change the meaning of an expression. The prefixes are:

          written as address[0]. *(address+1) can be written as address[1], etc.

          -

          "@"
          +

          '@'
          Dereference a pointer to a word. This is just like the "*" byte deref, except it refers to a 16-bit value, occupying 2 locations, in low-byte-first format (standard for the 6507).

          @@ -520,24 +521,24 @@ to change the meaning of an expression. The prefixes are:

        • Hi/Lo Byte Prefixes:
          -

          "<"
          +

          '<'
          Take the low byte of a 16-bit value. This has no effect on an 8-bit value: "a" is equal to "<a". However, "<$1234" equals "$34".

          -

          ">"
          +

          '>'
          Take the high byte of a 16-bit value. For 8-bit values such as the Accumulator, this will always result in zero. For 16-bit values, "<$1234" = "$12".

        • Number Base Prefixes:
          -

          "#"
          +

          '#'
          Treat the input as a decimal number.

          -

          "$"
          +

          '$'
          Treat the input as a hex number.

          -

          "\"
          +

          '\'
          Treat the input as a binary number.

          These only have meaning when they come before a number, not a @@ -549,7 +550,11 @@ to change the meaning of an expression. The prefixes are:

          assumed to be in the default base. When you first start Stella, the default base is 16 (hexadecimal). You can change it with the "base" command. If you want to change the default base to decimal permanently, - you can put a "base #10" command in your "autoexec.script" file (for details + you can put a +
          +      base #10
          +    
          + command in your "autoexec.script" file (for details see Startup).

        @@ -630,8 +635,8 @@ zero. You can remove a cond-break with "delbreakif number", where the number comes from "listbreaks" or by entering the same conditional break again.

        Any time the debugger is entered due to a trap, breakpoint, or -conditional break, the reason will be displayed in the status area -near the TIA Zoom display (area H).

        +conditional break, the reason will be displayed in the +Breakpoint/Trap Status area.

        Functions

        @@ -1006,7 +1011,7 @@ GRP1

        For many registers, writes don't take effect immediatelly as the TIA takes some color clocks to change state. In Stella's TIA core, this is implemented by queueing the writes, and the contents of this queue -are visualized in the debugger in the queued writes area of the TIA tab.

        +are visualized in the debugger in the "Queued Writes" area of the TIA tab.


        @@ -1050,8 +1055,8 @@ white) filling the rest of the display. Note that if 'phosphor mode' or TV effects are enabled, you won't see the effects here; this shows the raw TIA image only.

        -

        You can use the "Scan+1" button, the prompt "scan" command, or the -Control-L key to watch the TIA draw the frame one scanline at a time.

        +

        To e.g. watch the TIA draw the frame one scanline at a time, you can +use the "Scan+1" button, the prompt "scan" command or the Control-L key.

        You can also right-click anywhere in this window to show a context menu, as illustrated:

        @@ -1067,9 +1072,9 @@ as illustrated:

        scanline where the mouse was clicked. You can also use the Prompt Tab commands to list and turn off the breakpoint.
      • Set zoom position: Influences what is shown in the TIA - zoom area (further described in part (G). The zoom area will - contain the area centered at the position where the mouse was - clicked.
      • + zoom area (further described in TIA Zoom). + The zoom area will contain the area centered at the position where the + mouse was clicked.
      • Save snapshot: Saves the TIA image currently shown, including any current 'effects' (fixed debug colors, partial fill, etc).
      • @@ -1078,8 +1083,8 @@ as illustrated:


        -

        (F) TIA Info

        -

        To the right of the TIA display (E) there is TIA information, as shown:

        +

        (F) TIA Information

        +

        To the right of the TIA Display area, TIA information is displayed:

        The indicators are as follows (note that all these are read-only):

          @@ -1107,12 +1112,10 @@ Position, and will range from 0 to 228).

          (G) TIA Zoom

          -

          Below the TIA Info (F) is the TIA Zoom area. This allows you to enlarge -part of the TIA display, so you can see fine details. Note that unlike -the TIA display area, this one does generate frames as the real -system would. So, if you've enabled 'phosphor mode' for a ROM, it -won't be honoured here (ie, you'll see alternating frames at 30Hz display, -just like on a real system).

          +

          Below the TIA Information is the TIA Zoom area. This allows you to enlarge +part of the TIA display, so you can see fine details. Like the +TIA Display area, +this one does generate frames as the real system would.

          You can also right-click anywhere in this window to show a context menu, as illustrated:

          @@ -1125,11 +1128,12 @@ a context menu in the TIA Display.


          (H) Breakpoint/Trap Status

          -

          Below the TIA Zoom (G), there is a status line that shows the reason and the -address the debugger was entered (if a breakpoint or trap was hit), as shown:

          +

          Below the TIA Zoom there is a status line that +shows the reason and the address the debugger was entered (if a breakpoint or +trap was hit), as shown:

          The output here will generally be self-explanatory. Due to space concerns, -the reasons will be shown as follows: +the reason will be shown as follows:

          • "CBP:" for conditional breakpoints
          • "BP:" for normal breakpoints
          • @@ -1167,24 +1171,37 @@ learn :)


            (J) Data Operations Buttons

            -

            These buttons can be used to change values in either CPU Registers (I), or -the RIOT RAM (K), depending on which of these widgets is currently active. +

            These buttons can be used to change values in either +CPU Registers, +the M6532/RIOT RAM or +Detailed Cartridge Extended RAM Information, +depending on which of these widgets is currently in focus.

            Each of these buttons also have a keyboard shortcut (indicated in square brackets). In fact, many of the inputboxes in various parts of the debugger respond to these same keyboard shortcuts. If in doubt, give them a try.

            -
            -  0   [z]    - Set the current location/register to zero.
            -  Inv [i !]  - Invert the current location/register [toggle all its bits].
            -  Neg [n]    - Negate the current location/register [twos' complement negative].
            -  ++  [+ =]  - Increment the current location/register
            -  --  [-]    - Decrement the current location/register
            -  <<  [< ,]  - Shift the current location/register left.
            -  >>  [> .]  - Shift the current location/register right.
            -
            -  Any bits shifted out of the location/register with << or >>
            -  are lost (they will NOT end up in the Carry flag).
            -
            + + + + + + + + + + + + + + + + + + + +
            ButtonShortutDescription
            0
            'z'
            Set the current location/register to zero.
            Inv
            'i' or '!'
            Invert the current location/register (toggle all its bits)
            Neg
            'n'
            Negate the current location/register (twos' complement negative)
            ++
            '+' or '='
            Increment the current location/register.
            --
            '-'
            Decrement the current location/register.
            <<
            '<' or ','
            Shift the current location/register left.
            >>
            '>' or '.'
            Shift the current location/register right.
            +

            Any bits shifted out of the location/register with << or >> +are lost (they will NOT end up in the Carry flag).

            @@ -1471,7 +1488,7 @@ named "rr.a26", with properties entry "River Raid". Attempts will be made as fol
          • ROM dir based on actual ROM name: rr.cfg
          • CFG dir based on properties entry name: configdir/River Raid.cfg
          -

          The location of 'configdir' will depend on the version of Stella, as follows:

          +

          The location of 'configdir' will depend on the OS as follows:

          From ad3cd4de35b5f545c20524b3c8d5926bf9e8842a Mon Sep 17 00:00:00 2001 From: thrust26 Date: Mon, 4 Dec 2017 21:14:45 +0100 Subject: [PATCH 020/156] screenshot updated --- docs/graphics/debugger_main.png | Bin 50462 -> 86537 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/graphics/debugger_main.png b/docs/graphics/debugger_main.png index 709623f33af721a91137d63c36465b8178cf37c9..0797e56f72cf9956f649316248f4ca2f0aa19015 100644 GIT binary patch literal 86537 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
          JcA|)Kd}U;T_?^XXJWjJy4zZck9K3 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 E|5MHoiU0rr literal 50462 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 rjMrr!Y^i{c+S0|(YZ>jfR%jPSe5Lu-ME}7gd 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 vZopv~g&Q|fPXpJ$#nll9NVmZQNG_Z)VMW{9 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 From afb90efd5672801b798cdc771ba69623dbc8ef2b Mon Sep 17 00:00:00 2001 From: thrust26 Date: Tue, 5 Dec 2017 11:03:12 +0100 Subject: [PATCH 021/156] debugger screenshot updates --- docs/debugger.html | 8 +++++++- docs/graphics/debugger_globalbuttons.png | Bin 1296 -> 1491 bytes docs/graphics/debugger_options.png | Bin 0 -> 407 bytes docs/graphics/rominfo_2x_small.png | Bin 45208 -> 78042 bytes 4 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 docs/graphics/debugger_options.png diff --git a/docs/debugger.html b/docs/debugger.html index 0c020aa47..4e13f47f7 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -39,7 +39,7 @@
        • Save your work!
        • -
        • Prompt commands
        • +
        • Prompt Commands
        • I/O Tab
        • @@ -359,6 +359,12 @@ previous rewind operation. The rewind buffer is 100 levels deep by default.

          +

          To the left of the global buttons, you find the "Options..." button.

          +
            +

            +
          +

          This opens the Options Menu which is described +in detail in the User's Guide.


          diff --git a/docs/graphics/debugger_globalbuttons.png b/docs/graphics/debugger_globalbuttons.png index 062287d2703abbfcc474547fa3ff207e0fe55a87..907a2980c797ed69362adaa3ad3eaa96275648b5 100644 GIT binary patch delta 1421 zcmZuxX;4#F6ox$VLdA}*GgU^uykb=(wX*nJe=TbH`f_~>nM#4VKU#BtG6X@4jtI;_>H z8px;!CdTA$e({oWZ0qO_D8}EnJz+0xt;VWI(n?$*;2u?dSa=uUutkK665-ID3waly z?R~PKKNIKG`k#XzmZ(@Y3}*u4_U7Aq{*#ZXM%)Ig3QGr5_;G;%>bF>SLOK?5e5?4u z#-KZ7F7C4r!yAJm0b*{pE*wDy*z07^s|r69BZ%!eIEd8pn4V+;jzFBdjN!_gsZG4f zBVvJ|P#mQ-^~mhUVCvsg%Gb0i934cjuo!xOH~JBIUoTc5@R%2_Q|N;J+LM&or!vKK zOa)#iCtWbZ9M>L3HjBnV48Q&W&l-XT>i_QbRL<>&SB`E-ct3Qf({IO8ZHDsH>99Yy zREEWKsGwg0G-(MFW+==x9XtSRO$%OjCJs;+uq^Wx6Du(l0b>KUT<;a3gjbpIOxS!JVUx@}!cT#UTj)Vf<+Po*qh{iVk>NTzJ?I36@%bv8wm9A)L^Rc;*UTxzb(uasI z>-(h)z$4Tg^PrqGjYn}g;H+NBU_CiJ-W*|gt$@VogAR+i>6N{SkuIfDWh{U0y9_f2 z!v06b|2Lzj>`N;0=;O9>QY?S51&4XGR{i>A`$2s6*Wxne^lsQcy;La35~=UjpnznB z6J*V9Fe#Pg%e6Hc5&5K`y% zx?Q%TRQuY%(6x~bIEJ$!B40C0FFv)e(yPSssAbq^1%mi;d7pWoyd*recSdod;;wgO zN?0C(^OWus4Qec(PSgyam0ZQ44TSM7^*v;dRsT}; z(@SeZb8aIh?CxGEjLiCIIF+U#mA|oATEgusV(M1L1I~A-JLW9X++?!-Or4Z1vG~N3 zMZzFgwew#yOt_in7s-aV}X%GJOTG<0FZ!|({(YOU9z*# zfRr9l6m0WCPJRGlz8I+AHgy$(nrK9xH^(#lOiTiy3pDV$!nc~2?70c;aS#B{O$MF; zYP;g~?`)U;42QI2Avsc8xiRp%lBF_;#9)1ObEBPD7~Pz5eNh$6-C1rG*EsatFSWwY z_t-*^Kui12%+Aw_#O>rU|McejEh-TyEoWzPStE;6rX+NNN>livDV#F>?kyiDDX7a; Sf49}3utsrFWa5>rOyNHn*oedc delta 1225 zcmV;)1UCEA3y=ySiBL{Q4GJ0x0000DNk~Le0001I0001M2m$~A0OjEe)sZ1te*}O@ zL_t(|UhS8GZQU>oL_0!<=>Q$4Lv*A9nWIy+^ryp5pG29GYnxU{JOt8FrhS)uC;9UG z<7d)KrZz&RHo_*gA48=l2y1Vm((c}=tA@RZaD)@Lg1?yS`2CQ}ue;eVf)OgxV zrQMy98jqT(z~+gm!O2GhHZwIBV6!8&>i;M(&N)g$W6Odww*xl4saZ~7oM)6pz_0|c z=}N8P2gdD=YA{u5Z8I>gJ*rK4BUb1u7qp~~=uW`qPHMaNfN_mcyHxL`MeAWihXcF1 zAFvtvXN|D#PP#4;<$#9If9Qe(yMWE;?=_DoTkAP3-4EDwrAAmchH;)z7S&tqinNxk z*7erX{eVqxYDD#BFwQxuN_D>FkaR9ympYY*4c!UY>`1K&j5{(aGGH@Pa{)HbN{#i& zN(`Qo8o~NZrQMyC+T3JnBV=kLWNIUvl^Rc*skFOOQsYrG71%s6e>FJyXuxKs<^pV9 zo!a^j^sAtC7oH~po0p~r&le%M<-7N+)GnsHJ1Y-PjapK>I^AS;ZczbY+`Eg*WE5K?#QUffXz(J1=zeIwe_E4RniJbfA#Ue=0&N=IykTIX{KgV zJ{2p`Qaygq6_P)stz`zr$%euir83Gx4l#^2b%BHN`>8b|BdpYT+DxV0?WER@jHsr@ zqh>0w+40+;3XD54Dl%X*Q*!|}!=*;=1SmLg3t%&1e`=t3s9yCC69=1SfX#<}LaAFl;1|aLo0*ymu=%9aq*b2TO|3E31K14x zUgHv7&gkvy$h+hKbV2V0Y=%oMCSWsDa{)Ftsc~C;)! diff --git a/docs/graphics/debugger_options.png b/docs/graphics/debugger_options.png new file mode 100644 index 0000000000000000000000000000000000000000..eaf5f6dc9016f46e6769cfe18384c87008b0d867 GIT binary patch literal 407 zcmeAS@N?(olHy`uVBq!ia0vp^kw7fN!2~2*|FozBDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5he4R}c>anMprB-lYeY$Kep*R+Vo@qXL1JcJiC$i6iGqoq zfu5n|m1~=TiWu2FT^vIq+}}>P$a~0u$3?O+QKF$xVv(|9Dc`atj`q#j>g$*oryg7W zJ@Nk1z~c7XHmois2VKN_-aRs!bmg{q>=WhW7k{SI)Gh3O{nCQzBCBw$!9~`~caGL- zO78VNzS?f#TJEoxv%VJcSzpw@=^`$@Fk0Ni*&=!Ik|dVkNt-XV)^VLYvAkHkjLmiO z3fB*Y9`>H=%C@aOAHHit_C>~{9y5!kZk9LQxLt39(}(bziQ+=)n`)MFTQbj($XU|R z@A$K9YO(Gn=8M-{oA$Mb)q0+L6|bro#J=X``U#)9nJ?aPHAw~-ZVaBTelF{r5}E*iTb}6v literal 0 HcmV?d00001 diff --git a/docs/graphics/rominfo_2x_small.png b/docs/graphics/rominfo_2x_small.png index b51ee93e7f7f50f6f4a021412de2ae4f9840463c..c5aabcc3bd7889c480203d0cf83d9d587fae7180 100644 GIT binary patch literal 78042 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 Nw`~dCT(OaO>Td^-9ku`f From 5f733fc6d68dd7748e111f63de8e8b62ce979276 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Tue, 5 Dec 2017 12:39:50 +0100 Subject: [PATCH 022/156] changelog updated --- Changes.txt | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/Changes.txt b/Changes.txt index 35ccbe1aa..463058554 100644 --- a/Changes.txt +++ b/Changes.txt @@ -12,10 +12,16 @@ Release History =========================================================================== -5.0.2 to 5.0.3: (August xx, 2017) +5.0.2 to 5.1: (December xx, 2017) - * Huge improvements to the disassembly view in the debugger: - - TODO: add items ... + * Huge improvements to the disassembly view in the debugger and + disassembly files created: + - reformatting in debugger for better space utilization + - much improved code and data detection + - access tracking and indicators for TIA/IO/RAM adresses in disassembly + - break vector is tracked (if used) + - improved cycle count (page penalties, sums created in disassembly) + - improved handling of instruction masking opcodes (e.g. BIT) * Fixed Genesis controller autodetect (Stay Frosty 2, Scramble, etc). @@ -50,12 +56,43 @@ CompuMate ROM; this controller type can no longer be manually selected, and will be used automatically used for CompuMate ROMs. + * Fixed cheat codes, so 7 digits codes are now accepted as described in + the doc. + + * Fixed swapped ports being displayed wrong in System Logs and debugger. + + * Added options to erase the AtariVox/Savekey for all ROMs or the current + one. + + * Moved various developer related settings in new Developer Settings + dialog. These settings now come in two groups (player/developer) and + allow switching all settings at once. + + * Improved tab auto-complete in debugger + + * Added conditional traps and savestate creation to debugger + + * Extended 'rewind' to take a second parameter which allows rewinding + multiple states. + + * Added 'unwind' command, which undoes the latest rewind(s) + + * Added '<' (unwind) button to debugger. + + * Added 'Options...' button to debugger which gives access to the options + menu during debugging. + * Added debugger pseudo-register '_fcycles', which gives the number of CPU cycles that have occurred since the frame started. + * Added debugger pseudo-register '_cyclesLo' and '_cyclesHi', which give + the number of CPU cycles that have occurred since emulation started. + * Extended debugger 'dump' command to take a second argument, indicating the end of the range to dump data. + * Added widgets for trackball and SaveKey/AtariVox controllers + * Improved emulation of 'FE' bankswitch scheme (no user-visible changes, but internally the emulation is much more accurate compared to the real thing). Related to this, improved the debugger support for this From f18fa0fcb891f4e5fd82480e3aed2bc0ff679d1f Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Tue, 5 Dec 2017 11:07:55 -0330 Subject: [PATCH 023/156] Updated libpng to latest release. Fixed tabs vs. spaces in Changes.txt. --- Changes.txt | 40 +++++++++++++++++------------------ src/libpng/png.c | 34 ++++++++++++++--------------- src/libpng/png.h | 28 ++++++++++++------------ src/libpng/pngconf.h | 2 +- src/libpng/pnglibconf.h | 2 +- src/libpng/pngread.c | 14 ++++++++++-- src/libpng/pngrtran.c | 22 ++++++++++--------- src/libpng/pngrutil.c | 47 ++++++++++++++++++----------------------- src/libpng/pngtrans.c | 6 +++--- src/libpng/pngwrite.c | 2 +- 10 files changed, 102 insertions(+), 95 deletions(-) diff --git a/Changes.txt b/Changes.txt index 463058554..344acd30a 100644 --- a/Changes.txt +++ b/Changes.txt @@ -17,11 +17,11 @@ * Huge improvements to the disassembly view in the debugger and disassembly files created: - reformatting in debugger for better space utilization - - much improved code and data detection - - access tracking and indicators for TIA/IO/RAM adresses in disassembly - - break vector is tracked (if used) - - improved cycle count (page penalties, sums created in disassembly) - - improved handling of instruction masking opcodes (e.g. BIT) + - much improved code and data detection + - access tracking and indicators for TIA/IO/RAM adresses in disassembly + - break vector is tracked (if used) + - improved cycle count (page penalties, sums created in disassembly) + - improved handling of instruction masking opcodes (e.g. BIT) * Fixed Genesis controller autodetect (Stay Frosty 2, Scramble, etc). @@ -56,31 +56,31 @@ CompuMate ROM; this controller type can no longer be manually selected, and will be used automatically used for CompuMate ROMs. - * Fixed cheat codes, so 7 digits codes are now accepted as described in - the doc. + * Fixed cheat codes, so 7 digits codes are now accepted as described in + the doc. * Fixed swapped ports being displayed wrong in System Logs and debugger. - * Added options to erase the AtariVox/Savekey for all ROMs or the current - one. + * Added options to erase the AtariVox/Savekey for all ROMs or the current + one. * Moved various developer related settings in new Developer Settings - dialog. These settings now come in two groups (player/developer) and - allow switching all settings at once. + dialog. These settings now come in two groups (player/developer) and + allow switching all settings at once. - * Improved tab auto-complete in debugger + * Improved tab auto-complete in debugger - * Added conditional traps and savestate creation to debugger + * Added conditional traps and savestate creation to debugger - * Extended 'rewind' to take a second parameter which allows rewinding - multiple states. + * Extended 'rewind' to take a second parameter which allows rewinding + multiple states. - * Added 'unwind' command, which undoes the latest rewind(s) + * Added 'unwind' command, which undoes the latest rewind(s) - * Added '<' (unwind) button to debugger. + * Added '<' (unwind) button to debugger. - * Added 'Options...' button to debugger which gives access to the options - menu during debugging. + * Added 'Options...' button to debugger which gives access to the options + menu during debugging. * Added debugger pseudo-register '_fcycles', which gives the number of CPU cycles that have occurred since the frame started. @@ -91,7 +91,7 @@ * Extended debugger 'dump' command to take a second argument, indicating the end of the range to dump data. - * Added widgets for trackball and SaveKey/AtariVox controllers + * Added widgets for trackball and SaveKey/AtariVox controllers * Improved emulation of 'FE' bankswitch scheme (no user-visible changes, but internally the emulation is much more accurate compared to the diff --git a/src/libpng/png.c b/src/libpng/png.c index 2352df13c..ff02c5651 100644 --- a/src/libpng/png.c +++ b/src/libpng/png.c @@ -1,7 +1,7 @@ /* png.c - location for general purpose libpng functions * - * Last changed in libpng 1.6.32 [August 24, 2017] + * Last changed in libpng 1.6.33 [September 28, 2017] * Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) @@ -14,7 +14,7 @@ #include "pngpriv.h" /* Generate a compiler error if there is an old png.h in the search path. */ -typedef png_libpng_version_1_6_32 Your_png_h_is_not_version_1_6_32; +typedef png_libpng_version_1_6_34 Your_png_h_is_not_version_1_6_34; #ifdef __GNUC__ /* The version tests may need to be added to, but the problem warning has @@ -816,14 +816,14 @@ png_get_copyright(png_const_structrp png_ptr) #else # ifdef __STDC__ return PNG_STRING_NEWLINE \ - "libpng version 1.6.32 - August 24, 2017" PNG_STRING_NEWLINE \ + "libpng version 1.6.34 - September 29, 2017" PNG_STRING_NEWLINE \ "Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson" \ PNG_STRING_NEWLINE \ "Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \ "Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \ PNG_STRING_NEWLINE; # else - return "libpng version 1.6.32 - August 24, 2017\ + return "libpng version 1.6.34 - September 29, 2017\ Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson\ Copyright (c) 1996-1997 Andreas Dilger\ Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc."; @@ -1913,12 +1913,12 @@ png_colorspace_set_sRGB(png_const_structrp png_ptr, png_colorspacerp colorspace, */ if (intent < 0 || intent >= PNG_sRGB_INTENT_LAST) return png_icc_profile_error(png_ptr, colorspace, "sRGB", - (unsigned)intent, "invalid sRGB rendering intent"); + (png_alloc_size_t)intent, "invalid sRGB rendering intent"); if ((colorspace->flags & PNG_COLORSPACE_HAVE_INTENT) != 0 && colorspace->rendering_intent != intent) return png_icc_profile_error(png_ptr, colorspace, "sRGB", - (unsigned)intent, "inconsistent rendering intents"); + (png_alloc_size_t)intent, "inconsistent rendering intents"); if ((colorspace->flags & PNG_COLORSPACE_FROM_sRGB) != 0) { @@ -1979,7 +1979,6 @@ icc_check_length(png_const_structrp png_ptr, png_colorspacerp colorspace, if (profile_length < 132) return png_icc_profile_error(png_ptr, colorspace, name, profile_length, "too short"); - return 1; } @@ -2224,15 +2223,6 @@ png_icc_check_tag_table(png_const_structrp png_ptr, png_colorspacerp colorspace, * being in range. All defined tag types have an 8 byte header - a 4 byte * type signature then 0. */ - if ((tag_start & 3) != 0) - { - /* CNHP730S.icc shipped with Microsoft Windows 64 violates this, it is - * only a warning here because libpng does not care about the - * alignment. - */ - (void)png_icc_profile_error(png_ptr, NULL, name, tag_id, - "ICC profile tag start not a multiple of 4"); - } /* This is a hard error; potentially it can cause read outside the * profile. @@ -2240,6 +2230,16 @@ png_icc_check_tag_table(png_const_structrp png_ptr, png_colorspacerp colorspace, if (tag_start > profile_length || tag_length > profile_length - tag_start) return png_icc_profile_error(png_ptr, colorspace, name, tag_id, "ICC profile tag outside profile"); + + if ((tag_start & 3) != 0) + { + /* CNHP730S.icc shipped with Microsoft Windows 64 violates this; it is + * only a warning here because libpng does not care about the + * alignment. + */ + (void)png_icc_profile_error(png_ptr, NULL, name, tag_id, + "ICC profile tag start not a multiple of 4"); + } } return 1; /* success, maybe with warnings */ @@ -3761,7 +3761,7 @@ png_log16bit(png_uint_32 x) * of getting this accuracy in practice. * * To deal with this the following exp() function works out the exponent of the - * frational part of the logarithm by using an accurate 32-bit value from the + * fractional part of the logarithm by using an accurate 32-bit value from the * top four fractional bits then multiplying in the remaining bits. */ static const png_uint_32 diff --git a/src/libpng/png.h b/src/libpng/png.h index 51ac8abe7..4c873f5c2 100644 --- a/src/libpng/png.h +++ b/src/libpng/png.h @@ -1,7 +1,7 @@ /* png.h - header file for PNG reference library * - * libpng version 1.6.32, August 24, 2017 + * libpng version 1.6.34, September 29, 2017 * * Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) @@ -12,7 +12,7 @@ * Authors and maintainers: * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat * libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger - * libpng versions 0.97, January 1998, through 1.6.32, August 24, 2017: + * libpng versions 0.97, January 1998, through 1.6.34, September 29, 2017: * Glenn Randers-Pehrson. * See also "Contributing Authors", below. */ @@ -25,7 +25,7 @@ * * This code is released under the libpng license. * - * libpng versions 1.0.7, July 1, 2000 through 1.6.32, August 24, 2017 are + * libpng versions 1.0.7, July 1, 2000 through 1.6.34, September 29, 2017 are * Copyright (c) 2000-2002, 2004, 2006-2017 Glenn Randers-Pehrson, are * derived from libpng-1.0.6, and are distributed according to the same * disclaimer and license as libpng-1.0.6 with the following individuals @@ -209,11 +209,11 @@ * ... * 1.0.19 10 10019 10.so.0.19[.0] * ... - * 1.2.57 13 10257 12.so.0.57[.0] + * 1.2.59 13 10257 12.so.0.59[.0] * ... - * 1.5.28 15 10527 15.so.15.28[.0] + * 1.5.30 15 10527 15.so.15.30[.0] * ... - * 1.6.32 16 10632 16.so.16.32[.0] + * 1.6.34 16 10633 16.so.16.34[.0] * * Henceforth the source version will match the shared-library major * and minor numbers; the shared-library major version number will be @@ -241,13 +241,13 @@ * Y2K compliance in libpng: * ========================= * - * August 24, 2017 + * September 29, 2017 * * Since the PNG Development group is an ad-hoc body, we can't make * an official declaration. * * This is your unofficial assurance that libpng from version 0.71 and - * upward through 1.6.32 are Y2K compliant. It is my belief that + * upward through 1.6.34 are Y2K compliant. It is my belief that * earlier versions were also Y2K compliant. * * Libpng only has two year fields. One is a 2-byte unsigned integer @@ -309,8 +309,8 @@ */ /* Version information for png.h - this should match the version in png.c */ -#define PNG_LIBPNG_VER_STRING "1.6.32" -#define PNG_HEADER_VERSION_STRING " libpng version 1.6.32 - August 24, 2017\n" +#define PNG_LIBPNG_VER_STRING "1.6.34" +#define PNG_HEADER_VERSION_STRING " libpng version 1.6.34 - September 29, 2017\n" #define PNG_LIBPNG_VER_SONUM 16 #define PNG_LIBPNG_VER_DLLNUM 16 @@ -318,7 +318,7 @@ /* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */ #define PNG_LIBPNG_VER_MAJOR 1 #define PNG_LIBPNG_VER_MINOR 6 -#define PNG_LIBPNG_VER_RELEASE 32 +#define PNG_LIBPNG_VER_RELEASE 34 /* This should match the numeric part of the final component of * PNG_LIBPNG_VER_STRING, omitting any leading zero: @@ -349,7 +349,7 @@ * version 1.0.0 was mis-numbered 100 instead of 10000). From * version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release */ -#define PNG_LIBPNG_VER 10632 /* 1.6.32 */ +#define PNG_LIBPNG_VER 10634 /* 1.6.34 */ /* Library configuration: these options cannot be changed after * the library has been built. @@ -459,7 +459,7 @@ extern "C" { /* This triggers a compiler error in png.c, if png.c and png.h * do not agree upon the version number. */ -typedef char* png_libpng_version_1_6_32; +typedef char* png_libpng_version_1_6_34; /* Basic control structions. Read libpng-manual.txt or libpng.3 for more info. * @@ -2819,6 +2819,8 @@ typedef struct # define PNG_FORMAT_FLAG_AFIRST 0x20U /* alpha channel comes first */ #endif +#define PNG_FORMAT_FLAG_ASSOCIATED_ALPHA 0x40U /* alpha channel is associated */ + /* Commonly used formats have predefined macros. * * First the single byte (sRGB) formats: diff --git a/src/libpng/pngconf.h b/src/libpng/pngconf.h index c0f15547b..d13b13e57 100644 --- a/src/libpng/pngconf.h +++ b/src/libpng/pngconf.h @@ -1,7 +1,7 @@ /* pngconf.h - machine configurable file for libpng * - * libpng version 1.6.32, August 24, 2017 + * libpng version 1.6.34, September 29, 2017 * * Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) diff --git a/src/libpng/pnglibconf.h b/src/libpng/pnglibconf.h index ec7d75baa..cb4ea9e20 100644 --- a/src/libpng/pnglibconf.h +++ b/src/libpng/pnglibconf.h @@ -1,6 +1,6 @@ /* pnglibconf.h - library build configuration */ -/* libpng version 1.6.32, August 24, 2017 */ +/* libpng version 1.6.34, September 29, 2017 */ /* Copyright (c) 1998-2017 Glenn Randers-Pehrson */ diff --git a/src/libpng/pngread.c b/src/libpng/pngread.c index e34ddd99a..da32e9ad9 100644 --- a/src/libpng/pngread.c +++ b/src/libpng/pngread.c @@ -1,7 +1,7 @@ /* pngread.c - read a PNG file * - * Last changed in libpng 1.6.32 [August 24, 2017] + * Last changed in libpng 1.6.33 [September 28, 2017] * Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) @@ -3759,7 +3759,13 @@ png_image_read_direct(png_voidp argument) mode = PNG_ALPHA_PNG; output_gamma = PNG_DEFAULT_sRGB; } - + + if ((change & PNG_FORMAT_FLAG_ASSOCIATED_ALPHA) != 0) + { + mode = PNG_ALPHA_OPTIMIZED; + change &= ~PNG_FORMAT_FLAG_ASSOCIATED_ALPHA; + } + /* If 'do_local_background' is set check for the presence of gamma * correction; this is part of the work-round for the libpng bug * described above. @@ -3985,6 +3991,10 @@ png_image_read_direct(png_voidp argument) else if (do_local_compose != 0) /* internal error */ png_error(png_ptr, "png_image_read: alpha channel lost"); + if ((format & PNG_FORMAT_FLAG_ASSOCIATED_ALPHA) != 0) { + info_format |= PNG_FORMAT_FLAG_ASSOCIATED_ALPHA; + } + if (info_ptr->bit_depth == 16) info_format |= PNG_FORMAT_FLAG_LINEAR; diff --git a/src/libpng/pngrtran.c b/src/libpng/pngrtran.c index 9a30ddf22..c18965031 100644 --- a/src/libpng/pngrtran.c +++ b/src/libpng/pngrtran.c @@ -1,7 +1,7 @@ /* pngrtran.c - transforms the data in a row for PNG readers * - * Last changed in libpng 1.6.31 [July 27, 2017] + * Last changed in libpng 1.6.33 [September 28, 2017] * Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) @@ -430,7 +430,7 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette, int i; png_ptr->quantize_index = (png_bytep)png_malloc(png_ptr, - (png_uint_32)((png_uint_32)num_palette * (sizeof (png_byte)))); + (png_alloc_size_t)((png_uint_32)num_palette * (sizeof (png_byte)))); for (i = 0; i < num_palette; i++) png_ptr->quantize_index[i] = (png_byte)i; } @@ -447,7 +447,7 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette, /* Initialize an array to sort colors */ png_ptr->quantize_sort = (png_bytep)png_malloc(png_ptr, - (png_uint_32)((png_uint_32)num_palette * (sizeof (png_byte)))); + (png_alloc_size_t)((png_uint_32)num_palette * (sizeof (png_byte)))); /* Initialize the quantize_sort array */ for (i = 0; i < num_palette; i++) @@ -581,9 +581,11 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette, /* Initialize palette index arrays */ png_ptr->index_to_palette = (png_bytep)png_malloc(png_ptr, - (png_uint_32)((png_uint_32)num_palette * (sizeof (png_byte)))); + (png_alloc_size_t)((png_uint_32)num_palette * + (sizeof (png_byte)))); png_ptr->palette_to_index = (png_bytep)png_malloc(png_ptr, - (png_uint_32)((png_uint_32)num_palette * (sizeof (png_byte)))); + (png_alloc_size_t)((png_uint_32)num_palette * + (sizeof (png_byte)))); /* Initialize the sort array */ for (i = 0; i < num_palette; i++) @@ -592,7 +594,7 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette, png_ptr->palette_to_index[i] = (png_byte)i; } - hash = (png_dsortpp)png_calloc(png_ptr, (png_uint_32)(769 * + hash = (png_dsortpp)png_calloc(png_ptr, (png_alloc_size_t)(769 * (sizeof (png_dsortp)))); num_new_palette = num_palette; @@ -623,7 +625,7 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette, { t = (png_dsortp)png_malloc_warn(png_ptr, - (png_uint_32)(sizeof (png_dsort))); + (png_alloc_size_t)(sizeof (png_dsort))); if (t == NULL) break; @@ -748,9 +750,9 @@ png_set_quantize(png_structrp png_ptr, png_colorp palette, png_size_t num_entries = ((png_size_t)1 << total_bits); png_ptr->palette_lookup = (png_bytep)png_calloc(png_ptr, - (png_uint_32)(num_entries * (sizeof (png_byte)))); + (png_alloc_size_t)(num_entries * (sizeof (png_byte)))); - distance = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_entries * + distance = (png_bytep)png_malloc(png_ptr, (png_alloc_size_t)(num_entries * (sizeof (png_byte)))); memset(distance, 0xff, num_entries * (sizeof (png_byte))); @@ -3322,7 +3324,7 @@ png_do_compose(png_row_infop row_info, png_bytep row, png_structrp png_ptr) == png_ptr->trans_color.gray) { unsigned int tmp = *sp & (0x0f0f >> (4 - shift)); - tmp |= + tmp |= (unsigned int)(png_ptr->background.gray << shift); *sp = (png_byte)(tmp & 0xff); } diff --git a/src/libpng/pngrutil.c b/src/libpng/pngrutil.c index a4fa71457..8692933bd 100644 --- a/src/libpng/pngrutil.c +++ b/src/libpng/pngrutil.c @@ -1,7 +1,7 @@ /* pngrutil.c - utilities to read a PNG file * - * Last changed in libpng 1.6.32 [August 24, 2017] + * Last changed in libpng 1.6.33 [September 28, 2017] * Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) @@ -314,6 +314,7 @@ png_read_buffer(png_structrp png_ptr, png_alloc_size_t new_size, int warn) if (buffer != NULL) { + memset(buffer, 0, new_size); /* just in case */ png_ptr->read_buffer = buffer; png_ptr->read_buffer_size = new_size; } @@ -673,6 +674,8 @@ png_decompress_chunk(png_structrp png_ptr, if (text != NULL) { + memset(text, 0, buffer_size); + ret = png_inflate(png_ptr, png_ptr->chunk_name, 1/*finish*/, png_ptr->read_buffer + prefix_size, &lzsize, text + prefix_size, newlength); @@ -736,9 +739,7 @@ png_decompress_chunk(png_structrp png_ptr, { /* inflateReset failed, store the error message */ png_zstream_error(png_ptr, ret); - - if (ret == Z_STREAM_END) - ret = PNG_UNEXPECTED_ZLIB_RETURN; + ret = PNG_UNEXPECTED_ZLIB_RETURN; } } @@ -1476,7 +1477,7 @@ png_handle_iCCP(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length) /* Now read the tag table; a variable size buffer is * needed at this point, allocate one for the whole * profile. The header check has already validated - * that none of these stuff will overflow. + * that none of this stuff will overflow. */ const png_uint_32 tag_count = png_get_uint_32( profile_header+128); @@ -1583,19 +1584,11 @@ png_handle_iCCP(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length) return; } } - - else if (size > 0) - errmsg = "truncated"; - -#ifndef __COVERITY__ - else + if (errmsg == NULL) errmsg = png_ptr->zstream.msg; -#endif } - /* else png_icc_check_tag_table output an error */ } - else /* profile truncated */ errmsg = png_ptr->zstream.msg; } @@ -3144,28 +3137,28 @@ png_check_chunk_length(png_const_structrp png_ptr, const png_uint_32 length) { png_alloc_size_t limit = PNG_UINT_31_MAX; - if (png_ptr->chunk_name != png_IDAT) - { # ifdef PNG_SET_USER_LIMITS_SUPPORTED - if (png_ptr->user_chunk_malloc_max > 0 && - png_ptr->user_chunk_malloc_max < limit) - limit = png_ptr->user_chunk_malloc_max; + if (png_ptr->user_chunk_malloc_max > 0 && + png_ptr->user_chunk_malloc_max < limit) + limit = png_ptr->user_chunk_malloc_max; # elif PNG_USER_CHUNK_MALLOC_MAX > 0 - if (PNG_USER_CHUNK_MALLOC_MAX < limit) - limit = PNG_USER_CHUNK_MALLOC_MAX; + if (PNG_USER_CHUNK_MALLOC_MAX < limit) + limit = PNG_USER_CHUNK_MALLOC_MAX; # endif - } - else + if (png_ptr->chunk_name == png_IDAT) { + png_alloc_size_t idat_limit = PNG_UINT_31_MAX; size_t row_factor = (png_ptr->width * png_ptr->channels * (png_ptr->bit_depth > 8? 2: 1) + 1 + (png_ptr->interlaced? 6: 0)); if (png_ptr->height > PNG_UINT_32_MAX/row_factor) - limit=PNG_UINT_31_MAX; + idat_limit=PNG_UINT_31_MAX; else - limit = png_ptr->height * row_factor; - limit += 6 + 5*(limit/32566+1); /* zlib+deflate overhead */ - limit=limit < PNG_UINT_31_MAX? limit : PNG_UINT_31_MAX; + idat_limit = png_ptr->height * row_factor; + row_factor = row_factor > 32566? 32566 : row_factor; + idat_limit += 6 + 5*(idat_limit/row_factor+1); /* zlib+deflate overhead */ + idat_limit=idat_limit < PNG_UINT_31_MAX? idat_limit : PNG_UINT_31_MAX; + limit = limit < idat_limit? idat_limit : limit; } if (length > limit) diff --git a/src/libpng/pngtrans.c b/src/libpng/pngtrans.c index 326ac33f0..6882f0fd7 100644 --- a/src/libpng/pngtrans.c +++ b/src/libpng/pngtrans.c @@ -1,7 +1,7 @@ /* pngtrans.c - transforms the data in a row (used by both readers and writers) * - * Last changed in libpng 1.6.30 [June 28, 2017] + * Last changed in libpng 1.6.33 [September 28, 2017] * Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) @@ -609,7 +609,7 @@ png_do_strip_channel(png_row_infop row_info, png_bytep row, int at_start) return; /* The filler channel has gone already */ /* Fix the rowbytes value. */ - row_info->rowbytes = (unsigned int)(dp-row); + row_info->rowbytes = (png_size_t)(dp-row); } #endif @@ -708,7 +708,7 @@ png_do_check_palette_indexes(png_structrp png_ptr, png_row_infop row_info) * forms produced on either GCC or MSVC. */ int padding = PNG_PADBITS(row_info->pixel_depth, row_info->width); - png_bytep rp = png_ptr->row_buf + row_info->rowbytes; + png_bytep rp = png_ptr->row_buf + row_info->rowbytes - 1; switch (row_info->bit_depth) { diff --git a/src/libpng/pngwrite.c b/src/libpng/pngwrite.c index a7662acb7..a16d77ce0 100644 --- a/src/libpng/pngwrite.c +++ b/src/libpng/pngwrite.c @@ -1940,7 +1940,7 @@ png_image_write_main(png_voidp argument) int colormap = (format & PNG_FORMAT_FLAG_COLORMAP); int linear = !colormap && (format & PNG_FORMAT_FLAG_LINEAR); /* input */ int alpha = !colormap && (format & PNG_FORMAT_FLAG_ALPHA); - int write_16bit = linear && !colormap && (display->convert_to_8bit == 0); + int write_16bit = linear && (display->convert_to_8bit == 0); # ifdef PNG_BENIGN_ERRORS_SUPPORTED /* Make sure we error out on any bad situation */ From 2b5416eade556b86776f74cc24fc7959affb7824 Mon Sep 17 00:00:00 2001 From: Christian Speckner Date: Tue, 5 Dec 2017 20:28:41 +0100 Subject: [PATCH 024/156] Don't trap write accesses to datastream pointers & friends in CDF / BUS. --- src/emucore/Thumbulator.cxx | 45 +++++++++++++++++++------------------ src/emucore/Thumbulator.hxx | 1 + 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/src/emucore/Thumbulator.cxx b/src/emucore/Thumbulator.cxx index 986cb7393..36003ab17 100644 --- a/src/emucore/Thumbulator.cxx +++ b/src/emucore/Thumbulator.cxx @@ -226,28 +226,7 @@ void Thumbulator::write16(uInt32 addr, uInt32 data) if((addr > 0x40001fff) && (addr < 0x50000000)) fatalError("write16", addr, "abort - out of range"); - switch(configuration) - { - // this protects 2K Harmony/Melody Drivers - // Initial section of driver is the bootstrap which copies the driver - // from ROM to RAM, so it can safely be used by the custom ARM code - // as additional RAM - case ConfigureFor::BUS: - case ConfigureFor::CDF: - case ConfigureFor::CDF1: - if((addr > 0x40000028) && (addr < 0x40000800)) - fatalError("write16", addr, "to bankswitch code area"); - break; - - // this protects 3K Harmony/Melody Drivers - // Initial section of driver is the bootstrap which copies the driver - // from ROM to RAM, so it can safely be used by the custom ARM code - // as additional RAM - case ConfigureFor::DPCplus: - if((addr > 0x40000028) && (addr < 0x40000c00)) - fatalError("write16", addr, "to bankswitch code area"); - break; - } + if (isProtected(addr)) fatalError("write16", addr, "to driver area"); if(addr & 1) fatalError("write16", addr, "abort - misaligned"); @@ -281,6 +260,7 @@ void Thumbulator::write32(uInt32 addr, uInt32 data) if(addr & 3) fatalError("write32", addr, "abort - misaligned"); + if (isProtected(addr)) fatalError("write32", addr, "to driver area"); DO_DBUG(statusMsg << "write32(" << Base::HEX8 << addr << "," << Base::HEX8 << data << ")" << endl); switch(addr & 0xF0000000) @@ -356,6 +336,27 @@ void Thumbulator::write32(uInt32 addr, uInt32 data) fatalError("write32", addr, data, "abort"); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +bool Thumbulator::isProtected(uInt32 addr) +{ + if (addr < 0x40000000) return false; + addr -= 0x40000000; + + switch (configuration) { + case ConfigureFor::DPCplus: + return (addr < 0x0c00) && (addr > 0x0028); + + case ConfigureFor::CDF: + return (addr < 0x0800) && (addr > 0x0028) && !((addr >= 0x06e0) && (addr < (0x0e60 + 284))); + + case ConfigureFor::CDF1: + return (addr < 0x0800) && (addr > 0x0028) && !((addr >= 0x00a0) && (addr < (0x00a0 + 284))); + + case ConfigureFor::BUS: + return (addr < 0x06d8) && (addr > 0x0028); + } +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - uInt32 Thumbulator::read16(uInt32 addr) { diff --git a/src/emucore/Thumbulator.hxx b/src/emucore/Thumbulator.hxx index 0b1953a28..68ca803e8 100644 --- a/src/emucore/Thumbulator.hxx +++ b/src/emucore/Thumbulator.hxx @@ -104,6 +104,7 @@ class Thumbulator uInt32 fetch32(uInt32 addr); uInt32 read16(uInt32 addr); uInt32 read32(uInt32 addr); + bool isProtected(uInt32 addr); void write16(uInt32 addr, uInt32 data); void write32(uInt32 addr, uInt32 data); void updateTimer(uInt32 cycles); From 833c4de688e815a206311c524e82186cf3e7888a Mon Sep 17 00:00:00 2001 From: Christian Speckner Date: Tue, 5 Dec 2017 21:20:27 +0100 Subject: [PATCH 025/156] Silence compiler warning. --- src/emucore/Thumbulator.cxx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/emucore/Thumbulator.cxx b/src/emucore/Thumbulator.cxx index 36003ab17..554f4368b 100644 --- a/src/emucore/Thumbulator.cxx +++ b/src/emucore/Thumbulator.cxx @@ -355,6 +355,8 @@ bool Thumbulator::isProtected(uInt32 addr) case ConfigureFor::BUS: return (addr < 0x06d8) && (addr > 0x0028); } + + return false; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 3a969bfeef3a35d92bd2e1dd79853a805e5a6eea Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 6 Dec 2017 09:24:24 +0100 Subject: [PATCH 026/156] DTHUMB_SUPPORT define added --- src/windows/Stella.vcxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/windows/Stella.vcxproj b/src/windows/Stella.vcxproj index 5e3c4b4fc..be76200cf 100644 --- a/src/windows/Stella.vcxproj +++ b/src/windows/Stella.vcxproj @@ -111,7 +111,7 @@ /MP /std:c++latest %(AdditionalOptions) Disabled ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;DTHUMB_SUPPORT;%(PreprocessorDefinitions) false EnableFastChecks MultiThreadedDLL @@ -142,7 +142,7 @@ /MP /std:c++latest %(AdditionalOptions) Disabled ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;DTHUMB_SUPPORT;%(PreprocessorDefinitions) false EnableFastChecks MultiThreadedDLL @@ -171,7 +171,7 @@ true false ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;DTHUMB_SUPPORT;%(PreprocessorDefinitions) MultiThreadedDLL false @@ -204,7 +204,7 @@ Default true ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;DTHUMB_SUPPORT;%(PreprocessorDefinitions) MultiThreadedDLL false From 87d5886067e11b4ab8ac25822bb8d787848aa47d Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 6 Dec 2017 11:01:33 +0100 Subject: [PATCH 027/156] fixed #264 --- src/debugger/TIADebug.cxx | 12 ++++++------ src/emucore/tia/TIA.cxx | 6 ++++++ src/emucore/tia/TIA.hxx | 1 + 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/debugger/TIADebug.cxx b/src/debugger/TIADebug.cxx index 50e972975..80a790fb3 100644 --- a/src/debugger/TIADebug.cxx +++ b/src/debugger/TIADebug.cxx @@ -869,17 +869,17 @@ string TIADebug::debugColors() const ostringstream buf; int mode = myTIA.frameLayout() == FrameLayout::ntsc ? 0 : 1; - buf << " Red " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::P0]) + buf << " " << myTIA.myFixedColorNames[TIA::P0] << " " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::P0]) << " Player 0\n" - << " Orange " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::M0]) + << " " << myTIA.myFixedColorNames[TIA::M0] << " " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::M0]) << " Missile 0\n" - << " Yellow " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::P1]) + << " " << myTIA.myFixedColorNames[TIA::P1] << " " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::P1]) << " Player 1\n" - << " Green " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::M1]) + << " " << myTIA.myFixedColorNames[TIA::M1] << " " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::M1]) << " Missile 1\n" - << " Blue " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::PF]) + << " " << myTIA.myFixedColorNames[TIA::PF] << " " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::PF]) << " Playfield\n" - << " Purple " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::BL]) + << " " << myTIA.myFixedColorNames[TIA::BL] << " " << colorSwatch(myTIA.myFixedColorPalette[mode][TIA::BL]) << " Ball\n" << " Grey " << colorSwatch(TIA::FixedColor::BK_GREY) << " Background\n" diff --git a/src/emucore/tia/TIA.cxx b/src/emucore/tia/TIA.cxx index 8deaf9c2f..6e57c0454 100644 --- a/src/emucore/tia/TIA.cxx +++ b/src/emucore/tia/TIA.cxx @@ -968,26 +968,32 @@ bool TIA::setFixedColorPalette(const string& colors) case 'r': myFixedColorPalette[0][i] = FixedColor::NTSC_RED; myFixedColorPalette[1][i] = FixedColor::PAL_RED; + myFixedColorNames[i] = "Red "; break; case 'o': myFixedColorPalette[0][i] = FixedColor::NTSC_ORANGE; myFixedColorPalette[1][i] = FixedColor::PAL_ORANGE; + myFixedColorNames[i] = "Orange"; break; case 'y': myFixedColorPalette[0][i] = FixedColor::NTSC_YELLOW; myFixedColorPalette[1][i] = FixedColor::PAL_YELLOW; + myFixedColorNames[i] = "Yellow"; break; case 'g': myFixedColorPalette[0][i] = FixedColor::NTSC_GREEN; myFixedColorPalette[1][i] = FixedColor::PAL_GREEN; + myFixedColorNames[i] = "Green "; break; case 'b': myFixedColorPalette[0][i] = FixedColor::NTSC_BLUE; myFixedColorPalette[1][i] = FixedColor::PAL_BLUE; + myFixedColorNames[i] = "Blue "; break; case 'p': myFixedColorPalette[0][i] = FixedColor::NTSC_PURPLE; myFixedColorPalette[1][i] = FixedColor::PAL_PURPLE; + myFixedColorNames[i] = "Purple"; break; } } diff --git a/src/emucore/tia/TIA.hxx b/src/emucore/tia/TIA.hxx index bf2bcdecf..a64b726e6 100644 --- a/src/emucore/tia/TIA.hxx +++ b/src/emucore/tia/TIA.hxx @@ -460,6 +460,7 @@ class TIA : public Device */ enum FixedObject { P0, M0, P1, M1, PF, BL }; FixedColor myFixedColorPalette[2][6]; + string myFixedColorNames[6]; private: From ec5a3cdec580864503e1566f6b4aad958cef716a Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 6 Dec 2017 12:15:16 +0100 Subject: [PATCH 028/156] thumb.trapfatal added to developer settings dialog restructured developer settings dialog duplicated debug colors are changed automatically updated doc and screenshots accordingly --- docs/graphics/options_developer.png | Bin 6943 -> 6552 bytes docs/graphics/options_developer_dbgcolors.png | Bin 5169 -> 6698 bytes docs/graphics/options_developer_debugger.png | Bin 4795 -> 4732 bytes docs/graphics/options_developer_emulation.png | Bin 7011 -> 6623 bytes docs/graphics/options_developer_states.png | Bin 0 -> 5368 bytes docs/index.html | 188 ++++---- src/emucore/Settings.cxx | 30 +- src/gui/DeveloperDialog.cxx | 430 ++++++++++++------ src/gui/DeveloperDialog.hxx | 69 +-- 9 files changed, 457 insertions(+), 260 deletions(-) create mode 100644 docs/graphics/options_developer_states.png diff --git a/docs/graphics/options_developer.png b/docs/graphics/options_developer.png index bed6c7229de8a46e3e7c55da8bd7e4be8a9e6b05..b8ad043ad35eea82283edc65badd36424ba682c6 100644 GIT binary patch literal 6552 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 Ay8r+H literal 6943 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 QU&r+N=S_6q=v)u|4_`#a!~g&Q literal 5169 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 delta 3422 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 diff --git a/docs/graphics/options_developer_emulation.png b/docs/graphics/options_developer_emulation.png index 9ca4eef674c940899ee31a393315a33bc9c91579..483583dc15682deb3d6cf8dd717a10b11eb1ff74 100644 GIT binary patch literal 6623 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 diff --git a/docs/graphics/options_developer_states.png b/docs/graphics/options_developer_states.png new file mode 100644 index 0000000000000000000000000000000000000000..3304e8c0cb335f1e174547a40da50f6fba8881ab GIT binary patch literal 5368 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 hn)$H literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html index e553353b7..8bba4f505 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2421,15 +2421,6 @@ Set "Display.PPBlend" property, used for phosphor effect (0-100). Default is whatever is specified for tv.phosblend. - - -

          -thumb.trapfatal <1|0>
          - The default of true allows the Thumb ARM emulation to - throw an exception and enter the debugger on fatal errors. When disabled, such - fatal errors are simply logged, and emulation continues. Do not use this - unless you know exactly what you're doing, as it changes the behaviour as compared - to real hardware. -

          The following are available in two sets, one for players (prefixed by "plr.") and one @@ -2440,64 +2431,67 @@ Argument Description - - - +

          -dev.settings <1|0>
          Select developer (1) or player (0) set. - - - +
          -<plr.|dev.>stats <1|0>
          Overlay console info on the TIA image during emulation. - - - +
          -<plr.|dev.>console <2600|7800>
          Select console for B/W and Pause key handling and RAM initialization. - - - +
          -<plr.|dev.>bankrandom <1|0>
          On reset, randomize the startup bank (only for selected bankswitch types). - - - +
          -<plr.|dev.>ramrandom <1|0>
          On reset, either randomize all RAM content, or initialize with zero (console = 2600)/startup values (console = 7800) instead. - - - +
          -<plr.|dev.>cpurandom <S,A,X,Y,P>
          On reset, randomize the content of the specified CPU registers. - - - -
          -<plr.|dev.>debugcolors <1|0>
          - Enable/disable the fixed debug colors. - - - -
          -<plr.|dev.>colorloss <1|0>
          - Enable/disable the PAL color-loss effect. - - - -
          -<plr.|dev.>tv.jitter <1|0>
          - Enable TV jitter/roll effect, when there are too many or too few scanlines - per frame. - - - -
          -<plr.|dev.>tv.jitter_recovery <1 - 20>
          - When TV jitter/roll effect is enabled, determines how long to delay recovery - time (recovery spread over multiple frames). - - - +
          -<plr.|dev.>tiadriven <1|0>
          Set unused TIA pins to be randomly driven high or low on a read/peek. If disabled, use the last databus value for those pins instead. + +
          -<plr.|dev.>thumb.trapfatal <1|0>
          + The default of true allows the Thumb ARM emulation to + throw an exception and enter the debugger on fatal errors. When disabled, such + fatal errors are simply logged, and emulation continues. Do not use this + unless you know exactly what you're doing, as it changes the behaviour as compared + to real hardware. + +
          -<plr.|dev.>tv.jitter <1|0>
          + Enable TV jitter/roll effect, when there are too many or too few scanlines + per frame. + +
          -<plr.|dev.>tv.jitter_recovery <1 - 20>
          + When TV jitter/roll effect is enabled, determines how long to delay recovery + time (recovery spread over multiple frames). + +
          -<plr.|dev.>colorloss <1|0>
          + Enable/disable the PAL color-loss effect. + +
          -<plr.|dev.>debugcolors <1|0>
          + Enable/disable the fixed debug colors. + +
          -<plr.|dev.>rewind <1|0>
          + Enables continuous rewind + +
          -<plr.|dev.>rewind.size <100 - 1000>
          + Defines the rewind buffer size. + + +
          -<plr.|dev.>rewind.uncompressed <100 - 1000>
          + Defines the uncompressed rewind buffer size. Must be <= rewind buffer size. + + +
          -<plr.|dev.>rewind.interval <0 - 5>
          + Defines the interval between two save states. + + +
          -<plr.|dev.>rewind.horizon <0 - 6>
          + Defines the horizon of the rewind buffer. @@ -3023,11 +3017,28 @@ Random startup bankRandomize the startup bank (only for selected bankswitch types)-plr.bankrandom
          -dev.bankrandom Randomize zero-page ...When loading a ROM, randomize all RAM content instead of initializing with all zeroes (for 'Console' = 'Atari 2600' only)-plr.ramrandom
          -dev.ramrandom Randomize CPUWhen loading a ROM, randomize the content of the specified CPU registers-plr.cpurandom
          -dev.cpurandom + Drive unused TIA pins ...Unused TIA pins are read random instead of the last databus values-plr.tiadriven
          -dev.tiadriven + Fatal ARM emulation ...Thumb ARM emulation throws an exception and enters the debugger on fatal errors.-plr.thumb.trapfatal
          -dev.thumb.trapfatal
          + + + + + +

          Developer Settings dialog (Video):

          + + + + + @@ -3036,39 +3047,56 @@

          Developer Settings dialog (States) TODO

               + + + + - - - + +
          ItemBrief descriptionFor more information,
          see CommandLine
          Jitter/roll effectEmulate screen roll with inconsistent scanline count-plr.tv.jitter
          -dev.tv.jitter
          (Jitter/roll) RecoveryDetermines recovery time for screen rolling-plr.tv.jitter_recovery
          -dev.tv.jitter_recovery
          PAL color-lossUse PAL color-loss effect-plr.colorloss
          -dev.colorloss
          Debug colorsUse fixed debug colors-plr.debugcolors
          -dev.debugcolors
          Jitter/roll effectEmulate screen roll with inconsistent scanline count-plr.tv.jitter
          -dev.tv.jitter
          (Jitter/roll) RecoveryDetermines recovery time for screen rolling-plr.tv.jitter_recovery
          -dev.tv.jitter_recovery
          Drive unused TIA pins ...Unused TIA pins are read random instead of the last databus values-plr.tiadriven
          -dev.tiadriven
          Player 0
          Missile 0
          Player 1
          + Missile 1
          Playfield
          Ball
          Set color for specific object in debug colors mode
          (PF0, PF1 and PF2 are have slightly different luminance,
          disabled in ROM launcher mode)
          -tia.dbgcolors
          - +
               - - - - - - + + + + + + + + + + + + + + + + + + + + + + +
          ItemBrief descriptionFor more information,
          see CommandLine
          -.plr
          -.dev
          -.plr
          -.dev
          -.plr
          -.dev
          -.plr
          -.dev
          -.plr
          -.dev
          ItemBrief descriptionFor more information,
          see CommandLine
          Continuous rewind + When continuous rewind is enabled, Stella will automatically + create new save states in the interval described below.
          + Note: This buffer is identical with the one described in + Debugger/Global Buttons. + It is independent from the save states manually created + with F9. +
          -plr.rewind
          -dev.rewind
          Buffer size + Defines the rewind buffer size. The larger the buffer, the less + save states have to be compressed to reach the horizon. + -plr.rewind.size
          -dev.rewind.size
          Uncompressed size + Defines the uncompressed rewind buffer size. States within this + area will not be compressed and keep their initial interval.-plr.rewind.uncompressed
          -dev.rewind.uncompressed
          IntervalDefines the interval between two save states when they are created.-plr.rewind.interval
          -dev.rewind.interval
          Horizon + Defines the horizon of the rewind buffer. A large horizon allows + going back further in time. To reach the horizon, save states + will be compressed. This means that more and more intermediate + states will be removed and the interval between compressed states + becomes larger the further they are back in time. + -plr.rewind.horizon
          -dev.rewind.horizon
          -

          Developer Settings dialog (Debug Colors):

          - - - - - - -
               - - - - -
          ItemBrief descriptionFor more information,
          see CommandLine
          Player 0
          Missile 0
          Player 1
          - Missile 1
          Playfield
          Ball
          Set color for specific object in debug colors mode
          (PF0, PF1 and PF2 are have slightly different luminance,
          disabled in ROM launcher mode)
          -tia.dbgcolors
          -
          -
          - -

          Developer Settings dialog (Debugger)

          diff --git a/src/emucore/Settings.cxx b/src/emucore/Settings.cxx index 51a5a237f..c2dbd6e83 100644 --- a/src/emucore/Settings.cxx +++ b/src/emucore/Settings.cxx @@ -157,8 +157,13 @@ Settings::Settings(OSystem& osystem) setInternal("plr.console", "2600"); // 7800 setInternal("plr.rewind", false); setInternal("plr.rewind.size", 100); + setInternal("plr.rewind.uncompressed", 30); setInternal("plr.rewind.interval", 4); // = 1 second setInternal("plr.rewind.horizon", 5); // = ~10 minutes +#ifdef DTHUMB_SUPPORT + // Thumb ARM emulation options + setInternal("plr.thumb.trapfatal", "false"); +#endif // developer settings setInternal("dev.settings", "false"); @@ -174,12 +179,13 @@ Settings::Settings(OSystem& osystem) setInternal("dev.console", "2600"); // 7800 setInternal("dev.rewind", true); setInternal("dev.rewind.size", 100); + setInternal("dev.rewind.uncompressed", 60); setInternal("dev.rewind.interval", 2); // = 1 frame setInternal("dev.rewind.horizon", 3); // = ~10 seconds #ifdef DTHUMB_SUPPORT // Thumb ARM emulation options - setInternal("thumb.trapfatal", "true"); + setInternal("dev.thumb.trapfatal", "true"); #endif } @@ -318,8 +324,15 @@ void Settings::validate() i = getInt("dev.tv.jitter_recovery"); if(i < 1 || i > 20) setInternal("dev.tv.jitter_recovery", "2"); - i = getInt("dev.rewind.size"); - if (i < 100 ||i > 1000) setInternal("dev.rewind.size", 100); + int size = getInt("dev.rewind.size"); + if(size < 100 || size > 1000) + { + setInternal("dev.rewind.size", 100); + size = 100; + } + + i = getInt("dev.rewind.uncompressed"); + if(i < 0 || i > size) setInternal("dev.rewind.uncompressed", size); i = getInt("dev.rewind.interval"); if(i < 0 || i > 5) setInternal("dev.rewind.interval", 2); @@ -330,8 +343,15 @@ void Settings::validate() i = getInt("plr.tv.jitter_recovery"); if(i < 1 || i > 20) setInternal("plr.tv.jitter_recovery", "10"); - i = getInt("plr.rewind.size"); - if(i < 100 || i > 1000) setInternal("plr.rewind.size", 100); + size = getInt("plr.rewind.size"); + if(size < 100 || size > 1000) + { + setInternal("plr.rewind.size", 100); + size = 100; + } + + i = getInt("plr.rewind.uncompressed"); + if(i < 0 || i > size) setInternal("plr.rewind.uncompressed", size); i = getInt("plr.rewind.interval"); if(i < 0 || i > 5) setInternal("plr.rewind.interval", 4); diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index 231bfdc3c..1f2498465 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -47,6 +47,7 @@ DeveloperDialog::DeveloperDialog(OSystem& osystem, DialogContainer& parent, myMaxWidth(max_w), myMaxHeight(max_h) { + const int VGAP = 4; const int lineHeight = font.getLineHeight(), fontWidth = font.getMaxCharWidth(), buttonHeight = font.getLineHeight() + 4; @@ -54,7 +55,7 @@ DeveloperDialog::DeveloperDialog(OSystem& osystem, DialogContainer& parent, // Set real dimensions _w = std::min(53 * fontWidth + 10, max_w); - _h = std::min(15 * (lineHeight + 4) + 14, max_h); + _h = std::min(15 * (lineHeight + VGAP) + 14, max_h); // The tab widget xpos = 2; ypos = 4; @@ -62,8 +63,8 @@ DeveloperDialog::DeveloperDialog(OSystem& osystem, DialogContainer& parent, addTabWidget(myTab); addEmulationTab(font); + addVideoTab(font); addStatesTab(font); - addDebugColorsTab(font); addDebuggerTab(font); addDefaultOKCancelButtons(font); @@ -83,7 +84,7 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font) int fontWidth = font.getMaxCharWidth(), fontHeight = font.getFontHeight(); WidgetArray wid; VariantList items; - int tabID = myTab->addTab("Emulation"); + int tabID = myTab->addTab(" Emulation "); // settings set mySettingsGroup0 = new RadioButtonGroup(); @@ -92,7 +93,7 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font) ypos += lineHeight + VGAP; r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, "Developer settings", mySettingsGroup0, kDevSettings); wid.push_back(r); - ypos += lineHeight + VGAP * 2; + ypos += lineHeight + VGAP * 1; myFrameStatsWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "Frame statistics"); wid.push_back(myFrameStatsWidget); @@ -105,22 +106,24 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font) int lwidth = font.getStringWidth("Console "); int pwidth = font.getStringWidth("Atari 2600"); - myConsoleWidget = new PopUpWidget(myTab, font, HBORDER + INDENT * 1, ypos, pwidth, lineHeight, items, "Console ", lwidth, kConsole); + myConsoleWidget = new PopUpWidget(myTab, font, HBORDER + INDENT * 1, ypos, pwidth, lineHeight, items, + "Console ", lwidth, kConsole); wid.push_back(myConsoleWidget); ypos += lineHeight + VGAP; // Randomize items - myLoadingROMLabel = new StaticTextWidget(myTab, font, HBORDER + INDENT*1, ypos + 1, "When loading a ROM:", kTextAlignLeft); + myLoadingROMLabel = new StaticTextWidget(myTab, font, HBORDER + INDENT*1, ypos + 1, "When loading a ROM:"); wid.push_back(myLoadingROMLabel); ypos += lineHeight + VGAP; - myRandomBankWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 2, ypos + 1, "Random startup bank"); + myRandomBankWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 2, ypos + 1, + "Random startup bank"); wid.push_back(myRandomBankWidget); ypos += lineHeight + VGAP; // Randomize RAM myRandomizeRAMWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 2, ypos + 1, - "Randomize zero-page and extended RAM", kRandRAMID); + "Randomize zero-page and extended RAM", kRandRAMID); wid.push_back(myRandomizeRAMWidget); ypos += lineHeight + VGAP; @@ -140,37 +143,119 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font) } ypos += lineHeight + VGAP; - // debug colors - myDebugColorsWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "Debug colors"); - wid.push_back(myDebugColorsWidget); + + // How to handle undriven TIA pins + myUndrivenPinsWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, + "Drive unused TIA pins randomly on a read/peek"); + wid.push_back(myUndrivenPinsWidget); + ypos += lineHeight + VGAP; + +#ifdef DTHUMB_SUPPORT + // Thumb ARM emulation exception + myThumbExceptionWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, + "Fatal ARM emulation error throws exception"); + wid.push_back(myThumbExceptionWidget); +#endif + + // Add items for tab 0 + addToFocusList(wid, myTab, tabID); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void DeveloperDialog::addVideoTab(const GUI::Font& font) +{ + const int HBORDER = 10; + const int INDENT = 16 + 4; + const int VBORDER = 8; + const int VGAP = 4; + int ypos = VBORDER; + int lineHeight = font.getLineHeight(); + int fontWidth = font.getMaxCharWidth(), fontHeight = font.getFontHeight(); + int lwidth = font.getStringWidth("Intensity "); + int pwidth = font.getMaxCharWidth() * 6; + WidgetArray wid; + VariantList items; + int tabID = myTab->addTab("Video"); + + wid.clear(); + ypos = VBORDER; + + // settings set + mySettingsGroup1 = new RadioButtonGroup(); + RadioButtonWidget* r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, "Player settings", mySettingsGroup1, kPlrSettings); + wid.push_back(r); + ypos += lineHeight + VGAP; + r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, "Developer settings", mySettingsGroup1, kDevSettings); + wid.push_back(r); + ypos += lineHeight + VGAP * 1; + + // TV jitter effect + myTVJitterWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "Jitter/roll effect", kTVJitter); + wid.push_back(myTVJitterWidget); + myTVJitterRecWidget = new SliderWidget(myTab, font, + myTVJitterWidget->getRight() + fontWidth * 3, ypos - 1, + 8 * fontWidth, lineHeight, "Recovery ", + font.getStringWidth("Recovery "), kTVJitterChanged); + myTVJitterRecWidget->setMinValue(1); myTVJitterRecWidget->setMaxValue(20); + wid.push_back(myTVJitterRecWidget); + myTVJitterRecLabelWidget = new StaticTextWidget(myTab, font, + myTVJitterRecWidget->getRight() + 4, myTVJitterRecWidget->getTop() + 2, + 5 * fontWidth, fontHeight, "", kTextAlignLeft); + myTVJitterRecLabelWidget->setFlags(WIDGET_CLEARBG); + wid.push_back(myTVJitterRecLabelWidget); ypos += lineHeight + VGAP; myColorLossWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "PAL color-loss"); wid.push_back(myColorLossWidget); ypos += lineHeight + VGAP; - // TV jitter effect - myTVJitterWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "Jitter/roll effect", kTVJitter); - wid.push_back(myTVJitterWidget); - myTVJitterRecWidget = new SliderWidget(myTab, font, - myTVJitterWidget->getRight() + fontWidth * 3, ypos - 1, - 8 * fontWidth, lineHeight, "Recovery ", - font.getStringWidth("Recovery "), kTVJitterChanged); - myTVJitterRecWidget->setMinValue(1); myTVJitterRecWidget->setMaxValue(20); - wid.push_back(myTVJitterRecWidget); - myTVJitterRecLabelWidget = new StaticTextWidget(myTab, font, - myTVJitterRecWidget->getRight() + 4, myTVJitterRecWidget->getTop() + 2, - 5 * fontWidth, fontHeight, "", kTextAlignLeft); - myTVJitterRecLabelWidget->setFlags(WIDGET_CLEARBG); - wid.push_back(myTVJitterRecLabelWidget); - ypos += lineHeight + VGAP; + // debug colors + myDebugColorsWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "Debug colors (*)"); + wid.push_back(myDebugColorsWidget); + ypos += lineHeight + VGAP + 2; - // How to handle undriven TIA pins - myUndrivenPinsWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, - "Drive unused TIA pins randomly on a read/peek"); - wid.push_back(myUndrivenPinsWidget); + //StaticTextWidget* s = new StaticTextWidget(myTab, font, HBORDER, ypos, "Debug Colors "); + //ypos += lineHeight + VGAP; - // Add items for tab 0 + items.clear(); + VarList::push_back(items, "Red", "r"); + VarList::push_back(items, "Orange", "o"); + VarList::push_back(items, "Yellow", "y"); + VarList::push_back(items, "Green", "g"); + VarList::push_back(items, "Purple", "p"); + VarList::push_back(items, "Blue", "b"); + + static constexpr int dbg_cmds[DEBUG_COLORS] = { + kP0ColourChangedCmd, kM0ColourChangedCmd, kP1ColourChangedCmd, + kM1ColourChangedCmd, kPFColourChangedCmd, kBLColourChangedCmd + }; + + auto createDebugColourWidgets = [&](int idx, const string& desc) + { + int x = HBORDER + INDENT * 1; + myDbgColour[idx] = new PopUpWidget(myTab, font, x, ypos - 1, + pwidth, lineHeight, items, desc, lwidth, dbg_cmds[idx]); + wid.push_back(myDbgColour[idx]); + x += myDbgColour[idx]->getWidth() + 10; + myDbgColourSwatch[idx] = new ColorWidget(myTab, font, x, ypos - 1, + uInt32(2 * lineHeight), lineHeight); + ypos += lineHeight + VGAP * 1; + }; + + createDebugColourWidgets(0, "Player 0 "); + createDebugColourWidgets(1, "Missile 0 "); + createDebugColourWidgets(2, "Player 1 "); + createDebugColourWidgets(3, "Missile 1 "); + createDebugColourWidgets(4, "Playfield "); + createDebugColourWidgets(5, "Ball "); + + // Add message concerning usage + const GUI::Font& infofont = instance().frameBuffer().infoFont(); + ypos = myTab->getHeight() - 5 - fontHeight - infofont.getFontHeight() - 10; + //new StaticTextWidget(myTab, infofont, 10, ypos, "(*) Colors must be different for each object"); + new StaticTextWidget(myTab, infofont, HBORDER, ypos, "(*) colors identical for player and developer settings"); + + // Add items for tab 2 addToFocusList(wid, myTab, tabID); } @@ -188,13 +273,13 @@ void DeveloperDialog::addStatesTab(const GUI::Font& font) int tabID = myTab->addTab("States"); // settings set - mySettingsGroup1 = new RadioButtonGroup(); - RadioButtonWidget* r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, "Player settings", mySettingsGroup1, kPlrSettings); + mySettingsGroup2 = new RadioButtonGroup(); + RadioButtonWidget* r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, "Player settings", mySettingsGroup2, kPlrSettings); wid.push_back(r); ypos += lineHeight + VGAP; - r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, "Developer settings", mySettingsGroup1, kDevSettings); + r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, "Developer settings", mySettingsGroup2, kDevSettings); wid.push_back(r); - ypos += lineHeight + VGAP * 2; + ypos += lineHeight + VGAP * 1; myContinuousRewindWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT, ypos + 1, "Continuous rewind", kRewind); wid.push_back(myContinuousRewindWidget); @@ -202,29 +287,42 @@ void DeveloperDialog::addStatesTab(const GUI::Font& font) int sWidth = font.getMaxCharWidth() * 8; myStateSizeWidget = new SliderWidget(myTab, font, HBORDER + INDENT * 2, ypos - 1, sWidth, lineHeight, - "Buffer size (*) ", 0, kSizeChanged); + "Buffer size (*) ", 0, kSizeChanged); myStateSizeWidget->setMinValue(100); myStateSizeWidget->setMaxValue(1000); - myStateSizeWidget->setStepValue(100); + myStateSizeWidget->setStepValue(20); wid.push_back(myStateSizeWidget); - myStateSizeLabelWidget = new StaticTextWidget(myTab, font, myStateSizeWidget->getRight() + 4, myStateSizeWidget->getTop() + 2, "100 "); - + myStateSizeLabelWidget = new StaticTextWidget(myTab, font, myStateSizeWidget->getRight() + 4, + myStateSizeWidget->getTop() + 2, "100 "); ypos += lineHeight + VGAP; + + myUncompressedWidget = new SliderWidget(myTab, font, HBORDER + INDENT * 2, ypos - 1, sWidth, lineHeight, + "Uncompressed size (*) ", 0, kUncompressedChanged); + myUncompressedWidget->setMinValue(0); + myUncompressedWidget->setMaxValue(1000); + myUncompressedWidget->setStepValue(20); + wid.push_back(myUncompressedWidget); + myUncompressedLabelWidget = new StaticTextWidget(myTab, font, myUncompressedWidget->getRight() + 4, + myUncompressedWidget->getTop() + 2, "50 "); + ypos += lineHeight + VGAP; + myStateIntervalWidget = new SliderWidget(myTab, font, HBORDER + INDENT * 2, ypos - 1, sWidth, lineHeight, - "Interval ", 0, kIntervalChanged); + "Interval ", 0, kIntervalChanged); myStateIntervalWidget->setMinValue(0); myStateIntervalWidget->setMaxValue(NUM_INTERVALS - 1); wid.push_back(myStateIntervalWidget); - myStateIntervalLabelWidget = new StaticTextWidget(myTab, font, myStateIntervalWidget->getRight() + 4, myStateIntervalWidget->getTop() + 2, "50 scanlines"); - + myStateIntervalLabelWidget = new StaticTextWidget(myTab, font, myStateIntervalWidget->getRight() + 4, + myStateIntervalWidget->getTop() + 2, "50 scanlines"); ypos += lineHeight + VGAP; + myStateHorizonWidget = new SliderWidget(myTab, font, HBORDER + INDENT * 2, ypos - 1, sWidth, lineHeight, - "Horizon ", 0, kHorizonChanged); + "Horizon ", 0, kHorizonChanged); myStateHorizonWidget->setMinValue(0); myStateHorizonWidget->setMaxValue(NUM_HORIZONS - 1); wid.push_back(myStateHorizonWidget); - myStateHorizonLabelWidget = new StaticTextWidget(myTab, font, myStateHorizonWidget->getRight() + 4, myStateHorizonWidget->getTop() + 2, "~60 minutes"); + myStateHorizonLabelWidget = new StaticTextWidget(myTab, font, myStateHorizonWidget->getRight() + 4, + myStateHorizonWidget->getTop() + 2, "~60 minutes"); // Add message concerning usage const GUI::Font& infofont = instance().frameBuffer().infoFont(); @@ -234,67 +332,6 @@ void DeveloperDialog::addStatesTab(const GUI::Font& font) addToFocusList(wid, myTab, tabID); } - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void DeveloperDialog::addDebugColorsTab(const GUI::Font& font) -{ - const int HBORDER = 10; - const int INDENT = 16 + 4; - const int VBORDER = 8; - const int VGAP = 4; - int ypos = VBORDER; - int lineHeight = font.getLineHeight(); - int fontWidth = font.getMaxCharWidth(), fontHeight = font.getFontHeight(); - int lwidth = font.getStringWidth("Intensity "); - int pwidth = font.getMaxCharWidth() * 6; - WidgetArray wid; - VariantList items; - int tabID = myTab->addTab("Debug Colors"); - - wid.clear(); - ypos = VBORDER; - - items.clear(); - VarList::push_back(items, "Red", "r"); - VarList::push_back(items, "Orange", "o"); - VarList::push_back(items, "Yellow", "y"); - VarList::push_back(items, "Green", "g"); - VarList::push_back(items, "Blue", "b"); - VarList::push_back(items, "Purple", "p"); - - static constexpr int dbg_cmds[6] = { - kP0ColourChangedCmd, kM0ColourChangedCmd, kP1ColourChangedCmd, - kM1ColourChangedCmd, kPFColourChangedCmd, kBLColourChangedCmd - }; - - auto createDebugColourWidgets = [&](int idx, const string& desc) - { - int x = HBORDER; - myDbgColour[idx] = new PopUpWidget(myTab, font, x, ypos, - pwidth, lineHeight, items, desc, lwidth, dbg_cmds[idx]); - wid.push_back(myDbgColour[idx]); - x += myDbgColour[idx]->getWidth() + 10; - myDbgColourSwatch[idx] = new ColorWidget(myTab, font, x, ypos, - uInt32(2 * lineHeight), lineHeight); - ypos += lineHeight + VGAP * 1; - }; - - createDebugColourWidgets(0, "Player 0 "); - createDebugColourWidgets(1, "Missile 0 "); - createDebugColourWidgets(2, "Player 1 "); - createDebugColourWidgets(3, "Missile 1 "); - createDebugColourWidgets(4, "Playfield "); - createDebugColourWidgets(5, "Ball "); - - // Add message concerning usage - const GUI::Font& infofont = instance().frameBuffer().infoFont(); - ypos = myTab->getHeight() - 5 - fontHeight - infofont.getFontHeight() - 10; - new StaticTextWidget(myTab, infofont, 10, ypos, "(*) Colors must be different for each object"); - - // Add items for tab 2 - addToFocusList(wid, myTab, tabID); -} - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DeveloperDialog::addDebuggerTab(const GUI::Font& font) { @@ -429,6 +466,11 @@ void DeveloperDialog::loadSettings(SettingsSet set) myRandomBank[set] = instance().settings().getBool(prefix + "bankrandom"); myRandomizeRAM[set] = instance().settings().getBool(prefix + "ramrandom"); myRandomizeCPU[set] = instance().settings().getString(prefix + "cpurandom"); + // Undriven TIA pins + myUndrivenPins[set] = instance().settings().getBool(prefix + "tiadriven"); + // Thumb ARM emulation exception + myThumbException[set] = instance().settings().getBool(prefix + "thumb.trapfatal"); + // Debug colors myDebugColors[set] = instance().settings().getBool(prefix + "debugcolors"); // PAL color-loss effect @@ -436,12 +478,11 @@ void DeveloperDialog::loadSettings(SettingsSet set) // Jitter myTVJitter[set] = instance().settings().getBool(prefix + "tv.jitter"); myTVJitterRec[set] = instance().settings().getInt(prefix + "tv.jitter_recovery"); - // Undriven TIA pins - myUndrivenPins[set] = instance().settings().getBool(prefix + "tiadriven"); // States myContinuousRewind[set] = instance().settings().getBool(prefix + "rewind"); myStateSize[set] = instance().settings().getInt(prefix + "rewind.size"); + myUncompressed[set] = instance().settings().getInt(prefix + "rewind.uncompressed"); myStateInterval[set] = instance().settings().getInt(prefix + "rewind.interval"); myStateHorizon[set] = instance().settings().getInt(prefix + "rewind.horizon"); } @@ -457,6 +498,11 @@ void DeveloperDialog::saveSettings(SettingsSet set) instance().settings().setValue(prefix + "bankrandom", myRandomBank[set]); instance().settings().setValue(prefix + "ramrandom", myRandomizeRAM[set]); instance().settings().setValue(prefix + "cpurandom", myRandomizeCPU[set]); + // Undriven TIA pins + instance().settings().setValue(prefix + "tiadriven", myUndrivenPins[set]); + // Thumb ARM emulation exception + instance().settings().setValue(prefix + "thumb.trapfatal", myThumbException[set]); + // Debug colors instance().settings().setValue(prefix + "debugcolors", myDebugColors[set]); // PAL color loss @@ -464,12 +510,11 @@ void DeveloperDialog::saveSettings(SettingsSet set) // Jitter instance().settings().setValue(prefix + "tv.jitter", myTVJitter[set]); instance().settings().setValue(prefix + "tv.jitter_recovery", myTVJitterRec[set]); - // Undriven TIA pins - instance().settings().setValue(prefix + "tiadriven", myUndrivenPins[set]); // States instance().settings().setValue(prefix + "rewind", myContinuousRewind[set]); instance().settings().setValue(prefix + "rewind.size", myStateSize[set]); + instance().settings().setValue(prefix + "rewind.uncompressed", myUncompressed[set]); instance().settings().setValue(prefix + "rewind.interval", myStateInterval[set]); instance().settings().setValue(prefix + "rewind.horizon", myStateHorizon[set]); } @@ -488,6 +533,11 @@ void DeveloperDialog::getWidgetStates(SettingsSet set) if(myRandomizeCPUWidget[i]->getState()) cpurandom += cpuregs[i]; myRandomizeCPU[set] = cpurandom; + // Undriven TIA pins + myUndrivenPins[set] = myUndrivenPinsWidget->getState(); + // Thumb ARM emulation exception + myThumbException[set] = myThumbExceptionWidget->getState(); + // Debug colors myDebugColors[set] = myDebugColorsWidget->getState(); // PAL color-loss effect @@ -495,12 +545,11 @@ void DeveloperDialog::getWidgetStates(SettingsSet set) // Jitter myTVJitter[set] = myTVJitterWidget->getState(); myTVJitterRec[set] = myTVJitterRecWidget->getValue(); - // Undriven TIA pins - myUndrivenPins[set] = myUndrivenPinsWidget->getState(); // States myContinuousRewind[set] = myContinuousRewindWidget->getState(); myStateSize[set] = myStateSizeWidget->getValue(); + myUncompressed[set] = myUncompressedWidget->getValue(); myStateInterval[set] = myStateIntervalWidget->getValue(); myStateHorizon[set] = myStateHorizonWidget->getValue(); } @@ -518,6 +567,13 @@ void DeveloperDialog::setWidgetStates(SettingsSet set) const char* const cpuregs[] = { "S", "A", "X", "Y", "P" }; for(int i = 0; i < 5; ++i) myRandomizeCPUWidget[i]->setState(BSPF::containsIgnoreCase(cpurandom, cpuregs[i])); + // Undriven TIA pins + myUndrivenPinsWidget->setState(myUndrivenPins[set]); + // Thumb ARM emulation exception + myThumbExceptionWidget->setState(myThumbException[set]); + + handleConsole(); + // Debug colors myDebugColorsWidget->setState(myDebugColors[set]); // PAL color-loss effect @@ -525,21 +581,20 @@ void DeveloperDialog::setWidgetStates(SettingsSet set) // Jitter myTVJitterWidget->setState(myTVJitter[set]); myTVJitterRecWidget->setValue(myTVJitterRec[set]); - // Undriven TIA pins - myUndrivenPinsWidget->setState(myUndrivenPins[set]); - handleConsole(); handleTVJitterChange(myTVJitterWidget->getState()); handleEnableDebugColors(); // States myContinuousRewindWidget->setState(myContinuousRewind[set]); myStateSizeWidget->setValue(myStateSize[set]); + myUncompressedWidget->setValue(myUncompressed[set]); myStateIntervalWidget->setValue(myStateInterval[set]); myStateHorizonWidget->setValue(myStateHorizon[set]); handleRewind(); handleSize(); + handleUncompressed(); handleInterval(); handleHorizon(); } @@ -551,6 +606,7 @@ void DeveloperDialog::loadConfig() mySettings = devSettings; mySettingsGroup0->setSelected(devSettings ? 1 : 0); mySettingsGroup1->setSelected(devSettings ? 1 : 0); + mySettingsGroup2->setSelected(devSettings ? 1 : 0); // load both setting sets... loadSettings(SettingsSet::player); @@ -612,7 +668,7 @@ void DeveloperDialog::saveConfig() // Debug colours string dbgcolors; - for(int i = 0; i < 6; ++i) + for(int i = 0; i < DEBUG_COLORS; ++i) dbgcolors += myDbgColour[i]->getSelectedTag().toString(); if(instance().hasConsole() && instance().console().tia().setFixedColorPalette(dbgcolors)) @@ -627,17 +683,18 @@ void DeveloperDialog::saveConfig() // define interval growth factor uInt32 size = myStateSizeWidget->getValue(); + uInt32 uncompressed = myUncompressedWidget->getValue(); uInt64 horizon = HORIZON_CYCLES[myStateHorizonWidget->getValue()]; double factor, minFactor = 1, maxFactor = 2; while(true) { double interval = INTERVAL_CYCLES[myStateIntervalWidget->getValue()]; - double cycleSum = 0.0; + double cycleSum = interval * uncompressed; // calculate next factor factor = (minFactor + maxFactor) / 2; // sum up interval cycles - for(uInt32 i = 0; i < size; ++i) + for(uInt32 i = uncompressed; i < size; ++i) { cycleSum += interval; interval *= factor; @@ -686,32 +743,37 @@ void DeveloperDialog::setDefaults() myRandomBank[set] = devSettings ? true : false; myRandomizeRAM[set] = devSettings ? true : false; myRandomizeCPU[set] = devSettings ? "SAXYP" : ""; - // Debug colors - myDebugColors[set] = false; - // PAL color-loss effect - myColorLoss[set] = devSettings ? true : false; - // Jitter - myTVJitter[set] = true; - myTVJitterRec[set] = devSettings ? 2 : 10; // Undriven TIA pins myUndrivenPins[set] = devSettings ? true : false; + // Thumb ARM emulation exception + myThumbException[set] = devSettings ? true : false; setWidgetStates(set); break; - case 1: // States + case 1: // Video + // Jitter + myTVJitter[set] = true; + myTVJitterRec[set] = devSettings ? 2 : 10; + // PAL color-loss effect + myColorLoss[set] = devSettings ? true : false; + // Debug colors + myDebugColors[set] = false; + handleDebugColours("roygpb"); + + setWidgetStates(set); + break; + + case 2: // States myContinuousRewind[set] = devSettings ? true : false; myStateSize[set] = 100; + myUncompressed[set] = devSettings ? 60 : 30; myStateInterval[set] = devSettings ? 2 : 4; myStateHorizon[set] = devSettings ? 3 : 5; setWidgetStates(set); break; - case 2: // Debug colours - handleDebugColours("roygpb"); - break; - case 3: // Debugger options { #ifdef DEBUGGER_SUPPORT @@ -770,6 +832,10 @@ void DeveloperDialog::handleCommand(CommandSender* sender, int cmd, int data, in handleSize(); break; + case kUncompressedChanged: + handleUncompressed(); + break; + case kIntervalChanged: handleInterval(); break; @@ -843,6 +909,7 @@ void DeveloperDialog::handleSettings(bool devSettings) mySettings = devSettings; // block redundant events first! mySettingsGroup0->setSelected(devSettings ? 1 : 0); mySettingsGroup1->setSelected(devSettings ? 1 : 0); + mySettingsGroup2->setSelected(devSettings ? 1 : 0); getWidgetStates(devSettings ? SettingsSet::player : SettingsSet::developer); setWidgetStates(devSettings ? SettingsSet::developer : SettingsSet::player); } @@ -884,6 +951,9 @@ void DeveloperDialog::handleRewind() myStateSizeWidget->setEnabled(enable); myStateSizeLabelWidget->setEnabled(enable); + myUncompressedWidget->setEnabled(enable); + myUncompressedLabelWidget->setEnabled(enable); + myStateIntervalWidget->setEnabled(enable); myStateIntervalLabelWidget->setEnabled(enable); @@ -896,6 +966,7 @@ void DeveloperDialog::handleSize() { bool found = false; uInt64 size = myStateSizeWidget->getValue(); + uInt64 uncompressed = myUncompressedWidget->getValue(); uInt64 interval = myStateIntervalWidget->getValue(); uInt64 horizon = myStateHorizonWidget->getValue(); Int32 i; @@ -916,17 +987,38 @@ void DeveloperDialog::handleSize() interval--; } while(!found); + if(size < uncompressed) + { + myUncompressedWidget->setValue(size); + myUncompressedLabelWidget->setValue(myStateSizeWidget->getValue()); + } + myStateHorizonWidget->setValue(i); myStateHorizonLabelWidget->setLabel(HORIZONS[i]); myStateIntervalWidget->setValue(interval); myStateIntervalLabelWidget->setLabel(INTERVALS[interval]); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void DeveloperDialog::handleUncompressed() +{ + uInt64 size = myStateSizeWidget->getValue(); + uInt64 uncompressed = myUncompressedWidget->getValue(); + + myUncompressedLabelWidget->setValue(myUncompressedWidget->getValue()); + if(uncompressed > size) + { + myStateSizeWidget->setValue(uncompressed); + myStateSizeLabelWidget->setValue(myUncompressedWidget->getValue()); + } +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DeveloperDialog::handleInterval() { bool found = false; uInt64 size = myStateSizeWidget->getValue(); + uInt64 uncompressed = myUncompressedWidget->getValue(); uInt64 interval = myStateIntervalWidget->getValue(); uInt64 horizon = myStateHorizonWidget->getValue(); Int32 i; @@ -951,6 +1043,12 @@ void DeveloperDialog::handleInterval() myStateHorizonLabelWidget->setLabel(HORIZONS[i]); myStateSizeWidget->setValue(size); myStateSizeLabelWidget->setValue(myStateSizeWidget->getValue()); + + if(size < uncompressed) + { + myUncompressedWidget->setValue(size); + myUncompressedLabelWidget->setValue(myStateSizeWidget->getValue()); + } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -958,6 +1056,7 @@ void DeveloperDialog::handleHorizon() { bool found = false; uInt64 size = myStateSizeWidget->getValue(); + uInt64 uncompressed = myUncompressedWidget->getValue(); uInt64 interval = myStateIntervalWidget->getValue(); uInt64 horizon = myStateHorizonWidget->getValue(); Int32 i; @@ -981,13 +1080,15 @@ void DeveloperDialog::handleHorizon() myStateIntervalWidget->setValue(i); myStateIntervalLabelWidget->setLabel(INTERVALS[i]); myStateSizeWidget->setValue(size); + if(size < uncompressed) + myUncompressedWidget->setValue(size); myStateSizeLabelWidget->setValue(myStateSizeWidget->getValue()); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DeveloperDialog::handleDebugColours(int idx, int color) { - if(idx < 0 || idx > 5) + if(idx < 0 || idx >= DEBUG_COLORS) return; if(!instance().hasConsole()) @@ -997,31 +1098,68 @@ void DeveloperDialog::handleDebugColours(int idx, int color) return; } - static constexpr int dbg_color[2][6] = { - { TIA::FixedColor::NTSC_RED, - TIA::FixedColor::NTSC_ORANGE, - TIA::FixedColor::NTSC_YELLOW, - TIA::FixedColor::NTSC_GREEN, - TIA::FixedColor::NTSC_BLUE, - TIA::FixedColor::NTSC_PURPLE + static constexpr int dbg_color[2][DEBUG_COLORS] = { + { + TIA::FixedColor::NTSC_RED, + TIA::FixedColor::NTSC_ORANGE, + TIA::FixedColor::NTSC_YELLOW, + TIA::FixedColor::NTSC_GREEN, + TIA::FixedColor::NTSC_PURPLE, + TIA::FixedColor::NTSC_BLUE }, - { TIA::FixedColor::PAL_RED, - TIA::FixedColor::PAL_ORANGE, - TIA::FixedColor::PAL_YELLOW, - TIA::FixedColor::PAL_GREEN, - TIA::FixedColor::PAL_BLUE, - TIA::FixedColor::PAL_PURPLE + { + TIA::FixedColor::PAL_RED, + TIA::FixedColor::PAL_ORANGE, + TIA::FixedColor::PAL_YELLOW, + TIA::FixedColor::PAL_GREEN, + TIA::FixedColor::PAL_PURPLE, + TIA::FixedColor::PAL_BLUE } }; + int mode = instance().console().tia().frameLayout() == FrameLayout::ntsc ? 0 : 1; myDbgColourSwatch[idx]->setColor(dbg_color[mode][color]); myDbgColour[idx]->setSelectedIndex(color); + + // make sure the selected debug colors are all different + bool usedCol[DEBUG_COLORS]; + + // identify used colors + for(int i = 0; i < DEBUG_COLORS; ++i) + { + usedCol[i] = false; + for(int j = 0; j < DEBUG_COLORS; ++j) + { + if(myDbgColourSwatch[j]->getColor() == dbg_color[mode][i]) + { + usedCol[i] = true; + break; + } + } + } + // check if currently changed color was used somewhere else + for(int i = 0; i < DEBUG_COLORS; ++i) + { + if (i != idx && myDbgColourSwatch[i]->getColor() == dbg_color[mode][color]) + { + // if already used, change the other color to an unused one + for(int j = 0; j < DEBUG_COLORS; ++j) + { + if(!usedCol[j]) + { + myDbgColourSwatch[i]->setColor(dbg_color[mode][j]); + myDbgColour[i]->setSelectedIndex(j); + break; + } + } + } + } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DeveloperDialog::handleDebugColours(const string& colors) { - for(int i = 0; i < 6; ++i) + for(int i = 0; i < DEBUG_COLORS; ++i) { switch(colors[i]) { @@ -1029,8 +1167,8 @@ void DeveloperDialog::handleDebugColours(const string& colors) case 'o': handleDebugColours(i, 1); break; case 'y': handleDebugColours(i, 2); break; case 'g': handleDebugColours(i, 3); break; - case 'b': handleDebugColours(i, 4); break; - case 'p': handleDebugColours(i, 5); break; + case 'p': handleDebugColours(i, 4); break; + case 'b': handleDebugColours(i, 5); break; default: break; } } diff --git a/src/gui/DeveloperDialog.hxx b/src/gui/DeveloperDialog.hxx index e816e35d8..c347dc9aa 100644 --- a/src/gui/DeveloperDialog.hxx +++ b/src/gui/DeveloperDialog.hxx @@ -55,28 +55,29 @@ class DeveloperDialog : public Dialog private: enum { - kPlrSettings = 'DVpl', - kDevSettings = 'DVdv', - kConsole = 'DVco', - kRandRAMID = 'DVrm', - kRandCPUID = 'DVcp', - kTVJitter = 'DVjt', - kTVJitterChanged = 'DVjr', - kPPinCmd = 'DVpn', - kRewind = 'DSrw', - kSizeChanged = 'DSsz', - kIntervalChanged = 'DSin', - kHorizonChanged = 'DShz', - kP0ColourChangedCmd = 'GOp0', - kM0ColourChangedCmd = 'GOm0', - kP1ColourChangedCmd = 'GOp1', - kM1ColourChangedCmd = 'GOm1', - kPFColourChangedCmd = 'GOpf', - kBLColourChangedCmd = 'GObl', + kPlrSettings = 'DVpl', + kDevSettings = 'DVdv', + kConsole = 'DVco', + kRandRAMID = 'DVrm', + kRandCPUID = 'DVcp', + kTVJitter = 'DVjt', + kTVJitterChanged = 'DVjr', + kPPinCmd = 'DVpn', + kRewind = 'DSrw', + kSizeChanged = 'DSsz', + kUncompressedChanged = 'DSuc', + kIntervalChanged = 'DSin', + kHorizonChanged = 'DShz', + kP0ColourChangedCmd = 'GOp0', + kM0ColourChangedCmd = 'GOm0', + kP1ColourChangedCmd = 'GOp1', + kM1ColourChangedCmd = 'GOm1', + kPFColourChangedCmd = 'GOpf', + kBLColourChangedCmd = 'GObl', #ifdef DEBUGGER_SUPPORT - kDWidthChanged = 'UIdw', - kDHeightChanged = 'UIdh', - kDFontSizeChanged = 'UIfs', + kDWidthChanged = 'UIdw', + kDHeightChanged = 'UIdh', + kDFontSizeChanged = 'UIfs', #endif }; enum SettingsSet @@ -97,6 +98,8 @@ class DeveloperDialog : public Dialog const uInt64 HORIZON_CYCLES[NUM_HORIZONS] = { 76 * 262, 76 * 262 * 10, 76 * 262 * 60, 76 * 262 * 60 * 10, 76 * 262 * 60 * 60, 76 * 262 * 60 * 60 * 10, (uInt64)76 * 262 * 60 * 60 * 60 }; + static const int DEBUG_COLORS = 6; + TabWidget* myTab; // Emulator widgets RadioButtonGroup* mySettingsGroup0; @@ -107,26 +110,31 @@ class DeveloperDialog : public Dialog CheckboxWidget* myRandomizeRAMWidget; StaticTextWidget* myRandomizeCPULabel; CheckboxWidget* myRandomizeCPUWidget[5]; - CheckboxWidget* myColorLossWidget; + CheckboxWidget* myUndrivenPinsWidget; + CheckboxWidget* myThumbExceptionWidget; + + // Video widgets + RadioButtonGroup* mySettingsGroup1; CheckboxWidget* myTVJitterWidget; SliderWidget* myTVJitterRecWidget; StaticTextWidget* myTVJitterRecLabelWidget; + CheckboxWidget* myColorLossWidget; CheckboxWidget* myDebugColorsWidget; - CheckboxWidget* myUndrivenPinsWidget; + PopUpWidget* myDbgColour[DEBUG_COLORS]; + ColorWidget* myDbgColourSwatch[DEBUG_COLORS]; + // States widgets - RadioButtonGroup* mySettingsGroup1; + RadioButtonGroup* mySettingsGroup2; CheckboxWidget* myContinuousRewindWidget; SliderWidget* myStateSizeWidget; StaticTextWidget* myStateSizeLabelWidget; + SliderWidget* myUncompressedWidget; + StaticTextWidget* myUncompressedLabelWidget; SliderWidget* myStateIntervalWidget; StaticTextWidget* myStateIntervalLabelWidget; SliderWidget* myStateHorizonWidget; StaticTextWidget* myStateHorizonLabelWidget; - // Debug colours selection - PopUpWidget* myDbgColour[6]; - ColorWidget* myDbgColourSwatch[6]; - #ifdef DEBUGGER_SUPPORT // Debugger UI widgets SliderWidget* myDebuggerWidthSlider; @@ -151,16 +159,18 @@ class DeveloperDialog : public Dialog int myTVJitterRec[2]; bool myDebugColors[2]; bool myUndrivenPins[2]; + bool myThumbException[2]; // States sets bool myContinuousRewind[2]; int myStateSize[2]; + int myUncompressed[2]; int myStateInterval[2]; int myStateHorizon[2]; private: void addEmulationTab(const GUI::Font& font); void addStatesTab(const GUI::Font& font); - void addDebugColorsTab(const GUI::Font& font); + void addVideoTab(const GUI::Font& font); void addDebuggerTab(const GUI::Font& font); // Add Defaults, OK and Cancel buttons void addDefaultOKCancelButtons(const GUI::Font& font); @@ -180,6 +190,7 @@ class DeveloperDialog : public Dialog void handleRewind(); void handleSize(); + void handleUncompressed(); void handleInterval(); void handleHorizon(); void handleFontSize(); From 90be9bb6076646cc8db7e731ec4333a52394507e Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 6 Dec 2017 13:03:27 +0100 Subject: [PATCH 029/156] fixed DTHUMB_SUPPORT error --- src/emucore/Settings.cxx | 7 +++---- src/gui/DeveloperDialog.cxx | 2 +- src/windows/Stella.vcxproj | 8 ++++---- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/emucore/Settings.cxx b/src/emucore/Settings.cxx index c2dbd6e83..577010d14 100644 --- a/src/emucore/Settings.cxx +++ b/src/emucore/Settings.cxx @@ -160,7 +160,7 @@ Settings::Settings(OSystem& osystem) setInternal("plr.rewind.uncompressed", 30); setInternal("plr.rewind.interval", 4); // = 1 second setInternal("plr.rewind.horizon", 5); // = ~10 minutes -#ifdef DTHUMB_SUPPORT +#ifdef THUMB_SUPPORT // Thumb ARM emulation options setInternal("plr.thumb.trapfatal", "false"); #endif @@ -182,8 +182,7 @@ Settings::Settings(OSystem& osystem) setInternal("dev.rewind.uncompressed", 60); setInternal("dev.rewind.interval", 2); // = 1 frame setInternal("dev.rewind.horizon", 3); // = ~10 seconds - -#ifdef DTHUMB_SUPPORT +#ifdef THUMB_SUPPORT // Thumb ARM emulation options setInternal("dev.thumb.trapfatal", "true"); #endif @@ -587,7 +586,7 @@ void Settings::usage() const << " -dev.tv.jitter_recovery <1-20> Set recovery time for TV jitter effect\n" << " -dev.tiadriven <1|0> Drive unused TIA pins randomly on a read/peek\n" - #ifdef DTHUMB_SUPPORT + #ifdef THUMB_SUPPORT << " -dev.thumb.trapfatal <1|0> Determines whether errors in ARM emulation throw an exception\n" #endif << endl << std::flush; diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index 1f2498465..3dacb9328 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -150,7 +150,7 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font) wid.push_back(myUndrivenPinsWidget); ypos += lineHeight + VGAP; -#ifdef DTHUMB_SUPPORT +#ifdef THUMB_SUPPORT // Thumb ARM emulation exception myThumbExceptionWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "Fatal ARM emulation error throws exception"); diff --git a/src/windows/Stella.vcxproj b/src/windows/Stella.vcxproj index be76200cf..5e3c4b4fc 100644 --- a/src/windows/Stella.vcxproj +++ b/src/windows/Stella.vcxproj @@ -111,7 +111,7 @@ /MP /std:c++latest %(AdditionalOptions) Disabled ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;DTHUMB_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) false EnableFastChecks MultiThreadedDLL @@ -142,7 +142,7 @@ /MP /std:c++latest %(AdditionalOptions) Disabled ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;DTHUMB_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) false EnableFastChecks MultiThreadedDLL @@ -171,7 +171,7 @@ true false ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;DTHUMB_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) MultiThreadedDLL false @@ -204,7 +204,7 @@ Default true ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;DTHUMB_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) MultiThreadedDLL false From a79ccf400f0a0dee0aa3a6984bde893c1b6cf7a2 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Wed, 6 Dec 2017 11:44:40 -0330 Subject: [PATCH 030/156] Minor updates to rewind: - comments are now more in line with what actually happens when adding a state - changed Serializer::reset() to Serializer::rewind(), to more accurately indicate what it does --- src/common/LinkedObjectPool.hxx | 3 ++- src/common/RewindManager.cxx | 4 ++-- src/common/RewindManager.hxx | 5 +++-- src/emucore/CartCTY.cxx | 2 +- src/emucore/Serializer.cxx | 8 ++++---- src/emucore/Serializer.hxx | 2 +- 6 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/common/LinkedObjectPool.hxx b/src/common/LinkedObjectPool.hxx index 61fc34ff3..2619acba7 100644 --- a/src/common/LinkedObjectPool.hxx +++ b/src/common/LinkedObjectPool.hxx @@ -42,7 +42,8 @@ In the case of methods which wrap the C++ 'splice()' method, the semantics of splice are followed wrt invalid/out-of-range/etc - iterators. See the applicable documentation for such behaviour. + iterators. See the applicable C++ STL documentation for such + behaviour. @author Stephen Anthony */ diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index 45cc42f2d..69ae2df3b 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -48,7 +48,7 @@ bool RewindManager::addState(const string& message) RewindState& state = myStateList.current(); Serializer& s = state.data; - s.reset(); // rewind Serializer internal buffers + s.rewind(); // rewind Serializer internal buffers if(myStateManager.saveState(s) && myOSystem.console().tia().saveDisplay(s)) { state.message = message; @@ -70,7 +70,7 @@ bool RewindManager::rewindState() string message = getMessage(state); cerr << "rewind " << state.count << endl; - s.reset(); // rewind Serializer internal buffers + s.rewind(); // rewind Serializer internal buffers myStateManager.loadState(s); myOSystem.console().tia().loadDisplay(s); diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index 16358746f..42d7d1cda 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -34,8 +34,9 @@ class StateManager; Unwinding involves moving the internal iterator forwards in time (towards the end of the list). - Any time a new state is added, the internal iterator moves back to the - insertion point of the data (the end of the list). + Any time a new state is added, all states from the current iterator position + to the end of the list (aka, all future states) are removed, and the internal + iterator moves to the insertion point of the data (the end of the list). @author Stephen Anthony */ diff --git a/src/emucore/CartCTY.cxx b/src/emucore/CartCTY.cxx index 616796792..aa5d2c627 100644 --- a/src/emucore/CartCTY.cxx +++ b/src/emucore/CartCTY.cxx @@ -466,7 +466,7 @@ void CartridgeCTY::saveScore(uInt8 index) memcpy(scoreRAM + (index << 6) + 4, myRAM+4, 60); // Save score RAM - serializer.reset(); + serializer.rewind(); try { serializer.putByteArray(scoreRAM, 256); diff --git a/src/emucore/Serializer.cxx b/src/emucore/Serializer.cxx index 84b10c212..c191b99e4 100644 --- a/src/emucore/Serializer.cxx +++ b/src/emucore/Serializer.cxx @@ -35,7 +35,7 @@ Serializer::Serializer(const string& filename, bool readonly) { myStream = std::move(str); myStream->exceptions( ios_base::failbit | ios_base::badbit | ios_base::eofbit ); - reset(); + rewind(); } } } @@ -56,7 +56,7 @@ Serializer::Serializer(const string& filename, bool readonly) { myStream = std::move(str); myStream->exceptions( ios_base::failbit | ios_base::badbit | ios_base::eofbit ); - reset(); + rewind(); } } } @@ -73,12 +73,12 @@ Serializer::Serializer() { myStream->exceptions( ios_base::failbit | ios_base::badbit | ios_base::eofbit ); putBool(true); - reset(); + rewind(); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Serializer::reset() +void Serializer::rewind() { myStream->clear(); myStream->seekg(ios_base::beg); diff --git a/src/emucore/Serializer.hxx b/src/emucore/Serializer.hxx index f590ef60f..4c3b380fa 100644 --- a/src/emucore/Serializer.hxx +++ b/src/emucore/Serializer.hxx @@ -59,7 +59,7 @@ class Serializer /** Resets the read/write location to the beginning of the stream. */ - void reset(); + void rewind(); /** Reads a byte value (unsigned 8-bit) from the current input stream. From ec4f56960bd5a088d7030209be271c88cb12f786 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 6 Dec 2017 16:52:37 +0100 Subject: [PATCH 031/156] HelpDialog and AboutDialog updated --- src/gui/AboutDialog.cxx | 2 ++ src/gui/HelpDialog.cxx | 21 +++++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/gui/AboutDialog.cxx b/src/gui/AboutDialog.cxx index 6d56f1652..0ad553f3f 100644 --- a/src/gui/AboutDialog.cxx +++ b/src/gui/AboutDialog.cxx @@ -124,6 +124,8 @@ void AboutDialog::updateStrings(int page, int lines, string& title) ADD_ATEXT("\\L\\c2"" Emulation core development"); ADD_ATEXT("\\L\\c0"" Brian Watson"); ADD_ATEXT("\\L\\c2"" Emulation core enhancement, debugger support"); + ADD_ATEXT("\\L\\c0"" Christian Speckner"); + ADD_ATEXT("\\L\\c2"" TIA emulation development"); break; case 3: diff --git a/src/gui/HelpDialog.cxx b/src/gui/HelpDialog.cxx index f5ae859f2..0b069c3ce 100644 --- a/src/gui/HelpDialog.cxx +++ b/src/gui/HelpDialog.cxx @@ -28,6 +28,7 @@ HelpDialog::HelpDialog(OSystem& osystem, DialogContainer& parent, myPage(1), myNumPages(5) { + const string ELLIPSIS = "\x1d"; const int lineHeight = font.getLineHeight(), fontWidth = font.getMaxCharWidth(), fontHeight = font.getFontHeight(), @@ -65,7 +66,7 @@ HelpDialog::HelpDialog(OSystem& osystem, DialogContainer& parent, myTitle = new StaticTextWidget(this, font, xpos, ypos, _w - 10, fontHeight, "", kTextAlignCenter); - int lwidth = 15 * fontWidth; + int lwidth = 12 * fontWidth; xpos += 5; ypos += lineHeight + 4; for(uInt8 i = 0; i < kLINES_PER_PAGE; i++) { @@ -108,7 +109,7 @@ void HelpDialog::updateStrings(uInt8 page, uInt8 lines, string& title) ADD_BIND("Cmd Q", "Quit emulation"); #endif ADD_BIND("Escape", "Exit current game"); - ADD_BIND("Tab", "Enter options menu"); + ADD_BIND("Tab", "Enter 'Options' menu"); ADD_BIND("\\", "Toggle command menu"); ADD_BIND(ALT_" =", "Increase window size"); ADD_BIND(ALT_" -", "Decrease window size"); @@ -122,8 +123,8 @@ void HelpDialog::updateStrings(uInt8 page, uInt8 lines, string& title) title = "Special commands"; ADD_BIND("Ctrl g", "Grab mouse (keep in window)"); ADD_BIND("Ctrl f", "Switch between NTSC/PAL/SECAM"); - ADD_BIND("Ctrl s", "Save game properties"); - ADD_BIND("", " to a new file"); + ADD_BIND("Ctrl s", "Save game properties to a"); + ADD_BIND("", " new file"); ADD_LINE(); ADD_BIND("Ctrl 0", "Toggle controller for Mouse"); ADD_BIND("Ctrl 1", "Toggle Stelladaptor left/right"); @@ -145,21 +146,25 @@ void HelpDialog::updateStrings(uInt8 page, uInt8 lines, string& title) case 4: title = "Developer commands"; - ADD_BIND("~", "Enter/exit debugger"); + ADD_BIND("`", "Enter/exit debugger"); ADD_LINE(); ADD_BIND(ALT_" PgUp", "Increase Display.YStart"); ADD_BIND(ALT_" PgDn", "Decrease Display.YStart"); ADD_BIND("Ctrl PgUp", "Increase Display.Height"); ADD_BIND("Ctrl PgDn", "Decrease Display.Height"); + ADD_LINE(); + ADD_BIND("Alt L", "Toggle frame stats"); + ADD_BIND("Alt ,", "Toggle 'Debug Colors' mode"); + ADD_BIND("Alt r", "Toggle continuous rewind"); break; case 5: title = "All other commands"; ADD_LINE(); - ADD_BIND("Remapped Events", ""); + ADD_BIND("Remapped Eve", "nts"); ADD_TEXT("Most other commands can be"); - ADD_TEXT("remapped. Please consult the"); - ADD_TEXT("'Input Settings' section for"); + ADD_TEXT("remapped. Please consult the"); + ADD_TEXT("'Input Settings" + ELLIPSIS + "' menu for"); ADD_TEXT("more information."); break; } From 14330ac19d10e94b10a3c87c5b34290d825b8eed Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 6 Dec 2017 17:44:14 +0100 Subject: [PATCH 032/156] links added and fixed --- docs/index.html | 62 +++++++++++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 25 deletions(-) diff --git a/docs/index.html b/docs/index.html index 8bba4f505..747046c5d 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1520,7 +1520,7 @@ - + @@ -1593,7 +1593,7 @@ - + @@ -2002,7 +2002,7 @@ - + @@ -2028,8 +2028,7 @@ + simultaneously. @@ -2262,7 +2261,7 @@ + disassembler. See the Debugger - ROM Disassembly Settings for more information. @@ -2332,7 +2331,7 @@ - @@ -2368,20 +2367,20 @@ - - + See the Game Properties section for valid types. @@ -2392,12 +2391,12 @@ + See the Game Properties section for valid types. - @@ -2829,7 +2828,7 @@ @@ -3036,9 +3039,16 @@ - - + + + +
          Switch mouse between controller emulation modes (see Game Properties - Controller)Switch mouse between controller emulation modes (see Game Properties - Controller) Control + 0 Control + 0
          Save continuous PNG snapshots (per interval defined in Snapshot Settings)Save continuous PNG snapshots (per interval defined in Snapshot Settings) Alt + s Cmd + s
          -cheat <code>
          Use the specified cheatcode (see Cheat section for description).Use the specified cheatcode (see Cheat section for description).
          -joyallow4 <1|0>
          Allow all 4 directions on a joystick to be pressed - simultaneously. Bumper Bash ignores this setting, - and always allows all 4 directions.
          -dis.resolve <1|0>
          Try to differentiate between code vs. data sections in the - disassembler. See the Debugger section for more information.
          -bs <type>
          Set "Cartridge.Type" property. See the Game Properties section + Set "Cartridge.Type" property. See the Game Properties section for valid types.
          -lc <type>
          Set "Controller.Left" property. See the Game Properties + Set "Controller.Left" property. See the Game Properties section for valid types.
          -rc <type>
          Set "Controller.Right" property. See the Game Properties + Set "Controller.Right" property. See the Game Properties section for valid types.
          -bc <type>
          Sets both "Controller.Left" and "Controller.Right" properties. - See the Game Properties section for valid types.
          -ma <Auto|XY>
          Set "Controller.MouseAxis" property. - See the Game Properties section for valid types.
          -format <format>
          Set "Display.Format" property. See the Game Properties section + Set "Display.Format" property. See the Game Properties section for valid formats.
               - + @@ -2929,7 +2928,7 @@
        • Any other devices will be ignored.
        • The assignment ordering of Stelladaptor/2600-daptor to port can be redefined with - 'saport' (see description in 'Starting a Game') and dynamically with the 'Control-1' key + 'saport' (see description in Using the Command Line) and dynamically with the 'Control-1' key combo.
        • @@ -3018,7 +3017,11 @@ - + + + + +
          ItemFor more information,
          see Commandline
          ItemFor more information,
          see Commandline
          Bankswitch type-bs
          Left Difficulty-ld
          Right Difficulty-rd
          Randomize zero-page ...When loading a ROM, randomize all RAM content instead of initializing with all zeroes (for 'Console' = 'Atari 2600' only)-plr.ramrandom
          -dev.ramrandom
          Randomize CPUWhen loading a ROM, randomize the content of the specified CPU registers-plr.cpurandom
          -dev.cpurandom
          Drive unused TIA pins ...Unused TIA pins are read random instead of the last databus values-plr.tiadriven
          -dev.tiadriven
          Fatal ARM emulation ...Thumb ARM emulation throws an exception and enters the debugger on fatal errors.-plr.thumb.trapfatal
          -dev.thumb.trapfatal
          Fatal ARM emulation ...Thumb ARM emulation throws an exception and enters the debugger on fatal errors-plr.thumb.trapfatal
          -dev.thumb.trapfatal
          (Jitter/roll) RecoveryDetermines recovery time for screen rolling-plr.tv.jitter_recovery
          -dev.tv.jitter_recovery
          PAL color-lossUse PAL color-loss effect-plr.colorloss
          -dev.colorloss
          Debug colorsUse fixed debug colors-plr.debugcolors
          -dev.debugcolors
          Player 0
          Missile 0
          Player 1
          - Missile 1
          Playfield
          Ball
          Set color for specific object in debug colors mode
          (PF0, PF1 and PF2 are have slightly different luminance,
          disabled in ROM launcher mode)
          -tia.dbgcolors
          Player 0
          Missile 0
          Player 1
          + Missile 1
          Playfield
          Ball +
          + Set color for specific object in 'Debug Colors' mode + (PF0, PF1 and PF2 have a slightly different luminance)

          + Disabled in ROM launcher mode
          -tia.dbgcolors +
          @@ -3087,7 +3097,7 @@ Defines the horizon of the rewind buffer. A large horizon allows going back further in time. To reach the horizon, save states will be compressed. This means that more and more intermediate - states will be removed and the interval between compressed states + states will be removed and the interval between save states becomes larger the further they are back in time. -plr.rewind.horizon
          -dev.rewind.horizon @@ -3332,7 +3342,7 @@ Ms Pac-Man (Stella extended codes):      - +
          ItemFor more information,
          see Commandline
          ItemFor more information,
          see Commandline
          Log level-loglevel
          Print to console-logtoconsole
          @@ -3446,8 +3456,8 @@ Ms Pac-Man (Stella extended codes): Cartridge.Type: Indicates the bank-switching type for the game. The value of this property must be either Auto or one of the following - (for more information about bank-switching see Kevin Horton's 2600 bankswitching - document or the documentation in each cartridges source code file). Types marked + (for more information about bank-switching see Kevin Horton's 2600 bankswitching + document or the documentation in each cartridges source code file). Types marked as (¹) do not currently have reliable auto-detection, those marked as (²) are not fully supported in the debugger: @@ -3544,19 +3554,21 @@ Ms Pac-Man (Stella extended codes): - + - +
          Keyboard Also known as the Star Raiders controller, functionally identical to the Kid's Controller and Keyboard Controller. Game included an overlay with commands, for use with Star Raiders.
          AmigaMouseCommodore Amiga computer mouse.
          AtariMouse Atari ST computer mouse.
          Trakball Standard Atari 2600 CX22/CX80 trakball controller.
          Trakball Standard Atari 2600 CX22/CX80 'Trak-Ball' controller.
          AtariVoxA SpeakJet based unlimited-vocabulary speech / sound synthesizer with 32K EEPROM.
          SaveKeyA 32K EEPROM for saving high scores, etc. (the EEPROM portion of an AtariVox).
          SaveKey A 32K EEPROM for saving high scores, etc. (the EEPROM portion of an AtariVox).
          Genesis Sega Genesis controller, which can be used similar to a BoosterGrip, giving an extra button.
          CompuMate Spectravideo CompuMate (if either left or right is set, CompuMate is used for both).
          Mindlink Mindlink controller.
          + + https://atariage.com/2600/programming/atarivox_mem_list.html Console.SwapPorts: Indicates that the left and right ports should be - swapped internally. This is used for ROMs like 'Raiders' where the + swapped internally. This is used for ROMs like 'Raiders of the Lost Ark' where the Player 0 joystick is plugged into the right joystick port. The value must be Yes or No. From b35a9ef946cf379865ac996081da6012622bd62e Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 6 Dec 2017 19:49:03 +0100 Subject: [PATCH 033/156] added that rewind toggle updates settings too --- src/common/StateManager.cxx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/common/StateManager.cxx b/src/common/StateManager.cxx index 34488cb1b..8896a2fe1 100644 --- a/src/common/StateManager.cxx +++ b/src/common/StateManager.cxx @@ -131,11 +131,14 @@ void StateManager::toggleRecordMode() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void StateManager::toggleRewindMode() { + bool devSettings = myOSystem.settings().getBool("dev.settings"); + myActiveMode = myActiveMode == Mode::Rewind ? Mode::Off : Mode::Rewind; if(myActiveMode == Mode::Rewind) myOSystem.frameBuffer().showMessage("Continuous rewind enabled"); else myOSystem.frameBuffer().showMessage("Continuous rewind disabled"); + myOSystem.settings().setValue(devSettings ? "dev.rewind" : "plr.rewind", myActiveMode == Mode::Rewind); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From ded2c71bdd078963749b938ef22c8177f2b6c6ee Mon Sep 17 00:00:00 2001 From: thrust26 Date: Thu, 7 Dec 2017 09:45:31 +0100 Subject: [PATCH 034/156] formatting aligned and numbering removed --- docs/debugger.html | 24 ++++++------- docs/index.html | 90 +++++++++++++++++++++++----------------------- 2 files changed, 57 insertions(+), 57 deletions(-) diff --git a/docs/debugger.html b/docs/debugger.html index 4e13f47f7..2e808cc45 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -12,7 +12,7 @@

          Contents

          -
            +
          - +

        Features

        @@ -240,8 +239,9 @@ execution by stepping one instruction, scanline, or frame at a time (or more than one at a time, using commands in the prompt). You can also set breakpoints or traps, which will cause the emulator to enter the debugger when they are triggered, even if it happens in mid-frame.

        +
        -

        Startup

        +

        Startup

        At startup, the debugger automatically tries load a number of files which will provide additional information for the debugger and can make debugging more convenient. @@ -254,7 +254,7 @@ more convenient.

        The location of this file will depend on the OS as follows:

        - +
        @@ -324,7 +324,7 @@ previous rewind operation. The rewind buffer is 100 levels deep by default.

        You can also use the buttons from anywhere in the GUI via hotkeys.

        -

        Linux/Unix ~/.stella/autoexec.script
        +
        @@ -391,7 +391,7 @@ or Supermon for the C=64.

        Editing keys work about like you'd expect them to in Windows, but many Bash-style commands are also supported:

        -
        Key Function
        +
        @@ -684,7 +684,7 @@ conditions without having to define the conditions yourself.

        your game's source with underscores, if you plan to use them with the Stella debugger.

        -
        KeyFunction
        HomeMove cursor to beginning of line
        EndMove cursor to end of line
        +
        @@ -716,7 +716,7 @@ They're not registers in the conventional sense, since they don't exist in a real system. For example, while the debugger keeps track of the number of scanlines in a frame, a real system would not (there is no register that holds 'number of scanlines' on an actual console).

        -
        FunctionDefinitionDescription
        _joy0left !(*SWCHA & $40) Left joystick moved left
        _joy0right !(*SWCHA & $80) Left joystick moved right
        +
        @@ -1186,7 +1186,7 @@ depending on which of these widgets is currently in focus.

        Each of these buttons also have a keyboard shortcut (indicated in square brackets). In fact, many of the inputboxes in various parts of the debugger respond to these same keyboard shortcuts. If in doubt, give them a try.

        -
        FunctionDescription
        _bank Currently selected bank
        _cclocks Color clocks on a scanline
        +
        @@ -1322,7 +1322,7 @@ Note that only code, graphics or data will show bytes and can be edited. can use. These are known as 'directives', and partly correspond to configuration options from the standalone Distella program. They are listed in order of decreasing hierarchy:

        -
        ButtonShortutDescription
        +
        CODEAddresses which have appeared in the program counter, or which tentatively can appear in the program counter. These can be edited in hex.
        GFXAddresses which contain data stored in the player graphics registers @@ -1496,7 +1496,7 @@ named "rr.a26", with properties entry "River Raid". Attempts will be made as fol

        The location of 'configdir' will depend on the OS as follows:

        -

        +

        diff --git a/docs/index.html b/docs/index.html index 747046c5d..267e25100 100644 --- a/docs/index.html +++ b/docs/index.html @@ -17,7 +17,7 @@

        Contents

        -
          +
        +


        @@ -59,7 +59,7 @@
        The Stella Team
        Stella Homepage
        -


        +


        @@ -311,7 +311,7 @@ Getting Started
        -

        1. Requirements

        +

        Requirements

        The following sections outline the basic system requirements for running @@ -378,7 +378,7 @@

        -

        2. Installation

        +

        Installation

        Stella is distributed in both source and binary form. In general, you should always @@ -453,7 +453,7 @@

        -

        3. Locating Game Images (aka, ROMs)

        +

        Locating Game Images (aka, ROMs)

        @@ -526,7 +526,7 @@ it (ie, the first one ending in a valid extension).

        -

        4. Playing a Game

        +

        Playing a Game

        Once Stella is installed and you have some ROM images you're almost ready to @@ -595,7 +595,7 @@ in a standalone gaming system).

        -

        5. Keyboard Layout

        +

        Keyboard Layout

        The Atari 2600 console controls and controllers are mapped to the computer's @@ -613,7 +613,7 @@

        Console Controls (can be remapped)

        -
        Linux/Unix ~/.stella/cfg/
        +
        @@ -740,7 +740,7 @@
        Function Key (Standard)
        - +
        @@ -784,7 +784,7 @@
        Function Key - +
        @@ -839,7 +839,7 @@
        Function Key
        - +
        @@ -878,7 +878,7 @@
        Function Key - +
        @@ -928,7 +928,7 @@
        Function Key
        - +
        @@ -952,7 +952,7 @@
        Function Key - +
        @@ -987,7 +987,7 @@
        Function Key
        - +
        @@ -1026,7 +1026,7 @@ - - - + + + @@ -2313,6 +2313,11 @@ + + + + + - - + + - - + + - - + + - + - - + +
        Function Key - +
        @@ -1076,7 +1076,7 @@
        Function Key
        - +
        @@ -1145,7 +1145,7 @@
        Pad Button Key - +
        @@ -1217,7 +1217,7 @@

        CompuMate Controller (cannot be remapped)

        -
        Pad Button Key
        +
        @@ -1243,7 +1243,7 @@

        TV effects (cannot be remapped, only active in TIA mode)

        -
        CompuMate Key
        0 - 9 0 - 9
        A - Z A - Z
        +
        @@ -1328,7 +1328,7 @@

        Developer Keys in TIA mode (cannot be remapped)

        -
        Function Key (Standard)
        +
        @@ -1464,7 +1464,7 @@

        Other Keys (cannot be remapped, except those marked with '*')

        -
        Function Key (Standard)
        +
        @@ -1624,7 +1624,7 @@

        UI keys in Text Editing areas (cannot be remapped)

        -
        Function Key (Standard)
        +
        @@ -1643,7 +1643,7 @@
        KeyEditor Function
        HomeMove cursor to beginning of line
        EndMove cursor to end of line
        -

        6. Controller Map

        +

        Controller Map

        Some Atari (virtual) controllers are simulated with more than one computer controller, and @@ -1652,7 +1652,7 @@ enough buttons/axes/etc. to fully emulate the device, so extra functionality must be mapped to other controllers.

        - +
        @@ -1769,7 +1769,7 @@ there's likely a configuration option to do so. The remainder of this (lengthy) section details every configurable option.

        -

        1. Using the Command Line

        +

        Using the Command Line

        In addition to the built in ROM launcher, Stella can also be used from the @@ -2495,7 +2495,7 @@

          Computer
        -

        2. Changing Options

        +

        Changing Options

        All settings can be changed within the integrated Options UI while Stella is @@ -2686,7 +2686,7 @@

        -

        3. Event Remapping / Input Devices

        +

        Event Remapping / Input Devices

        Almost every event in Stella can be remapped to another key on the keyboard or @@ -2759,7 +2759,7 @@

        -

        4. ROM Launcher

        +

        ROM Launcher

        Several options are configurable in the ROM launcher. The size of the @@ -2867,7 +2867,7 @@

        -

        5. ROM Audit Mode

        +

        ROM Audit Mode

        Stella has the ability to rename all your ROMs according to the name @@ -2900,7 +2900,7 @@

        -

        6. Stelladaptor/2600-daptor Support

        +

        Stelladaptor/2600-daptor Support

        Stella supports real Atari 2600 joysticks, paddles and driving controllers @@ -2933,7 +2933,7 @@

        -

        7. AtariVox/SaveKey Support

        +

        AtariVox/SaveKey Support

        Stella supports a real AtariVox device for the speech/SpeakJet portion @@ -2964,7 +2964,7 @@ If the path for these files hasn't been set, the default location will depend on the version of Stella, as follows:

        -

        +

        @@ -3452,15 +3460,15 @@ Ms Pac-Man (Stella extended codes): + sound mods. The value must be Mono or Stereo. - + - + diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index 1f8fb1807..06be2bec4 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -24,7 +24,7 @@ #include "RewindManager.hxx" -static int count = 1; +//static int count = 1; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - RewindManager::RewindManager(OSystem& system, StateManager& statemgr) : myOSystem(system), @@ -36,18 +36,13 @@ RewindManager::RewindManager(OSystem& system, StateManager& statemgr) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void RewindManager::setup() { - /*static const int NUM_INTERVALS = 6; - // TODO: check for intervals shorter than 1 frame (adjust horizon too!) - const uInt32 INTERVAL_CYCLES[NUM_INTERVALS] = { 76, 76 * 50, 76 * 262, 76 * 262 * 10, - 76 * 262 * 60, 76 * 262 * 60 * 10 }; - static const int NUM_HORIZONS = 7; - const uInt64 HORIZON_CYCLES[NUM_HORIZONS] = { 76 * 262, 76 * 262 * 10, 76 * 262 * 60, 76 * 262 * 60 * 10, - 76 * 262 * 60 * 60, 76 * 262 * 60 * 60 * 10, uInt64(76) * 262 * 60 * 60 * 60 };*/ - bool devSettings = myOSystem.settings().getBool("dev.settings"); - string prefix = devSettings ? "dev." : "plr."; + string prefix = myOSystem.settings().getBool("dev.settings") ? "dev." : "plr."; - mySize = MAX_SIZE; // myOSystem.settings().getInt(prefix + "rewind.size"); - myUncompressed = MAX_SIZE / 4; // myOSystem.settings().getInt(prefix + "rewind.uncompressed"); + mySize = myOSystem.settings().getInt(prefix + "rewind.size"); + if(mySize != myStateList.capacity()) + myStateList.resize(mySize); + + myUncompressed = myOSystem.settings().getInt(prefix + "rewind.uncompressed"); myInterval = INTERVAL_CYCLES[0]; for(int i = 0; i < NUM_INTERVALS; ++i) @@ -89,7 +84,7 @@ void RewindManager::setup() else maxFactor = myFactor; } -cerr << "factor " << myFactor << endl; +//cerr << "factor " << myFactor << endl; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -122,8 +117,8 @@ bool RewindManager::addState(const string& message, bool continuous) { state.message = message; state.cycle = myOSystem.console().tia().cycles(); - state.count = count++; -cerr << "add " << state.count << endl; + //state.count = count++; +//cerr << "add " << state.count << endl; return true; } return false; @@ -143,7 +138,7 @@ bool RewindManager::rewindState() RewindState& state = myStateList.current(); Serializer& s = state.data; string message = getMessage(state, lastState); -cerr << "rewind " << state.count << endl; +//cerr << "rewind " << state.count << endl; s.rewind(); // rewind Serializer internal buffers myStateManager.loadState(s); @@ -169,7 +164,7 @@ bool RewindManager::unwindState() RewindState& state = myStateList.current(); Serializer& s = state.data; string message = getMessage(state, state); -cerr << "unwind " << state.count << endl; +//cerr << "unwind " << state.count << endl; s.rewind(); // rewind Serializer internal buffers myStateManager.loadState(s); @@ -222,14 +217,14 @@ void RewindManager::compressStates() } if (maxDelta < 1) { - // the horizon is getting too big + // the horizon is getting too big (can happen after changing settings) myStateList.remove(1); // remove oldest but one -cerr << "remove oldest + 1" << endl; +//cerr << "remove oldest + 1" << endl; } else { myStateList.remove(removeIdx); // remove -cerr << "remove " << removeIdx << endl; +//cerr << "remove " << removeIdx << endl; } } @@ -259,8 +254,7 @@ string RewindManager::getUnitString(Int64 cycles) // TODO: do we need hours here? don't think so const Int32 NUM_UNITS = 5; const string UNIT_NAMES[NUM_UNITS] = { "cycle", "scanline", "frame", "second", "minute" }; - const Int64 UNIT_CYCLES[NUM_UNITS + 1] = { 1, 76, 76 * scanlines, freq, - freq * 60, Int64(1) << 62 }; + const Int64 UNIT_CYCLES[NUM_UNITS + 1] = { 1, 76, 76 * scanlines, freq, freq * 60, Int64(1) << 62 }; stringstream result; Int32 i; @@ -280,4 +274,3 @@ string RewindManager::getUnitString(Int64 cycles) return result.str(); } - diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index 920acf49e..a531c1c9c 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -134,7 +134,7 @@ class RewindManager private: // Maximum number of states to save - static constexpr uInt32 MAX_SIZE = 20; // TODO: use a parameter here and allow user to define size in UI + static constexpr uInt32 INITIAL_SIZE = 100; OSystem& myOSystem; StateManager& myStateManager; @@ -149,7 +149,7 @@ class RewindManager Serializer data; string message; uInt64 cycle; - int count; // TODO - remove this + //int count; // TODO - remove this // We do nothing on object instantiation or copy // The goal of LinkedObjectPool is to not do any allocations at all @@ -158,13 +158,13 @@ class RewindManager // Output object info; used for debugging only friend ostream& operator<<(ostream& os, const RewindState& s) { - return os << "msg: " << s.message << " cycle: " << s.cycle << " count: " << s.count; + return os << "msg: " << s.message << " cycle: " << s.cycle; // << " count: " << s.count; } }; // The linked-list to store states (internally it takes care of reducing // frequent (de)-allocations) - Common::LinkedObjectPool myStateList; + Common::LinkedObjectPool myStateList; void compressStates(); diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index 665a79888..38f462bbe 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -615,8 +615,9 @@ void Debugger::setStartState() // Lock the bus each time the debugger is entered, so we don't disturb anything lockBankswitchState(); - // Save initial state and add it to the rewind list - saveOldState("enter debugger"); + // Save initial state and add it to the rewind list (except when in currently rewinding) + RewindManager& r = myOSystem.state().rewindManager(); + saveOldState(r.atLast() ? "enter debugger" : ""); // Set the 're-disassemble' flag, but don't do it until the next scheduled time myDialog->rom().invalidate(false); diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index 2e1d1a651..88b6ca927 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -189,7 +189,8 @@ void DeveloperDialog::addVideoTab(const GUI::Font& font) ypos += lineHeight + VGAP * 1; // TV jitter effect - myTVJitterWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "Jitter/roll effect", kTVJitter); + myTVJitterWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, + "Jitter/roll effect", kTVJitter); wid.push_back(myTVJitterWidget); myTVJitterRecWidget = new SliderWidget(myTab, font, myTVJitterWidget->getRight() + fontWidth * 3, ypos - 1, @@ -198,18 +199,21 @@ void DeveloperDialog::addVideoTab(const GUI::Font& font) myTVJitterRecWidget->setMinValue(1); myTVJitterRecWidget->setMaxValue(20); wid.push_back(myTVJitterRecWidget); myTVJitterRecLabelWidget = new StaticTextWidget(myTab, font, - myTVJitterRecWidget->getRight() + 4, myTVJitterRecWidget->getTop() + 2, + myTVJitterRecWidget->getRight() + 4, + myTVJitterRecWidget->getTop() + 2, 5 * fontWidth, fontHeight, "", kTextAlignLeft); myTVJitterRecLabelWidget->setFlags(WIDGET_CLEARBG); wid.push_back(myTVJitterRecLabelWidget); ypos += lineHeight + VGAP; - myColorLossWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "PAL color-loss"); + myColorLossWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, + "PAL color-loss"); wid.push_back(myColorLossWidget); ypos += lineHeight + VGAP; // debug colors - myDebugColorsWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "Debug colors (*)"); + myDebugColorsWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, + "Debug colors (*)"); wid.push_back(myDebugColorsWidget); ypos += lineHeight + VGAP + 2; @@ -258,12 +262,12 @@ void DeveloperDialog::addVideoTab(const GUI::Font& font) void DeveloperDialog::addStatesTab(const GUI::Font& font) { const string INTERVALS[NUM_INTERVALS] = { - "1 frame", - "3 frames", + " 1 frame", + " 3 frames", "10 frames", "30 frames", - "1 second", - "3 seconds", + " 1 second", + " 3 seconds", "10 seconds" }; const string INT_SETTINGS[NUM_INTERVALS] = { @@ -276,14 +280,14 @@ void DeveloperDialog::addStatesTab(const GUI::Font& font) "10s" }; const string HORIZONS[NUM_HORIZONS] = { - "~3 seconds", - "~10 seconds", - "~30 seconds", - "~1 minute", - "~3 minutes", - "~10 minutes", - "~30 minutes", - "~60 minutes" + " 3 seconds", + "10 seconds", + "30 seconds", + " 1 minute", + " 3 minutes", + "10 minutes", + "30 minutes", + "60 minutes" }; const string HOR_SETTINGS[NUM_HORIZONS] = { "3s", @@ -325,7 +329,7 @@ void DeveloperDialog::addStatesTab(const GUI::Font& font) int sWidth = font.getMaxCharWidth() * 8; myStateSizeWidget = new SliderWidget(myTab, font, HBORDER + INDENT * 2, ypos - 1, sWidth, lineHeight, "Buffer size (*) ", 0, kSizeChanged); - myStateSizeWidget->setMinValue(100); + myStateSizeWidget->setMinValue(20); myStateSizeWidget->setMaxValue(1000); myStateSizeWidget->setStepValue(20); wid.push_back(myStateSizeWidget); @@ -346,7 +350,7 @@ void DeveloperDialog::addStatesTab(const GUI::Font& font) items.clear(); for(int i = 0; i < NUM_INTERVALS; ++i) VarList::push_back(items, INTERVALS[i], INT_SETTINGS[i]); - int pwidth = font.getStringWidth("~10 seconds"); + int pwidth = font.getStringWidth("10 seconds"); myStateIntervalWidget = new PopUpWidget(myTab, font, HBORDER + INDENT * 2, ypos, pwidth, lineHeight, items, "Interval ", 0, kIntervalChanged); wid.push_back(myStateIntervalWidget); @@ -356,7 +360,7 @@ void DeveloperDialog::addStatesTab(const GUI::Font& font) for(int i = 0; i < NUM_HORIZONS; ++i) VarList::push_back(items, HORIZONS[i], HOR_SETTINGS[i]); myStateHorizonWidget = new PopUpWidget(myTab, font, HBORDER + INDENT * 2, ypos, pwidth, - lineHeight, items, "Horizon ", 0, kHorizonChanged); + lineHeight, items, "Horizon ~ ", 0, kHorizonChanged); wid.push_back(myStateHorizonWidget); // Add message concerning usage @@ -519,7 +523,6 @@ void DeveloperDialog::loadSettings(SettingsSet set) myUncompressed[set] = instance().settings().getInt(prefix + "rewind.uncompressed"); myStateInterval[set] = instance().settings().getString(prefix + "rewind.interval"); myStateHorizon[set] = instance().settings().getString(prefix + "rewind.horizon"); - } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -710,9 +713,6 @@ void DeveloperDialog::saveConfig() instance().console().tia().setFixedColorPalette(dbgcolors)) instance().settings().setValue("tia.dbgcolors", dbgcolors); - // Finally, issue a complete framebuffer re-initialization - //instance().createFrameBuffer(); - // update RewindManager instance().state().rewindManager().setup(); instance().state().setRewindMode(myContinuousRewindWidget->getState() ? @@ -967,11 +967,17 @@ void DeveloperDialog::handleSize() { uInt32 size = myStateSizeWidget->getValue(); uInt32 uncompressed = myUncompressedWidget->getValue(); - uInt32 interval = myStateIntervalWidget->getSelected(); - uInt32 horizon = myStateHorizonWidget->getSelected(); + Int32 interval = myStateIntervalWidget->getSelected(); + Int32 horizon = myStateHorizonWidget->getSelected(); bool found = false; Int32 i; + // handle illegal values + if(interval == -1) + interval = 0; + if(horizon == -1) + horizon = 0; + myStateSizeLabelWidget->setValue(size); // adapt horizon and interval do @@ -1012,11 +1018,17 @@ void DeveloperDialog::handleInterval() { uInt32 size = myStateSizeWidget->getValue(); uInt32 uncompressed = myUncompressedWidget->getValue(); - uInt32 interval = myStateIntervalWidget->getSelected(); - uInt32 horizon = myStateHorizonWidget->getSelected(); + Int32 interval = myStateIntervalWidget->getSelected(); + Int32 horizon = myStateHorizonWidget->getSelected(); bool found = false; Int32 i; + // handle illegal values + if(interval == -1) + interval = 0; + if(horizon == -1) + horizon = 0; + // adapt horizon and size do { @@ -1044,17 +1056,23 @@ void DeveloperDialog::handleHorizon() { uInt32 size = myStateSizeWidget->getValue(); uInt32 uncompressed = myUncompressedWidget->getValue(); - uInt32 interval = myStateIntervalWidget->getSelected(); - uInt32 horizon = myStateHorizonWidget->getSelected(); + Int32 interval = myStateIntervalWidget->getSelected(); + Int32 horizon = myStateHorizonWidget->getSelected(); bool found = false; Int32 i; + // handle illegal values + if(interval == -1) + interval = 0; + if(horizon == -1) + horizon = 0; + // adapt interval and size do { for(i = interval; i >= 0; --i) { - if(size * instance().state().rewindManager().INTERVAL_CYCLES[i] + if(uInt64(size) * instance().state().rewindManager().INTERVAL_CYCLES[i] <= instance().state().rewindManager().HORIZON_CYCLES[horizon]) { found = true; diff --git a/src/gui/DeveloperDialog.hxx b/src/gui/DeveloperDialog.hxx index bbc28f002..db0388eb4 100644 --- a/src/gui/DeveloperDialog.hxx +++ b/src/gui/DeveloperDialog.hxx @@ -152,7 +152,6 @@ class DeveloperDialog : public Dialog bool myContinuousRewind[2]; int myStateSize[2]; int myUncompressed[2]; - //int myStateInterval[2]; string myStateInterval[2]; string myStateHorizon[2]; @@ -182,8 +181,9 @@ class DeveloperDialog : public Dialog void handleUncompressed(); void handleInterval(); void handleHorizon(); - +#ifdef DEBUGGER_SUPPORT void handleFontSize(); +#endif // Following constructors and assignment operators not supported DeveloperDialog() = delete; From 47b4007bcb92cc9974cd21cb13bcbba1ba0e632e Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Tue, 12 Dec 2017 17:53:34 -0330 Subject: [PATCH 057/156] Bumped version # for latest milestone (rewind outside debugger). --- src/common/Version.hxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/Version.hxx b/src/common/Version.hxx index 73b2a6559..c5cd7070e 100644 --- a/src/common/Version.hxx +++ b/src/common/Version.hxx @@ -18,7 +18,7 @@ #ifndef VERSION_HXX #define VERSION_HXX -#define STELLA_VERSION "5.1_a1" +#define STELLA_VERSION "5.1_a2" #define STELLA_BUILD "3826" #endif From 20eb97ce14d6d65d81c3c10370ae3af0a5cfdfa9 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 13 Dec 2017 12:31:18 +0100 Subject: [PATCH 058/156] savestate position in list display in message added compressStates loop fixed and slightly optimized fixed minimal size value in Settings --- src/common/LinkedObjectPool.hxx | 13 +++++++++ src/common/RewindManager.cxx | 51 +++++++++++++++------------------ src/common/RewindManager.hxx | 4 +-- src/emucore/Settings.cxx | 12 ++++---- 4 files changed, 44 insertions(+), 36 deletions(-) diff --git a/src/common/LinkedObjectPool.hxx b/src/common/LinkedObjectPool.hxx index 0d42d92d5..d3484bc26 100644 --- a/src/common/LinkedObjectPool.hxx +++ b/src/common/LinkedObjectPool.hxx @@ -72,6 +72,19 @@ class LinkedObjectPool */ T& current() const { return *myCurrent; } + /** + Returns current's position in the list + + SLOW, but only required for messages + */ + uInt32 currentIdx() const { + iter it = myCurrent; + uInt32 idx = 1; + + while(it-- != myList.begin()) idx++; + return idx; + } + /** Does the 'current' iterator point to a valid node in the active list? This must be called before 'current()' is called. diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index 06be2bec4..4a2d85ab9 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -56,13 +56,13 @@ void RewindManager::setup() // calc interval growth factor const double MAX_FACTOR = 1E8; - double minFactor = 1, maxFactor = MAX_FACTOR; + double minFactor = 0, maxFactor = MAX_FACTOR; while(true) { double interval = myInterval; double cycleSum = interval * myUncompressed; - // calculate next factor + // calculate nextCycles factor myFactor = (minFactor + maxFactor) / 2; // horizon not reachable? if(myFactor == MAX_FACTOR) @@ -91,11 +91,11 @@ void RewindManager::setup() bool RewindManager::addState(const string& message, bool continuous) { // only check for continuous rewind states, ignore for debugger - if(continuous) + if(continuous && myStateList.currentIsValid()) { // check if the current state has the right interval from the last state RewindState& lastState = myStateList.current(); - if(myOSystem.console().tia().cycles() - lastState.cycle < myInterval) + if(myOSystem.console().tia().cycles() - lastState.cycles < myInterval) return false; } @@ -116,7 +116,7 @@ bool RewindManager::addState(const string& message, bool continuous) if(myStateManager.saveState(s) && myOSystem.console().tia().saveDisplay(s)) { state.message = message; - state.cycle = myOSystem.console().tia().cycles(); + state.cycles = myOSystem.console().tia().cycles(); //state.count = count++; //cerr << "add " << state.count << endl; return true; @@ -157,7 +157,7 @@ bool RewindManager::unwindState() { if(!atLast()) { - // Set internal current iterator to next state (forward in time), + // Set internal current iterator to nextCycles state (forward in time), // since we've now processed this state myStateList.moveToNext(); @@ -181,41 +181,35 @@ bool RewindManager::unwindState() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void RewindManager::compressStates() { - //bool debugMode = myOSystem.eventHandler().state() == EventHandler::S_DEBUGGER; - - uInt64 currentCycle = myOSystem.console().tia().cycles(); - uInt64 lastCycle = currentCycle; - double expectedCycles = myInterval; // == cycles of 1 frame, TODO: use actual number of scanlines - double maxDelta = 0; + uInt64 currentCycles = myOSystem.console().tia().cycles(); + double expectedCycles = myInterval * (1*0 + myFactor); + double maxError = 0; uInt32 removeIdx = 0; + uInt32 idx = myStateList.size() - 2; - uInt32 idx = myStateList.size() - 1; -//cerr << "idx: " << idx << endl; - for(auto it = myStateList.last(); it != myStateList.first(); --it) + //cerr << "idx: " << idx << endl; + // iterate from last but one to first but one + for(auto it = myStateList.previous(myStateList.last()); it != myStateList.first(); --it) { if(idx < mySize - myUncompressed) { //cerr << *it << endl << endl; // debug code expectedCycles *= myFactor; - double expected = expectedCycles * (1 + myFactor); - uInt64 prev = myStateList.previous(it)->cycle; - uInt64 next = myStateList.next(it)->cycle; - if(next != lastCycle) - lastCycle++; - double delta = expected / (next - prev); -//cerr << "prev: " << prev << ", next: " << next << ", delta: " << delta << endl; + uInt64 prevCycles = myStateList.previous(it)->cycles; + uInt64 nextCycles = myStateList.next(it)->cycles; + double error = expectedCycles / (nextCycles - prevCycles); +//cerr << "prevCycles: " << prevCycles << ", nextCycles: " << nextCycles << ", error: " << error << endl; - if(delta > maxDelta) + if(error > maxError) { - maxDelta = delta; + maxError = error; removeIdx = idx; } } - lastCycle = it->cycle; --idx; } - if (maxDelta < 1) + if (maxError < 1) { // the horizon is getting too big (can happen after changing settings) myStateList.remove(1); // remove oldest but one @@ -231,7 +225,7 @@ void RewindManager::compressStates() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - string RewindManager::getMessage(RewindState& state, RewindState& lastState) { - Int64 diff = myOSystem.console().tia().cycles() - state.cycle; + Int64 diff = myOSystem.console().tia().cycles() - state.cycles; stringstream message; message << (diff >= 0 ? "Rewind" : "Unwind") << " " << getUnitString(diff); @@ -239,6 +233,7 @@ string RewindManager::getMessage(RewindState& state, RewindState& lastState) // add optional message (TODO: when smart removal works, we have to do something smart with this part too) if(!lastState.message.empty()) message << " (" << lastState.message << ")"; + message << " [" << myStateList.currentIdx() << "/" << myStateList.size() << "]"; return message.str(); } @@ -263,7 +258,7 @@ string RewindManager::getUnitString(Int64 cycles) for(i = 0; i < NUM_UNITS - 1; ++i) { - // use the lower unit up to twice the next unit, except for an exact match of the next unit + // use the lower unit up to twice the nextCycles unit, except for an exact match of the nextCycles unit // TODO: does the latter make sense, e.g. for ROMs with changing scanlines? if(cycles < UNIT_CYCLES[i + 1] * 2 && cycles % UNIT_CYCLES[i + 1] != 0) break; diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index a531c1c9c..53fef1b7d 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -148,7 +148,7 @@ class RewindManager struct RewindState { Serializer data; string message; - uInt64 cycle; + uInt64 cycles; //int count; // TODO - remove this // We do nothing on object instantiation or copy @@ -158,7 +158,7 @@ class RewindManager // Output object info; used for debugging only friend ostream& operator<<(ostream& os, const RewindState& s) { - return os << "msg: " << s.message << " cycle: " << s.cycle; // << " count: " << s.count; + return os << "msg: " << s.message << " cycle: " << s.cycles; // << " count: " << s.count; } }; diff --git a/src/emucore/Settings.cxx b/src/emucore/Settings.cxx index 0bd0e126a..6a312e01a 100644 --- a/src/emucore/Settings.cxx +++ b/src/emucore/Settings.cxx @@ -320,10 +320,10 @@ void Settings::validate() if(i < 1 || i > 20) setInternal("dev.tv.jitter_recovery", "2"); int size = getInt("dev.rewind.size"); - if(size < 100 || size > 1000) + if(size < 20 || size > 1000) { - setInternal("dev.rewind.size", 100); - size = 100; + setInternal("dev.rewind.size", 20); + size = 20; } i = getInt("dev.rewind.uncompressed"); @@ -339,10 +339,10 @@ void Settings::validate() if(i < 1 || i > 20) setInternal("plr.tv.jitter_recovery", "10"); size = getInt("plr.rewind.size"); - if(size < 100 || size > 1000) + if(size < 20 || size > 1000) { - setInternal("plr.rewind.size", 100); - size = 100; + setInternal("plr.rewind.size", 20); + size = 20; } i = getInt("plr.rewind.uncompressed"); From e2301dfd5ed2c8432b8d2ff2b21470f1b811fed9 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 13 Dec 2017 19:15:09 +0100 Subject: [PATCH 059/156] fine tuning on interval factor and state compression rewind now displayed immediately (instead of "Paused") two initial rewinds in continuous rewind mode fixed Horizon widget disabled when Uncompressed size == Buffer size fixed minimum Interval --- docs/index.html | 7 +++++-- src/common/RewindManager.cxx | 38 ++++++++++++++++++++++-------------- src/common/RewindManager.hxx | 3 ++- src/common/StateManager.cxx | 2 +- src/emucore/EventHandler.cxx | 10 ++++++---- src/emucore/FrameBuffer.cxx | 8 +++++++- src/emucore/FrameBuffer.hxx | 5 +++++ src/emucore/Settings.cxx | 4 ++-- src/gui/DeveloperDialog.cxx | 2 ++ 9 files changed, 53 insertions(+), 26 deletions(-) diff --git a/docs/index.html b/docs/index.html index d7d340e30..8bb086b80 100644 --- a/docs/index.html +++ b/docs/index.html @@ -3107,9 +3107,12 @@ diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index 4a2d85ab9..f2314645c 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -36,6 +36,8 @@ RewindManager::RewindManager(OSystem& system, StateManager& statemgr) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void RewindManager::setup() { + myLastContinuousAdd = false; + string prefix = myOSystem.settings().getBool("dev.settings") ? "dev." : "plr."; mySize = myOSystem.settings().getInt(prefix + "rewind.size"); @@ -55,20 +57,22 @@ void RewindManager::setup() myHorizon = HORIZON_CYCLES[i]; // calc interval growth factor + // this factor defines the backward horizon const double MAX_FACTOR = 1E8; double minFactor = 0, maxFactor = MAX_FACTOR; + myFactor = 1; - while(true) + while(myUncompressed < mySize) { double interval = myInterval; - double cycleSum = interval * myUncompressed; + double cycleSum = interval * (myUncompressed + 1); // calculate nextCycles factor myFactor = (minFactor + maxFactor) / 2; // horizon not reachable? if(myFactor == MAX_FACTOR) break; - // sum up interval cycles - for(uInt32 i = myUncompressed; i < mySize; ++i) + // sum up interval cycles (first and last state are not compressed) + for(uInt32 i = myUncompressed + 1; i < mySize - 1; ++i) { interval *= myFactor; cycleSum += interval; @@ -119,6 +123,7 @@ bool RewindManager::addState(const string& message, bool continuous) state.cycles = myOSystem.console().tia().cycles(); //state.count = count++; //cerr << "add " << state.count << endl; + myLastContinuousAdd = continuous; return true; } return false; @@ -129,15 +134,17 @@ bool RewindManager::rewindState() { if(!atFirst()) { - RewindState& lastState = myStateList.current(); - + if (!myLastContinuousAdd) // Set internal current iterator to previous state (back in time), // since we will now processed this state - myStateList.moveToPrevious(); + myStateList.moveToPrevious(); + myLastContinuousAdd = false; + + //RewindState& lastState = myStateList.current(); RewindState& state = myStateList.current(); Serializer& s = state.data; - string message = getMessage(state, lastState); + string message = getMessage(state); //cerr << "rewind " << state.count << endl; s.rewind(); // rewind Serializer internal buffers @@ -163,7 +170,7 @@ bool RewindManager::unwindState() RewindState& state = myStateList.current(); Serializer& s = state.data; - string message = getMessage(state, state); + string message = getMessage(state); //cerr << "unwind " << state.count << endl; s.rewind(); // rewind Serializer internal buffers @@ -182,8 +189,8 @@ bool RewindManager::unwindState() void RewindManager::compressStates() { uInt64 currentCycles = myOSystem.console().tia().cycles(); - double expectedCycles = myInterval * (1*0 + myFactor); - double maxError = 0; + double expectedCycles = myInterval * myFactor * (1 + myFactor); + double maxError = 1; uInt32 removeIdx = 0; uInt32 idx = myStateList.size() - 2; @@ -223,17 +230,18 @@ void RewindManager::compressStates() } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -string RewindManager::getMessage(RewindState& state, RewindState& lastState) +string RewindManager::getMessage(RewindState& state) { Int64 diff = myOSystem.console().tia().cycles() - state.cycles; stringstream message; message << (diff >= 0 ? "Rewind" : "Unwind") << " " << getUnitString(diff); - // add optional message (TODO: when smart removal works, we have to do something smart with this part too) - if(!lastState.message.empty()) - message << " (" << lastState.message << ")"; message << " [" << myStateList.currentIdx() << "/" << myStateList.size() << "]"; + // add optional message + if(!state.message.empty()) + message << " (" << state.message << ")"; + return message.str(); } diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index 53fef1b7d..f4e67debb 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -144,6 +144,7 @@ class RewindManager uInt32 myInterval; uInt64 myHorizon; double myFactor; + bool myLastContinuousAdd; struct RewindState { Serializer data; @@ -168,7 +169,7 @@ class RewindManager void compressStates(); - string getMessage(RewindState& state, RewindState& lastState); + string getMessage(RewindState& state); private: // Following constructors and assignment operators not supported diff --git a/src/common/StateManager.cxx b/src/common/StateManager.cxx index a279e23f6..d31c56aaf 100644 --- a/src/common/StateManager.cxx +++ b/src/common/StateManager.cxx @@ -161,7 +161,7 @@ void StateManager::update() switch(myActiveMode) { case Mode::Rewind: - myRewindManager->addState("1 frame", true); + myRewindManager->addState("continuous rewind", true); break; #if 0 diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index 943b3f883..ac3957a8d 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -299,13 +299,15 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, bool state) switch(key) { case KBDK_LEFT: // Alt-left rewinds states - if(myOSystem.state().rewindState() && myState != S_PAUSE) - setEventState(S_PAUSE); + myOSystem.frameBuffer().resetPauseDelay(); + setEventState(S_PAUSE); + myOSystem.state().rewindState(); break; case KBDK_RIGHT: // Alt-right unwinds states - if(myOSystem.state().unwindState() && myState != S_PAUSE) - setEventState(S_PAUSE); + myOSystem.frameBuffer().resetPauseDelay(); + setEventState(S_PAUSE); + myOSystem.state().unwindState(); break; default: diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index 5b635c52a..ed1da3185 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -301,7 +301,7 @@ void FrameBuffer::update() // Show a pause message immediately and then every 7 seconds if (myPausedCount-- <= 0) { - myPausedCount = uInt32(7 * myOSystem.frameRate()); + resetPauseDelay(); showMessage("Paused", kMiddleCenter); } break; // S_PAUSE @@ -471,6 +471,12 @@ inline void FrameBuffer::drawMessage() myMsg.enabled = false; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void FrameBuffer::resetPauseDelay() +{ + myPausedCount = uInt32(7 * myOSystem.frameRate()); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - shared_ptr FrameBuffer::allocateSurface(int w, int h, const uInt32* data) { diff --git a/src/emucore/FrameBuffer.hxx b/src/emucore/FrameBuffer.hxx index 12f0e038d..7114ca4b0 100644 --- a/src/emucore/FrameBuffer.hxx +++ b/src/emucore/FrameBuffer.hxx @@ -144,6 +144,11 @@ class FrameBuffer */ void enableMessages(bool enable); + /** + Reset 'Paused' display delay counter + */ + void resetPauseDelay(); + /** Allocate a new surface. The FrameBuffer class takes all responsibility for freeing this surface (ie, other classes must not delete it directly). diff --git a/src/emucore/Settings.cxx b/src/emucore/Settings.cxx index 6a312e01a..4943d5003 100644 --- a/src/emucore/Settings.cxx +++ b/src/emucore/Settings.cxx @@ -329,11 +329,11 @@ void Settings::validate() i = getInt("dev.rewind.uncompressed"); if(i < 0 || i > size) setInternal("dev.rewind.uncompressed", size); - i = getInt("dev.rewind.interval"); + /*i = getInt("dev.rewind.interval"); if(i < 0 || i > 5) setInternal("dev.rewind.interval", 0); i = getInt("dev.rewind.horizon"); - if(i < 0 || i > 6) setInternal("dev.rewind.horizon", 1); + if(i < 0 || i > 6) setInternal("dev.rewind.horizon", 1);*/ i = getInt("plr.tv.jitter_recovery"); if(i < 1 || i > 20) setInternal("plr.tv.jitter_recovery", "10"); diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index 88b6ca927..fc48e4f39 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -999,6 +999,7 @@ void DeveloperDialog::handleSize() myUncompressedWidget->setValue(size); myStateIntervalWidget->setSelectedIndex(interval); myStateHorizonWidget->setSelectedIndex(i); + myStateHorizonWidget->setEnabled(size > uncompressed); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1011,6 +1012,7 @@ void DeveloperDialog::handleUncompressed() if(size < uncompressed) myStateSizeWidget->setValue(uncompressed); + myStateHorizonWidget->setEnabled(size > uncompressed); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 770e15f3809ea21455f595a6d0cf3bee388bcc96 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 13 Dec 2017 22:02:13 +0100 Subject: [PATCH 060/156] Continuous rewind added to log --- Changes.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Changes.txt b/Changes.txt index 344acd30a..d819e5fef 100644 --- a/Changes.txt +++ b/Changes.txt @@ -68,6 +68,10 @@ dialog. These settings now come in two groups (player/developer) and allow switching all settings at once. + * Added "Continuous Rewind" mode, which automatically creates save states + in user-defined intervals. The user can navigate back and forth within + these states inside the emulator and the debugger. + * Improved tab auto-complete in debugger * Added conditional traps and savestate creation to debugger From 984e304f43df0a04c5ea9a160fa2fc5f8bdb7e93 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Wed, 13 Dec 2017 20:04:09 -0330 Subject: [PATCH 061/156] Several updates to the changelog: - fixed formatting - moved mention of 'Continuous rewind' near the top of the list, since it's a major new feature --- Changes.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Changes.txt b/Changes.txt index d819e5fef..f5ce153b6 100644 --- a/Changes.txt +++ b/Changes.txt @@ -23,6 +23,10 @@ - improved cycle count (page penalties, sums created in disassembly) - improved handling of instruction masking opcodes (e.g. BIT) + * Added "Continuous Rewind" mode, which automatically creates save states + in user-defined intervals. The user can navigate back and forth within + these states inside the emulator and the debugger. + * Fixed Genesis controller autodetect (Stay Frosty 2, Scramble, etc). * Fixed a bug in ystart autodetection that could cause screen jumps. @@ -68,10 +72,6 @@ dialog. These settings now come in two groups (player/developer) and allow switching all settings at once. - * Added "Continuous Rewind" mode, which automatically creates save states - in user-defined intervals. The user can navigate back and forth within - these states inside the emulator and the debugger. - * Improved tab auto-complete in debugger * Added conditional traps and savestate creation to debugger From ba9d809109b06fe29b38f04f4f33031702227485 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Thu, 14 Dec 2017 14:25:02 +0100 Subject: [PATCH 062/156] state compression improved RewindManager class refactored for multiple rewinds/unwinds additional keys for faster rewinding added docs updated --- docs/debugger.html | 28 ++++++-- docs/index.html | 20 ++++++ src/common/LinkedObjectPool.hxx | 18 ++--- src/common/RewindManager.cxx | 104 ++++++++++++++++++---------- src/common/RewindManager.hxx | 21 +++++- src/common/StateManager.cxx | 8 +-- src/common/StateManager.hxx | 4 +- src/debugger/Debugger.cxx | 17 ++--- src/debugger/Debugger.hxx | 6 +- src/debugger/DebuggerParser.cxx | 1 - src/debugger/gui/DebuggerDialog.cxx | 36 +++++++++- src/debugger/gui/DebuggerDialog.hxx | 4 ++ src/emucore/EventHandler.cxx | 20 ++++-- 13 files changed, 206 insertions(+), 81 deletions(-) diff --git a/docs/debugger.html b/docs/debugger.html index 2e808cc45..332843089 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -316,9 +316,11 @@ used.

        The larger button at the left top (labeled '<') performs the rewind operation, -which will undo the previous Step/Trace/Scan/Frame advance, the smaller button at +which will undo the previous Step/Trace/Scan/Frame... advance, the smaller button at the left bottom (labeled '>') performs the unwind operation, which will undo the -previous rewind operation. The rewind buffer is 100 levels deep by default.

        +previous rewind operation. The rewind buffer is 100 levels deep by default, the +size can be configured e.g. in the +Developer Settings - States dialog.

        The other operations are Step, Trace, Scan+1, Frame+1 and Exit (debugger).

        @@ -347,11 +349,27 @@ previous rewind operation. The rewind buffer is 100 levels deep by default.

        - + - - + + + + + + + + + + + + + + + + + + diff --git a/docs/index.html b/docs/index.html index 8bb086b80..4c8ac198a 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1622,11 +1622,31 @@ + + + + + + + + + + + + + + + + + + + +
        Linux/Unix ~/.stella/nvram/atarivox_eeprom.dat
        @@ -2995,7 +2995,7 @@ reset the EEPROM to a clean state.

        -

        8. Developer Options/Integrated Debugger

        +

        Developer Options/Integrated Debugger

        Several developer related settings can be configured in the 'Developer Settings' dialog. @@ -3162,7 +3162,7 @@ this page for integrated debugger documentation.

        -

        9. Settings File

        +

        Settings File

        Stella will remember when you change a setting either at the command line @@ -3206,7 +3206,7 @@

        The settings file has a special name/location depending on which version of Stella you use, which is currently not configurable:

        -

        +

        @@ -3227,7 +3227,7 @@
        Linux/Unix $HOME/.config/stella/stellarc

        -

        10. Cheatcode Manager

        +

        Cheatcode Manager

        Stella contains support for Bob Colbert's Cheetah cheat codes, as @@ -3305,7 +3305,7 @@ Ms Pac-Man (Stella extended codes): path for this file hasn't been set, the default filename will depend on the version of Stella, as follows:

        -

        +

        @@ -3327,7 +3327,7 @@ Ms Pac-Man (Stella extended codes):

        Stella will require a restart for changes to this file to take effect.

        -

        11. Viewing the System Log

        +

        Viewing the System Log

        Stella maintains a log of its operations when the program first starts up, and @@ -3358,7 +3358,7 @@ Ms Pac-Man (Stella extended codes): home directory by clicking the "Save log to disk" button.

        -

        12. Game Properties

        +

        Game Properties

        Stella uses game properties to specify the "best" emulator settings for a @@ -3658,7 +3658,7 @@ Ms Pac-Man (Stella extended codes): path for this file hasn't been set, the default filename will depend on the version of Stella, as follows:

        -

        Linux/Unix $HOME/.config/stella/stella.cht
        +

        @@ -3681,14 +3681,14 @@ Ms Pac-Man (Stella extended codes):

        Stella will require a restart for changes to this file to take effect.

        -

        13. Palette Support

        +

        Palette Support

        An Atari 2600 palette consists of 128 colours, which are different for the three major television standards (NTSC, PAL, SECAM). Stella supports two built-in palettes and one user-defined palette for each format. These are set using the '-palette' option, and are described as follows:

        -

        Linux/Unix $HOME/.config/stella/stella.pro
        +

        @@ -3723,7 +3723,7 @@ Ms Pac-Man (Stella extended codes): path for this file hasn't been set, the default filename will depend on the version of Stella, as follows:

        -

        standard The default palette from Stella 1.4 onwards.
        +

        From b00ad1e03bed49fdafbca1ed9d085721781612fb Mon Sep 17 00:00:00 2001 From: thrust26 Date: Thu, 7 Dec 2017 09:48:56 +0100 Subject: [PATCH 035/156] border removed --- docs/graphics/rominfo_2x_small.png | Bin 78042 -> 71168 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/graphics/rominfo_2x_small.png b/docs/graphics/rominfo_2x_small.png index c5aabcc3bd7889c480203d0cf83d9d587fae7180..7f3ea5df0e91b4deccd4c8ed1a8920e9862c4e41 100644 GIT binary patch literal 71168 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 Date: Thu, 7 Dec 2017 22:43:03 +0100 Subject: [PATCH 036/156] minimal formatting fixes --- docs/graphics/rom_browser.png | Bin 6777 -> 3867 bytes docs/index.html | 9 ++++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/graphics/rom_browser.png b/docs/graphics/rom_browser.png index 8232f25de9c420822409391fd97a0c284d5c49c3..a1602ef1633379b8e0747dc874e34c12194a0803 100644 GIT binary patch literal 3867 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 bb+iQIY&0w4H4bprzA0wMEsqr(b-DUailEIT literal 6777 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 diff --git a/docs/index.html b/docs/index.html index 267e25100..bea0d750c 100644 --- a/docs/index.html +++ b/docs/index.html @@ -546,8 +546,12 @@ default ROM directory to use. This is where you have all your ROMs, collected as described in the previous section. Several dialogs will be shown, similar to the following:

        -

            -

        +
        Linux/Unix $HOME/.config/stella/stella.pal
        + + + + +
          

        The browser should be self-explanatory. The 'Go Up' button moves to the parent folder (if it exists), and the 'Base Dir' button moves to the base directory where, @@ -596,7 +600,6 @@

        Keyboard Layout

        -

        The Atari 2600 console controls and controllers are mapped to the computer's keyboard as shown in the following tables. However, most of these events can be From 21bcf8211bae12cbeba98502bd7e746dcbcc150d Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Thu, 7 Dec 2017 21:04:00 -0330 Subject: [PATCH 037/156] Updated OSX project file for class additions. --- src/macosx/stella.xcodeproj/project.pbxproj | 32 +++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/macosx/stella.xcodeproj/project.pbxproj b/src/macosx/stella.xcodeproj/project.pbxproj index f2dd3f6a0..4fd34027f 100644 --- a/src/macosx/stella.xcodeproj/project.pbxproj +++ b/src/macosx/stella.xcodeproj/project.pbxproj @@ -374,6 +374,14 @@ DC6C726313CDEA0A008A5975 /* LoggerDialog.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC6C726113CDEA0A008A5975 /* LoggerDialog.hxx */; }; DC6D39871A3CE65000171E71 /* CartWDWidget.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC6D39851A3CE65000171E71 /* CartWDWidget.cxx */; }; DC6D39881A3CE65000171E71 /* CartWDWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC6D39861A3CE65000171E71 /* CartWDWidget.hxx */; }; + DC71EA9D1FDA06D2008827CB /* CartE78K.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC71EA991FDA06D2008827CB /* CartE78K.cxx */; }; + DC71EA9E1FDA06D2008827CB /* CartE78K.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC71EA9A1FDA06D2008827CB /* CartE78K.hxx */; }; + DC71EA9F1FDA06D2008827CB /* CartMNetwork.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC71EA9B1FDA06D2008827CB /* CartMNetwork.cxx */; }; + DC71EAA01FDA06D2008827CB /* CartMNetwork.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC71EA9C1FDA06D2008827CB /* CartMNetwork.hxx */; }; + DC71EAA51FDA070D008827CB /* CartE78KWidget.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC71EAA11FDA070D008827CB /* CartE78KWidget.cxx */; }; + DC71EAA61FDA070D008827CB /* CartE78KWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC71EAA21FDA070D008827CB /* CartE78KWidget.hxx */; }; + DC71EAA71FDA070D008827CB /* CartMNetworkWidget.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC71EAA31FDA070D008827CB /* CartMNetworkWidget.cxx */; }; + DC71EAA81FDA070D008827CB /* CartMNetworkWidget.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC71EAA41FDA070D008827CB /* CartMNetworkWidget.hxx */; }; DC73BD851915E5B1003FAFAD /* FBSurfaceSDL2.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC73BD831915E5B1003FAFAD /* FBSurfaceSDL2.cxx */; }; DC73BD861915E5B1003FAFAD /* FBSurfaceSDL2.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DC73BD841915E5B1003FAFAD /* FBSurfaceSDL2.hxx */; }; DC73BD891915E5E3003FAFAD /* FBSurface.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DC73BD871915E5E3003FAFAD /* FBSurface.cxx */; }; @@ -1029,6 +1037,14 @@ DC6C726113CDEA0A008A5975 /* LoggerDialog.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = LoggerDialog.hxx; sourceTree = ""; }; DC6D39851A3CE65000171E71 /* CartWDWidget.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CartWDWidget.cxx; sourceTree = ""; }; DC6D39861A3CE65000171E71 /* CartWDWidget.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CartWDWidget.hxx; sourceTree = ""; }; + DC71EA991FDA06D2008827CB /* CartE78K.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CartE78K.cxx; sourceTree = ""; }; + DC71EA9A1FDA06D2008827CB /* CartE78K.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CartE78K.hxx; sourceTree = ""; }; + DC71EA9B1FDA06D2008827CB /* CartMNetwork.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CartMNetwork.cxx; sourceTree = ""; }; + DC71EA9C1FDA06D2008827CB /* CartMNetwork.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CartMNetwork.hxx; sourceTree = ""; }; + DC71EAA11FDA070D008827CB /* CartE78KWidget.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CartE78KWidget.cxx; sourceTree = ""; }; + DC71EAA21FDA070D008827CB /* CartE78KWidget.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CartE78KWidget.hxx; sourceTree = ""; }; + DC71EAA31FDA070D008827CB /* CartMNetworkWidget.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CartMNetworkWidget.cxx; sourceTree = ""; }; + DC71EAA41FDA070D008827CB /* CartMNetworkWidget.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CartMNetworkWidget.hxx; sourceTree = ""; }; DC73BD831915E5B1003FAFAD /* FBSurfaceSDL2.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBSurfaceSDL2.cxx; sourceTree = ""; }; DC73BD841915E5B1003FAFAD /* FBSurfaceSDL2.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = FBSurfaceSDL2.hxx; sourceTree = ""; }; DC73BD871915E5E3003FAFAD /* FBSurface.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBSurface.cxx; sourceTree = ""; }; @@ -1437,6 +1453,8 @@ DC676A341729A0B000E4E73D /* CartE0Widget.hxx */, DC676A351729A0B000E4E73D /* CartE7Widget.cxx */, DC676A361729A0B000E4E73D /* CartE7Widget.hxx */, + DC71EAA11FDA070D008827CB /* CartE78KWidget.cxx */, + DC71EAA21FDA070D008827CB /* CartE78KWidget.hxx */, DCAAE5BD1715887B0080BB82 /* CartEFSCWidget.cxx */, DCAAE5BE1715887B0080BB82 /* CartEFSCWidget.hxx */, DCAAE5BF1715887B0080BB82 /* CartEFWidget.cxx */, @@ -1463,6 +1481,8 @@ DC676A3A1729A0B000E4E73D /* CartFEWidget.hxx */, DC6A18F619B3E65500DEB242 /* CartMDMWidget.cxx */, DC6A18F719B3E65500DEB242 /* CartMDMWidget.hxx */, + DC71EAA31FDA070D008827CB /* CartMNetworkWidget.cxx */, + DC71EAA41FDA070D008827CB /* CartMNetworkWidget.hxx */, DC2AADB2194F390F0026C7A4 /* CartRamWidget.cxx */, DC2AADB3194F390F0026C7A4 /* CartRamWidget.hxx */, DC676A3D1729A0B000E4E73D /* CartSBWidget.cxx */, @@ -1662,6 +1682,8 @@ 2DE2DF210627AE07006BEC99 /* CartE0.hxx */, 2DE2DF220627AE07006BEC99 /* CartE7.cxx */, 2DE2DF230627AE07006BEC99 /* CartE7.hxx */, + DC71EA991FDA06D2008827CB /* CartE78K.cxx */, + DC71EA9A1FDA06D2008827CB /* CartE78K.hxx */, DCF467BE0F939A1400B25D7A /* CartEF.cxx */, DCF467BF0F939A1400B25D7A /* CartEF.hxx */, DCF467C00F939A1400B25D7A /* CartEFSC.cxx */, @@ -1688,6 +1710,8 @@ 2DE2DF330627AE07006BEC99 /* CartFE.hxx */, DC6A18FA19B3E67A00DEB242 /* CartMDM.cxx */, DC6A18FB19B3E67A00DEB242 /* CartMDM.hxx */, + DC71EA9B1FDA06D2008827CB /* CartMNetwork.cxx */, + DC71EA9C1FDA06D2008827CB /* CartMNetwork.hxx */, DC0984830D3985160073C852 /* CartSB.cxx */, DC0984840D3985160073C852 /* CartSB.hxx */, 2DDBEB7008457B7D00812C11 /* CartUA.cxx */, @@ -2077,6 +2101,7 @@ 2D9173D109BA90380026E9FF /* CartAR.hxx in Headers */, 2D9173D209BA90380026E9FF /* CartCV.hxx in Headers */, 2D9173D309BA90380026E9FF /* CartDPC.hxx in Headers */, + DC71EAA01FDA06D2008827CB /* CartMNetwork.hxx in Headers */, 2D9173D409BA90380026E9FF /* CartE0.hxx in Headers */, DC5AAC281FCB24AB00C420A6 /* EventHandlerConstants.hxx in Headers */, DC73BD8A1915E5E3003FAFAD /* FBSurface.hxx in Headers */, @@ -2086,6 +2111,7 @@ DCF3A6FD1DFC75E3008A8AF3 /* Playfield.hxx in Headers */, 2D9173D809BA90380026E9FF /* CartF6.hxx in Headers */, 2D9173D909BA90380026E9FF /* CartF6SC.hxx in Headers */, + DC71EAA61FDA070D008827CB /* CartE78KWidget.hxx in Headers */, DC9616311F817830008A2206 /* FlashWidget.hxx in Headers */, 2D9173DA09BA90380026E9FF /* CartF8.hxx in Headers */, DC3EE8591E2C0E6D00905161 /* crc32.h in Headers */, @@ -2122,6 +2148,7 @@ DC96162F1F817830008A2206 /* AtariMouseWidget.hxx in Headers */, DCF4907A1A0ECE5B00A67AA9 /* Vec.hxx in Headers */, 2D91740109BA90380026E9FF /* AudioDialog.hxx in Headers */, + DC71EA9E1FDA06D2008827CB /* CartE78K.hxx in Headers */, 2D91740209BA90380026E9FF /* BrowserDialog.hxx in Headers */, 2D91740309BA90380026E9FF /* Command.hxx in Headers */, DC3EE85B1E2C0E6D00905161 /* deflate.h in Headers */, @@ -2236,6 +2263,7 @@ DC173F770E2CAC1E00320F94 /* ContextMenu.hxx in Headers */, DC0DF86A0F0DAAF500B0F1F3 /* GlobalPropsDialog.hxx in Headers */, DC5D2C520F117CFD004D1660 /* Rect.hxx in Headers */, + DC71EAA81FDA070D008827CB /* CartMNetworkWidget.hxx in Headers */, DC5D2C530F117CFD004D1660 /* StellaFont.hxx in Headers */, DC5D2C540F117CFD004D1660 /* StellaLargeFont.hxx in Headers */, DC5D2C550F117CFD004D1660 /* StellaMediumFont.hxx in Headers */, @@ -2595,9 +2623,11 @@ 2D91750409BA90380026E9FF /* ToggleWidget.cxx in Sources */, 2D91750609BA90380026E9FF /* TiaZoomWidget.cxx in Sources */, CFE3F6131E84A9CE00A8204E /* CartBUS.cxx in Sources */, + DC71EA9D1FDA06D2008827CB /* CartE78K.cxx in Sources */, DC73BD851915E5B1003FAFAD /* FBSurfaceSDL2.cxx in Sources */, DCDDEAC41F5DBF0400C67366 /* RewindManager.cxx in Sources */, 2D91750709BA90380026E9FF /* TIASnd.cxx in Sources */, + DC71EA9F1FDA06D2008827CB /* CartMNetwork.cxx in Sources */, 2D91750809BA90380026E9FF /* AudioWidget.cxx in Sources */, 2D91750B09BA90380026E9FF /* EventMappingWidget.cxx in Sources */, 2D91750C09BA90380026E9FF /* InputDialog.cxx in Sources */, @@ -2627,6 +2657,7 @@ DCA00FF70DBABCAD00C3823D /* RiotDebug.cxx in Sources */, DC047FEE1A4A6F3600348F0F /* JoystickDialog.cxx in Sources */, DC4AC6EF0DC8DACB00CD3AD2 /* RiotWidget.cxx in Sources */, + DC71EAA51FDA070D008827CB /* CartE78KWidget.cxx in Sources */, DC4AC6F30DC8DAEF00CD3AD2 /* SaveKey.cxx in Sources */, DC173F760E2CAC1E00320F94 /* ContextMenu.cxx in Sources */, DC2AADB4194F390F0026C7A4 /* CartRamWidget.cxx in Sources */, @@ -2706,6 +2737,7 @@ DCAAE5E21715887B0080BB82 /* CartF0Widget.cxx in Sources */, DCB2ECAF1F0AECA3009738A6 /* CartDetector.cxx in Sources */, DCAAE5E41715887B0080BB82 /* CartF4SCWidget.cxx in Sources */, + DC71EAA71FDA070D008827CB /* CartMNetworkWidget.cxx in Sources */, DC2AADB0194F389C0026C7A4 /* TIASurface.cxx in Sources */, DCBDDE9E1D6A5F2F009DF1E9 /* Cart3EPlus.cxx in Sources */, DCAAE5E61715887B0080BB82 /* CartF4Widget.cxx in Sources */, From 76b3ff02b3874164e48d47ad6a856043c6c36519 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Thu, 7 Dec 2017 21:27:31 -0330 Subject: [PATCH 038/156] Fixed various warnings in code. - removed unused variables - in RewindManager, convert cycles to Int32 rather than Int64; although they are defined as 64-bit from the TIA, we only care about differences here, and the difference will never be larger than a 32-bit can hold. --- src/common/RewindManager.cxx | 17 +++++++-------- src/common/RewindManager.hxx | 2 +- src/debugger/Debugger.cxx | 2 +- src/gui/DeveloperDialog.cxx | 40 ++++++++++++++++-------------------- src/gui/DeveloperDialog.hxx | 2 -- 5 files changed, 29 insertions(+), 34 deletions(-) diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index 69ae2df3b..e628838f6 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -116,7 +116,7 @@ void RewindManager::compressStates() #if 0 myStateList.removeFirst(); // remove the oldest state file #else - bool debugMode = myOSystem.eventHandler().state() == EventHandler::S_DEBUGGER; + //bool debugMode = myOSystem.eventHandler().state() == EventHandler::S_DEBUGGER; // TODO: let user control these: const double DENSITY = 1.15; // exponential growth of cycle intervals const uInt32 STEP_STATES = 60; // single step rewind length @@ -171,7 +171,7 @@ void RewindManager::compressStates() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - string RewindManager::getMessage(RewindState& state) { - Int64 diff = myOSystem.console().tia().cycles() - state.cycle; + Int32 diff = Int32(myOSystem.console().tia().cycles() - state.cycle); stringstream message; message << (diff >= 0 ? "Rewind" : "Unwind") << " " << getUnitString(diff); @@ -183,18 +183,19 @@ string RewindManager::getMessage(RewindState& state) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -string RewindManager::getUnitString(Int64 cycles) +string RewindManager::getUnitString(Int32 cycles) { - const Int64 scanlines = std::max(myOSystem.console().tia().scanlinesLastFrame(), 240u); + const Int32 scanlines = std::max(myOSystem.console().tia().scanlinesLastFrame(), 240u); const bool isNTSC = scanlines <= 285; // TODO: replace magic number - const Int64 NTSC_FREQ = 1193182; // ~76*262*60 - const Int64 PAL_FREQ = 1182298; // ~76*312*50 - const Int64 freq = isNTSC ? NTSC_FREQ : PAL_FREQ; // = cycles/second + const Int32 NTSC_FREQ = 1193182; // ~76*262*60 + const Int32 PAL_FREQ = 1182298; // ~76*312*50 + const Int32 freq = isNTSC ? NTSC_FREQ : PAL_FREQ; // = cycles/second // TODO: do we need hours here? don't think so const Int32 NUM_UNITS = 5; const string UNIT_NAMES[NUM_UNITS] = { "cycle", "scanline", "frame", "second", "minute" }; - const Int64 UNIT_CYCLES[NUM_UNITS + 1] = { 1, 76, 76 * scanlines, freq, freq * 60, (Int64)1 << 63 }; + const Int32 UNIT_CYCLES[NUM_UNITS + 1] = { 1, 76, 76 * scanlines, freq, + freq * 60, 1 << 31 }; stringstream result; Int32 i; diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index 42d7d1cda..1521385ff 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -73,7 +73,7 @@ class RewindManager /** Convert the cycles into a unit string. */ - string getUnitString(Int64 cycles); + string getUnitString(Int32 cycles); private: // Maximum number of states to save diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index c8e39d48a..80f2bb673 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -544,7 +544,7 @@ uInt16 Debugger::windStates(uInt16 states, bool unwind, string& message) winds++; else break; - message = r.getUnitString(myOSystem.console().tia().cycles() - startCycles); + message = r.getUnitString(Int32(myOSystem.console().tia().cycles() - startCycles)); lockBankswitchState(); diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index 3dacb9328..c5da76987 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -43,15 +43,13 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DeveloperDialog::DeveloperDialog(OSystem& osystem, DialogContainer& parent, const GUI::Font& font, int max_w, int max_h) - : Dialog(osystem, parent), - myMaxWidth(max_w), - myMaxHeight(max_h) + : Dialog(osystem, parent) { const int VGAP = 4; const int lineHeight = font.getLineHeight(), fontWidth = font.getMaxCharWidth(), buttonHeight = font.getLineHeight() + 4; - int xpos, ypos, tabID; + int xpos, ypos; // Set real dimensions _w = std::min(53 * fontWidth + 10, max_w); @@ -81,7 +79,6 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font) const int VGAP = 4; int ypos = VBORDER; int lineHeight = font.getLineHeight(); - int fontWidth = font.getMaxCharWidth(), fontHeight = font.getFontHeight(); WidgetArray wid; VariantList items; int tabID = myTab->addTab(" Emulation "); @@ -268,7 +265,7 @@ void DeveloperDialog::addStatesTab(const GUI::Font& font) const int VGAP = 4; int ypos = VBORDER; int lineHeight = font.getLineHeight(); - int fontWidth = font.getMaxCharWidth(), fontHeight = font.getFontHeight(); + int fontHeight = font.getFontHeight(); WidgetArray wid; int tabID = myTab->addTab("States"); @@ -348,7 +345,6 @@ void DeveloperDialog::addDebuggerTab(const GUI::Font& font) fontHeight = font.getFontHeight(), lineHeight = font.getLineHeight(); int xpos, ypos, pwidth; - ButtonWidget* b; const GUI::Size& ds = instance().frameBuffer().desktopSize(); xpos = HBORDER; @@ -702,7 +698,7 @@ void DeveloperDialog::saveConfig() double diff = cycleSum - horizon; //cerr << "factor " << factor << ", diff " << diff << endl; // exit loop if result is close enough - if(abs(diff) < horizon * 1E-5) + if(std::abs(diff) < horizon * 1E-5) break; // define new boundary if(cycleSum < horizon) @@ -965,10 +961,10 @@ void DeveloperDialog::handleRewind() void DeveloperDialog::handleSize() { bool found = false; - uInt64 size = myStateSizeWidget->getValue(); - uInt64 uncompressed = myUncompressedWidget->getValue(); - uInt64 interval = myStateIntervalWidget->getValue(); - uInt64 horizon = myStateHorizonWidget->getValue(); + uInt32 size = myStateSizeWidget->getValue(); + uInt32 uncompressed = myUncompressedWidget->getValue(); + uInt32 interval = myStateIntervalWidget->getValue(); + uInt32 horizon = myStateHorizonWidget->getValue(); Int32 i; myStateSizeLabelWidget->setValue(size); @@ -1002,8 +998,8 @@ void DeveloperDialog::handleSize() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DeveloperDialog::handleUncompressed() { - uInt64 size = myStateSizeWidget->getValue(); - uInt64 uncompressed = myUncompressedWidget->getValue(); + uInt32 size = myStateSizeWidget->getValue(); + uInt32 uncompressed = myUncompressedWidget->getValue(); myUncompressedLabelWidget->setValue(myUncompressedWidget->getValue()); if(uncompressed > size) @@ -1017,10 +1013,10 @@ void DeveloperDialog::handleUncompressed() void DeveloperDialog::handleInterval() { bool found = false; - uInt64 size = myStateSizeWidget->getValue(); - uInt64 uncompressed = myUncompressedWidget->getValue(); - uInt64 interval = myStateIntervalWidget->getValue(); - uInt64 horizon = myStateHorizonWidget->getValue(); + uInt32 size = myStateSizeWidget->getValue(); + uInt32 uncompressed = myUncompressedWidget->getValue(); + uInt32 interval = myStateIntervalWidget->getValue(); + uInt32 horizon = myStateHorizonWidget->getValue(); Int32 i; myStateIntervalLabelWidget->setLabel(INTERVALS[interval]); @@ -1055,10 +1051,10 @@ void DeveloperDialog::handleInterval() void DeveloperDialog::handleHorizon() { bool found = false; - uInt64 size = myStateSizeWidget->getValue(); - uInt64 uncompressed = myUncompressedWidget->getValue(); - uInt64 interval = myStateIntervalWidget->getValue(); - uInt64 horizon = myStateHorizonWidget->getValue(); + uInt32 size = myStateSizeWidget->getValue(); + uInt32 uncompressed = myUncompressedWidget->getValue(); + uInt32 interval = myStateIntervalWidget->getValue(); + uInt32 horizon = myStateHorizonWidget->getValue(); Int32 i; myStateHorizonLabelWidget->setLabel(HORIZONS[horizon]); diff --git a/src/gui/DeveloperDialog.hxx b/src/gui/DeveloperDialog.hxx index c347dc9aa..500f3101a 100644 --- a/src/gui/DeveloperDialog.hxx +++ b/src/gui/DeveloperDialog.hxx @@ -145,8 +145,6 @@ class DeveloperDialog : public Dialog PopUpWidget* myDebuggerFontStyle; #endif - // Maximum width and height for this dialog - int myMaxWidth, myMaxHeight; bool mySettings; // Emulator sets bool myFrameStats[2]; From a1d03190429dca1c73468a95c79ed097420641ef Mon Sep 17 00:00:00 2001 From: thrust26 Date: Fri, 8 Dec 2017 11:33:55 +0100 Subject: [PATCH 039/156] corrected defaults for aspect ratio to 0.91 (NTSC)/1.09 (PAL) see https://en.wikipedia.org/wiki/Pixel_aspect_ratio --- src/emucore/Settings.cxx | 4 ++-- src/gui/VideoDialog.cxx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/emucore/Settings.cxx b/src/emucore/Settings.cxx index 577010d14..1bc5292ad 100644 --- a/src/emucore/Settings.cxx +++ b/src/emucore/Settings.cxx @@ -44,8 +44,8 @@ Settings::Settings(OSystem& osystem) // TIA specific options setInternal("tia.zoom", "3"); setInternal("tia.inter", "false"); - setInternal("tia.aspectn", "90"); - setInternal("tia.aspectp", "100"); + setInternal("tia.aspectn", "91"); + setInternal("tia.aspectp", "109"); setInternal("tia.fsfill", "false"); setInternal("tia.dbgcolors", "roygpb"); diff --git a/src/gui/VideoDialog.cxx b/src/gui/VideoDialog.cxx index 9f3cc457d..d30c5279e 100644 --- a/src/gui/VideoDialog.cxx +++ b/src/gui/VideoDialog.cxx @@ -511,9 +511,9 @@ void VideoDialog::setDefaults() myFrameTiming->setSelected("sleep", ""); myTIAInterpolate->setSelected("nearest", ""); myNAspectRatio->setValue(90); - myNAspectRatioLabel->setLabel("90"); + myNAspectRatioLabel->setLabel("91"); myPAspectRatio->setValue(100); - myPAspectRatioLabel->setLabel("100"); + myPAspectRatioLabel->setLabel("109"); myFrameRate->setValue(0); myFrameRateLabel->setLabel("Auto"); From e9a5198863fe67fc46714d0fafee9985d55d5809 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Fri, 8 Dec 2017 07:53:09 -0330 Subject: [PATCH 040/156] Reverted part of previous commit; rewind states now use 64-bit where appropriate. Fixed some more minor errors found by clang. --- src/common/LinkedObjectPool.hxx | 2 ++ src/common/RewindManager.cxx | 8 ++++---- src/common/RewindManager.hxx | 2 +- src/common/StateManager.hxx | 2 +- src/debugger/Debugger.cxx | 2 +- src/debugger/gui/AudioWidget.cxx | 6 +++--- src/gui/DeveloperDialog.cxx | 10 +++++----- src/gui/DeveloperDialog.hxx | 2 +- src/gui/RadioButtonWidget.cxx | 2 +- src/gui/RadioButtonWidget.hxx | 4 ++-- 10 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/common/LinkedObjectPool.hxx b/src/common/LinkedObjectPool.hxx index 2619acba7..01ce503b3 100644 --- a/src/common/LinkedObjectPool.hxx +++ b/src/common/LinkedObjectPool.hxx @@ -199,6 +199,8 @@ class LinkedObjectPool const_iter begin() const { return myList.cbegin(); } const_iter end() const { return myList.cend(); } + uInt32 capacity() const { return CAPACITY; } + uInt32 size() const { return myList.size(); } bool empty() const { return myList.size() == 0; } bool full() const { return myList.size() >= CAPACITY; } diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index e628838f6..42c0ad6b8 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -171,7 +171,7 @@ void RewindManager::compressStates() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - string RewindManager::getMessage(RewindState& state) { - Int32 diff = Int32(myOSystem.console().tia().cycles() - state.cycle); + Int64 diff = myOSystem.console().tia().cycles() - state.cycle; stringstream message; message << (diff >= 0 ? "Rewind" : "Unwind") << " " << getUnitString(diff); @@ -183,7 +183,7 @@ string RewindManager::getMessage(RewindState& state) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -string RewindManager::getUnitString(Int32 cycles) +string RewindManager::getUnitString(Int64 cycles) { const Int32 scanlines = std::max(myOSystem.console().tia().scanlinesLastFrame(), 240u); const bool isNTSC = scanlines <= 285; // TODO: replace magic number @@ -194,8 +194,8 @@ string RewindManager::getUnitString(Int32 cycles) // TODO: do we need hours here? don't think so const Int32 NUM_UNITS = 5; const string UNIT_NAMES[NUM_UNITS] = { "cycle", "scanline", "frame", "second", "minute" }; - const Int32 UNIT_CYCLES[NUM_UNITS + 1] = { 1, 76, 76 * scanlines, freq, - freq * 60, 1 << 31 }; + const Int64 UNIT_CYCLES[NUM_UNITS + 1] = { 1, 76, 76 * scanlines, freq, + freq * 60, Int64(1) << 62 }; stringstream result; Int32 i; diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index 1521385ff..42d7d1cda 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -73,7 +73,7 @@ class RewindManager /** Convert the cycles into a unit string. */ - string getUnitString(Int32 cycles); + string getUnitString(Int64 cycles); private: // Maximum number of states to save diff --git a/src/common/StateManager.hxx b/src/common/StateManager.hxx index 889e5aa37..5e7b83c10 100644 --- a/src/common/StateManager.hxx +++ b/src/common/StateManager.hxx @@ -69,7 +69,7 @@ class StateManager Sets state rewind recording mode; this uses the RewindManager for its functionality. */ - void setRewindMode(Mode mode) { myActiveMode = mode; }; + void setRewindMode(Mode mode) { myActiveMode = mode; } /** Rewinds one state; this uses the RewindManager for its functionality. diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index 80f2bb673..c8e39d48a 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -544,7 +544,7 @@ uInt16 Debugger::windStates(uInt16 states, bool unwind, string& message) winds++; else break; - message = r.getUnitString(Int32(myOSystem.console().tia().cycles() - startCycles)); + message = r.getUnitString(myOSystem.console().tia().cycles() - startCycles); lockBankswitchState(); diff --git a/src/debugger/gui/AudioWidget.cxx b/src/debugger/gui/AudioWidget.cxx index b977295f5..da7441ad5 100644 --- a/src/debugger/gui/AudioWidget.cxx +++ b/src/debugger/gui/AudioWidget.cxx @@ -52,7 +52,7 @@ AudioWidget::AudioWidget(GuiObject* boss, const GUI::Font& lfont, for(int col = 0; col < 2; ++col) { - new StaticTextWidget(boss, lfont, xpos + col * myAudF->colWidth() + (int)(myAudF->colWidth() / 2.75), + new StaticTextWidget(boss, lfont, xpos + col * myAudF->colWidth() + int(myAudF->colWidth() / 2.75), ypos - lineHeight, fontWidth, fontHeight, Common::Base::toString(col, Common::Base::F_16_1), kTextAlignLeft); @@ -63,7 +63,7 @@ AudioWidget::AudioWidget(GuiObject* boss, const GUI::Font& lfont, new StaticTextWidget(boss, lfont, xpos, ypos+2, lwidth, fontHeight, "AUDC", kTextAlignLeft); xpos += lwidth; - myAudC = new DataGridWidget(boss, nfont, xpos + (int)(myAudF->colWidth() / 2.75), ypos, + myAudC = new DataGridWidget(boss, nfont, xpos + int(myAudF->colWidth() / 2.75), ypos, 2, 1, 1, 4, Common::Base::F_16_1); myAudC->setTarget(this); myAudC->setID(kAUDCID); @@ -74,7 +74,7 @@ AudioWidget::AudioWidget(GuiObject* boss, const GUI::Font& lfont, new StaticTextWidget(boss, lfont, xpos, ypos+2, lwidth, fontHeight, "AUDV", kTextAlignLeft); xpos += lwidth; - myAudV = new DataGridWidget(boss, nfont, xpos + (int)(myAudF->colWidth() / 2.75), ypos, + myAudV = new DataGridWidget(boss, nfont, xpos + int(myAudF->colWidth() / 2.75), ypos, 2, 1, 1, 4, Common::Base::F_16_1); myAudV->setTarget(this); myAudV->setID(kAUDVID); diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index c5da76987..098cebbb6 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -608,7 +608,7 @@ void DeveloperDialog::loadConfig() loadSettings(SettingsSet::player); loadSettings(SettingsSet::developer); // ...and select the current one - setWidgetStates((SettingsSet)mySettingsGroup0->getSelected()); + setWidgetStates(SettingsSet(mySettingsGroup0->getSelected())); // Debug colours handleDebugColours(instance().settings().getString("tia.dbgcolors")); @@ -644,7 +644,7 @@ void DeveloperDialog::saveConfig() { instance().settings().setValue("dev.settings", mySettingsGroup0->getSelected() == SettingsSet::developer); // copy current widget status into set... - getWidgetStates((SettingsSet)mySettingsGroup0->getSelected()); + getWidgetStates(SettingsSet(mySettingsGroup0->getSelected())); // ...and save both sets saveSettings(SettingsSet::player); saveSettings(SettingsSet::developer); @@ -728,7 +728,7 @@ void DeveloperDialog::saveConfig() void DeveloperDialog::setDefaults() { bool devSettings = mySettingsGroup0->getSelected() == 1; - SettingsSet set = (SettingsSet)mySettingsGroup0->getSelected(); + SettingsSet set = SettingsSet(mySettingsGroup0->getSelected()); switch(myTab->getActiveTab()) { @@ -1195,14 +1195,14 @@ void DeveloperDialog::handleFontSize() minH = std::min(instance().frameBuffer().desktopSize().h, minH); myDebuggerWidthSlider->setMinValue(minW); - if(minW > myDebuggerWidthSlider->getValue()) + if(minW > uInt32(myDebuggerWidthSlider->getValue())) { myDebuggerWidthSlider->setValue(minW); myDebuggerWidthLabel->setValue(minW); } myDebuggerHeightSlider->setMinValue(minH); - if(minH > myDebuggerHeightSlider->getValue()) + if(minH > uInt32(myDebuggerHeightSlider->getValue())) { myDebuggerHeightSlider->setValue(minH); myDebuggerHeightLabel->setValue(minH); diff --git a/src/gui/DeveloperDialog.hxx b/src/gui/DeveloperDialog.hxx index 500f3101a..fa5461f57 100644 --- a/src/gui/DeveloperDialog.hxx +++ b/src/gui/DeveloperDialog.hxx @@ -96,7 +96,7 @@ class DeveloperDialog : public Dialog const string HORIZONS[NUM_HORIZONS] = { "~1 frame", "~10 frames", "~1 second", "~10 seconds", "~1 minute", "~10 minutes", "~60 minutes" }; const uInt64 HORIZON_CYCLES[NUM_HORIZONS] = { 76 * 262, 76 * 262 * 10, 76 * 262 * 60, 76 * 262 * 60 * 10, - 76 * 262 * 60 * 60, 76 * 262 * 60 * 60 * 10, (uInt64)76 * 262 * 60 * 60 * 60 }; + 76 * 262 * 60 * 60, 76 * 262 * 60 * 60 * 10, uInt64(76) * 262 * 60 * 60 * 60 }; static const int DEBUG_COLORS = 6; diff --git a/src/gui/RadioButtonWidget.cxx b/src/gui/RadioButtonWidget.cxx index 1e8000b41..0e9e58a26 100644 --- a/src/gui/RadioButtonWidget.cxx +++ b/src/gui/RadioButtonWidget.cxx @@ -201,7 +201,7 @@ void RadioButtonGroup::setSelected(uInt32 selected) mySelected = selected; for(const auto& w : myWidgets) { - ((RadioButtonWidget*)w)->setState(i == mySelected); + (static_cast(w))->setState(i == mySelected); i++; } } diff --git a/src/gui/RadioButtonWidget.hxx b/src/gui/RadioButtonWidget.hxx index e33b6d0e0..44cefad06 100644 --- a/src/gui/RadioButtonWidget.hxx +++ b/src/gui/RadioButtonWidget.hxx @@ -56,14 +56,14 @@ class RadioButtonWidget : public CheckboxWidget class RadioButtonGroup { public: - RadioButtonGroup() {}; + RadioButtonGroup() = default; // add widget to group void addWidget(RadioButtonWidget* widget); // tell the group which widget was selected void select(RadioButtonWidget* widget); void setSelected(uInt32 selected); - uInt32 getSelected() { return mySelected; }; + uInt32 getSelected() { return mySelected; } private: WidgetArray myWidgets; From 8e7e42ae0b962738e3f0ea8b31f1ad10524e0387 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Fri, 8 Dec 2017 14:28:09 +0100 Subject: [PATCH 041/156] spelling fixes for 2600-daptor --- docs/index.html | 66 +++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/docs/index.html b/docs/index.html index bea0d750c..b658cc64f 100644 --- a/docs/index.html +++ b/docs/index.html @@ -36,8 +36,12 @@

        @@ -465,7 +469,7 @@ microprocessor to access the program stored on the cartridge.

        In a similar way you must "plug" a copy of a cartridge into Stella when you - want to play it. Having a ROM image / BIN file, of the cartridge allows you to + want to play it. Having a ROM image/BIN file of the cartridge allows you to do this. A ROM image is a file, which contains the actual data and code read from the cartridge. There are several ways to obtain a ROM image of a cartridge:

        @@ -733,7 +737,7 @@
        -

        Joystick / BoosterGrip Controller (can be remapped)

        +

        Joystick/BoosterGrip Controller (can be remapped)

        @@ -1363,7 +1367,7 @@ - + @@ -1465,7 +1469,7 @@
        Toggle frame stats (scanline count/FPS/bs type/etc.)Toggle frame stats (scanline count/FPS/BS type etc.) Alt + L Cmd + L
        -

        Other Keys (cannot be remapped, except those marked with '*')

        +

        Other Keys (cannot be remapped, except those marked with (*) )

        @@ -1505,13 +1509,13 @@ - + - + @@ -1652,7 +1656,7 @@

        Some Atari (virtual) controllers are simulated with more than one computer controller, and there are several special cases where controllers are active in certain modes only, as the table below shows. Items marked as (+ extra) indicate that the computer controller may not have - enough buttons/axes/etc. to fully emulate the device, so extra functionality must be mapped to other + enough buttons/axes etc. to fully emulate the device, so extra functionality must be mapped to other controllers.

        Switch display format in increasing order (NTSC/PAL/SECAM/etc.)Switch display format in increasing order (NTSC/PAL/SECAM etc.) Control + f Control + f
        Switch display format in decreasing order (NTSC/PAL/SECAM/etc.)Switch display format in decreasing order (NTSC/PAL/SECAM etc.) Shift-Control + f Shift-Control + f
        @@ -1717,7 +1721,7 @@ - + @@ -2176,7 +2180,7 @@ - @@ -2689,7 +2693,7 @@
        Trakball/mouse Trakball/Mouse
        -romviewer <0|1|2>
        Hide ROM info viewer in ROM launcher mode (0), or use the + Hide ROM Info Viewer in ROM launcher mode (0), or use the given zoom level (1 or 2).
        -

        Event Remapping / Input Devices

        +

        Event Remapping/Input Devices

        Almost every event in Stella can be remapped to another key on the keyboard or @@ -2707,7 +2711,7 @@

        To remap an event:

          -
        1. Enter Options menu and click the Input Settings button.
        2. +
        3. Enter Options Menu and click the Input Settings button.
        4. If you wish to remap emulation events, click the 'Emul. Events' tab. Otherwise, click the 'UI Events' tab for user interface events.
        5. Select event you want to remap and click the 'Map' button.
        6. @@ -2724,7 +2728,7 @@ -

          There is also a 'Combo' button in the 'Emulation Events' tab, accessible +

          There is also a 'Combo' button in the 'Emul. Events' tab, accessible when a Combo event has been selected from the list of events on the left. Clicking 'Combo' will show a dialog similar to the following:

          @@ -2766,12 +2770,14 @@

          Several options are configurable in the ROM launcher. The size of the - launcher and fonts, as well as the 'ROM info viewer' can be changed in - UI Settings => Launcher dialog, as shown below:

          + launcher and fonts, as well as the 'ROM Info Viewer' can be changed in + UI Settings - Launcher dialog, as shown below:

          Most of the options are self-explanatory, except for the 'ROM Info viewer', which is described below.

          +

          ROM Info Viewer

          +

          Stella supports viewing snapshots and ROM properties of the currently selected ROM in the ROM launcher. Support is automatic, as long as your snapshot directory contains snapshots in the appropriate format. An @@ -2782,7 +2788,7 @@

          Currently, there are several restrictions for this feature:

            -
          1. The ROM info viewer can be shown in 1x or 2x mode only.
          2. +
          3. The ROM Info Viewer can be shown in 1x or 2x mode only.
          4. To view snapshots in 1x mode, the ROM launcher window must be sized at least 640x480. If the launcher isn't large enough, the functionality will be disabled.
          5. @@ -2794,13 +2800,13 @@

            The following snapshots illustrate the various font sizes and rom info zoom levels:

            -

            ROM info viewer in 1x mode, UI sized 800x480, small launcher font:

            +

            ROM Info Viewer in 1x mode, UI sized 800x480, small launcher font:

            -

            ROM info viewer in 1x mode, UI sized 1000x760, medium launcher font:

            +

            ROM Info Viewer in 1x mode, UI sized 1000x760, medium launcher font:

            -

            ROM info viewer in 2x mode, UI sized 1400x900, large launcher font:

            +

            ROM Info Viewer in 2x mode, UI sized 1400x900, large launcher font:

            The text box in the upper right corner can be used to narrow down the @@ -2813,6 +2819,8 @@ case sensitive, so you don't need to worry about capital or lower-case letters.

            +

            ROM Lauchner Context Menu

            +

            The ROM launcher also contains a context menu, selected by clicking the right mouse button anywhere in the current window. This context menu contains the following items:

            @@ -2908,7 +2916,7 @@

            Stella supports real Atari 2600 joysticks, paddles and driving controllers using the Stelladaptor and - 2600-adaptor devices.

            + 2600-daptor devices.

            Stella can use up to two adaptors; any extra ones are ignored. Stelladaptor devices will be automatically detected and configured. The @@ -3001,7 +3009,7 @@

            Developer Options/Integrated Debugger

            -

            Several developer related settings can be configured in the 'Developer Settings' dialog. +

            Several developer related options can be configured in the 'Developer Settings' dialog. Two sets ('Player settings', 'Developer settings') allow easy adjustment of all settings for different use cases (playing or developing games) at once.

            @@ -3433,7 +3441,7 @@ Ms Pac-Man (Stella extended codes):
        Cartridge.Name: Indicates the actual name of the game. When you save snapshots, - load/save state files, or use the 'ROM Audit' functionality, + load/save state files, or use the ROM Audit Mode functionality, this is the name that will be used for the respective file(s).
        Indicates if the game should use 1 or 2 channels for sound output. All original Atari 2600 machines supported 1 channel only, but some homebrew games have been written to take advantage of stereo - sound. The value must be Mono or Stereo.
        Cartridge.Type: Indicates the bank-switching type for the game. The value of this property must be either Auto or one of the following - (for more information about bank-switching see Kevin Horton's 2600 bankswitching - document or the documentation in each cartridges source code file). Types marked + (for more information about bank-switching see Kevin Horton's 2600 bankswitching + document or the documentation in each cartridges source code file). Types marked as (¹) do not currently have reliable auto-detection, those marked as (²) are not fully supported in the debugger: @@ -3558,7 +3566,7 @@ Ms Pac-Man (Stella extended codes): - + From 4dfc3ed9ad3172b9c7a30066bcdab2ac21222610 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Fri, 8 Dec 2017 15:08:07 +0100 Subject: [PATCH 042/156] fixed the fix --- docs/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.html b/docs/index.html index b658cc64f..743291a22 100644 --- a/docs/index.html +++ b/docs/index.html @@ -274,7 +274,7 @@
      • Emulates the Mindlink Controller using your computer's mouse
      • Support for real Atari 2600 controllers using the Stelladaptor and - 2600-daptor/2600-aptor II
      • + 2600-daptor/2600-daptor II
      • Support for the speech portion of a real AtariVox device connected to your PC using a USB adaptor
      • From cc64ce59a1472b10a731aa29e6a07e0fff5523bf Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Fri, 8 Dec 2017 14:46:06 -0330 Subject: [PATCH 043/156] Some more work on RewindManager: - iterator now starts and last node and moves towards first (removes one 'ugly' bit of code) - temporarily decreased size of buffer to 10 states, to make testing easier - added debug output, so we can clearly see that the iterator is correctly walking the buffer --- src/common/LinkedObjectPool.hxx | 13 ++++++------- src/common/RewindManager.cxx | 14 ++++---------- src/common/RewindManager.hxx | 7 ++++++- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/src/common/LinkedObjectPool.hxx b/src/common/LinkedObjectPool.hxx index 01ce503b3..17f320fcf 100644 --- a/src/common/LinkedObjectPool.hxx +++ b/src/common/LinkedObjectPool.hxx @@ -97,17 +97,15 @@ class LinkedObjectPool myCurrent = std::next(myCurrent, 1); } -#if 0 /** - Return a reference to the element at the first node in the active list. + Return an iterator to the first node in the active list. */ - T& first() { return myList.front(); } + iter first() { return myList.begin(); } /** - Return a reference to the element at the last node in the active list. + Return an iterator to the last node in the active list. */ - T& last() { return myList.back(); } -#endif + iter last() { return std::prev(myList.end(), 1); } /** Add a new node at the beginning of the active list, and update 'current' @@ -193,12 +191,13 @@ class LinkedObjectPool myCurrent = myList.end(); } +#if 0 /** Access the list with iterators, just as you would a normal C++ STL list */ iter begin() { return myList.begin(); } iter end() { return myList.end(); } const_iter begin() const { return myList.cbegin(); } const_iter end() const { return myList.cend(); } - +#endif uInt32 capacity() const { return CAPACITY; } uInt32 size() const { return myList.size(); } diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index 42c0ad6b8..6527aff04 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -128,16 +128,10 @@ void RewindManager::compressStates() double maxDelta = 0; uInt32 removeIdx = 0; - uInt32 idx = 0; - for(auto it = myStateList.begin(); it != myStateList.end(); ++it) + uInt32 idx = myStateList.size() - 1; + for(auto it = myStateList.last(); it != myStateList.first(); --it) { - // test and never remove the very first saved state - if(++it == myStateList.end()) - { - break; - } - --it; // UGLY! - +cerr << *it << endl << endl; // debug code if(idx >= STEP_STATES) { expectedCycles *= DENSITY; @@ -154,7 +148,7 @@ void RewindManager::compressStates() } } lastCycle = it->cycle; - idx++; + --idx; } if (maxDelta < 1) { diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index 42d7d1cda..295fe6799 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -77,7 +77,7 @@ class RewindManager private: // Maximum number of states to save - static constexpr uInt32 MAX_SIZE = 100; // TODO: use a parameter here and allow user to define size in UI + static constexpr uInt32 MAX_SIZE = 10; // TODO: use a parameter here and allow user to define size in UI OSystem& myOSystem; StateManager& myStateManager; @@ -92,6 +92,11 @@ class RewindManager // The goal of LinkedObjectPool is to not do any allocations at all RewindState() { } RewindState(const RewindState&) { } + + // Output object info; used for debugging only + friend ostream& operator<<(ostream& os, const RewindState& s) { + return os << "msg: " << s.message << " cycle: " << s.cycle << " count: " << s.count; + } }; // The linked-list to store states (internally it takes care of reducing From a43e7f9d58abd1b3c9cba7c000542c7b3796f52d Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sat, 9 Dec 2017 10:41:38 +0100 Subject: [PATCH 044/156] improved states interval factor calculation a little code cleanup --- src/gui/DeveloperDialog.cxx | 45 ++++++++++++++----------------------- src/gui/DeveloperDialog.hxx | 1 + 2 files changed, 18 insertions(+), 28 deletions(-) diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index 098cebbb6..5b9885f48 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -680,8 +680,10 @@ void DeveloperDialog::saveConfig() // define interval growth factor uInt32 size = myStateSizeWidget->getValue(); uInt32 uncompressed = myUncompressedWidget->getValue(); + + const double MAX_FACTOR = 1E8; uInt64 horizon = HORIZON_CYCLES[myStateHorizonWidget->getValue()]; - double factor, minFactor = 1, maxFactor = 2; + double factor, minFactor = 1, maxFactor = MAX_FACTOR; while(true) { @@ -689,15 +691,18 @@ void DeveloperDialog::saveConfig() double cycleSum = interval * uncompressed; // calculate next factor factor = (minFactor + maxFactor) / 2; + // horizon not reachable? + if(factor == MAX_FACTOR) + break; // sum up interval cycles for(uInt32 i = uncompressed; i < size; ++i) { - cycleSum += interval; interval *= factor; + cycleSum += interval; } double diff = cycleSum - horizon; -//cerr << "factor " << factor << ", diff " << diff << endl; - // exit loop if result is close enough + //cerr << "factor " << factor << ", diff " << diff << endl; + // exit loop if result is close enough if(std::abs(diff) < horizon * 1E-5) break; // define new boundary @@ -960,11 +965,11 @@ void DeveloperDialog::handleRewind() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DeveloperDialog::handleSize() { - bool found = false; uInt32 size = myStateSizeWidget->getValue(); uInt32 uncompressed = myUncompressedWidget->getValue(); uInt32 interval = myStateIntervalWidget->getValue(); uInt32 horizon = myStateHorizonWidget->getValue(); + bool found = false; Int32 i; myStateSizeLabelWidget->setValue(size); @@ -984,15 +989,9 @@ void DeveloperDialog::handleSize() } while(!found); if(size < uncompressed) - { myUncompressedWidget->setValue(size); - myUncompressedLabelWidget->setValue(myStateSizeWidget->getValue()); - } - - myStateHorizonWidget->setValue(i); - myStateHorizonLabelWidget->setLabel(HORIZONS[i]); myStateIntervalWidget->setValue(interval); - myStateIntervalLabelWidget->setLabel(INTERVALS[interval]); + myStateHorizonWidget->setValue(i); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1002,21 +1001,19 @@ void DeveloperDialog::handleUncompressed() uInt32 uncompressed = myUncompressedWidget->getValue(); myUncompressedLabelWidget->setValue(myUncompressedWidget->getValue()); - if(uncompressed > size) - { + + if(size < uncompressed) myStateSizeWidget->setValue(uncompressed); - myStateSizeLabelWidget->setValue(myUncompressedWidget->getValue()); - } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DeveloperDialog::handleInterval() { - bool found = false; uInt32 size = myStateSizeWidget->getValue(); uInt32 uncompressed = myUncompressedWidget->getValue(); uInt32 interval = myStateIntervalWidget->getValue(); uInt32 horizon = myStateHorizonWidget->getValue(); + bool found = false; Int32 i; myStateIntervalLabelWidget->setLabel(INTERVALS[interval]); @@ -1035,26 +1032,20 @@ void DeveloperDialog::handleInterval() size -= myStateSizeWidget->getStepValue(); } while(!found); - myStateHorizonWidget->setValue(i); - myStateHorizonLabelWidget->setLabel(HORIZONS[i]); myStateSizeWidget->setValue(size); - myStateSizeLabelWidget->setValue(myStateSizeWidget->getValue()); - if(size < uncompressed) - { myUncompressedWidget->setValue(size); - myUncompressedLabelWidget->setValue(myStateSizeWidget->getValue()); - } + myStateHorizonWidget->setValue(i); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DeveloperDialog::handleHorizon() { - bool found = false; uInt32 size = myStateSizeWidget->getValue(); uInt32 uncompressed = myUncompressedWidget->getValue(); uInt32 interval = myStateIntervalWidget->getValue(); uInt32 horizon = myStateHorizonWidget->getValue(); + bool found = false; Int32 i; myStateHorizonLabelWidget->setLabel(HORIZONS[horizon]); @@ -1073,12 +1064,10 @@ void DeveloperDialog::handleHorizon() size -= myStateSizeWidget->getStepValue(); } while(!found); - myStateIntervalWidget->setValue(i); - myStateIntervalLabelWidget->setLabel(INTERVALS[i]); myStateSizeWidget->setValue(size); if(size < uncompressed) myUncompressedWidget->setValue(size); - myStateSizeLabelWidget->setValue(myStateSizeWidget->getValue()); + myStateIntervalWidget->setValue(i); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/DeveloperDialog.hxx b/src/gui/DeveloperDialog.hxx index fa5461f57..c34ed3d85 100644 --- a/src/gui/DeveloperDialog.hxx +++ b/src/gui/DeveloperDialog.hxx @@ -191,6 +191,7 @@ class DeveloperDialog : public Dialog void handleUncompressed(); void handleInterval(); void handleHorizon(); + void handleFontSize(); // Following constructors and assignment operators not supported From c57253c9e6ec0719e9ecb7c11034e6d54a58e5e9 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sat, 9 Dec 2017 12:08:31 +0100 Subject: [PATCH 045/156] aligned team to Stella website --- src/gui/AboutDialog.cxx | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/gui/AboutDialog.cxx b/src/gui/AboutDialog.cxx index 0ad553f3f..efbbaebf5 100644 --- a/src/gui/AboutDialog.cxx +++ b/src/gui/AboutDialog.cxx @@ -28,7 +28,7 @@ AboutDialog::AboutDialog(OSystem& osystem, DialogContainer& parent, : Dialog(osystem, parent), myPage(1), myNumPages(4), - myLinesPerPage(12) + myLinesPerPage(13) { const int lineHeight = font.getLineHeight(), fontWidth = font.getMaxCharWidth(), @@ -40,7 +40,7 @@ AboutDialog::AboutDialog(OSystem& osystem, DialogContainer& parent, // Set real dimensions _w = 55 * fontWidth + 8; - _h = 14 * lineHeight + 20; + _h = 15 * lineHeight + 20; // Add Previous, Next and Close buttons xpos = 10; ypos = _h - buttonHeight - 10; @@ -110,44 +110,47 @@ void AboutDialog::updateStrings(int page, int lines, string& title) ADD_ATEXT("\\CStella is now DonationWare!"); ADD_ATEXT("\\C(https://stella-emu.github.io/donations.html)"); ADD_ALINE(); - ADD_ATEXT("\\CStella is free software released under the GNU GPL"); - ADD_ATEXT("\\CSee manual for further details"); + ADD_ATEXT("\\CStella is free software released under the GNU GPL."); + ADD_ATEXT("\\CSee manual for further details."); break; case 2: title = "The Stella Team"; - ADD_ATEXT("\\L\\c0"" Bradford W. Mott"); - ADD_ATEXT("\\L\\c2"" Original author"); ADD_ATEXT("\\L\\c0"" Stephen Anthony"); - ADD_ATEXT("\\L\\c2"" Lead developer, Linux/MacOS X/Windows maintainer"); + ADD_ATEXT("\\L\\c2"" Lead developer, current maintainer for the"); + ADD_ATEXT("\\L\\c2"" Linux/OSX and Windows ports "); + ADD_ATEXT("\\L\\c0"" Christian Speckner"); + ADD_ATEXT("\\L\\c2"" Emulation core development, TIA core"); ADD_ATEXT("\\L\\c0"" Eckhard Stolberg"); ADD_ATEXT("\\L\\c2"" Emulation core development"); + ADD_ATEXT("\\L\\c0"" Thomas Jentzsch"); + ADD_ATEXT("\\L\\c2"" Emulation core development, jack-of-all-trades"); ADD_ATEXT("\\L\\c0"" Brian Watson"); ADD_ATEXT("\\L\\c2"" Emulation core enhancement, debugger support"); - ADD_ATEXT("\\L\\c0"" Christian Speckner"); - ADD_ATEXT("\\L\\c2"" TIA emulation development"); + ADD_ATEXT("\\L\\c0"" Bradford W. Mott"); + ADD_ATEXT("\\L\\c2"" Original author of Stella"); break; case 3: title = "Contributors"; ADD_ATEXT("\\L\\c0"" See https://stella-emu.github.io/credits.html for"); - ADD_ATEXT("\\L\\c0"" people that have contributed to Stella"); + ADD_ATEXT("\\L\\c0"" people that have contributed to Stella."); ADD_ALINE(); - ADD_ATEXT("\\L\\c0"" Thanks to the ScummVM project for the GUI code"); + ADD_ATEXT("\\L\\c0"" Thanks to the ScummVM project for the GUI code."); ADD_ALINE(); ADD_ATEXT("\\L\\c0"" Thanks to Ian Bogost and the Georgia Tech"); - ADD_ATEXT("\\L\\c0"" Atari Team for the CRT Simulation effects"); + ADD_ATEXT("\\L\\c0"" Atari Team for the CRT Simulation effects."); break; case 4: title = "Cast of thousands"; ADD_ATEXT("\\L\\c0""Special thanks to AtariAge for introducing the"); - ADD_ATEXT("\\L\\c0""Atari 2600 to a whole new generation"); + ADD_ATEXT("\\L\\c0""Atari 2600 to a whole new generation."); ADD_ATEXT("\\L\\c2"" http://www.atariage.com"); ADD_ALINE(); ADD_ATEXT("\\L\\c0""Finally, a huge thanks to the original Atari 2600"); ADD_ATEXT("\\L\\c0""VCS team for giving us the magic, and to the"); - ADD_ATEXT("\\L\\c0""homebrew developers for keeping the magic alive"); + ADD_ATEXT("\\L\\c0""homebrew developers for keeping the magic alive."); break; } From bff2c7a5e7f54f4842cc57ff7d53dffa66fe6a21 Mon Sep 17 00:00:00 2001 From: Christian Speckner Date: Sat, 9 Dec 2017 20:25:18 +0100 Subject: [PATCH 046/156] Fix a bunch of warnings in XCode / clang. --- src/common/LinkedObjectPool.hxx | 2 +- src/common/RewindManager.cxx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/common/LinkedObjectPool.hxx b/src/common/LinkedObjectPool.hxx index 17f320fcf..8d358f84a 100644 --- a/src/common/LinkedObjectPool.hxx +++ b/src/common/LinkedObjectPool.hxx @@ -200,7 +200,7 @@ class LinkedObjectPool #endif uInt32 capacity() const { return CAPACITY; } - uInt32 size() const { return myList.size(); } + size_t size() const { return myList.size(); } bool empty() const { return myList.size() == 0; } bool full() const { return myList.size() >= CAPACITY; } diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index 6527aff04..4193ff375 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -126,9 +126,9 @@ void RewindManager::compressStates() uInt64 lastCycle = currentCycle; double expectedCycles = 76 * 262.0; // == cycles of 1 frame, TODO: use actual number of scanlines double maxDelta = 0; - uInt32 removeIdx = 0; + size_t removeIdx = 0; - uInt32 idx = myStateList.size() - 1; + size_t idx = myStateList.size() - 1; for(auto it = myStateList.last(); it != myStateList.first(); --it) { cerr << *it << endl << endl; // debug code From c6f13ed7432b8f9f75f8ea9386bd6cb0aefa09fb Mon Sep 17 00:00:00 2001 From: Christian Speckner Date: Sat, 9 Dec 2017 20:44:27 +0100 Subject: [PATCH 047/156] Trade potentially illegal use of size_t against container::size_type. --- src/common/LinkedObjectPool.hxx | 3 ++- src/common/RewindManager.cxx | 4 ++-- src/common/RewindManager.hxx | 2 ++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/common/LinkedObjectPool.hxx b/src/common/LinkedObjectPool.hxx index 8d358f84a..f10bd22e9 100644 --- a/src/common/LinkedObjectPool.hxx +++ b/src/common/LinkedObjectPool.hxx @@ -55,6 +55,7 @@ class LinkedObjectPool public: using iter = typename std::list::iterator; using const_iter = typename std::list::const_iterator; + using size_type = typename std::list::size_type; /* Create a pool of size CAPACITY; the active list starts out empty. @@ -200,7 +201,7 @@ class LinkedObjectPool #endif uInt32 capacity() const { return CAPACITY; } - size_t size() const { return myList.size(); } + size_type size() const { return myList.size(); } bool empty() const { return myList.size() == 0; } bool full() const { return myList.size() >= CAPACITY; } diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index 4193ff375..1b2841a83 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -126,9 +126,9 @@ void RewindManager::compressStates() uInt64 lastCycle = currentCycle; double expectedCycles = 76 * 262.0; // == cycles of 1 frame, TODO: use actual number of scanlines double maxDelta = 0; - size_t removeIdx = 0; + size_type removeIdx = 0; - size_t idx = myStateList.size() - 1; + size_type idx = myStateList.size() - 1; for(auto it = myStateList.last(); it != myStateList.first(); --it) { cerr << *it << endl << endl; // debug code diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index 295fe6799..17740d159 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -99,6 +99,8 @@ class RewindManager } }; + using size_type = Common::LinkedObjectPool::size_type; + // The linked-list to store states (internally it takes care of reducing // frequent (de)-allocations) Common::LinkedObjectPool myStateList; From 6500ab0613c9d00d3cdf219399362890ea7e3199 Mon Sep 17 00:00:00 2001 From: Christian Speckner Date: Sun, 10 Dec 2017 00:22:18 +0100 Subject: [PATCH 048/156] Compile thumbulator unconditionally. --- configure | 17 ----------------- src/emucore/CartBUS.cxx | 12 ++++-------- src/emucore/CartBUS.hxx | 6 +----- src/emucore/CartCDF.cxx | 7 +------ src/emucore/CartCDF.hxx | 6 +----- src/emucore/CartDPCPlus.cxx | 7 +------ src/emucore/CartDPCPlus.hxx | 7 ++----- src/emucore/Settings.cxx | 9 +-------- src/emucore/Thumbulator.cxx | 4 ---- src/emucore/Thumbulator.hxx | 4 ---- src/gui/DeveloperDialog.cxx | 2 -- 11 files changed, 11 insertions(+), 70 deletions(-) diff --git a/configure b/configure index 169657f2b..a1ecfb1ae 100755 --- a/configure +++ b/configure @@ -22,7 +22,6 @@ _build_sound=yes _build_debugger=yes _build_joystick=yes _build_cheats=yes -_build_thumb=yes _build_static=no _build_profile=no @@ -198,8 +197,6 @@ Optional Features: --disable-joystick --enable-cheats enable/disable cheatcode support [enabled] --disable-cheats - --enable-thumb enable/disable Thumb ARM support [enabled] - --disable-thumb --enable-windowed enable/disable windowed rendering modes [enabled] --disable-windowed --enable-shared build shared binary [enabled] @@ -239,8 +236,6 @@ for ac_option in $@; do --disable-cheats) _build_cheats=no ;; --enable-windowed) _build_windowed=yes ;; --disable-windowed) _build_windowed=no ;; - --enable-thumb) _build_thumb=yes ;; - --disable-thumb) _build_thumb=no ;; --enable-shared) _build_static=no ;; --enable-static) _build_static=yes ;; --disable-static) _build_static=no ;; @@ -660,14 +655,6 @@ else echo fi -if test "$_build_thumb" = yes ; then - echo_n " Thumb ARM emulation support enabled" - echo -else - echo_n " Thumb ARM emulation support disabled" - echo -fi - if test "$_build_static" = yes ; then echo_n " Static binary enabled" echo @@ -779,10 +766,6 @@ if test "$_build_cheats" = yes ; then INCLUDES="$INCLUDES -I$CHEAT" fi -if test "$_build_thumb" = yes ; then - DEFINES="$DEFINES -DTHUMB_SUPPORT" -fi - if test "$_build_profile" = no ; then _build_profile= fi diff --git a/src/emucore/CartBUS.cxx b/src/emucore/CartBUS.cxx index 1facde3de..355be4da4 100644 --- a/src/emucore/CartBUS.cxx +++ b/src/emucore/CartBUS.cxx @@ -63,12 +63,12 @@ CartridgeBUS::CartridgeBUS(const BytePtr& image, uInt32 size, // Pointer to the display RAM myDisplayImage = myBUSRAM + DSRAM; -#ifdef THUMB_SUPPORT // Create Thumbulator ARM emulator myThumbEmulator = make_unique( reinterpret_cast(myImage), reinterpret_cast(myBUSRAM), - settings.getBool("thumb.trapfatal"), Thumbulator::ConfigureFor::BUS, this); -#endif + settings.getBool("thumb.trapfatal"), Thumbulator::ConfigureFor::BUS, this + ); + setInitialState(); } @@ -107,9 +107,7 @@ void CartridgeBUS::setInitialState() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeBUS::consoleChanged(ConsoleTiming timing) { -#ifdef THUMB_SUPPORT myThumbEmulator->setConsoleTiming(timing); -#endif } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -154,8 +152,7 @@ inline void CartridgeBUS::callFunction(uInt8 value) { switch (value) { - #ifdef THUMB_SUPPORT - // Call user written ARM code (will most likely be C compiled for ARM) + // Call user written ARM code (will most likely be C compiled for ARM) case 254: // call with IRQ driven audio, no special handling needed at this // time for Stella as ARM code "runs in zero 6507 cycles". case 255: // call without IRQ driven audio @@ -176,7 +173,6 @@ inline void CartridgeBUS::callFunction(uInt8 value) } } break; - #endif } } diff --git a/src/emucore/CartBUS.hxx b/src/emucore/CartBUS.hxx index cfe9503c3..b20289534 100644 --- a/src/emucore/CartBUS.hxx +++ b/src/emucore/CartBUS.hxx @@ -19,9 +19,7 @@ #define CARTRIDGE_BUS_HXX class System; -#ifdef THUMB_SUPPORT - class Thumbulator; -#endif +class Thumbulator; #ifdef DEBUGGER_SUPPORT #include "CartBUSWidget.hxx" #endif @@ -226,10 +224,8 @@ class CartridgeBUS : public Cartridge // $1800 - 2K C Variable & Stack uInt8 myBUSRAM[8192]; -#ifdef THUMB_SUPPORT // Pointer to the Thumb ARM emulator object unique_ptr myThumbEmulator; -#endif // Indicates the offset into the ROM image (aligns to current bank) uInt16 myBankOffset; diff --git a/src/emucore/CartCDF.cxx b/src/emucore/CartCDF.cxx index 308448c9a..611cba081 100644 --- a/src/emucore/CartCDF.cxx +++ b/src/emucore/CartCDF.cxx @@ -66,13 +66,12 @@ CartridgeCDF::CartridgeCDF(const BytePtr& image, uInt32 size, setVersion(); -#ifdef THUMB_SUPPORT // Create Thumbulator ARM emulator myThumbEmulator = make_unique( reinterpret_cast(myImage), reinterpret_cast(myCDFRAM), settings.getBool("thumb.trapfatal"), myVersion ? Thumbulator::ConfigureFor::CDF1 : Thumbulator::ConfigureFor::CDF, this); -#endif + setInitialState(); } @@ -112,9 +111,7 @@ void CartridgeCDF::setInitialState() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeCDF::consoleChanged(ConsoleTiming timing) { -#ifdef THUMB_SUPPORT myThumbEmulator->setConsoleTiming(timing); -#endif } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -154,7 +151,6 @@ inline void CartridgeCDF::callFunction(uInt8 value) { switch (value) { -#ifdef THUMB_SUPPORT // Call user written ARM code (will most likely be C compiled for ARM) case 254: // call with IRQ driven audio, no special handling needed at this // time for Stella as ARM code "runs in zero 6507 cycles". @@ -176,7 +172,6 @@ inline void CartridgeCDF::callFunction(uInt8 value) } } break; -#endif } } diff --git a/src/emucore/CartCDF.hxx b/src/emucore/CartCDF.hxx index 34d4e9bf9..29c25cb76 100644 --- a/src/emucore/CartCDF.hxx +++ b/src/emucore/CartCDF.hxx @@ -19,9 +19,7 @@ #define CARTRIDGE_CDF_HXX class System; -#ifdef THUMB_SUPPORT - class Thumbulator; -#endif +class Thumbulator; #ifdef DEBUGGER_SUPPORT #include "CartCDFWidget.hxx" #endif @@ -221,10 +219,8 @@ class CartridgeCDF : public Cartridge // $1800 - 2K C Variable & Stack uInt8 myCDFRAM[8192]; - #ifdef THUMB_SUPPORT // Pointer to the Thumb ARM emulator object unique_ptr myThumbEmulator; - #endif // Indicates the offset into the ROM image (aligns to current bank) uInt16 myBankOffset; diff --git a/src/emucore/CartDPCPlus.cxx b/src/emucore/CartDPCPlus.cxx index 3e6099ac1..7825916de 100644 --- a/src/emucore/CartDPCPlus.cxx +++ b/src/emucore/CartDPCPlus.cxx @@ -52,7 +52,6 @@ CartridgeDPCPlus::CartridgeDPCPlus(const BytePtr& image, uInt32 size, // Pointer to the Frequency RAM myFrequencyImage = myDisplayImage + 0x1000; -#ifdef THUMB_SUPPORT // Create Thumbulator ARM emulator myThumbEmulator = make_unique (reinterpret_cast(myImage), @@ -60,7 +59,7 @@ CartridgeDPCPlus::CartridgeDPCPlus(const BytePtr& image, uInt32 size, settings.getBool("thumb.trapfatal"), Thumbulator::ConfigureFor::DPCplus, this); -#endif + setInitialState(); // DPC+ always starts in bank 5 @@ -103,9 +102,7 @@ void CartridgeDPCPlus::setInitialState() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeDPCPlus::consoleChanged(ConsoleTiming timing) { -#ifdef THUMB_SUPPORT myThumbEmulator->setConsoleTiming(timing); -#endif } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -177,7 +174,6 @@ inline void CartridgeDPCPlus::callFunction(uInt8 value) myDisplayImage[myCounters[myParameter[2]]+i] = myParameter[0]; myParameterPointer = 0; break; - #ifdef THUMB_SUPPORT // Call user written ARM code (most likely be C compiled for ARM) case 254: // call with IRQ driven audio, no special handling needed at this // time for Stella as ARM code "runs in zero 6507 cycles". @@ -199,7 +195,6 @@ inline void CartridgeDPCPlus::callFunction(uInt8 value) } } break; - #endif // reserved } } diff --git a/src/emucore/CartDPCPlus.hxx b/src/emucore/CartDPCPlus.hxx index 37d7ad2fe..7b9a9b745 100644 --- a/src/emucore/CartDPCPlus.hxx +++ b/src/emucore/CartDPCPlus.hxx @@ -19,9 +19,8 @@ #define CARTRIDGE_DPC_PLUS_HXX class System; -#ifdef THUMB_SUPPORT - #include "Thumbulator.hxx" -#endif + +#include "Thumbulator.hxx" #ifdef DEBUGGER_SUPPORT #include "CartDPCPlusWidget.hxx" #endif @@ -212,10 +211,8 @@ class CartridgeDPCPlus : public Cartridge // 1K Frequency Data uInt8 myDPCRAM[8192]; -#ifdef THUMB_SUPPORT // Pointer to the Thumb ARM emulator object unique_ptr myThumbEmulator; -#endif // Pointer to the 1K frequency table uInt8* myFrequencyImage; diff --git a/src/emucore/Settings.cxx b/src/emucore/Settings.cxx index 1bc5292ad..ccbd12463 100644 --- a/src/emucore/Settings.cxx +++ b/src/emucore/Settings.cxx @@ -160,10 +160,8 @@ Settings::Settings(OSystem& osystem) setInternal("plr.rewind.uncompressed", 30); setInternal("plr.rewind.interval", 4); // = 1 second setInternal("plr.rewind.horizon", 5); // = ~10 minutes -#ifdef THUMB_SUPPORT // Thumb ARM emulation options setInternal("plr.thumb.trapfatal", "false"); -#endif // developer settings setInternal("dev.settings", "false"); @@ -182,10 +180,8 @@ Settings::Settings(OSystem& osystem) setInternal("dev.rewind.uncompressed", 60); setInternal("dev.rewind.interval", 2); // = 1 frame setInternal("dev.rewind.horizon", 3); // = ~10 seconds -#ifdef THUMB_SUPPORT // Thumb ARM emulation options setInternal("dev.thumb.trapfatal", "true"); -#endif } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -585,10 +581,7 @@ void Settings::usage() const << " -dev.tv.jitter <1|0> Enable TV jitter effect\n" << " -dev.tv.jitter_recovery <1-20> Set recovery time for TV jitter effect\n" << " -dev.tiadriven <1|0> Drive unused TIA pins randomly on a read/peek\n" - - #ifdef THUMB_SUPPORT - << " -dev.thumb.trapfatal <1|0> Determines whether errors in ARM emulation throw an exception\n" - #endif + << " -dev.thumb.trapfatal <1|0> Determines whether errors in ARM emulation throw an exception\n" << endl << std::flush; } diff --git a/src/emucore/Thumbulator.cxx b/src/emucore/Thumbulator.cxx index 554f4368b..3a175f5c9 100644 --- a/src/emucore/Thumbulator.cxx +++ b/src/emucore/Thumbulator.cxx @@ -22,8 +22,6 @@ // Code is public domain and used with the author's consent //============================================================================ -#ifdef THUMB_SUPPORT - #include "bspf.hxx" #include "Base.hxx" #include "Cart.hxx" @@ -2361,5 +2359,3 @@ int Thumbulator::reset() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool Thumbulator::trapOnFatal = true; - -#endif diff --git a/src/emucore/Thumbulator.hxx b/src/emucore/Thumbulator.hxx index 68ca803e8..6b9c4173d 100644 --- a/src/emucore/Thumbulator.hxx +++ b/src/emucore/Thumbulator.hxx @@ -22,8 +22,6 @@ // Code is public domain and used with the author's consent //============================================================================ -#ifdef THUMB_SUPPORT - #ifndef THUMBULATOR_HXX #define THUMBULATOR_HXX @@ -162,5 +160,3 @@ class Thumbulator }; #endif // THUMBULATOR_HXX - -#endif diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index 5b9885f48..e9d1d595c 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -147,12 +147,10 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font) wid.push_back(myUndrivenPinsWidget); ypos += lineHeight + VGAP; -#ifdef THUMB_SUPPORT // Thumb ARM emulation exception myThumbExceptionWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "Fatal ARM emulation error throws exception"); wid.push_back(myThumbExceptionWidget); -#endif // Add items for tab 0 addToFocusList(wid, myTab, tabID); From 772b122b15aa3efe7848488ebd0853078e97a354 Mon Sep 17 00:00:00 2001 From: Christian Speckner Date: Sun, 10 Dec 2017 00:22:50 +0100 Subject: [PATCH 049/156] Remove -DTHUMB_SUPPORT from xcode project. --- src/macosx/stella.xcodeproj/project.pbxproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/macosx/stella.xcodeproj/project.pbxproj b/src/macosx/stella.xcodeproj/project.pbxproj index 4fd34027f..67989e38c 100644 --- a/src/macosx/stella.xcodeproj/project.pbxproj +++ b/src/macosx/stella.xcodeproj/project.pbxproj @@ -2820,7 +2820,6 @@ DEBUGGER_SUPPORT, JOYSTICK_SUPPORT, SOUND_SUPPORT, - THUMB_SUPPORT, WINDOWED_SUPPORT, BSPF_MAC_OSX, MAC_OSX, @@ -2873,7 +2872,6 @@ DEBUGGER_SUPPORT, JOYSTICK_SUPPORT, SOUND_SUPPORT, - THUMB_SUPPORT, WINDOWED_SUPPORT, BSPF_MAC_OSX, MAC_OSX, From cc1f641725897619fa7b3e398329a517bc609ac3 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 10 Dec 2017 15:47:51 +0100 Subject: [PATCH 050/156] removed THUMB_SUPPORT option from VS project --- src/windows/Stella.vcxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/windows/Stella.vcxproj b/src/windows/Stella.vcxproj index 5e3c4b4fc..7416e1085 100644 --- a/src/windows/Stella.vcxproj +++ b/src/windows/Stella.vcxproj @@ -111,7 +111,7 @@ /MP /std:c++latest %(AdditionalOptions) Disabled ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) false EnableFastChecks MultiThreadedDLL @@ -142,7 +142,7 @@ /MP /std:c++latest %(AdditionalOptions) Disabled ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) false EnableFastChecks MultiThreadedDLL @@ -171,7 +171,7 @@ true false ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) MultiThreadedDLL false @@ -204,7 +204,7 @@ Default true ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) MultiThreadedDLL false From 517cc82baa7c6cc4f824e2e83557694c3594c474 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Mon, 11 Dec 2017 17:29:27 -0330 Subject: [PATCH 051/156] More work to RewindManager; all the 'ugly' code has been removed. Thomas, it should be fine for you to proceed now. --- src/common/LinkedObjectPool.hxx | 33 ++++++++++++++++++++++++--------- src/common/RewindManager.cxx | 15 +++++++++------ src/common/RewindManager.hxx | 6 ++---- 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/src/common/LinkedObjectPool.hxx b/src/common/LinkedObjectPool.hxx index f10bd22e9..eeae815f1 100644 --- a/src/common/LinkedObjectPool.hxx +++ b/src/common/LinkedObjectPool.hxx @@ -55,7 +55,6 @@ class LinkedObjectPool public: using iter = typename std::list::iterator; using const_iter = typename std::list::const_iterator; - using size_type = typename std::list::size_type; /* Create a pool of size CAPACITY; the active list starts out empty. @@ -72,13 +71,13 @@ class LinkedObjectPool Make sure to call 'currentIsValid()' before accessing this method. */ - T& current() { return *myCurrent; } + T& current() const { return *myCurrent; } /** Does the 'current' iterator point to a valid node in the active list? This must be called before 'current()' is called. */ - bool currentIsValid() { return myCurrent != myList.end(); } + bool currentIsValid() const { return myCurrent != myList.end(); } /** Advance 'current' iterator to previous position in the active list. @@ -101,12 +100,28 @@ class LinkedObjectPool /** Return an iterator to the first node in the active list. */ - iter first() { return myList.begin(); } + const_iter first() const { return myList.begin(); } /** Return an iterator to the last node in the active list. */ - iter last() { return std::prev(myList.end(), 1); } + const_iter last() const { return std::prev(myList.end(), 1); } + + /** + Return an iterator to the previous node of 'i' in the active list. + */ + const_iter previous(const_iter i) const { return std::prev(i, 1); } + + /** + Return an iterator to the next node to 'current' in the active list. + */ + const_iter next(const_iter i) const { return std::next(i, 1); } + + /** + Answer whether 'current' is at the specified iterator. + */ + bool atFirst() const { return myCurrent == first(); } + bool atLast() const { return myCurrent == last(); } /** Add a new node at the beginning of the active list, and update 'current' @@ -131,7 +146,7 @@ class LinkedObjectPool happens to be the one removed. */ void removeFirst() { - const_iter i = myList.begin(); + const_iter i = myList.cbegin(); myPool.splice(myPool.end(), myList, i); if(myCurrent == i) // did we just invalidate 'current' moveToNext(); // if so, move to the next node @@ -201,9 +216,9 @@ class LinkedObjectPool #endif uInt32 capacity() const { return CAPACITY; } - size_type size() const { return myList.size(); } - bool empty() const { return myList.size() == 0; } - bool full() const { return myList.size() >= CAPACITY; } + uInt32 size() const { return uInt32(myList.size()); } + bool empty() const { return size() == 0; } + bool full() const { return size() >= CAPACITY; } private: std::list myList, myPool; diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index 1b2841a83..0275f52e8 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -119,27 +119,29 @@ void RewindManager::compressStates() //bool debugMode = myOSystem.eventHandler().state() == EventHandler::S_DEBUGGER; // TODO: let user control these: const double DENSITY = 1.15; // exponential growth of cycle intervals - const uInt32 STEP_STATES = 60; // single step rewind length + const uInt32 STEP_STATES = 6; // single step rewind length (change back to '60') //const uInt32 SECONDS_STATES = 10; // TODO: one second rewind length uInt64 currentCycle = myOSystem.console().tia().cycles(); uInt64 lastCycle = currentCycle; double expectedCycles = 76 * 262.0; // == cycles of 1 frame, TODO: use actual number of scanlines double maxDelta = 0; - size_type removeIdx = 0; + uInt32 removeIdx = 0; - size_type idx = myStateList.size() - 1; + uInt32 idx = myStateList.size() - 1; +cerr << "idx: " << idx << endl; for(auto it = myStateList.last(); it != myStateList.first(); --it) { -cerr << *it << endl << endl; // debug code if(idx >= STEP_STATES) { +cerr << *it << endl << endl; // debug code expectedCycles *= DENSITY; double expected = expectedCycles * (1 + DENSITY); - uInt64 prev = (--it)->cycle; ++it; // UGLY! - uInt64 next = (++it)->cycle; --it; // UGLY! + uInt64 prev = myStateList.previous(it)->cycle; + uInt64 next = myStateList.next(it)->cycle; double delta = expected / (prev - next); +cerr << "prev: " << prev << ", next: " << next << ", delta: " << delta << endl; if(delta > maxDelta) { @@ -150,6 +152,7 @@ cerr << *it << endl << endl; // debug code lastCycle = it->cycle; --idx; } +cerr << "END\n"; if (maxDelta < 1) { // the horizon is getting too big diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index 17740d159..edec7ce84 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -66,8 +66,8 @@ class RewindManager */ bool unwindState(); - bool atLast() const { return myStateList.empty(); } - bool atFirst() const { return false; } // TODO + bool atFirst() const { return myStateList.atFirst(); } + bool atLast() const { return myStateList.atLast(); } void clear() { myStateList.clear(); } /** @@ -99,8 +99,6 @@ class RewindManager } }; - using size_type = Common::LinkedObjectPool::size_type; - // The linked-list to store states (internally it takes care of reducing // frequent (de)-allocations) Common::LinkedObjectPool myStateList; From e465112c02c9c5b1f70d5b91e4e70b82d1acd07b Mon Sep 17 00:00:00 2001 From: thrust26 Date: Tue, 12 Dec 2017 17:07:05 +0100 Subject: [PATCH 052/156] rewind/unwind basically working changed values, UI and settings for rewind interval and horizon --- src/common/LinkedObjectPool.hxx | 4 +- src/common/RewindManager.cxx | 136 +++++++++++++++------ src/common/RewindManager.hxx | 66 ++++++++++- src/common/StateManager.cxx | 4 +- src/debugger/Debugger.cxx | 4 +- src/emucore/Settings.cxx | 18 +-- src/gui/DeveloperDialog.cxx | 202 ++++++++++++++++++-------------- src/gui/DeveloperDialog.hxx | 25 ++-- 8 files changed, 302 insertions(+), 157 deletions(-) diff --git a/src/common/LinkedObjectPool.hxx b/src/common/LinkedObjectPool.hxx index eeae815f1..b609395f4 100644 --- a/src/common/LinkedObjectPool.hxx +++ b/src/common/LinkedObjectPool.hxx @@ -172,7 +172,7 @@ class LinkedObjectPool myPool.splice(myPool.end(), myList, offset >= 0 ? std::next(i, offset) : std::prev(i, -offset)); } - +#endif /** Convenience method to remove a single element from the active list by index, offset from the beginning of the list. (ie, '0' means first @@ -181,7 +181,7 @@ class LinkedObjectPool void remove(uInt32 index) { myPool.splice(myPool.end(), myList, std::next(myList.begin(), index)); } -#endif + /** Remove range of elements from the beginning of the active list to diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index 0275f52e8..aac8609f9 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -30,11 +30,80 @@ RewindManager::RewindManager(OSystem& system, StateManager& statemgr) : myOSystem(system), myStateManager(statemgr) { + setup(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool RewindManager::addState(const string& message) +void RewindManager::setup() { + /*static const int NUM_INTERVALS = 6; + // TODO: check for intervals shorter than 1 frame (adjust horizon too!) + const uInt32 INTERVAL_CYCLES[NUM_INTERVALS] = { 76, 76 * 50, 76 * 262, 76 * 262 * 10, + 76 * 262 * 60, 76 * 262 * 60 * 10 }; + static const int NUM_HORIZONS = 7; + const uInt64 HORIZON_CYCLES[NUM_HORIZONS] = { 76 * 262, 76 * 262 * 10, 76 * 262 * 60, 76 * 262 * 60 * 10, + 76 * 262 * 60 * 60, 76 * 262 * 60 * 60 * 10, uInt64(76) * 262 * 60 * 60 * 60 };*/ + bool devSettings = myOSystem.settings().getBool("dev.settings"); + string prefix = devSettings ? "dev." : "plr."; + + mySize = MAX_SIZE; // myOSystem.settings().getInt(prefix + "rewind.size"); + myUncompressed = MAX_SIZE / 4; // myOSystem.settings().getInt(prefix + "rewind.uncompressed"); + + myInterval = INTERVAL_CYCLES[0]; + for(int i = 0; i < NUM_INTERVALS; ++i) + if(INT_SETTINGS[i] == myOSystem.settings().getString(prefix + "rewind.interval")) + myInterval = INTERVAL_CYCLES[i]; + + myHorizon = HORIZON_CYCLES[NUM_HORIZONS-1]; + for(int i = 0; i < NUM_HORIZONS; ++i) + if(HOR_SETTINGS[i] == myOSystem.settings().getString(prefix + "rewind.horizon")) + myHorizon = HORIZON_CYCLES[i]; + + // calc interval growth factor + const double MAX_FACTOR = 1E8; + double minFactor = 1, maxFactor = MAX_FACTOR; + + while(true) + { + double interval = myInterval; + double cycleSum = interval * myUncompressed; + // calculate next factor + myFactor = (minFactor + maxFactor) / 2; + // horizon not reachable? + if(myFactor == MAX_FACTOR) + break; + // sum up interval cycles + for(uInt32 i = myUncompressed; i < mySize; ++i) + { + interval *= myFactor; + cycleSum += interval; + } + double diff = cycleSum - myHorizon; + + // exit loop if result is close enough + if(std::abs(diff) < myHorizon * 1E-5) + break; + // define new boundary + if(cycleSum < myHorizon) + minFactor = myFactor; + else + maxFactor = myFactor; + } +cerr << "factor " << myFactor << endl; +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +bool RewindManager::addState(const string& message, bool continuous) +{ + // only check for continuous rewind states, ignore for debugger + if(continuous) + { + // check if the current state has the right interval from the last state + RewindState& lastState = myStateList.current(); + if(myOSystem.console().tia().cycles() - lastState.cycle < myInterval) + return false; + } + // Remove all future states myStateList.removeToLast(); @@ -63,8 +132,12 @@ cerr << "add " << state.count << endl; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool RewindManager::rewindState() { - if(myStateList.currentIsValid()) + if(!atFirst()) { + // Set internal current iterator to previous state (back in time), + // since we will now processed this state + myStateList.moveToPrevious(); + RewindState& state = myStateList.current(); Serializer& s = state.data; string message = getMessage(state); @@ -76,72 +149,65 @@ cerr << "rewind " << state.count << endl; // Show message indicating the rewind state myOSystem.frameBuffer().showMessage(message); - - // Set internal current iterator to previous state (back in time), - // since we've now processed this state - myStateList.moveToPrevious(); - return true; } - else - return false; + myOSystem.frameBuffer().showMessage("Rewind not possible"); + return false; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool RewindManager::unwindState() { -#if 0 - if(!atFirst()) // or last??? + if(!atLast()) { - // TODO: get state next to the current state - /*RewindState& state = myStateList.???() + // Set internal current iterator to next state (forward in time), + // since we've now processed this state + myStateList.moveToNext(); + + RewindState& state = myStateList.current(); Serializer& s = state.data; string message = getMessage(state); +cerr << "unwind " << state.count << endl; - s.reset(); // rewind Serializer internal buffers + s.rewind(); // rewind Serializer internal buffers myStateManager.loadState(s); myOSystem.console().tia().loadDisplay(s); // Show message indicating the rewind state - myOSystem.frameBuffer().showMessage(message);*/ + myOSystem.frameBuffer().showMessage(message); return true; } -#endif + myOSystem.frameBuffer().showMessage("Unwind not possible"); return false; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void RewindManager::compressStates() { -#if 0 - myStateList.removeFirst(); // remove the oldest state file -#else //bool debugMode = myOSystem.eventHandler().state() == EventHandler::S_DEBUGGER; - // TODO: let user control these: - const double DENSITY = 1.15; // exponential growth of cycle intervals - const uInt32 STEP_STATES = 6; // single step rewind length (change back to '60') - //const uInt32 SECONDS_STATES = 10; // TODO: one second rewind length uInt64 currentCycle = myOSystem.console().tia().cycles(); uInt64 lastCycle = currentCycle; - double expectedCycles = 76 * 262.0; // == cycles of 1 frame, TODO: use actual number of scanlines + double expectedCycles = myInterval; // == cycles of 1 frame, TODO: use actual number of scanlines double maxDelta = 0; uInt32 removeIdx = 0; uInt32 idx = myStateList.size() - 1; -cerr << "idx: " << idx << endl; +//cerr << "idx: " << idx << endl; for(auto it = myStateList.last(); it != myStateList.first(); --it) { - if(idx >= STEP_STATES) + if(idx < mySize - myUncompressed) { -cerr << *it << endl << endl; // debug code - expectedCycles *= DENSITY; +//cerr << *it << endl << endl; // debug code + expectedCycles *= myFactor; - double expected = expectedCycles * (1 + DENSITY); + double expected = expectedCycles * (1 + myFactor); uInt64 prev = myStateList.previous(it)->cycle; uInt64 next = myStateList.next(it)->cycle; - double delta = expected / (prev - next); -cerr << "prev: " << prev << ", next: " << next << ", delta: " << delta << endl; + if(next != lastCycle) + lastCycle++; + double delta = expected / (next - prev); +//cerr << "prev: " << prev << ", next: " << next << ", delta: " << delta << endl; if(delta > maxDelta) { @@ -152,17 +218,17 @@ cerr << "prev: " << prev << ", next: " << next << ", delta: " << delta << endl; lastCycle = it->cycle; --idx; } -cerr << "END\n"; if (maxDelta < 1) { // the horizon is getting too big - //myStateList.remove(idx - 1); // remove oldest but one + myStateList.remove(1); // remove oldest but one +cerr << "remove oldest + 1" << endl; } else { - //myStateList.remove(removeIdx); // remove + myStateList.remove(removeIdx); // remove +cerr << "remove " << removeIdx << endl; } -#endif } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index edec7ce84..3fa7faf47 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -46,13 +46,69 @@ class RewindManager RewindManager(OSystem& system, StateManager& statemgr); public: + static const int NUM_INTERVALS = 7; + const uInt32 INTERVAL_CYCLES[NUM_INTERVALS] = { + 76 * 262, + 76 * 262 * 3, + 76 * 262 * 10, + 76 * 262 * 30, + 76 * 262 * 60, + 76 * 262 * 60 * 3, + 76 * 262 * 60 * 10 + }; + /*static const int NUM_INTERVALS = 6; + const string INTERVALS[NUM_INTERVALS] = { "1 scanline", "50 scanlines", "1 frame", "10 frames", + "1 second", "10 seconds" }; + const uInt32 INTERVAL_CYCLES[NUM_INTERVALS] = { 76, 76 * 50, 76 * 262, 76 * 262 * 10, + 76 * 262 * 60, 76 * 262 * 60 * 10 };*/ + const string INT_SETTINGS[NUM_INTERVALS] = { + "1f", + "3f", + "10f", + "30f", + "1s", + "3s", + "10s" + }; + + static const int NUM_HORIZONS = 8; + const uInt64 HORIZON_CYCLES[NUM_HORIZONS] = { + 76 * 262 * 60 * 3, + 76 * 262 * 60 * 10, + 76 * 262 * 60 * 30, + 76 * 262 * 60 * 60, + 76 * 262 * 60 * 60 * 3, + 76 * 262 * 60 * 60 * 10, + uInt64(76) * 262 * 60 * 60 * 30, + uInt64(76) * 262 * 60 * 60 * 60 + }; + /*static const int NUM_HORIZONS = 7; + const string HORIZONS[NUM_HORIZONS] = { "~1 frame", "~10 frames", "~1 second", "~10 seconds", + "~1 minute", "~10 minutes", "~60 minutes" }; + const uInt64 HORIZON_CYCLES[NUM_HORIZONS] = { 76 * 262, 76 * 262 * 10, 76 * 262 * 60, 76 * 262 * 60 * 10, + 76 * 262 * 60 * 60, 76 * 262 * 60 * 60 * 10, uInt64(76) * 262 * 60 * 60 * 60 };*/ + const string HOR_SETTINGS[NUM_HORIZONS] = { + "3s", + "10s", + "30s", + "1m", + "3m", + "10m", + "30m", + "60m" + }; + + /** + */ + void setup(); + /** Add a new state file with the given message; this message will be displayed when the state is replayed. @param message Message to display when replaying this state */ - bool addState(const string& message); + bool addState(const string& message, bool continuous = false); /** Rewind one level of the state list, and display the message associated @@ -77,11 +133,17 @@ class RewindManager private: // Maximum number of states to save - static constexpr uInt32 MAX_SIZE = 10; // TODO: use a parameter here and allow user to define size in UI + static constexpr uInt32 MAX_SIZE = 20; // TODO: use a parameter here and allow user to define size in UI OSystem& myOSystem; StateManager& myStateManager; + uInt32 mySize; + uInt32 myUncompressed; + uInt32 myInterval; + uInt64 myHorizon; + double myFactor; + struct RewindState { Serializer data; string message; diff --git a/src/common/StateManager.cxx b/src/common/StateManager.cxx index 8896a2fe1..a279e23f6 100644 --- a/src/common/StateManager.cxx +++ b/src/common/StateManager.cxx @@ -145,7 +145,6 @@ void StateManager::toggleRewindMode() bool StateManager::rewindState() { RewindManager& r = myOSystem.state().rewindManager(); - // TODO: add parameter to indicate rewinding from within emulation return r.rewindState(); } @@ -153,7 +152,6 @@ bool StateManager::rewindState() bool StateManager::unwindState() { RewindManager& r = myOSystem.state().rewindManager(); - // TODO: add parameter to indicate unwinding from within emulation return r.unwindState(); } @@ -163,7 +161,7 @@ void StateManager::update() switch(myActiveMode) { case Mode::Rewind: - myRewindManager->addState("add 1 frame"); + myRewindManager->addState("1 frame", true); break; #if 0 diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index c8e39d48a..0eb321f9a 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -524,8 +524,8 @@ void Debugger::nextFrame(int frames) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void Debugger::updateRewindbuttons(const RewindManager& r) { - myDialog->rewindButton().setEnabled(!r.atLast()); - myDialog->unwindButton().setEnabled(!r.atFirst()); + myDialog->rewindButton().setEnabled(!r.atFirst()); + myDialog->unwindButton().setEnabled(!r.atLast()); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/Settings.cxx b/src/emucore/Settings.cxx index ccbd12463..0bd0e126a 100644 --- a/src/emucore/Settings.cxx +++ b/src/emucore/Settings.cxx @@ -158,8 +158,8 @@ Settings::Settings(OSystem& osystem) setInternal("plr.rewind", false); setInternal("plr.rewind.size", 100); setInternal("plr.rewind.uncompressed", 30); - setInternal("plr.rewind.interval", 4); // = 1 second - setInternal("plr.rewind.horizon", 5); // = ~10 minutes + setInternal("plr.rewind.interval", "30f"); // = 0.5 seconds + setInternal("plr.rewind.horizon", "10m"); // = ~10 minutes // Thumb ARM emulation options setInternal("plr.thumb.trapfatal", "false"); @@ -178,8 +178,8 @@ Settings::Settings(OSystem& osystem) setInternal("dev.rewind", true); setInternal("dev.rewind.size", 100); setInternal("dev.rewind.uncompressed", 60); - setInternal("dev.rewind.interval", 2); // = 1 frame - setInternal("dev.rewind.horizon", 3); // = ~10 seconds + setInternal("dev.rewind.interval", "1f"); // = 1 frame + setInternal("dev.rewind.horizon", "10s"); // = ~10 seconds // Thumb ARM emulation options setInternal("dev.thumb.trapfatal", "true"); } @@ -330,10 +330,10 @@ void Settings::validate() if(i < 0 || i > size) setInternal("dev.rewind.uncompressed", size); i = getInt("dev.rewind.interval"); - if(i < 0 || i > 5) setInternal("dev.rewind.interval", 2); + if(i < 0 || i > 5) setInternal("dev.rewind.interval", 0); i = getInt("dev.rewind.horizon"); - if(i < 0 || i > 6) setInternal("dev.rewind.horizon", 3); + if(i < 0 || i > 6) setInternal("dev.rewind.horizon", 1); i = getInt("plr.tv.jitter_recovery"); if(i < 1 || i > 20) setInternal("plr.tv.jitter_recovery", "10"); @@ -348,11 +348,11 @@ void Settings::validate() i = getInt("plr.rewind.uncompressed"); if(i < 0 || i > size) setInternal("plr.rewind.uncompressed", size); - i = getInt("plr.rewind.interval"); - if(i < 0 || i > 5) setInternal("plr.rewind.interval", 4); + /*i = getInt("plr.rewind.interval"); + if(i < 0 || i > 5) setInternal("plr.rewind.interval", 3); i = getInt("plr.rewind.horizon"); - if(i < 0 || i > 6) setInternal("plr.rewind.horizon", 5); + if(i < 0 || i > 6) setInternal("plr.rewind.horizon", 5);*/ #ifdef SOUND_SUPPORT i = getInt("volume"); diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index e9d1d595c..7ecd501e7 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -38,6 +38,7 @@ #include "TIA.hxx" #include "OSystem.hxx" #include "StateManager.hxx" +#include "RewindManager.hxx" #include "DeveloperDialog.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -85,10 +86,12 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font) // settings set mySettingsGroup0 = new RadioButtonGroup(); - RadioButtonWidget* r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, "Player settings", mySettingsGroup0, kPlrSettings); + RadioButtonWidget* r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, + "Player settings", mySettingsGroup0, kPlrSettings); wid.push_back(r); ypos += lineHeight + VGAP; - r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, "Developer settings", mySettingsGroup0, kDevSettings); + r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, + "Developer settings", mySettingsGroup0, kDevSettings); wid.push_back(r); ypos += lineHeight + VGAP * 1; @@ -177,10 +180,12 @@ void DeveloperDialog::addVideoTab(const GUI::Font& font) // settings set mySettingsGroup1 = new RadioButtonGroup(); - RadioButtonWidget* r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, "Player settings", mySettingsGroup1, kPlrSettings); + RadioButtonWidget* r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, + "Player settings", mySettingsGroup1, kPlrSettings); wid.push_back(r); ypos += lineHeight + VGAP; - r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, "Developer settings", mySettingsGroup1, kDevSettings); + r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, + "Developer settings", mySettingsGroup1, kDevSettings); wid.push_back(r); ypos += lineHeight + VGAP * 1; @@ -247,7 +252,6 @@ void DeveloperDialog::addVideoTab(const GUI::Font& font) // Add message concerning usage const GUI::Font& infofont = instance().frameBuffer().infoFont(); ypos = myTab->getHeight() - 5 - fontHeight - infofont.getFontHeight() - 10; - //new StaticTextWidget(myTab, infofont, 10, ypos, "(*) Colors must be different for each object"); new StaticTextWidget(myTab, infofont, HBORDER, ypos, "(*) colors identical for player and developer settings"); // Add items for tab 2 @@ -257,6 +261,44 @@ void DeveloperDialog::addVideoTab(const GUI::Font& font) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DeveloperDialog::addStatesTab(const GUI::Font& font) { + const string INTERVALS[NUM_INTERVALS] = { + "1 frame", + "3 frames", + "10 frames", + "30 frames", + "1 second", + "3 seconds", + "10 seconds" + }; + const string INT_SETTINGS[NUM_INTERVALS] = { + "1f", + "3f", + "10f", + "30f", + "1s", + "3s", + "10s" + }; + const string HORIZONS[NUM_HORIZONS] = { + "~3 seconds", + "~10 seconds", + "~30 seconds", + "~1 minute", + "~3 minutes", + "~10 minutes", + "~30 minutes", + "~60 minutes" + }; + const string HOR_SETTINGS[NUM_HORIZONS] = { + "3s", + "10s", + "30s", + "1m", + "3m", + "10m", + "30m", + "60m" + }; const int HBORDER = 10; const int INDENT = 16+4; const int VBORDER = 8; @@ -265,24 +307,28 @@ void DeveloperDialog::addStatesTab(const GUI::Font& font) int lineHeight = font.getLineHeight(); int fontHeight = font.getFontHeight(); WidgetArray wid; + VariantList items; int tabID = myTab->addTab("States"); // settings set mySettingsGroup2 = new RadioButtonGroup(); - RadioButtonWidget* r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, "Player settings", mySettingsGroup2, kPlrSettings); + RadioButtonWidget* r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, + "Player settings", mySettingsGroup2, kPlrSettings); wid.push_back(r); ypos += lineHeight + VGAP; - r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, "Developer settings", mySettingsGroup2, kDevSettings); + r = new RadioButtonWidget(myTab, font, HBORDER, ypos + 1, + "Developer settings", mySettingsGroup2, kDevSettings); wid.push_back(r); ypos += lineHeight + VGAP * 1; - myContinuousRewindWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT, ypos + 1, "Continuous rewind", kRewind); + myContinuousRewindWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT, ypos + 1, + "Continuous rewind", kRewind); wid.push_back(myContinuousRewindWidget); ypos += lineHeight + VGAP; int sWidth = font.getMaxCharWidth() * 8; myStateSizeWidget = new SliderWidget(myTab, font, HBORDER + INDENT * 2, ypos - 1, sWidth, lineHeight, - "Buffer size (*) ", 0, kSizeChanged); + "Buffer size (*) ", 0, kSizeChanged); myStateSizeWidget->setMinValue(100); myStateSizeWidget->setMaxValue(1000); myStateSizeWidget->setStepValue(20); @@ -292,32 +338,30 @@ void DeveloperDialog::addStatesTab(const GUI::Font& font) ypos += lineHeight + VGAP; myUncompressedWidget = new SliderWidget(myTab, font, HBORDER + INDENT * 2, ypos - 1, sWidth, lineHeight, - "Uncompressed size (*) ", 0, kUncompressedChanged); + "Uncompressed size ", 0, kUncompressedChanged); myUncompressedWidget->setMinValue(0); myUncompressedWidget->setMaxValue(1000); myUncompressedWidget->setStepValue(20); wid.push_back(myUncompressedWidget); myUncompressedLabelWidget = new StaticTextWidget(myTab, font, myUncompressedWidget->getRight() + 4, - myUncompressedWidget->getTop() + 2, "50 "); + myUncompressedWidget->getTop() + 2, "50 "); ypos += lineHeight + VGAP; - myStateIntervalWidget = new SliderWidget(myTab, font, HBORDER + INDENT * 2, ypos - 1, sWidth, lineHeight, - "Interval ", 0, kIntervalChanged); - - myStateIntervalWidget->setMinValue(0); - myStateIntervalWidget->setMaxValue(NUM_INTERVALS - 1); + items.clear(); + for(int i = 0; i < NUM_INTERVALS; ++i) + VarList::push_back(items, INTERVALS[i], INT_SETTINGS[i]); + int pwidth = font.getStringWidth("~10 seconds"); + myStateIntervalWidget = new PopUpWidget(myTab, font, HBORDER + INDENT * 2, ypos, pwidth, + lineHeight, items, "Interval ", 0, kIntervalChanged); wid.push_back(myStateIntervalWidget); - myStateIntervalLabelWidget = new StaticTextWidget(myTab, font, myStateIntervalWidget->getRight() + 4, - myStateIntervalWidget->getTop() + 2, "50 scanlines"); ypos += lineHeight + VGAP; - myStateHorizonWidget = new SliderWidget(myTab, font, HBORDER + INDENT * 2, ypos - 1, sWidth, lineHeight, - "Horizon ", 0, kHorizonChanged); - myStateHorizonWidget->setMinValue(0); - myStateHorizonWidget->setMaxValue(NUM_HORIZONS - 1); + items.clear(); + for(int i = 0; i < NUM_HORIZONS; ++i) + VarList::push_back(items, HORIZONS[i], HOR_SETTINGS[i]); + myStateHorizonWidget = new PopUpWidget(myTab, font, HBORDER + INDENT * 2, ypos, pwidth, + lineHeight, items, "Horizon ", 0, kHorizonChanged); wid.push_back(myStateHorizonWidget); - myStateHorizonLabelWidget = new StaticTextWidget(myTab, font, myStateHorizonWidget->getRight() + 4, - myStateHorizonWidget->getTop() + 2, "~60 minutes"); // Add message concerning usage const GUI::Font& infofont = instance().frameBuffer().infoFont(); @@ -477,8 +521,11 @@ void DeveloperDialog::loadSettings(SettingsSet set) myContinuousRewind[set] = instance().settings().getBool(prefix + "rewind"); myStateSize[set] = instance().settings().getInt(prefix + "rewind.size"); myUncompressed[set] = instance().settings().getInt(prefix + "rewind.uncompressed"); - myStateInterval[set] = instance().settings().getInt(prefix + "rewind.interval"); - myStateHorizon[set] = instance().settings().getInt(prefix + "rewind.horizon"); + /*myStateInterval[set] = instance().settings().getInt(prefix + "rewind.interval"); + myStateHorizon[set] = instance().settings().getInt(prefix + "rewind.horizon");*/ + myStateInterval[set] = instance().settings().getString(prefix + "rewind.interval"); + myStateHorizon[set] = instance().settings().getString(prefix + "rewind.horizon"); + } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -544,8 +591,9 @@ void DeveloperDialog::getWidgetStates(SettingsSet set) myContinuousRewind[set] = myContinuousRewindWidget->getState(); myStateSize[set] = myStateSizeWidget->getValue(); myUncompressed[set] = myUncompressedWidget->getValue(); - myStateInterval[set] = myStateIntervalWidget->getValue(); - myStateHorizon[set] = myStateHorizonWidget->getValue(); + myStateInterval[set] = myStateIntervalWidget->getSelected(); + myStateInterval[set] = myStateIntervalWidget->getSelectedTag().toString(); + myStateHorizon[set] = myStateHorizonWidget->getSelectedTag().toString(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -583,8 +631,10 @@ void DeveloperDialog::setWidgetStates(SettingsSet set) myContinuousRewindWidget->setState(myContinuousRewind[set]); myStateSizeWidget->setValue(myStateSize[set]); myUncompressedWidget->setValue(myUncompressed[set]); - myStateIntervalWidget->setValue(myStateInterval[set]); - myStateHorizonWidget->setValue(myStateHorizon[set]); + //myStateIntervalWidget->setSelectedIndex(myStateInterval[set]); + myStateIntervalWidget->setSelected(myStateInterval[set]); + //myStateHorizonWidget->setSelectedIndex(myStateHorizon[set]); + myStateHorizonWidget->setSelected(myStateHorizon[set]); handleRewind(); handleSize(); @@ -671,47 +721,11 @@ void DeveloperDialog::saveConfig() // Finally, issue a complete framebuffer re-initialization //instance().createFrameBuffer(); - // TODO: update RewindManager + // update RewindManager + instance().state().rewindManager().setup(); instance().state().setRewindMode(myContinuousRewindWidget->getState() ? StateManager::Mode::Rewind : StateManager::Mode::Off); - // define interval growth factor - uInt32 size = myStateSizeWidget->getValue(); - uInt32 uncompressed = myUncompressedWidget->getValue(); - - const double MAX_FACTOR = 1E8; - uInt64 horizon = HORIZON_CYCLES[myStateHorizonWidget->getValue()]; - double factor, minFactor = 1, maxFactor = MAX_FACTOR; - - while(true) - { - double interval = INTERVAL_CYCLES[myStateIntervalWidget->getValue()]; - double cycleSum = interval * uncompressed; - // calculate next factor - factor = (minFactor + maxFactor) / 2; - // horizon not reachable? - if(factor == MAX_FACTOR) - break; - // sum up interval cycles - for(uInt32 i = uncompressed; i < size; ++i) - { - interval *= factor; - cycleSum += interval; - } - double diff = cycleSum - horizon; - //cerr << "factor " << factor << ", diff " << diff << endl; - // exit loop if result is close enough - if(std::abs(diff) < horizon * 1E-5) - break; - // define new boundary - if(cycleSum < horizon) - minFactor = factor; - else - maxFactor = factor; - } - // TODO factor calculation code above into RewindManager - //instance().settings().setValue("dev.rewind.factor", factor); - // Debugger font style instance().settings().setValue("dbg.fontstyle", myDebuggerFontStyle->getSelectedTag().toString()); @@ -767,8 +781,8 @@ void DeveloperDialog::setDefaults() myContinuousRewind[set] = devSettings ? true : false; myStateSize[set] = 100; myUncompressed[set] = devSettings ? 60 : 30; - myStateInterval[set] = devSettings ? 2 : 4; - myStateHorizon[set] = devSettings ? 3 : 5; + myStateInterval[set] = devSettings ? "1f" : "30f"; + myStateHorizon[set] = devSettings ? "10s" : "10m"; setWidgetStates(set); break; @@ -954,10 +968,8 @@ void DeveloperDialog::handleRewind() myUncompressedLabelWidget->setEnabled(enable); myStateIntervalWidget->setEnabled(enable); - myStateIntervalLabelWidget->setEnabled(enable); myStateHorizonWidget->setEnabled(enable); - myStateHorizonLabelWidget->setEnabled(enable); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -965,18 +977,24 @@ void DeveloperDialog::handleSize() { uInt32 size = myStateSizeWidget->getValue(); uInt32 uncompressed = myUncompressedWidget->getValue(); - uInt32 interval = myStateIntervalWidget->getValue(); - uInt32 horizon = myStateHorizonWidget->getValue(); + uInt32 interval = myStateIntervalWidget->getSelected(); + uInt32 horizon = myStateHorizonWidget->getSelected(); bool found = false; Int32 i; + if(interval == -1) + interval = 0; + if(horizon == -1) + horizon = 0; + myStateSizeLabelWidget->setValue(size); // adapt horizon and interval do { for(i = horizon; i < NUM_HORIZONS; ++i) { - if(size * INTERVAL_CYCLES[interval] <= HORIZON_CYCLES[i]) + if((uInt64)size * instance().state().rewindManager().INTERVAL_CYCLES[interval] + <= instance().state().rewindManager().HORIZON_CYCLES[i]) { found = true; break; @@ -988,8 +1006,8 @@ void DeveloperDialog::handleSize() if(size < uncompressed) myUncompressedWidget->setValue(size); - myStateIntervalWidget->setValue(interval); - myStateHorizonWidget->setValue(i); + myStateIntervalWidget->setSelectedIndex(interval); + myStateHorizonWidget->setSelectedIndex(i); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1009,18 +1027,23 @@ void DeveloperDialog::handleInterval() { uInt32 size = myStateSizeWidget->getValue(); uInt32 uncompressed = myUncompressedWidget->getValue(); - uInt32 interval = myStateIntervalWidget->getValue(); - uInt32 horizon = myStateHorizonWidget->getValue(); + uInt32 interval = myStateIntervalWidget->getSelected(); + uInt32 horizon = myStateHorizonWidget->getSelected(); bool found = false; Int32 i; - myStateIntervalLabelWidget->setLabel(INTERVALS[interval]); + if(interval == -1) + interval = 0; + if(horizon == -1) + horizon = 0; + // adapt horizon and size do { for(i = horizon; i < NUM_HORIZONS; ++i) { - if(size * INTERVAL_CYCLES[interval] <= HORIZON_CYCLES[i]) + if((uInt64)size * instance().state().rewindManager().INTERVAL_CYCLES[interval] + <= instance().state().rewindManager().HORIZON_CYCLES[i]) { found = true; break; @@ -1030,10 +1053,10 @@ void DeveloperDialog::handleInterval() size -= myStateSizeWidget->getStepValue(); } while(!found); + myStateHorizonWidget->setSelectedIndex(i); myStateSizeWidget->setValue(size); if(size < uncompressed) myUncompressedWidget->setValue(size); - myStateHorizonWidget->setValue(i); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1041,18 +1064,23 @@ void DeveloperDialog::handleHorizon() { uInt32 size = myStateSizeWidget->getValue(); uInt32 uncompressed = myUncompressedWidget->getValue(); - uInt32 interval = myStateIntervalWidget->getValue(); - uInt32 horizon = myStateHorizonWidget->getValue(); + uInt32 interval = myStateIntervalWidget->getSelected(); + uInt32 horizon = myStateHorizonWidget->getSelected(); bool found = false; Int32 i; - myStateHorizonLabelWidget->setLabel(HORIZONS[horizon]); + if(interval == -1) + interval = 0; + if(horizon == -1) + horizon = 0; + // adapt interval and size do { for(i = interval; i >= 0; --i) { - if(size * INTERVAL_CYCLES[i] <= HORIZON_CYCLES[horizon]) + if(size * instance().state().rewindManager().INTERVAL_CYCLES[i] + <= instance().state().rewindManager().HORIZON_CYCLES[horizon]) { found = true; break; @@ -1062,10 +1090,10 @@ void DeveloperDialog::handleHorizon() size -= myStateSizeWidget->getStepValue(); } while(!found); + myStateIntervalWidget->setSelectedIndex(i); myStateSizeWidget->setValue(size); if(size < uncompressed) myUncompressedWidget->setValue(size); - myStateIntervalWidget->setValue(i); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/DeveloperDialog.hxx b/src/gui/DeveloperDialog.hxx index c34ed3d85..bbc28f002 100644 --- a/src/gui/DeveloperDialog.hxx +++ b/src/gui/DeveloperDialog.hxx @@ -86,17 +86,9 @@ class DeveloperDialog : public Dialog developer }; - static const int NUM_INTERVALS = 6; - // TODO: check for intervals shorter than 1 frame (adjust horizon too!) - const string INTERVALS[NUM_INTERVALS] = { "1 scanline", "50 scanlines", "1 frame", "10 frames", - "1 second", "10 seconds" }; - const uInt32 INTERVAL_CYCLES[NUM_INTERVALS] = { 76, 76 * 50, 76 * 262, 76 * 262 * 10, - 76 * 262 * 60, 76 * 262 * 60 * 10 }; - static const int NUM_HORIZONS = 7; - const string HORIZONS[NUM_HORIZONS] = { "~1 frame", "~10 frames", "~1 second", "~10 seconds", - "~1 minute", "~10 minutes", "~60 minutes" }; - const uInt64 HORIZON_CYCLES[NUM_HORIZONS] = { 76 * 262, 76 * 262 * 10, 76 * 262 * 60, 76 * 262 * 60 * 10, - 76 * 262 * 60 * 60, 76 * 262 * 60 * 60 * 10, uInt64(76) * 262 * 60 * 60 * 60 }; + // MUST be aligned with RewindManager! + static const int NUM_INTERVALS = 7; + static const int NUM_HORIZONS = 8; static const int DEBUG_COLORS = 6; @@ -130,10 +122,8 @@ class DeveloperDialog : public Dialog StaticTextWidget* myStateSizeLabelWidget; SliderWidget* myUncompressedWidget; StaticTextWidget* myUncompressedLabelWidget; - SliderWidget* myStateIntervalWidget; - StaticTextWidget* myStateIntervalLabelWidget; - SliderWidget* myStateHorizonWidget; - StaticTextWidget* myStateHorizonLabelWidget; + PopUpWidget* myStateIntervalWidget; + PopUpWidget* myStateHorizonWidget; #ifdef DEBUGGER_SUPPORT // Debugger UI widgets @@ -162,8 +152,9 @@ class DeveloperDialog : public Dialog bool myContinuousRewind[2]; int myStateSize[2]; int myUncompressed[2]; - int myStateInterval[2]; - int myStateHorizon[2]; + //int myStateInterval[2]; + string myStateInterval[2]; + string myStateHorizon[2]; private: void addEmulationTab(const GUI::Font& font); From fc01aef34e335862f37153b3a2d9eedeedae9a51 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Tue, 12 Dec 2017 17:26:09 +0100 Subject: [PATCH 053/156] doc updated to reflect latest changes --- docs/graphics/options_developer_states.png | Bin 5368 -> 5310 bytes docs/index.html | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/graphics/options_developer_states.png b/docs/graphics/options_developer_states.png index 3304e8c0cb335f1e174547a40da50f6fba8881ab..ac09d4d2f69158e4b02ff28f6c6d678e747fd290 100644 GIT binary patch delta 4086 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 the uncompressed rewind buffer size. Must be <= rewind buffer size.
        - + - +
        AmigaMouseCommodore Amiga computer mouse.
        AtariMouse Atari ST computer mouse.
        Trakball Standard Atari 2600 CX22/CX80 'Trak-Ball' controller.
        AtariVoxA SpeakJet based unlimited-vocabulary speech / sound synthesizer with 32K EEPROM.
        AtariVoxA SpeakJet based unlimited-vocabulary speech/sound synthesizer with 32K EEPROM.
        SaveKey A 32K EEPROM for saving high scores, etc. (the EEPROM portion of an AtariVox).
        Genesis Sega Genesis controller, which can be used similar to a BoosterGrip, giving an extra button.
        CompuMate Spectravideo CompuMate (if either left or right is set, CompuMate is used for both).
        -<plr.|dev.>rewind.interval <0 - 5>
        -<plr.|dev.>rewind.interval <1f|3f|10f|30f|1s|3s|10s>
        Defines the interval between two save states.
        -<plr.|dev.>rewind.horizon <0 - 6>
        -<plr.|dev.>rewind.horizon <3s|10s|30s|1m|3m|10m|30m|60m>
        Defines the horizon of the rewind buffer.
        From 6632b97307622c4629303b9dcd253a2dd8b8508f Mon Sep 17 00:00:00 2001 From: thrust26 Date: Tue, 12 Dec 2017 18:47:21 +0100 Subject: [PATCH 054/156] double rewind in debugger fixed rewind messages improved --- src/common/RewindManager.cxx | 12 +++++++----- src/common/RewindManager.hxx | 2 +- src/debugger/Debugger.cxx | 27 +++++++++------------------ src/gui/DeveloperDialog.cxx | 15 ++++----------- 4 files changed, 21 insertions(+), 35 deletions(-) diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index aac8609f9..1f8fb1807 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -134,13 +134,15 @@ bool RewindManager::rewindState() { if(!atFirst()) { + RewindState& lastState = myStateList.current(); + // Set internal current iterator to previous state (back in time), // since we will now processed this state myStateList.moveToPrevious(); RewindState& state = myStateList.current(); Serializer& s = state.data; - string message = getMessage(state); + string message = getMessage(state, lastState); cerr << "rewind " << state.count << endl; s.rewind(); // rewind Serializer internal buffers @@ -166,7 +168,7 @@ bool RewindManager::unwindState() RewindState& state = myStateList.current(); Serializer& s = state.data; - string message = getMessage(state); + string message = getMessage(state, state); cerr << "unwind " << state.count << endl; s.rewind(); // rewind Serializer internal buffers @@ -232,7 +234,7 @@ cerr << "remove " << removeIdx << endl; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -string RewindManager::getMessage(RewindState& state) +string RewindManager::getMessage(RewindState& state, RewindState& lastState) { Int64 diff = myOSystem.console().tia().cycles() - state.cycle; stringstream message; @@ -240,8 +242,8 @@ string RewindManager::getMessage(RewindState& state) message << (diff >= 0 ? "Rewind" : "Unwind") << " " << getUnitString(diff); // add optional message (TODO: when smart removal works, we have to do something smart with this part too) - if(!state.message.empty()) - message << " (" << state.message << ")"; + if(!lastState.message.empty()) + message << " (" << lastState.message << ")"; return message.str(); } diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index 3fa7faf47..fbfb5a2a6 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -167,7 +167,7 @@ class RewindManager void compressStates(); - string getMessage(RewindState& state); + string getMessage(RewindState& state, RewindState& lastState); private: // Following constructors and assignment operators not supported diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index 0eb321f9a..665a79888 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -270,7 +270,6 @@ void Debugger::loadState(int state) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - int Debugger::step() { - saveOldState("1 step"); mySystem.clearDirtyPages(); uInt64 startCycle = mySystem.cycles(); @@ -279,6 +278,7 @@ int Debugger::step() myOSystem.console().tia().updateScanlineByStep().flushLineCache(); lockBankswitchState(); + saveOldState("step"); return int(mySystem.cycles() - startCycle); } @@ -297,7 +297,6 @@ int Debugger::trace() // 32 is the 6502 JSR instruction: if(mySystem.peek(myCpuDebug->pc()) == 32) { - saveOldState("1 trace"); mySystem.clearDirtyPages(); uInt64 startCycle = mySystem.cycles(); @@ -307,6 +306,7 @@ int Debugger::trace() myOSystem.console().tia().updateScanlineByTrace(targetPC).flushLineCache(); lockBankswitchState(); + saveOldState("trace"); return int(mySystem.cycles() - startCycle); } else @@ -483,11 +483,8 @@ uInt32 Debugger::getBaseAddress(uInt32 addr, bool read) void Debugger::nextScanline(int lines) { ostringstream buf; - buf << lines << " scanline"; - if(lines > 1) - buf << "s"; + buf << "scanline + " << lines; - saveOldState(buf.str()); mySystem.clearDirtyPages(); unlockBankswitchState(); @@ -498,6 +495,7 @@ void Debugger::nextScanline(int lines) } lockBankswitchState(); + saveOldState(buf.str()); myOSystem.console().tia().flushLineCache(); } @@ -505,11 +503,8 @@ void Debugger::nextScanline(int lines) void Debugger::nextFrame(int frames) { ostringstream buf; - buf << frames << " frame"; - if(frames > 1) - buf << "s"; + buf << "frame + " << frames; - saveOldState(buf.str()); mySystem.clearDirtyPages(); unlockBankswitchState(); @@ -519,6 +514,8 @@ void Debugger::nextFrame(int frames) --frames; } lockBankswitchState(); + + saveOldState(buf.str()); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -618,11 +615,8 @@ void Debugger::setStartState() // Lock the bus each time the debugger is entered, so we don't disturb anything lockBankswitchState(); - RewindManager& r = myOSystem.state().rewindManager(); - updateRewindbuttons(r); - - // Save initial state, but don't add it to the rewind list - saveOldState(); + // Save initial state and add it to the rewind list + saveOldState("enter debugger"); // Set the 're-disassemble' flag, but don't do it until the next scheduled time myDialog->rom().invalidate(false); @@ -634,9 +628,6 @@ void Debugger::setQuitState() // Bus must be unlocked for normal operation when leaving debugger mode unlockBankswitchState(); - // Save state when leaving the debugger - saveOldState("exit debugger"); - // execute one instruction on quit. If we're // sitting at a breakpoint/trap, this will get us past it. // Somehow this feels like a hack to me, but I don't know why diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index 7ecd501e7..8727bbc3d 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -143,7 +143,6 @@ void DeveloperDialog::addEmulationTab(const GUI::Font& font) } ypos += lineHeight + VGAP; - // How to handle undriven TIA pins myUndrivenPinsWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT * 1, ypos + 1, "Drive unused TIA pins randomly on a read/peek"); @@ -214,9 +213,6 @@ void DeveloperDialog::addVideoTab(const GUI::Font& font) wid.push_back(myDebugColorsWidget); ypos += lineHeight + VGAP + 2; - //StaticTextWidget* s = new StaticTextWidget(myTab, font, HBORDER, ypos, "Debug Colors "); - //ypos += lineHeight + VGAP; - items.clear(); VarList::push_back(items, "Red", "r"); VarList::push_back(items, "Orange", "o"); @@ -521,8 +517,6 @@ void DeveloperDialog::loadSettings(SettingsSet set) myContinuousRewind[set] = instance().settings().getBool(prefix + "rewind"); myStateSize[set] = instance().settings().getInt(prefix + "rewind.size"); myUncompressed[set] = instance().settings().getInt(prefix + "rewind.uncompressed"); - /*myStateInterval[set] = instance().settings().getInt(prefix + "rewind.interval"); - myStateHorizon[set] = instance().settings().getInt(prefix + "rewind.horizon");*/ myStateInterval[set] = instance().settings().getString(prefix + "rewind.interval"); myStateHorizon[set] = instance().settings().getString(prefix + "rewind.horizon"); @@ -631,9 +625,7 @@ void DeveloperDialog::setWidgetStates(SettingsSet set) myContinuousRewindWidget->setState(myContinuousRewind[set]); myStateSizeWidget->setValue(myStateSize[set]); myUncompressedWidget->setValue(myUncompressed[set]); - //myStateIntervalWidget->setSelectedIndex(myStateInterval[set]); myStateIntervalWidget->setSelected(myStateInterval[set]); - //myStateHorizonWidget->setSelectedIndex(myStateHorizon[set]); myStateHorizonWidget->setSelected(myStateHorizon[set]); handleRewind(); @@ -726,16 +718,14 @@ void DeveloperDialog::saveConfig() instance().state().setRewindMode(myContinuousRewindWidget->getState() ? StateManager::Mode::Rewind : StateManager::Mode::Off); +#ifdef DEBUGGER_SUPPORT // Debugger font style instance().settings().setValue("dbg.fontstyle", myDebuggerFontStyle->getSelectedTag().toString()); - -#ifdef DEBUGGER_SUPPORT // Debugger size instance().settings().setValue("dbg.res", GUI::Size(myDebuggerWidthSlider->getValue(), myDebuggerHeightSlider->getValue())); - // Debugger font size instance().settings().setValue("dbg.fontsize", myDebuggerFontSize->getSelectedTag().toString()); #endif @@ -982,6 +972,7 @@ void DeveloperDialog::handleSize() bool found = false; Int32 i; + // handle illegal values if(interval == -1) interval = 0; if(horizon == -1) @@ -1032,6 +1023,7 @@ void DeveloperDialog::handleInterval() bool found = false; Int32 i; + // handle illegal values if(interval == -1) interval = 0; if(horizon == -1) @@ -1069,6 +1061,7 @@ void DeveloperDialog::handleHorizon() bool found = false; Int32 i; + // handle illegal values if(interval == -1) interval = 0; if(horizon == -1) From 8034bae9def35924110cce5e07102b6fb8ba30fb Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Tue, 12 Dec 2017 16:44:30 -0330 Subject: [PATCH 055/156] Added destructive resize to LinkedObjectPool/RewindManager. Fixed minor warnings in DebuggerDialog. --- src/common/LinkedObjectPool.hxx | 35 ++++++++++++++++++++++----------- src/common/RewindManager.hxx | 5 +++-- src/gui/DeveloperDialog.cxx | 22 ++------------------- 3 files changed, 28 insertions(+), 34 deletions(-) diff --git a/src/common/LinkedObjectPool.hxx b/src/common/LinkedObjectPool.hxx index b609395f4..0d42d92d5 100644 --- a/src/common/LinkedObjectPool.hxx +++ b/src/common/LinkedObjectPool.hxx @@ -59,9 +59,8 @@ class LinkedObjectPool /* Create a pool of size CAPACITY; the active list starts out empty. */ - LinkedObjectPool() : myCurrent(myList.end()) { - for(uInt32 i = 0; i < CAPACITY; ++i) - myPool.emplace_back(T()); + LinkedObjectPool() : myCurrent(myList.end()), myCapacity(0) { + resize(CAPACITY); } /** @@ -199,6 +198,22 @@ class LinkedObjectPool myPool.splice(myPool.end(), myList, std::next(myCurrent, 1), myList.end()); } + /** + Resize the pool to specified size, invalidating the list in the process + (ie, the list essentially becomes empty again). + */ + void resize(uInt32 capacity) { + if(myCapacity != capacity) // only resize when necessary + { + myList.clear(); myPool.clear(); + myCurrent = myList.end(); + myCapacity = capacity; + + for(uInt32 i = 0; i < myCapacity; ++i) + myPool.emplace_back(T()); + } + } + /** Erase entire contents of active list. */ @@ -207,18 +222,11 @@ class LinkedObjectPool myCurrent = myList.end(); } -#if 0 - /** Access the list with iterators, just as you would a normal C++ STL list */ - iter begin() { return myList.begin(); } - iter end() { return myList.end(); } - const_iter begin() const { return myList.cbegin(); } - const_iter end() const { return myList.cend(); } -#endif - uInt32 capacity() const { return CAPACITY; } + uInt32 capacity() const { return myCapacity; } uInt32 size() const { return uInt32(myList.size()); } bool empty() const { return size() == 0; } - bool full() const { return size() >= CAPACITY; } + bool full() const { return size() >= capacity(); } private: std::list myList, myPool; @@ -226,6 +234,9 @@ class LinkedObjectPool // Current position in the active list (end() indicates an invalid position) iter myCurrent; + // Total capacity of the pool + uInt32 myCapacity; + private: // Following constructors and assignment operators not supported LinkedObjectPool(const LinkedObjectPool&) = delete; diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index fbfb5a2a6..920acf49e 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -46,7 +46,7 @@ class RewindManager RewindManager(OSystem& system, StateManager& statemgr); public: - static const int NUM_INTERVALS = 7; + static constexpr int NUM_INTERVALS = 7; const uInt32 INTERVAL_CYCLES[NUM_INTERVALS] = { 76 * 262, 76 * 262 * 3, @@ -71,7 +71,7 @@ class RewindManager "10s" }; - static const int NUM_HORIZONS = 8; + static constexpr int NUM_HORIZONS = 8; const uInt64 HORIZON_CYCLES[NUM_HORIZONS] = { 76 * 262 * 60 * 3, 76 * 262 * 60 * 10, @@ -124,6 +124,7 @@ class RewindManager bool atFirst() const { return myStateList.atFirst(); } bool atLast() const { return myStateList.atLast(); } + void resize(uInt32 size) { myStateList.resize(size); } void clear() { myStateList.clear(); } /** diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index 8727bbc3d..2e1d1a651 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -972,19 +972,13 @@ void DeveloperDialog::handleSize() bool found = false; Int32 i; - // handle illegal values - if(interval == -1) - interval = 0; - if(horizon == -1) - horizon = 0; - myStateSizeLabelWidget->setValue(size); // adapt horizon and interval do { for(i = horizon; i < NUM_HORIZONS; ++i) { - if((uInt64)size * instance().state().rewindManager().INTERVAL_CYCLES[interval] + if(uInt64(size) * instance().state().rewindManager().INTERVAL_CYCLES[interval] <= instance().state().rewindManager().HORIZON_CYCLES[i]) { found = true; @@ -1023,18 +1017,12 @@ void DeveloperDialog::handleInterval() bool found = false; Int32 i; - // handle illegal values - if(interval == -1) - interval = 0; - if(horizon == -1) - horizon = 0; - // adapt horizon and size do { for(i = horizon; i < NUM_HORIZONS; ++i) { - if((uInt64)size * instance().state().rewindManager().INTERVAL_CYCLES[interval] + if(uInt64(size) * instance().state().rewindManager().INTERVAL_CYCLES[interval] <= instance().state().rewindManager().HORIZON_CYCLES[i]) { found = true; @@ -1061,12 +1049,6 @@ void DeveloperDialog::handleHorizon() bool found = false; Int32 i; - // handle illegal values - if(interval == -1) - interval = 0; - if(horizon == -1) - horizon = 0; - // adapt interval and size do { From 5439d185a7e61ae7bca83c6fb743a346e9603bc7 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Tue, 12 Dec 2017 21:43:57 +0100 Subject: [PATCH 056/156] rewind buffer resize added --- docs/graphics/options_developer_states.png | Bin 5310 -> 5301 bytes docs/index.html | 4 +- src/common/RewindManager.cxx | 39 +++++------ src/common/RewindManager.hxx | 8 +-- src/debugger/Debugger.cxx | 5 +- src/gui/DeveloperDialog.cxx | 78 +++++++++++++-------- src/gui/DeveloperDialog.hxx | 4 +- 7 files changed, 75 insertions(+), 63 deletions(-) diff --git a/docs/graphics/options_developer_states.png b/docs/graphics/options_developer_states.png index ac09d4d2f69158e4b02ff28f6c6d678e747fd290..04e4563f87e7c7834ef61daa10fb62f9662655a7 100644 GIT binary patch delta 4083 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 diff --git a/docs/index.html b/docs/index.html index 6d53dfff4..d7d340e30 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2484,11 +2484,11 @@
        -<plr.|dev.>rewind <1|0>
        Enables continuous rewind
        -<plr.|dev.>rewind.size <100 - 1000>
        -<plr.|dev.>rewind.size <20 - 1000>
        Defines the rewind buffer size.
        -<plr.|dev.>rewind.uncompressed <100 - 1000>
        -<plr.|dev.>rewind.uncompressed <0 - 1000>
        Defines the uncompressed rewind buffer size. Must be <= rewind buffer size.
        Defines the horizon of the rewind buffer. A large horizon allows going back further in time. To reach the horizon, save states - will be compressed. This means that more and more intermediate + will be compressed (*). This means that more and more intermediate states will be removed and the interval between save states - becomes larger the further they are back in time. + becomes larger the further they are back in time. The very first + save state will not be removed.
        + (*) Compresion only works if 'Uncompressed size' is smaller than + 'Buffer size'.
        -plr.rewind.horizon
        -dev.rewind.horizon
        Control-rRewindRewind 1
        Shift-Control-rUnwindControl-Shift-rRewind 10
        Control-Alt-rRewind all
        Control-yUnwind 1
        Control-Shift-yUnwind 10
        Control-Alt-yUnwind all
        Backquote (`)Alt + Left arrow Cmd + Left arrow
        Rewind by 10 states (pauses emulation)Shift-Alt + Left arrowShift-Cmd + Left arrow
        Rewind all states (pauses emulation)Alt + Down arrowCmd + Down arrow
        Unwind by one state (pauses emulation) Alt + Right arrow Cmd + Right arrow
        Unwind by 10 states (pauses emulation)Shift-Alt + Right arrowShift-Cmd + Right arrow
        Unwind all states (pauses emulation)Alt + Up arrowCmd + Up arrow

        UI keys in Text Editing areas (cannot be remapped)

        diff --git a/src/common/LinkedObjectPool.hxx b/src/common/LinkedObjectPool.hxx index d3484bc26..46205c6f1 100644 --- a/src/common/LinkedObjectPool.hxx +++ b/src/common/LinkedObjectPool.hxx @@ -175,26 +175,22 @@ class LinkedObjectPool moveToPrevious(); // if so, move to the previous node } -#if 0 /** - Convenience method to remove a single element from the active list at - position of the iterator +- the offset. + Remove a single element from the active list at position of the iterator. */ - void remove(const_iter i, Int32 offset = 0) { - myPool.splice(myPool.end(), myList, - offset >= 0 ? std::next(i, offset) : std::prev(i, -offset)); + void remove(const_iter i) { + myPool.splice(myPool.end(), myList, i); } -#endif + /** - Convenience method to remove a single element from the active list by - index, offset from the beginning of the list. (ie, '0' means first - element, '1' is second, and so on). + Remove a single element from the active list by index, offset from + the beginning of the list. (ie, '0' means first element, '1' is second, + and so on). */ void remove(uInt32 index) { myPool.splice(myPool.end(), myList, std::next(myList.begin(), index)); } - /** Remove range of elements from the beginning of the active list to the 'current' node. diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index f2314645c..7189e05c8 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -130,59 +130,90 @@ bool RewindManager::addState(const string& message, bool continuous) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool RewindManager::rewindState() +uInt32 RewindManager::rewindState(uInt32 numStates) { - if(!atFirst()) + uInt64 startCycles = myOSystem.console().tia().cycles(); + uInt32 i; + string message; + + for(i = 0; i < numStates; ++i) { - if (!myLastContinuousAdd) - // Set internal current iterator to previous state (back in time), - // since we will now processed this state - myStateList.moveToPrevious(); - myLastContinuousAdd = false; + if(!atFirst()) + { + if(!myLastContinuousAdd) + // Set internal current iterator to previous state (back in time), + // since we will now processed this state + myStateList.moveToPrevious(); + myLastContinuousAdd = false; - //RewindState& lastState = myStateList.current(); + RewindState& state = myStateList.current(); + Serializer& s = state.data; +//cerr << "rewind " << state.count << endl; + s.rewind(); // rewind Serializer internal buffers + } + else + break; + } + if(i) + { RewindState& state = myStateList.current(); Serializer& s = state.data; - string message = getMessage(state); -//cerr << "rewind " << state.count << endl; - s.rewind(); // rewind Serializer internal buffers myStateManager.loadState(s); myOSystem.console().tia().loadDisplay(s); - // Show message indicating the rewind state - myOSystem.frameBuffer().showMessage(message); - return true; + // Get message indicating the rewind state + message = getMessage(startCycles, i); } - myOSystem.frameBuffer().showMessage("Rewind not possible"); - return false; + else + message = "Rewind not possible"; + + myOSystem.frameBuffer().showMessage(message); + return i; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool RewindManager::unwindState() +uInt32 RewindManager::unwindState(uInt32 numStates) { - if(!atLast()) - { - // Set internal current iterator to nextCycles state (forward in time), - // since we've now processed this state - myStateList.moveToNext(); + uInt64 startCycles = myOSystem.console().tia().cycles(); + uInt32 i; + string message; + for(i = 0; i < numStates; ++i) + { + if(!atLast()) + { + // Set internal current iterator to nextCycles state (forward in time), + // since we've now processed this state + myStateList.moveToNext(); + + RewindState& state = myStateList.current(); + Serializer& s = state.data; +//cerr << "unwind " << state.count << endl; + s.rewind(); // rewind Serializer internal buffers + } + else + break; + } + + if(i) + { RewindState& state = myStateList.current(); Serializer& s = state.data; - string message = getMessage(state); -//cerr << "unwind " << state.count << endl; - s.rewind(); // rewind Serializer internal buffers myStateManager.loadState(s); myOSystem.console().tia().loadDisplay(s); - // Show message indicating the rewind state + // Get message indicating the rewind state + message = getMessage(startCycles, i); myOSystem.frameBuffer().showMessage(message); - return true; } - myOSystem.frameBuffer().showMessage("Unwind not possible"); - return false; + else + message = "Unwind not possible"; + + myOSystem.frameBuffer().showMessage(message); + return i; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -191,8 +222,8 @@ void RewindManager::compressStates() uInt64 currentCycles = myOSystem.console().tia().cycles(); double expectedCycles = myInterval * myFactor * (1 + myFactor); double maxError = 1; - uInt32 removeIdx = 0; uInt32 idx = myStateList.size() - 2; + Common::LinkedObjectPool::const_iter removeIter = myStateList.first(); //cerr << "idx: " << idx << endl; // iterate from last but one to first but one @@ -211,7 +242,7 @@ void RewindManager::compressStates() if(error > maxError) { maxError = error; - removeIdx = idx; + removeIter = it; } } --idx; @@ -224,22 +255,23 @@ void RewindManager::compressStates() } else { - myStateList.remove(removeIdx); // remove + myStateList.remove(removeIter); // remove //cerr << "remove " << removeIdx << endl; } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -string RewindManager::getMessage(RewindState& state) +string RewindManager::getMessage(Int64 startCycles, uInt32 numStates) { - Int64 diff = myOSystem.console().tia().cycles() - state.cycles; + RewindState& state = myStateList.current(); + Int64 diff = startCycles - state.cycles; stringstream message; message << (diff >= 0 ? "Rewind" : "Unwind") << " " << getUnitString(diff); - message << " [" << myStateList.currentIdx() << "/" << myStateList.size() << "]"; + // add optional message - if(!state.message.empty()) + if(numStates == 1 && !state.message.empty()) message << " (" << state.message << ")"; return message.str(); diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index f4e67debb..49c0bd1c4 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -99,6 +99,7 @@ class RewindManager }; /** + Initializes state list and calculates compression factor. */ void setup(); @@ -113,14 +114,20 @@ class RewindManager /** Rewind one level of the state list, and display the message associated with that state. + + @param numStates Number of states to rewind + @return Number of states to rewinded */ - bool rewindState(); + uInt32 rewindState(uInt32 numStates = 1); /** Unwind one level of the state list, and display the message associated with that state. + + @param numStates Number of states to unwind + @return Number of states to unwinded */ - bool unwindState(); + uInt32 unwindState(uInt32 numStates = 1); bool atFirst() const { return myStateList.atFirst(); } bool atLast() const { return myStateList.atLast(); } @@ -167,9 +174,17 @@ class RewindManager // frequent (de)-allocations) Common::LinkedObjectPool myStateList; + /** + Remove a save state from the list + */ void compressStates(); - string getMessage(RewindState& state); + /** + Get the message string for the rewind/unwind + + @return The message + */ + string getMessage(Int64 startCycles, uInt32 numStates); private: // Following constructors and assignment operators not supported diff --git a/src/common/StateManager.cxx b/src/common/StateManager.cxx index d31c56aaf..2ffcbbec6 100644 --- a/src/common/StateManager.cxx +++ b/src/common/StateManager.cxx @@ -142,17 +142,17 @@ void StateManager::toggleRewindMode() } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool StateManager::rewindState() +bool StateManager::rewindState(uInt32 numStates) { RewindManager& r = myOSystem.state().rewindManager(); - return r.rewindState(); + return r.rewindState(numStates); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool StateManager::unwindState() +bool StateManager::unwindState(uInt32 numStates) { RewindManager& r = myOSystem.state().rewindManager(); - return r.unwindState(); + return r.unwindState(numStates); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/common/StateManager.hxx b/src/common/StateManager.hxx index 5e7b83c10..910b0e7a9 100644 --- a/src/common/StateManager.hxx +++ b/src/common/StateManager.hxx @@ -74,12 +74,12 @@ class StateManager /** Rewinds one state; this uses the RewindManager for its functionality. */ - bool rewindState(); + bool rewindState(uInt32 numStates = 1); /** Unwinds one state; this uses the RewindManager for its functionality. */ - bool unwindState(); + bool unwindState(uInt32 numStates = 1); /** Updates the state of the system based on the currently active mode. diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index 38f462bbe..08a2c251f 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -526,7 +526,7 @@ void Debugger::updateRewindbuttons(const RewindManager& r) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -uInt16 Debugger::windStates(uInt16 states, bool unwind, string& message) +uInt16 Debugger::windStates(uInt16 numStates, bool unwind, string& message) { RewindManager& r = myOSystem.state().rewindManager(); @@ -534,13 +534,8 @@ uInt16 Debugger::windStates(uInt16 states, bool unwind, string& message) unlockBankswitchState(); - uInt16 winds = 0; uInt64 startCycles = myOSystem.console().tia().cycles(); - for(uInt16 i = 0; i < states; ++i) - if(unwind ? r.unwindState() : r.rewindState()) - winds++; - else - break; + uInt16 winds = unwind ? r.unwindState(numStates) : r.rewindState(numStates); message = r.getUnitString(myOSystem.console().tia().cycles() - startCycles); lockBankswitchState(); @@ -550,15 +545,15 @@ uInt16 Debugger::windStates(uInt16 states, bool unwind, string& message) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -uInt16 Debugger::rewindStates(const uInt16 states, string& message) +uInt16 Debugger::rewindStates(const uInt16 numStates, string& message) { - return windStates(states, false, message); + return windStates(numStates, false, message); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -uInt16 Debugger::unwindStates(const uInt16 states, string& message) +uInt16 Debugger::unwindStates(const uInt16 numStates, string& message) { - return windStates(states, true, message); + return windStates(numStates, true, message); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/debugger/Debugger.hxx b/src/debugger/Debugger.hxx index 01ba1f890..f3fdcd30c 100644 --- a/src/debugger/Debugger.hxx +++ b/src/debugger/Debugger.hxx @@ -262,8 +262,8 @@ class Debugger : public DialogContainer int trace(); void nextScanline(int lines); void nextFrame(int frames); - uInt16 rewindStates(const uInt16 states, string& message); - uInt16 unwindStates(const uInt16 states, string& message); + uInt16 rewindStates(const uInt16 numStates, string& message); + uInt16 unwindStates(const uInt16 numStates, string& message); void toggleBreakPoint(uInt16 bp); @@ -321,7 +321,7 @@ class Debugger : public DialogContainer private: // rewind/unwind n states - uInt16 windStates(uInt16 states, bool unwind, string& message); + uInt16 windStates(uInt16 numStates, bool unwind, string& message); // update the rewind/unwind button state void updateRewindbuttons(const RewindManager& r); diff --git a/src/debugger/DebuggerParser.cxx b/src/debugger/DebuggerParser.cxx index 58837e270..9f90d3570 100644 --- a/src/debugger/DebuggerParser.cxx +++ b/src/debugger/DebuggerParser.cxx @@ -2177,7 +2177,6 @@ void DebuggerParser::executeWatch() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // wrapper function for rewind/unwind commands -// TODO: return and output (formatted) cycles void DebuggerParser::executeWinds(bool unwind) { uInt16 states; diff --git a/src/debugger/gui/DebuggerDialog.cxx b/src/debugger/gui/DebuggerDialog.cxx index 8f30cfc06..8d6a07d95 100644 --- a/src/debugger/gui/DebuggerDialog.cxx +++ b/src/debugger/gui/DebuggerDialog.cxx @@ -97,8 +97,18 @@ void DebuggerDialog::handleKeyDown(StellaKey key, StellaMod mod) switch(key) { case KBDK_R: - if(!instance().eventHandler().kbdShift(mod)) + if(instance().eventHandler().kbdAlt(mod)) + doRewindAll(); + else if(instance().eventHandler().kbdShift(mod)) + doRewind10(); + else doRewind(); + break; + case KBDK_Y: + if(instance().eventHandler().kbdAlt(mod)) + doUnwindAll(); + else if(instance().eventHandler().kbdShift(mod)) + doUnwind10(); else doUnwind(); break; @@ -212,6 +222,30 @@ void DebuggerDialog::doUnwind() instance().debugger().parser().run("unwind"); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void DebuggerDialog::doRewind10() +{ + instance().debugger().parser().run("rewind #10"); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void DebuggerDialog::doUnwind10() +{ + instance().debugger().parser().run("unwind #10"); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void DebuggerDialog::doRewindAll() +{ + instance().debugger().parser().run("rewind #1000"); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void DebuggerDialog::doUnwindAll() +{ + instance().debugger().parser().run("unwind #1000"); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DebuggerDialog::doExitDebugger() { diff --git a/src/debugger/gui/DebuggerDialog.hxx b/src/debugger/gui/DebuggerDialog.hxx index 0442870e1..996f198dc 100644 --- a/src/debugger/gui/DebuggerDialog.hxx +++ b/src/debugger/gui/DebuggerDialog.hxx @@ -84,6 +84,10 @@ class DebuggerDialog : public Dialog void doAdvance(); void doRewind(); void doUnwind(); + void doRewind10(); + void doUnwind10(); + void doRewindAll(); + void doUnwindAll(); void doExitDebugger(); void doExitRom(); diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index ac3957a8d..6d591b81d 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -298,16 +298,28 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, bool state) { switch(key) { - case KBDK_LEFT: // Alt-left rewinds states + case KBDK_LEFT: // Alt-left(-shift) rewinds 1(10) states myOSystem.frameBuffer().resetPauseDelay(); setEventState(S_PAUSE); - myOSystem.state().rewindState(); + myOSystem.state().rewindState((kbdShift(mod) && state) ? 10 : 1); break; - case KBDK_RIGHT: // Alt-right unwinds states + case KBDK_RIGHT: // Alt-right(-shift) unwinds 1(10) states myOSystem.frameBuffer().resetPauseDelay(); setEventState(S_PAUSE); - myOSystem.state().unwindState(); + myOSystem.state().unwindState((kbdShift(mod) && state) ? 10 : 1); + break; + + case KBDK_DOWN: // Alt-down rewinds to start of list + myOSystem.frameBuffer().resetPauseDelay(); + setEventState(S_PAUSE); + myOSystem.state().rewindState(1000); + break; + + case KBDK_UP: // Alt-up rewinds to end of list + myOSystem.frameBuffer().resetPauseDelay(); + setEventState(S_PAUSE); + myOSystem.state().unwindState(1000); break; default: From 3f00d2fb86bdb4e1037574adb25a5e82b12cd0cc Mon Sep 17 00:00:00 2001 From: thrust26 Date: Thu, 14 Dec 2017 20:30:08 +0100 Subject: [PATCH 063/156] feature doc updated --- docs/index.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/index.html b/docs/index.html index 4c8ac198a..769622485 100644 --- a/docs/index.html +++ b/docs/index.html @@ -282,7 +282,7 @@ AtariVox and SaveKey controllers, as well as FLASH support in various cartridge schemes
      • Supports all known bankswitching schemes (let us know if there's one we missed)
      • -
      • Supports DPC+ bankswitching scheme from the Harmony Cart, +
      • Supports DPC+/CDF bankswitching schemes from the Harmony Cart, including partial emulation of the ARM processor
      • Supports cartridge autodetection for almost all bankswitching schemes
      • Supports Supercharger single-load and multi-load games
      • @@ -295,6 +295,7 @@
      • TIA emulation supports full collision checking, with ability to disable TIA sprites and collisions for each object separately
      • Full system state save/load functionality
      • +
      • Automatic save state creation which allows moving back and forth in the recorded timeline
      • Cross-platform UI including a built-in ROM launcher frontend
      • Built-in extensive debugger, including static analysis with the Distella disassembler and dynamic analysis at runtime by tracking code/graphics/data sections, and @@ -3098,7 +3099,8 @@
      • Continuous rewind When continuous rewind is enabled, Stella will automatically - create new save states in the interval described below.
        + create new save states in the interval described below. The user + can then navigate back and forth within the recorded timeline.
        Note: This buffer is identical with the one described in Debugger/Global Buttons. It is independent from the save states manually created From 418b0f07ae644f7b620277491fe2d531d041bf2f Mon Sep 17 00:00:00 2001 From: thrust26 Date: Thu, 14 Dec 2017 21:18:31 +0100 Subject: [PATCH 064/156] frame timed interval checks aligned to actual scanlines/frame code cleanup --- src/common/RewindManager.cxx | 22 +++++++++++++++------- src/common/RewindManager.hxx | 32 +++++++++++--------------------- 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index 7189e05c8..e9c5a04ec 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -24,7 +24,6 @@ #include "RewindManager.hxx" -//static int count = 1; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - RewindManager::RewindManager(OSystem& system, StateManager& statemgr) : myOSystem(system), @@ -99,7 +98,17 @@ bool RewindManager::addState(const string& message, bool continuous) { // check if the current state has the right interval from the last state RewindState& lastState = myStateList.current(); - if(myOSystem.console().tia().cycles() - lastState.cycles < myInterval) + uInt32 interval = myInterval; + + // adjust frame timed intervals to actual scanlines (vs 262) + if(interval >= 76 * 262 && interval <= 76 * 262 * 30) + { + const uInt32 scanlines = std::max(myOSystem.console().tia().scanlinesLastFrame(), 240u); + + interval = interval * scanlines / 262; + } + + if(myOSystem.console().tia().cycles() - lastState.cycles < interval) return false; } @@ -121,8 +130,6 @@ bool RewindManager::addState(const string& message, bool continuous) { state.message = message; state.cycles = myOSystem.console().tia().cycles(); - //state.count = count++; -//cerr << "add " << state.count << endl; myLastContinuousAdd = continuous; return true; } @@ -144,11 +151,13 @@ uInt32 RewindManager::rewindState(uInt32 numStates) // Set internal current iterator to previous state (back in time), // since we will now processed this state myStateList.moveToPrevious(); - myLastContinuousAdd = false; + else + // except fif the last state was added automatically, + // because that already happened one interval before + myLastContinuousAdd = false; RewindState& state = myStateList.current(); Serializer& s = state.data; -//cerr << "rewind " << state.count << endl; s.rewind(); // rewind Serializer internal buffers } else @@ -190,7 +199,6 @@ uInt32 RewindManager::unwindState(uInt32 numStates) RewindState& state = myStateList.current(); Serializer& s = state.data; -//cerr << "unwind " << state.count << endl; s.rewind(); // rewind Serializer internal buffers } else diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index 49c0bd1c4..7933e1298 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -47,7 +47,8 @@ class RewindManager public: static constexpr int NUM_INTERVALS = 7; - const uInt32 INTERVAL_CYCLES[NUM_INTERVALS] = { + // cycle values for the intervals + static constexpr uInt32 INTERVAL_CYCLES[NUM_INTERVALS] = { 76 * 262, 76 * 262 * 3, 76 * 262 * 10, @@ -56,11 +57,7 @@ class RewindManager 76 * 262 * 60 * 3, 76 * 262 * 60 * 10 }; - /*static const int NUM_INTERVALS = 6; - const string INTERVALS[NUM_INTERVALS] = { "1 scanline", "50 scanlines", "1 frame", "10 frames", - "1 second", "10 seconds" }; - const uInt32 INTERVAL_CYCLES[NUM_INTERVALS] = { 76, 76 * 50, 76 * 262, 76 * 262 * 10, - 76 * 262 * 60, 76 * 262 * 60 * 10 };*/ + // settings values for the intervals const string INT_SETTINGS[NUM_INTERVALS] = { "1f", "3f", @@ -72,7 +69,8 @@ class RewindManager }; static constexpr int NUM_HORIZONS = 8; - const uInt64 HORIZON_CYCLES[NUM_HORIZONS] = { + // cycle values for the horzions + static constexpr uInt64 HORIZON_CYCLES[NUM_HORIZONS] = { 76 * 262 * 60 * 3, 76 * 262 * 60 * 10, 76 * 262 * 60 * 30, @@ -82,11 +80,7 @@ class RewindManager uInt64(76) * 262 * 60 * 60 * 30, uInt64(76) * 262 * 60 * 60 * 60 }; - /*static const int NUM_HORIZONS = 7; - const string HORIZONS[NUM_HORIZONS] = { "~1 frame", "~10 frames", "~1 second", "~10 seconds", - "~1 minute", "~10 minutes", "~60 minutes" }; - const uInt64 HORIZON_CYCLES[NUM_HORIZONS] = { 76 * 262, 76 * 262 * 10, 76 * 262 * 60, 76 * 262 * 60 * 10, - 76 * 262 * 60 * 60, 76 * 262 * 60 * 60 * 10, uInt64(76) * 262 * 60 * 60 * 60 };*/ + // settings values for the horzions const string HOR_SETTINGS[NUM_HORIZONS] = { "3s", "10s", @@ -140,9 +134,6 @@ class RewindManager string getUnitString(Int64 cycles); private: - // Maximum number of states to save - static constexpr uInt32 INITIAL_SIZE = 100; - OSystem& myOSystem; StateManager& myStateManager; @@ -154,10 +145,9 @@ class RewindManager bool myLastContinuousAdd; struct RewindState { - Serializer data; - string message; - uInt64 cycles; - //int count; // TODO - remove this + Serializer data; // actual save state + string message; // describes save state origin + uInt64 cycles; // cycles since emulation started // We do nothing on object instantiation or copy // The goal of LinkedObjectPool is to not do any allocations at all @@ -166,13 +156,13 @@ class RewindManager // Output object info; used for debugging only friend ostream& operator<<(ostream& os, const RewindState& s) { - return os << "msg: " << s.message << " cycle: " << s.cycles; // << " count: " << s.count; + return os << "msg: " << s.message << " cycle: " << s.cycles; } }; // The linked-list to store states (internally it takes care of reducing // frequent (de)-allocations) - Common::LinkedObjectPool myStateList; + Common::LinkedObjectPool myStateList; /** Remove a save state from the list From fd5c026034873b46ed68bb8aa62e31002e715919 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Thu, 14 Dec 2017 19:46:37 -0330 Subject: [PATCH 065/156] Relaxed constexpr usage in RewindManager, so code compiles in Linux and OSX. - the code was using C++17 features, and we only support C++14 for now --- src/common/RewindManager.hxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index 7933e1298..e7a17bde6 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -48,7 +48,7 @@ class RewindManager public: static constexpr int NUM_INTERVALS = 7; // cycle values for the intervals - static constexpr uInt32 INTERVAL_CYCLES[NUM_INTERVALS] = { + const uInt32 INTERVAL_CYCLES[NUM_INTERVALS] = { 76 * 262, 76 * 262 * 3, 76 * 262 * 10, @@ -70,7 +70,7 @@ class RewindManager static constexpr int NUM_HORIZONS = 8; // cycle values for the horzions - static constexpr uInt64 HORIZON_CYCLES[NUM_HORIZONS] = { + const uInt64 HORIZON_CYCLES[NUM_HORIZONS] = { 76 * 262 * 60 * 3, 76 * 262 * 60 * 10, 76 * 262 * 60 * 30, From 31da99f48b3b0928550d1785eb9d252b720d91f4 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Thu, 14 Dec 2017 21:04:19 -0330 Subject: [PATCH 066/156] Convert some raw enum to C++11 'enum class' in EventHandlerConstants. --- src/common/EventHandlerSDL2.cxx | 22 ++++++++------ src/emucore/EventHandler.cxx | 43 ++++++++++++++------------- src/emucore/EventHandler.hxx | 6 ++-- src/emucore/EventHandlerConstants.hxx | 30 +++++++++---------- src/emucore/EventJoyHandler.cxx | 26 ++++++++-------- src/gui/ContextMenu.cxx | 2 +- src/gui/ContextMenu.hxx | 2 +- src/gui/Dialog.cxx | 2 +- src/gui/Dialog.hxx | 3 +- src/gui/DialogContainer.cxx | 18 +++++------ src/gui/DialogContainer.hxx | 2 +- src/gui/EventMappingWidget.cxx | 10 +++---- src/gui/EventMappingWidget.hxx | 2 +- src/gui/InputDialog.cxx | 2 +- src/gui/InputDialog.hxx | 2 +- src/gui/Widget.hxx | 2 +- 16 files changed, 90 insertions(+), 84 deletions(-) diff --git a/src/common/EventHandlerSDL2.cxx b/src/common/EventHandlerSDL2.cxx index 08120242d..eb4e0de1d 100644 --- a/src/common/EventHandlerSDL2.cxx +++ b/src/common/EventHandlerSDL2.cxx @@ -71,11 +71,11 @@ void EventHandlerSDL2::pollEvent() switch(myEvent.button.button) { case SDL_BUTTON_LEFT: - handleMouseButtonEvent(pressed ? EVENT_LBUTTONDOWN : EVENT_LBUTTONUP, + handleMouseButtonEvent(pressed ? MouseButton::LBUTTONDOWN : MouseButton::LBUTTONUP, myEvent.button.x, myEvent.button.y); break; case SDL_BUTTON_RIGHT: - handleMouseButtonEvent(pressed ? EVENT_RBUTTONDOWN : EVENT_RBUTTONUP, + handleMouseButtonEvent(pressed ? MouseButton::RBUTTONDOWN : MouseButton::RBUTTONUP, myEvent.button.x, myEvent.button.y); break; } @@ -87,9 +87,9 @@ void EventHandlerSDL2::pollEvent() int x, y; SDL_GetMouseState(&x, &y); // we need mouse position too if(myEvent.wheel.y < 0) - handleMouseButtonEvent(EVENT_WHEELDOWN, x, y); + handleMouseButtonEvent(MouseButton::WHEELDOWN, x, y); else if(myEvent.wheel.y > 0) - handleMouseButtonEvent(EVENT_WHEELUP, x, y); + handleMouseButtonEvent(MouseButton::WHEELUP, x, y); break; } @@ -112,11 +112,15 @@ void EventHandlerSDL2::pollEvent() case SDL_JOYHATMOTION: { int v = myEvent.jhat.value, value = 0; - if(v & SDL_HAT_UP) value |= EVENT_HATUP_M; - if(v & SDL_HAT_DOWN) value |= EVENT_HATDOWN_M; - if(v & SDL_HAT_LEFT) value |= EVENT_HATLEFT_M; - if(v & SDL_HAT_RIGHT) value |= EVENT_HATRIGHT_M; - if(v == SDL_HAT_CENTERED) value = EVENT_HATCENTER_M; + if(v & SDL_HAT_CENTERED) + value = EVENT_HATCENTER_M; + else + { + if(v & SDL_HAT_UP) value |= EVENT_HATUP_M; + if(v & SDL_HAT_DOWN) value |= EVENT_HATDOWN_M; + if(v & SDL_HAT_LEFT) value |= EVENT_HATLEFT_M; + if(v & SDL_HAT_RIGHT) value |= EVENT_HATRIGHT_M; + } handleJoyHatEvent(myEvent.jhat.which, myEvent.jhat.hat, value); break; // SDL_JOYHATMOTION diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index 6d591b81d..14b58db23 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -671,16 +671,16 @@ void EventHandler::handleMouseButtonEvent(MouseButton b, int x, int y) { switch(b) { - case EVENT_LBUTTONDOWN: + case MouseButton::LBUTTONDOWN: myEvent.set(Event::MouseButtonLeftValue, 1); break; - case EVENT_LBUTTONUP: + case MouseButton::LBUTTONUP: myEvent.set(Event::MouseButtonLeftValue, 0); break; - case EVENT_RBUTTONDOWN: + case MouseButton::RBUTTONDOWN: myEvent.set(Event::MouseButtonRightValue, 1); break; - case EVENT_RBUTTONUP: + case MouseButton::RBUTTONUP: myEvent.set(Event::MouseButtonRightValue, 0); break; default: @@ -869,29 +869,29 @@ void EventHandler::handleJoyHatEvent(int stick, int hat, int value) // when we get a diagonal hat event if(myState == S_EMULATE) { - handleEvent(joy->hatTable[hat][EVENT_HATUP][kEmulationMode], + handleEvent(joy->hatTable[hat][int(JoyHat::UP)][kEmulationMode], value & EVENT_HATUP_M); - handleEvent(joy->hatTable[hat][EVENT_HATRIGHT][kEmulationMode], + handleEvent(joy->hatTable[hat][int(JoyHat::RIGHT)][kEmulationMode], value & EVENT_HATRIGHT_M); - handleEvent(joy->hatTable[hat][EVENT_HATDOWN][kEmulationMode], + handleEvent(joy->hatTable[hat][int(JoyHat::DOWN)][kEmulationMode], value & EVENT_HATDOWN_M); - handleEvent(joy->hatTable[hat][EVENT_HATLEFT][kEmulationMode], + handleEvent(joy->hatTable[hat][int(JoyHat::LEFT)][kEmulationMode], value & EVENT_HATLEFT_M); } else if(myOverlay) { if(value == EVENT_HATCENTER_M) - myOverlay->handleJoyHatEvent(stick, hat, EVENT_HATCENTER); + myOverlay->handleJoyHatEvent(stick, hat, JoyHat::CENTER); else { if(value & EVENT_HATUP_M) - myOverlay->handleJoyHatEvent(stick, hat, EVENT_HATUP); + myOverlay->handleJoyHatEvent(stick, hat, JoyHat::UP); if(value & EVENT_HATRIGHT_M) - myOverlay->handleJoyHatEvent(stick, hat, EVENT_HATRIGHT); + myOverlay->handleJoyHatEvent(stick, hat, JoyHat::RIGHT); if(value & EVENT_HATDOWN_M) - myOverlay->handleJoyHatEvent(stick, hat, EVENT_HATDOWN); + myOverlay->handleJoyHatEvent(stick, hat, JoyHat::DOWN); if(value & EVENT_HATLEFT_M) - myOverlay->handleJoyHatEvent(stick, hat, EVENT_HATLEFT); + myOverlay->handleJoyHatEvent(stick, hat, JoyHat::LEFT); } } } @@ -1354,12 +1354,13 @@ void EventHandler::setActionMappings(EventMode mode) { buf.str(""); buf << "J" << stick << "/H" << hat; - switch(dir) + switch(JoyHat(dir)) { - case EVENT_HATUP: buf << "/up"; break; - case EVENT_HATDOWN: buf << "/down"; break; - case EVENT_HATLEFT: buf << "/left"; break; - case EVENT_HATRIGHT: buf << "/right"; break; + case JoyHat::UP: buf << "/up"; break; + case JoyHat::DOWN: buf << "/down"; break; + case JoyHat::LEFT: buf << "/left"; break; + case JoyHat::RIGHT: buf << "/right"; break; + case JoyHat::CENTER: break; } if(key == "") key = key + buf.str(); @@ -1563,7 +1564,7 @@ bool EventHandler::addJoyButtonMapping(Event::Type event, EventMode mode, // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool EventHandler::addJoyHatMapping(Event::Type event, EventMode mode, - int stick, int hat, int value, + int stick, int hat, JoyHat value, bool updateMenus) { #ifdef JOYSTICK_SUPPORT @@ -1571,9 +1572,9 @@ bool EventHandler::addJoyHatMapping(Event::Type event, EventMode mode, if(joy) { if(hat >= 0 && hat < joy->numHats && event < Event::LastType && - value != EVENT_HATCENTER) + value != JoyHat::CENTER) { - joy->hatTable[hat][value][mode] = event; + joy->hatTable[hat][int(value)][mode] = event; if(updateMenus) setActionMappings(mode); return true; diff --git a/src/emucore/EventHandler.hxx b/src/emucore/EventHandler.hxx index 9fa9645ee..13dd55c36 100644 --- a/src/emucore/EventHandler.hxx +++ b/src/emucore/EventHandler.hxx @@ -203,9 +203,9 @@ class EventHandler const StellaJoystick* joy = myJoyHandler->joy(stick); return joy ? joy->btnTable[button][mode] : Event::NoType; } - Event::Type eventForJoyHat(int stick, int hat, int value, EventMode mode) const { + Event::Type eventForJoyHat(int stick, int hat, JoyHat value, EventMode mode) const { const StellaJoystick* joy = myJoyHandler->joy(stick); - return joy ? joy->hatTable[hat][value][mode] : Event::NoType; + return joy ? joy->hatTable[hat][int(value)][mode] : Event::NoType; } Event::Type eventAtIndex(int idx, EventMode mode) const; @@ -267,7 +267,7 @@ class EventHandler 'adds', in which case it's delayed until the end */ bool addJoyHatMapping(Event::Type event, EventMode mode, - int stick, int hat, int value, + int stick, int hat, JoyHat value, bool updateMenus = true); /** diff --git a/src/emucore/EventHandlerConstants.hxx b/src/emucore/EventHandlerConstants.hxx index 8a66b88e8..fee58c5f2 100644 --- a/src/emucore/EventHandlerConstants.hxx +++ b/src/emucore/EventHandlerConstants.hxx @@ -15,28 +15,27 @@ // this file, and for a DISCLAIMER OF ALL WARRANTIES. //============================================================================ -// FIXME - perhaps add to namespace or something - #ifndef EVENTHANDLER_CONSTANTS_HXX #define EVENTHANDLER_CONSTANTS_HXX -enum MouseButton { - EVENT_LBUTTONDOWN, - EVENT_LBUTTONUP, - EVENT_RBUTTONDOWN, - EVENT_RBUTTONUP, - EVENT_WHEELDOWN, - EVENT_WHEELUP +enum class MouseButton { + LBUTTONDOWN, + LBUTTONUP, + RBUTTONDOWN, + RBUTTONUP, + WHEELDOWN, + WHEELUP }; -enum JoyHat { - EVENT_HATUP = 0, // make sure these are set correctly, - EVENT_HATDOWN = 1, // since they'll be used as array indices - EVENT_HATLEFT = 2, - EVENT_HATRIGHT = 3, - EVENT_HATCENTER = 4 +enum class JoyHat { + UP = 0, // make sure these are set correctly, + DOWN = 1, // since they'll be used as array indices + LEFT = 2, + RIGHT = 3, + CENTER = 4 }; +// TODO - add bitmask class for 'enum class' and convert this enum JoyHatMask { EVENT_HATUP_M = 1<<0, EVENT_HATDOWN_M = 1<<1, @@ -45,6 +44,7 @@ enum JoyHatMask { EVENT_HATCENTER_M = 1<<4 }; +// TODO - make this 'enum class' somehow enum EventMode { kEmulationMode = 0, // make sure these are set correctly, kMenuMode = 1, // since they'll be used as array indices diff --git a/src/emucore/EventJoyHandler.cxx b/src/emucore/EventJoyHandler.cxx index 61f3b6a25..8f35f1d81 100644 --- a/src/emucore/EventJoyHandler.cxx +++ b/src/emucore/EventJoyHandler.cxx @@ -472,7 +472,7 @@ void EventHandler::JoystickHandler::setStickDefaultMapping(int stick, if(eraseAll || b_event == event) handler.addJoyButtonMapping(b_event, mode, b_stick, b_button, false); }; - auto setDefaultHat = [&](int h_stick, int h_hat, int h_dir, Event::Type h_event) + auto setDefaultHat = [&](int h_stick, int h_hat, JoyHat h_dir, Event::Type h_event) { if(eraseAll || h_event == event) handler.addJoyHatMapping(h_event, mode, h_stick, h_hat, h_dir, false); @@ -492,11 +492,11 @@ void EventHandler::JoystickHandler::setStickDefaultMapping(int stick, // Left joystick (assume joystick zero, button zero) setDefaultBtn( 0, 0, Event::JoystickZeroFire ); // Left joystick left/right directions (assume joystick zero and hat 0) - setDefaultHat( 0, 0, EVENT_HATLEFT, Event::JoystickZeroLeft ); - setDefaultHat( 0, 0, EVENT_HATRIGHT, Event::JoystickZeroRight ); + setDefaultHat( 0, 0, JoyHat::LEFT, Event::JoystickZeroLeft ); + setDefaultHat( 0, 0, JoyHat::RIGHT, Event::JoystickZeroRight ); // Left joystick up/down directions (assume joystick zero and hat 0) - setDefaultHat( 0, 0, EVENT_HATUP, Event::JoystickZeroUp ); - setDefaultHat( 0, 0, EVENT_HATDOWN, Event::JoystickZeroDown ); + setDefaultHat( 0, 0, JoyHat::UP, Event::JoystickZeroUp ); + setDefaultHat( 0, 0, JoyHat::DOWN, Event::JoystickZeroDown ); } else if(stick == 1) { @@ -509,11 +509,11 @@ void EventHandler::JoystickHandler::setStickDefaultMapping(int stick, // Right joystick (assume joystick one, button zero) setDefaultBtn( 1, 0, Event::JoystickOneFire ); // Right joystick left/right directions (assume joystick one and hat 0) - setDefaultHat( 1, 0, EVENT_HATLEFT, Event::JoystickOneLeft ); - setDefaultHat( 1, 0, EVENT_HATRIGHT, Event::JoystickOneRight ); + setDefaultHat( 1, 0, JoyHat::LEFT, Event::JoystickOneLeft ); + setDefaultHat( 1, 0, JoyHat::RIGHT, Event::JoystickOneRight ); // Right joystick up/down directions (assume joystick one and hat 0) - setDefaultHat( 1, 0, EVENT_HATUP, Event::JoystickOneUp ); - setDefaultHat( 1, 0, EVENT_HATDOWN, Event::JoystickOneDown ); + setDefaultHat( 1, 0, JoyHat::UP, Event::JoystickOneUp ); + setDefaultHat( 1, 0, JoyHat::DOWN, Event::JoystickOneDown ); } break; @@ -528,10 +528,10 @@ void EventHandler::JoystickHandler::setStickDefaultMapping(int stick, // Left joystick (assume joystick zero, button zero) setDefaultBtn( 0, 0, Event::UISelect ); - setDefaultHat( 0, 0, EVENT_HATLEFT, Event::UILeft ); - setDefaultHat( 0, 0, EVENT_HATRIGHT, Event::UIRight ); - setDefaultHat( 0, 0, EVENT_HATUP, Event::UIUp ); - setDefaultHat( 0, 0, EVENT_HATDOWN, Event::UIDown ); + setDefaultHat( 0, 0, JoyHat::LEFT, Event::UILeft ); + setDefaultHat( 0, 0, JoyHat::RIGHT, Event::UIRight ); + setDefaultHat( 0, 0, JoyHat::UP, Event::UIUp ); + setDefaultHat( 0, 0, JoyHat::DOWN, Event::UIDown ); } break; diff --git a/src/gui/ContextMenu.cxx b/src/gui/ContextMenu.cxx index 2146ebd4e..ea7915503 100644 --- a/src/gui/ContextMenu.cxx +++ b/src/gui/ContextMenu.cxx @@ -297,7 +297,7 @@ void ContextMenu::handleJoyAxis(int stick, int axis, int value) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool ContextMenu::handleJoyHat(int stick, int hat, int value) +bool ContextMenu::handleJoyHat(int stick, int hat, JoyHat value) { handleEvent(instance().eventHandler().eventForJoyHat(stick, hat, value, kMenuMode)); return true; diff --git a/src/gui/ContextMenu.hxx b/src/gui/ContextMenu.hxx index 2c9d760ef..bfc2f2147 100644 --- a/src/gui/ContextMenu.hxx +++ b/src/gui/ContextMenu.hxx @@ -89,7 +89,7 @@ class ContextMenu : public Dialog, public CommandSender void handleKeyDown(StellaKey key, StellaMod mod) override; void handleJoyDown(int stick, int button) override; void handleJoyAxis(int stick, int axis, int value) override; - bool handleJoyHat(int stick, int hat, int value) override; + bool handleJoyHat(int stick, int hat, JoyHat value) override; void handleEvent(Event::Type e); void drawDialog() override; diff --git a/src/gui/Dialog.cxx b/src/gui/Dialog.cxx index 30f2241d9..63c9c3be8 100644 --- a/src/gui/Dialog.cxx +++ b/src/gui/Dialog.cxx @@ -522,7 +522,7 @@ void Dialog::handleJoyAxis(int stick, int axis, int value) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool Dialog::handleJoyHat(int stick, int hat, int value) +bool Dialog::handleJoyHat(int stick, int hat, JoyHat value) { Event::Type e = instance().eventHandler().eventForJoyHat(stick, hat, value, kMenuMode); diff --git a/src/gui/Dialog.hxx b/src/gui/Dialog.hxx index 39558fc9d..0ffa0cc47 100644 --- a/src/gui/Dialog.hxx +++ b/src/gui/Dialog.hxx @@ -31,6 +31,7 @@ class CommandSender; #include "Widget.hxx" #include "GuiObject.hxx" #include "StellaKeys.hxx" +#include "EventHandlerConstants.hxx" #include "bspf.hxx" /** @@ -93,7 +94,7 @@ class Dialog : public GuiObject virtual void handleJoyDown(int stick, int button); virtual void handleJoyUp(int stick, int button); virtual void handleJoyAxis(int stick, int axis, int value); - virtual bool handleJoyHat(int stick, int hat, int value); + virtual bool handleJoyHat(int stick, int hat, JoyHat value); virtual void handleCommand(CommandSender* sender, int cmd, int data, int id) override; Widget* findWidget(int x, int y) const; // Find the widget at pos x,y if any diff --git a/src/gui/DialogContainer.cxx b/src/gui/DialogContainer.cxx index 8c5415cc2..811f5615a 100644 --- a/src/gui/DialogContainer.cxx +++ b/src/gui/DialogContainer.cxx @@ -205,11 +205,11 @@ void DialogContainer::handleMouseButtonEvent(MouseButton b, int x, int y) Dialog* activeDialog = myDialogStack.top(); activeDialog->surface().translateCoords(x, y); - int button = (b == EVENT_LBUTTONDOWN || b == EVENT_LBUTTONUP) ? 1 : 2; + int button = (b == MouseButton::LBUTTONDOWN || b == MouseButton::LBUTTONUP) ? 1 : 2; switch(b) { - case EVENT_LBUTTONDOWN: - case EVENT_RBUTTONDOWN: + case MouseButton::LBUTTONDOWN: + case MouseButton::RBUTTONDOWN: // If more than two clicks have been recorded, we start over if(myLastClick.count == 2) { @@ -249,8 +249,8 @@ void DialogContainer::handleMouseButtonEvent(MouseButton b, int x, int y) button, myLastClick.count); break; - case EVENT_LBUTTONUP: - case EVENT_RBUTTONUP: + case MouseButton::LBUTTONUP: + case MouseButton::RBUTTONUP: activeDialog->handleMouseUp(x - activeDialog->_x, y - activeDialog->_y, button, myLastClick.count); @@ -258,11 +258,11 @@ void DialogContainer::handleMouseButtonEvent(MouseButton b, int x, int y) myCurrentMouseDown.button = -1; break; - case EVENT_WHEELUP: + case MouseButton::WHEELUP: activeDialog->handleMouseWheel(x - activeDialog->_x, y - activeDialog->_y, -1); break; - case EVENT_WHEELDOWN: + case MouseButton::WHEELDOWN: activeDialog->handleMouseWheel(x - activeDialog->_x, y - activeDialog->_y, 1); break; } @@ -324,11 +324,11 @@ void DialogContainer::handleJoyHatEvent(int stick, int hat, JoyHat value) return; // Only stop firing events if it's the current stick - if(myCurrentHatDown.stick == stick && value == EVENT_HATCENTER) + if(myCurrentHatDown.stick == stick && value == JoyHat::CENTER) { myCurrentHatDown.stick = myCurrentHatDown.hat = -1; } - else if(value != EVENT_HATCENTER) // never repeat the 'center' direction + else if(value != JoyHat::CENTER) // never repeat the 'center' direction { // Now account for repeated hat events (press and hold) myCurrentHatDown.stick = stick; diff --git a/src/gui/DialogContainer.hxx b/src/gui/DialogContainer.hxx index a228d3d33..6a6fa4fdd 100644 --- a/src/gui/DialogContainer.hxx +++ b/src/gui/DialogContainer.hxx @@ -196,7 +196,7 @@ class DialogContainer struct { int stick; int hat; - int value; + JoyHat value; } myCurrentHatDown; uInt64 myHatRepeatTime; diff --git a/src/gui/EventMappingWidget.cxx b/src/gui/EventMappingWidget.cxx index 3c9cf03b5..d3f307bef 100644 --- a/src/gui/EventMappingWidget.cxx +++ b/src/gui/EventMappingWidget.cxx @@ -303,7 +303,7 @@ void EventMappingWidget::handleJoyAxis(int stick, int axis, int value) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool EventMappingWidget::handleJoyHat(int stick, int hat, int value) +bool EventMappingWidget::handleJoyHat(int stick, int hat, JoyHat value) { // Remap joystick hats in remap mode // There are two phases to detection: @@ -312,19 +312,19 @@ bool EventMappingWidget::handleJoyHat(int stick, int hat, int value) if(myRemapStatus && myActionSelected >= 0) { // Detect the first hat event that represents a valid direction - if(myLastStick == -1 && myLastHat == -1 && value != EVENT_HATCENTER) + if(myLastStick == -1 && myLastHat == -1 && value != JoyHat::CENTER) { myLastStick = stick; myLastHat = hat; - myLastValue = value; + myLastValue = int(value); return true; } // Detect the first hat event that matches a previously set // stick and hat, but centers the hat - else if(myLastStick == stick && hat == myLastHat && value == EVENT_HATCENTER) + else if(myLastStick == stick && hat == myLastHat && value == JoyHat::CENTER) { - value = myLastValue; + value = JoyHat(myLastValue); Event::Type event = instance().eventHandler().eventAtIndex(myActionSelected, myEventMode); diff --git a/src/gui/EventMappingWidget.hxx b/src/gui/EventMappingWidget.hxx index b40da07c4..3f53cc6d4 100644 --- a/src/gui/EventMappingWidget.hxx +++ b/src/gui/EventMappingWidget.hxx @@ -60,7 +60,7 @@ class EventMappingWidget : public Widget, public CommandSender bool handleKeyDown(StellaKey key, StellaMod mod) override; void handleJoyDown(int stick, int button) override; void handleJoyAxis(int stick, int axis, int value) override; - bool handleJoyHat(int stick, int hat, int value) override; + bool handleJoyHat(int stick, int hat, JoyHat value) override; void loadConfig() override; void saveConfig(); diff --git a/src/gui/InputDialog.cxx b/src/gui/InputDialog.cxx index c8994c7bc..1c11217a3 100644 --- a/src/gui/InputDialog.cxx +++ b/src/gui/InputDialog.cxx @@ -453,7 +453,7 @@ void InputDialog::handleJoyAxis(int stick, int axis, int value) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool InputDialog::handleJoyHat(int stick, int hat, int value) +bool InputDialog::handleJoyHat(int stick, int hat, JoyHat value) { // Remap joystick hat in remap mode, otherwise pass to parent dialog if(myEmulEventMapper->remapMode()) diff --git a/src/gui/InputDialog.hxx b/src/gui/InputDialog.hxx index b11a3ca1a..44c5b7053 100644 --- a/src/gui/InputDialog.hxx +++ b/src/gui/InputDialog.hxx @@ -46,7 +46,7 @@ class InputDialog : public Dialog void handleKeyDown(StellaKey key, StellaMod mod) override; void handleJoyDown(int stick, int button) override; void handleJoyAxis(int stick, int axis, int value) override; - bool handleJoyHat(int stick, int hat, int value) override; + bool handleJoyHat(int stick, int hat, JoyHat value) override; void handleCommand(CommandSender* sender, int cmd, int data, int id) override; void loadConfig() override; diff --git a/src/gui/Widget.hxx b/src/gui/Widget.hxx index dd40d07fe..7e6dd7ce7 100644 --- a/src/gui/Widget.hxx +++ b/src/gui/Widget.hxx @@ -78,7 +78,7 @@ class Widget : public GuiObject virtual void handleJoyDown(int stick, int button) { } virtual void handleJoyUp(int stick, int button) { } virtual void handleJoyAxis(int stick, int axis, int value) { } - virtual bool handleJoyHat(int stick, int hat, int value) { return false; } + virtual bool handleJoyHat(int stick, int hat, JoyHat value) { return false; } virtual bool handleEvent(Event::Type event) { return false; } void draw() override; From 434d2dfc83e5ce1d6c6ad12187cdf4488916baa2 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Thu, 14 Dec 2017 21:29:45 -0330 Subject: [PATCH 067/156] Converted some raw enum to 'enum class' in FrameBufferConstants. --- src/debugger/gui/AudioWidget.cxx | 8 ++-- src/debugger/gui/BoosterWidget.cxx | 2 +- src/debugger/gui/Cart3EPlusWidget.cxx | 6 +-- src/debugger/gui/Cart3EWidget.cxx | 2 +- src/debugger/gui/Cart4A50Widget.cxx | 6 +-- src/debugger/gui/CartBUSWidget.cxx | 22 +++++----- src/debugger/gui/CartCDFWidget.cxx | 20 ++++----- src/debugger/gui/CartCMWidget.cxx | 6 +-- src/debugger/gui/CartDASHWidget.cxx | 6 +-- src/debugger/gui/CartDPCPlusWidget.cxx | 20 ++++----- src/debugger/gui/CartDPCWidget.cxx | 14 +++--- src/debugger/gui/CartDebugWidget.cxx | 6 +-- src/debugger/gui/CartFA2Widget.cxx | 2 +- src/debugger/gui/CartRamWidget.cxx | 4 +- src/debugger/gui/CpuWidget.cxx | 8 ++-- src/debugger/gui/DataGridWidget.cxx | 2 +- src/debugger/gui/DrivingWidget.cxx | 2 +- src/debugger/gui/GenesisWidget.cxx | 2 +- src/debugger/gui/JoystickWidget.cxx | 2 +- src/debugger/gui/KeyboardWidget.cxx | 2 +- src/debugger/gui/NullControlWidget.hxx | 6 +-- src/debugger/gui/PaddleWidget.cxx | 2 +- src/debugger/gui/RamWidget.cxx | 6 +-- src/debugger/gui/RiotWidget.cxx | 10 ++--- src/debugger/gui/RomListWidget.cxx | 2 +- src/debugger/gui/RomWidget.cxx | 2 +- src/debugger/gui/TiaInfoWidget.cxx | 12 +++--- src/debugger/gui/TiaWidget.cxx | 60 +++++++++++++------------- src/emucore/Console.cxx | 4 +- src/emucore/EventHandler.cxx | 8 ++-- src/emucore/FBSurface.cxx | 10 ++--- src/emucore/FBSurface.hxx | 4 +- src/emucore/FrameBuffer.cxx | 36 ++++++++-------- src/emucore/FrameBuffer.hxx | 2 +- src/emucore/FrameBufferConstants.hxx | 47 ++++++++++---------- src/emucore/OSystem.cxx | 12 +++--- src/gui/AboutDialog.cxx | 12 +++--- src/gui/AudioDialog.cxx | 4 +- src/gui/BrowserDialog.cxx | 6 +-- src/gui/CheckListWidget.cxx | 2 +- src/gui/ComboDialog.cxx | 2 +- src/gui/DeveloperDialog.cxx | 8 ++-- src/gui/EditTextWidget.cxx | 2 +- src/gui/EventMappingWidget.cxx | 2 +- src/gui/GameInfoDialog.cxx | 42 +++++++++--------- src/gui/GlobalPropsDialog.cxx | 26 +++++------ src/gui/HelpDialog.cxx | 6 +-- src/gui/InputDialog.cxx | 8 ++-- src/gui/InputTextDialog.cxx | 4 +- src/gui/JoystickDialog.cxx | 2 +- src/gui/LauncherDialog.cxx | 8 ++-- src/gui/MessageBox.cxx | 2 +- src/gui/PopUpWidget.cxx | 6 +-- src/gui/ProgressDialog.cxx | 2 +- src/gui/RomAuditDialog.cxx | 6 +-- src/gui/SnapshotDialog.cxx | 2 +- src/gui/StringListWidget.cxx | 2 +- src/gui/TabWidget.cxx | 2 +- src/gui/UIDialog.cxx | 8 ++-- src/gui/VideoDialog.cxx | 12 +++--- src/gui/Widget.cxx | 10 ++--- src/gui/Widget.hxx | 16 +++---- 62 files changed, 283 insertions(+), 284 deletions(-) diff --git a/src/debugger/gui/AudioWidget.cxx b/src/debugger/gui/AudioWidget.cxx index da7441ad5..cc865bdab 100644 --- a/src/debugger/gui/AudioWidget.cxx +++ b/src/debugger/gui/AudioWidget.cxx @@ -42,7 +42,7 @@ AudioWidget::AudioWidget(GuiObject* boss, const GUI::Font& lfont, // AudF registers new StaticTextWidget(boss, lfont, xpos, ypos+2, lwidth, fontHeight, - "AUDF", kTextAlignLeft); + "AUDF", TextAlign::Left); xpos += lwidth; myAudF = new DataGridWidget(boss, nfont, xpos, ypos, 2, 1, 2, 5, Common::Base::F_16); @@ -55,13 +55,13 @@ AudioWidget::AudioWidget(GuiObject* boss, const GUI::Font& lfont, new StaticTextWidget(boss, lfont, xpos + col * myAudF->colWidth() + int(myAudF->colWidth() / 2.75), ypos - lineHeight, fontWidth, fontHeight, Common::Base::toString(col, Common::Base::F_16_1), - kTextAlignLeft); + TextAlign::Left); } // AudC registers xpos = 10; ypos += lineHeight + 5; new StaticTextWidget(boss, lfont, xpos, ypos+2, lwidth, fontHeight, - "AUDC", kTextAlignLeft); + "AUDC", TextAlign::Left); xpos += lwidth; myAudC = new DataGridWidget(boss, nfont, xpos + int(myAudF->colWidth() / 2.75), ypos, 2, 1, 1, 4, Common::Base::F_16_1); @@ -72,7 +72,7 @@ AudioWidget::AudioWidget(GuiObject* boss, const GUI::Font& lfont, // AudV registers xpos = 10; ypos += lineHeight + 5; new StaticTextWidget(boss, lfont, xpos, ypos+2, lwidth, fontHeight, - "AUDV", kTextAlignLeft); + "AUDV", TextAlign::Left); xpos += lwidth; myAudV = new DataGridWidget(boss, nfont, xpos + int(myAudF->colWidth() / 2.75), ypos, 2, 1, 1, 4, Common::Base::F_16_1); diff --git a/src/debugger/gui/BoosterWidget.cxx b/src/debugger/gui/BoosterWidget.cxx index eaf4d2fdd..1e19a5cfc 100644 --- a/src/debugger/gui/BoosterWidget.cxx +++ b/src/debugger/gui/BoosterWidget.cxx @@ -29,7 +29,7 @@ BoosterWidget::BoosterWidget(GuiObject* boss, const GUI::Font& font, StaticTextWidget* t; t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth, - fontHeight, label, kTextAlignLeft); + fontHeight, label, TextAlign::Left); xpos += t->getWidth()/2 - 5; ypos += t->getHeight() + 10; myPins[kJUp] = new CheckboxWidget(boss, font, xpos, ypos, "", CheckboxWidget::kCheckActionCmd); diff --git a/src/debugger/gui/Cart3EPlusWidget.cxx b/src/debugger/gui/Cart3EPlusWidget.cxx index 2954bb518..9b78cd470 100644 --- a/src/debugger/gui/Cart3EPlusWidget.cxx +++ b/src/debugger/gui/Cart3EPlusWidget.cxx @@ -63,7 +63,7 @@ Cartridge3EPlusWidget::Cartridge3EPlusWidget( label << "Set segment " << i << " as "; new StaticTextWidget(boss, _font, xpos, ypos, _font.getStringWidth(label.str()), - myFontHeight, label.str(), kTextAlignLeft); + myFontHeight, label.str(), TextAlign::Left); ypos += myLineHeight + 8; xpos += 20; @@ -95,7 +95,7 @@ Cartridge3EPlusWidget::Cartridge3EPlusWidget( label.str(""); label << Common::Base::HEX4 << addr1 << "-" << Common::Base::HEX4 << addr2; t = new StaticTextWidget(boss, _font, xpos_s, ypos_s+2, - _font.getStringWidth(label.str()), myFontHeight, label.str(), kTextAlignLeft); + _font.getStringWidth(label.str()), myFontHeight, label.str(), TextAlign::Left); int xoffset = xpos_s+t->getWidth() + 10; myBankState[2*i] = new EditTextWidget(boss, _font, xoffset, ypos_s, @@ -106,7 +106,7 @@ Cartridge3EPlusWidget::Cartridge3EPlusWidget( label.str(""); label << Common::Base::HEX4 << (addr2 + 1) << "-" << Common::Base::HEX4 << (addr2 + 1 + 0x1FF); new StaticTextWidget(boss, _font, xpos_s, ypos_s+2, - _font.getStringWidth(label.str()), myFontHeight, label.str(), kTextAlignLeft); + _font.getStringWidth(label.str()), myFontHeight, label.str(), TextAlign::Left); myBankState[2*i+1] = new EditTextWidget(boss, _font, xoffset, ypos_s, w - xoffset - 10, myLineHeight, ""); diff --git a/src/debugger/gui/Cart3EWidget.cxx b/src/debugger/gui/Cart3EWidget.cxx index 02fa1147b..0849f52d3 100644 --- a/src/debugger/gui/Cart3EWidget.cxx +++ b/src/debugger/gui/Cart3EWidget.cxx @@ -65,7 +65,7 @@ Cartridge3EWidget::Cartridge3EWidget( << (start+0x7FF) << "): "; new StaticTextWidget(_boss, _font, xpos, ypos, _font.getStringWidth(label.str()), - myFontHeight, label.str(), kTextAlignLeft); + myFontHeight, label.str(), TextAlign::Left); ypos += myLineHeight + 8; xpos += 40; diff --git a/src/debugger/gui/Cart4A50Widget.cxx b/src/debugger/gui/Cart4A50Widget.cxx index 37aff950f..c702e9fe7 100644 --- a/src/debugger/gui/Cart4A50Widget.cxx +++ b/src/debugger/gui/Cart4A50Widget.cxx @@ -65,7 +65,7 @@ Cartridge4A50Widget::Cartridge4A50Widget( // Lower bank/region configuration xpos = 10; new StaticTextWidget(_boss, _font, xpos, ypos, lwidth, - myFontHeight, lowerlabel, kTextAlignLeft); + myFontHeight, lowerlabel, TextAlign::Left); ypos += myLineHeight + 8; xpos += 40; @@ -85,7 +85,7 @@ Cartridge4A50Widget::Cartridge4A50Widget( // Middle bank/region configuration xpos = 10; ypos += myLineHeight + 14; new StaticTextWidget(_boss, _font, xpos, ypos, lwidth, - myFontHeight, middlelabel, kTextAlignLeft); + myFontHeight, middlelabel, TextAlign::Left); ypos += myLineHeight + 8; xpos += 40; @@ -105,7 +105,7 @@ Cartridge4A50Widget::Cartridge4A50Widget( // High bank/region configuration xpos = 10; ypos += myLineHeight + 14; new StaticTextWidget(_boss, _font, xpos, ypos, lwidth, - myFontHeight, highlabel, kTextAlignLeft); + myFontHeight, highlabel, TextAlign::Left); ypos += myLineHeight + 8; xpos += 40; diff --git a/src/debugger/gui/CartBUSWidget.cxx b/src/debugger/gui/CartBUSWidget.cxx index d6cc09a93..be4af9d2d 100644 --- a/src/debugger/gui/CartBUSWidget.cxx +++ b/src/debugger/gui/CartBUSWidget.cxx @@ -74,7 +74,7 @@ CartridgeBUSWidget::CartridgeBUSWidget( xpos = DS_X; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Datastream Pointers", kTextAlignLeft); + myFontHeight, "Datastream Pointers", TextAlign::Left); xpos += lwidth; myDatastreamPointers = new DataGridWidget(boss, _nfont, DS_X, ypos+myLineHeight-2, 4, 4, 6, 32, Common::Base::F_16_3_2); @@ -91,23 +91,23 @@ CartridgeBUSWidget::CartridgeBUSWidget( myDatastreamLabels[row] = new StaticTextWidget(_boss, _font, DS_X - _font.getStringWidth("xx "), ypos+myLineHeight-2 + row*myLineHeight + 2, - myFontWidth*2, myFontHeight, "", kTextAlignLeft); + myFontWidth*2, myFontHeight, "", TextAlign::Left); myDatastreamLabels[row]->setLabel(Common::Base::toString(row * 4, Common::Base::F_16_2)); } lwidth = _font.getStringWidth("Write Data (stream 16)"); myDatastreamLabels[4] = new StaticTextWidget(_boss, _font, DS_X - _font.getStringWidth("xx "), ypos+myLineHeight-2 + 4*myLineHeight + 2, - lwidth, myFontHeight, "Write Data (stream 16)", kTextAlignLeft); + lwidth, myFontHeight, "Write Data (stream 16)", TextAlign::Left); myDatastreamLabels[5] = new StaticTextWidget(_boss, _font, DS_X - _font.getStringWidth("xx "), ypos+myLineHeight-2 + 5*myLineHeight + 2, - lwidth, myFontHeight, "Jump Data (stream 17)", kTextAlignLeft); + lwidth, myFontHeight, "Jump Data (stream 17)", TextAlign::Left); // Datastream Increments xpos = DS_X + myDatastreamPointers->getWidth() + 20; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Datastream Increments", kTextAlignLeft); + myFontHeight, "Datastream Increments", TextAlign::Left); myDatastreamIncrements = new DataGridWidget(boss, _nfont, xpos, ypos+myLineHeight-2, 4, 4, 5, 32, Common::Base::F_16_2_2); myDatastreamIncrements->setTarget(this); @@ -120,7 +120,7 @@ CartridgeBUSWidget::CartridgeBUSWidget( // Datastream Maps xpos = 0; ypos += myLineHeight*7 + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Address Maps", kTextAlignLeft); + myFontHeight, "Address Maps", TextAlign::Left); myAddressMaps = new DataGridWidget(boss, _nfont, 0, ypos+myLineHeight-2, 8, 5, 8, 32, Common::Base::F_16_8); myAddressMaps->setTarget(this); @@ -129,7 +129,7 @@ CartridgeBUSWidget::CartridgeBUSWidget( // Music counters xpos = 10; ypos += myLineHeight*6 + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Music Counters", kTextAlignLeft); + myFontHeight, "Music Counters", TextAlign::Left); xpos += lwidth; myMusicCounters = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 8, 32, Common::Base::F_16_8); @@ -139,7 +139,7 @@ CartridgeBUSWidget::CartridgeBUSWidget( // Music frequencies xpos = 10; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Music Frequencies", kTextAlignLeft); + myFontHeight, "Music Frequencies", TextAlign::Left); xpos += lwidth; myMusicFrequencies = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 8, 32, Common::Base::F_16_8); @@ -149,7 +149,7 @@ CartridgeBUSWidget::CartridgeBUSWidget( // Music waveforms xpos = 10; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Music Waveforms", kTextAlignLeft); + myFontHeight, "Music Waveforms", TextAlign::Left); xpos += lwidth; myMusicWaveforms = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 4, 16, Common::Base::F_16_2); @@ -159,7 +159,7 @@ CartridgeBUSWidget::CartridgeBUSWidget( int xpossp = xpos + myMusicWaveforms->getWidth() + 20; int lwidth2 = _font.getStringWidth("Sample Pointer "); new StaticTextWidget(boss, _font, xpossp, ypos, lwidth2, - myFontHeight, "Sample Pointer ", kTextAlignLeft); + myFontHeight, "Sample Pointer ", TextAlign::Left); mySamplePointer = new DataGridWidget(boss, _nfont, xpossp + lwidth2, ypos-2, 1, 1, 8, 32, Common::Base::F_16_8); mySamplePointer->setTarget(this); @@ -168,7 +168,7 @@ CartridgeBUSWidget::CartridgeBUSWidget( // Music waveform sizes xpos = 10; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Music Waveform Sizes", kTextAlignLeft); + myFontHeight, "Music Waveform Sizes", TextAlign::Left); xpos += lwidth; myMusicWaveformSizes = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 4, 16, Common::Base::F_16_2); diff --git a/src/debugger/gui/CartCDFWidget.cxx b/src/debugger/gui/CartCDFWidget.cxx index a5cfd67f8..78703dd21 100644 --- a/src/debugger/gui/CartCDFWidget.cxx +++ b/src/debugger/gui/CartCDFWidget.cxx @@ -74,7 +74,7 @@ CartridgeCDFWidget::CartridgeCDFWidget( xpos = DS_X; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Datastream Pointers", kTextAlignLeft); + myFontHeight, "Datastream Pointers", TextAlign::Left); xpos += lwidth; myDatastreamPointers = new DataGridWidget(boss, _nfont, DS_X, ypos+myLineHeight-2, 4, 8, 6, 32, Common::Base::F_16_3_2); @@ -92,23 +92,23 @@ CartridgeCDFWidget::CartridgeCDFWidget( myDatastreamLabels[row] = new StaticTextWidget(_boss, _font, DS_X - _font.getStringWidth("xx "), ypos+myLineHeight-2 + row*myLineHeight + 2, - myFontWidth*2, myFontHeight, "", kTextAlignLeft); + myFontWidth*2, myFontHeight, "", TextAlign::Left); myDatastreamLabels[row]->setLabel(Common::Base::toString(row * 4, Common::Base::F_16_2)); } lwidth = _font.getStringWidth("Write Data (stream 20)"); myDatastreamLabels[8] = new StaticTextWidget(_boss, _font, DS_X - _font.getStringWidth("xx "), ypos+myLineHeight-2 + 8*myLineHeight + 2, - lwidth, myFontHeight, "Write Data (stream 20)", kTextAlignLeft); + lwidth, myFontHeight, "Write Data (stream 20)", TextAlign::Left); myDatastreamLabels[9] = new StaticTextWidget(_boss, _font, DS_X - _font.getStringWidth("xx "), ypos+myLineHeight-2 + 9*myLineHeight + 2, - lwidth, myFontHeight, "Jump Data (stream 21)", kTextAlignLeft); + lwidth, myFontHeight, "Jump Data (stream 21)", TextAlign::Left); // Datastream Increments xpos = DS_X + myDatastreamPointers->getWidth() + 20; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Datastream Increments", kTextAlignLeft); + myFontHeight, "Datastream Increments", TextAlign::Left); myDatastreamIncrements = new DataGridWidget(boss, _nfont, xpos, ypos+myLineHeight-2, 4, 8, 5, 32, Common::Base::F_16_2_2); myDatastreamIncrements->setTarget(this); @@ -121,7 +121,7 @@ CartridgeCDFWidget::CartridgeCDFWidget( // Music counters xpos = 10; ypos += myLineHeight*12 + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Music Counters", kTextAlignLeft); + myFontHeight, "Music Counters", TextAlign::Left); xpos += lwidth; myMusicCounters = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 8, 32, Common::Base::F_16_8); @@ -131,7 +131,7 @@ CartridgeCDFWidget::CartridgeCDFWidget( // Music frequencies xpos = 10; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Music Frequencies", kTextAlignLeft); + myFontHeight, "Music Frequencies", TextAlign::Left); xpos += lwidth; myMusicFrequencies = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 8, 32, Common::Base::F_16_8); @@ -141,7 +141,7 @@ CartridgeCDFWidget::CartridgeCDFWidget( // Music waveforms xpos = 10; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Music Waveforms", kTextAlignLeft); + myFontHeight, "Music Waveforms", TextAlign::Left); xpos += lwidth; myMusicWaveforms = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 4, 16, Common::Base::F_16_2); @@ -151,7 +151,7 @@ CartridgeCDFWidget::CartridgeCDFWidget( int xpossp = xpos + myMusicWaveforms->getWidth() + 20; int lwidth2 = _font.getStringWidth("Sample Pointer "); new StaticTextWidget(boss, _font, xpossp, ypos, lwidth2, - myFontHeight, "Sample Pointer ", kTextAlignLeft); + myFontHeight, "Sample Pointer ", TextAlign::Left); mySamplePointer = new DataGridWidget(boss, _nfont, xpossp + lwidth2, ypos-2, 1, 1, 8, 32, Common::Base::F_16_8); mySamplePointer->setTarget(this); @@ -160,7 +160,7 @@ CartridgeCDFWidget::CartridgeCDFWidget( // Music waveform sizes xpos = 10; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Music Waveform Sizes", kTextAlignLeft); + myFontHeight, "Music Waveform Sizes", TextAlign::Left); xpos += lwidth; myMusicWaveformSizes = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 4, 16, Common::Base::F_16_2); diff --git a/src/debugger/gui/CartCMWidget.cxx b/src/debugger/gui/CartCMWidget.cxx index 28cb0b11a..b0d3942a7 100644 --- a/src/debugger/gui/CartCMWidget.cxx +++ b/src/debugger/gui/CartCMWidget.cxx @@ -61,7 +61,7 @@ CartridgeCMWidget::CartridgeCMWidget( int lwidth = _font.getStringWidth("Current column "); ypos += myLineHeight + 8; new StaticTextWidget(boss, _font, xpos, ypos+2, lwidth, myFontHeight, - "Current SWCHA ", kTextAlignLeft); + "Current SWCHA ", TextAlign::Left); xpos += lwidth; mySWCHA = new ToggleBitWidget(boss, _nfont, xpos, ypos, 8, 1); mySWCHA->setTarget(this); @@ -70,7 +70,7 @@ CartridgeCMWidget::CartridgeCMWidget( // Current column number xpos = 10; ypos += myLineHeight + 5; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Current column ", kTextAlignLeft); + myFontHeight, "Current column ", TextAlign::Left); xpos += lwidth; myColumn = new DataGridWidget(boss, _nfont, xpos, ypos-2, 1, 1, 2, 8, Common::Base::F_16); @@ -140,7 +140,7 @@ CartridgeCMWidget::CartridgeCMWidget( ypos += myLineHeight + 8; lwidth = _font.getStringWidth("Ram State "); new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Ram State ", kTextAlignLeft); + myFontHeight, "Ram State ", TextAlign::Left); myRAM = new EditTextWidget(boss, _nfont, xpos+lwidth, ypos-2, _nfont.getStringWidth(" Write-only "), myLineHeight, ""); myRAM->setEditable(false, true); diff --git a/src/debugger/gui/CartDASHWidget.cxx b/src/debugger/gui/CartDASHWidget.cxx index 8c865b5cc..5084e017c 100644 --- a/src/debugger/gui/CartDASHWidget.cxx +++ b/src/debugger/gui/CartDASHWidget.cxx @@ -63,7 +63,7 @@ CartridgeDASHWidget::CartridgeDASHWidget( label << "Set segment " << i << " as: "; new StaticTextWidget(boss, _font, xpos, ypos, _font.getStringWidth(label.str()), - myFontHeight, label.str(), kTextAlignLeft); + myFontHeight, label.str(), TextAlign::Left); ypos += myLineHeight + 8; xpos += 20; @@ -95,7 +95,7 @@ CartridgeDASHWidget::CartridgeDASHWidget( label.str(""); label << Common::Base::HEX4 << addr1 << "-" << Common::Base::HEX4 << addr2; t = new StaticTextWidget(boss, _font, xpos_s, ypos_s+2, - _font.getStringWidth(label.str()), myFontHeight, label.str(), kTextAlignLeft); + _font.getStringWidth(label.str()), myFontHeight, label.str(), TextAlign::Left); int xoffset = xpos_s+t->getWidth() + 10; myBankState[2*i] = new EditTextWidget(boss, _font, xoffset, ypos_s, @@ -106,7 +106,7 @@ CartridgeDASHWidget::CartridgeDASHWidget( label.str(""); label << Common::Base::HEX4 << (addr2 + 1) << "-" << Common::Base::HEX4 << (addr2 + 1 + 0x1FF); new StaticTextWidget(boss, _font, xpos_s, ypos_s+2, - _font.getStringWidth(label.str()), myFontHeight, label.str(), kTextAlignLeft); + _font.getStringWidth(label.str()), myFontHeight, label.str(), TextAlign::Left); myBankState[2*i+1] = new EditTextWidget(boss, _font, xoffset, ypos_s, w - xoffset - 10, myLineHeight, ""); diff --git a/src/debugger/gui/CartDPCPlusWidget.cxx b/src/debugger/gui/CartDPCPlusWidget.cxx index 89e957dae..f9425b8c6 100644 --- a/src/debugger/gui/CartDPCPlusWidget.cxx +++ b/src/debugger/gui/CartDPCPlusWidget.cxx @@ -70,7 +70,7 @@ CartridgeDPCPlusWidget::CartridgeDPCPlusWidget( int lwidth = _font.getStringWidth("Counter Registers "); xpos = 10; ypos += myLineHeight + 8; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Top Registers ", kTextAlignLeft); + myFontHeight, "Top Registers ", TextAlign::Left); xpos += lwidth; myTops = new DataGridWidget(boss, _nfont, xpos, ypos-2, 8, 1, 2, 8, Common::Base::F_16); @@ -80,7 +80,7 @@ CartridgeDPCPlusWidget::CartridgeDPCPlusWidget( // Bottom registers xpos = 10; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Bottom Registers ", kTextAlignLeft); + myFontHeight, "Bottom Registers ", TextAlign::Left); xpos += lwidth; myBottoms = new DataGridWidget(boss, _nfont, xpos, ypos-2, 8, 1, 2, 8, Common::Base::F_16); @@ -90,7 +90,7 @@ CartridgeDPCPlusWidget::CartridgeDPCPlusWidget( // Counter registers xpos = 10; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Counter Registers ", kTextAlignLeft); + myFontHeight, "Counter Registers ", TextAlign::Left); xpos += lwidth; myCounters = new DataGridWidget(boss, _nfont, xpos, ypos-2, 8, 1, 4, 16, Common::Base::F_16_4); @@ -100,7 +100,7 @@ CartridgeDPCPlusWidget::CartridgeDPCPlusWidget( // Fractional counter registers xpos = 10; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Frac Counters ", kTextAlignLeft); + myFontHeight, "Frac Counters ", TextAlign::Left); xpos += lwidth; myFracCounters = new DataGridWidget(boss, _nfont, xpos, ypos-2, 4, 2, 8, 32, Common::Base::F_16_8); @@ -110,7 +110,7 @@ CartridgeDPCPlusWidget::CartridgeDPCPlusWidget( // Fractional increment registers xpos = 10; ypos += myFracCounters->getHeight() + 8; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Frac Increments ", kTextAlignLeft); + myFontHeight, "Frac Increments ", TextAlign::Left); xpos += lwidth; myFracIncrements = new DataGridWidget(boss, _nfont, xpos, ypos-2, 8, 1, 2, 8, Common::Base::F_16); @@ -120,7 +120,7 @@ CartridgeDPCPlusWidget::CartridgeDPCPlusWidget( // Special function parameters xpos = 10; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Function Params ", kTextAlignLeft); + myFontHeight, "Function Params ", TextAlign::Left); xpos += lwidth; myParameter = new DataGridWidget(boss, _nfont, xpos, ypos-2, 8, 1, 2, 8, Common::Base::F_16); @@ -130,7 +130,7 @@ CartridgeDPCPlusWidget::CartridgeDPCPlusWidget( // Music counters xpos = 10; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Music Counters ", kTextAlignLeft); + myFontHeight, "Music Counters ", TextAlign::Left); xpos += lwidth; myMusicCounters = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 8, 32, Common::Base::F_16_8); @@ -140,7 +140,7 @@ CartridgeDPCPlusWidget::CartridgeDPCPlusWidget( // Music frequencies xpos = 10; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Music Frequencies ", kTextAlignLeft); + myFontHeight, "Music Frequencies ", TextAlign::Left); xpos += lwidth; myMusicFrequencies = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 8, 32, Common::Base::F_16_8); @@ -150,7 +150,7 @@ CartridgeDPCPlusWidget::CartridgeDPCPlusWidget( // Music waveforms xpos = 10; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Music Waveforms ", kTextAlignLeft); + myFontHeight, "Music Waveforms ", TextAlign::Left); xpos += lwidth; myMusicWaveforms = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 4, 16, Common::Base::F_16_4); @@ -161,7 +161,7 @@ CartridgeDPCPlusWidget::CartridgeDPCPlusWidget( lwidth = _font.getStringWidth("Current random number "); xpos = 10; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Current random number ", kTextAlignLeft); + myFontHeight, "Current random number ", TextAlign::Left); xpos += lwidth; myRandom = new DataGridWidget(boss, _nfont, xpos, ypos-2, 1, 1, 8, 32, Common::Base::F_16_8); diff --git a/src/debugger/gui/CartDPCWidget.cxx b/src/debugger/gui/CartDPCWidget.cxx index e6354d4ae..cb4c1359b 100644 --- a/src/debugger/gui/CartDPCWidget.cxx +++ b/src/debugger/gui/CartDPCWidget.cxx @@ -63,13 +63,13 @@ CartridgeDPCWidget::CartridgeDPCWidget( // Data fetchers int lwidth = _font.getStringWidth("Data Fetchers "); new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Data Fetchers ", kTextAlignLeft); + myFontHeight, "Data Fetchers ", TextAlign::Left); // Top registers lwidth = _font.getStringWidth("Counter Registers "); xpos = 18; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Top Registers ", kTextAlignLeft); + myFontHeight, "Top Registers ", TextAlign::Left); xpos += lwidth; myTops = new DataGridWidget(boss, _nfont, xpos, ypos-2, 8, 1, 2, 8, Common::Base::F_16); @@ -79,7 +79,7 @@ CartridgeDPCWidget::CartridgeDPCWidget( // Bottom registers xpos = 18; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Bottom Registers ", kTextAlignLeft); + myFontHeight, "Bottom Registers ", TextAlign::Left); xpos += lwidth; myBottoms = new DataGridWidget(boss, _nfont, xpos, ypos-2, 8, 1, 2, 8, Common::Base::F_16); @@ -89,7 +89,7 @@ CartridgeDPCWidget::CartridgeDPCWidget( // Counter registers xpos = 18; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Counter Registers ", kTextAlignLeft); + myFontHeight, "Counter Registers ", TextAlign::Left); xpos += lwidth; myCounters = new DataGridWidget(boss, _nfont, xpos, ypos-2, 8, 1, 4, 16, Common::Base::F_16_4); @@ -99,7 +99,7 @@ CartridgeDPCWidget::CartridgeDPCWidget( // Flag registers xpos = 18; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Flag Registers ", kTextAlignLeft); + myFontHeight, "Flag Registers ", TextAlign::Left); xpos += lwidth; myFlags = new DataGridWidget(boss, _nfont, xpos, ypos-2, 8, 1, 2, 8, Common::Base::F_16); @@ -110,7 +110,7 @@ CartridgeDPCWidget::CartridgeDPCWidget( xpos = 10; ypos += myLineHeight + 12; lwidth = _font.getStringWidth("Music mode (DF5/DF6/DF7) "); new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Music mode (DF5/DF6/DF7) ", kTextAlignLeft); + myFontHeight, "Music mode (DF5/DF6/DF7) ", TextAlign::Left); xpos += lwidth; myMusicMode = new DataGridWidget(boss, _nfont, xpos, ypos-2, 3, 1, 2, 8, Common::Base::F_16); @@ -120,7 +120,7 @@ CartridgeDPCWidget::CartridgeDPCWidget( // Current random number xpos = 10; ypos += myLineHeight + 4; new StaticTextWidget(boss, _font, xpos, ypos, lwidth, - myFontHeight, "Current random number ", kTextAlignLeft); + myFontHeight, "Current random number ", TextAlign::Left); xpos += lwidth; myRandom = new DataGridWidget(boss, _nfont, xpos, ypos-2, 1, 1, 2, 8, Common::Base::F_16); diff --git a/src/debugger/gui/CartDebugWidget.cxx b/src/debugger/gui/CartDebugWidget.cxx index 8f50090a7..008a8a142 100644 --- a/src/debugger/gui/CartDebugWidget.cxx +++ b/src/debugger/gui/CartDebugWidget.cxx @@ -49,7 +49,7 @@ int CartDebugWidget::addBaseInformation(int bytes, const string& manufacturer, // Add ROM size, manufacturer and bankswitch info new StaticTextWidget(_boss, _font, x, y, lwidth, - myFontHeight, "ROM Size ", kTextAlignLeft); + myFontHeight, "ROM Size ", TextAlign::Left); buf << bytes << " bytes"; if(bytes >= 1024) buf << " / " << (bytes/1024) << "KB"; @@ -60,7 +60,7 @@ int CartDebugWidget::addBaseInformation(int bytes, const string& manufacturer, y += myLineHeight + 4; new StaticTextWidget(_boss, _font, x, y, lwidth, - myFontHeight, "Manufacturer ", kTextAlignLeft); + myFontHeight, "Manufacturer ", TextAlign::Left); w = new EditTextWidget(_boss, _nfont, x+lwidth, y, fwidth, myLineHeight, manufacturer); w->setEditable(false); @@ -73,7 +73,7 @@ int CartDebugWidget::addBaseInformation(int bytes, const string& manufacturer, if(lines > maxlines) lines = maxlines; new StaticTextWidget(_boss, _font, x, y, lwidth, - myFontHeight, "Description ", kTextAlignLeft); + myFontHeight, "Description ", TextAlign::Left); myDesc = new StringListWidget(_boss, _nfont, x+lwidth, y, fwidth, lines * myLineHeight, false); myDesc->setEditable(false); diff --git a/src/debugger/gui/CartFA2Widget.cxx b/src/debugger/gui/CartFA2Widget.cxx index 90bbfc26c..64fda7733 100644 --- a/src/debugger/gui/CartFA2Widget.cxx +++ b/src/debugger/gui/CartFA2Widget.cxx @@ -73,7 +73,7 @@ CartridgeFA2Widget::CartridgeFA2Widget( StaticTextWidget* t = new StaticTextWidget(boss, _font, xpos, ypos, _font.getStringWidth("Harmony Flash "), - myFontHeight, "Harmony Flash ", kTextAlignLeft); + myFontHeight, "Harmony Flash ", TextAlign::Left); xpos += t->getWidth() + 4; myFlashErase = diff --git a/src/debugger/gui/CartRamWidget.cxx b/src/debugger/gui/CartRamWidget.cxx index 183b58c24..65b2e4f18 100644 --- a/src/debugger/gui/CartRamWidget.cxx +++ b/src/debugger/gui/CartRamWidget.cxx @@ -48,7 +48,7 @@ CartRamWidget::CartRamWidget( // Add RAM size new StaticTextWidget(_boss, _font, xpos, ypos, lwidth, - myFontHeight, "RAM Size ", kTextAlignLeft); + myFontHeight, "RAM Size ", TextAlign::Left); uInt32 ramsize = cartDebug.internalRamSize(); buf << ramsize << " bytes"; @@ -70,7 +70,7 @@ CartRamWidget::CartRamWidget( if(lines > maxlines) lines = maxlines; new StaticTextWidget(_boss, _font, xpos, ypos, lwidth, - myFontHeight, "Description ", kTextAlignLeft); + myFontHeight, "Description ", TextAlign::Left); myDesc = new StringListWidget(boss, nfont, xpos+lwidth, ypos, fwidth, lines * myLineHeight, false); myDesc->setEditable(false); diff --git a/src/debugger/gui/CpuWidget.cxx b/src/debugger/gui/CpuWidget.cxx index bf4afe45e..b8284e6ec 100644 --- a/src/debugger/gui/CpuWidget.cxx +++ b/src/debugger/gui/CpuWidget.cxx @@ -44,7 +44,7 @@ CpuWidget::CpuWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n // Create a 1x1 grid with label for the PC register xpos = x; ypos = y; lwidth = 4 * fontWidth; new StaticTextWidget(boss, lfont, xpos, ypos+1, lwidth-2, fontHeight, - "PC ", kTextAlignLeft); + "PC ", TextAlign::Left); myPCGrid = new DataGridWidget(boss, nfont, xpos + lwidth, ypos, 1, 1, 4, 16, Common::Base::F_16); myPCGrid->setTarget(this); @@ -96,7 +96,7 @@ CpuWidget::CpuWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n int swidth = lfont.getStringWidth("Source Address"); new StaticTextWidget(boss, lfont, xpos, src_y + 4, src_w, fontHeight, swidth <= src_w ? "Source Address" : "Source Addr", - kTextAlignCenter); + TextAlign::Center); // Add labels for other CPU registers xpos = x; @@ -105,13 +105,13 @@ CpuWidget::CpuWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n { new StaticTextWidget(boss, lfont, xpos, ypos + row*lineHeight + 1, lwidth-2, fontHeight, - labels[row], kTextAlignLeft); + labels[row], TextAlign::Left); } // Create a bitfield widget for changing the processor status xpos = x; ypos += 4*lineHeight + 2; new StaticTextWidget(boss, lfont, xpos, ypos+1, lwidth-2, fontHeight, - "PS ", kTextAlignLeft); + "PS ", TextAlign::Left); myPSRegister = new ToggleBitWidget(boss, nfont, xpos+lwidth, ypos, 8, 1); myPSRegister->setTarget(this); addFocusWidget(myPSRegister); diff --git a/src/debugger/gui/DataGridWidget.cxx b/src/debugger/gui/DataGridWidget.cxx index 2e9c575d0..ac52903a9 100644 --- a/src/debugger/gui/DataGridWidget.cxx +++ b/src/debugger/gui/DataGridWidget.cxx @@ -609,7 +609,7 @@ void DataGridWidget::drawWidget(bool hilite) { adjustOffset(); s.drawString(_font, editString(), x, y, _colWidth, kTextColor, - kTextAlignLeft, -_editScrollOffset, false); + TextAlign::Left, -_editScrollOffset, false); } else { diff --git a/src/debugger/gui/DrivingWidget.cxx b/src/debugger/gui/DrivingWidget.cxx index f171f4819..6564a9f8d 100644 --- a/src/debugger/gui/DrivingWidget.cxx +++ b/src/debugger/gui/DrivingWidget.cxx @@ -33,7 +33,7 @@ DrivingWidget::DrivingWidget(GuiObject* boss, const GUI::Font& font, StaticTextWidget* t; t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth, - fontHeight, label, kTextAlignLeft); + fontHeight, label, TextAlign::Left); ypos += t->getHeight() + 20; myGrayUp = new ButtonWidget(boss, font, xpos, ypos, bwidth, bheight, diff --git a/src/debugger/gui/GenesisWidget.cxx b/src/debugger/gui/GenesisWidget.cxx index f838a3d95..cd0ebd8da 100644 --- a/src/debugger/gui/GenesisWidget.cxx +++ b/src/debugger/gui/GenesisWidget.cxx @@ -29,7 +29,7 @@ GenesisWidget::GenesisWidget(GuiObject* boss, const GUI::Font& font, StaticTextWidget* t; t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth, - fontHeight, label, kTextAlignLeft); + fontHeight, label, TextAlign::Left); xpos += t->getWidth()/2 - 5; ypos += t->getHeight() + 20; myPins[kJUp] = new CheckboxWidget(boss, font, xpos, ypos, "", CheckboxWidget::kCheckActionCmd); diff --git a/src/debugger/gui/JoystickWidget.cxx b/src/debugger/gui/JoystickWidget.cxx index 08927457c..3658b7386 100644 --- a/src/debugger/gui/JoystickWidget.cxx +++ b/src/debugger/gui/JoystickWidget.cxx @@ -28,7 +28,7 @@ JoystickWidget::JoystickWidget(GuiObject* boss, const GUI::Font& font, StaticTextWidget* t; t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth, - fontHeight, label, kTextAlignLeft); + fontHeight, label, TextAlign::Left); xpos += t->getWidth()/2 - 5; ypos += t->getHeight() + 20; myPins[kJUp] = new CheckboxWidget(boss, font, xpos, ypos, "", CheckboxWidget::kCheckActionCmd); diff --git a/src/debugger/gui/KeyboardWidget.cxx b/src/debugger/gui/KeyboardWidget.cxx index 9fd9a0a7b..346d97fae 100644 --- a/src/debugger/gui/KeyboardWidget.cxx +++ b/src/debugger/gui/KeyboardWidget.cxx @@ -31,7 +31,7 @@ KeyboardWidget::KeyboardWidget(GuiObject* boss, const GUI::Font& font, StaticTextWidget* t; t = new StaticTextWidget(boss, font, xpos, ypos+2, lwidth, - fontHeight, label, kTextAlignLeft); + fontHeight, label, TextAlign::Left); xpos += 30; ypos += t->getHeight() + 20; diff --git a/src/debugger/gui/NullControlWidget.hxx b/src/debugger/gui/NullControlWidget.hxx index c21242101..e72722c4e 100644 --- a/src/debugger/gui/NullControlWidget.hxx +++ b/src/debugger/gui/NullControlWidget.hxx @@ -36,12 +36,12 @@ class NullControlWidget : public ControllerWidget lwidth = std::max(font.getStringWidth(buf.str()), font.getStringWidth("Controller input")); new StaticTextWidget(boss, font, x, y+2, lwidth, - fontHeight, buf.str(), kTextAlignLeft); + fontHeight, buf.str(), TextAlign::Left); new StaticTextWidget(boss, font, x, y+2+2*lineHeight, lwidth, - fontHeight, "Controller input", kTextAlignCenter); + fontHeight, "Controller input", TextAlign::Center); new StaticTextWidget(boss, font, x, y+2+3*lineHeight, lwidth, fontHeight, "not available", - kTextAlignCenter); + TextAlign::Center); } virtual ~NullControlWidget() = default; diff --git a/src/debugger/gui/PaddleWidget.cxx b/src/debugger/gui/PaddleWidget.cxx index ecc75379b..745d08f64 100644 --- a/src/debugger/gui/PaddleWidget.cxx +++ b/src/debugger/gui/PaddleWidget.cxx @@ -32,7 +32,7 @@ PaddleWidget::PaddleWidget(GuiObject* boss, const GUI::Font& font, int xpos = x, ypos = y, lwidth = font.getStringWidth("Right (Paddles)"); new StaticTextWidget(boss, font, xpos, ypos+2, lwidth, - fontHeight, label, kTextAlignLeft); + fontHeight, label, TextAlign::Left); ypos += lineHeight + 20; const string& p0string = leftport ? "P0 pot " : "P2 pot "; diff --git a/src/debugger/gui/RamWidget.cxx b/src/debugger/gui/RamWidget.cxx index 33016ff1d..79b3188c6 100644 --- a/src/debugger/gui/RamWidget.cxx +++ b/src/debugger/gui/RamWidget.cxx @@ -90,7 +90,7 @@ RamWidget::RamWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n new StaticTextWidget(_boss, lfont, xpos - _font.getStringWidth("xxxx"), ypos - myLineHeight, lfont.getStringWidth("xxxx"), myFontHeight, - "00xx", kTextAlignLeft); + "00xx", TextAlign::Left); for(int col = 0; col < 16; ++col) { @@ -98,7 +98,7 @@ RamWidget::RamWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n ypos - myLineHeight, myFontWidth, myFontHeight, Common::Base::toString(col, Common::Base::F_16_1), - kTextAlignLeft); + TextAlign::Left); } uInt32 row; @@ -107,7 +107,7 @@ RamWidget::RamWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n myRamLabels[row] = new StaticTextWidget(_boss, _font, xpos - _font.getStringWidth("x "), ypos + row*myLineHeight + 2, - myFontWidth, myFontHeight, "", kTextAlignLeft); + myFontWidth, myFontHeight, "", TextAlign::Left); } // For smaller grids, make sure RAM cell detail fields are below the RESET button diff --git a/src/debugger/gui/RiotWidget.cxx b/src/debugger/gui/RiotWidget.cxx index e84f4b93a..6ba9106eb 100644 --- a/src/debugger/gui/RiotWidget.cxx +++ b/src/debugger/gui/RiotWidget.cxx @@ -67,7 +67,7 @@ RiotWidget::RiotWidget(GuiObject* boss, const GUI::Font& lfont, #define CREATE_IO_REGS(desc, bits, bitsID, editable) \ t = new StaticTextWidget(boss, lfont, xpos, ypos+2, lwidth, fontHeight,\ - desc, kTextAlignLeft); \ + desc, TextAlign::Left); \ xpos += t->getWidth() + 5; \ bits = new ToggleBitWidget(boss, nfont, xpos, ypos, 8, 1); \ bits->setTarget(this); \ @@ -106,7 +106,7 @@ RiotWidget::RiotWidget(GuiObject* boss, const GUI::Font& lfont, for(int row = 0; row < 4; ++row) { t = new StaticTextWidget(boss, lfont, xpos, ypos + row*lineHeight + 2, - lwidth, fontHeight, writeNames[row], kTextAlignLeft); + lwidth, fontHeight, writeNames[row], TextAlign::Left); } xpos += t->getWidth() + 5; myTimWrite = new DataGridWidget(boss, nfont, xpos, ypos, 1, 4, 2, 8, Common::Base::F_16); @@ -120,7 +120,7 @@ RiotWidget::RiotWidget(GuiObject* boss, const GUI::Font& lfont, for(int row = 0; row < 4; ++row) { t = new StaticTextWidget(boss, lfont, xpos, ypos + row*lineHeight + 2, - 10*fontWidth, fontHeight, readNames[row], kTextAlignLeft); + 10*fontWidth, fontHeight, readNames[row], TextAlign::Left); } xpos += t->getWidth() + 5; myTimRead = new DataGridWidget(boss, nfont, xpos, ypos, 1, 4, 8, 32, Common::Base::F_16); @@ -142,7 +142,7 @@ RiotWidget::RiotWidget(GuiObject* boss, const GUI::Font& lfont, for(int row = 0; row < 3; ++row) { new StaticTextWidget(boss, lfont, xpos, ypos + row*lineHeight + 2, - 5*fontWidth, fontHeight, contLeftReadNames[row], kTextAlignLeft); + 5*fontWidth, fontHeight, contLeftReadNames[row], TextAlign::Left); } xpos += 5*fontWidth + 5; myLeftINPT = new DataGridWidget(boss, nfont, xpos, ypos, 1, 3, 2, 8, Common::Base::F_16); @@ -155,7 +155,7 @@ RiotWidget::RiotWidget(GuiObject* boss, const GUI::Font& lfont, for(int row = 0; row < 3; ++row) { new StaticTextWidget(boss, lfont, xpos, ypos + row*lineHeight + 2, - 5*fontWidth, fontHeight, contRightReadNames[row], kTextAlignLeft); + 5*fontWidth, fontHeight, contRightReadNames[row], TextAlign::Left); } xpos += 5*fontWidth + 5; myRightINPT = new DataGridWidget(boss, nfont, xpos, ypos, 1, 3, 2, 8, Common::Base::F_16); diff --git a/src/debugger/gui/RomListWidget.cxx b/src/debugger/gui/RomListWidget.cxx index c8255672d..a99987f16 100644 --- a/src/debugger/gui/RomListWidget.cxx +++ b/src/debugger/gui/RomListWidget.cxx @@ -529,7 +529,7 @@ void RomListWidget::drawWidget(bool hilite) { adjustOffset(); s.drawString(_font, editString(), _x + r.x(), ypos, r.width(), kTextColor, - kTextAlignLeft, -_editScrollOffset, false); + TextAlign::Left, -_editScrollOffset, false); drawCaret(); } diff --git a/src/debugger/gui/RomWidget.cxx b/src/debugger/gui/RomWidget.cxx index c9ca3f6f0..bf4a51e4f 100644 --- a/src/debugger/gui/RomWidget.cxx +++ b/src/debugger/gui/RomWidget.cxx @@ -45,7 +45,7 @@ RomWidget::RomWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n t = new StaticTextWidget(boss, lfont, xpos, ypos, lfont.getStringWidth("Bank"), lfont.getFontHeight(), - "Bank", kTextAlignLeft); + "Bank", TextAlign::Left); xpos += t->getWidth() + 5; myBank = new EditTextWidget(boss, nfont, xpos, ypos-2, diff --git a/src/debugger/gui/TiaInfoWidget.cxx b/src/debugger/gui/TiaInfoWidget.cxx index 227dba58a..68fdf53c5 100644 --- a/src/debugger/gui/TiaInfoWidget.cxx +++ b/src/debugger/gui/TiaInfoWidget.cxx @@ -44,7 +44,7 @@ TiaInfoWidget::TiaInfoWidget(GuiObject* boss, const GUI::Font& lfont, // Add frame info new StaticTextWidget(boss, lfont, xpos, ypos, lwidth, lineHeight, longstr ? "Frame Count " : "Frame ", - kTextAlignLeft); + TextAlign::Left); xpos += lwidth; myFrameCount = new EditTextWidget(boss, nfont, xpos, ypos-1, fwidth, lineHeight, ""); myFrameCount->setEditable(false, true); @@ -52,7 +52,7 @@ TiaInfoWidget::TiaInfoWidget(GuiObject* boss, const GUI::Font& lfont, xpos = x; ypos += lineHeight + 5; new StaticTextWidget(boss, lfont, xpos, ypos, lwidth, lineHeight, longstr ? "Frame Cycle " : "F. Cycle ", - kTextAlignLeft); + TextAlign::Left); xpos += lwidth; myFrameCycles = new EditTextWidget(boss, nfont, xpos, ypos-1, fwidth, lineHeight, ""); myFrameCycles->setEditable(false, true); @@ -71,7 +71,7 @@ TiaInfoWidget::TiaInfoWidget(GuiObject* boss, const GUI::Font& lfont, new StaticTextWidget(boss, lfont, xpos, ypos, lfont.getStringWidth(longstr ? "Scanline" : "Scn Ln"), lineHeight, - longstr ? "Scanline" : "Scn Ln", kTextAlignLeft); + longstr ? "Scanline" : "Scn Ln", TextAlign::Left); myScanlineCountLast = new EditTextWidget(boss, nfont, xpos+lwidth, ypos-1, fwidth, lineHeight, ""); @@ -84,7 +84,7 @@ TiaInfoWidget::TiaInfoWidget(GuiObject* boss, const GUI::Font& lfont, ypos += lineHeight + 5; new StaticTextWidget(boss, lfont, xpos, ypos, lwidth, lineHeight, - longstr ? "Scan Cycle " : "Scn Cycle", kTextAlignLeft); + longstr ? "Scan Cycle " : "Scn Cycle", TextAlign::Left); myScanlineCycles = new EditTextWidget(boss, nfont, xpos+lwidth, ypos-1, fwidth, lineHeight, ""); @@ -92,7 +92,7 @@ TiaInfoWidget::TiaInfoWidget(GuiObject* boss, const GUI::Font& lfont, ypos += lineHeight + 5; new StaticTextWidget(boss, lfont, xpos, ypos, lwidth, lineHeight, - "Pixel Pos ", kTextAlignLeft); + "Pixel Pos ", TextAlign::Left); myPixelPosition = new EditTextWidget(boss, nfont, xpos+lwidth, ypos-1, fwidth, lineHeight, ""); @@ -100,7 +100,7 @@ TiaInfoWidget::TiaInfoWidget(GuiObject* boss, const GUI::Font& lfont, ypos += lineHeight + 5; new StaticTextWidget(boss, lfont, xpos, ypos, lwidth, lineHeight, - longstr ? "Color Clock " : "Color Clk ", kTextAlignLeft); + longstr ? "Color Clock " : "Color Clk ", TextAlign::Left); myColorClocks = new EditTextWidget(boss, nfont, xpos+lwidth, ypos-1, fwidth, lineHeight, ""); diff --git a/src/debugger/gui/TiaWidget.cxx b/src/debugger/gui/TiaWidget.cxx index ba1b7c04f..a0dc84676 100644 --- a/src/debugger/gui/TiaWidget.cxx +++ b/src/debugger/gui/TiaWidget.cxx @@ -52,7 +52,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, for(int row = 0; row < 4; ++row) { new StaticTextWidget(boss, lfont, xpos, ypos + row*lineHeight + 2, - 6*fontWidth, fontHeight, regNames[row], kTextAlignLeft); + 6*fontWidth, fontHeight, regNames[row], TextAlign::Left); } xpos += 6*fontWidth + 8; myColorRegs = new DataGridWidget(boss, nfont, xpos, ypos, @@ -92,7 +92,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, { ypos += lineHeight; t = new StaticTextWidget(boss, lfont, xpos, ypos + 2, 2*fontWidth, fontHeight, - dbgLabels[row], kTextAlignLeft); + dbgLabels[row], TextAlign::Left); myFixedColors[row] = new ColorWidget(boss, nfont, xpos + 2 + t->getWidth() + 4, ypos + 2, uInt32(1.5*lineHeight), lineHeight - 4); myFixedColors[row]->setTarget(this); @@ -103,7 +103,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, { ypos += lineHeight; t = new StaticTextWidget(boss, lfont, xpos, ypos + 2, 2*fontWidth, fontHeight, - dbgLabels[row], kTextAlignLeft); + dbgLabels[row], TextAlign::Left); myFixedColors[row] = new ColorWidget(boss, nfont, xpos + 2 + t->getWidth() + 4, ypos + 2, uInt32(1.5*lineHeight), lineHeight - 4); myFixedColors[row]->setTarget(this); @@ -125,7 +125,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // Add vertical label new StaticTextWidget(boss, lfont, xpos, ypos + row*(lineHeight+3), 2*fontWidth, fontHeight, - rowLabel[row], kTextAlignLeft); + rowLabel[row], TextAlign::Left); for(uInt32 col = 0; col < 5 - row; ++col) { @@ -147,7 +147,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, labelx += (myCollision[idx]->getWidth() - lwidth) / 2; new StaticTextWidget(boss, lfont, labelx, ypos-lineHeight, lwidth, fontHeight, - colLabel[col], kTextAlignLeft); + colLabel[col], TextAlign::Left); collX += myCollision[idx]->getWidth() + 10; idx++; @@ -170,7 +170,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // grP0 (new) xpos = 10; ypos = collY + 4; new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, - "P0", kTextAlignLeft); + "P0", TextAlign::Left); xpos += 2*fontWidth + 5; myGRP0 = new TogglePixelWidget(boss, nfont, xpos, ypos+1, 8, 1); myGRP0->setTarget(this); @@ -181,7 +181,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // posP0 xpos += myGRP0->getWidth() + 12; t = new StaticTextWidget(boss, lfont, xpos, ypos+2, 4*fontWidth, fontHeight, - "Pos#", kTextAlignLeft); + "Pos#", TextAlign::Left); xpos += t->getWidth() + 2; myPosP0 = new DataGridWidget(boss, nfont, xpos, ypos, 1, 1, 3, 8, Common::Base::F_10); @@ -193,7 +193,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // hmP0 xpos += myPosP0->getWidth() + fontWidth + 12; new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, - "HM", kTextAlignLeft); + "HM", TextAlign::Left); xpos += 2*fontWidth + 5; myHMP0 = new DataGridWidget(boss, nfont, xpos, ypos, 1, 1, 1, 4, Common::Base::F_16_1); @@ -236,7 +236,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // NUSIZ0 (player portion) xpos += myDelP0->getWidth() + 12; new StaticTextWidget(boss, lfont, xpos, ypos+2, 5*fontWidth, fontHeight, - "NuSiz", kTextAlignLeft); + "NuSiz", TextAlign::Left); xpos += 5*fontWidth + 5; myNusizP0 = new DataGridWidget(boss, nfont, xpos, ypos, 1, 1, 1, 3, Common::Base::F_16_1); @@ -255,7 +255,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // grP1 (new) xpos = 10; ypos += lineHeight + 12; new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, - "P1", kTextAlignLeft); + "P1", TextAlign::Left); xpos += 2*fontWidth + 5; myGRP1 = new TogglePixelWidget(boss, nfont, xpos, ypos+1, 8, 1); myGRP1->setTarget(this); @@ -266,7 +266,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // posP1 xpos += myGRP1->getWidth() + 12; t = new StaticTextWidget(boss, lfont, xpos, ypos+2, 4*fontWidth, fontHeight, - "Pos#", kTextAlignLeft); + "Pos#", TextAlign::Left); xpos += t->getWidth() + 2; myPosP1 = new DataGridWidget(boss, nfont, xpos, ypos, 1, 1, 3, 8, Common::Base::F_10); @@ -278,7 +278,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // hmP1 xpos += myPosP1->getWidth() + fontWidth + 12; new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, - "HM", kTextAlignLeft); + "HM", TextAlign::Left); xpos += 2*fontWidth + 5; myHMP1 = new DataGridWidget(boss, nfont, xpos, ypos, 1, 1, 1, 4, Common::Base::F_16_1); @@ -320,7 +320,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // NUSIZ1 (player portion) xpos += myDelP1->getWidth() + 12; new StaticTextWidget(boss, lfont, xpos, ypos+2, 5*fontWidth, fontHeight, - "NuSiz", kTextAlignLeft); + "NuSiz", TextAlign::Left); xpos += 5*fontWidth + 5; myNusizP1 = new DataGridWidget(boss, nfont, xpos, ypos, 1, 1, 1, 3, Common::Base::F_16_1); @@ -339,7 +339,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // enaM0 xpos = 10; ypos += lineHeight + 12; new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, - "M0", kTextAlignLeft); + "M0", TextAlign::Left); xpos += 2*fontWidth + 5; myEnaM0 = new TogglePixelWidget(boss, nfont, xpos, ypos+1, 1, 1); myEnaM0->setTarget(this); @@ -350,7 +350,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // posM0 xpos += myEnaM0->getWidth() + 12; t = new StaticTextWidget(boss, lfont, xpos, ypos+2, 4*fontWidth, fontHeight, - "Pos#", kTextAlignLeft); + "Pos#", TextAlign::Left); xpos += t->getWidth() + 2; myPosM0 = new DataGridWidget(boss, nfont, xpos, ypos, 1, 1, 3, 8, Common::Base::F_10); @@ -362,7 +362,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // hmM0 xpos += myPosM0->getWidth() + 12; new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, - "HM", kTextAlignLeft); + "HM", TextAlign::Left); xpos += 2*fontWidth + 5; myHMM0 = new DataGridWidget(boss, nfont, xpos, ypos, 1, 1, 1, 4, Common::Base::F_16_1); @@ -373,7 +373,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // NUSIZ0 (missile portion) xpos += myHMM0->getWidth() + 12; new StaticTextWidget(boss, lfont, xpos, ypos+2, 4*fontWidth, fontHeight, - "Size", kTextAlignLeft); + "Size", TextAlign::Left); xpos += 4*fontWidth + 5; myNusizM0 = new DataGridWidget(boss, nfont, xpos, ypos, 1, 1, 1, 2, Common::Base::F_16_1); @@ -402,7 +402,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // enaM1 xpos = 10; ypos += lineHeight + 4; new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, - "M1", kTextAlignLeft); + "M1", TextAlign::Left); xpos += 2*fontWidth + 5; myEnaM1 = new TogglePixelWidget(boss, nfont, xpos, ypos+1, 1, 1); myEnaM1->setTarget(this); @@ -413,7 +413,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // posM0 xpos += myEnaM1->getWidth() + 12; t = new StaticTextWidget(boss, lfont, xpos, ypos+2, 4*fontWidth, fontHeight, - "Pos#", kTextAlignLeft); + "Pos#", TextAlign::Left); xpos += t->getWidth() + 2; myPosM1 = new DataGridWidget(boss, nfont, xpos, ypos, 1, 1, 3, 8, Common::Base::F_10); @@ -425,7 +425,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // hmM0 xpos += myPosM1->getWidth() + 12; new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, - "HM", kTextAlignLeft); + "HM", TextAlign::Left); xpos += 2*fontWidth + 5; myHMM1 = new DataGridWidget(boss, nfont, xpos, ypos, 1, 1, 1, 4, Common::Base::F_16_1); @@ -436,7 +436,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // NUSIZ1 (missile portion) xpos += myHMM1->getWidth() + 12; new StaticTextWidget(boss, lfont, xpos, ypos+2, 4*fontWidth, fontHeight, - "Size", kTextAlignLeft); + "Size", TextAlign::Left); xpos += 4*fontWidth + 5; myNusizM1 = new DataGridWidget(boss, nfont, xpos, ypos, 1, 1, 1, 2, Common::Base::F_16_1); @@ -465,7 +465,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // enaBL xpos = 10; ypos += lineHeight + 4; new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, - "BL", kTextAlignLeft); + "BL", TextAlign::Left); xpos += 2*fontWidth + 5; myEnaBL = new TogglePixelWidget(boss, nfont, xpos, ypos+1, 1, 1); myEnaBL->setTarget(this); @@ -476,7 +476,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // posBL xpos += myEnaBL->getWidth() + 12; t = new StaticTextWidget(boss, lfont, xpos, ypos+2, 4*fontWidth, fontHeight, - "Pos#", kTextAlignLeft); + "Pos#", TextAlign::Left); xpos += t->getWidth() + 2; myPosBL = new DataGridWidget(boss, nfont, xpos, ypos, 1, 1, 3, 8, Common::Base::F_10); @@ -488,7 +488,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // hmBL xpos += myPosBL->getWidth() + 12; new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, - "HM", kTextAlignLeft); + "HM", TextAlign::Left); xpos += 2*fontWidth + 5; myHMBL = new DataGridWidget(boss, nfont, xpos, ypos, 1, 1, 1, 4, Common::Base::F_16_1); @@ -499,7 +499,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // CTRLPF (size portion) xpos += myHMBL->getWidth() + 12; new StaticTextWidget(boss, lfont, xpos, ypos+2, 4*fontWidth, fontHeight, - "Size", kTextAlignLeft); + "Size", TextAlign::Left); xpos += 4*fontWidth + 5; mySizeBL = new DataGridWidget(boss, nfont, xpos, ypos, 1, 1, 1, 2, Common::Base::F_16_1); @@ -541,7 +541,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, // PF0 xpos = 10; ypos += lineHeight + sfHeight + 6; new StaticTextWidget(boss, lfont, xpos, ypos+2, 2*fontWidth, fontHeight, - "PF", kTextAlignLeft); + "PF", TextAlign::Left); xpos += 2*fontWidth + 5; myPF[0] = new TogglePixelWidget(boss, nfont, xpos, ypos+1, 4, 1); myPF[0]->setTarget(this); @@ -570,14 +570,14 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, for(int i = 4; i <= 7; ++i) { new StaticTextWidget(boss, sf, xpos, _ypos, sfWidth, sfHeight, - bitNames[i], kTextAlignLeft); + bitNames[i], TextAlign::Left); xpos += colw; } xpos = 10 + 2*fontWidth + 5 + myPF[0]->getWidth() + 2 + start(colw); for(int i = 7; i >= 0; --i) { new StaticTextWidget(boss, sf, xpos, _ypos, sfWidth, sfHeight, - bitNames[i], kTextAlignLeft); + bitNames[i], TextAlign::Left); xpos += colw; } xpos = 10 + 2*fontWidth + 5 + myPF[0]->getWidth() + 2 + @@ -585,7 +585,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, for(int i = 0; i <= 7; ++i) { new StaticTextWidget(boss, sf, xpos, _ypos, sfWidth, sfHeight, - bitNames[i], kTextAlignLeft); + bitNames[i], TextAlign::Left); xpos += colw; } @@ -614,7 +614,7 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, xpos = 10; ypos += 2 * lineHeight; t = new StaticTextWidget(boss, lfont, xpos, ypos, 13*fontWidth, fontHeight, - "Queued Writes", kTextAlignLeft); + "Queued Writes", TextAlign::Left); xpos += t->getWidth() + 10; myDelayQueueWidget = new DelayQueueWidget(boss, lfont, xpos, ypos); diff --git a/src/emucore/Console.cxx b/src/emucore/Console.cxx index 54b9276ce..91fc08741 100644 --- a/src/emucore/Console.cxx +++ b/src/emucore/Console.cxx @@ -527,7 +527,7 @@ void Console::setProperties(const Properties& props) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FBInitStatus Console::initializeVideo(bool full) { - FBInitStatus fbstatus = kSuccess; + FBInitStatus fbstatus = FBInitStatus::Success; if(full) { @@ -535,7 +535,7 @@ FBInitStatus Console::initializeVideo(bool full) ": \"" + myProperties.get(Cartridge_Name) + "\""; fbstatus = myOSystem.frameBuffer().createDisplay(title, myTIA->width() << 1, myTIA->height()); - if(fbstatus != kSuccess) + if(fbstatus != FBInitStatus::Success) return fbstatus; myOSystem.frameBuffer().showFrameStats( diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index 14b58db23..b7f953d3d 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -2097,20 +2097,20 @@ bool EventHandler::enterDebugMode() setEventState(S_DEBUGGER); FBInitStatus fbstatus = myOSystem.createFrameBuffer(); - if(fbstatus != kSuccess) + if(fbstatus != FBInitStatus::Success) { myOSystem.debugger().setQuitState(); setEventState(S_EMULATE); - if(fbstatus == kFailTooLarge) + if(fbstatus == FBInitStatus::FailTooLarge) myOSystem.frameBuffer().showMessage("Debugger window too large for screen", - kBottomCenter, true); + MessagePosition::BottomCenter, true); return false; } myOverlay->reStack(); myOSystem.sound().mute(true); #else myOSystem.frameBuffer().showMessage("Debugger support not included", - kBottomCenter, true); + MessagePosition::BottomCenter, true); #endif return true; diff --git a/src/emucore/FBSurface.cxx b/src/emucore/FBSurface.cxx index 6bcdf8252..27b048fbf 100644 --- a/src/emucore/FBSurface.cxx +++ b/src/emucore/FBSurface.cxx @@ -184,14 +184,14 @@ void FBSurface::frameRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h, { switch(style) { - case kSolidLine: + case FrameStyle::Solid: hLine(x, y, x + w - 1, color); hLine(x, y + h - 1, x + w - 1, color); vLine(x, y, y + h - 1, color); vLine(x + w - 1, y, y + h - 1, color); break; - case kDashLine: + case FrameStyle::Dashed: uInt32 i, skip, lwidth = 1; for(i = x, skip = 1; i < x+w-1; i=i+lwidth+1, ++skip) @@ -217,7 +217,7 @@ void FBSurface::frameRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h, // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void FBSurface::drawString(const GUI::Font& font, const string& s, int x, int y, int w, - uInt32 color, TextAlignment align, + uInt32 color, TextAlign align, int deltax, bool useEllipsis) { const string ELLIPSIS = "\x1d"; // "..." @@ -273,9 +273,9 @@ void FBSurface::drawString(const GUI::Font& font, const string& s, else str = s; - if(align == kTextAlignCenter) + if(align == TextAlign::Center) x = x + (w - width - 1)/2; - else if(align == kTextAlignRight) + else if(align == TextAlign::Right) x = x + w - width; x += deltax; diff --git a/src/emucore/FBSurface.hxx b/src/emucore/FBSurface.hxx index e8d203765..3b9a9ca70 100644 --- a/src/emucore/FBSurface.hxx +++ b/src/emucore/FBSurface.hxx @@ -179,7 +179,7 @@ class FBSurface @param style The 'FrameStyle' to use for the surrounding frame */ virtual void frameRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h, - uInt32 color, FrameStyle style = kSolidLine); + uInt32 color, FrameStyle style = FrameStyle::Solid); /** This method should be called to draw the specified string. @@ -196,7 +196,7 @@ class FBSurface */ virtual void drawString( const GUI::Font& font, const string& s, int x, int y, int w, - uInt32 color, TextAlignment align = kTextAlignLeft, + uInt32 color, TextAlign align = TextAlign::Left, int deltax = 0, bool useEllipsis = true); /** diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index ed1da3185..8f526af09 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -176,7 +176,7 @@ FBInitStatus FrameBuffer::createDisplay(const string& title, // Otherwise, we treat the system as if WINDOWED_SUPPORT is not defined if(myDesktopSize.w < kFBMinW && myDesktopSize.h < kFBMinH && (myDesktopSize.w < width || myDesktopSize.h < height)) - return kFailTooLarge; + return FBInitStatus::FailTooLarge; useFullscreen = myOSystem.settings().getBool("fullscreen"); #else @@ -184,7 +184,7 @@ FBInitStatus FrameBuffer::createDisplay(const string& title, // We only really need to worry about it in non-windowed environments, // where requesting a window that's too large will probably cause a crash if(myDesktopSize.w < width || myDesktopSize.h < height) - return kFailTooLarge; + return FBInitStatus::FailTooLarge; #endif // Set the available video modes for this framebuffer @@ -213,11 +213,11 @@ FBInitStatus FrameBuffer::createDisplay(const string& title, else { myOSystem.logMessage("ERROR: Couldn't initialize video subsystem", 0); - return kFailNotSupported; + return FBInitStatus::FailNotSupported; } } else - return kFailTooLarge; + return FBInitStatus::FailTooLarge; // Erase any messages from a previous run myMsg.counter = 0; @@ -245,7 +245,7 @@ FBInitStatus FrameBuffer::createDisplay(const string& title, myOSystem.logMessage(post_about, 1); } - return kSuccess; + return FBInitStatus::Success; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -283,9 +283,9 @@ void FrameBuffer::update() myOSystem.console().getFramerate(), info.DisplayFormat.c_str()); myStatsMsg.surface->fillRect(0, 0, myStatsMsg.w, myStatsMsg.h, kBGColor); myStatsMsg.surface->drawString(infoFont(), - msg, 1, 1, myStatsMsg.w, myStatsMsg.color, kTextAlignLeft); + msg, 1, 1, myStatsMsg.w, myStatsMsg.color, TextAlign::Left); myStatsMsg.surface->drawString(infoFont(), - info.BankSwitch, 1, 15, myStatsMsg.w, myStatsMsg.color, kTextAlignLeft); + info.BankSwitch, 1, 15, myStatsMsg.w, myStatsMsg.color, TextAlign::Left); myStatsMsg.surface->setDirty(); myStatsMsg.surface->setDstPos(myImageRect.x() + 1, myImageRect.y() + 1); myStatsMsg.surface->render(); @@ -302,7 +302,7 @@ void FrameBuffer::update() if (myPausedCount-- <= 0) { resetPauseDelay(); - showMessage("Paused", kMiddleCenter); + showMessage("Paused", MessagePosition::MiddleCenter); } break; // S_PAUSE } @@ -408,47 +408,47 @@ inline void FrameBuffer::drawMessage() // Draw the bounded box and text switch(myMsg.position) { - case kTopLeft: + case MessagePosition::TopLeft: myMsg.x = 5; myMsg.y = 5; break; - case kTopCenter: + case MessagePosition::TopCenter: myMsg.x = (myImageRect.width() - myMsg.w) >> 1; myMsg.y = 5; break; - case kTopRight: + case MessagePosition::TopRight: myMsg.x = myImageRect.width() - myMsg.w - 5; myMsg.y = 5; break; - case kMiddleLeft: + case MessagePosition::MiddleLeft: myMsg.x = 5; myMsg.y = (myImageRect.height() - myMsg.h) >> 1; break; - case kMiddleCenter: + case MessagePosition::MiddleCenter: myMsg.x = (myImageRect.width() - myMsg.w) >> 1; myMsg.y = (myImageRect.height() - myMsg.h) >> 1; break; - case kMiddleRight: + case MessagePosition::MiddleRight: myMsg.x = myImageRect.width() - myMsg.w - 5; myMsg.y = (myImageRect.height() - myMsg.h) >> 1; break; - case kBottomLeft: + case MessagePosition::BottomLeft: myMsg.x = 5; myMsg.y = myImageRect.height() - myMsg.h - 5; break; - case kBottomCenter: + case MessagePosition::BottomCenter: myMsg.x = (myImageRect.width() - myMsg.w) >> 1; myMsg.y = myImageRect.height() - myMsg.h - 5; break; - case kBottomRight: + case MessagePosition::BottomRight: myMsg.x = myImageRect.width() - myMsg.w - 5; myMsg.y = myImageRect.height() - myMsg.h - 5; break; @@ -458,7 +458,7 @@ inline void FrameBuffer::drawMessage() myMsg.surface->fillRect(1, 1, myMsg.w-2, myMsg.h-2, kBtnColor); myMsg.surface->box(0, 0, myMsg.w, myMsg.h, kColor, kShadowColor); myMsg.surface->drawString(font(), myMsg.text, 4, 4, - myMsg.w, myMsg.color, kTextAlignLeft); + myMsg.w, myMsg.color, TextAlign::Left); // Either erase the entire message (when time is reached), // or show again this frame diff --git a/src/emucore/FrameBuffer.hxx b/src/emucore/FrameBuffer.hxx index 7114ca4b0..0c22d1955 100644 --- a/src/emucore/FrameBuffer.hxx +++ b/src/emucore/FrameBuffer.hxx @@ -125,7 +125,7 @@ class FrameBuffer @param force Force showing this message, even if messages are disabled */ void showMessage(const string& message, - MessagePosition position = kBottomCenter, + MessagePosition position = MessagePosition::BottomCenter, bool force = false); /** diff --git a/src/emucore/FrameBufferConstants.hxx b/src/emucore/FrameBufferConstants.hxx index 0269c3e5e..dee88fdd0 100644 --- a/src/emucore/FrameBufferConstants.hxx +++ b/src/emucore/FrameBufferConstants.hxx @@ -15,32 +15,31 @@ // this file, and for a DISCLAIMER OF ALL WARRANTIES. //============================================================================ -// FIXME - perhaps add to namespace or something - #ifndef FRAMEBUFFER_CONSTANTS_HXX #define FRAMEBUFFER_CONSTANTS_HXX // Return values for initialization of framebuffer window -enum FBInitStatus { - kSuccess, - kFailComplete, - kFailTooLarge, - kFailNotSupported +enum class FBInitStatus { + Success, + FailComplete, + FailTooLarge, + FailNotSupported }; // Positions for onscreen/overlaid messages -enum MessagePosition { - kTopLeft, - kTopCenter, - kTopRight, - kMiddleLeft, - kMiddleCenter, - kMiddleRight, - kBottomLeft, - kBottomCenter, - kBottomRight +enum class MessagePosition { + TopLeft, + TopCenter, + TopRight, + MiddleLeft, + MiddleCenter, + MiddleRight, + BottomLeft, + BottomCenter, + BottomRight }; +// TODO - make this 'enum class' // Colors indices to use for the various GUI elements enum { kColor = 256, @@ -70,16 +69,16 @@ enum { }; // Text alignment modes for drawString() -enum TextAlignment { - kTextAlignLeft, - kTextAlignCenter, - kTextAlignRight +enum class TextAlign { + Left, + Center, + Right }; // Line types for drawing rectangular frames -enum FrameStyle { - kSolidLine, - kDashLine +enum class FrameStyle { + Solid, + Dashed }; #endif // FRAMEBUFFER_CONSTANTS_HXX diff --git a/src/emucore/OSystem.cxx b/src/emucore/OSystem.cxx index b1f7abe6e..838f7d1c8 100644 --- a/src/emucore/OSystem.cxx +++ b/src/emucore/OSystem.cxx @@ -245,25 +245,25 @@ void OSystem::setFramerate(float framerate) FBInitStatus OSystem::createFrameBuffer() { // Re-initialize the framebuffer to current settings - FBInitStatus fbstatus = kFailComplete; + FBInitStatus fbstatus = FBInitStatus::FailComplete; switch(myEventHandler->state()) { case EventHandler::S_EMULATE: case EventHandler::S_PAUSE: case EventHandler::S_MENU: case EventHandler::S_CMDMENU: - if((fbstatus = myConsole->initializeVideo()) != kSuccess) + if((fbstatus = myConsole->initializeVideo()) != FBInitStatus::Success) return fbstatus; break; // S_EMULATE, S_PAUSE, S_MENU, S_CMDMENU case EventHandler::S_LAUNCHER: - if((fbstatus = myLauncher->initializeVideo()) != kSuccess) + if((fbstatus = myLauncher->initializeVideo()) != FBInitStatus::Success) return fbstatus; break; // S_LAUNCHER #ifdef DEBUGGER_SUPPORT case EventHandler::S_DEBUGGER: - if((fbstatus = myDebugger->initializeVideo()) != kSuccess) + if((fbstatus = myDebugger->initializeVideo()) != FBInitStatus::Success) return fbstatus; break; // S_DEBUGGER #endif @@ -333,7 +333,7 @@ string OSystem::createConsole(const FilesystemNode& rom, const string& md5sum, #endif myEventHandler->reset(EventHandler::S_EMULATE); myEventHandler->setMouseControllerMode(mySettings->getString("usemouse")); - if(createFrameBuffer() != kSuccess) // Takes care of initializeVideo() + if(createFrameBuffer() != FBInitStatus::Success) // Takes care of initializeVideo() { logMessage("ERROR: Couldn't create framebuffer for console", 0); myEventHandler->reset(EventHandler::S_LAUNCHER); @@ -392,7 +392,7 @@ bool OSystem::createLauncher(const string& startdir) bool status = false; myEventHandler->reset(EventHandler::S_LAUNCHER); - if(createFrameBuffer() == kSuccess) + if(createFrameBuffer() == FBInitStatus::Success) { myLauncher->reStack(); myFrameBuffer->setCursorState(); diff --git a/src/gui/AboutDialog.cxx b/src/gui/AboutDialog.cxx index efbbaebf5..9bc1c0870 100644 --- a/src/gui/AboutDialog.cxx +++ b/src/gui/AboutDialog.cxx @@ -65,14 +65,14 @@ AboutDialog::AboutDialog(OSystem& osystem, DialogContainer& parent, xpos = 5; ypos = 5; myTitle = new StaticTextWidget(this, font, xpos, ypos, _w - 10, fontHeight, - "", kTextAlignCenter); + "", TextAlign::Center); myTitle->setTextColor(kTextColorEm); xpos = 10; ypos += lineHeight + 4; for(int i = 0; i < myLinesPerPage; i++) { myDesc.push_back(new StaticTextWidget(this, font, xpos, ypos, _w - 20, - fontHeight, "", kTextAlignLeft)); + fontHeight, "", TextAlign::Left)); myDescStr.push_back(""); ypos += fontHeight; } @@ -168,7 +168,7 @@ void AboutDialog::displayInfo() for(int i = 0; i < myLinesPerPage; i++) { const char* str = myDescStr[i].c_str(); - TextAlignment align = kTextAlignCenter; + TextAlign align = TextAlign::Center; uInt32 color = kTextColor; while (str[0] == '\\') @@ -176,15 +176,15 @@ void AboutDialog::displayInfo() switch (str[1]) { case 'C': - align = kTextAlignCenter; + align = TextAlign::Center; break; case 'L': - align = kTextAlignLeft; + align = TextAlign::Left; break; case 'R': - align = kTextAlignRight; + align = TextAlign::Right; break; case 'c': diff --git a/src/gui/AudioDialog.cxx b/src/gui/AudioDialog.cxx index 5b10363eb..3480ff041 100644 --- a/src/gui/AudioDialog.cxx +++ b/src/gui/AudioDialog.cxx @@ -62,7 +62,7 @@ AudioDialog::AudioDialog(OSystem& osystem, DialogContainer& parent, myVolumeLabel = new StaticTextWidget(this, font, xpos + myVolumeSlider->getWidth() + 4, ypos + 1, - 3*fontWidth, fontHeight, "", kTextAlignLeft); + 3*fontWidth, fontHeight, "", TextAlign::Left); myVolumeLabel->setFlags(WIDGET_CLEARBG); ypos += lineHeight + 4; @@ -105,7 +105,7 @@ AudioDialog::AudioDialog(OSystem& osystem, DialogContainer& parent, const GUI::Font& infofont = instance().frameBuffer().infoFont(); new StaticTextWidget(this, infofont, 10, ypos, font.getStringWidth("(*) Requires application restart"), fontHeight, - "(*) Requires application restart", kTextAlignLeft); + "(*) Requires application restart", TextAlign::Left); // Add Defaults, OK and Cancel buttons ButtonWidget* b; diff --git a/src/gui/BrowserDialog.cxx b/src/gui/BrowserDialog.cxx index 011da2361..21b0e78f1 100644 --- a/src/gui/BrowserDialog.cxx +++ b/src/gui/BrowserDialog.cxx @@ -53,13 +53,13 @@ BrowserDialog::BrowserDialog(GuiObject* boss, const GUI::Font& font, xpos = 10; ypos = 4; _title = new StaticTextWidget(this, font, xpos, ypos, _w - 2 * xpos, lineHeight, - "", kTextAlignCenter); + "", TextAlign::Center); // Current path - TODO: handle long paths ? ypos += lineHeight + 4; _currentPath = new StaticTextWidget(this, font, xpos, ypos, _w - 2 * xpos, lineHeight, - "", kTextAlignLeft); + "", TextAlign::Left); // Add file list ypos += lineHeight + 4; @@ -73,7 +73,7 @@ BrowserDialog::BrowserDialog(GuiObject* boss, const GUI::Font& font, _type = new StaticTextWidget(this, font, xpos, ypos+2, font.getStringWidth("Name "), lineHeight, - "Name", kTextAlignCenter); + "Name", TextAlign::Center); _selected = new EditTextWidget(this, font, xpos + _type->getWidth(), ypos, _w - _type->getWidth() - 2 * xpos, lineHeight, ""); _selected->setEditable(false); diff --git a/src/gui/CheckListWidget.cxx b/src/gui/CheckListWidget.cxx index 73322c1dc..5caf3f103 100644 --- a/src/gui/CheckListWidget.cxx +++ b/src/gui/CheckListWidget.cxx @@ -118,7 +118,7 @@ void CheckListWidget::drawWidget(bool hilite) { adjustOffset(); s.drawString(_font, editString(), _x + r.left, y, r.width(), kTextColor, - kTextAlignLeft, -_editScrollOffset, false); + TextAlign::Left, -_editScrollOffset, false); } else s.drawString(_font, _list[pos], _x + r.left, y, r.width(), kTextColor); diff --git a/src/gui/ComboDialog.cxx b/src/gui/ComboDialog.cxx index 0e1b2cee5..d8672372c 100644 --- a/src/gui/ComboDialog.cxx +++ b/src/gui/ComboDialog.cxx @@ -52,7 +52,7 @@ ComboDialog::ComboDialog(GuiObject* boss, const GUI::Font& font, // Label for dialog, indicating which combo is being changed myComboName = new StaticTextWidget(this, font, xpos, ypos, _w - xpos - 10, - fontHeight, "", kTextAlignCenter); + fontHeight, "", TextAlign::Center); ypos += (lineHeight + 4) + 5; // Add event popup for 8 events diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index fc48e4f39..02b9e41b9 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -201,7 +201,7 @@ void DeveloperDialog::addVideoTab(const GUI::Font& font) myTVJitterRecLabelWidget = new StaticTextWidget(myTab, font, myTVJitterRecWidget->getRight() + 4, myTVJitterRecWidget->getTop() + 2, - 5 * fontWidth, fontHeight, "", kTextAlignLeft); + 5 * fontWidth, fontHeight, "", TextAlign::Left); myTVJitterRecLabelWidget->setFlags(WIDGET_CLEARBG); wid.push_back(myTVJitterRecLabelWidget); ypos += lineHeight + VGAP; @@ -430,7 +430,7 @@ void DeveloperDialog::addDebuggerTab(const GUI::Font& font) myDebuggerWidthLabel = new StaticTextWidget(myTab, font, xpos + myDebuggerWidthSlider->getWidth() + 4, - ypos + 1, 4 * fontWidth, fontHeight, "", kTextAlignLeft); + ypos + 1, 4 * fontWidth, fontHeight, "", TextAlign::Left); myDebuggerWidthLabel->setFlags(WIDGET_CLEARBG); ypos += lineHeight + VGAP; @@ -444,7 +444,7 @@ void DeveloperDialog::addDebuggerTab(const GUI::Font& font) myDebuggerHeightLabel = new StaticTextWidget(myTab, font, xpos + myDebuggerHeightSlider->getWidth() + 4, - ypos + 1, 4 * fontWidth, fontHeight, "", kTextAlignLeft); + ypos + 1, 4 * fontWidth, fontHeight, "", TextAlign::Left); myDebuggerHeightLabel->setFlags(WIDGET_CLEARBG); // Add message concerning usage @@ -472,7 +472,7 @@ void DeveloperDialog::addDebuggerTab(const GUI::Font& font) addToFocusList(wid, myTab, tabID); #else new StaticTextWidget(myTab, font, 0, 20, _w - 20, fontHeight, - "Debugger support not included", kTextAlignCenter); + "Debugger support not included", TextAlign::Center); #endif addToFocusList(wid, myTab, tabID); diff --git a/src/gui/EditTextWidget.cxx b/src/gui/EditTextWidget.cxx index 625df0c2d..11802d365 100644 --- a/src/gui/EditTextWidget.cxx +++ b/src/gui/EditTextWidget.cxx @@ -83,7 +83,7 @@ void EditTextWidget::drawWidget(bool hilite) adjustOffset(); s.drawString(_font, editString(), _x + 2, _y + 2, getEditRect().width(), !_changed ? _textcolor : uInt32(kDbgChangedTextColor), - kTextAlignLeft, -_editScrollOffset, false); + TextAlign::Left, -_editScrollOffset, false); // Draw the caret drawCaret(); diff --git a/src/gui/EventMappingWidget.cxx b/src/gui/EventMappingWidget.cxx index d3f307bef..319e6c720 100644 --- a/src/gui/EventMappingWidget.cxx +++ b/src/gui/EventMappingWidget.cxx @@ -108,7 +108,7 @@ EventMappingWidget::EventMappingWidget(GuiObject* boss, const GUI::Font& font, xpos = 10; ypos = 5 + myActionsList->getHeight() + 5; StaticTextWidget* t; t = new StaticTextWidget(boss, font, xpos, ypos+2, font.getStringWidth("Action"), - fontHeight, "Action", kTextAlignLeft); + fontHeight, "Action", TextAlign::Left); t->setFlags(WIDGET_CLEARBG); myKeyMapping = new EditTextWidget(boss, font, xpos + t->getWidth() + 8, ypos, diff --git a/src/gui/GameInfoDialog.cxx b/src/gui/GameInfoDialog.cxx index d29e7ccdd..450ea889e 100644 --- a/src/gui/GameInfoDialog.cxx +++ b/src/gui/GameInfoDialog.cxx @@ -76,49 +76,49 @@ GameInfoDialog::GameInfoDialog( lwidth = font.getStringWidth("Manufacturer "); fwidth = _w - xpos - lwidth - hSpace - hBorder * 2; new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, - "Name", kTextAlignLeft); + "Name", TextAlign::Left); myName = new EditTextWidget(myTab, font, xpos+lwidth, ypos-1, fwidth, lineHeight, ""); wid.push_back(myName); ypos += lineHeight + vGap; new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, - "MD5", kTextAlignLeft); + "MD5", TextAlign::Left); myMD5 = new EditTextWidget(myTab, font, xpos + lwidth, ypos-1, fwidth, lineHeight, ""); myMD5->setEditable(false); ypos += lineHeight + vGap; new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, - "Manufacturer", kTextAlignLeft); + "Manufacturer", TextAlign::Left); myManufacturer = new EditTextWidget(myTab, font, xpos+lwidth, ypos-1, fwidth, lineHeight, ""); wid.push_back(myManufacturer); ypos += lineHeight + vGap; new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, - "Model", kTextAlignLeft); + "Model", TextAlign::Left); myModelNo = new EditTextWidget(myTab, font, xpos+lwidth, ypos-1, fwidth, lineHeight, ""); wid.push_back(myModelNo); ypos += lineHeight + vGap; new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, - "Rarity", kTextAlignLeft); + "Rarity", TextAlign::Left); myRarity = new EditTextWidget(myTab, font, xpos+lwidth, ypos-1, fwidth, lineHeight, ""); wid.push_back(myRarity); ypos += lineHeight + vGap; new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, - "Note", kTextAlignLeft); + "Note", TextAlign::Left); myNote = new EditTextWidget(myTab, font, xpos+lwidth, ypos-1, fwidth, lineHeight, ""); wid.push_back(myNote); ypos += lineHeight + vGap; new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, - "Sound", kTextAlignLeft); + "Sound", TextAlign::Left); pwidth = font.getStringWidth("Stereo"); items.clear(); VarList::push_back(items, "Mono", "MONO"); @@ -129,7 +129,7 @@ GameInfoDialog::GameInfoDialog( ypos += lineHeight + vGap; new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, - "Type", kTextAlignLeft); + "Type", TextAlign::Left); pwidth = font.getStringWidth("CM (SpectraVideo CompuMate)"); items.clear(); for(int i = 0; i < int(BSType::NumSchemes); ++i) @@ -150,7 +150,7 @@ GameInfoDialog::GameInfoDialog( lwidth = font.getStringWidth("Right Difficulty "); pwidth = font.getStringWidth("B & W"); new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, - "Left Difficulty", kTextAlignLeft); + "Left Difficulty", TextAlign::Left); items.clear(); VarList::push_back(items, "B", "B"); VarList::push_back(items, "A", "A"); @@ -160,7 +160,7 @@ GameInfoDialog::GameInfoDialog( ypos += lineHeight + vGap; new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, - "Right Difficulty", kTextAlignLeft); + "Right Difficulty", TextAlign::Left); // ... use same items as above myRightDiff = new PopUpWidget(myTab, font, xpos+lwidth, ypos, pwidth, lineHeight, items, "", 0, 0); @@ -168,7 +168,7 @@ GameInfoDialog::GameInfoDialog( ypos += lineHeight + vGap; new StaticTextWidget(myTab, font, xpos, ypos+1, lwidth, fontHeight, - "TV Type", kTextAlignLeft); + "TV Type", TextAlign::Left); items.clear(); VarList::push_back(items, "Color", "COLOR"); VarList::push_back(items, "B & W", "BW"); @@ -187,7 +187,7 @@ GameInfoDialog::GameInfoDialog( ypos = vBorder; pwidth = font.getStringWidth("Paddles_IAxis"); myP0Label = new StaticTextWidget(myTab, font, hSpace, ypos+1, - "P0 Controller ", kTextAlignLeft); + "P0 Controller ", TextAlign::Left); ctrls.clear(); VarList::push_back(ctrls, "Joystick", "JOYSTICK" ); VarList::push_back(ctrls, "Paddles", "PADDLES" ); @@ -213,7 +213,7 @@ GameInfoDialog::GameInfoDialog( ypos += lineHeight + vGap; pwidth = font.getStringWidth("Paddles_IAxis"); myP1Label = new StaticTextWidget(myTab, font, hSpace, ypos+1, - "P1 Controller ", kTextAlignLeft); + "P1 Controller ", TextAlign::Left); myP1Controller = new PopUpWidget(myTab, font, myP1Label->getRight(), myP1Label->getTop()-1, pwidth, lineHeight, ctrls, "", 0, kRightCChanged); wid.push_back(myP1Controller); @@ -281,7 +281,7 @@ GameInfoDialog::GameInfoDialog( myMouseRangeLabel = new StaticTextWidget(myTab, font, myMouseRange->getRight() + 4, myMouseRange->getTop()+1, - " ", kTextAlignLeft); + " ", TextAlign::Left); myMouseRangeLabel->setFlags(WIDGET_CLEARBG); // Add items for tab 2 @@ -294,7 +294,7 @@ GameInfoDialog::GameInfoDialog( ypos = vBorder; pwidth = font.getStringWidth("Auto-detect"); - t = new StaticTextWidget(myTab, font, hSpace, ypos+1, "Format ", kTextAlignLeft); + t = new StaticTextWidget(myTab, font, hSpace, ypos+1, "Format ", TextAlign::Left); items.clear(); VarList::push_back(items, "Auto-detect", "AUTO"); VarList::push_back(items, "NTSC", "NTSC"); @@ -308,25 +308,25 @@ GameInfoDialog::GameInfoDialog( wid.push_back(myFormat); ypos += lineHeight + vGap; - t = new StaticTextWidget(myTab, font, hSpace, ypos+1, "YStart ", kTextAlignLeft); + t = new StaticTextWidget(myTab, font, hSpace, ypos+1, "YStart ", TextAlign::Left); myYStart = new SliderWidget(myTab, font, t->getRight(), ypos, 8*fontWidth, lineHeight, "", 0, kYStartChanged); myYStart->setMinValue(TIAConstants::minYStart-1); myYStart->setMaxValue(TIAConstants::maxYStart); wid.push_back(myYStart); myYStartLabel = new StaticTextWidget(myTab, font, myYStart->getRight() + 4, - ypos+1, 5*fontWidth, fontHeight, "", kTextAlignLeft); + ypos+1, 5*fontWidth, fontHeight, "", TextAlign::Left); myYStartLabel->setFlags(WIDGET_CLEARBG); ypos += lineHeight + vGap; - t = new StaticTextWidget(myTab, font, hSpace, ypos+1, "Height ", kTextAlignLeft); + t = new StaticTextWidget(myTab, font, hSpace, ypos+1, "Height ", TextAlign::Left); myHeight = new SliderWidget(myTab, font, t->getRight(), ypos, 8*fontWidth, lineHeight, "", 0, kHeightChanged); myHeight->setMinValue(TIAConstants::minViewableHeight-1); myHeight->setMaxValue(TIAConstants::maxViewableHeight); wid.push_back(myHeight); myHeightLabel = new StaticTextWidget(myTab, font, myHeight->getRight() + 4, - ypos+1, 5*fontWidth, fontHeight, "", kTextAlignLeft); + ypos+1, 5*fontWidth, fontHeight, "", TextAlign::Left); myHeightLabel->setFlags(WIDGET_CLEARBG); // Phosphor @@ -344,7 +344,7 @@ GameInfoDialog::GameInfoDialog( myPPBlendLabel = new StaticTextWidget(myTab, font, myPPBlend->getRight() + 4, myPhosphor->getTop(), - 5*fontWidth, fontHeight, "", kTextAlignLeft); + 5*fontWidth, fontHeight, "", TextAlign::Left); myPPBlendLabel->setFlags(WIDGET_CLEARBG); // Add items for tab 3 @@ -359,7 +359,7 @@ GameInfoDialog::GameInfoDialog( new StaticTextWidget(this, ifont, hSpace, _h - (buttonHeight + fontHeight + 20), lwidth, fontHeight, "(*) Changes to properties require a ROM reload", - kTextAlignLeft); + TextAlign::Left); // Add Defaults, OK and Cancel buttons wid.clear(); diff --git a/src/gui/GlobalPropsDialog.cxx b/src/gui/GlobalPropsDialog.cxx index 697cc3aa1..3d94f6468 100644 --- a/src/gui/GlobalPropsDialog.cxx +++ b/src/gui/GlobalPropsDialog.cxx @@ -53,7 +53,7 @@ GlobalPropsDialog::GlobalPropsDialog(GuiObject* boss, const GUI::Font& font) // Bankswitch type new StaticTextWidget(this, font, xpos, ypos+1, lwidth, fontHeight, - "Bankswitch type", kTextAlignLeft); + "Bankswitch type", TextAlign::Left); for(int i = 0; i < int(BSType::NumSchemes); ++i) VarList::push_back(items, BSList[i].desc, BSList[i].name); myBSType = new PopUpWidget(this, font, xpos+lwidth, ypos, @@ -64,7 +64,7 @@ GlobalPropsDialog::GlobalPropsDialog(GuiObject* boss, const GUI::Font& font) // Left difficulty pwidth = font.getStringWidth("Debugger"); new StaticTextWidget(this, font, xpos, ypos+1, lwidth, fontHeight, - "Left Difficulty", kTextAlignLeft); + "Left Difficulty", TextAlign::Left); items.clear(); VarList::push_back(items, "Default", "DEFAULT"); VarList::push_back(items, "B", "B"); @@ -76,7 +76,7 @@ GlobalPropsDialog::GlobalPropsDialog(GuiObject* boss, const GUI::Font& font) // Right difficulty new StaticTextWidget(this, font, xpos, ypos+1, lwidth, fontHeight, - "Right Difficulty", kTextAlignLeft); + "Right Difficulty", TextAlign::Left); // ... use same items as above myRightDiff = new PopUpWidget(this, font, xpos+lwidth, ypos, pwidth, lineHeight, items, "", 0, 0); @@ -85,7 +85,7 @@ GlobalPropsDialog::GlobalPropsDialog(GuiObject* boss, const GUI::Font& font) // TV type new StaticTextWidget(this, font, xpos, ypos+1, lwidth, fontHeight, - "TV Type", kTextAlignLeft); + "TV Type", TextAlign::Left); items.clear(); VarList::push_back(items, "Default", "DEFAULT"); VarList::push_back(items, "Color", "COLOR"); @@ -97,7 +97,7 @@ GlobalPropsDialog::GlobalPropsDialog(GuiObject* boss, const GUI::Font& font) // Start in debugger mode new StaticTextWidget(this, font, xpos, ypos+1, lwidth, fontHeight, - "Startup Mode", kTextAlignLeft); + "Startup Mode", TextAlign::Left); items.clear(); VarList::push_back(items, "Console", "false"); VarList::push_back(items, "Debugger", "true"); @@ -110,15 +110,15 @@ GlobalPropsDialog::GlobalPropsDialog(GuiObject* boss, const GUI::Font& font) new StaticTextWidget(this, font, xpos, ypos+1, font.getStringWidth("Start console with the following held down:"), fontHeight, "Start console with the following held down:", - kTextAlignLeft); + TextAlign::Left); xpos += 10; ypos += lineHeight; new StaticTextWidget(this, infofont, xpos, ypos+1, _w - 40, infofont.getFontHeight(), "(*) Buttons are automatically released shortly", - kTextAlignLeft); + TextAlign::Left); ypos += infofont.getLineHeight(); new StaticTextWidget(this, infofont, xpos, ypos+1, _w - 40, infofont.getFontHeight(), " after emulation has started", - kTextAlignLeft); + TextAlign::Left); // Start with console joystick direction/buttons held down xpos = 30; ypos += lineHeight + 10; @@ -127,10 +127,10 @@ GlobalPropsDialog::GlobalPropsDialog(GuiObject* boss, const GUI::Font& font) // Add message concerning usage xpos = 10; ypos += 2 * fontHeight; new StaticTextWidget(this, infofont, xpos, ypos, _w - 20, infofont.getFontHeight(), - "(*) These options are not saved, but apply to all", kTextAlignLeft); + "(*) These options are not saved, but apply to all", TextAlign::Left); ypos += infofont.getLineHeight(); new StaticTextWidget(this, infofont, xpos, ypos, _w - 20, infofont.getFontHeight(), - " further ROMs until clicking 'Defaults'", kTextAlignLeft); + " further ROMs until clicking 'Defaults'", TextAlign::Left); // Add Defaults, OK and Cancel buttons ButtonWidget* b; @@ -152,7 +152,7 @@ int GlobalPropsDialog::addHoldWidgets(const GUI::Font& font, int x, int y, // Left joystick StaticTextWidget* t = new StaticTextWidget(this, font, xpos, ypos+2, font.getStringWidth("Left Joy"), fontHeight, "Left Joy", - kTextAlignLeft); + TextAlign::Left); xpos += t->getWidth()/2 - 5; ypos += t->getHeight() + 10; myJoy[kJ0Up] = new CheckboxWidget(this, font, xpos, ypos, "", kJ0Up); ypos += myJoy[kJ0Up]->getHeight() * 2 + 10; @@ -172,7 +172,7 @@ int GlobalPropsDialog::addHoldWidgets(const GUI::Font& font, int x, int y, // Right joystick t = new StaticTextWidget(this, font, xpos, ypos+2, font.getStringWidth("Right Joy"), fontHeight, "Right Joy", - kTextAlignLeft); + TextAlign::Left); xpos += t->getWidth()/2 - 5; ypos += t->getHeight() + 10; myJoy[kJ1Up] = new CheckboxWidget(this, font, xpos, ypos, "", kJ1Up); ypos += myJoy[kJ1Up]->getHeight() * 2 + 10; @@ -191,7 +191,7 @@ int GlobalPropsDialog::addHoldWidgets(const GUI::Font& font, int x, int y, // Console Select/Reset t = new StaticTextWidget(this, font, xpos, ypos+2, font.getStringWidth("Console"), fontHeight, "Console", - kTextAlignLeft); + TextAlign::Left); xpos -= 10; ypos += t->getHeight() + 10; myHoldSelect = new CheckboxWidget(this, font, xpos, ypos, "Select"); ypos += myHoldSelect->getHeight() + 5; diff --git a/src/gui/HelpDialog.cxx b/src/gui/HelpDialog.cxx index 0b069c3ce..0ccdb01a5 100644 --- a/src/gui/HelpDialog.cxx +++ b/src/gui/HelpDialog.cxx @@ -64,7 +64,7 @@ HelpDialog::HelpDialog(OSystem& osystem, DialogContainer& parent, xpos = 5; ypos = 5; myTitle = new StaticTextWidget(this, font, xpos, ypos, _w - 10, fontHeight, - "", kTextAlignCenter); + "", TextAlign::Center); int lwidth = 12 * fontWidth; xpos += 5; ypos += lineHeight + 4; @@ -72,10 +72,10 @@ HelpDialog::HelpDialog(OSystem& osystem, DialogContainer& parent, { myKey[i] = new StaticTextWidget(this, font, xpos, ypos, lwidth, - fontHeight, "", kTextAlignLeft); + fontHeight, "", TextAlign::Left); myDesc[i] = new StaticTextWidget(this, font, xpos+lwidth, ypos, _w - xpos - lwidth - 5, - fontHeight, "", kTextAlignLeft); + fontHeight, "", TextAlign::Left); ypos += fontHeight; } diff --git a/src/gui/InputDialog.cxx b/src/gui/InputDialog.cxx index 1c11217a3..8af17b370 100644 --- a/src/gui/InputDialog.cxx +++ b/src/gui/InputDialog.cxx @@ -162,7 +162,7 @@ void InputDialog::addDevicePortTab(const GUI::Font& font) myDeadzone->setMinValue(0); myDeadzone->setMaxValue(29); xpos = hSpace + myDeadzone->getWidth() + 5; myDeadzoneLabel = new StaticTextWidget(myTab, font, xpos, ypos+1, 5*fontWidth, - lineHeight, "", kTextAlignLeft); + lineHeight, "", TextAlign::Left); myDeadzoneLabel->setFlags(WIDGET_CLEARBG); wid.push_back(myDeadzone); @@ -174,7 +174,7 @@ void InputDialog::addDevicePortTab(const GUI::Font& font) myDPaddleSpeed->setMinValue(1); myDPaddleSpeed->setMaxValue(20); xpos = hSpace + myDPaddleSpeed->getWidth() + 5; myDPaddleLabel = new StaticTextWidget(myTab, font, xpos, ypos+1, 24, lineHeight, - "", kTextAlignLeft); + "", TextAlign::Left); myDPaddleLabel->setFlags(WIDGET_CLEARBG); wid.push_back(myDPaddleSpeed); @@ -186,7 +186,7 @@ void InputDialog::addDevicePortTab(const GUI::Font& font) myMPaddleSpeed->setMinValue(1); myMPaddleSpeed->setMaxValue(20); xpos = hSpace + myMPaddleSpeed->getWidth() + 5; myMPaddleLabel = new StaticTextWidget(myTab, font, xpos, ypos+1, 24, lineHeight, - "", kTextAlignLeft); + "", TextAlign::Left); myMPaddleSpeed->setFlags(WIDGET_CLEARBG); wid.push_back(myMPaddleSpeed); @@ -198,7 +198,7 @@ void InputDialog::addDevicePortTab(const GUI::Font& font) myTrackBallSpeed->setMinValue(1); myTrackBallSpeed->setMaxValue(20); xpos = hSpace + myTrackBallSpeed->getWidth() + 5; myTrackBallLabel = new StaticTextWidget(myTab, font, xpos, ypos+1, 24, lineHeight, - "", kTextAlignLeft); + "", TextAlign::Left); myTrackBallSpeed->setFlags(WIDGET_CLEARBG); wid.push_back(myTrackBallSpeed); diff --git a/src/gui/InputTextDialog.cxx b/src/gui/InputTextDialog.cxx index fa999b8e1..6866b34ae 100644 --- a/src/gui/InputTextDialog.cxx +++ b/src/gui/InputTextDialog.cxx @@ -86,7 +86,7 @@ void InputTextDialog::initialize(const GUI::Font& lfont, const GUI::Font& nfont, xpos = 10; new StaticTextWidget(this, lfont, xpos, ypos + 2, lwidth, fontHeight, - labels[i], kTextAlignLeft); + labels[i], TextAlign::Left); xpos += lwidth + fontWidth; EditTextWidget* w = new EditTextWidget(this, nfont, xpos, ypos, @@ -99,7 +99,7 @@ void InputTextDialog::initialize(const GUI::Font& lfont, const GUI::Font& nfont, xpos = 10; myTitle = new StaticTextWidget(this, lfont, xpos, ypos, _w - 2*xpos, fontHeight, - "", kTextAlignLeft); + "", TextAlign::Left); myTitle->setTextColor(kTextColorEm); addToFocusList(wid); diff --git a/src/gui/JoystickDialog.cxx b/src/gui/JoystickDialog.cxx index c5fc387b1..2eed2d9cd 100644 --- a/src/gui/JoystickDialog.cxx +++ b/src/gui/JoystickDialog.cxx @@ -46,7 +46,7 @@ JoystickDialog::JoystickDialog(GuiObject* boss, const GUI::Font& font, ypos = _h - buttonHeight - 10; StaticTextWidget* t = new StaticTextWidget(this, font, xpos, ypos, font.getStringWidth("Joystick ID "), font.getFontHeight(), - "Joystick ID ", kTextAlignLeft); + "Joystick ID ", TextAlign::Left); xpos += t->getWidth() + 4; myJoyText = new EditTextWidget(this, font, xpos, ypos-2, font.getStringWidth("Unplugged")+8, font.getLineHeight(), ""); diff --git a/src/gui/LauncherDialog.cxx b/src/gui/LauncherDialog.cxx index b5bd8776f..371956e8d 100644 --- a/src/gui/LauncherDialog.cxx +++ b/src/gui/LauncherDialog.cxx @@ -66,13 +66,13 @@ LauncherDialog::LauncherDialog(OSystem& osystem, DialogContainer& parent, lwidth = font.getStringWidth("Select an item from the list ..."); xpos += 10; ypos += 8; new StaticTextWidget(this, font, xpos, ypos, lwidth, fontHeight, - "Select an item from the list ...", kTextAlignLeft); + "Select an item from the list ...", TextAlign::Left); lwidth2 = font.getStringWidth("XXXX items found"); xpos = _w - lwidth2 - 10; myRomCount = new StaticTextWidget(this, font, xpos, ypos, lwidth2, fontHeight, - "", kTextAlignRight); + "", TextAlign::Right); // Add filter that can narrow the results shown in the listing // It has to fit between both labels @@ -116,7 +116,7 @@ LauncherDialog::LauncherDialog(OSystem& osystem, DialogContainer& parent, xpos += 5; ypos += myList->getHeight() + 4; lwidth = font.getStringWidth("Dir "); myDirLabel = new StaticTextWidget(this, font, xpos, ypos+2, lwidth, fontHeight, - "Dir", kTextAlignLeft); + "Dir", TextAlign::Left); xpos += lwidth + 5; myDir = new EditTextWidget(this, font, xpos, ypos, _w - xpos - 10, lineHeight, ""); myDir->setEditable(false, true); @@ -481,7 +481,7 @@ void LauncherDialog::handleCommand(CommandSender* sender, int cmd, if(result == EmptyString) instance().settings().setValue("lastrom", myList->getSelectedString()); else - instance().frameBuffer().showMessage(result, kMiddleCenter, true); + instance().frameBuffer().showMessage(result, MessagePosition::MiddleCenter, true); } } break; diff --git a/src/gui/MessageBox.cxx b/src/gui/MessageBox.cxx index eddb23eba..1d25a8b1a 100644 --- a/src/gui/MessageBox.cxx +++ b/src/gui/MessageBox.cxx @@ -70,7 +70,7 @@ void MessageBox::addText(const GUI::Font& font, const StringList& text) for(const auto& s: text) { new StaticTextWidget(this, font, xpos, ypos, _w - 20, - fontHeight, s, kTextAlignLeft); + fontHeight, s, TextAlign::Left); ypos += fontHeight; } } diff --git a/src/gui/PopUpWidget.cxx b/src/gui/PopUpWidget.cxx index 0b2038ce3..7cd6532ee 100644 --- a/src/gui/PopUpWidget.cxx +++ b/src/gui/PopUpWidget.cxx @@ -188,7 +188,7 @@ void PopUpWidget::drawWidget(bool hilite) // Draw the label, if any if (_labelWidth > 0) s.drawString(_font, _label, _x, _y + myTextY, _labelWidth, - isEnabled() ? _textcolor : uInt32(kColor), kTextAlignRight); + isEnabled() ? _textcolor : uInt32(kColor), TextAlign::Right); // Draw a thin frame around us. s.hLine(x, _y, x + w - 1, kColor); @@ -205,8 +205,8 @@ void PopUpWidget::drawWidget(bool hilite) // Draw the selected entry, if any const string& name = myMenu->getSelectedName(); - TextAlignment align = (_font.getStringWidth(name) > w-6) ? - kTextAlignRight : kTextAlignLeft; + TextAlign align = (_font.getStringWidth(name) > w-6) ? + TextAlign::Right : TextAlign::Left; s.drawString(_font, name, x+2, _y+myTextY, w-6, !isEnabled() ? kColor : kTextColor, align); } diff --git a/src/gui/ProgressDialog.cxx b/src/gui/ProgressDialog.cxx index 2decae8d0..29fcde997 100644 --- a/src/gui/ProgressDialog.cxx +++ b/src/gui/ProgressDialog.cxx @@ -46,7 +46,7 @@ ProgressDialog::ProgressDialog(GuiObject* boss, const GUI::Font& font, xpos = fontWidth; ypos = lineHeight; myMessage = new StaticTextWidget(this, font, xpos, ypos, lwidth, fontHeight, - message, kTextAlignCenter); + message, TextAlign::Center); myMessage->setTextColor(kTextColorEm); xpos = fontWidth; ypos += 2 * lineHeight; diff --git a/src/gui/RomAuditDialog.cxx b/src/gui/RomAuditDialog.cxx index fa6082ea6..33dc00489 100644 --- a/src/gui/RomAuditDialog.cxx +++ b/src/gui/RomAuditDialog.cxx @@ -69,13 +69,13 @@ RomAuditDialog::RomAuditDialog(OSystem& osystem, DialogContainer& parent, // Show results of ROM audit ypos += buttonHeight + 16; new StaticTextWidget(this, font, hBorder, ypos, lwidth, fontHeight, - "ROMs with properties (renamed) ", kTextAlignLeft); + "ROMs with properties (renamed) ", TextAlign::Left); myResults1 = new EditTextWidget(this, font, hBorder + lwidth, ypos - 2, _w - hBorder*2 - lwidth, lineHeight, ""); myResults1->setEditable(false, true); ypos += buttonHeight; new StaticTextWidget(this, font, hBorder, ypos, lwidth, fontHeight, - "ROMs without properties (skipped) ", kTextAlignLeft); + "ROMs without properties (skipped) ", TextAlign::Left); myResults2 = new EditTextWidget(this, font, hBorder + lwidth, ypos - 2, _w - hBorder*2 - lwidth, lineHeight, ""); myResults2->setEditable(false, true); @@ -83,7 +83,7 @@ RomAuditDialog::RomAuditDialog(OSystem& osystem, DialogContainer& parent, ypos += buttonHeight + 8; new StaticTextWidget(this, font, hBorder, ypos, _w - 20, fontHeight, "(*) WARNING: operation cannot be undone!", - kTextAlignLeft); + TextAlign::Left); // Add OK and Cancel buttons addOKCancelBGroup(wid, font, "Audit", "Done"); diff --git a/src/gui/SnapshotDialog.cxx b/src/gui/SnapshotDialog.cxx index 50b6aa3d9..c9ed82d46 100644 --- a/src/gui/SnapshotDialog.cxx +++ b/src/gui/SnapshotDialog.cxx @@ -99,7 +99,7 @@ SnapshotDialog::SnapshotDialog(OSystem& osystem, DialogContainer& parent, fwidth = font.getStringWidth("When saving snapshots:"); xpos = vBorder; ypos += buttonHeight + 5; new StaticTextWidget(this, font, xpos, ypos, fwidth, lineHeight, - "When saving snapshots:", kTextAlignLeft); + "When saving snapshots:", TextAlign::Left); // Snapshot single or multiple saves xpos += 30; ypos += lineHeight + 3; diff --git a/src/gui/StringListWidget.cxx b/src/gui/StringListWidget.cxx index ef3b3d4f9..3cdc5102b 100644 --- a/src/gui/StringListWidget.cxx +++ b/src/gui/StringListWidget.cxx @@ -69,7 +69,7 @@ void StringListWidget::drawWidget(bool hilite) { adjustOffset(); s.drawString(_font, editString(), _x + r.left, y, r.width(), kTextColor, - kTextAlignLeft, -_editScrollOffset, false); + TextAlign::Left, -_editScrollOffset, false); } else s.drawString(_font, _list[pos], _x + r.left, y, r.width(), kTextColor); diff --git a/src/gui/TabWidget.cxx b/src/gui/TabWidget.cxx index bba18c49c..31756d56b 100644 --- a/src/gui/TabWidget.cxx +++ b/src/gui/TabWidget.cxx @@ -289,7 +289,7 @@ void TabWidget::drawWidget(bool hilite) box(x, _y + yOffset, _tabWidth, _tabHeight - yOffset, boxcolor, boxcolor, (i == _activeTab)); s.drawString(_font, _tabs[i].title, x + kTabPadding, _y + yOffset / 2 + (_tabHeight - _fontHeight - 1), - _tabWidth - 2 * kTabPadding, fontcolor, kTextAlignCenter); + _tabWidth - 2 * kTabPadding, fontcolor, TextAlign::Center); x += _tabWidth + kTabSpacing; } diff --git a/src/gui/UIDialog.cxx b/src/gui/UIDialog.cxx index 9776f8d6e..d7bedf004 100644 --- a/src/gui/UIDialog.cxx +++ b/src/gui/UIDialog.cxx @@ -76,7 +76,7 @@ UIDialog::UIDialog(OSystem& osystem, DialogContainer& parent, myLauncherWidthLabel = new StaticTextWidget(myTab, font, xpos + myLauncherWidthSlider->getWidth() + 4, - ypos + 1, 4*fontWidth, fontHeight, "", kTextAlignLeft); + ypos + 1, 4*fontWidth, fontHeight, "", TextAlign::Left); myLauncherWidthLabel->setFlags(WIDGET_CLEARBG); ypos += lineHeight + 4; @@ -90,7 +90,7 @@ UIDialog::UIDialog(OSystem& osystem, DialogContainer& parent, myLauncherHeightLabel = new StaticTextWidget(myTab, font, xpos + myLauncherHeightSlider->getWidth() + 4, - ypos + 1, 4*fontWidth, fontHeight, "", kTextAlignLeft); + ypos + 1, 4*fontWidth, fontHeight, "", TextAlign::Left); myLauncherHeightLabel->setFlags(WIDGET_CLEARBG); ypos += lineHeight + 4; @@ -133,7 +133,7 @@ UIDialog::UIDialog(OSystem& osystem, DialogContainer& parent, lwidth = ifont.getStringWidth("(*) Changes require application restart"); new StaticTextWidget(myTab, ifont, xpos, ypos, std::min(lwidth, _w-20), fontHeight, "(*) Changes require application restart", - kTextAlignLeft); + TextAlign::Left); // Add items for tab 0 addToFocusList(wid, myTab, tabID); @@ -194,7 +194,7 @@ UIDialog::UIDialog(OSystem& osystem, DialogContainer& parent, lwidth = ifont.getStringWidth("(*) Requires application restart"); new StaticTextWidget(myTab, ifont, xpos, ypos, std::min(lwidth, _w-20), fontHeight, "(*) Requires application restart", - kTextAlignLeft); + TextAlign::Left); // Add items for tab 2 addToFocusList(wid, myTab, tabID); diff --git a/src/gui/VideoDialog.cxx b/src/gui/VideoDialog.cxx index d30c5279e..dc7fff9d1 100644 --- a/src/gui/VideoDialog.cxx +++ b/src/gui/VideoDialog.cxx @@ -115,7 +115,7 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent, wid.push_back(myNAspectRatio); myNAspectRatioLabel = new StaticTextWidget(myTab, font, xpos + myNAspectRatio->getWidth() + 4, - ypos + 1, fontWidth * 3, fontHeight, "", kTextAlignLeft); + ypos + 1, fontWidth * 3, fontHeight, "", TextAlign::Left); myNAspectRatioLabel->setFlags(WIDGET_CLEARBG); ypos += lineHeight + VGAP; @@ -127,7 +127,7 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent, wid.push_back(myPAspectRatio); myPAspectRatioLabel = new StaticTextWidget(myTab, font, xpos + myPAspectRatio->getWidth() + 4, - ypos + 1, fontWidth * 3, fontHeight, "", kTextAlignLeft); + ypos + 1, fontWidth * 3, fontHeight, "", TextAlign::Left); myPAspectRatioLabel->setFlags(WIDGET_CLEARBG); ypos += lineHeight + VGAP; @@ -140,7 +140,7 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent, wid.push_back(myFrameRate); myFrameRateLabel = new StaticTextWidget(myTab, font, xpos + myFrameRate->getWidth() + 4, - ypos + 1, fontWidth * 4, fontHeight, "", kTextAlignLeft); + ypos + 1, fontWidth * 4, fontHeight, "", TextAlign::Left); myFrameRateLabel->setFlags(WIDGET_CLEARBG); // Add message concerning usage @@ -148,7 +148,7 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent, ypos = myTab->getHeight() - 5 - fontHeight - infofont.getFontHeight() - 10; new StaticTextWidget(myTab, infofont, 10, ypos, font.getStringWidth("(*) Requires application restart"), fontHeight, - "(*) Requires application restart", kTextAlignLeft); + "(*) Requires application restart", TextAlign::Left); // Move over to the next column xpos += myNAspectRatio->getWidth() + myNAspectRatioLabel->getWidth() + 30; @@ -228,7 +228,7 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent, wid.push_back(myTV ## obj); \ myTV ## obj ## Label = \ new StaticTextWidget(myTab, font, xpos+myTV ## obj->getWidth()+4, \ - ypos+1, fontWidth*3, fontHeight, "", kTextAlignLeft);\ + ypos+1, fontWidth*3, fontHeight, "", TextAlign::Left);\ myTV ## obj->setFlags(WIDGET_CLEARBG); \ ypos += lineHeight + VGAP; @@ -269,7 +269,7 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent, xpos -= 8+8; myTVScanLabel = new StaticTextWidget(myTab, font, xpos, ypos, font.getStringWidth("Scanline settings"), - fontHeight, "Scanline settings", kTextAlignLeft); + fontHeight, "Scanline settings", TextAlign::Left); ypos += lineHeight; xpos += 8+8; diff --git a/src/gui/Widget.cxx b/src/gui/Widget.cxx index 21e597935..c00f3cd97 100644 --- a/src/gui/Widget.cxx +++ b/src/gui/Widget.cxx @@ -268,7 +268,7 @@ Widget* Widget::setFocusForChain(GuiObject* boss, WidgetArray& arr, else tmp->_hasFocus = true; - s.frameRect(x, y, w, h, kWidFrameColor, kDashLine); + s.frameRect(x, y, w, h, kWidFrameColor, FrameStyle::Dashed); tmp->setDirty(); s.setDirty(); @@ -289,7 +289,7 @@ void Widget::setDirtyInChain(Widget* start) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - StaticTextWidget::StaticTextWidget(GuiObject* boss, const GUI::Font& font, int x, int y, int w, int h, - const string& text, TextAlignment align) + const string& text, TextAlign align) : Widget(boss, font, x, y, w, h), _align(align) { @@ -306,7 +306,7 @@ StaticTextWidget::StaticTextWidget(GuiObject* boss, const GUI::Font& font, // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - StaticTextWidget::StaticTextWidget(GuiObject* boss, const GUI::Font& font, int x, int y, - const string& text, TextAlignment align) + const string& text, TextAlign align) : StaticTextWidget(boss, font, x, y, font.getStringWidth(text), font.getLineHeight(), text, align) { } @@ -341,7 +341,7 @@ void StaticTextWidget::drawWidget(bool hilite) ButtonWidget::ButtonWidget(GuiObject* boss, const GUI::Font& font, int x, int y, int w, int h, const string& label, int cmd) - : StaticTextWidget(boss, font, x, y, w, h, label, kTextAlignCenter), + : StaticTextWidget(boss, font, x, y, w, h, label, TextAlign::Center), CommandSender(boss), _cmd(cmd) { @@ -704,7 +704,7 @@ void SliderWidget::drawWidget(bool hilite) // Draw the label, if any if(_labelWidth > 0) s.drawString(_font, _label, _x, _y + 2, _labelWidth, - isEnabled() ? kTextColor : kColor, kTextAlignRight); + isEnabled() ? kTextColor : kColor, TextAlign::Right); // Draw the box s.box(_x + _labelWidth, _y, _w - _labelWidth, _h, kColor, kShadowColor); diff --git a/src/gui/Widget.hxx b/src/gui/Widget.hxx index 7e6dd7ce7..6cabc791c 100644 --- a/src/gui/Widget.hxx +++ b/src/gui/Widget.hxx @@ -176,23 +176,23 @@ class StaticTextWidget : public Widget public: StaticTextWidget(GuiObject* boss, const GUI::Font& font, int x, int y, int w, int h, - const string& text, TextAlignment align = kTextAlignLeft); + const string& text, TextAlign align = TextAlign::Left); StaticTextWidget(GuiObject* boss, const GUI::Font& font, int x, int y, - const string& text, TextAlignment align = kTextAlignLeft); + const string& text, TextAlign align = TextAlign::Left); void setValue(int value); void setLabel(const string& label); - void setAlign(TextAlignment align) { _align = align; } - const string& getLabel() const { return _label; } - bool isEditable() const { return _editable; } + void setAlign(TextAlign align) { _align = align; } + const string& getLabel() const { return _label; } + bool isEditable() const { return _editable; } protected: void drawWidget(bool hilite) override; protected: - string _label; - bool _editable; - TextAlignment _align; + string _label; + bool _editable; + TextAlign _align; private: // Following constructors and assignment operators not supported From ba3cc0677da3cd55f5a18ec514480847ec9f231a Mon Sep 17 00:00:00 2001 From: thrust26 Date: Fri, 15 Dec 2017 14:16:11 +0100 Subject: [PATCH 068/156] Frame count/cycle alignment fixed --- src/debugger/gui/TiaInfoWidget.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/debugger/gui/TiaInfoWidget.cxx b/src/debugger/gui/TiaInfoWidget.cxx index 68fdf53c5..224c26690 100644 --- a/src/debugger/gui/TiaInfoWidget.cxx +++ b/src/debugger/gui/TiaInfoWidget.cxx @@ -128,8 +128,8 @@ void TiaInfoWidget::loadConfig() Debugger& dbg = instance().debugger(); TIADebug& tia = dbg.tiaDebug(); - myFrameCount->setText(Common::Base::toString(tia.frameCount(), Common::Base::F_10)); - myFrameCycles->setText(Common::Base::toString(tia.frameCycles(), Common::Base::F_10)); + myFrameCount->setText(" " + Common::Base::toString(tia.frameCount(), Common::Base::F_10)); + myFrameCycles->setText(" " + Common::Base::toString(tia.frameCycles(), Common::Base::F_10)); myVSync->setState(tia.vsync()); myVBlank->setState(tia.vblank()); From d28fb580b81eb99a99a67bf5d0db907b6cd89787 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Fri, 15 Dec 2017 15:25:08 +0100 Subject: [PATCH 069/156] bitmapped button added --- docs/graphics/debugger_globalbuttons.png | Bin 1491 -> 1402 bytes src/debugger/gui/DebuggerDialog.cxx | 38 +++++++++++++++++++++-- src/gui/Widget.cxx | 28 ++++++++++++++--- src/gui/Widget.hxx | 9 +++++- 4 files changed, 67 insertions(+), 8 deletions(-) diff --git a/docs/graphics/debugger_globalbuttons.png b/docs/graphics/debugger_globalbuttons.png index 907a2980c797ed69362adaa3ad3eaa96275648b5..acec6b0d1605c8e6546f042c25f310766526d490 100644 GIT binary patch delta 1336 zcmXw(e^ioJ7{{d)GhKFc+E|&LLNP3N-sq4FN!?6S$)=_qEE13)ld;m4I)A(-TR)s; zX60+B*r}|hB$LcJGSG?Uksl?U6v1d2Iu}?iLj|XMp|ktnbDn$e`F=mo_g;;=b>#)r z3Z#>h)AgsH##Du@UD@O0w5kW;6BJicm5c$MXJexx_vIZj*Zf?e4_)oD<45;C1SfQD z?@vtG@z7sL??j$QX2KTH*=T$^!lisf_$0#R4@EL#Cp&we_0y zO-Eaiwh65H0?_W+zW}dvTRBBN8f!Tu2EZjN`|MUgTh!LVKqdjp??9*YA%Q&5Ec`1K zh%~pHSY&oo)_RMy$th&^`72!w^Bx^#waiPFGpf;n<*5L8gw%mM zZJ^I;#Z}k|PvK-c%DG)!#r5%is#+k>#Cp^ts`^+n6pPfwr^VqO;{<=61PlQ*F$Ft; zM(~wM0LE>EbEORRCKLj~fn=a1plG^4ee&0`_j( zto1Bp+DS=u$glIlb*rv1RLAqkGS*u^AV)M7w5lSLo-=nIS}me%KO>(J`Q3(c)_GNT zTV5nHme~kZIkf^Fw_6}9)m$(AXD(F_8{P#@fdGSqIl z$15}NE==1B)^zmQ+XK&EZ(_9Bn3Vr%baKc@-GM|IE1;$v))#z~{{AAJad%^o(n+@& z^=07oT-Q0OM6)TVez`O`X8`uYA67k(rDL**Bv@pLGA?AT#yxvjSgQYix`kPxe;D2h zb`~kt6|1IyWeY!U;re-BQblCmijlEkhywu`r9-H^{)EaBix%3R4{8fGy(tdtdH0<5=NY7_+VLTrG14^$94wY#zk_E4cv}ufhmEdi~sc z>F{Samx_aRV9mGI+3kn4e(j>9+LV>Hb z8YSlyEU7MyhlToAE4$jEyav;-bdZ+=Xv-;OnIL4U?i%JTLZ&dbgAx(VYAqwgID(Sh z3+UZ6CGwa_sR$q8S8oq852~WZ{l)YMPrFvlqP8ud@ty7jP?l^RjqvB zi{I;rL3A_Zk|p`rz_Oy<`4|L0(s9AYw~hmE1#I|w`yVi$RoT@KM=_D>gZtf)WBBd1 z5dwWJVoZ&hKoAqfpkM=G)e!0wkt(Kx zZA!rCh#-{BJQEa*c|udh0ue-o6vT*#W(bH{WfdFXhn-GmzL|UOo$tQT$z@ricvzqQeq~G0oSI2w$DH+9SG%Gi?HH4q!^PxeL6%g39 znC(@`3qXS|kg;gMCYXQ*$9zScEKLZ446!yyUQ`x-EJhH^i?Bbb^$9J(033tZ_voV) zx09Q>6{#XVzfcsZHgwGx#Nq1RR!G;j$?R-}ukkqAU@!J@%)x#kuG*tI@zngr1AG}(-Del8ad$;%Q<=*t| zDbrvdjzEGZuqmK-95iJL6KBbcwOw2QY)c7P0h5O*i+HB-s>#*3a^LYGOOD5?AmZzc zScc{l^;4~o=G)W3YqiG!QkL24qFaT4ncJN!TbKg(SSha|x;mfl4*RDT-C9J}d>AIr z)ubQYqm1Ix2^CoITsP&8-B=Ldq0W6O4{hquty$al!3u)LGi^xQoM^Jf4o{2AX;l`s zLS3Nfnr^V34!8yx;~tigW(XJ#8=TY0>CC6cCR#%EujP;^ZP<3HHl4gbK5U(!UcQ4j ze=^<3mU!qf`u}$HjCEBJqkYm*M%uw!8o@CxwN1BiC4LZH__erHKC=(@NfQ+CGlj}~ z)fgaAW)GROTG7j3Y9~CXC{q||N!LE5KvSFHncoM74Q9zTJ)1B<=H_|o83He=EbjCf z1R-_rs@-d;rP$Q?1+5Qjbfi1zGxAh(wBoY|E8I&=kDCU6kE(7`hMjfZ5tCiA8*WkgNJFuILH=@H%RP zSN>A@(<^iRaPA@otls{57@6}_u`3Kg3U709eF3plh>cF&unI7=jl7@B&P z*yOWLmIQ-bS1)`+H{fJkS`tg{qfA+p_n7;Ggi4)~Ed~p}d)Hgc83`QkG=Vikn}p5* zT?I3$a|dQP6qdJMQ+ruvQkOF%n#lIUgNI>;d(E#x6|f@*8Yg z&e!UKFZWwQ5MNFG&(1DUi$t9<<34FE4_XyMQcCuo#L^}vyHrl>2IYqE6+<{_=KVXK Yqd31dM|m<_@4Bd+kuebs;f#WR0L;RUU;qFB diff --git a/src/debugger/gui/DebuggerDialog.cxx b/src/debugger/gui/DebuggerDialog.cxx index 8d6a07d95..cfeac07d2 100644 --- a/src/debugger/gui/DebuggerDialog.cxx +++ b/src/debugger/gui/DebuggerDialog.cxx @@ -408,6 +408,35 @@ void DebuggerDialog::addStatusArea() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DebuggerDialog::addRomArea() { + static uInt32 LEFT_ARROW[11] = + { + 0b0000010, + 0b0000110, + 0b0001110, + 0b0011110, + 0b0111110, + 0b1111110, + 0b0111110, + 0b0011110, + 0b0001110, + 0b0000110, + 0b0000010 + }; + static uInt32 RIGHT_ARROW[11] = + { + 0b0100000, + 0b0110000, + 0b0111000, + 0b0111100, + 0b0111110, + 0b0111111, + 0b0111110, + 0b0111100, + 0b0111000, + 0b0110000, + 0b0100000 + }; + const GUI::Rect& r = getRomBounds(); const int VBORDER = 4; const string ELLIPSIS = "\x1d"; @@ -430,20 +459,23 @@ void DebuggerDialog::addRomArea() new ButtonWidget(this, *myLFont, buttonX, buttonY, bwidth, bheight, "Exit", kDDExitCmd); - bwidth = myLFont->getStringWidth("< ") + 4; + bwidth = bheight; // 7 + 12; bheight = bheight * 3 + 4 * 2; buttonX -= (bwidth + 5); buttonY = r.top + 5; + myRewindButton = new ButtonWidget(this, *myLFont, buttonX, buttonY, - bwidth, bheight, "<", kDDRewindCmd); + bwidth, bheight, LEFT_ARROW, 7, 11, kDDRewindCmd); + myRewindButton->clearFlags(WIDGET_ENABLED); buttonY += bheight + 4; bheight = (myLFont->getLineHeight() + 2) * 2 + 4 * 1; + myUnwindButton = new ButtonWidget(this, *myLFont, buttonX, buttonY, - bwidth, bheight, ">", kDDUnwindCmd); + bwidth, bheight, RIGHT_ARROW, 7, 11, kDDUnwindCmd); myUnwindButton->clearFlags(WIDGET_ENABLED); int xpos = buttonX - 8*myLFont->getMaxCharWidth() - 20, ypos = 30; diff --git a/src/gui/Widget.cxx b/src/gui/Widget.cxx index c00f3cd97..1e008ac4a 100644 --- a/src/gui/Widget.cxx +++ b/src/gui/Widget.cxx @@ -343,7 +343,8 @@ ButtonWidget::ButtonWidget(GuiObject* boss, const GUI::Font& font, const string& label, int cmd) : StaticTextWidget(boss, font, x, y, w, h, label, TextAlign::Center), CommandSender(boss), - _cmd(cmd) + _cmd(cmd), + _useBitmap(false) { _flags = WIDGET_ENABLED | WIDGET_BORDER | WIDGET_CLEARBG; _bgcolor = kBtnColor; @@ -370,6 +371,19 @@ ButtonWidget::ButtonWidget(GuiObject* boss, const GUI::Font& font, { } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +ButtonWidget::ButtonWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int w, int h, + uInt32* bitmap, int bmw, int bmh, + int cmd) + : ButtonWidget(boss, font, x, y, w, h, "", cmd) +{ + _bitmap = bitmap; + _bmh = bmh; + _bmw = bmw; + _useBitmap = true; +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void ButtonWidget::handleMouseEntered(int button) { @@ -415,9 +429,15 @@ void ButtonWidget::handleMouseUp(int x, int y, int button, int clickCount) void ButtonWidget::drawWidget(bool hilite) { FBSurface& s = _boss->dialog().surface(); - s.drawString(_font, _label, _x, _y + (_h - _fontHeight)/2 + 1, _w, - !isEnabled() ? hilite ? uInt32(kColor) : uInt32(kBGColorLo) : - hilite ? _textcolorhi : _textcolor, _align); + if (!_useBitmap) + s.drawString(_font, _label, _x, _y + (_h - _fontHeight)/2 + 1, _w, + !isEnabled() ? hilite ? uInt32(kColor) : uInt32(kBGColorLo) : + hilite ? _textcolorhi : _textcolor, _align); + else + s.drawBitmap(_bitmap, _x + (_w - _bmw) / 2, _y + (_h - _bmh) / 2, + !isEnabled() ? hilite ? uInt32(kColor) : uInt32(kBGColorLo) : + hilite ? _textcolorhi : _textcolor, + _bmw, _bmh); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/Widget.hxx b/src/gui/Widget.hxx index 6cabc791c..f7b23e042 100644 --- a/src/gui/Widget.hxx +++ b/src/gui/Widget.hxx @@ -217,6 +217,10 @@ class ButtonWidget : public StaticTextWidget, public CommandSender ButtonWidget(GuiObject* boss, const GUI::Font& font, int x, int y, const string& label, int cmd = 0); + ButtonWidget(GuiObject* boss, const GUI::Font& font, + int x, int y, int dw, int dh, + uInt32* bitmap, int bmw, int bmh, + int cmd = 0); void setCmd(int cmd) { _cmd = cmd; } int getCmd() const { return _cmd; } @@ -230,7 +234,10 @@ class ButtonWidget : public StaticTextWidget, public CommandSender void drawWidget(bool hilite) override; protected: - int _cmd; + int _cmd; + bool _useBitmap; + uInt32* _bitmap; + int _bmw, _bmh; private: // Following constructors and assignment operators not supported From bf6d28e18105e21ca3c20510807ae5ea81e94e57 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Fri, 15 Dec 2017 13:19:29 -0330 Subject: [PATCH 070/156] Added basic infrastructure for what will become the rewind dialog. --- src/emucore/OSystem.cxx | 2 ++ src/emucore/OSystem.hxx | 11 ++++++++++ src/gui/RewindDialog.cxx | 39 ++++++++++++++++++++++++++++++++++ src/gui/RewindDialog.hxx | 42 +++++++++++++++++++++++++++++++++++++ src/gui/Rewinder.cxx | 29 ++++++++++++++++++++++++++ src/gui/Rewinder.hxx | 45 ++++++++++++++++++++++++++++++++++++++++ src/gui/module.mk | 2 ++ 7 files changed, 170 insertions(+) create mode 100644 src/gui/RewindDialog.cxx create mode 100644 src/gui/RewindDialog.hxx create mode 100644 src/gui/Rewinder.cxx create mode 100644 src/gui/Rewinder.hxx diff --git a/src/emucore/OSystem.cxx b/src/emucore/OSystem.cxx index 838f7d1c8..2d7bd1fac 100644 --- a/src/emucore/OSystem.cxx +++ b/src/emucore/OSystem.cxx @@ -47,6 +47,7 @@ #include "Menu.hxx" #include "CommandMenu.hxx" #include "Launcher.hxx" +#include "Rewinder.hxx" #include "PNGLibrary.hxx" #include "Widget.hxx" #include "Console.hxx" @@ -140,6 +141,7 @@ bool OSystem::create() myMenu = make_unique(*this); myCommandMenu = make_unique(*this); myLauncher = make_unique(*this); + myRewinder = make_unique(*this); myStateManager = make_unique(*this); // Create the sound object; the sound subsystem isn't actually diff --git a/src/emucore/OSystem.hxx b/src/emucore/OSystem.hxx index 5be8f4b75..7f6385e23 100644 --- a/src/emucore/OSystem.hxx +++ b/src/emucore/OSystem.hxx @@ -26,6 +26,7 @@ class Console; class Debugger; class Launcher; class Menu; +class Rewinder; class FrameBuffer; class PNGLibrary; class Properties; @@ -152,6 +153,13 @@ class OSystem */ Launcher& launcher() const { return *myLauncher; } + /** + Get the state rewinder of the system. + + @return The rewinder object + */ + Rewinder& rewinder() const { return *myRewinder; } + /** Get the state manager of the system. @@ -461,6 +469,9 @@ class OSystem unique_ptr myLauncher; bool myLauncherUsed; + // Pointer to the Rewinder object + unique_ptr myRewinder; + #ifdef DEBUGGER_SUPPORT // Pointer to the Debugger object unique_ptr myDebugger; diff --git a/src/gui/RewindDialog.cxx b/src/gui/RewindDialog.cxx new file mode 100644 index 000000000..682b25cc1 --- /dev/null +++ b/src/gui/RewindDialog.cxx @@ -0,0 +1,39 @@ +//============================================================================ +// +// SSSS tt lll lll +// SS SS tt ll ll +// SS tttttt eeee ll ll aaaa +// SSSS tt ee ee ll ll aa +// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" +// SS SS tt ee ll ll aa aa +// SSSS ttt eeeee llll llll aaaaa +// +// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// and the Stella Team +// +// See the file "License.txt" for information on usage and redistribution of +// this file, and for a DISCLAIMER OF ALL WARRANTIES. +//============================================================================ + +#include "Dialog.hxx" +#include "Font.hxx" +#include "EventHandler.hxx" +#include "FrameBuffer.hxx" +#include "OSystem.hxx" +#include "Widget.hxx" +#include "RewindDialog.hxx" + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +RewindDialog::RewindDialog(OSystem& osystem, DialogContainer& parent, + int max_w, int max_h) + : Dialog(osystem, parent) +{ + const GUI::Font& font = instance().frameBuffer().font(); + const int buttonWidth = font.getStringWidth("Right Diff B") + 20, + buttonHeight = font.getLineHeight() + 6, + rowHeight = font.getLineHeight() + 10; + + // Set real dimensions + _w = 3 * (buttonWidth + 5) + 20; + _h = 6 * rowHeight + 15; +} diff --git a/src/gui/RewindDialog.hxx b/src/gui/RewindDialog.hxx new file mode 100644 index 000000000..6bf71f47b --- /dev/null +++ b/src/gui/RewindDialog.hxx @@ -0,0 +1,42 @@ +//============================================================================ +// +// SSSS tt lll lll +// SS SS tt ll ll +// SS tttttt eeee ll ll aaaa +// SSSS tt ee ee ll ll aa +// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" +// SS SS tt ee ll ll aa aa +// SSSS ttt eeeee llll llll aaaaa +// +// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// and the Stella Team +// +// See the file "License.txt" for information on usage and redistribution of +// this file, and for a DISCLAIMER OF ALL WARRANTIES. +//============================================================================ + +#ifndef REWIND_DIALOG_HXX +#define REWIND_DIALOG_HXX + +class CommandSender; +class DialogContainer; +class OSystem; + +#include "Dialog.hxx" + +class RewindDialog : public Dialog +{ + public: + RewindDialog(OSystem& osystem, DialogContainer& parent, int max_w, int max_h); + virtual ~RewindDialog() = default; + + private: + // Following constructors and assignment operators not supported + RewindDialog() = delete; + RewindDialog(const RewindDialog&) = delete; + RewindDialog(RewindDialog&&) = delete; + RewindDialog& operator=(const RewindDialog&) = delete; + RewindDialog& operator=(RewindDialog&&) = delete; +}; + +#endif diff --git a/src/gui/Rewinder.cxx b/src/gui/Rewinder.cxx new file mode 100644 index 000000000..066e70759 --- /dev/null +++ b/src/gui/Rewinder.cxx @@ -0,0 +1,29 @@ +//============================================================================ +// +// SSSS tt lll lll +// SS SS tt ll ll +// SS tttttt eeee ll ll aaaa +// SSSS tt ee ee ll ll aa +// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" +// SS SS tt ee ll ll aa aa +// SSSS ttt eeeee llll llll aaaaa +// +// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// and the Stella Team +// +// See the file "License.txt" for information on usage and redistribution of +// this file, and for a DISCLAIMER OF ALL WARRANTIES. +//============================================================================ + +#include "Dialog.hxx" +#include "FrameBuffer.hxx" +#include "RewindDialog.hxx" +#include "Rewinder.hxx" + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Rewinder::Rewinder(OSystem& osystem) + : DialogContainer(osystem) +{ + myBaseDialog = new RewindDialog(myOSystem, *this, + FrameBuffer::kFBMinW, FrameBuffer::kFBMinH); +} diff --git a/src/gui/Rewinder.hxx b/src/gui/Rewinder.hxx new file mode 100644 index 000000000..67434d987 --- /dev/null +++ b/src/gui/Rewinder.hxx @@ -0,0 +1,45 @@ +//============================================================================ +// +// SSSS tt lll lll +// SS SS tt ll ll +// SS tttttt eeee ll ll aaaa +// SSSS tt ee ee ll ll aa +// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" +// SS SS tt ee ll ll aa aa +// SSSS ttt eeeee llll llll aaaaa +// +// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// and the Stella Team +// +// See the file "License.txt" for information on usage and redistribution of +// this file, and for a DISCLAIMER OF ALL WARRANTIES. +//============================================================================ + +#ifndef REWINDER_HXX +#define REWINDER_HXX + +class OSystem; + +#include "DialogContainer.hxx" + +/** + The base dialog for all rewind-related UI items in Stella. + + @author Stephen Anthony +*/ +class Rewinder : public DialogContainer +{ + public: + Rewinder(OSystem& osystem); + virtual ~Rewinder() = default; + + private: + // Following constructors and assignment operators not supported + Rewinder() = delete; + Rewinder(const Rewinder&) = delete; + Rewinder(Rewinder&&) = delete; + Rewinder& operator=(const Rewinder&) = delete; + Rewinder& operator=(Rewinder&&) = delete; +}; + +#endif diff --git a/src/gui/module.mk b/src/gui/module.mk index 06a8f46c5..ebe74d760 100644 --- a/src/gui/module.mk +++ b/src/gui/module.mk @@ -37,6 +37,8 @@ MODULE_OBJS := \ src/gui/PopUpWidget.o \ src/gui/ProgressDialog.o \ src/gui/RadioButtonWidget.o \ + src/gui/Rewinder.o \ + src/gui/RewindDialog.o \ src/gui/RomAuditDialog.o \ src/gui/RomInfoWidget.o \ src/gui/ScrollBarWidget.o \ From 7d40d5b1f82bca24a91e00857df7bbbf05cd4c4b Mon Sep 17 00:00:00 2001 From: thrust26 Date: Fri, 15 Dec 2017 18:10:40 +0100 Subject: [PATCH 071/156] "Time Machine" name change --- Changes.txt | 2 +- docs/debugger.html | 2 +- docs/graphics/options_developer.png | Bin 6552 -> 6607 bytes docs/graphics/options_developer_dbgcolors.png | Bin 6698 -> 0 bytes docs/graphics/options_developer_debugger.png | Bin 4732 -> 4810 bytes docs/graphics/options_developer_emulation.png | Bin 6623 -> 6674 bytes docs/graphics/options_developer_states.png | Bin 5301 -> 0 bytes .../options_developer_timemachine.png | Bin 0 -> 5298 bytes docs/graphics/options_developer_video.png | Bin 0 -> 6726 bytes docs/index.html | 68 +++++++++--------- src/common/RewindManager.cxx | 22 +++--- src/common/RewindManager.hxx | 4 +- src/common/StateManager.cxx | 18 ++--- src/common/StateManager.hxx | 4 +- src/debugger/CpuDebug.cxx | 12 ++++ src/debugger/CpuDebug.hxx | 4 ++ src/emucore/EventHandler.cxx | 12 ++-- src/emucore/FrameBuffer.cxx | 6 +- src/emucore/FrameBuffer.hxx | 2 +- src/emucore/Settings.cxx | 52 +++++++------- src/gui/DeveloperDialog.cxx | 52 +++++++------- src/gui/DeveloperDialog.hxx | 18 ++--- src/gui/HelpDialog.cxx | 6 +- 23 files changed, 152 insertions(+), 132 deletions(-) delete mode 100644 docs/graphics/options_developer_dbgcolors.png delete mode 100644 docs/graphics/options_developer_states.png create mode 100644 docs/graphics/options_developer_timemachine.png create mode 100644 docs/graphics/options_developer_video.png diff --git a/Changes.txt b/Changes.txt index f5ce153b6..74c0c0e7e 100644 --- a/Changes.txt +++ b/Changes.txt @@ -23,7 +23,7 @@ - improved cycle count (page penalties, sums created in disassembly) - improved handling of instruction masking opcodes (e.g. BIT) - * Added "Continuous Rewind" mode, which automatically creates save states + * Added "Time Machine" mode, which automatically creates save states in user-defined intervals. The user can navigate back and forth within these states inside the emulator and the debugger. diff --git a/docs/debugger.html b/docs/debugger.html index 332843089..29d9f5d36 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -320,7 +320,7 @@ which will undo the previous Step/Trace/Scan/Frame... advance, the smaller butto the left bottom (labeled '>') performs the unwind operation, which will undo the previous rewind operation. The rewind buffer is 100 levels deep by default, the size can be configured e.g. in the -Developer Settings - States dialog.

        +Developer Settings - Time Machine dialog.

        The other operations are Step, Trace, Scan+1, Frame+1 and Exit (debugger).

        diff --git a/docs/graphics/options_developer.png b/docs/graphics/options_developer.png index b8ad043ad35eea82283edc65badd36424ba682c6..6ddabe82d9f54889b1fcad1785eb5e3c3718992f 100644 GIT binary patch delta 5366 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 B#rgmM delta 5325 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 R6Z(VoTr;)2{NBVZ_FqC3zE%JL diff --git a/docs/graphics/options_developer_dbgcolors.png b/docs/graphics/options_developer_dbgcolors.png deleted file mode 100644 index e4873b90525c1ad1a0a7db7d00b0c7991c92192a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6698 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 QU&r+N=S_6q=v)u|4_`#a!~g&Q diff --git a/docs/graphics/options_developer_debugger.png b/docs/graphics/options_developer_debugger.png index 4be6c2d55c3dd102d551f2b7f3a742a0bb43db89..ecaba7dc0499d97929de4c10b589d40ab51ae912 100644 GIT binary patch delta 3488 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 G9Q`jnWA1tY diff --git a/docs/graphics/options_developer_timemachine.png b/docs/graphics/options_developer_timemachine.png new file mode 100644 index 0000000000000000000000000000000000000000..45e38e8e45e975b5b9518acd6d9685d5af7ac2de GIT binary patch literal 5298 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 literal 0 HcmV?d00001 diff --git a/docs/graphics/options_developer_video.png b/docs/graphics/options_developer_video.png new file mode 100644 index 0000000000000000000000000000000000000000..f9e591cd01f7dbd8d5faba4c38498cd30472ea82 GIT binary patch literal 6726 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 emulation supports full collision checking, with ability to disable TIA sprites and collisions for each object separately
      • Full system state save/load functionality
      • -
      • Automatic save state creation which allows moving back and forth in the recorded timeline
      • +
      • Automatic save state creation ('Time Machine') which allows moving back and forth in the recorded timeline
      • Cross-platform UI including a built-in ROM launcher frontend
      • Built-in extensive debugger, including static analysis with the Distella disassembler and dynamic analysis at runtime by tracking code/graphics/data sections, and @@ -1613,9 +1613,9 @@
      • Toggle 'Continuous Rewind' modeAlt + rCmd + rToggle 'Time Machine' modeAlt + tCmd + t
        Set the size of the debugger window.
        -dbg.fontsize <small|medium|large|>
        Set the font size in the debugger window.
        -dbg.fontstyle <0|1|2|3>
        How to use bold fonts in the debugger window. '0' means all normal font, @@ -2502,23 +2507,23 @@
        -<plr.|dev.>debugcolors <1|0>
        Enable/disable the fixed debug colors.
        -<plr.|dev.>rewind <1|0>
        Enables continuous rewind
        -<plr.|dev.>timemachine <1|0>
        Enables the Time Machine
        -<plr.|dev.>rewind.size <20 - 1000>
        Defines the rewind buffer size.
        -<plr.|dev.>tm.size <20 - 1000>
        Defines the Time Machine buffer size.
        -<plr.|dev.>rewind.uncompressed <0 - 1000>
        Defines the uncompressed rewind buffer size. Must be <= rewind buffer size.
        -<plr.|dev.>tm.uncompressed <0 - 1000>
        Defines the uncompressed Time Machine buffer size. Must be <= Time Machine buffer size.
        -<plr.|dev.>rewind.interval <1f|3f|10f|30f|1s|3s|10s>
        -<plr.|dev.>tm.interval <1f|3f|10f|30f|1s|3s|10s>
        Defines the interval between two save states.
        -<plr.|dev.>rewind.horizon <3s|10s|30s|1m|3m|10m|30m|60m>
        Defines the horizon of the rewind buffer.
        -<plr.|dev.>tm.horizon <3s|10s|30s|1m|3m|10m|30m|60m>
        Defines the horizon of the Time Machine.
        @@ -3062,7 +3067,7 @@

        Developer Settings dialog (Video):

        - + + + + + + + + + + + @@ -3160,9 +3170,10 @@ diff --git a/src/emucore/M6502.cxx b/src/emucore/M6502.cxx index 8eb73e440..184e7affa 100644 --- a/src/emucore/M6502.cxx +++ b/src/emucore/M6502.cxx @@ -74,6 +74,7 @@ M6502::M6502(const Settings& settings) #ifdef DEBUGGER_SUPPORT myDebugger = nullptr; myJustHitReadTrapFlag = myJustHitWriteTrapFlag = false; + myGhostReadsTrap = true; #endif } @@ -115,6 +116,7 @@ void M6502::reset() myDataAddressForPoke = 0; myHaltRequested = false; + myGhostReadsTrap = mySettings.getBool("dbg.ghostreadstrap"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -136,7 +138,8 @@ inline uInt8 M6502::peek(uInt16 address, uInt8 flags) myLastPeekAddress = address; #ifdef DEBUGGER_SUPPORT - if(myReadTraps.isInitialized() && myReadTraps.isSet(address)) + if(myReadTraps.isInitialized() && myReadTraps.isSet(address) + && (myGhostReadsTrap || flags != DISASM_NONE)) { myLastPeekBaseAddress = myDebugger->getBaseAddress(myLastPeekAddress, true); // mirror handling int cond = evalCondTraps(); @@ -396,6 +399,7 @@ bool M6502::save(Serializer& out) const out.putBool(myHaltRequested); out.putBool(myStepStateByInstruction); + out.putBool(myGhostReadsTrap); } catch(...) { @@ -447,6 +451,7 @@ bool M6502::load(Serializer& in) myHaltRequested = in.getBool(); myStepStateByInstruction = in.getBool(); + myGhostReadsTrap = in.getBool(); } catch(...) { diff --git a/src/emucore/M6502.hxx b/src/emucore/M6502.hxx index c00d22d85..12fb55357 100644 --- a/src/emucore/M6502.hxx +++ b/src/emucore/M6502.hxx @@ -242,6 +242,8 @@ class M6502 : public Serializable bool delCondTrap(uInt32 brk); void clearCondTraps(); const StringList& getCondTrapNames() const; + + void setGhostReadsTrap(bool enable) { myGhostReadsTrap = enable; } #endif // DEBUGGER_SUPPORT private: @@ -437,6 +439,8 @@ class M6502 : public Serializable int address; }; HitTrapInfo myHitTrapInfo; + // trap on ghost reads + bool myGhostReadsTrap; vector> myCondBreaks; StringList myCondBreakNames; diff --git a/src/emucore/Settings.cxx b/src/emucore/Settings.cxx index a97208af9..088cfadcf 100644 --- a/src/emucore/Settings.cxx +++ b/src/emucore/Settings.cxx @@ -137,7 +137,8 @@ Settings::Settings(OSystem& osystem) // Debugger/disassembly options setInternal("dbg.fontsize", "medium"); setInternal("dbg.fontstyle", "0"); - setInternal("dbg.uhex", "true"); + setInternal("dbg.uhex", "false"); + setInternal("dbg.ghostreadstrap", "true"); setInternal("dis.resolve", "true"); setInternal("dis.gfxformat", "2"); setInternal("dis.showaddr", "true"); @@ -533,6 +534,8 @@ void Settings::usage() const << " -dbg.fontsize \n" << " -dbg.fontstyle <0-3> Font style to use in debugger window (bold vs. normal)\n" + << " -dbg.ghostreadstrap <1|0> Debugger traps on 'ghost' reads\n" + << " -dbg.uhex <0|1> lower-/uppercase HEX display\n" << " -break
        Set a breakpoint at 'address'\n" << " -debug Start in debugger mode\n" << endl @@ -569,6 +572,7 @@ void Settings::usage() const << " -plr.tv.jitter <1|0> Enable TV jitter effect\n" << " -plr.tv.jitter_recovery <1-20> Set recovery time for TV jitter effect\n" << " -plr.tiadriven <1|0> Drive unused TIA pins randomly on a read/peek\n" + << " -plr.thumb.trapfatal <1|0> Determines whether errors in ARM emulation throw an exception\n" << endl << " The same parameters but for developer settings mode\n" << " -dev.stats <1|0> Overlay console info during emulation\n" @@ -581,7 +585,7 @@ void Settings::usage() const << " -dev.tv.jitter <1|0> Enable TV jitter effect\n" << " -dev.tv.jitter_recovery <1-20> Set recovery time for TV jitter effect\n" << " -dev.tiadriven <1|0> Drive unused TIA pins randomly on a read/peek\n" - << " -dev.thumb.trapfatal <1|0> Determines whether errors in ARM emulation throw an exception\n" + << " -dev.thumb.trapfatal <1|0> Determines whether errors in ARM emulation throw an exception\n" << endl << std::flush; } diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index 469c30a3e..099c65937 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -39,6 +39,7 @@ #include "OSystem.hxx" #include "StateManager.hxx" #include "RewindManager.hxx" +#include "M6502.hxx" #include "DeveloperDialog.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -327,7 +328,7 @@ void DeveloperDialog::addTimeMachineTab(const GUI::Font& font) int sWidth = font.getMaxCharWidth() * 8; myStateSizeWidget = new SliderWidget(myTab, font, HBORDER + INDENT * 2, ypos - 1, sWidth, lineHeight, - "Buffer size (*) ", 0, kSizeChanged); + "Buffer size ", 0, kSizeChanged); myStateSizeWidget->setMinValue(20); myStateSizeWidget->setMaxValue(1000); myStateSizeWidget->setStepValue(20); @@ -362,11 +363,6 @@ void DeveloperDialog::addTimeMachineTab(const GUI::Font& font) lineHeight, items, "Horizon ~ ", 0, kHorizonChanged); wid.push_back(myStateHorizonWidget); - // Add message concerning usage - const GUI::Font& infofont = instance().frameBuffer().infoFont(); - ypos = myTab->getHeight() - 5 - fontHeight - infofont.getFontHeight() - 10; - new StaticTextWidget(myTab, infofont, HBORDER, ypos, "(*) Requires application restart"); - addToFocusList(wid, myTab, tabID); } @@ -399,7 +395,7 @@ void DeveloperDialog::addDebuggerTab(const GUI::Font& font) pwidth = font.getStringWidth("Medium"); myDebuggerFontSize = new PopUpWidget(myTab, font, HBORDER, ypos + 1, pwidth, lineHeight, items, - "Font size ", 0, kDFontSizeChanged); + "Font size (*) ", 0, kDFontSizeChanged); wid.push_back(myDebuggerFontSize); ypos += lineHeight + 4; @@ -412,7 +408,7 @@ void DeveloperDialog::addDebuggerTab(const GUI::Font& font) pwidth = font.getStringWidth("Bold non-labels only"); myDebuggerFontStyle = new PopUpWidget(myTab, font, HBORDER, ypos + 1, pwidth, lineHeight, items, - "Font style ", 0); + "Font style (*) ", 0); wid.push_back(myDebuggerFontStyle); ypos += lineHeight + VGAP * 4; @@ -420,7 +416,7 @@ void DeveloperDialog::addDebuggerTab(const GUI::Font& font) pwidth = font.getMaxCharWidth() * 8; // Debugger width and height myDebuggerWidthSlider = new SliderWidget(myTab, font, xpos, ypos-1, pwidth, - lineHeight, "Debugger width ", + lineHeight, "Debugger width (*) ", 0, kDWidthChanged); myDebuggerWidthSlider->setMinValue(DebuggerDialog::kSmallFontMinW); myDebuggerWidthSlider->setMaxValue(ds.w); @@ -433,7 +429,7 @@ void DeveloperDialog::addDebuggerTab(const GUI::Font& font) ypos += lineHeight + VGAP; myDebuggerHeightSlider = new SliderWidget(myTab, font, xpos, ypos-1, pwidth, - lineHeight, "Debugger height ", + lineHeight, "Debugger height (*) ", 0, kDHeightChanged); myDebuggerHeightSlider->setMinValue(DebuggerDialog::kSmallFontMinH); myDebuggerHeightSlider->setMaxValue(ds.h); @@ -444,10 +440,14 @@ void DeveloperDialog::addDebuggerTab(const GUI::Font& font) xpos + myDebuggerHeightSlider->getWidth() + 4, ypos + 1, 4 * fontWidth, fontHeight, "", TextAlign::Left); + ypos += lineHeight + VGAP * 4; + myGhostReadsTrapWidget = new CheckboxWidget(myTab, font, HBORDER, ypos + 1, + "Trap on 'ghost' reads", kGhostReads); + // Add message concerning usage const GUI::Font& infofont = instance().frameBuffer().infoFont(); ypos = myTab->getHeight() - 5 - fontHeight - infofont.getFontHeight() - 10; - new StaticTextWidget(myTab, infofont, HBORDER, ypos, "(*) Changes require application restart"); + new StaticTextWidget(myTab, infofont, HBORDER, ypos, "(*) Changes require a ROM reload"); // Debugger is only realistically available in windowed modes 800x600 or greater // (and when it's actually been compiled into the app) @@ -673,6 +673,9 @@ void DeveloperDialog::loadConfig() int style = instance().settings().getInt("dbg.fontstyle"); myDebuggerFontStyle->setSelected(style, "0"); + // Ghost reads trap + myGhostReadsTrapWidget->setState(instance().settings().getBool("dbg.ghostreadstrap")); + handleFontSize(); #endif @@ -725,6 +728,11 @@ void DeveloperDialog::saveConfig() myDebuggerHeightSlider->getValue())); // Debugger font size instance().settings().setValue("dbg.fontsize", myDebuggerFontSize->getSelectedTag().toString()); + + // Ghost reads trap + instance().settings().setValue("dbg.ghostreadstrap", myGhostReadsTrapWidget->getState()); + if(instance().hasConsole()) + instance().console().system().m6502().setGhostReadsTrap(myGhostReadsTrapWidget->getState()); #endif } @@ -785,6 +793,9 @@ void DeveloperDialog::setDefaults() myDebuggerHeightLabel->setValue(h); myDebuggerFontSize->setSelected("medium"); myDebuggerFontStyle->setSelected("0"); + + myGhostReadsTrapWidget->setState(true); + handleFontSize(); #endif break; diff --git a/src/gui/DeveloperDialog.hxx b/src/gui/DeveloperDialog.hxx index ca5f399c0..6cb298b36 100644 --- a/src/gui/DeveloperDialog.hxx +++ b/src/gui/DeveloperDialog.hxx @@ -78,6 +78,7 @@ class DeveloperDialog : public Dialog kDWidthChanged = 'UIdw', kDHeightChanged = 'UIdh', kDFontSizeChanged = 'UIfs', + kGhostReads = 'Dbgh' #endif }; enum SettingsSet @@ -133,6 +134,7 @@ class DeveloperDialog : public Dialog StaticTextWidget* myDebuggerHeightLabel; PopUpWidget* myDebuggerFontSize; PopUpWidget* myDebuggerFontStyle; + CheckboxWidget* myGhostReadsTrapWidget; #endif bool mySettings; From dd5a46880eee9932158d1f502914ecfb653963b0 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Mon, 18 Dec 2017 15:15:57 -0330 Subject: [PATCH 100/156] Some updates to dialog positioning in preparation for HiDPI. - note that these are fixes that are needed with or without HiDPI; testing HiDPI just exposed them as bugs - also fixed some minor warnings and formatting --- src/common/FBSurfaceSDL2.cxx | 11 ++++++----- src/emucore/FBSurface.hxx | 18 +++++++++--------- src/gui/DialogContainer.cxx | 2 +- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/common/FBSurfaceSDL2.cxx b/src/common/FBSurfaceSDL2.cxx index 2e9c2965c..e7e79a2b5 100644 --- a/src/common/FBSurfaceSDL2.cxx +++ b/src/common/FBSurfaceSDL2.cxx @@ -122,8 +122,8 @@ void FBSurfaceSDL2::setVisible(bool visible) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void FBSurfaceSDL2::translateCoords(Int32& x, Int32& y) const { - x -= myDstR.x; - y -= myDstR.y; + x -= myDstR.x; x /= myDstR.w / mySrcR.w; + y -= myDstR.y; y /= myDstR.h / mySrcR.h; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -210,9 +210,10 @@ void FBSurfaceSDL2::createSurface(uInt32 width, uInt32 height, // We start out with the src and dst rectangles containing the same // dimensions, indicating no scaling or re-positioning - mySrcR.x = mySrcR.y = myDstR.x = myDstR.y = 0; - mySrcR.w = myDstR.w = width; - mySrcR.h = myDstR.h = height; + setSrcPos(0, 0); + setDstPos(0, 0); + setSrcSize(width, height); + setDstSize(width, height); //////////////////////////////////////////////////// // These *must* be set for the parent class diff --git a/src/emucore/FBSurface.hxx b/src/emucore/FBSurface.hxx index 2f97a4bcc..fbb31d6d7 100644 --- a/src/emucore/FBSurface.hxx +++ b/src/emucore/FBSurface.hxx @@ -85,9 +85,9 @@ class FBSurface This method should be called to draw a line. @param x The first x coordinate - @param y The y coordinate + @param y The first y coordinate @param x2 The second x coordinate - @param xy The second y coordinate + @param y2 The second y coordinate @param color The color of the line */ virtual void line(uInt32 x, uInt32 y, uInt32 x2, uInt32 y2, uInt32 color); @@ -149,14 +149,14 @@ class FBSurface uInt32 h = 8); /** - This method should be called to draw the bitmap image. + This method should be called to draw the bitmap image. - @param bitmap The data to draw - @param x The x coordinate - @param y The y coordinate - @param color The color of the bitmap - @param w The width of the data image - @param h The height of the data image + @param bitmap The data to draw + @param x The x coordinate + @param y The y coordinate + @param color The color of the bitmap + @param w The width of the data image + @param h The height of the data image */ virtual void drawBitmap(uInt32* bitmap, uInt32 x, uInt32 y, uInt32 color, uInt32 w, uInt32 h); diff --git a/src/gui/DialogContainer.cxx b/src/gui/DialogContainer.cxx index 811f5615a..f9042b5f5 100644 --- a/src/gui/DialogContainer.cxx +++ b/src/gui/DialogContainer.cxx @@ -116,7 +116,7 @@ void DialogContainer::draw(bool full) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DialogContainer::addDialog(Dialog* d) { - GUI::Rect r = myOSystem.frameBuffer().imageRect(); + const GUI::Rect& r = myOSystem.frameBuffer().imageRect(); if(uInt32(d->getWidth()) > r.width() || uInt32(d->getHeight()) > r.height()) myOSystem.frameBuffer().showMessage( "Unable to show dialog box; resize current window"); From 9d93472298f3f6b44e7862e227aef6f96527cca8 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Mon, 18 Dec 2017 15:19:19 -0330 Subject: [PATCH 101/156] Oops, forgot this one in the last commit. --- src/gui/Dialog.cxx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/gui/Dialog.cxx b/src/gui/Dialog.cxx index a6ecbef68..8d7805024 100644 --- a/src/gui/Dialog.cxx +++ b/src/gui/Dialog.cxx @@ -106,9 +106,8 @@ void Dialog::center() if(_surface) { const GUI::Size& screen = instance().frameBuffer().screenSize(); - uInt32 x = (screen.w - getWidth()) >> 1; - uInt32 y = (screen.h - getHeight()) >> 1; - _surface->setDstPos(x, y); + const GUI::Rect& dst = _surface->dstRect(); + _surface->setDstPos((screen.w - dst.width()) >> 1, (screen.h - dst.height()) >> 1); } } From 042d4bc8125ca3fb16e4d085291e24e7373ef516 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Mon, 18 Dec 2017 16:10:15 -0330 Subject: [PATCH 102/156] Updated ROM properties for ROMs starting with 'B' and 'C'. --- src/emucore/DefProps.hxx | 136 ++++++++++++++++----------------- src/emucore/stella.pro | 158 ++++++++++++++++++++------------------- 2 files changed, 148 insertions(+), 146 deletions(-) diff --git a/src/emucore/DefProps.hxx b/src/emucore/DefProps.hxx index 8551b16a2..ce9836551 100644 --- a/src/emucore/DefProps.hxx +++ b/src/emucore/DefProps.hxx @@ -32,7 +32,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "0060a89b4c956b9c703a59b181cb3018", "CommaVid, Irwin Gaines - Ariola", "CM-008 - 712 008-720", "Cakewalk (1983) (CommaVid) (PAL)", "AKA Alarm in der Backstube", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "007d18dedc1f0565f09c42aa61a6f585", "CCE", "C-843", "Worm War I (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "008543ae43497af015e9428a5e3e874e", "Retroactive", "", "Qb (V2.09) (PAL) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "00b7b4cbec81570642283e7fc1ef17af", "Sega, Steve Beck, Phat Ho - Beck-Tech - Teldec", "006-01", "Congo Bongo (1983) (Sega)", "", "", "", "", "", "", "", "", "", "", "", "", "", "34", "", "", "" }, + { "00b7b4cbec81570642283e7fc1ef17af", "Sega - Beck-Tech, Steve Beck, Phat Ho", "006-01", "Congo Bongo (1983) (Sega)", "", "", "", "", "", "", "", "", "", "", "", "", "", "26", "220", "", "" }, { "00ce0bdd43aed84a983bef38fe7f5ee3", "20th Century Fox, Bill Aspromonte", "11012", "Bank Heist (1983) (20th Century Fox)", "AKA Bonnie and Clyde, Cops 'n' Robbers, Holdup, Rooring 20's", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "00ce76ad69cdc2fa36ada01ae092d5a6", "Bit Corporation", "PGP214", "Cosmic Avenger (4 Game in One) (1983) (BitCorp) (PAL)", "AKA StarMaster", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "00dc28b881989c39a6cf87a892bd3c6b", "CCE", "", "Krull (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -58,7 +58,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "026180bf641ff17d8577c33facf0edea", "Activision, Steve Cartwright", "AX-022", "Seaquest (1983) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0277c449fae63f6f1c8f94dedfcf0058", "", "", "Laser Demo (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "027a59a575b78860aed780b2ae7d001d", "CCE", "", "Pressure Cooker (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "028024fb8e5e5f18ea586652f9799c96", "Coleco, Steve 'Jessica' Kitchen", "2468", "Carnival (1982) (Coleco)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "028024fb8e5e5f18ea586652f9799c96", "Coleco - Woodside Design Associates, Steve 'Jessica Stevens' Kitchen", "2468", "Carnival (1982) (Coleco)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "02811151906e477d47c135db5b1699c6", "", "", "FlickerSort Demo (Updated) (20-04-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "02a5fc90a0d183f870e8eebac1f16591", "HES", "771-422", "2 Pak Special - Star Warrior, Frogger (1990) (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "02ab2c47bc21e7feafa015f90d7df776", "Atari", "MA017600", "Diagnostic Test Cartridge 2.6 (1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -174,7 +174,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "0afe6ae18966795b89314c3797dd2b1e", "Atari - GCC, Mark Ackerman, Noellie Alito", "CX2692, CX2692P", "Moon Patrol (1983) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0b01909ba84512fdaf224d3c3fd0cf8d", "", "", "Revenge of the Apes (Hack)", "Hack of Planet of the Apes", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0b1056f1091cfdc5eb0e2301f47ac6c3", "Tigervision, Karl T. Olinger - Teldec", "7-001 - 3.60001 VE", "King Kong (1982) (Tigervision) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "0b17ed42984000da8b727ca46143f87a", "Atari, Christopher H. Omarzu - Children's Computer Workshop", "CX26104", "Big Bird's Egg Catch (05-17-1983) (Atari) (Prototype)", "Uses the Keypad Controller", "Prototype", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "", "" }, + { "0b17ed42984000da8b727ca46143f87a", "Atari - CCW, Christopher H. Omarzu", "CX26104", "Big Bird's Egg Catch (05-17-1983) (Atari) (Prototype)", "Uses the Keypad Controller", "Prototype", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "", "" }, { "0b24658714f8dff110a693a2052cc207", "CCE", "C-815", "Seaquest (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0b33252b680b65001e91a411e56e72e9", "CCE", "C-832", "Atlantis (1983) (CCE) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0b4e793c9425175498f5a65a3e960086", "CCE", "", "Kung Fu Master (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -201,7 +201,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "0d1b3abf681a2fc9a6aa31a9b0e8b445", "Atari", "CX26163P", "Laser Blast (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0d27c7f5db349b592f70f68daf5e8f3b", "", "", "Space Instigators (21-10-2002) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0d35618b6d76ddd46d2626e9e3e40db5", "", "", "X-Doom V.26 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "0d5af65ad3f19558e6f8e29bf2a9d0f8", "Atari, Adam Clayton, John Howard Palevich", "CX26151, CX26151P", "Dark Chambers (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "0d5af65ad3f19558e6f8e29bf2a9d0f8", "Atari - Sculptured Software, Adam Clayton", "CX26151, CX26151P", "Dark Chambers (1989) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "0d6b974fe58a1bdd453600401c407856", "Atari", "", "128-in-1 Junior Console (Chip 3 or 4) (1991) (Atari) (PAL)", "Actually contains only 16 games, not 32", "", "", "16IN1", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0d786a41695e5fc8cffd05a6dbb3f659", "", "", "Scrolling Playfield With Score (10-02-2003) (Aaron Bergstrom)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0d7e630a14856f4d52c9666040961d4d", "", "", "Wavy Line Test (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -220,7 +220,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "0ec93f519bb769e0d9f80e61f6cc8023", "Atari - GCC, Mike Feinstein, John Allred", "CX2688", "Jungle Hunt (02-25-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0eebfb60d437796d536039701ec43845", "Fabrizio Zavagli", "", "Cakewalk (Fabrizio Zavagli)", "NTSC Conversion", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0eecb5f58f55de9db4eedb3a0f6b74a8", "Xonox - Beck-Tech", "6210, 06002, 06004, 99002", "Ghost Manor (1983) (Xonox) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, - { "0ef64cdbecccb7049752a3de0b7ade14", "Atari, Joe Decuir, Steve Mayer, Larry Wagner", "CX26163P", "Combat (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, + { "0ef64cdbecccb7049752a3de0b7ade14", "Atari, Joe Decuir, Larry Caplan, Steve Mayer, Larry Wagner", "CX26163P", "Combat (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, { "0f14c03050b35d6b1d8850b07578722d", "Jeffry Johnston", "", "Radial Pong - Version 10 (Jeffry Johnston) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0f24ca5668b4ab5dfaf217933c505926", "", "", "Fantastic Voyage (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0f2e09c71cc216f79d22a804152ba24b", "Bob Colbert", "", "Scroller Demo (Bob Colbert) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -243,7 +243,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "103f1756d9dc0dd2b16b53ad0f0f1859", "Home Vision, Gem International Corp.", "", "Go Go Home Monster (1983) (Home Vision) (PAL)", "AKA Go Go Home", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "104468e44898b8e9fa4a1500fde8d4cb", "AtariAge, Chris Spry", "CX26200", "Princess Rescue (2013) (Sprybug)", "Compatible with Genesis controller", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "106326c262dfd3e8eaeabd961d2a0519", "", "", "PAL-NTSC Detector (15-11-2002) (CT)[a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "106855474c69d08c8ffa308d47337269", "Atari, Adam Clayton, John Howard Palevich", "CX26151", "Dark Chambers (1988) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "106855474c69d08c8ffa308d47337269", "Atari - Sculptured Software, Adam Clayton", "CX26151", "Dark Chambers (1989) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "107cc025334211e6d29da0b6be46aec7", "Atari, Bob Smith - Sears", "CX2648 - 49-75161", "Video Pinball (1981) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1086ff69f82b68d6776634f336fb4857", "Activision, David Crane", "AG-009", "Bloody Human Freeway (Activision) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "10958cd0a1a81d599005f1797ab0e51d", "", "", "Centipede 2k (2000) (PD) (Hack)", "Hack of Centipede", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -307,7 +307,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "14d365bbfaac3d20c6119591f57acca4", "", "", "Video Life (Unknown) (4K) (Hack)", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "14dbb3686dd31964332dc2ef0c55cad0", "", "", "Demo Image Series #15 - Three Marios (PAL) (Non-Interleave) (06-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "151c33a71b99e6bcffb34b43c6f0ec23", "Parker Brothers, Laura Nikolich", "", "Care Bears (1983) (Parker Bros) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "151fa3218d8d7600114eb5bcd79c85cb", "Atari, Christopher H. Omarzu - Children's Computer Workshop", "CX26104", "Big Bird's Egg Catch (05-02-1983) (Atari) (Prototype)", "Uses the Keypad Controller", "Prototype", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "", "" }, + { "151fa3218d8d7600114eb5bcd79c85cb", "Atari - CCW, Christopher H. Omarzu", "CX26104", "Big Bird's Egg Catch (05-02-1983) (Atari) (Prototype)", "Uses the Keypad Controller", "Prototype", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "", "" }, { "152c253478b009c275e18cd731b48561", "", "", "Quest (11-10-2002) (Chris Larkin)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "153f40e335e5cb90f5ce02e54934ab62", "Absolute Entertainment, Alex DeMeo", "EAZ-041-04I", "Title Match Pro Wrestling (1987) (Absolute) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1542662f665d2ffaa77b4b897dd2e2af", "", "", "Starfield (V1.0) (2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -344,10 +344,10 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "17badbb3f54d1fc01ee68726882f26a6", "M Network, Hal Finney, Bruce Pedersen - INTV", "MT5659", "Space Attack (1982) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "17bbe288c3855c235950fea91c9504e9", "Dismac", "", "Pega Ladrao (Dismac)", "AKA Keystone Kapers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "17c0a63f9a680e7a61beba81692d9297", "U.S. Games Corporation, Tom Sloper", "VC2004", "Picnic (1982) (U.S. Games)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 45", "", "", "", "", "" }, - { "17d000a2882f9fdaa8b4a391ad367f00", "Atari - GCC", "CX2676", "Centipede (1982) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "17d000a2882f9fdaa8b4a391ad367f00", "Atari - GCC", "CX2676", "Centipede (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "17ee158d15e4a34f57a837bc1ce2b0ce", "Atari - GCC, Mike Feinstein, Kevin Osborn", "CX2691, CX2691P", "Joust (1983) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "17ee23e5da931be82f733917adcb6386", "Salu, Dennis M. Kiss", "460758", "Acid Drop (1992) (Salu) (PAL)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "50", "256", "", "" }, - { "1802cc46b879b229272501998c5de04f", "Atari, Christopher H. Omarzu - Children's Computer Workshop", "CX26104", "Big Bird's Egg Catch (1983) (Atari)", "Uses Kids/Keypad Controllers", "Rare", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, + { "1802cc46b879b229272501998c5de04f", "Atari - CCW, Christopher H. Omarzu", "CX26104", "Big Bird's Egg Catch (1983) (Atari)", "Uses Kids/Keypad Controllers", "Rare", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "183020a80848e06a1238a1ab74079d52", "Thomas Jentzsch", "", "Missile Command (Amiga Mouse) (2002) (TJ) (PAL)", "Uses Amiga Mouse Controller", "Homebrew", "", "", "", "", "", "", "AMIGAMOUSE", "", "", "", "", "", "", "YES", "" }, { "1862fca4f98e66f363308b859b5863af", "Atari", "", "128-in-1 Junior Console (Chip 1 of 4) (1991) (Atari) (PAL)", "Actually contains only 16 games, not 32", "", "", "16IN1", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "18760f1f9ca5e18610115cf7b815b824", "", "", "Star Fire (23-10-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -402,7 +402,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "1d4e0a034ad1275bc4d75165ae236105", "20th Century Fox Video Games, Mark Klein", "11034", "Pick Up (1983) (20th Century Fox) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1d5eac85e67b8cff1377c8dba1136929", "", "", "Chronocolor Donkey Kong Sideways (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1d6ed6fe9dfbde32708e8353548cbb80", "Jone Yuan Telephonic Enterprise Co", "", "Super Challenge Baseball (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "1da2da7974d2ca73a823523f82f517b3", "Spectravision, Spectravideo, David Lubar", "SA-206", "Challenge of.... Nexar, The (1982) (Spectravision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "1da2da7974d2ca73a823523f82f517b3", "Spectravision - Spectravideo - Sirius Software, David Lubar", "SA-206", "Challenge of.... Nexar, The (1982) (Spectravision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1db3bc4601f22cf43be7ce015d74f59a", "", "", "Ship Demo (V 10) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1e060a8025512ad2127e3da11e212ccc", "Arcadia Corporation, Scott Nelson", "13", "Sweat! - The Decathlon Game (3 of 3) (1983) (Arcadia) (Prototype)", "Uses the Paddle Controllers (left only)", "Prototype", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "", "" }, { "1e0ef01e330e5b91387f75f700ccaf8f", "Quelle", "686.561 2 - 781627", "Mein Weg (1983) (Quelle) (PAL)", "AKA Challenge", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -430,7 +430,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "1f60e48ad98b659a05ce0c1a8e999ad9", "", "", "Mondo Pong V2 (Piero Cavina) (PD)", "Uses the Paddle Controllers", "New Release", "", "", "", "", "", "", "PADDLES_IAXDR", "", "", "01", "", "", "", "", "" }, { "1f773a94d919b2a3c647172bbb97f6b4", "Atari, Jerome Domurat, Peter C. Niday", "CX26115", "Dumbo's Flying Circus (07-11-1983) (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1fa58679d4a39052bd9db059e8cda4ad", "Imagic, Dan Oliver", "720118-1A, 03208", "Laser Gates (1983) (Imagic)", "AKA Innerspace", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "1fa7a42c2c7d6b7a0c6a05d38c7508f4", "Coleco, Ed Temple", "", "Cabbage Patch Kids (09-04-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "1fa7a42c2c7d6b7a0c6a05d38c7508f4", "Coleco - Individeo, Ed Temple", "", "Cabbage Patch Kids (09-04-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1fa86282403fa35d103ab88a9d603c31", "SpiceWare - Darrell Spice Jr.", "", "Stay Frosty (SpiceWare) (PAL60)", "Part of Stella's Stocking 2007 Xmas compilation", "Homebrew", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "YES", "" }, { "1fab68fd67fe5a86b2c0a9227a59bb95", "20th Century Fox Video Games - Videa, Lee Actor", "", "Lasercade (1983) (20th Century Fox) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "200309c8fba0f248c13751ed4fc69bab", "Jeffry Johnston", "", "Radial Pong - Version 1 (Jeffry Johnston) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -540,7 +540,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "281ff9bd0470643853de5cbd6d9e17f5", "Eckhard Stolberg", "", "Cubis (EM) (1997) (Eckhard Stolberg)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2823364702595feea24a3fbee138a243", "Bit Corporation", "PG206", "Bobby Is Going Home (1983) (BitCorp) (PAL)", "AKA Bobby geht Heim", "Rare", "", "", "", "", "", "", "", "", "", "", "", "42", "", "", "" }, { "2825f4d068feba6973e61c84649489fe", "", "", "Boom Bang (Unknown) (PAL)", "AKA Crackpots", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "282a77841cb3d33af5b56151acba770e", "Quelle", "311388", "Black Hole (1983) (Quelle) (PAL)", "AKA Cosmic Ark (Double-Game Package)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "282a77841cb3d33af5b56151acba770e", "Otto Versand", "311388", "Black Hole (1983) (Otto Versand) (PAL)", "AKA Cosmic Ark (Double-Game Package)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "283dee88f295834c4c077d788f151125", "Retroactive", "", "Qb (2.11) (Retroactive) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "284ca61b2407bdba3938048b0a559015", "Atari, Tod Frye", "CX2695", "Xevious (05-25-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "2854e5dfb84173fafc5bf485c3e69d5a", "Canal 3 - Intellivision", "C 3004", "Moon Patrol (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -597,7 +597,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "2c3b2843295c9d6b16996971180a3fe9", "HES - Activision", "", "Sports Action Pak - Enduro, Ice Hockey, Fishing Derby, Dragster (1988) (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2c3b9c171e214e9e46bbaa12bdf8977e", "Atari, Ed Logg, Carol Shaw - Sears", "CX2639 - 49-75162", "Othello (1981) (Atari) (4K) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2c45c3eb819a797237820a1816c532eb", "Atari", "CX26163P", "Boxing (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "2c8835aed7f52a0da9ade5226ee5aa75", "Arcadia Corporation, Stephen Harland Landrum", "AR-4101", "Communist Mutants from Space (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "2c8835aed7f52a0da9ade5226ee5aa75", "Arcadia Corporation, Stephen H. Landrum", "AR-4101", "Communist Mutants from Space (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2c8c11295d8613f875b7bcf5253ab9bb", "Fabrizio Zavagli", "", "Kool Aid Man (PAL Conversion) (16-11-2002) (Fabrizio Zavagli) (PAL60)", "PAL60 Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "", "" }, { "2c9fadd510509cc7f28f1ccba931855f", "", "", "Hangman Invader Biglist1 (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2ca6445204ffb7686ddee3e33ba64d5b", "Alex Herbert", "", "AtariVox Test ROM", "Uses the AtariVox controller", "", "", "", "", "", "", "", "", "ATARIVOX", "", "", "", "", "", "", "" }, @@ -696,7 +696,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "332f01fd18e99c6584f61aa45ee7791e", "", "", "X'Mission (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "3347a6dd59049b15a38394aa2dafa585", "Parker Brothers, Robert Jaeger", "PB5760", "Montezuma's Revenge (1984) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "335793736cbf6fc99c9359ed2a32a49d", "", "", "Analog Clock (V0.0) (20-01-2003) (AD) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "335a7c5cfa6fee0f35f5824d1fa09aed", "Sega, Steve Beck, Phat Ho - Beck-Tech - Teldec", "006-01 - 3.60105 VG", "Congo Bongo (1983) (Sega) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "335a7c5cfa6fee0f35f5824d1fa09aed", "Sega - Beck-Tech, Steve Beck, Phat Ho - Teldec", "006-01 - 3.60105 VG", "Congo Bongo (1983) (Sega) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3367eeba3269aa04720abe6169767502", "", "", "Space Treat (30-12-2002) (Fabrizio Zavagli)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3391f7c4c656793f92299f4187e139f7", "Commavid, Ben Burch", "CM-010", "Rush Hour (1983) (Commavid) (Prototype) [a4]", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "33cac5e767a534c95d292b04f439dc37", "Jone Yuan Telephonic Enterprise Co", "", "Tapeworm (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -758,7 +758,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "37f42ab50018497114f6b0f4f01aa9a1", "", "", "Droid Demo 2-M (David Conrad Schweinsberg) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "37fd7fa52d358f66984948999f1213c5", "Rainbow Vision - Suntek", "SS-004", "Pyramid War (Rainbow Vision) (PAL) [a2]", "AKA Chopper Command", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "384db97670817103dd8c0bbdef132445", "Atari - Sears", "CX2626 - 6-99829, 49-75116", "Miniature Golf (1979) (Atari) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "384f5fbf57b5e92ed708935ebf8a8610", "20th Century Fox Video Games, John W.S. Marvin", "11009", "Crypts of Chaos (1982) (20th Century Fox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "384f5fbf57b5e92ed708935ebf8a8610", "20th Century Fox Video Games, John W.S. Marvin", "11009", "Crypts of Chaos (1983) (20th Century Fox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3856b9425cc0185ed770376a62af0282", "Kyle Pittman", "", "Yellow Submarine (Kyle Pittman) (Hack)", "Hack of Bermuda Triangle", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "386ff28ac5e254ba1b1bac6916bcc93a", "Arcadia Corporation, Scott Nelson", "AR-4300", "Fireball (1982) (Arcadia)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "01", "", "", "", "", "" }, { "3882224adbd0ca7c748b2a1c9b87263e", "Atari, Tod Frye", "CX2657", "SwordQuest - FireWorld (1982) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -895,7 +895,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "4189adfc1b30c121248876e3a1a3ac7e", "Eric Ball", "", "Skeleton (Complete) (06-09-2002) (Eric Ball)", "", "New Release", "STEREO", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4191b671bcd8237fc8e297b4947f2990", "Exus Corporation", "", "Video Jogger (1983) (Exus)", "AKA Foot Craz", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "41c4e3d45a06df9d21b7aae6ae7e9912", "CCE", "C-826", "Grand Prix (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "41f252a66c6301f1e8ab3612c19bc5d4", "Atari - GCC, Mike Feinstein", "CX2681", "Battlezone (1983) (Atari)", "", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "41f252a66c6301f1e8ab3612c19bc5d4", "Atari - GCC, Mike Feinstein, Brad Rice", "CX2681", "Battlezone (1983) (Atari)", "", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4209e9dcdf05614e290167a1c033cfd2", "CommaVid, John Bronstein", "CM-002", "Video Life (1981) (CommaVid) [higher sounds]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "42249ec8043a9a0203dde0b5bb46d8c4", "CCE", "", "Resgate Espacial (CCE)", "AKA Moonsweeper", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "4233eb824c2b4811abef9b6d00355ae9", "Retroactive", "", "Qb (V0.10) (PAL) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -942,7 +942,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "45beef9da1a7e45f37f3f445f769a0b3", "Atari, Suki Lee", "CX2658", "Math Gran Prix (1982) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "45c4413dd703b9cfea49a13709d560eb", "Jone Yuan Telephonic Enterprise Co", "", "Challenge of.... Nexar, The (Jone Yuan) (Hack)", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "45cb0f41774b78def53331e4c3bf3362", "Carrere Video, Roger Booth, Sylvia Day, Todd Marshall, Wes Trager, Henry Will IV - Teldec", "USC1007", "Octopus (1983) (Carrere Video) (PAL)", "AKA Name This Game", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "4605a00f5b44a9cbd5803a7a55de150e", "Coleco, Ed Temple", "", "Cabbage Patch Kids (07-03-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "4605a00f5b44a9cbd5803a7a55de150e", "Coleco - Individeo, Ed Temple", "", "Cabbage Patch Kids (07-03-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "461029ab23800833e9645be3e472d470", "", "", "Combat TC (v0.1)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "46258bd92b1f66f4cb47864d7654f542", "Zellers", "", "Turmoil (Zellers)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "463dd4770506e6c0ef993a40c52c47be", "Arcadia Corporation, Steve Hales, Stephen Harland Landrum", "AR-4102", "Suicide Mission (Preview) (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -990,7 +990,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "494cda91cc640551b4898c82be058dd9", "Andreas Dietrich", "", "Donkey Kong VCS (2017) (1.0) (PAL60)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "YES", "" }, { "49571b26f46620a85f93448359324c28", "", "", "Save Our Ship (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "37", "", "", "" }, { "497f3d2970c43e5224be99f75e97cbbb", "CommaVid, John Bronstein", "CM-002", "Video Life (1981) (CommaVid)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "4981cefe5493ea512284e7f9f27d1e54", "Home Vision - Gem International Corp.", "VCS83136", "Cosmic War (1983) (Home Vision) (PAL)", "AKA Space Tunnel", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, + { "4981cefe5493ea512284e7f9f27d1e54", "Home Vision - Gem International Corp. - VDI", "VCS83136", "Cosmic War (1983) (Home Vision) (PAL)", "AKA Cosmic Corridor", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, { "4999b45be0ab5a85bac1b7c0e551542b", "CCE", "", "Double Dragon (CCE) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "499b612f6544ae71d4915aa63e403e10", "Atari, Carol Shaw", "CX26163P", "Checkers (32 in 1) (1988) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4a196713a21ef07a3f74cf51784c6b12", "Jone Yuan Telephonic Enterprise Co", "", "Frogs and Flies (Jone Yuan) (Hack)", "2600 Screen Search Console", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1069,7 +1069,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "4f781f0476493c50dc578336f1132a67", "", "", "Indy 500 (Unknown) (PAL) (4K)", "Uses Driving Controllers", "", "", "", "", "", "", "", "DRIVING", "DRIVING", "", "45", "", "", "", "", "" }, { "4f7b07ec2bef5ccffe06403a142f80db", "Apollo - Games by Apollo, Ed Salvo, Byron Parks", "AP-2003", "Racquetball (1981) (Apollo) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "4f82d8d78099dd71e8e169646e799d05", "", "", "Miniature Golf (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "4f89b897444e7c3b36aed469b8836839", "Atari", "CX26190", "BMX Air Master (1990) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "4f89b897444e7c3b36aed469b8836839", "Atari", "CX26190", "BMX Air Master (1989) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4fae08027365d31c558e400b687adf21", "", "", "Qb (V2.17) (NTSC) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "4faeb04b1b7fb0fa25db05753182a898", "", "", "2600 Digital Clock (V x.xx) (PD) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4fbe0f10a6327a76f83f83958c3cbeff", "CCE", "C-816", "Keystone Kappers (1983) (CCE)", "AKA Keystone Kapers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1146,7 +1146,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "55949cb7884f9db0f8dfcf8707c7e5cb", "Atari, Ed Logg, Carol Shaw - Sears", "CX2639 - 49-75162", "Othello (1981) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "55ace3c775f42eb46f08bb1dca9114e7", "", "", "Shadow Keep (04-03-2003) (Andrew Towers)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "55ef6ab2321ca0c3d369e63d59c059c8", "", "", "Pitfall! (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "55ef7b65066428367844342ed59f956c", "Atari, Joe Gaucher, Alex Leavens", "CX2683", "Crazy Climber (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "55ef7b65066428367844342ed59f956c", "Atari - Roklan, Joe Gaucher, Alex Leavens", "CX2683", "Crazy Climber (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "562acb1b7ff182aba133bda8e21ad7c1", "", "", "Space Treat Deluxe (08-03-2003) (Fabrizio Zavagli)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "562bf02f5031d51c6b53b03972a56b22", "", "", "Star Fire - Framework Done (30-10-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "56300ed31fef018bd96768ccc982f7b4", "HES - Activision", "559", "Rad Action Pak - Kung-Fu Master, Freeway, Frostbite (1990) (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1160,9 +1160,9 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "57939b326df86b74ca6404f64f89fce9", "Atari, Richard Dobbis, Nick 'Sandy Maiwald' Turner", "CX26111", "Snoopy and the Red Baron (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "579baa6a4aa44f035d245908ea7a044d", "Jess Ragan", "", "Galaxian Enhanced Graphics (Jess Ragan) (Hack)", "Hack of Galaxian", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "57a66b6db7efc5df17b0b0f2f2c2f078", "Retroactive", "", "Qb (V2.08) (NTSC) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "57c5b351d4de021785cf8ed8191a195c", "Atari, Gary Stark", "CX26102", "Cookie Monster Munch (1983) (Atari)", "Uses Kids/Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, + { "57c5b351d4de021785cf8ed8191a195c", "Atari - CCW, Gary Stark", "CX26102", "Cookie Monster Munch (1983) (Atari)", "Uses Kids/Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "5835a78a88f97acea38c964980b7dbc6", "", "", "Cosmic Creeps (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "5846b1d34c296bf7afc2fa05bbc16e98", "Atari, Larry Kaplan - Sears", "CX2643 - 6-99815", "Codebreaker (1978) (Atari)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, + { "5846b1d34c296bf7afc2fa05bbc16e98", "Atari - Sears", "CX2643 - 6-99815", "Codebreaker (1978) (Atari)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "58513bae774360b96866a07ca0e8fd8e", "Mystique - American Multiple Industries, Joel H. Martin", "1001", "Custer's Revenge (1982) (Mystique)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "585600522b1f22f617652c962e358a5d", "", "", "Multi-Sprite Game V2.2 (Piero Cavina) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "585f73010e205ae5b04ee5c1a67e632d", "", "", "Daredevil (V3) (Stunt_Cycle_Rules!) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1208,7 +1208,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "5b5d04887922b430de0b7b2a21f9cd25", "", "", "Omega Race (Genesis)", "Genesis controller (B is thrust, C is fire)", "Hack of Omega Race", "", "", "", "", "", "", "GENESIS", "", "", "", "", "", "", "", "" }, { "5b6f5bcbbde42fc77d0bdb3146693565", "", "", "Seaquest (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5b7ea6aa6b35dc947c65ce665fde624b", "Arcadia Corporation, Stephen Harland Landrum", "AR-4400", "Dragonstomper (2 of 3) (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5b85e987e2b1618769d97ba9182333d0", "Atari - GCC, Mike Feinstein", "CX2681", "Battlezone (05-12-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5b85e987e2b1618769d97ba9182333d0", "Atari - GCC, Mike Feinstein, Brad Rice", "CX2681", "Battlezone (05-12-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5b92a93b23523ff16e2789b820e2a4c5", "Activision, Dan Kitchen", "AG-039-04", "Kung-Fu Master (1987) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5b98e0536c3f60547dd708ae22adb04b", "Ben Hudman", "", "Donkey Kong Gingerbread Man (Ben Hudman) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5b9c2e0012fbfd29efd3306359bbfc4a", "HES", "", "2 Pak Special - Hoppy, Alien Force (1992) (HES) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1229,11 +1229,11 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "5c86e938e0845b9d61f458539e9a552b", "Atari, Alan Miller", "CX26163P", "Surround (32 in 1) (1988) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5cbd7c31443fb9c308e9f0b54d94a395", "Spectravideo, Mark Turmell", "SA-217", "Gas Hog (1983) (Spectravideo) [fixed]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5ce98f22ade915108860424d8dde0d35", "", "", "Hangman Man Biglist3 (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5d0e8a25cbd23e76f843c75a86b7e15b", "Coleco, Ed Temple", "", "Cabbage Patch Kids (09-07-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5d0e8a25cbd23e76f843c75a86b7e15b", "Coleco - Individeo, Ed Temple", "", "Cabbage Patch Kids (09-07-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5d132d121aabc5235dd039dfc46aa024", "", "", "Basketball (208 in 1) (Unknown) (PAL) (Hack)", "Console ports are swapped", "Hack", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, { "5d25df9dc2cde746ceac48e834cf84a7", "Activision, Steve 'Jessica' Kitchen", "EAZ-033", "Space Shuttle (1983) (Activision) (SECAM)", "", "", "", "FE", "", "", "", "", "", "", "", "", "SECAM", "", "", "", "" }, - { "5d2cc33ca798783dee435eb29debf6d6", "Activision, Mike Riedel", "AK-043-04", "Commando (1988) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5d799bfa9e1e7b6224877162accada0d", "Spectravision, Spectravideo, David Lubar", "SA-206", "Challenge of.... Nexar, The (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5d2cc33ca798783dee435eb29debf6d6", "Activision - Imagineering, Mike Reidel", "AK-043-04", "Commando (1988) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5d799bfa9e1e7b6224877162accada0d", "Spectravision - Spectravideo - Sirius Software, David Lubar", "SA-206", "Challenge of.... Nexar, The (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5d8f1ab95362acdf3426d572a6301bf2", "Thomas Jentzsch", "", "SWOOPS! (v0.96) (TJ) (PAL)", "Uses the Joystick (L) and Paddle (R) Controllers", "Homebrew", "", "", "", "", "", "", "", "PADDLES", "", "", "", "28", "", "", "" }, { "5d8fb14860c2f198472b233874f6b0c9", "", "", "Boing! (PD) [a2]", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5d9592756425192ec621d2613d0e683d", "CCE", "C-839", "Misterious Thief, A (1983) (CCE) [a]", "AKA A Mysterious Thief", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1293,7 +1293,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "61426cee013306e7f7367534ab124747", "", "", "One Blue Bar Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "615a3bf251a38eb6638cdc7ffbde5480", "Atari, Jerome Domurat, Howard Scott Warshaw", "CX2674", "E.T. - The Extra-Terrestrial (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "61621a556ad3228f0234f5feb3ab135c", "", "", "Fu Kung! (V0.05 Cuttle Card Compattle Revision) (14-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "61631c2f96221527e7da9802b4704f93", "Activision, Mike Riedel", "AK-043-04", "Commando (1988) (Activision) [different logo]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "61631c2f96221527e7da9802b4704f93", "Activision - Imagineering, Mike Reidel", "AK-043-04", "Commando (1988) (Activision) [different logo]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "61719a8bdafbd8dab3ca9ce7b171b9e2", "", "", "Enduro (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "61728c6cfb052e62a9ed088c5bf407ba", "", "", "Sprite Demo 4 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "619de46281eb2e0adbb98255732483b4", "", "", "Time Warp (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "20", "", "", "" }, @@ -1369,7 +1369,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "66bc1bef269ea59033928bac2d1d81e6", "Arcadia Corporation, Scott Nelson", "AR-4300", "Fireball (Preview) (1982) (Arcadia)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "01", "", "", "", "", "" }, { "66c2380c71709efa7b166621e5bb4558", "Parker Brothers, Dave Engman, Dawn Stockbridge", "931509", "Tutankham (1983) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "66c4e0298d4120df333bc2f3e163657e", "Arcadia Corporation, Stephen Harland Landrum", "AR-4400", "Dragonstomper (2 of 3) (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "66fcf7643d554f5e15d4d06bab59fe70", "Coleco, Ed Temple", "", "Cabbage Patch Kids (09-13-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "66fcf7643d554f5e15d4d06bab59fe70", "Coleco - Individeo, Ed Temple", "", "Cabbage Patch Kids (09-13-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6706a00f9635508cfeda20639156e66e", "Atari, Jerome Domurat, Michael Sierchio", "CX2667", "RealSports Soccer (1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "672012d40336b403edea4a98ce70c76d", "", "", "Spider Kong (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "675ae9c23fa1aae376cea86cad96f9a5", "", "", "Poker Squares (V0.25) (2001) (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1551,7 +1551,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "7454786af7126ccc7a0c31fcf5af40f1", "", "", "Phantom Tank (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7465b06b6e25a4a6c6d77d02242af6d6", "Atari", "CX26193", "8 in 1 (01-16-92) (Atari) (Prototype)", "Game 2 is Centipede, but doesn't work", "Prototype", "", "8IN1", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7481f0771bff13885b2ff2570cf90d7b", "Arcadia Corporation, Brian McGhie", "AR-4104", "Rabbit Transit (1983) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "749fec9918160921576f850b2375b516", "Spectravision, Spectravideo", "SA-205", "China Syndrome (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "749fec9918160921576f850b2375b516", "Spectravision - Spectravideo", "SA-205", "China Syndrome (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "74ca9bdc91ee387a5bd929b73aec5c2c", "", "", "Star Fire - New Shields (03-04-2003) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "74d072e8a34560c36cacbc57b2462360", "Sancho - Tang's Electronic Co.", "TEC002", "Seahawk (1982) (Sancho) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "74ebaca101cc428cf219f15dda84b6f8", "Activision, Alan Miller", "AG-007, CAG-007", "Tennis (1981) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1610,11 +1610,11 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "7926083ad423ed685de3b3a04a914315", "Barry Laws Jr.", "", "Face Invaders 2 (Barry Laws Jr.) (Hack)", "Hack of Astroblast", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "792b1d93eb1d8045260c840b0688ec8f", "Kroko", "", "3E Bankswitch Test (TIA @ $00)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7972e5101fa548b952d852db24ad6060", "Atari - Sears", "CX2627 - 6-99841", "Human Cannonball (1979) (Atari)", "AKA Cannon Man", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "798b8921276eec9e332dfcb47a2dbb17", "Atari, Gary Stark", "CX26102", "Cookie Monster Munch (1983) (Atari) (PAL) [a]", "Uses Kids/Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, + { "798b8921276eec9e332dfcb47a2dbb17", "Atari - CCW, Gary Stark", "CX26102", "Cookie Monster Munch (1983) (Atari) (PAL) [a]", "Uses Kids/Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "798cc114f1623c14085868cd3494fe8e", "", "", "Pins Revenge (Atari Freak 1)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7991e1797e5e9f311fd957e62d889dff", "Joe Grand", "", "SCSIcide (v1.1) (2001) (Joe Grand)", "", "New Release", "", "", "", "", "", "", "PADDLES_IAXDR", "", "", "AUTO 65", "", "", "", "", "" }, { "7996b8d07462a19259baa4c811c2b4b4", "", "", "Math Gran Prix (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "79ab4123a83dc11d468fb2108ea09e2e", "Activision, David Rolfe - Cheshire Engineering", "AZ-037-04", "Beamrider (1984) (Activision)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "79ab4123a83dc11d468fb2108ea09e2e", "Activision - Cheshire Engineering, David Rolfe, Larry Zwick", "AZ-037-04", "Beamrider (1984) (Activision)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "79b649fb812c50b4347d12e7ddbb8400", "", "", "Red Pong Number 2 Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "79c27f90591e3fdc7d2ed020ecbedeb3", "CCE", "C-815", "Seaquest (1983) (CCE) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "79d4af56036ec28f298cad964a2e2494", "", "", "Hangman Pac-Man Wordlist (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1647,12 +1647,12 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "7b7b4ac05232490c28f9b680c72998f9", "Zellers", "", "Freeway (Zellers)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7b8a481e0c5aa78150b5555dff01f64e", "Atari - GCC, Mark Ackerman, Noellie Alito", "CX2692", "Moon Patrol (05-16-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7b938c7ddf18e8362949b62c7eaa660a", "Atari, Bob Whitehead - Sears", "CX2603 - 99803, 49-75601", "Star Ship (1977) (Atari) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "7ba07d4ea18bf3b3245c374d8720ad30", "Arcadia Corporation, Stephen Harland Landrum", "AR-4101", "Communist Mutants from Space (Preview) (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "7ba07d4ea18bf3b3245c374d8720ad30", "Starpath Corporation, Stephen H. Landrum", "AR-4101", "Communist Mutants from Space (Preview) (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7bb286cb659d146af3966d699b51f509", "Atari - Axlon, Tod Frye", "CX26178", "Save Mary! (04-03-1989) (Atari) (Prototype)", "AKA Saving Mary", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7bc4fd254ec8c0a25a13f02fd3f762ff", "Retroactive", "", "Qb (V1.00) (Stella) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "7c00e7a205d3fda98eb20da7c9c50a55", "Games by Apollo - Larry Minor, Ernie Runyon, Ed Salvo", "AP-2004", "Lost Luggage (1981) (Apollo)", "AKA Airport Mayhem", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7c4a499d343fca0cef2d59dd16af621a", "", "", "Poker Card Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "7c757bb151269b2a626c907a22f5dae7", "TNT Games, Adam Clayton", "26192", "BMX Air Master (1989) (TNT Games) (PAL)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "7c757bb151269b2a626c907a22f5dae7", "TNT Games - Sculptured Software, Adam Clayton", "26192", "BMX Air Master (1989) (TNT Games) (PAL)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7c7a4a2d505c2d0c75337c44711d8d54", "Atari, Warren Robinett", "", "Elf Adventure (04-22-83) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7c9b3b8b25acf2fe3b8da834f69629c6", "", "", "I Robot (1984) (Atari) (Prototype) [!]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7ca7a471d70305c673fedd08174a81e8", "Tim Snider", "", "Venture II (2001) (Tim Snider)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -1667,7 +1667,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "7d3cdde63b16fa637c4484e716839c94", "CCE", "", "Road Runner (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7d483b702c44ee65cd2df22cbcc8b7ed", "Atari, Warren Robinett", "", "Elf Adventure (05-25-83) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7d5c3b7b908752b98e30690e2a3322c2", "Dactari - Milmar", "", "Freeway (Dactari - Milmar)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "7d726fa494f706784bafeb1b50d87f23", "Coleco, Ed Temple", "", "Cabbage Patch Kids (07-27-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "7d726fa494f706784bafeb1b50d87f23", "Coleco - Individeo, Ed Temple", "", "Cabbage Patch Kids (07-27-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7d903411807704e725cf3fafbeb97255", "Imagic, Rob Fulop", "720104-1A, 720104-1B, IA3204", "Cosmic Ark (Reaction) (1982) (Imagic) [selectable starfield]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7d93071b3e3616093a6b5a98b0315751", "", "", "Gunfight 2600 - Music & Bugfixes 2 (2001) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7d940d749e55b96b7b746519fa06f2de", "Arcadia Corporation, Dennis Caswell", "AR-4302", "Party Mix (Preview) (1983) (Arcadia) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "", "", "", "", "", "" }, @@ -1680,7 +1680,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "7dfd100bda9abb0f3744361bc7112681", "Telesys, Don 'Donyo' Ruffcorn", "1006", "Demolition Herby (1983) (Telesys) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "7e2fe40a788e56765fe56a3576019968", "Activision, Dan Kitchen", "AK-050-04", "Double Dragon (1989) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7e464186ba384069582d9f0c141f7491", "PlayAround - J.H.M.", "206", "General Re-Treat (1982) (PlayAround) (PAL)", "AKA Custer's Revenge", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "7e4783a59972ae2cd8384f231757ea0b", "Atari", "CX26139P", "Crossbow (1987) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "7e4783a59972ae2cd8384f231757ea0b", "Atari - Imagineering, Dan Kichen", "CX26139P", "Crossbow (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7e51a58de2c0db7d33715f518893b0db", "CBS Electronics, E.F. Dreyer, Ed Salvo", "4L 2738 0000", "Mountain King (1983) (CBS Electronics) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "7e52a95074a66640fcfde124fffd491a", "Atari - GCC, Mike Feinstein, John Mracek", "CX2673", "Phoenix (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7e7c4c59d55494e66eef5e04ec1c6157", "Baroque Gaming (Brian Eno)", "", "Warring Worms (2002) (Baroque Gaming)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1723,7 +1723,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "80cec82239913cb8c4016eb13749de44", "David Marli", "", "Invaders from Space by David Marli (Space Invaders Hack)", "Hack of Space Invaders (Atari)", "New Release (Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "80e1410ec98089e0733cc09e584dba4b", "Dynamics", "DY-293005", "Jumping Jack (1983) (Dynamics) (PAL)", "AKA Bobby Is Going Home", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "80e52315919bd8a8b82a407ccd9bb13f", "", "", "Euchre (Jul 28) (2002) (Eric Eid) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "80e5400470ac788143e6db9bc8dd88cf", "Coleco, Ed Temple", "", "Cabbage Patch Kids (06-XX-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "80e5400470ac788143e6db9bc8dd88cf", "Coleco - Individeo, Ed Temple", "", "Cabbage Patch Kids (06-XX-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8101efafcf0af32fedda4579c941e6f4", "", "", "Okie Dokie (4K) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "81073d0377a2badef8d5e74fc44fc323", "Thomas Jentzsch", "", "Sadoom (TJ) (PAL60) (Hack)", "Hack of Kaboom!", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "01 50", "PAL60", "", "", "", "" }, { "8108162bc88b5a14adc3e031cf4175ad", "Quelle", "719.941 7", "Vom Himmel durch die Hoelle (1983) (Quelle) (PAL)", "AKA Parachute", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1824,7 +1824,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "88dce4037471424bb38ab6841aaa8cab", "", "", "Double-Height 6-Digit Score Display (Two Background Color Change) (2001) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "88ed87c011f699dd27321dbe404db6c8", "Activision, Dan Kitchen", "AX-029", "Crackpots (1983) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "88f74ec75ef696e7294b7b6ac5ca465f", "Activision, Bob Whitehead", "AG-002, CAG-002, AG-002-04", "Boxing (1980) (Activision) (16K)", "", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "8905d54f48b8024fc718ed643e9033f7", "Coleco, Ed Temple", "", "Cabbage Patch Kids (05-24-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "8905d54f48b8024fc718ed643e9033f7", "Coleco - Individeo, Ed Temple", "", "Cabbage Patch Kids (05-24-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "890c13590e0d8d5d6149737d930e4d95", "Atari, David Crane - Sears", "CX2605 - 6-99822, 49-75109", "Outlaw (1978) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8917f7c1ac5eb05b82331cf01c495af2", "Bit Corporation", "PG202", "Space Tunnel (1982) (BitCorp) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, { "8933976f2029c0d8492ebd8f4eb21492", "", "", "Synthcart Plus (09-02-2003) (Paul Slocum)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, @@ -1869,7 +1869,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "8c8b15b3259e60757987ed13cdd74d41", "Supergame", "71", "River Raid (1984) (Supergame)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8c941fa32c7718a10061d8c328909577", "Digivision", "", "River Raid (Digivision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8ccaa442d26b09139685f5b22bf189c4", "Retroactive", "", "Qb (V1.01) (NTSC) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "8cd26dcf249456fe4aeb8db42d49df74", "Atari", "CX26139", "Crossbow (1987) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "8cd26dcf249456fe4aeb8db42d49df74", "Atari - Imagineering, Dan Kichen", "CX26139", "Crossbow (1988) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8ce9126066f2ddd5173e9f1f9ce1494e", "Thomas Jentzsch", "", "Missile Command (Trakball) (2002) (TJ)", "Uses the Trakball Controller", "Homebrew", "", "", "", "", "", "", "TRAKBALL", "", "", "", "", "", "", "YES", "" }, { "8cf0d333bbe85b9549b1e6b1e2390b8d", "Atari, Brad Stewart", "CX2649, CX2649P", "Asteroids (1981) (Atari) (PAL)", "", "Common", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "8d00a38f4c8f8800f1c237215ac243fc", "", "", "3-D Corridor (Green) (30-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1898,7 +1898,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "8f5ac5139419c5d49bacc296e342a247", "Atari - CCW, Michael Callahan, Preston Stuart", "CX26103", "Alpha Beam with Ernie (12-22-1983) (Atari) (Prototype)", "Uses Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "8f60551db6d1535ef0030f155018c738", "", "", "Space War (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8f613ea7c32a587d6741790e32872ddd", "", "", "Troll Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "8f88309afad108936ca70f8b2b084718", "Spectravision, Spectravideo - Quelle", "SA-203 - 413.223 9", "Cross Force (1982) (Spectravision) (PAL)", "AKA Kreuzfeuer (Cross Fire)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "8f88309afad108936ca70f8b2b084718", "Spectravision - Spectravideo - Quelle", "SA-203 - 413.223 9", "Cross Force (1982) (Spectravision) (PAL)", "AKA Kreuzfeuer (Cross Fire)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8f90590dba143d783df5a6cff2000e4d", "", "", "Gopher (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8f98519a91dbbf4864f135a10050d9ed", "Silvio Mogno", "", "Rainbow Invaders (non-playable demo) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8fa47e5242776e841df7e708b12eb998", "", "", "Sea Hawk (Genesis)", "Genesis controller (C drops bomb)", "Hack of Sea Hawk", "", "", "", "", "", "", "GENESIS", "", "", "", "", "", "", "", "" }, @@ -1923,7 +1923,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "9193b6fff6897d43274741d4f9855b6d", "", "", "M.A.S.H (Unknown) (PAL) (Hack)", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "91a3749ff7b7e72b7fa09e05396a0e7b", "", "", "Gunfight 2600 - Final Run Part 2 (2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "91b007f33f9b790be64f57220ec52e80", "Jone Yuan Telephonic Enterprise", "", "Laser Blast (Jone Yuan) (Hack)", "2600 Screen Search Console", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "91c2098e88a6b13f977af8c003e0bca5", "Atari - GCC", "CX2676", "Centipede (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "91c2098e88a6b13f977af8c003e0bca5", "Atari - GCC", "CX2676", "Centipede (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "91d1c82ceaf8af2add3973a3c34bc0cb", "", "", "Starfield Demo 1 (20-12-2002) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "91f0a708eeb93c133e9672ad2c8e0429", "", "", "Oystron (V2.9) (Piero Cavina) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "91fdb6541f70c40b16aabf8308123be8", "", "", "Interlacing Game (19-08-2002) (Billy Eno)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1932,7 +1932,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "927d422d6335018da469a9a07cd80390", "Activision, Carol Shaw - Ariola", "EAX-020, EAX-020-04B, EAX-020-04I - 711 020-720", "River Raid (1982) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9281eccd7f6ef4b3ebdcfd2204c9763a", "Retroactive", "", "Qb (2.15) (Retroactive) (PAL)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "9295570a141cdec18074c55dc7229d08", "Telegames", "7045 A015", "Bump 'n' Jump (1988) (Telegames) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "929e8a84ed50601d9af8c49b0425c7ea", "Bit Corporation", "PG205", "Dancing Plate (1982) (BitCorp) (PAL)", "AKA Dancing Plates, Tanzende Teller", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "929e8a84ed50601d9af8c49b0425c7ea", "Bit Corporation", "PG205", "Dancing Plate (1982) (BitCorp) (PAL)", "AKA Dishaster, Dancing Plates, Tanzende Teller", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "92a1a605b7ad56d863a56373a866761b", "U.S. Games Corporation, Dave Hampton", "VC2006", "Raft Rider (1982) (U.S. Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "92c5abb7a8bb1c3fc66c92ba353a3d21", "", "", "Star Fire - Sorting Fixed (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "92d1f6ac179ebe5963868d6bc1bdda8d", "HES", "498", "Smash Hit Pak - Frogger, Boxing, Seaquest, Skiing, Stampede (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1963,7 +1963,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "94e4c9b924286038527f49cdc20fda69", "Retroactive", "", "Qb (V2.12) (Stella) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "94e7cc6342d11e508e7e8b2ddf53c255", "", "", "Missile Command (208 in 1) (Unknown) (PAL) (Hack)", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "94ff6b7489ed401dcaaf952fece10f67", "Atari - GCC, Mark Ackerman, Noellie Alito", "CX2692", "Moon Patrol (07-31-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "951e8cec7a1a1d6c01fd649e7ff7743a", "Atari, Adam Clayton, John Howard Palevich", "CX26151, CX26151P", "Dark Chambers (1988) (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "951e8cec7a1a1d6c01fd649e7ff7743a", "Atari - Sculptured Software, Adam Clayton", "CX26151, CX26151P", "Dark Chambers (1988) (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9526e3db3bdfbc27989a9cbfd0ee34bf", "", "", "Atari Logo Demo 6 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "95351b46fa9c45471d852d28b9b4e00b", "Atari", "CX26163P", "Golf (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "955c408265ad6994f61f9b66657bbae9", "", "", "Quadrun (Video Conversion) (Fabrizio Zavagli)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1980,7 +1980,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "96670d0bf3610da2afcabd8e21d8eabf", "", "", "Boring Pitfall (Hack)", "Hack of Pitfall!", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "966b11d3c147d894dd9e4ebb971ea309", "", "", "Marble Craze Song (Paul Slocum) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9671b658286e276cc4a3d02aa25931d2", "", "", "Hangman Ghost Wordlist (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "968efc79d500dce52a906870a97358ab", "Atari", "CX26190", "BMX Air Master (1990) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "968efc79d500dce52a906870a97358ab", "TNT Games - Sculptured Software, Adam Clayton", "26192", "BMX Air Master (1989) (TNT Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "969b968383d9f0e9d8ffd1056bcaef49", "Atari, Larry Kaplan", "CX2628, CX2628P", "Bowling (1979) (Atari) (PAL)", "", "Common", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "96bcb3d97ce4ff7586326d183ac338a2", "", "", "Revenge of the Apes (Hack) [h2]", "Hack of Planet of the Apes", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "96e798995af6ed9d8601166d4350f276", "20th Century Fox Video Games - Videa, David Ross", "11029", "Meltdown (1983) (20th Century Fox) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -2089,7 +2089,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "a00ee0aed5c8979add4c170f5322c706", "Barry Laws Jr.", "", "Egghead (Barry Laws Jr.) (Hack)", "Hack of Pac-Man", "Hack", "", "", "", "", "", "", "", "", "", "", "", "33", "", "", "" }, { "a0185c06297b2818f786d11a3f9e42c3", "", "", "International Soccer (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a025a8f83a42a4d6d46c4887e799bfac", "Hozer Video Games", "", "Gunfight 2600 - Descissions had to be made (2001) (MP)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "a0297c4788f9e91d43e522f4c561b4ad", "Atari, Gary Stark", "CX26102", "Cookie Monster Munch (1983) (Atari) (PAL)", "Uses Kids/Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, + { "a0297c4788f9e91d43e522f4c561b4ad", "Atari - CCW, Gary Stark", "CX26102", "Cookie Monster Munch (1983) (Atari) (PAL)", "Uses Kids/Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "a0563dd6d8215c38c488fbbd61435626", "", "", "Ship Demo (V 1501) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a0675883f9b09a3595ddd66a6f5d3498", "Telegames", "6057 A227", "Quest for Quintana Roo (1988) (Telegames)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a075ad332942740c386f4c3814925ece", "Arcadia Corporation, Dennis Caswell", "AR-4200", "Escape from the Mindmaster (2 of 4) (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2139,11 +2139,11 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "a406d2f6d84e61d842f4cb13b2b1cfa7", "Tigervision, John Harris - Teldec", "7-002", "Jawbreaker (1982) (Tigervision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a412c8577b2d57b09185ae51739ac54f", "Arcadia Corporation, Dennis Caswell", "AR-4000", "Phaser Patrol (1982) (Arcadia) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "24", "", "YES", "" }, { "a41450333f8dd0e96e5e9f0af3770ae9", "", "", "Basic Math (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "a422194290c64ef9d444da9d6a207807", "M Network, Hal Finney", "MT5667", "Dark Cavern (1982) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "a422194290c64ef9d444da9d6a207807", "M Network - APh Technological Consulting, Hal Finney", "MT5667", "Dark Cavern (1982) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a443d8557d712845c8cd3699363a42e6", "", "", "Star Fire (07-01-2003) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a47878a760f5fa3aa99f95c3fdc70a0b", "", "", "Demo Image Series #5 - Baboon (19-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a4790224bd5afabd53cbe93e46a7f241", "Activision, Bob Whitehead", "AG-019", "Sky Jinks (1982) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "a47e26096de6f6487bf5dd2d1cced294", "Atari, Larry Kaplan", "CX2643", "Codebreaker (1978) (Atari) (PAL)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, + { "a47e26096de6f6487bf5dd2d1cced294", "Atari", "CX2643", "Codebreaker (1978) (Atari) (PAL)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "a499d720e7ee35c62424de882a3351b6", "Sega, Phat Ho - Bally Midway - Beck-Tech", "009-01", "Up 'n Down (1984) (Sega)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a4aa7630e4c0ad7ebb9837d2d81de801", "", "", "Atari 2600 Invaders (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a4ab331e8768eafdc20ce8b0411ff77a", "", "", "Demo Image Series #1 - Sam (19-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2276,7 +2276,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "af6f3e9718bccfcd8afb421f96561a34", "Atari, Tod Frye", "CX2695", "Xevious (11-08-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "afb3bc45c6a82739cc82582127cd96e6", "Atari, John Howard Palevich", "CX26151, CX26151P", "Dungeon (11-22-1985) (Atari) (Prototype)", "Dark Chambers Beta", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "afc194534c1b346609ef05eff6d3cef6", "Jone Yuan Telephonic Enterprise Co", "", "Boxing (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "afd2cf258d51ae4965ee21abba3627ab", "Atari, Christopher H. Omarzu - Children's Computer Workshop", "CX26104", "Big Bird's Egg Catch (12-08-1982) (Atari) (Prototype)", "Uses the Keypad Controller", "Prototype", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "", "" }, + { "afd2cf258d51ae4965ee21abba3627ab", "Atari - CCW, Christopher H. Omarzu", "CX26104", "Big Bird's Egg Catch (12-08-1982) (Atari) (Prototype)", "Uses the Keypad Controller", "Prototype", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "", "" }, { "afe4eefc7d885c277fc0649507fbcd84", "Atari", "CX26163P", "Ant Party (32 in 1) (1988) (Atari) (PAL)", "AKA Cosmic Swarm", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "afe776db50e3378cd6f29c7cdd79104a", "Thomas Jentzsch", "", "Bobby is Going Home (TJ)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "23", "245", "", "" }, { "afe88aae81d99e0947c0cfb687b16251", "Apollo - Games by Apollo", "AP-2006", "Infiltrate (1981) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -2380,7 +2380,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "b879e13fd99382e09bcaf1d87ad84add", "Zellers", "", "Time Warp (Zellers)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b8865f05676e64f3bec72b9defdacfa7", "Activision, David Crane", "AG-004", "Fishing Derby (1980) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b897f9e3f939b9f21566d56db812a84e", "Atari, Jim Huether", "CX26163P", "Flag Capture (32 in 1) (1988) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "b8ed78afdb1e6cfe44ef6e3428789d5f", "Data Age, J. Ray Dettling", "112-007", "Bermuda Triangle (1982) (Data Age)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "b8ed78afdb1e6cfe44ef6e3428789d5f", "Data Age, J. Ray Dettling", "112-007", "Bermuda Triangle (1983) (Data Age)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b9232c1de494875efe1858fc8390616d", "Panda", "110", "Harbor Escape (1983) (Panda)", "AKA River Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b9336ed6d94a5cc81a16483b0a946a73", "Atari, Jerome Domurat, Michael Sierchio", "CX2667, CX2667P", "RealSports Soccer (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "b958d5fd9574c5cf9ece4b9421c28ecd", "Piero Cavina", "", "Multi-Sprite Game V1.0 (Piero Cavina) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2419,7 +2419,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "bcb31f22856b0028c00d12f0e4c0a952", "Canal 3 - Intellivision", "", "Thunderground (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bccb4e2cfad5efc93f6d55dc992118ce", "Activision, Carol Shaw", "AX-020, AX-020-04", "River Raid (1982) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bce4c291d0007f16997faa5c4db0a6b8", "Quelle", "292.651 7", "Weltraumtunnel (1983) (Quelle) (PAL)", "AKA Innerspace", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "bce93984b920e9b56cf24064f740fe78", "Atari, Carol Shaw", "CX26163P", "Checkers (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "bce93984b920e9b56cf24064f740fe78", "Atari", "CX26163P", "Checkers (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bcef7880828a391cf6b50d5a6dcef719", "Rainbow Vision - Suntek", "SS-009", "Bermuda, The (Rainbow Vision) (PAL)", "AKA River Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bd1bd6f6b928df17a702def0302f46f4", "", "", "Binary To Decimal Routine (2001) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bd39598f067a1193ae81bd6182e756d1", "Telegames", "", "Night Stalker (1988) (Telegames) (PAL)", "AKA Dark Cavern", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2466,7 +2466,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "c150c76cbde2c9b5a97eb5399d46c64f", "", "", "Unknown Title (xxx00000 (200203)) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c16c79aad6272baffb8aae9a7fff0864", "U.S. Games Corporation, Sylvia Day, Henry Will IV", "VC2001", "Gopher (1982) (U.S. Games)", "AKA Gopher Attack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c16fbfdbfdf5590cc8179e4b0f5f5aeb", "", "", "Wall Break (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "c17bdc7d14a36e10837d039f43ee5fa3", "Spectravision, Spectravideo", "SA-203", "Cross Force (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "c17bdc7d14a36e10837d039f43ee5fa3", "Spectravision - Spectravideo", "SA-203", "Cross Force (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c1a83f44137ea914b495fc6ac036c493", "Atari, Carla Meninsky", "CX2660", "Star Raiders (1982) (Atari) (PAL)", "Uses Joystick (left) and Keypad (right) Controllers", "", "", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "" }, { "c1b038ce5cb6d85e956c5509b0e0d0d8", "", "", "Rotating Colors Demo 2 (Junkosoft) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c1b1049b88bcd98437d8872d1d62ba31", "", "", "Demo Image Series #4 - Donald (19-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2675,7 +2675,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "d0498baca989e792db4b8270a02b9624", "", "", "Pac Ghost Sprite Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d071d2ec86b9d52b585cc0382480b351", "UA Limited", "", "Cat Trax (1983) (UA Limited) (1) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "d078674afdf24a4547b4b32890fdc614", "Jone Yuan Telephonic Enterprise Co", "", "Laser Blast (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "d078d25873c5b99f78fa267245a2af02", "Sega, Steve Beck, Phat Ho - Beck-Tech", "006-01", "Congo Bongo (1983) (Sega) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "220", "", "" }, + { "d078d25873c5b99f78fa267245a2af02", "Sega - Beck-Tech, Steve Beck, Phat Ho", "006-01", "Congo Bongo (1983) (Sega) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "26", "220", "", "" }, { "d08fccfbebaa531c4a4fa7359393a0a9", "Activision, David Crane", "", "Venetian Blinds Demo (1982) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d090836f0a4ea8db9ac7abb7d6adf61e", "Hozer Video Games", "", "Yahtzee (Hozer Video Games)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "d09935802d6760ae58253685ff649268", "Telesys, Don 'Donyo' Ruffcorn", "1006", "Demolition Herby (1983) (Telesys)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -2733,7 +2733,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "d49aff83f77a1b9041ad7185df3c2277", "", "", "Space Treat (60% complete) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d4aa89e96d2902692f5c45f36903d336", "", "", "Euchre (NTSC) (Erik Eid) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d4c590ccfb611a73b3331359700c01a3", "", "", "Sprite Movement Demo 2 (2001) (Roger Williams)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "d541b20eae221a8ee321375e5971e766", "Arcadia Corporation, Stephen Harland Landrum", "AR-4101", "Communist Mutants from Space (Preview) (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "d541b20eae221a8ee321375e5971e766", "Arcadia Corporation, Stephen H. Landrum", "AR-4101", "Communist Mutants from Space (Preview) (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d54cd41ecfd59e4b72d2c086152b9a75", "Amiga", "1110", "Power Play Arcade Video Game Album (1983) (Amiga) (Prototype)", "Ghost Attack, Genesis, Havoc", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d5618464dbdc2981f6aa8b955828eeb4", "CCE", "C-829", "Megamania (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d563ba38151b8204c9f5c9f58e781455", "Atari, Brad Stewart - Sears", "CX2649, 49-75163", "Asteroids (1981) (Atari) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -2856,9 +2856,9 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "de0173ed6be9de6fd049803811e5f1a8", "Xonox - K-Tel Software, Anthony R. Henderson", "99008, 6240", "Motocross Racer (1983) (Xonox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "de07e9cb43ad8d06a35f6506e22c62e9", "", "", "Oh No! (Version 4) (22-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "de1a636d098349be11bbc2d090f4e9cf", "", "", "Pressure Gauge (Hozer Video Games)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "de1e9fb700baf8d2e5ae242bffe2dbda", "Activision, Mike Riedel", "EAK-043-04I", "Commando (1988) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "de1e9fb700baf8d2e5ae242bffe2dbda", "Activision - Imagineering, Mike Reidel", "EAK-043-04I", "Commando (1988) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "de24f700fd28d5b8381de13abd091db9", "CCE", "", "Plaque Attack (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "de29e46dbea003c3c09c892d668b9413", "CBS Electronics, Steve 'Jessica' Kitchen", "4L1717, 4L1718, 4L1719, 4L2277", "Carnival (1982) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "de29e46dbea003c3c09c892d668b9413", "Coleco - Woodside Design Associates, Steve 'Jessica Stevens' Kitchen", "4L1717, 4L1718, 4L1719, 4L2277", "Carnival (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "de3d0e37729d85afcb25a8d052a6e236", "Spectravision, Spectravideo", "SA-204", "Tapeworm (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "de4436eaa41e5d7b7609512632b90078", "Activision, David Crane", "AX-014, AX-014-04", "Grand Prix (1982) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "de5aab22e5aba5edcb29a3e7491ff319", "Star Game", "001", "Donkey Kong (Star Game)", "AKA Inca Gold", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, @@ -2907,10 +2907,10 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e12e32dee68201b6765fcd0ed54d6646", "Atari, Larry Kaplan", "CX2612, CX2612P", "Street Racer (1977) (Atari) (PAL)", "Uses the Paddle Controllers (swapped)", "", "", "", "", "", "", "", "PADDLES", "", "YES", "10 75", "", "", "", "", "" }, { "e13818a5c0cb2f84dd84368070e9f099", "CCE", "C-839", "Misterious Thief, A (1983) (CCE)", "AKA A Mysterious Thief", "", "", "", "", "", "", "", "", "", "", "", "", "", "216", "YES", "" }, { "e13c7627b2e136b9c449d9e8925b4547", "Atari, Alan Miller - Sears", "CX2624 - 6-99826, 49-75113", "Basketball (1978) (Atari) (4K)", "", "Common", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e1486c7822c07117b4f94a32e5ed68c1", "Coleco, Ed Temple", "", "Cabbage Patch Kids (06-14-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "e1486c7822c07117b4f94a32e5ed68c1", "Coleco - Individeo, Ed Temple", "", "Cabbage Patch Kids (06-14-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e14dc36b24fe22c04fa076e298f2e15f", "Activision, Larry Kaplan, David Crane", "AG-010, AG-010-04", "Kaboom! (1981) (Activision) (16K)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "01 50", "", "", "", "", "" }, { "e14feddeb82f5160ed5cf9ca4078e58d", "", "", "SpaceMaster X-7 (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e150f0d14f013a104b032305c0ce23ef", "Spectravision, Spectravideo", "SA-205", "China Syndrome (1982) (Spectravision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "e150f0d14f013a104b032305c0ce23ef", "Spectravision - Spectravideo", "SA-205", "China Syndrome (1982) (Spectravision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "e15b5525cf8f77297b322838df8d999c", "", "", "Sprite Demo 0 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e171558c51bb3bac97bfa79fa2c1a19c", "", "", "Warring Worms (Tim Strauss Edition) (20-12-2002) (Billy Eno)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e17699a54c90f3a56ae4820f779f72c4", "Quelle", "465.302 8", "Vogel Flieh (1983) (Quelle) (PAL)", "AKA Dolphin", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2933,7 +2933,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e2904748da63dfefc8816652b924b642", "Jone Yuan Telephonic Enterprise Co", "", "Catch Time (Jone Yuan)", "AKA Plaque Attack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e2b682f6e6d76b35c180c7d847e93b4f", "", "", "Dodge Demo 4 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e2c1b60eaa8eda131632d73e4e0c146b", "Atari - GCC, Mark Ackerman, Noellie Alito", "CX2692", "Moon Patrol (07-04-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e2c89f270f72cd256ed667507fa038a2", "Arcadia Corporation, Stephen Harland Landrum", "AR-4101", "Communist Mutants from Space (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "e2c89f270f72cd256ed667507fa038a2", "Starpath Corporation, Stephen H. Landrum", "AR-4101", "Communist Mutants from Space (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e2ca84a2bb63d1a210ebb659929747a9", "Telesys, Don 'Donyo' Ruffcorn", "1002", "Cosmic Creeps (1982) (Telesys) (PAL)", "AKA Space Maze, Spaze Maze", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "e2eccbbe963f80f291cb1f18803bf557", "Atari, Joe Decuir, Steve Mayer, Larry Wagner", "CX26163P", "Combat (32 in 1) (1988) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "40", "256", "", "" }, { "e314b42761cd13c03def744b4afc7b1b", "Activision, David Crane, Dan Kitchen", "AZ-108-04", "Ghostbusters (1985) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2951,7 +2951,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e3ed4ba3361756970f076e46e9cad1d2", "", "", "Tennis (Unknown) (PAL) (4K) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e40a818dac4dd851f3b4aafbe2f1e0c1", "Atari, Bill Aspromonte, Dr. Lee Salk", "CX26135", "Peek-A-Boo (1984) (Atari) (Prototype)", "Uses the Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "e42b937c30c617241ca9e01e4510c3f6", "", "", "Pitfall! (No Walls Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e434c0e161dd3c3fb435eb6bad2e182c", "Atari - GCC, Mike Feinstein", "CX2681", "Battlezone (05-02-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "e434c0e161dd3c3fb435eb6bad2e182c", "Atari - GCC, Mike Feinstein, Brad Rice", "CX2681", "Battlezone (05-02-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e49ac0ec879a0d7820bc2598fc2cfcd4", "CCE", "", "Kaboom! (CCE) (4K)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "01 50", "", "", "", "", "" }, { "e4a0b28befaaa2915df1fa01238b1e29", "", "", "Gunfight 2600 - Red River (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e4afe157c09962cf39cdb25845d83d47", "Activision, David Crane - Ariola", "EAG-009, PAG-009 - 711 009-720", "Freeway (1981) (Activision) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3011,7 +3011,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e879b7093ac4cfad74c88d636ca97d00", "", "", "Poker Squares (V0.0f) (2001) (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e88340f5bd2f03e2e9ce5ecfa9c644f5", "", "", "Lock 'n' Chase (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e8a3473bf786cf796d1336d2d03a0008", "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "", "Star Wars - The Arcade Game (12-05-1983) (Parker Bros) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "e8aa36e3d49e9bfa654c25dcc19c74e6", "Atari, Joe Decuir, Steve Mayer, Larry Wagner", "CX2601, CX2601P", "Combat (1977) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "260", "", "" }, + { "e8aa36e3d49e9bfa654c25dcc19c74e6", "Atari, Joe Decuir, Larry Caplan, Steve Mayer, Larry Wagner", "CX2601, CX2601P", "Combat (1977) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "260", "", "" }, { "e8e7b9bdf4bf04930c2bcaa0278ee637", "", "", "Boring Taz (Hack)", "Hack of Taz", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e8f7679359c4f532f5d5e93af7d8a985", "", "", "Hangman Invader Original Words (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e9034b41741dcee64ab6605aba9de455", "Digivision", "", "Phanton Tank (Digivision)", "AKA Phantom Tank", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, @@ -3063,7 +3063,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "ec3beb6d8b5689e867bafb5d5f507491", "U.S. Games Corporation, Henry Will IV - Vidtec", "VC1003", "Word Zapper (1982) (U.S. Games)", "AKA Word Grabber", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ec407a206b718a0a9f69b03e920a0185", "Quelle", "876.482 1", "Landung in der Normandie (1983) (Quelle) (PAL)", "AKA Commando Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ec5c861b487a5075876ab01155e74c6c", "Apollo - Games by Apollo, Ed Salvo, Byron Parks", "AP-2001", "Spacechase (1981) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "ece463abde92e8b89bcd867ec71751b8", "Puzzy - Bit Corporation", "PG205", "Dancing Plate (1982) (Puzzy) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "ece463abde92e8b89bcd867ec71751b8", "Puzzy - Bit Corporation", "PG205", "Dancing Plate (1982) (Puzzy) (PAL)", "AKA Dishaster", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "ece908d77ab944f7bac84322b9973549", "", "", "Tom Boy (Unknown) (PAL60)", "AKA Pitfall!", "", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "", "" }, { "ecf51385384b468834611d44a8429c03", "20th Century Fox Video Games, Douglas 'Dallas North' Neubauer", "11105", "Mega Force (1982) (20th Century Fox) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ecfa04523dde82fe42cdc7315a8f61b6", "Activision, David Crane - Ariola", "EAG-004, PAG-004 - 711 004-715", "Fishing Derby (1980) (Activision) (PAL) (4K)", "AKA Schneller als der Hai", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3147,7 +3147,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f21813aa050437f0dbc8479864acec6d", "", "", "Sneak 'n Peek (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f240ba9f8092d2e8a4c7d82c554bf509", "Quelle", "463.860 7", "Strahlen der Teufelsvoegel (1983) (Quelle) (PAL)", "AKA Atlantis", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f280976d69d6e27a48506bd6bad11dcd", "Atari, Larry Kaplan", "CX2664, CX2664P", "Brain Games (1978) (Atari) (PAL)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, - { "f283cc294ece520c2badf9da20cfc025", "Atari, Christopher H. Omarzu - Children's Computer Workshop", "CX26104", "Big Bird's Egg Catch (1983) (Atari) (PAL)", "Uses Kids/Keypad Controllers", "Rare", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, + { "f283cc294ece520c2badf9da20cfc025", "Atari - CCW, Christopher H. Omarzu", "CX26104", "Big Bird's Egg Catch (1983) (Atari) (PAL)", "Uses Kids/Keypad Controllers", "Rare", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "f28c07767b3e90a2689ade5b5e305874", "Canal 3 - Intellivision", "C 3014", "Keystone Kapers (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f2d40c70cf3e1d03bc112796315888d9", "Atari - CCW, Michael Callahan, Preston Stuart", "CX26103", "Alpha Beam with Ernie (1983) (Atari) (PAL)", "Uses Keypad Controllers", "Rare", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "f2d4d6187903cac2d5ea8ed90dad120d", "Digimax", "", "River Raid II (Digimax)", "AKA River Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3160,7 +3160,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f344ac1279152157d63e64aa39479599", "Tigervision", "7-012", "Espial (1984) (Tigervision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f34dd3b8156aaf113cb621b2e51d90b8", "Joe Grand", "", "SCSIcide Pre-release 5 (Joe Grand)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f34f08e5eb96e500e851a80be3277a56", "Atari, Brad Stewart - Sears", "CX2622 - 6-99813, 49-75107", "Breakout (1978) (Atari)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "01 60", "", "", "", "", "" }, - { "f367e58667a30e7482175809e3cec4d4", "ZiMAG - Emag - Vidco", "708-111 - GN-040", "Cosmic Corridor (1983) (ZiMAG)", "AKA Space Tunnel", "", "", "", "", "", "", "", "", "", "", "", "", "", "220", "", "" }, + { "f367e58667a30e7482175809e3cec4d4", "ZiMAG - Emag - Vidco", "708-111 - GN-040", "Cosmic Corridor (1983) (ZiMAG)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "220", "", "" }, { "f38358cd8f5ecfedffd5aca1aa939f18", "Universal Gamex Corporation, Alan Roberts", "1005", "X-Man (1983) (Universal) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, { "f39e4bc99845edd8621b0f3c7b8c4fd9", "AtariAge", "", "Toyshop Trouble (AtariAge)", "F8 Emulator Release", "", "", "", "", "", "", "", "", "PADDLES", "", "", "", "32", "", "", "" }, { "f3c431930e035a457fe370ed4d230659", "", "", "Crackpots (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3171,7 +3171,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f4204fc92d17ed4cb567c40361ad58f1", "Inky", "", "Beanie Baby Bash (Inky) (Hack)", "Hack of Beany Bopper", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f4469178cd8998cb437fa110a228eaca", "Digitel", "", "Frostbite (1983) (Digitel)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f45644ff82b533a781a1ee50f2e95f3c", "", "", "Overhead Adventure Demo 6 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "f457674cef449cfd85f21db2b4f631a7", "U.S. Games Corporation, Wes Trager, Henry Will IV", "VC1004", "Commando Raid (1982) (U.S. Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "f457674cef449cfd85f21db2b4f631a7", "U.S. Games Corporation - JWDA, Todd Marshall, Wes Trager, Henry Will IV", "VC1004", "Commando Raid (1982) (U.S. Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f473f99e47d4026a7a571184922ebf04", "Philip R. Frey", "", "Donkey Claus (Philip R. Frey) (Hack)", "Hack of Donkey Kong", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f48022230bb774a7f22184b48a3385af", "Atari, Rob Fulop - Sears", "CX2633 - 49-75119", "Night Driver (1980) (Atari) (4K)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 65", "", "", "", "YES", "" }, { "f48735115ec302ba8bb2d2f3a442e814", "", "", "Dancing Plate (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -3181,7 +3181,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f4c2e50b01dff99bddbe037b3489511c", "", "", "Hypnotic (V0.04) (2001) (Inkling) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f4c6621f1a0b4d27081123c08d7d1497", "CCE", "C-838", "Immies & Aggies (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f4cf6881b65c424095dc25dc987f151f", "", "", "128 in 1 Game Select ROM (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "f4dabd5bcc603e8464a478208037d423", "Coleco, Ed Temple", "", "Cabbage Patch Kids (08-21-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "f4dabd5bcc603e8464a478208037d423", "Coleco - Individeo, Ed Temple", "", "Cabbage Patch Kids (08-21-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f526d0c519f5001adb1fc7948bfbb3ce", "Mythicon, Bill Bryner, Bruce de Graaf", "MA1003", "Star Fox (1983) (Mythicon)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f52f40299fd238c6ffd9e6107050dc76", "Activision, Bob Whitehead - Ariola", "EAG-011, PAG-011 - 711 011-715", "Stampede (1981) (Activision) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f539e32bf6ce39c8ca47cb0cdd2c5cb8", "Control Video Corporation", "", "GameLine Master Module ROM (1983) (Control Video)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3201,7 +3201,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f69d4fcf76942fcd9bdf3fd8fde790fb", "CCE", "", "Aquaventure (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f6a282374441012b01714e19699fc62a", "ZiMAG - Emag - Vidco", "710-111 - GN-010", "I Want My Mommy (1983) (ZiMAG)", "AKA Open Sesame", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "f6a9ea814d15b85bffe980c927df606b", "", "", "Missile Command (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "f6b5ebb65cbb2981af4d546c470629d7", "Coleco, Ed Temple", "", "Cabbage Patch Kids (09-13-1984) (Coleco) (Prototype) [a]", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "f6b5ebb65cbb2981af4d546c470629d7", "Coleco - Individeo, Ed Temple", "", "Cabbage Patch Kids (09-13-1984) (Coleco) (Prototype) [a]", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f6c13e816e58c8c62f82b2c8b91a2d67", "", "", "Scrolling Playfield 2 (Junkosoft) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f6d512bef1bf253dc935d0e13c3d1462", "", "", "Slot Racers (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f6daebc0424fa0f8d9aaf26c86df50f4", "Brian Watson", "", "Color Tweaker (V1.0) (2001) (B. Watson)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3293,7 +3293,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "fbb0151ea2108e33b2dbaae14a1831dd", "Thomas Jentzsch", "", "Robot Tank TV (Thomas Jentzsch) (Hack)", "Uses two simultaneous Joystick Controllers, Hack of Robot Tank", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fbb4f3debf48dc961b559384467f2057", "Digitel", "", "River Raid III (1985) (Digitel)", "AKA River Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fbd6102e17a5c02c6e1911381b7203f9", "", "", "Star Fire - Warping!! (10-04-2003) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "fbe554aa8f759226d251ba6b64a9cce4", "Atari - GCC, Mike Feinstein", "CX2681, CX2681P", "Battlezone (1983) (Atari) (PAL)", "", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "fbe554aa8f759226d251ba6b64a9cce4", "Atari - GCC, Mike Feinstein, Brad Rice", "CX2681, CX2681P", "Battlezone (1983) (Atari) (PAL)", "", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fbfebee9c14694719e3eda4854dc42ee", "Jake Patterson", "", "Baubles 3 (Jake Patterson) (PD)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fc2104dd2dadf9a6176c1c1c8f87ced9", "Coleco, Harley H. Puthuff Jr.", "2663", "Time Pilot (1983) (Coleco)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fc2233fc116faef0d3c31541717ca2db", "Atari, Tod Frye", "CX2646", "Pac-Man (1982) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3323,12 +3323,12 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "fe0b7f27e3ad50bbf9ff468ee56d553d", "", "", "Lines Demo (Eckhard Stolberg) (PAL) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fe0bc4bb92c1c4de7d5706aaa8d8c10d", "", "", "Sprite Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fe3b461d4c8b179fe68bc77760294c25", "Atari, Joe Decuir", "CX2621, CX2621P", "Video Olympics (1977) (Atari) (PAL) (4K)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES_IAXDR", "", "YES", "", "", "", "", "", "" }, - { "fe67087f9c22655ce519616fc6c6ef4d", "Atari, Randy Bowker", "CX26142", "Crack'ed (11-28-1988) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "fe67087f9c22655ce519616fc6c6ef4d", "Atari - Zip Technology, Randy Bowker, Bruce Williams", "CX26142", "Crack'ed (11-28-1988) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fe6abc0f63e31e2646c9c600926b5b7f", "Atari", "CX26137", "4 in 1 (02-19-1987) (Atari) (Prototype)", "Home Run, Canyon Bomber, Sky Diver, Night Driver", "Prototype", "", "4IN1", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fe870018332a0221eb59fb18b0c6bccc", "", "", "Incoming (08-11-2002) (Ben Larson) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fe9ae625d924b54c9f8a14ac9a0f6c6d", "BG Dodson", "", "High Bid! (BG Dodson) (Hack)", "Hack of Pepsi Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "feba8686fd0376015258d1152923958a", "", "", "Super Circus (Unknown) (PAL)", "AKA Circus Atari", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "fec0c2e2ab0588ed20c750b58cf3baa3", "Activision, David Rolfe - Cheshire Engineering", "EAZ-037-04, EAZ-037-04I", "Beamrider (1984) (Activision) (PAL)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "fec0c2e2ab0588ed20c750b58cf3baa3", "Activision - Cheshire Engineering, David Rolfe, Larry Zwick", "EAZ-037-04, EAZ-037-04I", "Beamrider (1984) (Activision) (PAL)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fece458a8023a809a5006867feca40e8", "", "", "SCSIcide (24-02-2001) (Joe Grand) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "feec54aac911887940b47fe8c9f80b11", "Atari, Rob Fulop", "CX2633, CX2633P", "Night Driver (1980) (Atari) (PAL)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 65", "", "", "", "YES", "" }, { "feedcc20bc3ca34851cd5d9e38aa2ca6", "Atari, David Crane - Sears", "CX2607 - 6-99828, 49-75115", "Canyon Bomber (1979) (Atari)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES_IAXDR", "", "YES", "10", "", "", "", "", "" }, diff --git a/src/emucore/stella.pro b/src/emucore/stella.pro index 2e22f275e..531702339 100644 --- a/src/emucore/stella.pro +++ b/src/emucore/stella.pro @@ -25,10 +25,11 @@ "" "Cartridge.MD5" "00b7b4cbec81570642283e7fc1ef17af" -"Cartridge.Manufacturer" "Sega, Steve Beck, Phat Ho - Beck-Tech - Teldec" +"Cartridge.Manufacturer" "Sega - Beck-Tech, Steve Beck, Phat Ho" "Cartridge.ModelNo" "006-01" "Cartridge.Name" "Congo Bongo (1983) (Sega)" -"Display.YStart" "34" +"Display.YStart" "26" +"Display.Height" "220" "" "Cartridge.MD5" "00ce0bdd43aed84a983bef38fe7f5ee3" @@ -189,7 +190,7 @@ "" "Cartridge.MD5" "028024fb8e5e5f18ea586652f9799c96" -"Cartridge.Manufacturer" "Coleco, Steve 'Jessica' Kitchen" +"Cartridge.Manufacturer" "Coleco - Woodside Design Associates, Steve 'Jessica Stevens' Kitchen" "Cartridge.ModelNo" "2468" "Cartridge.Name" "Carnival (1982) (Coleco)" "" @@ -896,7 +897,7 @@ "" "Cartridge.MD5" "0b17ed42984000da8b727ca46143f87a" -"Cartridge.Manufacturer" "Atari, Christopher H. Omarzu - Children's Computer Workshop" +"Cartridge.Manufacturer" "Atari - CCW, Christopher H. Omarzu" "Cartridge.ModelNo" "CX26104" "Cartridge.Name" "Big Bird's Egg Catch (05-17-1983) (Atari) (Prototype)" "Cartridge.Note" "Uses the Keypad Controller" @@ -1067,9 +1068,9 @@ "" "Cartridge.MD5" "0d5af65ad3f19558e6f8e29bf2a9d0f8" -"Cartridge.Manufacturer" "Atari, Adam Clayton, John Howard Palevich" +"Cartridge.Manufacturer" "Atari - Sculptured Software, Adam Clayton" "Cartridge.ModelNo" "CX26151, CX26151P" -"Cartridge.Name" "Dark Chambers (1988) (Atari) (PAL)" +"Cartridge.Name" "Dark Chambers (1989) (Atari) (PAL)" "Display.Phosphor" "YES" "" @@ -1185,7 +1186,7 @@ "" "Cartridge.MD5" "0ef64cdbecccb7049752a3de0b7ade14" -"Cartridge.Manufacturer" "Atari, Joe Decuir, Steve Mayer, Larry Wagner" +"Cartridge.Manufacturer" "Atari, Joe Decuir, Larry Caplan, Steve Mayer, Larry Wagner" "Cartridge.ModelNo" "CX26163P" "Cartridge.Name" "Combat (32 in 1) (1988) (Atari) (PAL)" "Display.Height" "256" @@ -1323,9 +1324,9 @@ "" "Cartridge.MD5" "106855474c69d08c8ffa308d47337269" -"Cartridge.Manufacturer" "Atari, Adam Clayton, John Howard Palevich" +"Cartridge.Manufacturer" "Atari - Sculptured Software, Adam Clayton" "Cartridge.ModelNo" "CX26151" -"Cartridge.Name" "Dark Chambers (1988) (Atari)" +"Cartridge.Name" "Dark Chambers (1989) (Atari)" "Display.Phosphor" "YES" "" @@ -1696,7 +1697,7 @@ "" "Cartridge.MD5" "151fa3218d8d7600114eb5bcd79c85cb" -"Cartridge.Manufacturer" "Atari, Christopher H. Omarzu - Children's Computer Workshop" +"Cartridge.Manufacturer" "Atari - CCW, Christopher H. Omarzu" "Cartridge.ModelNo" "CX26104" "Cartridge.Name" "Big Bird's Egg Catch (05-02-1983) (Atari) (Prototype)" "Cartridge.Note" "Uses the Keypad Controller" @@ -1931,7 +1932,7 @@ "Cartridge.MD5" "17d000a2882f9fdaa8b4a391ad367f00" "Cartridge.Manufacturer" "Atari - GCC" "Cartridge.ModelNo" "CX2676" -"Cartridge.Name" "Centipede (1982) (Atari) (PAL)" +"Cartridge.Name" "Centipede (1983) (Atari) (PAL)" "" "Cartridge.MD5" "17ee158d15e4a34f57a837bc1ce2b0ce" @@ -1951,7 +1952,7 @@ "" "Cartridge.MD5" "1802cc46b879b229272501998c5de04f" -"Cartridge.Manufacturer" "Atari, Christopher H. Omarzu - Children's Computer Workshop" +"Cartridge.Manufacturer" "Atari - CCW, Christopher H. Omarzu" "Cartridge.ModelNo" "CX26104" "Cartridge.Name" "Big Bird's Egg Catch (1983) (Atari)" "Cartridge.Note" "Uses Kids/Keypad Controllers" @@ -2289,7 +2290,7 @@ "" "Cartridge.MD5" "1da2da7974d2ca73a823523f82f517b3" -"Cartridge.Manufacturer" "Spectravision, Spectravideo, David Lubar" +"Cartridge.Manufacturer" "Spectravision - Spectravideo - Sirius Software, David Lubar" "Cartridge.ModelNo" "SA-206" "Cartridge.Name" "Challenge of.... Nexar, The (1982) (Spectravision) (PAL)" "" @@ -2465,7 +2466,7 @@ "" "Cartridge.MD5" "1fa7a42c2c7d6b7a0c6a05d38c7508f4" -"Cartridge.Manufacturer" "Coleco, Ed Temple" +"Cartridge.Manufacturer" "Coleco - Individeo, Ed Temple" "Cartridge.Name" "Cabbage Patch Kids (09-04-1984) (Coleco) (Prototype)" "Cartridge.Note" "Adventures in the Park" "Cartridge.Rarity" "Prototype" @@ -3158,9 +3159,9 @@ "" "Cartridge.MD5" "282a77841cb3d33af5b56151acba770e" -"Cartridge.Manufacturer" "Quelle" +"Cartridge.Manufacturer" "Otto Versand" "Cartridge.ModelNo" "311388" -"Cartridge.Name" "Black Hole (1983) (Quelle) (PAL)" +"Cartridge.Name" "Black Hole (1983) (Otto Versand) (PAL)" "Cartridge.Note" "AKA Cosmic Ark (Double-Game Package)" "" @@ -3519,7 +3520,7 @@ "" "Cartridge.MD5" "2c8835aed7f52a0da9ade5226ee5aa75" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" +"Cartridge.Manufacturer" "Arcadia Corporation, Stephen H. Landrum" "Cartridge.ModelNo" "AR-4101" "Cartridge.Name" "Communist Mutants from Space (1982) (Arcadia)" "" @@ -4129,7 +4130,7 @@ "" "Cartridge.MD5" "335a7c5cfa6fee0f35f5824d1fa09aed" -"Cartridge.Manufacturer" "Sega, Steve Beck, Phat Ho - Beck-Tech - Teldec" +"Cartridge.Manufacturer" "Sega - Beck-Tech, Steve Beck, Phat Ho - Teldec" "Cartridge.ModelNo" "006-01 - 3.60105 VG" "Cartridge.Name" "Congo Bongo (1983) (Sega) (PAL)" "" @@ -4510,7 +4511,7 @@ "Cartridge.MD5" "384f5fbf57b5e92ed708935ebf8a8610" "Cartridge.Manufacturer" "20th Century Fox Video Games, John W.S. Marvin" "Cartridge.ModelNo" "11009" -"Cartridge.Name" "Crypts of Chaos (1982) (20th Century Fox)" +"Cartridge.Name" "Crypts of Chaos (1983) (20th Century Fox)" "" "Cartridge.MD5" "3856b9425cc0185ed770376a62af0282" @@ -5354,7 +5355,7 @@ "" "Cartridge.MD5" "41f252a66c6301f1e8ab3612c19bc5d4" -"Cartridge.Manufacturer" "Atari - GCC, Mike Feinstein" +"Cartridge.Manufacturer" "Atari - GCC, Mike Feinstein, Brad Rice" "Cartridge.ModelNo" "CX2681" "Cartridge.Name" "Battlezone (1983) (Atari)" "Cartridge.Rarity" "Uncommon" @@ -5619,7 +5620,7 @@ "" "Cartridge.MD5" "4605a00f5b44a9cbd5803a7a55de150e" -"Cartridge.Manufacturer" "Coleco, Ed Temple" +"Cartridge.Manufacturer" "Coleco - Individeo, Ed Temple" "Cartridge.Name" "Cabbage Patch Kids (07-03-1984) (Coleco) (Prototype)" "Cartridge.Note" "Adventures in the Park" "Cartridge.Rarity" "Prototype" @@ -5919,10 +5920,10 @@ "" "Cartridge.MD5" "4981cefe5493ea512284e7f9f27d1e54" -"Cartridge.Manufacturer" "Home Vision - Gem International Corp." +"Cartridge.Manufacturer" "Home Vision - Gem International Corp. - VDI" "Cartridge.ModelNo" "VCS83136" "Cartridge.Name" "Cosmic War (1983) (Home Vision) (PAL)" -"Cartridge.Note" "AKA Space Tunnel" +"Cartridge.Note" "AKA Cosmic Corridor" "Display.Height" "256" "" @@ -6409,7 +6410,7 @@ "Cartridge.MD5" "4f89b897444e7c3b36aed469b8836839" "Cartridge.Manufacturer" "Atari" "Cartridge.ModelNo" "CX26190" -"Cartridge.Name" "BMX Air Master (1990) (Atari) (PAL)" +"Cartridge.Name" "BMX Air Master (1989) (Atari) (PAL)" "" "Cartridge.MD5" "4fae08027365d31c558e400b687adf21" @@ -6883,9 +6884,9 @@ "" "Cartridge.MD5" "55ef7b65066428367844342ed59f956c" -"Cartridge.Manufacturer" "Atari, Joe Gaucher, Alex Leavens" +"Cartridge.Manufacturer" "Atari - Roklan, Joe Gaucher, Alex Leavens" "Cartridge.ModelNo" "CX2683" -"Cartridge.Name" "Crazy Climber (1982) (Atari)" +"Cartridge.Name" "Crazy Climber (1983) (Atari)" "" "Cartridge.MD5" "562acb1b7ff182aba133bda8e21ad7c1" @@ -6965,7 +6966,7 @@ "" "Cartridge.MD5" "57c5b351d4de021785cf8ed8191a195c" -"Cartridge.Manufacturer" "Atari, Gary Stark" +"Cartridge.Manufacturer" "Atari - CCW, Gary Stark" "Cartridge.ModelNo" "CX26102" "Cartridge.Name" "Cookie Monster Munch (1983) (Atari)" "Cartridge.Note" "Uses Kids/Keypad Controllers" @@ -6979,7 +6980,7 @@ "" "Cartridge.MD5" "5846b1d34c296bf7afc2fa05bbc16e98" -"Cartridge.Manufacturer" "Atari, Larry Kaplan - Sears" +"Cartridge.Manufacturer" "Atari - Sears" "Cartridge.ModelNo" "CX2643 - 6-99815" "Cartridge.Name" "Codebreaker (1978) (Atari)" "Cartridge.Note" "Uses Keypad Controllers" @@ -7263,7 +7264,7 @@ "" "Cartridge.MD5" "5b85e987e2b1618769d97ba9182333d0" -"Cartridge.Manufacturer" "Atari - GCC, Mike Feinstein" +"Cartridge.Manufacturer" "Atari - GCC, Mike Feinstein, Brad Rice" "Cartridge.ModelNo" "CX2681" "Cartridge.Name" "Battlezone (05-12-1983) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -7391,7 +7392,7 @@ "" "Cartridge.MD5" "5d0e8a25cbd23e76f843c75a86b7e15b" -"Cartridge.Manufacturer" "Coleco, Ed Temple" +"Cartridge.Manufacturer" "Coleco - Individeo, Ed Temple" "Cartridge.Name" "Cabbage Patch Kids (09-07-1984) (Coleco) (Prototype)" "Cartridge.Note" "Adventures in the Park" "Cartridge.Rarity" "Prototype" @@ -7413,13 +7414,13 @@ "" "Cartridge.MD5" "5d2cc33ca798783dee435eb29debf6d6" -"Cartridge.Manufacturer" "Activision, Mike Riedel" +"Cartridge.Manufacturer" "Activision - Imagineering, Mike Reidel" "Cartridge.ModelNo" "AK-043-04" "Cartridge.Name" "Commando (1988) (Activision)" "" "Cartridge.MD5" "5d799bfa9e1e7b6224877162accada0d" -"Cartridge.Manufacturer" "Spectravision, Spectravideo, David Lubar" +"Cartridge.Manufacturer" "Spectravision - Spectravideo - Sirius Software, David Lubar" "Cartridge.ModelNo" "SA-206" "Cartridge.Name" "Challenge of.... Nexar, The (1982) (Spectravision)" "" @@ -7786,7 +7787,7 @@ "" "Cartridge.MD5" "61631c2f96221527e7da9802b4704f93" -"Cartridge.Manufacturer" "Activision, Mike Riedel" +"Cartridge.Manufacturer" "Activision - Imagineering, Mike Reidel" "Cartridge.ModelNo" "AK-043-04" "Cartridge.Name" "Commando (1988) (Activision) [different logo]" "" @@ -8253,7 +8254,7 @@ "" "Cartridge.MD5" "66fcf7643d554f5e15d4d06bab59fe70" -"Cartridge.Manufacturer" "Coleco, Ed Temple" +"Cartridge.Manufacturer" "Coleco - Individeo, Ed Temple" "Cartridge.Name" "Cabbage Patch Kids (09-13-1984) (Coleco) (Prototype)" "Cartridge.Note" "Adventures in the Park" "Cartridge.Rarity" "Prototype" @@ -9366,7 +9367,7 @@ "" "Cartridge.MD5" "749fec9918160921576f850b2375b516" -"Cartridge.Manufacturer" "Spectravision, Spectravideo" +"Cartridge.Manufacturer" "Spectravision - Spectravideo" "Cartridge.ModelNo" "SA-205" "Cartridge.Name" "China Syndrome (1982) (Spectravision)" "Display.Phosphor" "YES" @@ -9728,7 +9729,7 @@ "" "Cartridge.MD5" "798b8921276eec9e332dfcb47a2dbb17" -"Cartridge.Manufacturer" "Atari, Gary Stark" +"Cartridge.Manufacturer" "Atari - CCW, Gary Stark" "Cartridge.ModelNo" "CX26102" "Cartridge.Name" "Cookie Monster Munch (1983) (Atari) (PAL) [a]" "Cartridge.Note" "Uses Kids/Keypad Controllers" @@ -9753,7 +9754,7 @@ "" "Cartridge.MD5" "79ab4123a83dc11d468fb2108ea09e2e" -"Cartridge.Manufacturer" "Activision, David Rolfe - Cheshire Engineering" +"Cartridge.Manufacturer" "Activision - Cheshire Engineering, David Rolfe, Larry Zwick" "Cartridge.ModelNo" "AZ-037-04" "Cartridge.Name" "Beamrider (1984) (Activision)" "Cartridge.Rarity" "Rare" @@ -9952,7 +9953,7 @@ "" "Cartridge.MD5" "7ba07d4ea18bf3b3245c374d8720ad30" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" +"Cartridge.Manufacturer" "Starpath Corporation, Stephen H. Landrum" "Cartridge.ModelNo" "AR-4101" "Cartridge.Name" "Communist Mutants from Space (Preview) (1982) (Arcadia) (PAL)" "" @@ -9983,7 +9984,7 @@ "" "Cartridge.MD5" "7c757bb151269b2a626c907a22f5dae7" -"Cartridge.Manufacturer" "TNT Games, Adam Clayton" +"Cartridge.Manufacturer" "TNT Games - Sculptured Software, Adam Clayton" "Cartridge.ModelNo" "26192" "Cartridge.Name" "BMX Air Master (1989) (TNT Games) (PAL)" "Cartridge.Rarity" "Extremely Rare" @@ -10068,7 +10069,7 @@ "" "Cartridge.MD5" "7d726fa494f706784bafeb1b50d87f23" -"Cartridge.Manufacturer" "Coleco, Ed Temple" +"Cartridge.Manufacturer" "Coleco - Individeo, Ed Temple" "Cartridge.Name" "Cabbage Patch Kids (07-27-1984) (Coleco) (Prototype)" "Cartridge.Note" "Adventures in the Park" "Cartridge.Rarity" "Prototype" @@ -10154,9 +10155,9 @@ "" "Cartridge.MD5" "7e4783a59972ae2cd8384f231757ea0b" -"Cartridge.Manufacturer" "Atari" +"Cartridge.Manufacturer" "Atari - Imagineering, Dan Kichen" "Cartridge.ModelNo" "CX26139P" -"Cartridge.Name" "Crossbow (1987) (Atari) (PAL)" +"Cartridge.Name" "Crossbow (1988) (Atari) (PAL)" "" "Cartridge.MD5" "7e51a58de2c0db7d33715f518893b0db" @@ -10423,7 +10424,7 @@ "" "Cartridge.MD5" "80e5400470ac788143e6db9bc8dd88cf" -"Cartridge.Manufacturer" "Coleco, Ed Temple" +"Cartridge.Manufacturer" "Coleco - Individeo, Ed Temple" "Cartridge.Name" "Cabbage Patch Kids (06-XX-1984) (Coleco) (Prototype)" "Cartridge.Note" "Adventures in the Park" "Cartridge.Rarity" "Prototype" @@ -11044,7 +11045,7 @@ "" "Cartridge.MD5" "8905d54f48b8024fc718ed643e9033f7" -"Cartridge.Manufacturer" "Coleco, Ed Temple" +"Cartridge.Manufacturer" "Coleco - Individeo, Ed Temple" "Cartridge.Name" "Cabbage Patch Kids (05-24-1984) (Coleco) (Prototype)" "Cartridge.Note" "Adventures in the Park" "Cartridge.Rarity" "Prototype" @@ -11333,9 +11334,9 @@ "" "Cartridge.MD5" "8cd26dcf249456fe4aeb8db42d49df74" -"Cartridge.Manufacturer" "Atari" +"Cartridge.Manufacturer" "Atari - Imagineering, Dan Kichen" "Cartridge.ModelNo" "CX26139" -"Cartridge.Name" "Crossbow (1987) (Atari)" +"Cartridge.Name" "Crossbow (1988) (Atari)" "" "Cartridge.MD5" "8ce9126066f2ddd5173e9f1f9ce1494e" @@ -11509,7 +11510,7 @@ "" "Cartridge.MD5" "8f88309afad108936ca70f8b2b084718" -"Cartridge.Manufacturer" "Spectravision, Spectravideo - Quelle" +"Cartridge.Manufacturer" "Spectravision - Spectravideo - Quelle" "Cartridge.ModelNo" "SA-203 - 413.223 9" "Cartridge.Name" "Cross Force (1982) (Spectravision) (PAL)" "Cartridge.Note" "AKA Kreuzfeuer (Cross Fire)" @@ -11663,7 +11664,7 @@ "Cartridge.MD5" "91c2098e88a6b13f977af8c003e0bca5" "Cartridge.Manufacturer" "Atari - GCC" "Cartridge.ModelNo" "CX2676" -"Cartridge.Name" "Centipede (1982) (Atari)" +"Cartridge.Name" "Centipede (1983) (Atari)" "" "Cartridge.MD5" "91d1c82ceaf8af2add3973a3c34bc0cb" @@ -11716,7 +11717,7 @@ "Cartridge.Manufacturer" "Bit Corporation" "Cartridge.ModelNo" "PG205" "Cartridge.Name" "Dancing Plate (1982) (BitCorp) (PAL)" -"Cartridge.Note" "AKA Dancing Plates, Tanzende Teller" +"Cartridge.Note" "AKA Dishaster, Dancing Plates, Tanzende Teller" "Display.Phosphor" "YES" "" @@ -11900,7 +11901,7 @@ "" "Cartridge.MD5" "951e8cec7a1a1d6c01fd649e7ff7743a" -"Cartridge.Manufacturer" "Atari, Adam Clayton, John Howard Palevich" +"Cartridge.Manufacturer" "Atari - Sculptured Software, Adam Clayton" "Cartridge.ModelNo" "CX26151, CX26151P" "Cartridge.Name" "Dark Chambers (1988) (Atari) (Prototype) (PAL)" "Cartridge.Rarity" "Prototype" @@ -11995,9 +11996,9 @@ "" "Cartridge.MD5" "968efc79d500dce52a906870a97358ab" -"Cartridge.Manufacturer" "Atari" -"Cartridge.ModelNo" "CX26190" -"Cartridge.Name" "BMX Air Master (1990) (Atari)" +"Cartridge.Manufacturer" "TNT Games - Sculptured Software, Adam Clayton" +"Cartridge.ModelNo" "26192" +"Cartridge.Name" "BMX Air Master (1989) (TNT Games)" "" "Cartridge.MD5" "969b968383d9f0e9d8ffd1056bcaef49" @@ -12660,7 +12661,7 @@ "" "Cartridge.MD5" "a0297c4788f9e91d43e522f4c561b4ad" -"Cartridge.Manufacturer" "Atari, Gary Stark" +"Cartridge.Manufacturer" "Atari - CCW, Gary Stark" "Cartridge.ModelNo" "CX26102" "Cartridge.Name" "Cookie Monster Munch (1983) (Atari) (PAL)" "Cartridge.Note" "Uses Kids/Keypad Controllers" @@ -12959,7 +12960,7 @@ "" "Cartridge.MD5" "a422194290c64ef9d444da9d6a207807" -"Cartridge.Manufacturer" "M Network, Hal Finney" +"Cartridge.Manufacturer" "M Network - APh Technological Consulting, Hal Finney" "Cartridge.ModelNo" "MT5667" "Cartridge.Name" "Dark Cavern (1982) (M Network)" "" @@ -12979,7 +12980,7 @@ "" "Cartridge.MD5" "a47e26096de6f6487bf5dd2d1cced294" -"Cartridge.Manufacturer" "Atari, Larry Kaplan" +"Cartridge.Manufacturer" "Atari" "Cartridge.ModelNo" "CX2643" "Cartridge.Name" "Codebreaker (1978) (Atari) (PAL)" "Cartridge.Note" "Uses Keypad Controllers" @@ -13794,7 +13795,7 @@ "" "Cartridge.MD5" "afd2cf258d51ae4965ee21abba3627ab" -"Cartridge.Manufacturer" "Atari, Christopher H. Omarzu - Children's Computer Workshop" +"Cartridge.Manufacturer" "Atari - CCW, Christopher H. Omarzu" "Cartridge.ModelNo" "CX26104" "Cartridge.Name" "Big Bird's Egg Catch (12-08-1982) (Atari) (Prototype)" "Cartridge.Note" "Uses the Keypad Controller" @@ -14451,7 +14452,7 @@ "Cartridge.MD5" "b8ed78afdb1e6cfe44ef6e3428789d5f" "Cartridge.Manufacturer" "Data Age, J. Ray Dettling" "Cartridge.ModelNo" "112-007" -"Cartridge.Name" "Bermuda Triangle (1982) (Data Age)" +"Cartridge.Name" "Bermuda Triangle (1983) (Data Age)" "Cartridge.Rarity" "Rare" "" @@ -14681,7 +14682,7 @@ "" "Cartridge.MD5" "bce93984b920e9b56cf24064f740fe78" -"Cartridge.Manufacturer" "Atari, Carol Shaw" +"Cartridge.Manufacturer" "Atari" "Cartridge.ModelNo" "CX26163P" "Cartridge.Name" "Checkers (32 in 1) (1988) (Atari) (PAL)" "" @@ -14957,7 +14958,7 @@ "" "Cartridge.MD5" "c17bdc7d14a36e10837d039f43ee5fa3" -"Cartridge.Manufacturer" "Spectravision, Spectravideo" +"Cartridge.Manufacturer" "Spectravision - Spectravideo" "Cartridge.ModelNo" "SA-203" "Cartridge.Name" "Cross Force (1982) (Spectravision)" "" @@ -16279,9 +16280,10 @@ "" "Cartridge.MD5" "d078d25873c5b99f78fa267245a2af02" -"Cartridge.Manufacturer" "Sega, Steve Beck, Phat Ho - Beck-Tech" +"Cartridge.Manufacturer" "Sega - Beck-Tech, Steve Beck, Phat Ho" "Cartridge.ModelNo" "006-01" "Cartridge.Name" "Congo Bongo (1983) (Sega) [a]" +"Display.YStart" "26" "Display.Height" "220" "" @@ -16643,7 +16645,7 @@ "" "Cartridge.MD5" "d541b20eae221a8ee321375e5971e766" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" +"Cartridge.Manufacturer" "Arcadia Corporation, Stephen H. Landrum" "Cartridge.ModelNo" "AR-4101" "Cartridge.Name" "Communist Mutants from Space (Preview) (1982) (Arcadia)" "" @@ -17368,7 +17370,7 @@ "" "Cartridge.MD5" "de1e9fb700baf8d2e5ae242bffe2dbda" -"Cartridge.Manufacturer" "Activision, Mike Riedel" +"Cartridge.Manufacturer" "Activision - Imagineering, Mike Reidel" "Cartridge.ModelNo" "EAK-043-04I" "Cartridge.Name" "Commando (1988) (Activision) (PAL)" "" @@ -17379,9 +17381,9 @@ "" "Cartridge.MD5" "de29e46dbea003c3c09c892d668b9413" -"Cartridge.Manufacturer" "CBS Electronics, Steve 'Jessica' Kitchen" +"Cartridge.Manufacturer" "Coleco - Woodside Design Associates, Steve 'Jessica Stevens' Kitchen" "Cartridge.ModelNo" "4L1717, 4L1718, 4L1719, 4L2277" -"Cartridge.Name" "Carnival (1982) (CBS Electronics) (PAL)" +"Cartridge.Name" "Carnival (1983) (CBS Electronics) (PAL)" "" "Cartridge.MD5" "de3d0e37729d85afcb25a8d052a6e236" @@ -17681,7 +17683,7 @@ "" "Cartridge.MD5" "e1486c7822c07117b4f94a32e5ed68c1" -"Cartridge.Manufacturer" "Coleco, Ed Temple" +"Cartridge.Manufacturer" "Coleco - Individeo, Ed Temple" "Cartridge.Name" "Cabbage Patch Kids (06-14-1984) (Coleco) (Prototype)" "Cartridge.Note" "Adventures in the Park" "Cartridge.Rarity" "Prototype" @@ -17701,7 +17703,7 @@ "" "Cartridge.MD5" "e150f0d14f013a104b032305c0ce23ef" -"Cartridge.Manufacturer" "Spectravision, Spectravideo" +"Cartridge.Manufacturer" "Spectravision - Spectravideo" "Cartridge.ModelNo" "SA-205" "Cartridge.Name" "China Syndrome (1982) (Spectravision) (PAL)" "Display.Phosphor" "YES" @@ -17839,7 +17841,7 @@ "" "Cartridge.MD5" "e2c89f270f72cd256ed667507fa038a2" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" +"Cartridge.Manufacturer" "Starpath Corporation, Stephen H. Landrum" "Cartridge.ModelNo" "AR-4101" "Cartridge.Name" "Communist Mutants from Space (1982) (Arcadia) (PAL)" "" @@ -17951,7 +17953,7 @@ "" "Cartridge.MD5" "e434c0e161dd3c3fb435eb6bad2e182c" -"Cartridge.Manufacturer" "Atari - GCC, Mike Feinstein" +"Cartridge.Manufacturer" "Atari - GCC, Mike Feinstein, Brad Rice" "Cartridge.ModelNo" "CX2681" "Cartridge.Name" "Battlezone (05-02-1983) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -18329,7 +18331,7 @@ "" "Cartridge.MD5" "e8aa36e3d49e9bfa654c25dcc19c74e6" -"Cartridge.Manufacturer" "Atari, Joe Decuir, Steve Mayer, Larry Wagner" +"Cartridge.Manufacturer" "Atari, Joe Decuir, Larry Caplan, Steve Mayer, Larry Wagner" "Cartridge.ModelNo" "CX2601, CX2601P" "Cartridge.Name" "Combat (1977) (Atari) (PAL)" "Display.Height" "260" @@ -18641,6 +18643,7 @@ "Cartridge.Manufacturer" "Puzzy - Bit Corporation" "Cartridge.ModelNo" "PG205" "Cartridge.Name" "Dancing Plate (1982) (Puzzy) (PAL)" +"Cartridge.Note" "AKA Dishaster" "Display.Phosphor" "YES" "" @@ -19149,7 +19152,7 @@ "" "Cartridge.MD5" "f283cc294ece520c2badf9da20cfc025" -"Cartridge.Manufacturer" "Atari, Christopher H. Omarzu - Children's Computer Workshop" +"Cartridge.Manufacturer" "Atari - CCW, Christopher H. Omarzu" "Cartridge.ModelNo" "CX26104" "Cartridge.Name" "Big Bird's Egg Catch (1983) (Atari) (PAL)" "Cartridge.Note" "Uses Kids/Keypad Controllers" @@ -19239,7 +19242,6 @@ "Cartridge.Manufacturer" "ZiMAG - Emag - Vidco" "Cartridge.ModelNo" "708-111 - GN-040" "Cartridge.Name" "Cosmic Corridor (1983) (ZiMAG)" -"Cartridge.Note" "AKA Space Tunnel" "Display.Height" "220" "" @@ -19304,7 +19306,7 @@ "" "Cartridge.MD5" "f457674cef449cfd85f21db2b4f631a7" -"Cartridge.Manufacturer" "U.S. Games Corporation, Wes Trager, Henry Will IV" +"Cartridge.Manufacturer" "U.S. Games Corporation - JWDA, Todd Marshall, Wes Trager, Henry Will IV" "Cartridge.ModelNo" "VC1004" "Cartridge.Name" "Commando Raid (1982) (U.S. Games)" "" @@ -19365,7 +19367,7 @@ "" "Cartridge.MD5" "f4dabd5bcc603e8464a478208037d423" -"Cartridge.Manufacturer" "Coleco, Ed Temple" +"Cartridge.Manufacturer" "Coleco - Individeo, Ed Temple" "Cartridge.Name" "Cabbage Patch Kids (08-21-1984) (Coleco) (Prototype)" "Cartridge.Note" "Adventures in the Park" "Cartridge.Rarity" "Prototype" @@ -19481,7 +19483,7 @@ "" "Cartridge.MD5" "f6b5ebb65cbb2981af4d546c470629d7" -"Cartridge.Manufacturer" "Coleco, Ed Temple" +"Cartridge.Manufacturer" "Coleco - Individeo, Ed Temple" "Cartridge.Name" "Cabbage Patch Kids (09-13-1984) (Coleco) (Prototype) [a]" "Cartridge.Note" "Adventures in the Park" "Cartridge.Rarity" "Prototype" @@ -20053,7 +20055,7 @@ "" "Cartridge.MD5" "fbe554aa8f759226d251ba6b64a9cce4" -"Cartridge.Manufacturer" "Atari - GCC, Mike Feinstein" +"Cartridge.Manufacturer" "Atari - GCC, Mike Feinstein, Brad Rice" "Cartridge.ModelNo" "CX2681, CX2681P" "Cartridge.Name" "Battlezone (1983) (Atari) (PAL)" "Cartridge.Rarity" "Uncommon" @@ -20227,7 +20229,7 @@ "" "Cartridge.MD5" "fe67087f9c22655ce519616fc6c6ef4d" -"Cartridge.Manufacturer" "Atari, Randy Bowker" +"Cartridge.Manufacturer" "Atari - Zip Technology, Randy Bowker, Bruce Williams" "Cartridge.ModelNo" "CX26142" "Cartridge.Name" "Crack'ed (11-28-1988) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -20259,7 +20261,7 @@ "" "Cartridge.MD5" "fec0c2e2ab0588ed20c750b58cf3baa3" -"Cartridge.Manufacturer" "Activision, David Rolfe - Cheshire Engineering" +"Cartridge.Manufacturer" "Activision - Cheshire Engineering, David Rolfe, Larry Zwick" "Cartridge.ModelNo" "EAZ-037-04, EAZ-037-04I" "Cartridge.Name" "Beamrider (1984) (Activision) (PAL)" "Cartridge.Rarity" "Rare" From fabf8125433e80151fdbab06d745d4c7d7eb0571 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Mon, 18 Dec 2017 21:56:07 +0100 Subject: [PATCH 103/156] developer dialog Horizon enable fix FLAT_UI fixes for disabled elements --- src/emucore/FrameBuffer.cxx | 2 +- src/gui/DeveloperDialog.cxx | 11 ++++++++--- src/gui/PopUpWidget.cxx | 4 ++-- src/gui/Widget.cxx | 8 ++++++-- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index a6210a24c..dd92df817 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -978,7 +978,7 @@ uInt32 FrameBuffer::ourGUIColors[3][kNumColors-256] = { 0x808080, 0x000000, 0xc0c0c0, 0xe1e1e1, 0x333333, // base 0x000000, 0x0078d7, 0x0078d7, 0xffffff, // text 0xf0f0f0, 0xffffff, 0x0f0f0f, // elements - 0xe1e1e1, 0xe5f1fb, 0x202020, 0x000000, // buttons + 0xe1e1e1, 0xe5f1fb, 0x000000, 0x000000, // buttons 0x333333, // checkbox 0x808080, 0x0078d7, // scrollbar 0x333333, 0x0078d7, // slider diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index 099c65937..cae1b9f8b 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -328,7 +328,7 @@ void DeveloperDialog::addTimeMachineTab(const GUI::Font& font) int sWidth = font.getMaxCharWidth() * 8; myStateSizeWidget = new SliderWidget(myTab, font, HBORDER + INDENT * 2, ypos - 1, sWidth, lineHeight, - "Buffer size ", 0, kSizeChanged); + "Buffer size (*) ", 0, kSizeChanged); myStateSizeWidget->setMinValue(20); myStateSizeWidget->setMaxValue(1000); myStateSizeWidget->setStepValue(20); @@ -363,6 +363,11 @@ void DeveloperDialog::addTimeMachineTab(const GUI::Font& font) lineHeight, items, "Horizon ~ ", 0, kHorizonChanged); wid.push_back(myStateHorizonWidget); + // Add message concerning usage + const GUI::Font& infofont = instance().frameBuffer().infoFont(); + ypos = myTab->getHeight() - 5 - fontHeight - infofont.getFontHeight() - 10; + new StaticTextWidget(myTab, infofont, HBORDER, ypos, "(*) Any size change clears the buffer"); + addToFocusList(wid, myTab, tabID); } @@ -1010,7 +1015,7 @@ void DeveloperDialog::handleSize() myUncompressedWidget->setValue(size); myStateIntervalWidget->setSelectedIndex(interval); myStateHorizonWidget->setSelectedIndex(i); - myStateHorizonWidget->setEnabled(size > uncompressed); + myStateHorizonWidget->setEnabled(myTimeMachineWidget->getState() && size > uncompressed); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1023,7 +1028,7 @@ void DeveloperDialog::handleUncompressed() if(size < uncompressed) myStateSizeWidget->setValue(uncompressed); - myStateHorizonWidget->setEnabled(size > uncompressed); + myStateHorizonWidget->setEnabled(myTimeMachineWidget->getState() && size > uncompressed); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/PopUpWidget.cxx b/src/gui/PopUpWidget.cxx index c7d18e04f..c412c6c96 100644 --- a/src/gui/PopUpWidget.cxx +++ b/src/gui/PopUpWidget.cxx @@ -243,11 +243,11 @@ void PopUpWidget::drawWidget(bool hilite) // Draw a thin frame around us. s.frameRect(x, _y, w, _h, kColor); - s.frameRect(x + w - 16, _y + 1, 15, _h - 2, hilite ? kTextColorHi : kBGColorLo); + s.frameRect(x + w - 16, _y + 1, 15, _h - 2, isEnabled() && hilite ? kTextColorHi : kBGColorLo); // Fill the background s.fillRect(x + 1, _y + 1, w - 17, _h - 2, kWidColor); - s.fillRect(x + w - 15, _y + 2, 13, _h - 4, kBGColorHi); + s.fillRect(x + w - 15, _y + 2, 13, _h - 4, isEnabled() && hilite ? kWidColor : kBGColorHi); //s.vLine(x + w - 17, _y, _y + _h - 1, kShadowColor); // Draw an arrow pointing down at the right end to signal this is a dropdown/popup s.drawBitmap(down_arrow, x + w - 13, _y + myArrowsY + 1, diff --git a/src/gui/Widget.cxx b/src/gui/Widget.cxx index 0b5131af0..9c839b363 100644 --- a/src/gui/Widget.cxx +++ b/src/gui/Widget.cxx @@ -84,7 +84,11 @@ void Widget::draw() { x++; y++; w-=2; h-=2; } +#ifndef FLAT_UI s.fillRect(x, y, w, h, (_flags & WIDGET_HILITED) ? _bgcolorhi : _bgcolor); +#else + s.fillRect(x, y, w, h, (_flags & WIDGET_HILITED) && isEnabled() ? _bgcolorhi : _bgcolor); +#endif } // Draw border @@ -93,7 +97,7 @@ void Widget::draw() #ifndef FLAT_UI s.box(_x, _y, _w, _h, kColor, kShadowColor); #else - s.frameRect(_x, _y, _w, _h, (_flags & WIDGET_HILITED) ? kScrollColorHi : kColor); + s.frameRect(_x, _y, _w, _h, (_flags & WIDGET_HILITED) && isEnabled() ? kScrollColorHi : kColor); #endif // !FLAT_UI _x += 4; _y += 4; @@ -813,7 +817,7 @@ void SliderWidget::drawWidget(bool hilite) isEnabled() ? kTextColor : kColor, TextAlign::Left); // Draw the box - s.frameRect(_x + _labelWidth, _y, _w - _labelWidth, _h, hilite ? kSliderColorHi : kShadowColor); + s.frameRect(_x + _labelWidth, _y, _w - _labelWidth, _h, isEnabled() && hilite ? kSliderColorHi : kShadowColor); // Fill the box s.fillRect(_x + _labelWidth + 1, _y + 1, _w - _labelWidth - 2, _h - 2, !isEnabled() ? kBGColorHi : kWidColor); From d7a34ec7dd973fb7cf4500bd32e3c2ae931242ea Mon Sep 17 00:00:00 2001 From: thrust26 Date: Tue, 19 Dec 2017 09:01:26 +0100 Subject: [PATCH 104/156] 'tab' key skips disabled widgets 'ghost' read traps are displayed by 'RTrapG' --- src/emucore/M6502.cxx | 3 ++- src/gui/PopUpWidget.cxx | 1 - src/gui/Widget.cxx | 35 +++++++++++++++++++++-------------- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/emucore/M6502.cxx b/src/emucore/M6502.cxx index 184e7affa..bcdeddde7 100644 --- a/src/emucore/M6502.cxx +++ b/src/emucore/M6502.cxx @@ -147,7 +147,8 @@ inline uInt8 M6502::peek(uInt16 address, uInt8 flags) { myJustHitReadTrapFlag = true; stringstream msg; - msg << "RTrap[" << Common::Base::HEX2 << cond << "]" << (myTrapCondNames[cond].empty() ? ": " : "If: {" + myTrapCondNames[cond] + "} "); + msg << "RTrap" << (flags == DISASM_NONE ? "G[" : "[") << Common::Base::HEX2 << cond << "]" + << (myTrapCondNames[cond].empty() ? ": " : "If: {" + myTrapCondNames[cond] + "} "); myHitTrapInfo.message = msg.str(); myHitTrapInfo.address = address; } diff --git a/src/gui/PopUpWidget.cxx b/src/gui/PopUpWidget.cxx index c412c6c96..b2a87c559 100644 --- a/src/gui/PopUpWidget.cxx +++ b/src/gui/PopUpWidget.cxx @@ -248,7 +248,6 @@ void PopUpWidget::drawWidget(bool hilite) // Fill the background s.fillRect(x + 1, _y + 1, w - 17, _h - 2, kWidColor); s.fillRect(x + w - 15, _y + 2, 13, _h - 4, isEnabled() && hilite ? kWidColor : kBGColorHi); - //s.vLine(x + w - 17, _y, _y + _h - 1, kShadowColor); // Draw an arrow pointing down at the right end to signal this is a dropdown/popup s.drawBitmap(down_arrow, x + w - 13, _y + myArrowsY + 1, !isEnabled() ? kColor : kTextColor, 9u, 8u); diff --git a/src/gui/Widget.cxx b/src/gui/Widget.cxx index 9c839b363..274b47346 100644 --- a/src/gui/Widget.cxx +++ b/src/gui/Widget.cxx @@ -241,24 +241,31 @@ Widget* Widget::setFocusForChain(GuiObject* boss, WidgetArray& arr, return nullptr; else { - switch(direction) + int oldPos = pos; + do { - case -1: // previous widget - pos--; - if(pos < 0) - pos = size - 1; - break; + switch(direction) + { + case -1: // previous widget + pos--; + if(pos < 0) + pos = size - 1; + break; - case +1: // next widget - pos++; - if(pos >= size) - pos = 0; - break; + case +1: // next widget + pos++; + if(pos >= size) + pos = 0; + break; - default: - // pos already set + default: + // pos already set + break; + } + // break if all widgets should be disabled + if(oldPos == pos) break; - } + } while(!arr[pos]->isEnabled()); } // Now highlight the active widget From b2d1c37f1e9023d65736341c84c5cc0ce28b7ea5 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Tue, 19 Dec 2017 12:35:29 +0100 Subject: [PATCH 105/156] superfluous parameter removed in VideoDialog --- src/gui/OptionsDialog.cxx | 2 +- src/gui/VideoDialog.cxx | 2 +- src/gui/VideoDialog.hxx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/OptionsDialog.cxx b/src/gui/OptionsDialog.cxx index b0c6c4d3a..76b0e88b5 100644 --- a/src/gui/OptionsDialog.cxx +++ b/src/gui/OptionsDialog.cxx @@ -122,7 +122,7 @@ OptionsDialog::OptionsDialog(OSystem& osystem, DialogContainer& parent, addCancelWidget(b); // Now create all the dialogs attached to each menu button - myVideoDialog = make_unique(osystem, parent, font, max_w, max_h, myMode == launcher); + myVideoDialog = make_unique(osystem, parent, font, max_w, max_h); myAudioDialog = make_unique(osystem, parent, font); myInputDialog = make_unique(osystem, parent, font, max_w, max_h); myUIDialog = make_unique(osystem, parent, font); diff --git a/src/gui/VideoDialog.cxx b/src/gui/VideoDialog.cxx index 667569f39..922d68e6e 100644 --- a/src/gui/VideoDialog.cxx +++ b/src/gui/VideoDialog.cxx @@ -34,7 +34,7 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent, - const GUI::Font& font, int max_w, int max_h, bool isGlobal) + const GUI::Font& font, int max_w, int max_h) : Dialog(osystem, parent) { const int VGAP = 4; diff --git a/src/gui/VideoDialog.hxx b/src/gui/VideoDialog.hxx index a6a257a65..027005542 100644 --- a/src/gui/VideoDialog.hxx +++ b/src/gui/VideoDialog.hxx @@ -35,7 +35,7 @@ class VideoDialog : public Dialog { public: VideoDialog(OSystem& osystem, DialogContainer& parent, const GUI::Font& font, - int max_w, int max_h, bool isGlobal); + int max_w, int max_h); virtual ~VideoDialog() = default; private: From 0385dd4b014baa36d830e469976a83c51d030798 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Tue, 19 Dec 2017 14:46:40 +0100 Subject: [PATCH 106/156] added (disabled) SDL renderer information code --- src/common/FrameBufferSDL2.cxx | 40 ++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/common/FrameBufferSDL2.cxx b/src/common/FrameBufferSDL2.cxx index 64f93945d..be1cd5563 100644 --- a/src/common/FrameBufferSDL2.cxx +++ b/src/common/FrameBufferSDL2.cxx @@ -84,6 +84,46 @@ void FrameBufferSDL2::queryHardware(vector& displays, displays.emplace_back(display.w, display.h); } +#if 0 + struct RenderName + { + string sdlName; + string stellaName; + }; + // create name map for all currently known SDL renderers + const int NUM_RENDERES = 5; + static const RenderName RENDERER_NAMES[NUM_RENDERES] = + { + {"direct3d", "Direct3D"}, + {"opengl", "OpenGL"}, + {"opengles", "OpenGLES"}, + {"opengles2", "OpenGLES2"}, + {"software", "Software"} + }; + + int numDrivers = SDL_GetNumRenderDrivers(); + for(int i = 0; i < numDrivers; ++i) + { + SDL_RendererInfo info; + if(SDL_GetRenderDriverInfo(i, &info) == 0) + { + // map SDL names into nicer Stella names + bool found = false; + for(int j = 0; j < NUM_RENDERES; ++j) + { + if(RENDERER_NAMES[j].sdlName == info.name) + { + VarList::push_back(renderers, RENDERER_NAMES[j].stellaName, info.name); + found = true; + break; + } + } + if (!found) + VarList::push_back(renderers, info.name, info.name); + } + } +#endif + // For now, supported render types are hardcoded; eventually, SDL may // provide a method to query this #if defined(BSPF_WINDOWS) From 7259af1583c2f8732ed3a17b9f94bc27af1019a7 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Tue, 19 Dec 2017 16:56:01 +0100 Subject: [PATCH 107/156] "Light" color fix --- src/debugger/gui/TiaOutputWidget.cxx | 4 +--- src/emucore/FrameBuffer.cxx | 14 +++++++++----- src/emucore/FrameBufferConstants.hxx | 1 + 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/debugger/gui/TiaOutputWidget.cxx b/src/debugger/gui/TiaOutputWidget.cxx index 391713ba1..bc9a681ed 100644 --- a/src/debugger/gui/TiaOutputWidget.cxx +++ b/src/debugger/gui/TiaOutputWidget.cxx @@ -182,9 +182,7 @@ void TiaOutputWidget::drawWidget(bool hilite) s.drawPixels(myLineBuffer, _x + 1, _y + 1 + y, width << 1); } - uInt32 beamColor = kBtnTextColor; - if(instance().settings().getString("uipalette") == "light") - beamColor = kWidColor; + uInt32 beamColor = kColorInfo; // Show electron beam position if(visible && scanx < width && scany+2u < height) diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index dd92df817..46a46fcfc 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -227,7 +227,7 @@ FBInitStatus FrameBuffer::createDisplay(const string& title, myMsg.counter = 0; // Create surfaces for TIA statistics and general messages - myStatsMsg.color = kBtnTextColor; + myStatsMsg.color = kColorInfo; myStatsMsg.w = infoFont().getMaxCharWidth() * 24 + 2; myStatsMsg.h = (infoFont().getFontHeight() + 2) * 2; @@ -950,6 +950,8 @@ void FrameBuffer::VideoModeList::setZoom(uInt32 zoom) kDbgChangedTextColor Text color for changed cells kDbgColorHi Highlighted color in debugger data cells kDbgColorRed Red color in debugger + *** Info color *** + kColorinfo */ uInt32 FrameBuffer::ourGUIColors[3][kNumColors-256] = { // Standard @@ -961,8 +963,8 @@ uInt32 FrameBuffer::ourGUIColors[3][kNumColors-256] = { 0xac3410, 0xd55941, 0xac3410, 0xd55941, 0xc80000, 0x00ff00, 0xc8c8ff, 0xc80000, - }, - + 0xffffff + }, // Classic { 0x686868, 0x000000, 0x404040, 0x404040, 0x404040, 0x20a020, 0x00ff00, 0xc80000, 0x20a020, @@ -971,7 +973,8 @@ uInt32 FrameBuffer::ourGUIColors[3][kNumColors-256] = { 0x20a020, 0x20a020, 0x00ff00, 0x20a020, 0x00ff00, - 0xc80000, 0x00ff00, 0xc8c8ff, 0xc80000 + 0xc80000, 0x00ff00, 0xc8c8ff, 0xc80000, + 0x20a020 }, // Light { @@ -982,6 +985,7 @@ uInt32 FrameBuffer::ourGUIColors[3][kNumColors-256] = { 0x333333, // checkbox 0x808080, 0x0078d7, // scrollbar 0x333333, 0x0078d7, // slider - 0xffc0c0, 0x000000, 0xe00000, 0xc00000 // debugger + 0xffc0c0, 0x000000, 0xe00000, 0xc00000, // debugger + 0xffffff // info } }; diff --git a/src/emucore/FrameBufferConstants.hxx b/src/emucore/FrameBufferConstants.hxx index 769e25f14..7f969e3fc 100644 --- a/src/emucore/FrameBufferConstants.hxx +++ b/src/emucore/FrameBufferConstants.hxx @@ -67,6 +67,7 @@ enum { kDbgChangedTextColor, kDbgColorHi, kDbgColorRed, + kColorInfo, kNumColors }; From 81cdbe832eef6531a9453de827095f87eee56a92 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Tue, 19 Dec 2017 16:57:47 +0100 Subject: [PATCH 108/156] refactoring the fix --- src/debugger/gui/TiaOutputWidget.cxx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/debugger/gui/TiaOutputWidget.cxx b/src/debugger/gui/TiaOutputWidget.cxx index bc9a681ed..05d2cd091 100644 --- a/src/debugger/gui/TiaOutputWidget.cxx +++ b/src/debugger/gui/TiaOutputWidget.cxx @@ -182,9 +182,7 @@ void TiaOutputWidget::drawWidget(bool hilite) s.drawPixels(myLineBuffer, _x + 1, _y + 1 + y, width << 1); } - uInt32 beamColor = kColorInfo; - // Show electron beam position if(visible && scanx < width && scany+2u < height) - s.fillRect(_x + 1 + (scanx<<1), _y + 1 + scany, 3, 3, beamColor); + s.fillRect(_x + 1 + (scanx<<1), _y + 1 + scany, 3, 3, kColorInfo); } From e9ef45ab0a5b7d063063202b98ec960ce3e36b3f Mon Sep 17 00:00:00 2001 From: thrust26 Date: Tue, 19 Dec 2017 18:10:01 +0100 Subject: [PATCH 109/156] minor consistency fix and doc updates --- docs/graphics/debugger_bankcomplex.png | Bin 8777 -> 10569 bytes docs/graphics/debugger_banksimple.png | Bin 2833 -> 3770 bytes docs/graphics/debugger_main.png | Bin 86537 -> 86550 bytes docs/graphics/debugger_rom.png | Bin 14998 -> 14986 bytes src/debugger/gui/RomWidget.cxx | 1 + src/emucore/FrameBuffer.cxx | 2 +- 6 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/graphics/debugger_bankcomplex.png b/docs/graphics/debugger_bankcomplex.png index b20ad65ac4fb3c0a22d707e59fb7ec94b07744c6..8f8501a9da58964eb8a90d97d01583313443cdfa 100644 GIT binary patch literal 10569 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 PI}lcfj+;{tx?TGpFwy5_ diff --git a/docs/graphics/debugger_banksimple.png b/docs/graphics/debugger_banksimple.png index 98f09dfe00cb24a9b4e09fe96e1532f6b83d0830..940a6dc9f09938a9f458c4ad9089730957c613b9 100644 GIT binary patch literal 3770 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 diff --git a/docs/graphics/debugger_main.png b/docs/graphics/debugger_main.png index 0797e56f72cf9956f649316248f4ca2f0aa19015..823e3ce6685c549bbe39864b7a1b81326dc497ca 100644 GIT binary patch delta 39796 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 K*57+h1pF^A8E|m` delta 40055 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 diff --git a/docs/graphics/debugger_rom.png b/docs/graphics/debugger_rom.png index e5b90e818b85614688042c8a55707e57c8b18a00..c69d2de78a6e81548378f0c77b7bd6bd86bc3394 100644 GIT binary patch delta 9398 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 diff --git a/src/debugger/gui/RomWidget.cxx b/src/debugger/gui/RomWidget.cxx index bf4a51e4f..a1e3d50d8 100644 --- a/src/debugger/gui/RomWidget.cxx +++ b/src/debugger/gui/RomWidget.cxx @@ -50,6 +50,7 @@ RomWidget::RomWidget(GuiObject* boss, const GUI::Font& lfont, const GUI::Font& n xpos += t->getWidth() + 5; myBank = new EditTextWidget(boss, nfont, xpos, ypos-2, _w - 2 - xpos, nfont.getLineHeight()); + myBank->setEditable(false); // Create rom listing xpos = x; ypos += myBank->getHeight() + 4; diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index 46a46fcfc..ff0b12097 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -964,7 +964,7 @@ uInt32 FrameBuffer::ourGUIColors[3][kNumColors-256] = { 0xac3410, 0xd55941, 0xc80000, 0x00ff00, 0xc8c8ff, 0xc80000, 0xffffff - }, + }, // Classic { 0x686868, 0x000000, 0x404040, 0x404040, 0x404040, 0x20a020, 0x00ff00, 0xc80000, 0x20a020, From d3575f32903af43e6e55b1413c21c52ad0b5a06f Mon Sep 17 00:00:00 2001 From: thrust26 Date: Tue, 19 Dec 2017 19:22:29 +0100 Subject: [PATCH 110/156] change tracking for TiaInfoWidget added --- src/debugger/TIADebug.cxx | 20 ++++++++++++++++++++ src/debugger/TIADebug.hxx | 1 + src/debugger/gui/TiaInfoWidget.cxx | 27 +++++++++++++++++---------- src/gui/Widget.cxx | 8 +++++--- src/gui/Widget.hxx | 3 ++- 5 files changed, 45 insertions(+), 14 deletions(-) diff --git a/src/debugger/TIADebug.cxx b/src/debugger/TIADebug.cxx index 80a790fb3..b2e1ad755 100644 --- a/src/debugger/TIADebug.cxx +++ b/src/debugger/TIADebug.cxx @@ -108,6 +108,16 @@ const DebuggerState& TIADebug::getState() myState.aud.push_back(audV0()); myState.aud.push_back(audV1()); + // internal TIA state + myState.info.clear(); + myState.info.push_back(frameCount()); + myState.info.push_back(frameCycles()); + myState.info.push_back(vsyncAsInt()); + myState.info.push_back(vblankAsInt()); + myState.info.push_back(scanlines()); + myState.info.push_back(scanlinesLastFrame()); + myState.info.push_back(clocksThisLine()); + return myState; } @@ -168,6 +178,16 @@ void TIADebug::saveOldState() myOldState.aud.push_back(audC1()); myOldState.aud.push_back(audV0()); myOldState.aud.push_back(audV1()); + + // internal TIA state + myOldState.info.clear(); + myOldState.info.push_back(frameCount()); + myOldState.info.push_back(frameCycles()); + myOldState.info.push_back(vsyncAsInt()); + myOldState.info.push_back(vblankAsInt()); + myOldState.info.push_back(scanlines()); + myOldState.info.push_back(scanlinesLastFrame()); + myOldState.info.push_back(clocksThisLine()); } /* the set methods now use mySystem.poke(). This will save us the diff --git a/src/debugger/TIADebug.hxx b/src/debugger/TIADebug.hxx index 38dd9e6dd..55fe764d0 100644 --- a/src/debugger/TIADebug.hxx +++ b/src/debugger/TIADebug.hxx @@ -45,6 +45,7 @@ class TiaState : public DebuggerState IntArray pf; IntArray size; IntArray aud; + IntArray info; }; class TIADebug : public DebuggerSystem diff --git a/src/debugger/gui/TiaInfoWidget.cxx b/src/debugger/gui/TiaInfoWidget.cxx index 224c26690..abacbf2fa 100644 --- a/src/debugger/gui/TiaInfoWidget.cxx +++ b/src/debugger/gui/TiaInfoWidget.cxx @@ -127,19 +127,26 @@ void TiaInfoWidget::loadConfig() { Debugger& dbg = instance().debugger(); TIADebug& tia = dbg.tiaDebug(); + const TiaState& oldTia = static_cast(tia.getOldState()); - myFrameCount->setText(" " + Common::Base::toString(tia.frameCount(), Common::Base::F_10)); - myFrameCycles->setText(" " + Common::Base::toString(tia.frameCycles(), Common::Base::F_10)); + myFrameCount->setText(" " + Common::Base::toString(tia.frameCount(), Common::Base::F_10), + tia.frameCount() != oldTia.info[0]); + myFrameCycles->setText(" " + Common::Base::toString(tia.frameCycles(), Common::Base::F_10), + tia.frameCycles() != oldTia.info[1]); - myVSync->setState(tia.vsync()); - myVBlank->setState(tia.vblank()); + myVSync->setState(tia.vsync(), tia.vsyncAsInt() != oldTia.info[2]); + myVBlank->setState(tia.vblank(), tia.vblankAsInt() != oldTia.info[3]); int clk = tia.clocksThisLine(); - myScanlineCount->setText( - Common::Base::toString(tia.scanlines(), Common::Base::F_10)); + myScanlineCount->setText(Common::Base::toString(tia.scanlines(), Common::Base::F_10), + tia.scanlines() != oldTia.info[4]); myScanlineCountLast->setText( - Common::Base::toString(tia.scanlinesLastFrame(), Common::Base::F_10)); - myScanlineCycles->setText(Common::Base::toString(clk/3, Common::Base::F_10)); - myPixelPosition->setText(Common::Base::toString(clk-68, Common::Base::F_10)); - myColorClocks->setText(Common::Base::toString(clk, Common::Base::F_10)); + Common::Base::toString(tia.scanlinesLastFrame(), Common::Base::F_10), + tia.scanlinesLastFrame() != oldTia.info[5]); + myScanlineCycles->setText(Common::Base::toString(clk/3, Common::Base::F_10), + clk != oldTia.info[6]); + myPixelPosition->setText(Common::Base::toString(clk-68, Common::Base::F_10), + clk != oldTia.info[6]); + myColorClocks->setText(Common::Base::toString(clk, Common::Base::F_10), + clk != oldTia.info[6]); } diff --git a/src/gui/Widget.cxx b/src/gui/Widget.cxx index 274b47346..3f963c08c 100644 --- a/src/gui/Widget.cxx +++ b/src/gui/Widget.cxx @@ -544,6 +544,7 @@ CheckboxWidget::CheckboxWidget(GuiObject* boss, const GUI::Font& font, _state(false), _holdFocus(true), _drawBox(true), + _changed(false), _fillColor(kColor), _boxY(0), _textY(0) @@ -632,13 +633,14 @@ void CheckboxWidget::setFill(FillType type) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void CheckboxWidget::setState(bool state) +void CheckboxWidget::setState(bool state, bool changed) { if(_state != state) { _state = state; setDirty(); } + _changed = changed; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -651,14 +653,14 @@ void CheckboxWidget::drawWidget(bool hilite) if(_drawBox) s.box(_x, _y + _boxY, 14, 14, kColor, kShadowColor); // Do we draw a square or cross? - s.fillRect(_x + 2, _y + _boxY + 2, 10, 10, isEnabled() ? _bgcolor : kColor); + s.fillRect(_x + 2, _y + _boxY + 2, 10, 10, _changed ? kDbgChangedColor : isEnabled() ? _bgcolor : kColor); if(_state) s.drawBitmap(_img, _x + 3, _y + _boxY + 3, isEnabled() ? kCheckColor : kShadowColor); #else if(_drawBox) s.frameRect(_x, _y + _boxY, 14, 14, hilite ? kScrollColorHi : kShadowColor); // Do we draw a square or cross? - s.fillRect(_x + 1, _y + _boxY + 1, 12, 12, isEnabled() ? _bgcolor : kColor); + s.fillRect(_x + 1, _y + _boxY + 1, 12, 12, _changed ? kDbgChangedColor : isEnabled() ? _bgcolor : kColor); if(_state) s.drawBitmap(_img, _x + 2, _y + _boxY + 2, isEnabled() ? hilite ? kScrollColorHi : kCheckColor diff --git a/src/gui/Widget.hxx b/src/gui/Widget.hxx index 047cebe01..b7430567a 100644 --- a/src/gui/Widget.hxx +++ b/src/gui/Widget.hxx @@ -263,7 +263,7 @@ class CheckboxWidget : public ButtonWidget void setEditable(bool editable); void setFill(FillType type); - void setState(bool state); + void setState(bool state, bool changed = false); void toggleState() { setState(!_state); } bool getState() const { return _state; } @@ -280,6 +280,7 @@ class CheckboxWidget : public ButtonWidget bool _state; bool _holdFocus; bool _drawBox; + bool _changed; uInt32* _img; uInt32 _fillColor; From ad78fbaa077b9d7b23653188806c7d81b89384a8 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Tue, 19 Dec 2017 22:22:11 -0330 Subject: [PATCH 111/156] Updated ROM properties up to 'E'. --- src/emucore/DefProps.hxx | 81 ++++++++++++++-------------- src/emucore/stella.pro | 112 +++++++++++++++++++++------------------ 2 files changed, 102 insertions(+), 91 deletions(-) diff --git a/src/emucore/DefProps.hxx b/src/emucore/DefProps.hxx index ce9836551..8ffb4c570 100644 --- a/src/emucore/DefProps.hxx +++ b/src/emucore/DefProps.hxx @@ -25,7 +25,7 @@ regenerated and the application recompiled. */ -#define DEF_PROPS_SIZE 3314 +#define DEF_PROPS_SIZE 3315 static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "000509d1ed2b8d30a9d94be1b3b5febb", "Greg Zumwalt", "", "Jungle Jane (2003) (Greg Zumwalt) (Hack)", "Hack of Pitfall!", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -66,7 +66,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "02cee0b140d2f1a1efcfb1d482a5c392", "Atari, Ed Logg, Carol Shaw - Sears", "CX2639 - 49-75162", "Othello (1981) (Atari) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "02dcba28c614fec7ca25955327128abb", "Andrew Wallace", "", "Laseresal 2002 (PAL) (PD) [a]", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "02e3f4ba156fb578bef7d7a0bf3400c1", "", "", "Booster (Junkosoft) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "033e21521e0bf4e54e8816873943406d", "20th Century Fox Video Games, Dan Thompson", "11020", "Earth Dies Screaming, The (1983) (20th Century Fox)", "The Day the Earth Stood Still", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "033e21521e0bf4e54e8816873943406d", "20th Century Fox Video Games - Sirius Software, Dan Thompson", "11020", "Earth Dies Screaming, The (1983) (20th Century Fox)", "The Day the Earth Stood Still", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "034c1434280b0f2c9f229777d790d1e1", "Telegames", "5665 A016", "Baseball (1988) (Telegames) (PAL)", "AKA Super Challenge Baseball", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0375f589f7da06d2d2be532e0d4d4b94", "", "", "Push (V0.04) (2001) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0383dc02cb82302da3d155fd108bfe3a", "AtariAge, Chris Spry", "CX26200", "Princess Rescue (2013) (Sprybug) (PAL60)", "Compatible with Genesis controller", "Homebrew", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "YES", "" }, @@ -187,7 +187,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "0c0392db94a20e4d006d885abbe60d8e", "", "", "Dodge Demo 3 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0c35806ff0019a270a7acae68de89d28", "Froggo", "FG1003", "Task Force (1987) (Froggo)", "AKA Gangster Alley", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0c48e820301251fbb6bcdc89bd3555d9", "Atari, Andrew Fuchs", "CX26120", "Stargate (1984) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "0c54811cf3b1f1573c9164d5f19eca65", "Activision, David Crane - Ariola", "EAG-001, PAG-001, EAG-001-04B, EAG-001-04I - 711 001-715", "Dragster (1980) (Activision) (PAL)", "AKA Dragster Rennen", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "0c54811cf3b1f1573c9164d5f19eca65", "Activision, David Crane - Ariola", "EAG-001, PAG-001, EAG-001-04B, EAG-001-04I - 711 001-715", "Dragster (1980) (Activision) (PAL)", "AKA Dragster Rennen, Drag Strip", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0c7926d660f903a2d6910c254660c32c", "Atari, Larry Kaplan", "CX2602, CX2602P", "Air-Sea Battle (1977) (Atari) (PAL)", "AKA Anti-Aircraft", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, { "0c7bd935d9a7f2522155e48315f44fa0", "Carrere Video, Jeff Corsiglia, Paul Allen Newell - Teldec", "USC1009", "Infernal Tower (1983) (Carrere Video) (PAL)", "AKA Towering Inferno", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "YES", "" }, { "0c80751f6f7a3b370cc9e9f39ad533a7", "Atari, Carla Meninsky", "CX2610", "Warlords (1981) (Atari) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "01 50", "", "", "", "", "" }, @@ -380,7 +380,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "1b0f3d7af668eeea38ddd6182d8f48fb", "Jone Yuan Telephonic Enterprise Co", "", "Cosmic Swarm (Jone Yuan) (4K)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "YES", "" }, { "1b1daaa9aa5cded3d633bfcbeb06479c", "", "", "Ship Demo (V 1502) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1b22a3d79ddd79335b69c94dd9b3e44e", "Tron", "", "Moon Patrol (Tron)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "1b4b06c2a14ed3ee73b7d0fd61b6aaf5", "Arcadia Corporation, Stephen Harland Landrum", "6 AR-4400", "Excalibur (Dragonstomper Beta) (1982) (Arcadia) (Prototype) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "1b4b06c2a14ed3ee73b7d0fd61b6aaf5", "Arcadia Corporation, Stephen H. Landrum", "AR-4400", "Excalibur (Dragonstomper Beta) (1982) (Arcadia) (Prototype) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1b8c3c0bfb815b2a1010bba95998b66e", "Telegames", "", "Frogs and Flies (1988) (Telegames) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1b8d35d93697450ea26ebf7ff17bd4d1", "Quelle", "176.764 9 - 781644", "Marineflieger (1983) (Quelle) (PAL)", "AKA Seahawk", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1bb91bae919ddbd655fa25c54ea6f532", "Suntek", "SS-026", "Treasure Island (Suntek) (PAL)", "AKA Treasure Discovery", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -428,7 +428,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "1f562b89d081e36d58e6fc943512ec05", "", "", "Hangman Man Biglist2 (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1f5a2927a0b2faf87540b01d9d7d7fd1", "Pet Boat", "", "Tennis (Pet Boat) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1f60e48ad98b659a05ce0c1a8e999ad9", "", "", "Mondo Pong V2 (Piero Cavina) (PD)", "Uses the Paddle Controllers", "New Release", "", "", "", "", "", "", "PADDLES_IAXDR", "", "", "01", "", "", "", "", "" }, - { "1f773a94d919b2a3c647172bbb97f6b4", "Atari, Jerome Domurat, Peter C. Niday", "CX26115", "Dumbo's Flying Circus (07-11-1983) (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "1f773a94d919b2a3c647172bbb97f6b4", "Atari, Jerome Domurat, Peter C. Niday", "CX26115", "Dumbo's Flying Circus (07-11-1983) (Atari) (Prototype) (PAL)", "AKA Dumbo Flies Home", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1fa58679d4a39052bd9db059e8cda4ad", "Imagic, Dan Oliver", "720118-1A, 03208", "Laser Gates (1983) (Imagic)", "AKA Innerspace", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1fa7a42c2c7d6b7a0c6a05d38c7508f4", "Coleco - Individeo, Ed Temple", "", "Cabbage Patch Kids (09-04-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1fa86282403fa35d103ab88a9d603c31", "SpiceWare - Darrell Spice Jr.", "", "Stay Frosty (SpiceWare) (PAL60)", "Part of Stella's Stocking 2007 Xmas compilation", "Homebrew", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "YES", "" }, @@ -441,7 +441,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "203abb713c00b0884206dcc656caa48f", "Imagic, Bob Smith", "720114-1A, 03207, IZ-001-04", "Moonsweeper (1983) (Imagic)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "203b1efc6101d4b9d83bb6cc1c71f67f", "Quelle", "685.996 1", "Teller-Jonglieren! (1983) (Quelle) (PAL)", "AKA Dancing Plate", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "205070b6a0d454961dd9196a8e81d877", "", "", "Hangman Monkey Biglist2 (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "2091af29b4e7b86914d79d9aaa4cbd20", "CBS Electronics, Harley H. Puthuff Jr.", "4L1802", "Donkey Kong Junior (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "251", "", "" }, + { "2091af29b4e7b86914d79d9aaa4cbd20", "CBS Electronics - Woodside Design Associates, Harley H. Puthuff Jr.", "4L1802", "Donkey Kong Junior (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "251", "", "" }, { "20ae62fb69c6cc6e8098cca8cd080487", "Zirok", "", "Tennis (Zirok)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "20d4457ba22517253fcb62967af11b37", "Atari, Eric Manghise, Joseph Tung", "CX2640", "RealSports Baseball (1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "20dca534b997bf607d658e77fbb3c0ee", "Mythicon, Bill Bryner, Bruce de Graaf", "MA1002", "Fire Fly (1983) (Mythicon)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -579,7 +579,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "2ac3a08cfbf1942ba169c3e9e6c47e09", "Activision, Dan Kitchen", "EAK-046-04B", "Fighter Pilot (1988) (Activision) (PAL)", "AKA Tomcat - The F-14 Fighter Simulator", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2ae700c9dba843a68dfdca40d7d86bd6", "TechnoVision - Thomas Jentzsch", "", "Pharaoh's Curse (Thomas Jentzsch)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "40", "240", "YES", "" }, { "2aeedcc6eb1602efb77161b0cef832ab", "SOLID Corp. (D. Scott Williamson)", "CX2655-025", "Star Castle 2600 (SolidCorp) [025]", "http://starcastle2600.blogspot.com/p/star-castle-2600-story.html", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "2b1589c7e1f394ae6a1c046944f06688", "Carrere Video, Todd Marshall, Wes Trager, Henry Will IV - Teldec", "USC2003", "Eggomania (1983) (Carrere Video) (PAL)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 60", "", "", "", "", "" }, + { "2b1589c7e1f394ae6a1c046944f06688", "Carrere Video - JWDA, Todd Marshall, Robin McDaniel, Wes Trager, Henry Will IV - Teldec - Prism", "USC2003", "Eggomania (1983) (Carrere Video) (PAL)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 60", "", "", "", "", "" }, { "2b27eb194e13f3b38d23c879cc1e3abf", "Quelle", "402.272 9", "Super-Ferrari (1983) (Quelle) (PAL)", "AKA Enduro", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2b42da79a682ed6e2d735facbf70107e", "", "", "DKjr Improved (Hack)", "Hack of Donkey Kong Jr.", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2b430c00dc79e495762ac59b2f9b4fcd", "Activision, David Crane", "AX-018, AX-018-04", "Pitfall! (1982) (Activision) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -616,7 +616,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "2d6da0eb85eabc93270e5bb8a466ca51", "", "", "Sprite Demo 7 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2d76c5d1aad506442b9e9fb67765e051", "Games by Apollo - Larry Minor, Ernie Runyon, Ed Salvo", "AP-2004", "Lost Luggage (1981) (Apollo) [no opening scene]", "AKA Airport Mayhem", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2d9e5d8d083b6367eda880e80dfdfaeb", "Selchow & Righter - QDI, Mike Montana, Rich Montana", "87", "Glib (1983) (Selchow & Righter)", "Enduro (Dactari - Milmar)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "2d9e65959808a6098c16c82a59c9d9dc", "Arcadia Corporation, Stephen Harland Landrum", "AR-4400", "Dragonstomper (1 of 3) (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "2d9e65959808a6098c16c82a59c9d9dc", "Starpath Corporation, Stephen H. Landrum", "AR-4400", "Dragonstomper (1 of 3) (1982) (Starpath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2dbc92688f9ba92a7e086d62be9df79d", "", "", "How to Draw a Playfield (1997) (Jim Crawford) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2dbdca3058035d2b40c734dcf06a86d9", "Thomas Jentzsch", "", "Asteroids DC+ (Thomas Jentzsch) (Hack)", "Uses the Joystick (left) or Steering (right) Controller", "Hack", "", "", "", "", "", "", "", "DRIVING", "", "58", "", "", "", "YES", "" }, { "2dcf9ce486393cd36ca0928cd53b96cb", "Atari - GCC, Mike Feinstein, John Allred", "CX2688, CX2688P", "Jungle Hunt (1983) (Atari) (PAL) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -631,7 +631,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "2e7e9c6dcfcceaffc6fa73f0d08a402a", "CCE", "C-818", "Star Voyager (1983) (CCE) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2e82a1628ef6c735c0ab8fa92927e9b0", "Atari, Jerome Domurat, Peter C. Niday, Robert Vieira", "CX26109", "Sorcerer's Apprentice (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2e842c2ee22e9dad9df16eed091315c4", "HES", "701-157", "2 Pak Special - Motocross, Boom Bang (1990) (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "2eaf8fa9e9fdf1fcfc896926a4bdbf85", "Arcadia Corporation, Stephen Harland Landrum", "6 AR-4400", "Excalibur Version 39 (Dragonstomper Beta) (1982) (Arcadia) (Prototype)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "2eaf8fa9e9fdf1fcfc896926a4bdbf85", "Arcadia Corporation, Stephen H. Landrum", "AR-4400", "Excalibur Version 39 (Dragonstomper Beta) (1982) (Arcadia) (Prototype)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2ec6b045cfd7bc52d9cdfd1b1447d1e5", "Activision, David Crane - Ariola", "EAG-009, PAG-009 - 711 009-720", "Freeway (1981) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2eda6a49a49fcb2b674ea9e160b6a617", "Kyle Pittman", "", "Rambo in Afghanistan (Kyle Pittman) (Hack)", "Hack of Riddle of the Sphinx", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2ef36341d1bf42e02c7ea2f71e024982", "", "", "Space Invaders (Explosion Hack)", "Hack of Space Invaders (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -673,7 +673,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "31df1c50c4351e144c9a378adb8c10ba", "Quelle", "687.463 0", "Die Ratte und die Karotten (1983) (Quelle) (PAL)", "AKA Gopher", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "31e518debba46df6226b535fa8bd2543", "Atari, Douglas 'Solaris' Neubauer", "CX26134", "Last Starfighter (1984) (Atari) (Prototype)", "Solaris Beta", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "31f4692ee2ca07a7ce1f7a6a1dab4ac9", "Atari, Alan Miller", "CX2642", "Game of Concentration (1980) (Atari) (4K)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, - { "31fcbce1cfa6ec9f5b6de318e1f57647", "Atari, Jerome Domurat, Peter C. Niday", "CX26115", "Dumbo's Flying Circus (1983) (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "31fcbce1cfa6ec9f5b6de318e1f57647", "Atari, Jerome Domurat, Peter C. Niday", "CX26115", "Dumbo's Flying Circus (1983) (Atari) (Prototype) (PAL)", "AKA Dumbo Flies Home", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "32199271dc980eb31a2cc96e10a9e244", "", "", "Radial Pong - Version 12 (Jeffry Johnston) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "321c3451129357af42a375d12afd4450", "Atari", "CX26177", "Ikari Warriors (1989) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "32244e55ce6ec6bfbd763f33384bdc2e", "Activision, Steve Cartwright", "AX-027", "Plaque Attack (1983) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -729,7 +729,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "360ba640f6810ec902b01a09cc8ab556", "Atari, Jerome Domurat, Steve Woita", "CX2699", "Taz (06-15-1983) (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "360c0dcb11506e73bd0b77207c81bc62", "Digitel", "", "Enduro (1983) (Digitel)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3619786f6a32efc1e4a262d5aca8a070", "Atari, John Dunn - Sears", "CX2631 - 49-75152", "Superman (1979) (Atari) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "3624e5568368929fabb55d7f9df1022e", "Activision, Dan Kitchen", "EAK-050-04", "Double Dragon (1989) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "3624e5568368929fabb55d7f9df1022e", "Activision - Imagineering, Dan Kitchen", "EAK-050-04", "Double Dragon (1989) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "36306070f0c90a72461551a7a4f3a209", "U.S. Games Corporation, Roger Booth, Sylvia Day, Ron Dubren, Todd Marshall, Wes Trager, Henry Will IV", "VC1007", "Name This Game (1982) (U.S. Games)", "AKA Octopussy", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "36547bc6faa5132b87504e18d088e1d7", "", "", "Cosmic Swarm (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "367411b78119299234772c08df10e134", "Atari", "CX26163P", "Skiing (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -763,7 +763,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "386ff28ac5e254ba1b1bac6916bcc93a", "Arcadia Corporation, Scott Nelson", "AR-4300", "Fireball (1982) (Arcadia)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "01", "", "", "", "", "" }, { "3882224adbd0ca7c748b2a1c9b87263e", "Atari, Tod Frye", "CX2657", "SwordQuest - FireWorld (1982) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3889351c6c2100b9f3aef817a7e17a7a", "CCE", "", "Dolphin (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "3897744dd3c756ea4b1542e5e181e02a", "Atari, Jerome Domurat, Peter C. Niday", "CX26115", "Dumbo's Flying Circus (05-05-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "3897744dd3c756ea4b1542e5e181e02a", "Atari, Jerome Domurat, Peter C. Niday", "CX26115", "Dumbo's Flying Circus (05-05-1983) (Atari) (Prototype)", "AKA Dumbo Flies Home", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "38bd172da8b2a3a176e517c213fcd5a6", "Atari", "MA017600", "Diagnostic Test Cartridge 2.6 (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "38c362dcd5cad5a62e73ae52631bd9d8", "Jake Patterson", "", "Baubles (14-11-2001) (Jake Patterson) (PD)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "38cf93eacfb2fa9a2c5e39059ff35a74", "Greg Zumwalt", "", "WacMan (2003) (Greg Zumwalt) (Hack)", "Hack of Ms. Pac-Man", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -787,12 +787,12 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "3a51a6860848e36e6d06ffe01b71fb13", "Retroactive", "", "Qb (2.07) (Retroactive) (NTSC)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "3a526e6a1f9fe918af0f2ce997dfea73", "CBS Electronics, Dan Kitchen, Garry Kitchen", "4L1700, 4L1701, 4L1702, 4L1802, 4L2274", "Donkey Kong (1982) (CBS Electronics) (PAL) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3a53963f053b22599db6ac9686f7722f", "", "", "Word Zapper (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "3a771876e4b61d42e3a3892ad885d889", "Atari, Bill Aspromonte, Andrew Fuchs", "CX26120", "Defender II (1988) (Atari)", "AKA Stargate", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "3a771876e4b61d42e3a3892ad885d889", "Atari, Bill Aspromonte, Andrew Fuchs", "CX26120", "Defender II (1987) (Atari)", "AKA Stargate", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3aad0ef62885736a5b8c6ccac0dbe00c", "Dynacom", "", "Atlantis (1983) (Dynacom)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3ab5d138e26d88c8190e7cc629a89493", "", "", "Phased Color Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "3ac6c50a8e62d4ce71595134cbd8035e", "Absolute Entertainment, Dan Kitchen", "AK-046-04", "Tomcat (1988) (Absolute)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3ad3dc799211ccd424d7c6d454401436", "Probe 2000 - North American Philips Consumer Electronics Corporation", "", "Power Lords (1983) (Probe) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "3ad58b53a1e972396890bd86c735e78d", "Arcadia Corporation, Stephen Harland Landrum", "6 AR-4400", "Excalibur Version 36 (Dragonstomper Beta) (1982) (Arcadia) (Prototype)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "3ad58b53a1e972396890bd86c735e78d", "Arcadia Corporation, Stephen H. Landrum", "AR-4400", "Excalibur Version 36 (Dragonstomper Beta) (1982) (Arcadia) (Prototype)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3b040ed7d1ef8acb4efdeebebdaa2052", "Tigervision", "7-008", "Miner 2049er (1982) (Tigervision) [fixed]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "214", "", "" }, { "3b097a7ed5bd2a84dc3d3ed361e9c31c", "", "", "Interleaved ChronoColour Demo (PAL) (05-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3b10106836565e5db28c7823c0898fbb", "Xonox - Beck-Tech", "6210, 06002, 06004, 99002", "Ghost Manor (1983) (Xonox) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, @@ -904,7 +904,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "4279485e922b34f127a88904b31ce9fa", "", "", "Enduro (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "428b2d36f5d716765460701f7016ac91", "Andrew Wallace", "", "Brooni (2001) (Andrew Wallace) (PD)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "42ae81ae8ac51e5c238639f9f77d91ae", "", "", "Multi-Sprite Demo 2 (Piero Cavina) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "42b2c3b4545f1499a083cfbc4a3b7640", "U.S. Games Corporation, Todd Marshall, Wes Trager, Henry Will IV", "VC2003", "Eggomania (1982) (U.S. Games)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 60", "", "", "", "", "" }, + { "42b2c3b4545f1499a083cfbc4a3b7640", "U.S. Games Corporation - JWDA, Todd Marshall, Robin McDaniel, Wes Trager, Henry Will IV", "VC2003", "Eggomania (1982) (U.S. Games)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 60", "", "26", "", "", "" }, { "42b3ab3cf661929bdc77b621a8c37574", "Robby", "", "Volleyball (Robby)", "AKA RealSports Volleyball", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "42b5e3a35b032f033809afb0ea28802d", "Atari, Mimi Nyden, Scott Smith, Robert Vieira", "CX26127", "Gremlins (03-12-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "42cdd6a9e42a3639e190722b8ea3fc51", "Activision, Alan Miller", "AG-007, CAG-007", "Tennis (1981) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1092,7 +1092,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "517592e6e0c71731019c0cebc2ce044f", "Parker Brothers, Todd Marshall", "PB5550", "Q-bert's Qubes (1984) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "214", "", "" }, { "517923e655755086a3b72c0b17b430e6", "Tron", "", "Super Tennis (Tron)", "AKA RealSports Tennis", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5188fee071d3c5ef0d66fb45c123e4a5", "Gameworld", "133-001", "Encounter at L-5 (1983) (Gameworld) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 50", "", "", "", "", "" }, - { "519f007c0e14fb90208dbb5199dfb604", "Amiga", "", "Depth Charge (1983) (Amiga) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "519f007c0e14fb90208dbb5199dfb604", "Amiga - Video Soft", "", "Depth Charge (1983) (Amiga) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "51de328e79d919d7234cf19c1cd77fbc", "Atari, Mark R. Hahn", "CX2678", "Dukes of Hazzard (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "51e390424f20e468d2b480030ce95d7b", "Video Game Program", "", "Fire Bird (Video Game Program) (PAL)", "AKA Phoenix", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "51f15b39d9f502c2361b6ba6a73464d4", "", "", "Amanda Invaders (PD) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1207,7 +1207,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "5b574faa56836da0866ba32ae32547f2", "", "", "Tomb Raider 2600 [REV 03] (Montezuma's Revenge Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5b5d04887922b430de0b7b2a21f9cd25", "", "", "Omega Race (Genesis)", "Genesis controller (B is thrust, C is fire)", "Hack of Omega Race", "", "", "", "", "", "", "GENESIS", "", "", "", "", "", "", "", "" }, { "5b6f5bcbbde42fc77d0bdb3146693565", "", "", "Seaquest (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5b7ea6aa6b35dc947c65ce665fde624b", "Arcadia Corporation, Stephen Harland Landrum", "AR-4400", "Dragonstomper (2 of 3) (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5b7ea6aa6b35dc947c65ce665fde624b", "Starpath Corporation, Stephen H. Landrum", "AR-4400", "Dragonstomper (2 of 3) (1982) (Starpath)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5b85e987e2b1618769d97ba9182333d0", "Atari - GCC, Mike Feinstein, Brad Rice", "CX2681", "Battlezone (05-12-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5b92a93b23523ff16e2789b820e2a4c5", "Activision, Dan Kitchen", "AG-039-04", "Kung-Fu Master (1987) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5b98e0536c3f60547dd708ae22adb04b", "Ben Hudman", "", "Donkey Kong Gingerbread Man (Ben Hudman) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1265,7 +1265,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "5f69453a69f21dc49697a80d2e933491", "", "", "Star Fire - Reduced Flickering (06-10-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5f708ca39627697e859d1c53f8d8d7d2", "Atari, Warren Robinett - Sears", "CX2606 - 6-99825, 49-75112", "Slot Racers (1978) (Atari) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5f73e7175474c1c22fb8030c3158e9b3", "Atari, Nick 'Sandy Maiwald' Turner", "CX2665", "Frog Pond (1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5f786b67e05fb9985b77d4beb35e06ee", "Atari, Bill Aspromonte, Andrew Fuchs", "CX26120", "Defender II (1988) (Atari) (PAL)", "AKA Stargate", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5f786b67e05fb9985b77d4beb35e06ee", "Atari, Bill Aspromonte, Andrew Fuchs", "CX26120", "Defender II (1987) (Atari) (PAL)", "AKA Stargate", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5f7ae9a7f8d79a3b37e8fc841f65643a", "Atari, Jerome Domurat, Peter C. Niday, Robert Vieira", "CX26109", "Sorcerer's Apprentice (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5f7de62a408b9de3a1168898298fd31d", "", "", "Super Cobra (Genesis)", "Genesis controller (B is bomb, C is laser)", "Hack of Super Cobra", "", "", "", "", "", "", "GENESIS", "", "", "", "", "", "", "", "" }, { "5f950a2d1eb331a1276819520705df94", "20th Century Fox Video Games", "", "Unknown 20th Century Fox Game (1983) (20th Century Fox) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -1307,6 +1307,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "62899430338e0538ee93397867d85957", "Gameworld", "133-004", "Airlock (1983) (Gameworld) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "62921652f6634eb1a0940ed5489c7e18", "", "", "SCSIcide (V1.09) (2001) (Joe Grand)", "", "", "", "", "", "", "", "", "PADDLES_IAXDR", "", "", "AUTO 65", "", "", "", "", "" }, { "62992392ea651a16aa724a92e4596ed6", "Eric Mooney", "", "Invaders by Erik Mooney (Beta) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "62d1f50219edf9a429a9f004c19f31b3", "JWDA, Todd Marshall", "", "Euro Gen (02-01-83) (JWDA) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "62f74a2736841191135514422b20382d", "", "", "Pharaoh's Curse (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "PAL60", "20", "225", "YES", "" }, { "62ffd175cac3f781ef6e4870136a2520", "", "", "2600 Digital Clock (V x.xx) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "63166867f75869a3592b7a94ea62d147", "", "", "Indy 500 (Hack) [a1]", "Hack of Indy 500", "Hack", "", "", "", "", "", "", "DRIVING", "DRIVING", "", "", "", "", "", "", "" }, @@ -1368,7 +1369,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "66b92ede655b73b402ecd1f4d8cd9c50", "Activision, John Van Ryzin - Ariola", "EAZ-036-04, EAZ-036-04B, EAZ-036-04I - 711 036-720", "H.E.R.O. (1984) (Activision) (PAL) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "66bc1bef269ea59033928bac2d1d81e6", "Arcadia Corporation, Scott Nelson", "AR-4300", "Fireball (Preview) (1982) (Arcadia)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "01", "", "", "", "", "" }, { "66c2380c71709efa7b166621e5bb4558", "Parker Brothers, Dave Engman, Dawn Stockbridge", "931509", "Tutankham (1983) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "66c4e0298d4120df333bc2f3e163657e", "Arcadia Corporation, Stephen Harland Landrum", "AR-4400", "Dragonstomper (2 of 3) (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "66c4e0298d4120df333bc2f3e163657e", "Starpath Corporation, Stephen H. Landrum", "AR-4400", "Dragonstomper (2 of 3) (1982) (Starpath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "66fcf7643d554f5e15d4d06bab59fe70", "Coleco - Individeo, Ed Temple", "", "Cabbage Patch Kids (09-13-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6706a00f9635508cfeda20639156e66e", "Atari, Jerome Domurat, Michael Sierchio", "CX2667", "RealSports Soccer (1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "672012d40336b403edea4a98ce70c76d", "", "", "Spider Kong (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1430,7 +1431,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "6b01a519b413f8cfa2f399f4d2841b42", "", "", "Aphex Invaders (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6b1fc959e28bd71aed7b89014574bdc2", "Bit Corporation", "PG203", "Phantom Tank (1982) (BitCorp) (PAL)", "AKA Phantom-Panzer", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6b4eb5b3df80995b8d9117cb7e9aeb3c", "Gameworld, J. Ray Dettling", "133-006", "Journey Escape (1983) (Gameworld) (PAL)", "AKA Rock 'n' Roll Escape", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "6b683be69f92958abe0e2a9945157ad5", "U.S. Games Corporation, Paul Allen Newell, Steve Sidley, Tom Sloper", "VC2007", "Entombed (1982) (U.S. Games)", "Released as Name That Game for a contest (winning name was Entombed)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "6b683be69f92958abe0e2a9945157ad5", "U.S. Games Corporation - Western Technologies, Jeff Corsiglia, Paul Allen Newell, Steven B. Sidley, Tom Sloper", "VC2007", "Entombed (1983) (U.S. Games)", "Released as Name That Game for a contest (winning name was Entombed)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "6b6ca32228ae352b4267e4bd2cddf10c", "", "", "Pac-Man 4 (Pac-Man Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "33", "", "", "" }, { "6b71f20c857574b732e7a8e840bd3cb2", "", "", "Frostbite (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6b72b691ea86f61438ed0d84c4d711de", "", "", "Fishing Derby (Unknown) (PAL) (4K) (Hack)", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1587,7 +1588,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "76ee917d817ef9a654bc4783e0273ac4", "Quelle", "311377", "Fox & Goat (Double-Game Package) (1983) (Quelle) (PAL)", "AKA Nuts", "", "", "", "", "", "", "", "", "", "", "", "", "45", "256", "", "" }, { "76f53abbbf39a0063f24036d6ee0968a", "M Network, David Akers, Joe 'Ferreira' King, Patricia Lewis Du Long, Jeff Ratcliff - INTV", "MT7045", "Bump 'n' Jump (1983) (M Network)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "76f66ce3b83d7a104a899b4b3354a2f2", "UA Limited", "", "Cat Trax (1983) (UA Limited) (1)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "77057d9d14b99e465ea9e29783af0ae3", "Activision, David Crane", "AG-001", "Dragster (1980) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "20", "", "", "" }, + { "77057d9d14b99e465ea9e29783af0ae3", "Activision, David Crane", "AG-001", "Dragster (1980) (Activision)", "AKA Drag Strip", "", "", "", "", "", "", "", "", "", "", "", "", "20", "", "", "" }, { "7732e4e4cc2644f163d6650ddcc9d9df", "HES", "771-333", "2 Pak Special - Challenge, Surfing (1990) (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7778ac65d775a079f537e97cbdad541c", "", "", "Spider Fighter (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "777aece98d7373998ffb8bc0b5eff1a2", "", "", "2600 Collison Demo 2 (Piero Cavina) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1603,7 +1604,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "787ebc2609a31eb5c57c4a18837d1aee", "Prescott", "", "Vault Assault (19xx) (Prescott)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "78821ef76ebc3934850d1bc1b9e4f4b0", "HES - Activision", "542", "Hot Action Pak - Ghostbusters, Tennis, Plaque Attack (1990) (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "78963290052fd17c6c7998305ab3a6a0", "", "", "Push (V0.08) (2001) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "78b84cfb1c57b0488d674d2374e656e6", "Arcadia Corporation, Stephen Harland Landrum", "AR-4400", "Dragonstomper (1 of 3) (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "78b84cfb1c57b0488d674d2374e656e6", "Starpath Corporation, Stephen H. Landrum", "AR-4400", "Dragonstomper (1 of 3) (1982) (Starpath)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "78c2de58e42cd1faac2ea7df783eaeb3", "", "", "Fu Kung! (V0.07) (25-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "79004f84bdeee78d142e445057883169", "CCE", "C-830", "Planet Patrol (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "791bc8aceb6b0f4d9990d6062b30adfa", "Activision, David Crane - Ariola", "EAX-018, EAX-018-04B, EAX-018-04I - 711 018-725", "Pitfall! (1982) (Activision) (PAL)", "Abenteuer im Urwald (Jungle Runner)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1677,8 +1678,8 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "7dc03a1f56d0e6a8aae3e3e50d654a08", "", "", "Hozer Video Demo (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7dcbfd2acc013e817f011309c7504daa", "Arcadia Corporation, Dennis Caswell", "AR-4000, AR-4100", "Phaser Patrol (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "7dd9c5284422f729066ab22a284c8283", "CCE", "C-833", "Target Practice (1983) (CCE) [a]", "AKA Carnival", "", "", "", "", "", "", "", "", "", "", "", "", "", "214", "", "" }, - { "7dfd100bda9abb0f3744361bc7112681", "Telesys, Don 'Donyo' Ruffcorn", "1006", "Demolition Herby (1983) (Telesys) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "7e2fe40a788e56765fe56a3576019968", "Activision, Dan Kitchen", "AK-050-04", "Double Dragon (1989) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "7dfd100bda9abb0f3744361bc7112681", "Telesys, Don Ruffcorn", "1006", "Demolition Herby (1983) (Telesys) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "7e2fe40a788e56765fe56a3576019968", "Activision - Imagineering, Dan Kitchen", "AK-050-04", "Double Dragon (1989) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7e464186ba384069582d9f0c141f7491", "PlayAround - J.H.M.", "206", "General Re-Treat (1982) (PlayAround) (PAL)", "AKA Custer's Revenge", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7e4783a59972ae2cd8384f231757ea0b", "Atari - Imagineering, Dan Kichen", "CX26139P", "Crossbow (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7e51a58de2c0db7d33715f518893b0db", "CBS Electronics, E.F. Dreyer, Ed Salvo", "4L 2738 0000", "Mountain King (1983) (CBS Electronics) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -1848,11 +1849,11 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "8aad33da907bed78b76b87fceaa838c1", "Atari, Larry Kaplan", "CX26163P", "Air-Sea Battle (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, { "8ac18076d01a6b63acf6e2cab4968940", "Atari, Dan Hitchens", "CX2685", "Gravitar (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8af58a9b90b25907da0251ec0facf3b8", "Jone Yuan Telephonic Enterprise Co", "", "Cosmic Swarm (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "8b04e9d132b8e30d447acaa6bd049c32", "Arcadia Corporation, Stephen Harland Landrum", "AR-4400", "Dragonstomper (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "8b04e9d132b8e30d447acaa6bd049c32", "Starpath Corporation, Stephen H. Landrum", "AR-4400", "Dragonstomper (1982) (Starpath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8b40a9ca1cfcd14822e2547eaa9df5c1", "Parker Brothers, Dave Hampton, Tom Sloper", "931517", "Q-bert (1983) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8b504b417c8626167a7e02f44229f0e7", "Retroactive", "", "Qb (V1.00) (NTSC) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "8b556c3d9ca8e5e6e665bd759b93ffae", "", "", "Synthcart (2002) (Paul Slocum) (PAL) [!]", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "YES", "" }, - { "8b5b1e3a434ebbdc2c2a49dc68f46360", "CBS Electronics, Dan Kitchen, Garry Kitchen", "4L1700, 4L1701, 4L1702, 4L1802, 4L2274", "Donkey Kong (1982) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "8b5b1e3a434ebbdc2c2a49dc68f46360", "CBS Electronics - Woodside Design Associates - Imaginative Systems Software, Dan Kitchen, Garry Kitchen", "4L1700, 4L1701, 4L1702, 4L1802, 4L2274", "Donkey Kong (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8b7ca29a55432f886cee3d452fb00481", "Arcadia Corporation, Stephen Harland Landrum, Jon Leupp", "AR-4201", "Sword of Saros (1983) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8b8152d6081f31365406cb716bd95567", "Atari", "CX2626, CX2626P", "Miniature Golf (1979) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8b8789c6669a4cee86c579a65332f852", "Digivision", "", "Plaque Attack (Digivision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1912,7 +1913,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "9072c142728a3a3d994956d03bfacba2", "Fabrizio Zavagli", "", "Crash Dive (Fabrizio Zavagli) (PAL60)", "NTSC Conversion", "Hack", "", "", "", "", "", "", "", "", "", "", "PAL60", "30", "", "", "" }, { "90b1799dddb8bf748ee286d22e609480", "", "", "Ship Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "90b647bfb6b18af35fcf613573ad2eec", "AtariAge (Chris Walton)", "", "Juno First (2009)", "AtariVox supported", "Homebrew", "", "", "", "", "", "", "", "ATARIVOX", "", "", "", "", "", "YES", "" }, - { "90ccf4f30a5ad8c801090b388ddd5613", "Arcadia Corporation, Stephen Harland Landrum", "AR-4400", "Dragonstomper (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "90ccf4f30a5ad8c801090b388ddd5613", "Starpath Corporation, Stephen H. Landrum", "AR-4400", "Dragonstomper (1982) (Starpath)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "90d77e966793754ab4312c47b42900b1", "Imagic, Brad Stewart", "720105-2A, IA3400P, EIX-005-04I", "Fire Fighter (1982) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "90f502cbf4438a95f69f848cef36eb64", "Digitel", "", "River Raid II (1985) (Digitel)", "AKA River Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "910dd9bf98cc5bc080943e5128b15bf5", "", "", "Gunfight 2600 - Improved AI (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2107,7 +2108,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "a1bcbe0bfe6570da2661fc4de2f74e8a", "Imagic - Advanced Program Technology, Rob Fulop", "", "Actionauts (Microbots) (1984-2008) (Imagic)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a1ca372388b6465a693e4626cc98b865", "Quelle", "176.543 7", "Der Vielfrass (1983) (Quelle) (PAL)", "AKA Fast Food", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a1ead9c181d67859aa93c44e40f1709c", "American Videogame - Dunhill Electronics, Darrell Wagner, Todd Clark Holm, John Simonds", "", "Tax Avoiders (1982) (American Videogame)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "a1f9159121142d42e63e6fb807d337aa", "Quelle", "700.223 1 - 781627", "Der moderne Ritter (1983) (Quelle) (PAL)", "AKA Fast Eddie", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "a1f9159121142d42e63e6fb807d337aa", "Quelle - Otto Versand", "700.223 1 - 781627", "Der moderne Ritter (1983) (Quelle) (PAL)", "AKA Fast Eddie", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a204cd4fb1944c86e800120706512a64", "Coleco", "2511", "Smurfs Save the Day (1983) (Coleco)", "Uses the Kid Vid Controller", "", "", "", "", "", "", "", "", "KIDVID", "", "", "", "", "", "", "" }, { "a20b7abbcdf90fbc29ac0fafa195bd12", "Quelle", "719.383 2 - 649635, 781393, 781784", "Motocross (1983) (Quelle) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a20d931a8fddcd6f6116ed21ff5c4832", "Apollo - Games by Apollo, Ed Salvo, Byron Parks", "AP-2003", "Racquetball (1981) (Apollo) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -2122,7 +2123,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "a2de0fc85548871279ed2a3c1325c13e", "George Veeder", "", "Cat and Mouse (George Veeder) (Hack)", "Hack of Pac-Man", "Hack", "", "", "", "", "", "", "", "", "", "", "", "32", "", "", "" }, { "a2eb84cfeed55acd7fece7fefdc83fbb", "", "", "Kool Aid Man (Fixed) (15-11-2002) (CT)", "HMOVE handling fixed in this version", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a2f296ea2d6d4b59979bac5dfbf4edf0", "", "", "Warring Worms (28-01-2002) (Billy Eno)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "a302b922a8dbec47743f28b7f91d4cd8", "Arcadia Corporation, Stephen Harland Landrum", "AR-4400", "Dragonstomper (Preview) (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "a302b922a8dbec47743f28b7f91d4cd8", "Starpath Corporation, Stephen H. Landrum", "AR-4400", "Dragonstomper (Preview) (1982) (Starpath)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a30ece6dc4787e474fbc4090512838dc", "Zellers", "", "Circus (Zellers)", "AKA Circus Atari", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a310494ad5ba2b5b221a30d7180a0336", "", "", "Demo Image Series #6 - Mario (19-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a336beac1f0a835614200ecd9c41fd70", "Atari, Christopher H. Omarzu, Robert Vieira", "CX26121", "Zoo Keeper Sounds (1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2274,13 +2275,13 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "aed82052f7589df05a3f417bb4e45f0c", "Atari, Warren Robinett - Sears", "CX2606 - 6-99825, 49-75112", "Slot Racers (1978) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "af6ab88d3d7c7417db2b3b3c70b0da0a", "Activision, Larry Kaplan, David Crane", "AG-010, AG-010-04", "Kaboom! (1981) (Activision) (4K)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "01 50", "", "", "", "", "" }, { "af6f3e9718bccfcd8afb421f96561a34", "Atari, Tod Frye", "CX2695", "Xevious (11-08-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "afb3bc45c6a82739cc82582127cd96e6", "Atari, John Howard Palevich", "CX26151, CX26151P", "Dungeon (11-22-1985) (Atari) (Prototype)", "Dark Chambers Beta", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "afb3bc45c6a82739cc82582127cd96e6", "Atari - Sculptured Software, Adam Clayton", "CX26151, CX26151P", "Dungeon (11-22-1985) (Atari) (Prototype)", "Dark Chambers Beta", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "afc194534c1b346609ef05eff6d3cef6", "Jone Yuan Telephonic Enterprise Co", "", "Boxing (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "afd2cf258d51ae4965ee21abba3627ab", "Atari - CCW, Christopher H. Omarzu", "CX26104", "Big Bird's Egg Catch (12-08-1982) (Atari) (Prototype)", "Uses the Keypad Controller", "Prototype", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "", "" }, { "afe4eefc7d885c277fc0649507fbcd84", "Atari", "CX26163P", "Ant Party (32 in 1) (1988) (Atari) (PAL)", "AKA Cosmic Swarm", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "afe776db50e3378cd6f29c7cdd79104a", "Thomas Jentzsch", "", "Bobby is Going Home (TJ)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "23", "245", "", "" }, { "afe88aae81d99e0947c0cfb687b16251", "Apollo - Games by Apollo", "AP-2006", "Infiltrate (1981) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "aff8cba0f2d2eb239953dd7116894a08", "Arcadia Corporation, Stephen Harland Landrum", "AR-4400", "Dragonstomper (3 of 3) (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "aff8cba0f2d2eb239953dd7116894a08", "Starpath Corporation, Stephen H. Landrum", "AR-4400", "Dragonstomper (3 of 3) (1982) (Starpath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b00088418fc891f3faa3d4ddde6ace94", "", "", "Unknown Title (bin00007 (200102)) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b00a8bc9d7fe7080980a514005cbad13", "K-Tel Vision", "", "Vulture Attack (1982) (K-Tel Vision) (PAL)", "AKA Condor Attack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b00e8217633e870bf39d948662a52aac", "Konami", "RC 102-X 02", "Marine Wars (1983) (Konami)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2342,7 +2343,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "b50ae55aac93fbed258bc5a873edd2cb", "Recompile", "", "E.T. The Extra-Terrestrial (Recompile) (Hack)", "www.neocomputer.org/projects/et", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b5110f55ed99d5279f18266d001a8cd5", "Eckhard Stolberg", "", "Auto-mobile Demo (2001) (Eckhard Stolberg)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b56264f738b2eb2c8f7cf5a2a75e5fdc", "Atari - GCC, Betty Ryan Tylko, Douglas B. Macrae", "CX2694, CX2694P", "Pole Position (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "b5657d4c1c732fbb6af150668464247f", "Arcadia Corporation, Stephen Harland Landrum", "6 AR-4400", "Excalibur (Dragonstomper Beta) (1982) (Arcadia) (Prototype)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "b5657d4c1c732fbb6af150668464247f", "Arcadia Corporation, Stephen H. Landrum", "AR-4400", "Excalibur (Dragonstomper Beta) (1982) (Arcadia) (Prototype)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b59417d083b0be2d49a7d93769880a4b", "Pet Boat", "", "Donkey Kong (1983) (Pet Boat) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b59fd465abf76f64c85652ff29d5952d", "VentureVision, Dan Oliver", "", "Innerspace (1983) (VentureVision) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b5a1a189601a785bdb2f02a424080412", "Imagic, Dennis Koble", "720021-1A, IA3410", "Shootin' Gallery (1982) (Imagic)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2353,7 +2354,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "b64426e787f04ff23ee629182c168603", "Dynacom", "", "Plaque Attack (1983) (Dynacom)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b65d4a38d6047735824ee99684f3515e", "Dynacom", "", "MegaBoy (Dynacom)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b676a9b7094e0345a76ef027091d916b", "Thomas Jentzsch", "", "Mission Survive (Thomas Jentzsch)", "NTSC Conversion", "Homebrew", "", "", "", "A", "", "", "", "", "", "", "", "", "220", "YES", "" }, - { "b6812eaf87127f043e78f91f2028f9f4", "Simage", "", "Eli's Ladder (1982) (Simage)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "b6812eaf87127f043e78f91f2028f9f4", "Simage", "", "Eli's Ladder (1984) (Simage)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b6821ac51c4c1dcb283f01be2f047dc1", "", "", "Rubik's Cube 3D Demo (25-11-2002) (TJ)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b6960be26bee87d53ba4e2e71cfe772f", "", "", "3-D Corridor (Spiral Words) (31-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b6d52a0cf53ad4216feb04147301f87d", "Imagic, Michael Greene", "720055-1A, IA3312", "No Escape! (1982) (Imagic)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2678,7 +2679,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "d078d25873c5b99f78fa267245a2af02", "Sega - Beck-Tech, Steve Beck, Phat Ho", "006-01", "Congo Bongo (1983) (Sega) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "26", "220", "", "" }, { "d08fccfbebaa531c4a4fa7359393a0a9", "Activision, David Crane", "", "Venetian Blinds Demo (1982) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d090836f0a4ea8db9ac7abb7d6adf61e", "Hozer Video Games", "", "Yahtzee (Hozer Video Games)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "d09935802d6760ae58253685ff649268", "Telesys, Don 'Donyo' Ruffcorn", "1006", "Demolition Herby (1983) (Telesys)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "d09935802d6760ae58253685ff649268", "Telesys, Don Ruffcorn", "1006", "Demolition Herby (1983) (Telesys)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "d09a7504ee8c8717ac3e24d263e7814d", "Activision, Matthew L. Hubbard, Bob Whitehead", "AX-024", "Dolphin (1983) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d09f1830fb316515b90694c45728d702", "Imagic, Brad Stewart", "720105-1A, IA3400", "Fire Fighter (1982) (Imagic)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d0a379946ed77b1b126230ca68461333", "Ataripoll", "", "Atari Invaders (Ataripoll) (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2727,7 +2728,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "d45bf71871b196022829aa3b96bfcfd4", "Activision, Steve Cartwright", "AX-017, AX-017-04", "MegaMania (1982) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d45ebf130ed9070ea8ebd56176e48a38", "Sega", "001-01", "Tac-Scan (1982) (Sega)", "Uses the Paddle Controllers (right only)", "", "", "", "", "", "", "YES", "PADDLES", "", "YES", "AUTO 60", "", "", "215", "YES", "" }, { "d47387658ed450db77c3f189b969cc00", "PlayAround - J.H.M.", "206", "Westward Ho (1982) (PlayAround) (PAL)", "AKA Custer's Revenge", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "d4806775693fcaaa24cf00fc00edcdf3", "Atari, Robert C. Polaro", "CX26140, CX26140P", "Desert Falcon (1987) (Atari) (PAL)", "AKA Nile Flyer, Sphinx", "", "", "", "", "", "", "", "", "", "", "", "PAL", "", "", "", "" }, + { "d4806775693fcaaa24cf00fc00edcdf3", "Atari - Bobco, Robert C. Polaro", "CX26140, CX26140P", "Desert Falcon (1987) (Atari) (PAL)", "AKA Nile Flyer, Sphinx", "", "", "", "", "", "", "", "", "", "", "", "PAL", "", "", "", "" }, { "d483f65468d9a265661917bae1a54f3e", "Joe Grand", "", "SCSIcide Pre-release 3 (Joe Grand)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d4942f4b55313ff269488527d84ce35c", "Atari - GCC, Mark Ackerman, Glenn Parker", "CX2675, CX2675P", "Ms. Pac-Man (1982) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d49aff83f77a1b9041ad7185df3c2277", "", "", "Space Treat (60% complete) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2849,7 +2850,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "dd4f4e0fbd81762533e39e6f5b55bb3a", "", "", "Turbo WIP (TJ)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dd7598b8bcb81590428900f71b720efb", "Xonox - K-Tel Software", "99005, 6220, 6250", "Robin Hood (1983) (Xonox) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, { "dd7884b4f93cab423ac471aa1935e3df", "Atari, Brad Stewart - Sears", "CX2649, 49-75163", "Asteroids (1981) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "dd8a2124d4eda200df715c698a6ea887", "Arcadia Corporation, Stephen Harland Landrum", "AR-4400", "Dragonstomper (3 of 3) (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "dd8a2124d4eda200df715c698a6ea887", "Starpath Corporation, Stephen H. Landrum", "AR-4400", "Dragonstomper (3 of 3) (1982) (Starpath)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dd92d6ad50976f881d86b52d38616118", "SpkSoft", "", "River Raid (SpkSoft) [h1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dda23757407c4e217f64962c87ad0c82", "Atari Freak 1", "", "Nitemare at Sunshine Bowl-a-Rama (Atari Freak 1) (Hack) [a]", "Hack of Pac-Man Jr.", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ddd1efc1862cd3eb3baf4cba81ff5050", "", "", "Max3 (2001) (Maxime Beauvais) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3029,7 +3030,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e9c71f8cdba6037521c9a3c70819d171", "Action Hi Tech - Hi-Score", "", "Bank Heist (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e9cb18770a41a16de63b124c1e8bd493", "Parker Brothers, Joe Gaucher", "931519", "Popeye (1983) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "e9e646f730b8400cd5da08c849ef3e3b", "Tron", "", "Enduro (Tron)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e9e6ad30549a6e2cd89fe93b7691d447", "Atari, Robert C. Polaro", "CX26140, CX26140P", "Desert Falcon (05-27-1987) (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "e9e6ad30549a6e2cd89fe93b7691d447", "Atari - Bobco, Robert C. Polaro", "CX26140, CX26140P", "Desert Falcon (05-27-1987) (Atari) (Prototype) (PAL)", "AKA Nile Flyer, Sphinx", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e9f25c7af4f27c9e1b5b8f6fe6141e8c", "Champ Games", "CG-03-N", "Scramble (NTSC)", "Compatible with Genesis controller", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "ea38fcfc06ad87a0aed1a3d1588744e4", "Atari, Lou Harp", "CX26122", "Sinistar (1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ea6d40db5498d6386571a76df448aa4c", "", "", "Vertical Playfield Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3174,7 +3175,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f457674cef449cfd85f21db2b4f631a7", "U.S. Games Corporation - JWDA, Todd Marshall, Wes Trager, Henry Will IV", "VC1004", "Commando Raid (1982) (U.S. Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f473f99e47d4026a7a571184922ebf04", "Philip R. Frey", "", "Donkey Claus (Philip R. Frey) (Hack)", "Hack of Donkey Kong", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f48022230bb774a7f22184b48a3385af", "Atari, Rob Fulop - Sears", "CX2633 - 49-75119", "Night Driver (1980) (Atari) (4K)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 65", "", "", "", "YES", "" }, - { "f48735115ec302ba8bb2d2f3a442e814", "", "", "Dancing Plate (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "f48735115ec302ba8bb2d2f3a442e814", "", "", "Dishaster (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "f49a34f1fdd7dc147cbf96ce2ce71b76", "", "", "Qb (Special Edition) (PAL) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "f4ab6bd5f80d8988141edde4c84b23b5", "Atari, Alan Miller", "CX2624, CX2624P", "Basketball (1978) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f4b8a47a95b61895e671c3ec86ffd461", "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (01-03-1984) (Parker Bros) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -3289,7 +3290,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "fb88c400d602fe759ae74ef1716ee84e", "20th Century Fox Video Games, Bill Aspromonte", "11031", "Crash Dive (1983) (20th Century Fox)", "AKA Voyage to the Bottom of the Sea", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fb91da78455d9b1606913fbf8c859772", "", "", "Split Screen (Ballblazer) Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fb91dfc36cddaa54b09924ae8fd96199", "Parker Brothers, Mark Lesser", "PB5590", "Frogger II (1984) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "fbac6476e7b2b20d246202af81662c88", "Arcadia Corporation, Stephen Harland Landrum", "AR-4400", "Dragonstomper (Preview) (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "fbac6476e7b2b20d246202af81662c88", "Starpath Corporation, Stephen H. Landrum", "AR-4400", "Dragonstomper (Preview) (1982) (Starpath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fbb0151ea2108e33b2dbaae14a1831dd", "Thomas Jentzsch", "", "Robot Tank TV (Thomas Jentzsch) (Hack)", "Uses two simultaneous Joystick Controllers, Hack of Robot Tank", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fbb4f3debf48dc961b559384467f2057", "Digitel", "", "River Raid III (1985) (Digitel)", "AKA River Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fbd6102e17a5c02c6e1911381b7203f9", "", "", "Star Fire - Warping!! (10-04-2003) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3310,7 +3311,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "fd0e5148162e8ec6719445d559f018a9", "Activision, Steve Cartwright - Ariola", "EAX-022, EAX-022-04I - 711 022-720", "Seaquest (1983) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fd10915633aea4f9cd8b518a25d62b55", "Atari, John Dunn", "CX2631, CX2631P", "Superman (1979) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fd16949913aaab5beaefed73bf2ca67c", "Atari - GCC, Mike Feinstein, John Allred", "CX2688", "Jungle Hunt (02-03-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "fd4f5536fd80f35c64d365df85873418", "Atari, Robert C. Polaro", "CX26140", "Desert Falcon (1987) (Atari)", "AKA Nile Flyer, Sphinx", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "fd4f5536fd80f35c64d365df85873418", "Atari - Bobco, Robert C. Polaro", "CX26140", "Desert Falcon (1987) (Atari)", "AKA Nile Flyer, Sphinx", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fd6e507b5df68beeeddeaf696b6828fa", "", "", "Boxing (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fd7464edaa8cc264b97ba0d13e7f0678", "HES", "771-333", "2 Pak Special - Challenge, Surfing (1990) (HES) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fd78f186bdff83fbad7f97cb583812fe", "Amiga", "3125", "Surf's Up (1983) (Amiga) (Prototype) [a2]", "Uses the Joyboard controller", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, diff --git a/src/emucore/stella.pro b/src/emucore/stella.pro index 531702339..d421d6ba5 100644 --- a/src/emucore/stella.pro +++ b/src/emucore/stella.pro @@ -235,7 +235,7 @@ "" "Cartridge.MD5" "033e21521e0bf4e54e8816873943406d" -"Cartridge.Manufacturer" "20th Century Fox Video Games, Dan Thompson" +"Cartridge.Manufacturer" "20th Century Fox Video Games - Sirius Software, Dan Thompson" "Cartridge.ModelNo" "11020" "Cartridge.Name" "Earth Dies Screaming, The (1983) (20th Century Fox)" "Cartridge.Note" "The Day the Earth Stood Still" @@ -986,7 +986,7 @@ "Cartridge.Manufacturer" "Activision, David Crane - Ariola" "Cartridge.ModelNo" "EAG-001, PAG-001, EAG-001-04B, EAG-001-04I - 711 001-715" "Cartridge.Name" "Dragster (1980) (Activision) (PAL)" -"Cartridge.Note" "AKA Dragster Rennen" +"Cartridge.Note" "AKA Dragster Rennen, Drag Strip" "" "Cartridge.MD5" "0c7926d660f903a2d6910c254660c32c" @@ -2150,8 +2150,8 @@ "" "Cartridge.MD5" "1b4b06c2a14ed3ee73b7d0fd61b6aaf5" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" -"Cartridge.ModelNo" "6 AR-4400" +"Cartridge.Manufacturer" "Arcadia Corporation, Stephen H. Landrum" +"Cartridge.ModelNo" "AR-4400" "Cartridge.Name" "Excalibur (Dragonstomper Beta) (1982) (Arcadia) (Prototype) [a]" "" @@ -2455,6 +2455,7 @@ "Cartridge.Manufacturer" "Atari, Jerome Domurat, Peter C. Niday" "Cartridge.ModelNo" "CX26115" "Cartridge.Name" "Dumbo's Flying Circus (07-11-1983) (Atari) (Prototype) (PAL)" +"Cartridge.Note" "AKA Dumbo Flies Home" "Cartridge.Rarity" "Prototype" "" @@ -2537,7 +2538,7 @@ "" "Cartridge.MD5" "2091af29b4e7b86914d79d9aaa4cbd20" -"Cartridge.Manufacturer" "CBS Electronics, Harley H. Puthuff Jr." +"Cartridge.Manufacturer" "CBS Electronics - Woodside Design Associates, Harley H. Puthuff Jr." "Cartridge.ModelNo" "4L1802" "Cartridge.Name" "Donkey Kong Junior (1983) (CBS Electronics) (PAL)" "Display.Height" "251" @@ -3408,7 +3409,7 @@ "" "Cartridge.MD5" "2b1589c7e1f394ae6a1c046944f06688" -"Cartridge.Manufacturer" "Carrere Video, Todd Marshall, Wes Trager, Henry Will IV - Teldec" +"Cartridge.Manufacturer" "Carrere Video - JWDA, Todd Marshall, Robin McDaniel, Wes Trager, Henry Will IV - Teldec - Prism" "Cartridge.ModelNo" "USC2003" "Cartridge.Name" "Eggomania (1983) (Carrere Video) (PAL)" "Cartridge.Note" "Uses the Paddle Controllers (left only)" @@ -3640,9 +3641,9 @@ "" "Cartridge.MD5" "2d9e65959808a6098c16c82a59c9d9dc" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" +"Cartridge.Manufacturer" "Starpath Corporation, Stephen H. Landrum" "Cartridge.ModelNo" "AR-4400" -"Cartridge.Name" "Dragonstomper (1 of 3) (1982) (Arcadia) (PAL)" +"Cartridge.Name" "Dragonstomper (1 of 3) (1982) (Starpath) (PAL)" "" "Cartridge.MD5" "2dbc92688f9ba92a7e086d62be9df79d" @@ -3734,8 +3735,8 @@ "" "Cartridge.MD5" "2eaf8fa9e9fdf1fcfc896926a4bdbf85" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" -"Cartridge.ModelNo" "6 AR-4400" +"Cartridge.Manufacturer" "Arcadia Corporation, Stephen H. Landrum" +"Cartridge.ModelNo" "AR-4400" "Cartridge.Name" "Excalibur Version 39 (Dragonstomper Beta) (1982) (Arcadia) (Prototype)" "" @@ -4001,6 +4002,7 @@ "Cartridge.Manufacturer" "Atari, Jerome Domurat, Peter C. Niday" "Cartridge.ModelNo" "CX26115" "Cartridge.Name" "Dumbo's Flying Circus (1983) (Atari) (Prototype) (PAL)" +"Cartridge.Note" "AKA Dumbo Flies Home" "Cartridge.Rarity" "Prototype" "" @@ -4333,7 +4335,7 @@ "" "Cartridge.MD5" "3624e5568368929fabb55d7f9df1022e" -"Cartridge.Manufacturer" "Activision, Dan Kitchen" +"Cartridge.Manufacturer" "Activision - Imagineering, Dan Kitchen" "Cartridge.ModelNo" "EAK-050-04" "Cartridge.Name" "Double Dragon (1989) (Activision) (PAL)" "" @@ -4545,6 +4547,7 @@ "Cartridge.Manufacturer" "Atari, Jerome Domurat, Peter C. Niday" "Cartridge.ModelNo" "CX26115" "Cartridge.Name" "Dumbo's Flying Circus (05-05-1983) (Atari) (Prototype)" +"Cartridge.Note" "AKA Dumbo Flies Home" "Cartridge.Rarity" "Prototype" "" @@ -4699,7 +4702,7 @@ "Cartridge.MD5" "3a771876e4b61d42e3a3892ad885d889" "Cartridge.Manufacturer" "Atari, Bill Aspromonte, Andrew Fuchs" "Cartridge.ModelNo" "CX26120" -"Cartridge.Name" "Defender II (1988) (Atari)" +"Cartridge.Name" "Defender II (1987) (Atari)" "Cartridge.Note" "AKA Stargate" "" @@ -4726,8 +4729,8 @@ "" "Cartridge.MD5" "3ad58b53a1e972396890bd86c735e78d" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" -"Cartridge.ModelNo" "6 AR-4400" +"Cartridge.Manufacturer" "Arcadia Corporation, Stephen H. Landrum" +"Cartridge.ModelNo" "AR-4400" "Cartridge.Name" "Excalibur Version 36 (Dragonstomper Beta) (1982) (Arcadia) (Prototype)" "" @@ -5404,12 +5407,13 @@ "" "Cartridge.MD5" "42b2c3b4545f1499a083cfbc4a3b7640" -"Cartridge.Manufacturer" "U.S. Games Corporation, Todd Marshall, Wes Trager, Henry Will IV" +"Cartridge.Manufacturer" "U.S. Games Corporation - JWDA, Todd Marshall, Robin McDaniel, Wes Trager, Henry Will IV" "Cartridge.ModelNo" "VC2003" "Cartridge.Name" "Eggomania (1982) (U.S. Games)" "Cartridge.Note" "Uses the Paddle Controllers" "Controller.Left" "PADDLES" "Controller.MouseAxis" "AUTO 60" +"Display.YStart" "26" "" "Cartridge.MD5" "42b3ab3cf661929bdc77b621a8c37574" @@ -6553,7 +6557,7 @@ "" "Cartridge.MD5" "519f007c0e14fb90208dbb5199dfb604" -"Cartridge.Manufacturer" "Amiga" +"Cartridge.Manufacturer" "Amiga - Video Soft" "Cartridge.Name" "Depth Charge (1983) (Amiga) (Prototype)" "Cartridge.Rarity" "Prototype" "" @@ -7258,9 +7262,9 @@ "" "Cartridge.MD5" "5b7ea6aa6b35dc947c65ce665fde624b" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" +"Cartridge.Manufacturer" "Starpath Corporation, Stephen H. Landrum" "Cartridge.ModelNo" "AR-4400" -"Cartridge.Name" "Dragonstomper (2 of 3) (1982) (Arcadia)" +"Cartridge.Name" "Dragonstomper (2 of 3) (1982) (Starpath)" "" "Cartridge.MD5" "5b85e987e2b1618769d97ba9182333d0" @@ -7618,7 +7622,7 @@ "Cartridge.MD5" "5f786b67e05fb9985b77d4beb35e06ee" "Cartridge.Manufacturer" "Atari, Bill Aspromonte, Andrew Fuchs" "Cartridge.ModelNo" "CX26120" -"Cartridge.Name" "Defender II (1988) (Atari) (PAL)" +"Cartridge.Name" "Defender II (1987) (Atari) (PAL)" "Cartridge.Note" "AKA Stargate" "" @@ -8248,9 +8252,9 @@ "" "Cartridge.MD5" "66c4e0298d4120df333bc2f3e163657e" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" +"Cartridge.Manufacturer" "Starpath Corporation, Stephen H. Landrum" "Cartridge.ModelNo" "AR-4400" -"Cartridge.Name" "Dragonstomper (2 of 3) (1982) (Arcadia) (PAL)" +"Cartridge.Name" "Dragonstomper (2 of 3) (1982) (Starpath) (PAL)" "" "Cartridge.MD5" "66fcf7643d554f5e15d4d06bab59fe70" @@ -8640,9 +8644,9 @@ "" "Cartridge.MD5" "6b683be69f92958abe0e2a9945157ad5" -"Cartridge.Manufacturer" "U.S. Games Corporation, Paul Allen Newell, Steve Sidley, Tom Sloper" +"Cartridge.Manufacturer" "U.S. Games Corporation - Western Technologies, Jeff Corsiglia, Paul Allen Newell, Steven B. Sidley, Tom Sloper" "Cartridge.ModelNo" "VC2007" -"Cartridge.Name" "Entombed (1982) (U.S. Games)" +"Cartridge.Name" "Entombed (1983) (U.S. Games)" "Cartridge.Note" "Released as Name That Game for a contest (winning name was Entombed)" "Display.Phosphor" "YES" "" @@ -9597,6 +9601,7 @@ "Cartridge.Manufacturer" "Activision, David Crane" "Cartridge.ModelNo" "AG-001" "Cartridge.Name" "Dragster (1980) (Activision)" +"Cartridge.Note" "AKA Drag Strip" "Display.YStart" "20" "" @@ -9687,9 +9692,9 @@ "" "Cartridge.MD5" "78b84cfb1c57b0488d674d2374e656e6" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" +"Cartridge.Manufacturer" "Starpath Corporation, Stephen H. Landrum" "Cartridge.ModelNo" "AR-4400" -"Cartridge.Name" "Dragonstomper (1 of 3) (1982) (Arcadia)" +"Cartridge.Name" "Dragonstomper (1 of 3) (1982) (Starpath)" "" "Cartridge.MD5" "78c2de58e42cd1faac2ea7df783eaeb3" @@ -10135,14 +10140,14 @@ "" "Cartridge.MD5" "7dfd100bda9abb0f3744361bc7112681" -"Cartridge.Manufacturer" "Telesys, Don 'Donyo' Ruffcorn" +"Cartridge.Manufacturer" "Telesys, Don Ruffcorn" "Cartridge.ModelNo" "1006" "Cartridge.Name" "Demolition Herby (1983) (Telesys) (PAL)" "Display.Phosphor" "YES" "" "Cartridge.MD5" "7e2fe40a788e56765fe56a3576019968" -"Cartridge.Manufacturer" "Activision, Dan Kitchen" +"Cartridge.Manufacturer" "Activision - Imagineering, Dan Kitchen" "Cartridge.ModelNo" "AK-050-04" "Cartridge.Name" "Double Dragon (1989) (Activision)" "" @@ -11200,9 +11205,9 @@ "" "Cartridge.MD5" "8b04e9d132b8e30d447acaa6bd049c32" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" +"Cartridge.Manufacturer" "Starpath Corporation, Stephen H. Landrum" "Cartridge.ModelNo" "AR-4400" -"Cartridge.Name" "Dragonstomper (1982) (Arcadia) (PAL)" +"Cartridge.Name" "Dragonstomper (1982) (Starpath) (PAL)" "" "Cartridge.MD5" "8b40a9ca1cfcd14822e2547eaa9df5c1" @@ -11226,9 +11231,9 @@ "" "Cartridge.MD5" "8b5b1e3a434ebbdc2c2a49dc68f46360" -"Cartridge.Manufacturer" "CBS Electronics, Dan Kitchen, Garry Kitchen" +"Cartridge.Manufacturer" "CBS Electronics - Woodside Design Associates - Imaginative Systems Software, Dan Kitchen, Garry Kitchen" "Cartridge.ModelNo" "4L1700, 4L1701, 4L1702, 4L1802, 4L2274" -"Cartridge.Name" "Donkey Kong (1982) (CBS Electronics) (PAL)" +"Cartridge.Name" "Donkey Kong (1983) (CBS Electronics) (PAL)" "" "Cartridge.MD5" "8b7ca29a55432f886cee3d452fb00481" @@ -11601,9 +11606,9 @@ "" "Cartridge.MD5" "90ccf4f30a5ad8c801090b388ddd5613" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" +"Cartridge.Manufacturer" "Starpath Corporation, Stephen H. Landrum" "Cartridge.ModelNo" "AR-4400" -"Cartridge.Name" "Dragonstomper (1982) (Arcadia)" +"Cartridge.Name" "Dragonstomper (1982) (Starpath)" "" "Cartridge.MD5" "90d77e966793754ab4312c47b42900b1" @@ -12770,7 +12775,7 @@ "" "Cartridge.MD5" "a1f9159121142d42e63e6fb807d337aa" -"Cartridge.Manufacturer" "Quelle" +"Cartridge.Manufacturer" "Quelle - Otto Versand" "Cartridge.ModelNo" "700.223 1 - 781627" "Cartridge.Name" "Der moderne Ritter (1983) (Quelle) (PAL)" "Cartridge.Note" "AKA Fast Eddie" @@ -12859,9 +12864,9 @@ "" "Cartridge.MD5" "a302b922a8dbec47743f28b7f91d4cd8" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" +"Cartridge.Manufacturer" "Starpath Corporation, Stephen H. Landrum" "Cartridge.ModelNo" "AR-4400" -"Cartridge.Name" "Dragonstomper (Preview) (1982) (Arcadia)" +"Cartridge.Name" "Dragonstomper (Preview) (1982) (Starpath)" "" "Cartridge.MD5" "a30ece6dc4787e474fbc4090512838dc" @@ -13781,7 +13786,7 @@ "" "Cartridge.MD5" "afb3bc45c6a82739cc82582127cd96e6" -"Cartridge.Manufacturer" "Atari, John Howard Palevich" +"Cartridge.Manufacturer" "Atari - Sculptured Software, Adam Clayton" "Cartridge.ModelNo" "CX26151, CX26151P" "Cartridge.Name" "Dungeon (11-22-1985) (Atari) (Prototype)" "Cartridge.Note" "Dark Chambers Beta" @@ -13828,9 +13833,9 @@ "" "Cartridge.MD5" "aff8cba0f2d2eb239953dd7116894a08" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" +"Cartridge.Manufacturer" "Starpath Corporation, Stephen H. Landrum" "Cartridge.ModelNo" "AR-4400" -"Cartridge.Name" "Dragonstomper (3 of 3) (1982) (Arcadia) (PAL)" +"Cartridge.Name" "Dragonstomper (3 of 3) (1982) (Starpath) (PAL)" "" "Cartridge.MD5" "b00088418fc891f3faa3d4ddde6ace94" @@ -14216,8 +14221,8 @@ "" "Cartridge.MD5" "b5657d4c1c732fbb6af150668464247f" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" -"Cartridge.ModelNo" "6 AR-4400" +"Cartridge.Manufacturer" "Arcadia Corporation, Stephen H. Landrum" +"Cartridge.ModelNo" "AR-4400" "Cartridge.Name" "Excalibur (Dragonstomper Beta) (1982) (Arcadia) (Prototype)" "" @@ -14290,7 +14295,7 @@ "Cartridge.MD5" "b6812eaf87127f043e78f91f2028f9f4" "Cartridge.Manufacturer" "Simage" -"Cartridge.Name" "Eli's Ladder (1982) (Simage)" +"Cartridge.Name" "Eli's Ladder (1984) (Simage)" "" "Cartridge.MD5" "b6821ac51c4c1dcb283f01be2f047dc1" @@ -16300,7 +16305,7 @@ "" "Cartridge.MD5" "d09935802d6760ae58253685ff649268" -"Cartridge.Manufacturer" "Telesys, Don 'Donyo' Ruffcorn" +"Cartridge.Manufacturer" "Telesys, Don Ruffcorn" "Cartridge.ModelNo" "1006" "Cartridge.Name" "Demolition Herby (1983) (Telesys)" "Display.Phosphor" "YES" @@ -16613,7 +16618,7 @@ "" "Cartridge.MD5" "d4806775693fcaaa24cf00fc00edcdf3" -"Cartridge.Manufacturer" "Atari, Robert C. Polaro" +"Cartridge.Manufacturer" "Atari - Bobco, Robert C. Polaro" "Cartridge.ModelNo" "CX26140, CX26140P" "Cartridge.Name" "Desert Falcon (1987) (Atari) (PAL)" "Cartridge.Note" "AKA Nile Flyer, Sphinx" @@ -17333,9 +17338,9 @@ "" "Cartridge.MD5" "dd8a2124d4eda200df715c698a6ea887" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" +"Cartridge.Manufacturer" "Starpath Corporation, Stephen H. Landrum" "Cartridge.ModelNo" "AR-4400" -"Cartridge.Name" "Dragonstomper (3 of 3) (1982) (Arcadia)" +"Cartridge.Name" "Dragonstomper (3 of 3) (1982) (Starpath)" "" "Cartridge.MD5" "dd92d6ad50976f881d86b52d38616118" @@ -18430,9 +18435,10 @@ "" "Cartridge.MD5" "e9e6ad30549a6e2cd89fe93b7691d447" -"Cartridge.Manufacturer" "Atari, Robert C. Polaro" +"Cartridge.Manufacturer" "Atari - Bobco, Robert C. Polaro" "Cartridge.ModelNo" "CX26140, CX26140P" "Cartridge.Name" "Desert Falcon (05-27-1987) (Atari) (Prototype) (PAL)" +"Cartridge.Note" "AKA Nile Flyer, Sphinx" "Cartridge.Rarity" "Prototype" "" @@ -19329,7 +19335,7 @@ "" "Cartridge.MD5" "f48735115ec302ba8bb2d2f3a442e814" -"Cartridge.Name" "Dancing Plate (Unknown) (PAL)" +"Cartridge.Name" "Dishaster (Unknown) (PAL)" "Display.Phosphor" "YES" "" @@ -20032,9 +20038,9 @@ "" "Cartridge.MD5" "fbac6476e7b2b20d246202af81662c88" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" +"Cartridge.Manufacturer" "Starpath Corporation, Stephen H. Landrum" "Cartridge.ModelNo" "AR-4400" -"Cartridge.Name" "Dragonstomper (Preview) (1982) (Arcadia) (PAL)" +"Cartridge.Name" "Dragonstomper (Preview) (1982) (Starpath) (PAL)" "" "Cartridge.MD5" "fbb0151ea2108e33b2dbaae14a1831dd" @@ -20156,7 +20162,7 @@ "" "Cartridge.MD5" "fd4f5536fd80f35c64d365df85873418" -"Cartridge.Manufacturer" "Atari, Robert C. Polaro" +"Cartridge.Manufacturer" "Atari - Bobco, Robert C. Polaro" "Cartridge.ModelNo" "CX26140" "Cartridge.Name" "Desert Falcon (1987) (Atari)" "Cartridge.Note" "AKA Nile Flyer, Sphinx" @@ -20356,3 +20362,7 @@ "Cartridge.Name" "Spitfire Attack (1983) (Milton Bradley) [h1]" "" +"Cartridge.MD5" "62d1f50219edf9a429a9f004c19f31b3" +"Cartridge.Manufacturer" "JWDA, Todd Marshall" +"Cartridge.Name" "Euro Gen (02-01-83) (JWDA) (PAL)" +"" From 90733875b268c129aba7d99fa67f8ca0b645fd44 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 20 Dec 2017 10:01:44 +0100 Subject: [PATCH 112/156] completed change tracking on RIOT tab (except for controllers). --- src/debugger/RiotDebug.cxx | 6 ++++++ src/debugger/RiotDebug.hxx | 1 + src/debugger/gui/RiotWidget.cxx | 15 ++++++++------- src/gui/PopUpWidget.cxx | 8 +++++--- src/gui/PopUpWidget.hxx | 3 ++- src/gui/Widget.cxx | 9 +++++---- 6 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/debugger/RiotDebug.cxx b/src/debugger/RiotDebug.cxx index ee30734a2..03faf859b 100644 --- a/src/debugger/RiotDebug.cxx +++ b/src/debugger/RiotDebug.cxx @@ -54,6 +54,9 @@ const DebuggerState& RiotDebug::getState() myState.INPT4 = inpt(4); myState.INPT5 = inpt(5); + myState.INPTLatch = vblank(6); + myState.INPTDump = vblank(7); + // Timer registers myState.TIM1T = tim1T(); myState.TIM8T = tim8T(); @@ -92,6 +95,9 @@ void RiotDebug::saveOldState() myOldState.INPT4 = inpt(4); myOldState.INPT5 = inpt(5); + myOldState.INPTLatch = vblank(6); + myOldState.INPTDump = vblank(7); + // Timer registers myOldState.TIM1T = tim1T(); myOldState.TIM8T = tim8T(); diff --git a/src/debugger/RiotDebug.hxx b/src/debugger/RiotDebug.hxx index b0027a6a2..2c434a2d2 100644 --- a/src/debugger/RiotDebug.hxx +++ b/src/debugger/RiotDebug.hxx @@ -40,6 +40,7 @@ class RiotState : public DebuggerState // These are actually from the TIA, but are I/O related uInt8 INPT0, INPT1, INPT2, INPT3, INPT4, INPT5; + bool INPTLatch, INPTDump; }; class RiotDebug : public DebuggerSystem diff --git a/src/debugger/gui/RiotWidget.cxx b/src/debugger/gui/RiotWidget.cxx index 6ba9106eb..0316eb78d 100644 --- a/src/debugger/gui/RiotWidget.cxx +++ b/src/debugger/gui/RiotWidget.cxx @@ -288,8 +288,8 @@ void RiotWidget::loadConfig() myRightINPT->setList(alist, vlist, changed); // Update TIA VBLANK bits - myINPTLatch->setState(riot.vblank(6)); - myINPTDump->setState(riot.vblank(7)); + myINPTLatch->setState(riot.vblank(6), state.INPTLatch != oldstate.INPTLatch); + myINPTDump->setState(riot.vblank(7), state.INPTDump != oldstate.INPTDump); // Update timer write registers alist.clear(); vlist.clear(); changed.clear(); @@ -317,16 +317,17 @@ void RiotWidget::loadConfig() // Console switches (inverted, since 'selected' in the UI // means 'grounded' in the system) - myP0Diff->setSelectedIndex(riot.diffP0()); - myP1Diff->setSelectedIndex(riot.diffP1()); + myP0Diff->setSelectedIndex(riot.diffP0(), state.swchbReadBits[1] != oldstate.swchbReadBits[1]); + myP1Diff->setSelectedIndex(riot.diffP1(), state.swchbReadBits[0] != oldstate.swchbReadBits[0]); bool devSettings = instance().settings().getBool("dev.settings"); myConsole->setText(instance().settings().getString(devSettings ? "dev.console" : "plr.console") == "7800" ? "Atari 7800" : "Atari 2600"); myConsole->setEditable(false, true); - myTVType->setSelectedIndex(riot.tvType()); - mySelect->setState(!riot.select()); - myReset->setState(!riot.reset()); + myTVType->setSelectedIndex(riot.tvType(), state.swchbReadBits[4] != oldstate.swchbReadBits[4]); + myPause->setState(!riot.tvType(), state.swchbReadBits[4] != oldstate.swchbReadBits[4]); + mySelect->setState(!riot.select(), state.swchbReadBits[6] != oldstate.swchbReadBits[6]); + myReset->setState(!riot.reset(), state.swchbReadBits[7] != oldstate.swchbReadBits[7]); myLeftControl->loadConfig(); myRightControl->loadConfig(); diff --git a/src/gui/PopUpWidget.cxx b/src/gui/PopUpWidget.cxx index b2a87c559..699ff4758 100644 --- a/src/gui/PopUpWidget.cxx +++ b/src/gui/PopUpWidget.cxx @@ -55,7 +55,8 @@ PopUpWidget::PopUpWidget(GuiObject* boss, const GUI::Font& font, : Widget(boss, font, x, y - 1, w, h + 2), CommandSender(boss), _label(label), - _labelWidth(labelWidth) + _labelWidth(labelWidth), + _changed(false) { _flags = WIDGET_ENABLED | WIDGET_RETAIN_FOCUS; _bgcolor = kDlgColor; @@ -92,8 +93,9 @@ void PopUpWidget::setSelected(const Variant& tag, const Variant& def) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void PopUpWidget::setSelectedIndex(int idx) +void PopUpWidget::setSelectedIndex(int idx, bool changed) { + _changed = changed; myMenu->setSelectedIndex(idx); } @@ -231,7 +233,7 @@ void PopUpWidget::drawWidget(bool hilite) s.vLine(x + w - 1, _y, _y +_h - 1, kShadowColor); // Fill the background - s.fillRect(x + 1, _y + 1, w - 2, _h - 2, kWidColor); + s.fillRect(x + 1, _y + 1, w - 2, _h - 2, _changed ? kDbgChangedColor : kWidColor); // Draw an arrow pointing down at the right end to signal this is a dropdown/popup s.drawBitmap(up_down_arrows, x + w - 10, _y + myArrowsY, !isEnabled() ? kColor : hilite ? kTextColorHi : kTextColor); diff --git a/src/gui/PopUpWidget.hxx b/src/gui/PopUpWidget.hxx index 0b2a586c3..94fb2145c 100644 --- a/src/gui/PopUpWidget.hxx +++ b/src/gui/PopUpWidget.hxx @@ -50,7 +50,7 @@ class PopUpWidget : public Widget, public CommandSender See ContextMenu.hxx for more information. */ void setSelected(const Variant& tag, const Variant& def = EmptyVariant); - void setSelectedIndex(int idx); + void setSelectedIndex(int idx, bool changed = false); void setSelectedMax(); void clearSelection(); @@ -78,6 +78,7 @@ class PopUpWidget : public Widget, public CommandSender string _label; int _labelWidth; + bool _changed; private: // Following constructors and assignment operators not supported diff --git a/src/gui/Widget.cxx b/src/gui/Widget.cxx index 3f963c08c..b754cdf6b 100644 --- a/src/gui/Widget.cxx +++ b/src/gui/Widget.cxx @@ -653,17 +653,18 @@ void CheckboxWidget::drawWidget(bool hilite) if(_drawBox) s.box(_x, _y + _boxY, 14, 14, kColor, kShadowColor); // Do we draw a square or cross? - s.fillRect(_x + 2, _y + _boxY + 2, 10, 10, _changed ? kDbgChangedColor : isEnabled() ? _bgcolor : kColor); + s.fillRect(_x + 2, _y + _boxY + 2, 10, 10, _changed ? kDbgChangedColor + : isEnabled() ? _bgcolor : kColor); if(_state) s.drawBitmap(_img, _x + 3, _y + _boxY + 3, isEnabled() ? kCheckColor : kShadowColor); #else if(_drawBox) s.frameRect(_x, _y + _boxY, 14, 14, hilite ? kScrollColorHi : kShadowColor); // Do we draw a square or cross? - s.fillRect(_x + 1, _y + _boxY + 1, 12, 12, _changed ? kDbgChangedColor : isEnabled() ? _bgcolor : kColor); + s.fillRect(_x + 1, _y + _boxY + 1, 12, 12, _changed ? kDbgChangedColor + : isEnabled() ? _bgcolor : kColor); if(_state) - s.drawBitmap(_img, _x + 2, _y + _boxY + 2, isEnabled() - ? hilite ? kScrollColorHi : kCheckColor + s.drawBitmap(_img, _x + 2, _y + _boxY + 2, isEnabled() ? hilite ? kScrollColorHi : kCheckColor : kShadowColor, 10); #endif From 57036823eafaa1d68d5d5becd1e1ea4937cd7038 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Wed, 20 Dec 2017 11:05:20 -0330 Subject: [PATCH 113/156] ROM properties updated up to 'M'. --- src/emucore/DefProps.hxx | 136 +++++++++++++++--------------- src/emucore/stella.pro | 173 ++++++++++++++++++++------------------- 2 files changed, 156 insertions(+), 153 deletions(-) diff --git a/src/emucore/DefProps.hxx b/src/emucore/DefProps.hxx index 8ffb4c570..e62281da8 100644 --- a/src/emucore/DefProps.hxx +++ b/src/emucore/DefProps.hxx @@ -96,7 +96,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "05aff8f626ef870432ae3b3d9d5aa301", "Activision, Bob Whitehead", "AG-019", "Sky Jinks (1982) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "05b45ba09c05befa75ac70476829eda0", "Parker Brothers, Rex Bradford", "931507", "Star Wars - Jedi Arena (1983) (Parker Bros) (PAL)", "Uses the Paddle Controllers (swapped)", "", "", "", "", "", "", "", "PADDLES", "", "YES", "10 50", "", "", "", "", "" }, { "05c60458ec69e7fe8b1be973852d84f1", "", "", "Test (1996) (J.V. Matthews) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "05ccf96247af12eef59698f1a060a54f", "Quelle", "600273", "King Arthur (1983) (Quelle) (PAL)", "AKA Dragonfire (Double-Game Package)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "05ccf96247af12eef59698f1a060a54f", "Otto Versand", "600273", "King Arthur (1983) (Otto Versand) (PAL)", "AKA Dragonfire (Double-Game Package)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "05d61b925d3d2474bab83f0a79bb5df1", "Eckhard Stolberg", "", "Cosmic Ark Stars (1997) (Eckhard Stolberg)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "05eb4347f0ec8f4783983ca35ffd8d1b", "", "", "Qb (2.06) (Retroactive) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "05ebd183ea854c0a1b56c218246fbbae", "Atari, Dan Hitchens", "CX2656", "SwordQuest - EarthWorld (1982) (Atari) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -117,7 +117,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "072a6ea2181ca0df88ac0dedc67b239d", "", "", "Multiple Missiles Demo (19-12-2002) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "073cb76b006af034fd150be3f5e0e7e6", "", "", "Mobile 48 Sprite Kernel (Bug Fixed) (10-01-2003) (Eric Ball)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "073d7aff37b7601431e4f742c36c0dc1", "", "", "Bermuda (Unknown) (PAL)", "AKA River Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "074ec425ec20579e64a7ded592155d48", "Atari - Sculptured Software, Steve Aguirre", "CX26162", "Fatal Run (Ultimate Driving) (1989) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "074ec425ec20579e64a7ded592155d48", "Atari - Sculptured Software, Steve Aguirre", "CX26162", "Fatal Run (Ultimate Driving) (1991) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "075069ad80cde15eca69e3c98bd66714", "CCE", "C-803", "Bobby Is Going Home (1983) (CCE)", "AKA Bobby Vai Para Casa", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0751f342ee4cf28f2c9a6e8467c901be", "Atari, Joseph Tung", "CX26152", "Super Baseball (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "07973be3ecfd55235bf59aa56bdef28c", "Quelle", "732.052 6", "Eddy Langfinger, der Museumsdieb (1983) (Quelle) (PAL)", "AKA A Mysterious Thief", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -173,12 +173,12 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "0af51ceb4aecc7a8fc89781ac44a1973", "Barry Laws Jr.", "", "Face Invaders Deluxe (Barry Laws Jr.) (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0afe6ae18966795b89314c3797dd2b1e", "Atari - GCC, Mark Ackerman, Noellie Alito", "CX2692, CX2692P", "Moon Patrol (1983) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0b01909ba84512fdaf224d3c3fd0cf8d", "", "", "Revenge of the Apes (Hack)", "Hack of Planet of the Apes", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "0b1056f1091cfdc5eb0e2301f47ac6c3", "Tigervision, Karl T. Olinger - Teldec", "7-001 - 3.60001 VE", "King Kong (1982) (Tigervision) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "0b1056f1091cfdc5eb0e2301f47ac6c3", "Tigervision - Software Electronics Corp., Karl T. Olinger - Teldec", "7-001 - 3.60001 VE", "King Kong (1982) (Tigervision) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0b17ed42984000da8b727ca46143f87a", "Atari - CCW, Christopher H. Omarzu", "CX26104", "Big Bird's Egg Catch (05-17-1983) (Atari) (Prototype)", "Uses the Keypad Controller", "Prototype", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "", "" }, { "0b24658714f8dff110a693a2052cc207", "CCE", "C-815", "Seaquest (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0b33252b680b65001e91a411e56e72e9", "CCE", "C-832", "Atlantis (1983) (CCE) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0b4e793c9425175498f5a65a3e960086", "CCE", "", "Kung Fu Master (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "0b55399cf640a2a00ba72dd155a0c140", "Imagic, Wilfredo 'Willy' Aguilar, Michael Becker, Rob Fulop", "720111-1A, 03205", "Fathom (1983) (Imagic)", "AKA Scuba", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "0b55399cf640a2a00ba72dd155a0c140", "Imagic, Wilfredo Aguilar, Michael Becker, Rob Fulop", "720111-1A, 03205", "Fathom (1983) (Imagic)", "AKA Scuba", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "0b577e63b0c64f9779f315dca8967587", "Videospielkassette - Ariola", "PGP236", "Raketen-Angriff (Ariola) (PAL)", "AKA Missile Control", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0b8d3002d8f744a753ba434a4d39249a", "Sears Tele-Games, Robert Zdybel", "CX2619 - 49-75159", "Stellar Track (1980) (Sears)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "0bf19e40d5cd8aa5afb33b16569313e6", "Atari, Jerome Domurat, Andrew Fuchs, Dave Staugas, Robert Vieira", "CX26118", "Millipede (01-04-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -189,7 +189,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "0c48e820301251fbb6bcdc89bd3555d9", "Atari, Andrew Fuchs", "CX26120", "Stargate (1984) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0c54811cf3b1f1573c9164d5f19eca65", "Activision, David Crane - Ariola", "EAG-001, PAG-001, EAG-001-04B, EAG-001-04I - 711 001-715", "Dragster (1980) (Activision) (PAL)", "AKA Dragster Rennen, Drag Strip", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0c7926d660f903a2d6910c254660c32c", "Atari, Larry Kaplan", "CX2602, CX2602P", "Air-Sea Battle (1977) (Atari) (PAL)", "AKA Anti-Aircraft", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, - { "0c7bd935d9a7f2522155e48315f44fa0", "Carrere Video, Jeff Corsiglia, Paul Allen Newell - Teldec", "USC1009", "Infernal Tower (1983) (Carrere Video) (PAL)", "AKA Towering Inferno", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "YES", "" }, + { "0c7bd935d9a7f2522155e48315f44fa0", "Carrere Video - Western Technologies, Jeff Corsiglia, Paul Allen Newell, Tom Sloper - Teldec - Prism", "USC1009", "Infernal Tower (1983) (Carrere Video) (PAL)", "AKA Towering Inferno", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "YES", "" }, { "0c80751f6f7a3b370cc9e9f39ad533a7", "Atari, Carla Meninsky", "CX2610", "Warlords (1981) (Atari) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "01 50", "", "", "", "", "" }, { "0cb7af80fd0ddef84844481d85e5d29b", "", "", "Mr. Pac-Man (El Destructo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0cc8224ff1edfe458e8629e9e5fe3f5b", "", "", "Trick 12 (2001) (TJ)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -207,7 +207,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "0d7e630a14856f4d52c9666040961d4d", "", "", "Wavy Line Test (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0d90a0ee73d55539b7def24c88caa651", "Activision, Bob Whitehead", "AG-005, CAG-005, AG-005-04", "Skiing (1980) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0db4f4150fecf77e4ce72ca4d04c052f", "Atari, Carol Shaw - Sears", "CX2618 - 49-75123", "3-D Tic-Tac-Toe (1980) (Atari)", "", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "0dd4c69b5f9a7ae96a7a08329496779a", "Tigervision, Karl T. Olinger - Teldec", "7-001 - 3.60001 VE", "King Kong (1982) (Tigervision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "0dd4c69b5f9a7ae96a7a08329496779a", "Tigervision - Software Electronics Corp., Karl T. Olinger - Teldec", "7-001 - 3.60001 VE", "King Kong (1982) (Tigervision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0de53160a8b54c3aa5aed8d68c970b62", "Quelle", "806.174 9", "Fuchs & Schweinchen Schlau (1983) (Quelle) (PAL)", "AKA Oink!", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0dfbdadf8f1bc718e7e1bb3ccd5fef3d", "", "", "Mr. Pac-Man (New start tune) (El Destructo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0e0808227ef41f6825c06f25082c2e56", "", "", "Candi (Hack) [a]", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -217,7 +217,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "0e713d4e272ea7322c5b27d645f56dd0", "Home Vision - Gem International Corp.", "VCS83105", "Panda Chase (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, { "0e7e73421606873b544e858c59dc283e", "Digivision", "", "Super Soccer (Digivision)", "AKA RealSports Soccer", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "0e86470791b26292abe1c64545c47985", "Arcadia Corporation, Dennis Caswell", "AR-4302", "Party Mix - Down on the Line (3 of 3) (1983) (Arcadia) (PAL)", "Uses Paddle Controllers", "", "", "", "", "", "", "", "PADDLES_IAXIS", "", "", "01 70", "", "", "", "", "" }, - { "0ec93f519bb769e0d9f80e61f6cc8023", "Atari - GCC, Mike Feinstein, John Allred", "CX2688", "Jungle Hunt (02-25-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "0ec93f519bb769e0d9f80e61f6cc8023", "Atari - GCC, John Allred, Mike Feinstein", "CX2688", "Jungle Hunt (02-25-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0eebfb60d437796d536039701ec43845", "Fabrizio Zavagli", "", "Cakewalk (Fabrizio Zavagli)", "NTSC Conversion", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0eecb5f58f55de9db4eedb3a0f6b74a8", "Xonox - Beck-Tech", "6210, 06002, 06004, 99002", "Ghost Manor (1983) (Xonox) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, { "0ef64cdbecccb7049752a3de0b7ade14", "Atari, Joe Decuir, Larry Caplan, Steve Mayer, Larry Wagner", "CX26163P", "Combat (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, @@ -286,7 +286,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "1367e41858be525710eb04d0dab53505", "Kyle Pittman", "", "Zelda (2003) (Kyle Pittman) (Hack)", "Hack of Adventure", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "136f75c4dd02c29283752b7e5799f978", "Atari, Dan Hitchens - Sears", "CX2650 - 49-75168", "Berzerk (1982) (Atari)", "", "Common", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "13895ef15610af0d0f89d588f376b3fe", "Tigervision, Rorke Weigandt", "7-005", "Marauder (1982) (Tigervision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "13a37cf8170a3a34ce311b89bde82032", "Atari - GCC, Mark Ackerman, Glenn Parker", "CX2684, CX2684P", "Galaxian (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "13a37cf8170a3a34ce311b89bde82032", "Atari - GCC, Mark Ackerman, Tom Calderwood, Glenn Parker", "CX2684, CX2684P", "Galaxian (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "13a991bc9c2ff03753aeb322d3e3e2e5", "Funvision - Fund. International Co.", "", "Galactic (Funvision) (PAL)", "AKA Condor Attack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "13aa1f9ac4249947e4af61319d9a08f2", "Atari - GCC", "CX2680, CX2680P", "RealSports Tennis (1983) (Atari) (PAL) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "13abc32f803165c458bb086fa57195fb", "Christian Samuel", "", "E.T. The Extra-Testical (Christian Samuel) (Hack)", "Hack of E.T. The Extra-Terrestrial", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -445,8 +445,8 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "20ae62fb69c6cc6e8098cca8cd080487", "Zirok", "", "Tennis (Zirok)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "20d4457ba22517253fcb62967af11b37", "Atari, Eric Manghise, Joseph Tung", "CX2640", "RealSports Baseball (1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "20dca534b997bf607d658e77fbb3c0ee", "Mythicon, Bill Bryner, Bruce de Graaf", "MA1002", "Fire Fly (1983) (Mythicon)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "20edcc3aa6c189259fa7e2f044a99c49", "Spectravision, Spectravideo", "SA-201", "Gangster Alley (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "211774f4c5739042618be8ff67351177", "Atari - GCC, Mark Ackerman, Glenn Parker", "CX2684", "Galaxian (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "20edcc3aa6c189259fa7e2f044a99c49", "Spectravision - Spectravideo", "SA-201", "Gangster Alley (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "211774f4c5739042618be8ff67351177", "Atari - GCC, Mark Ackerman, Tom Calderwood, Glenn Parker", "CX2684", "Galaxian (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "211f76dff0b7dad3f6fcac9d938ee61a", "JSK", "", "Custer's Viagra (JSK) (Hack) [a]", "Hack of Custer's Revenge", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "211fbbdbbca1102dc5b43dc8157c09b3", "Apollo", "AP-2009", "Final Approach (1982) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2124cf92978c46684b6c39ccc2e33713", "", "", "Sea Monster (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -560,7 +560,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "295f3679bdf91ca5e37da3f787b29997", "", "", "Exorcise (Hack)", "Hack of Adventure", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "29630a20d356fb58685b150bfa8f00c3", "M Network, Kevin Miller", "MT5687", "International Soccer (1982) (Mattel) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "297236cb9156be35679f83c4e38ee169", "Exus Corporation", "", "Video Reflex (1983) (Exus) [no roman numbers]", "AKA Foot Craz (no roman numbers)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "297c405afd01f3ac48cdb67b00d273fe", "Atari - GCC, Ava-Robin Cohen", "CX26123, CX26123P", "Jr. Pac-Man (1984) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "297c405afd01f3ac48cdb67b00d273fe", "Atari - GCC, Ava-Robin Cohen", "CX26123, CX26123P", "Jr. Pac-Man (1986) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2982e655dffc89d218a0a3072cfc6811", "", "", "Mini Golf 812631 (Hack)", "Hack of Miniature Golf", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "298387b0637173d2002770a649b4fbca", "", "", "S.I.PLIX 2 (Hack) [a]", "Hack of Kaboom!", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "01 50", "", "", "", "", "" }, { "29843f43b81f3736bf35c00b1bb88fb2", "Gray Games & AtariAge", "", "E.T. Book Cart (NTSC)", "Charles F. Gray & Michael Rideout", "", "", "", "", "", "", "", "", "", "", "", "", "15", "240", "YES", "55" }, @@ -586,10 +586,10 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "2b71a59a53be5883399917bf582b7772", "Greg Troutman", "", "Dark Mage (final beta) (Greg Troutman) (PD)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "2ba02f509a4991aa176ba8d9e540df3d", "Atari, Mark R. Hahn", "CX2678", "Dukes of Hazzard (1983) (Atari) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2bb0a1f1dee5226de648eb5f1c97f067", "Robby", "", "Enduro (Robby)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "2bb9f4686f7e08c5fcc69ec1a1c66fe7", "Atari - GCC, Mike Feinstein, John Allred", "CX2688", "Jungle Hunt (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "2bb9f4686f7e08c5fcc69ec1a1c66fe7", "Atari - GCC, John Allred, Mike Feinstein", "CX2688", "Jungle Hunt (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2bc26619e31710a9884c110d8430c1da", "Atari, Bob Whitehead", "CX2652, CX2652P", "Casino (1979) (Atari) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES_IAXIS", "", "", "", "", "", "", "", "" }, { "2bc6c53b19e0097a242f22375a6a60ff", "", "", "Droid Demo 2 (David Conrad Schweinsberg) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "2bee7f226d506c217163bad4ab1768c0", "Xonox - K-Tel Software - Beck-Tech", "6210, 06002, 06004, 99002", "Ghost Manor (1983) (Xonox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "2bee7f226d506c217163bad4ab1768c0", "Xonox - K-Tel Software - Beck-Tech, Steve Beck", "6210, 06002, 06004, 99002", "Ghost Manor (1983) (Xonox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2bf34b6ad7d2317a2d0808b3fb93571b", "", "", "Easy Playfield Graphics (1997) (Chris Cracknell)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2c0dc885d5ede94aa664bf3081add34e", "", "", "Earth Dies Screaming, The (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2c29182edf0965a7f56fe0897d2f84ba", "Atari - Axlon, Steve DeFrisco", "CX26192", "Klax (08-18-1990) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -614,8 +614,8 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "2d6741cda3000230f6bbdd5e31941c01", "CBS Electronics", "80110", "Targ (1983) (CBS Electronics) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2d69a5f23784f1c2230143292a073b53", "", "", "Qb (Fixed background animation) (2001) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "2d6da0eb85eabc93270e5bb8a466ca51", "", "", "Sprite Demo 7 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "2d76c5d1aad506442b9e9fb67765e051", "Games by Apollo - Larry Minor, Ernie Runyon, Ed Salvo", "AP-2004", "Lost Luggage (1981) (Apollo) [no opening scene]", "AKA Airport Mayhem", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "2d9e5d8d083b6367eda880e80dfdfaeb", "Selchow & Righter - QDI, Mike Montana, Rich Montana", "87", "Glib (1983) (Selchow & Righter)", "Enduro (Dactari - Milmar)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "2d76c5d1aad506442b9e9fb67765e051", "Apollo - Games by Apollo, Larry Minor, Ernie Runyon, Ed Salvo", "AP-2004", "Lost Luggage (1982) (Apollo) [no opening scene]", "AKA Airport Mayhem", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "2d9e5d8d083b6367eda880e80dfdfaeb", "QDI, Mike Montana, Rich Montana - Selchow & Righter", "87", "Glib (1983) (QDI)", "AKA Video Word Game", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2d9e65959808a6098c16c82a59c9d9dc", "Starpath Corporation, Stephen H. Landrum", "AR-4400", "Dragonstomper (1 of 3) (1982) (Starpath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2dbc92688f9ba92a7e086d62be9df79d", "", "", "How to Draw a Playfield (1997) (Jim Crawford) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2dbdca3058035d2b40c734dcf06a86d9", "Thomas Jentzsch", "", "Asteroids DC+ (Thomas Jentzsch) (Hack)", "Uses the Joystick (left) or Steering (right) Controller", "Hack", "", "", "", "", "", "", "", "DRIVING", "", "58", "", "", "", "YES", "" }, @@ -648,8 +648,8 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "3025bdc30b5aec9fb40668787f67d24c", "", "", "Demo Image Series #14 - Two Marios (4K Interleaved Chronocolour Vertical Movement) (05-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "303242c239474f2d7763b843de58c1c3", "CCE", "", "Laser Blast (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "304512528a5530a9361e8a231ed9a6de", "Thomas Jentzsch", "", "River Raid Plus (Thomas Jentzsch) (Hack)", "Hack of River Raid", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "30512e0e83903fc05541d2f6a6a62654", "Atari, Jim Huether - Sears", "CX2644 - 6-99824", "Flag Capture (1978) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "30516cfbaa1bc3b5335ee53ad811f17a", "Wizard Video Games, Robert Barber, Tim Martin", "007", "Halloween (1983) (Wizard Video Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "30512e0e83903fc05541d2f6a6a62654", "Atari, Jim Huether - Sears", "CX2644 - 6-99824", "Flag Capture (1978) (Atari)", "AKA Capture the Flag", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "30516cfbaa1bc3b5335ee53ad811f17a", "Wizard Video Games - MicroGraphic Image, Robert Barber, Tim Martin", "007", "Halloween (1983) (Wizard Video Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3051b6071cb26377cd428af155e1bfc4", "Atari, David Crane - Sears", "CX2607 - 6-99828, 49-75115", "Canyon Bomber (1979) (Atari) (4K)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES_IAXDR", "", "YES", "10", "", "42", "", "", "" }, { "30685b9b6ebd9ba71536dd7632a1e3b6", "Dactari - Milmar", "", "Tennis (Dactari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3091af0ef1a61e801f4867783c21d45c", "CCE", "C-862", "Crackpots (1983) (CCE) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -671,11 +671,11 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "31c5fd55a39db5ff30a0da065f86c140", "Dactari - Milmar", "", "Enduro (Dactari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "31d08cb465965f80d3541a57ec82c625", "Atari, Alan Miller - Sears", "CX2641 - 99807, 49-75105", "Surround (1977) (Atari) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "31df1c50c4351e144c9a378adb8c10ba", "Quelle", "687.463 0", "Die Ratte und die Karotten (1983) (Quelle) (PAL)", "AKA Gopher", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "31e518debba46df6226b535fa8bd2543", "Atari, Douglas 'Solaris' Neubauer", "CX26134", "Last Starfighter (1984) (Atari) (Prototype)", "Solaris Beta", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "31e518debba46df6226b535fa8bd2543", "Atari, Douglas 'Solaris' Neubauer, Mimi Nyden", "CX26134", "Last Starfighter (1984) (Atari) (Prototype)", "Solaris Beta", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "31f4692ee2ca07a7ce1f7a6a1dab4ac9", "Atari, Alan Miller", "CX2642", "Game of Concentration (1980) (Atari) (4K)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "31fcbce1cfa6ec9f5b6de318e1f57647", "Atari, Jerome Domurat, Peter C. Niday", "CX26115", "Dumbo's Flying Circus (1983) (Atari) (Prototype) (PAL)", "AKA Dumbo Flies Home", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "32199271dc980eb31a2cc96e10a9e244", "", "", "Radial Pong - Version 12 (Jeffry Johnston) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "321c3451129357af42a375d12afd4450", "Atari", "CX26177", "Ikari Warriors (1989) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "321c3451129357af42a375d12afd4450", "Atari - Imagineering, Dan Kitchen", "CX26177", "Ikari Warriors (1991) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "32244e55ce6ec6bfbd763f33384bdc2e", "Activision, Steve Cartwright", "AX-027", "Plaque Attack (1983) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3225676f5c0c577aeccfaa7e6bedd765", "CCE", "C-1002", "Pole Position (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "322b29e84455aa41e7cc9af463bffa89", "Atari, Robert C. Polaro", "CX2663", "Road Runner (06-25-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -737,7 +737,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "368d88a6c071caba60b4f778615aae94", "Atari, Matthew L. Hubbard", "CX26159", "Double Dunk (1989) (Atari)", "AKA Super Basketball", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "36a701c60a9f9768d057bc2a83526a80", "", "", "Cube Conquest (Interlaced) (Billy Eno) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "36b20c427975760cb9cf4a47e41369e4", "Atari", "CX26143", "Donkey Kong (1987) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "36c29ceee2c151b23a1ad7aa04bd529d", "Atari - GCC, Ava-Robin Cohen", "CX26123", "Jr. Pac-Man (1984) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "36c29ceee2c151b23a1ad7aa04bd529d", "Atari - GCC, Ava-Robin Cohen", "CX26123", "Jr. Pac-Man (1986) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "36c31bb5daeb103f488c66de67ac5075", "Arcadia Corporation, Dennis Caswell", "AR-4302", "Party Mix - Bop a Buggy (1 of 3) (1983) (Arcadia)", "Uses Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "01 56", "", "", "", "", "" }, { "36c993dc328933e4dd6374a8ffe224f4", "Gameworld, J. Ray Dettling", "133-007", "Bermuda Triangle (1983) (Gameworld) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "36e47ed74968c365121eab60f48c6517", "Quelle", "343.373 7", "Master Builder (1983) (Quelle) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -799,7 +799,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "3b2c32fcd331664d037952bcaa62df94", "Xonox", "6230, 6250", "Super Kung-Fu (1983) (Xonox) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3b5751a8d20f7de41eb069f76fecd5d7", "", "", "Eckhard Stolberg's Scrolling Text Demo 4 (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3b64a00ce147c3c29f7f8f8e531d08d8", "", "", "This Planet Sucks (16K) (Greg Troutman)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "36", "", "", "" }, - { "3b69f8929373598e1752f43f8da61aa4", "Apollo - Games by Apollo - RCA Video Jeux", "AP-2006", "Infiltrate (1981) (Apollo) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "3b69f8929373598e1752f43f8da61aa4", "Apollo - Games by Apollo - RCA Video Jeux", "AP-2006", "Infiltrate (1921) (Apollo) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "3b6dba1a24bb2893bd3bd0593f92016b", "CBS Electronics / Thomas Jentzsch", "", "Omega Race JS (TJ)", "Hack of Omega Race (CBS Electronics)", "New Release (Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3b76242691730b2dd22ec0ceab351bc6", "M Network, Connie Goldman, Joe King, Patricia Lewis Du Long, Gerald Moore, Mike Sanders, Jossef Wagner - INTV", "MT4319", "Masters of the Universe (1983) (M Network)", "", "", "", "", "", "A", "", "", "", "", "", "", "", "", "", "YES", "" }, { "3b80b8f52a0939e16b5059f93a3fc19a", "V007", "", "Virtual Pet (V007) (after Demo 2) (CRACKERS) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -836,7 +836,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "3d9c2fccf8b11630762ff00811c19277", "", "", "Challenge of.... Nexar, The (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3da7cc7049d73d34920bb73817bd05a9", "Activision, Mike Lorenzen", "AX-023", "Oink! (1983) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3dfb7c1803f937fadc652a3e95ff7dc6", "Dimax - Sinmax", "SM8001", "Space Robot (Dimax - Sinmax)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "3e03086da53ecc29d855d8edf10962cb", "CBS Electronics, Joe Gaucher, Alex Leavens", "4L1751, 4L1752, 4L1753, 4L2275", "Gorf (1982) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "3e03086da53ecc29d855d8edf10962cb", "CBS Electronics - Roklan, Joe Gaucher, Alex Leavens", "4L1751, 4L1752, 4L1753, 4L2275", "Gorf (1982) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "3e1682ddaec486d8b6b90b527aaa0fc4", "Thomas Jentzsch", "", "Robot City (V0.12) (TJ)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3e22c7eaf6459b67388602e4bebbb3a8", "CommaVid, John Bronstein - Ariola", "CM-003 - 712 003-720", "Cosmic Swarm (1982) (CommaVid) (PAL) (4K)", "AKA Angriff der Termiten", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3e33ac10dcf2dff014bc1decf8a9aea4", "Spectravideo - Video Games Industries Corporation, Mike Schwartz - Ralston Purina", "", "Chase the Chuckwagon (1983) (Spectravideo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "22", "", "YES", "" }, @@ -882,7 +882,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "40b1832177c63ebf81e6c5b61aaffd3a", "Atari, Peter C. Niday", "", "Rubik's Cube 3-D (1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "40b59249e05135bca33861e383735e9e", "Atari", "CX26163P", "Skiing (32 in 1) (1988) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "40d7ccd460c9b1198238af6ceea1737d", "", "", "Star Fire - Enemy Mine (2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "40d8ed6a5106245aa79f05642a961485", "Xonox - K-Tel Software - Beck-Tech", "6210, 06002, 06004, 99002", "Ghost Manor (1983) (Xonox) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, + { "40d8ed6a5106245aa79f05642a961485", "Xonox - K-Tel Software - Beck-Tech, Steve Beck", "6210, 06002, 06004, 99002", "Ghost Manor (1983) (Xonox) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, { "40d9f5709877ecf3dd1184f9791dd35e", "Dactari - Milmar", "", "Skiing (Dactari - Milmar)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "40e12c008037a323a1290c8fa4d2fe7f", "", "", "Skeleton (NTSC) (06-09-2002) (Eric Ball)", "", "", "STEREO", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "40eb4e263581b3dfec6dd8920b68e00f", "Sears Tele-Games, Marilyn Churchill, Matthew L. Hubbard", "CX2647 - 49-75142", "Seawolf 3 (03-23-1981) (Sears) (Prototype) (PAL)", "Submarine Commander Beta", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -958,7 +958,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "4702d8d9b48a332724af198aeac9e469", "Atari, Jerome Domurat, Steve Woita", "CX2699", "Taz (1983) (Atari) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "470878b9917ea0348d64b5750af149aa", "Atari, Suki Lee - Sears", "CX2658 - 49-75128", "Math Gran Prix (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "47464694e9cce07fdbfd096605bf39d4", "Activision, Dan Kitchen", "EAK-050-04", "Double Dragon (1989) (Activision) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "4767356fa0ed3ebe21437b4473d4ee28", "Atari, Dan Hitchens", "CX2685", "Gravitar (04-12-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "4767356fa0ed3ebe21437b4473d4ee28", "Atari, Dan Hitchens, Mimi Nyden", "CX2685", "Gravitar (04-12-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "47711c44723da5d67047990157dcb5dd", "CCE", "", "Ice Hockey (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "47911752bf113a2496dbb66c70c9e70c", "Atari, Christopher H. Omarzu, Preston Stuart, Bruce Williams", "CX26101", "Oscar's Trash Race (1983) (Atari) (PAL)", "Uses the Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "4799a40b6e889370b7ee55c17ba65141", "Konami", "RC 100-X 02", "Pooyan (1983) (Konami)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "215", "", "" }, @@ -967,11 +967,11 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "47aef18509051bab493589cb2619170b", "", "", "Stell-A-Sketch (Bob Colbert) (PD)", "Uses Driving, Joystick, or Amiga/Atari ST mouse Controllers", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "47b82d47e491ac7fdb5053a88fccc832", "Atari Freak 1, Franklin Cruz", "", "Asteroid 2 (Atari Freak 1) (Hack)", "Hack of Asteroids", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "47bb1c677fe7ba5f376372ae7358e790", "", "", "Star Fire (10-10-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "47cd61f83457a0890de381e478f5cf5f", "Imagic, Wilfredo 'Willy' Aguilar, Michael Becker, Rob Fulop", "720111-2A, 13205", "Fathom (1983) (Imagic) (PAL)", "AKA Scuba", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "47cd61f83457a0890de381e478f5cf5f", "Imagic, Wilfredo Aguilar, Michael Becker, Rob Fulop", "720111-2A, 13205", "Fathom (1983) (Imagic) (PAL)", "AKA Scuba", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "481d20ec22e7a63e818d5ef9679d548b", "Atari", "CX26163P", "Freeway Rabbit (32 in 1) (1988) (Atari) (PAL)", "AKA Freeway", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "481f9a742052801cc5f3defb41cb638e", "Jeffry Johnston", "", "Radial Pong - Version 4 (Jeffry Johnston) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "48287a9323a0ae6ab15e671ac2a87598", "Zellers", "", "Laser Volley (Zellers)", "AKA Innerspace", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "48411c9ef7e2cef1d6b2bee0e6055c27", "Telesys, Don 'Donyo' Ruffcorn, Jack Woodman", "1003", "Fast Food (1982) (Telesys) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "48411c9ef7e2cef1d6b2bee0e6055c27", "Telesys, Don Ruffcorn, Jack Woodman", "1003", "Fast Food (1982) (Telesys) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "484b0076816a104875e00467d431c2d2", "Atari", "CX26150", "Q-bert (1987) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4868a81e1b6031ed66ecd60547e6ec85", "Eric Mooney", "", "Invaders by Erik Mooney (V2.1) (1-3-98) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4884b1297500bd1243659e43c7e7579e", "Atari - Axlon, Tod Frye", "CX26178", "Save Mary! (10-24-1991) (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1004,7 +1004,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "4ab2ebd95a8f861ea451abebdad914a5", "Nukey Shay, Thomas Jentzsch", "PAL conversion (F6)", "Montezuma's Revenge (PAL) (Genesis)", "Genesis controller (B jumps left, C jumps right)", "Homebrew", "", "", "", "", "", "", "GENESIS", "", "", "", "", "", "", "", "" }, { "4ab4af3adcdae8cdacc3d06084fc8d6a", "Nick Bensema", "", "Sucky Zepplin (Nick Bensema) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4abb4c87a4c5f5d0c14ead2bb36251be", "Atari", "CX26135, CX26135P", "RealSports Boxing (1987) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "4ac9f40ddfcf194bd8732a75b3f2f214", "Atari, Stephan R. Keith, Preston Stuart", "CX26106", "Grover's Music Maker (12-29-1982) (Atari) (Prototype)", "Uses Kids/Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, + { "4ac9f40ddfcf194bd8732a75b3f2f214", "Atari - CCW, Stephan R. Keith, Laura Scholl, Preston Stuart", "CX26106", "Grover's Music Maker (12-29-1982) (Atari) (Prototype)", "Uses Keypad Controller", "Prototype", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "", "" }, { "4ae8c76cd6f24a2e181ae874d4d2aa3d", "", "", "Flash Gordon (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4af4103759d603c82b1c9c5acd2d8faf", "Imagic, Bob Smith", "720114-2A, 13207, EIZ-001-04I", "Moonsweeper (1983) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "4afa7f377eae1cafb4265c68f73f2718", "Ed Fries", "", "Halo 2600 (2010) (Ed Fries)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1174,7 +1174,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "58c396323ea3e85671e34c98eb54e2a4", "Brian Watson", "", "Color Tweaker (B. Watson)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "58d331c23297ed98663d11b869636f16", "", "", "Fu Kung! (V0.09) (26-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "58e313e2b5613b2439b5f12bb41e3eef", "", "", "Cube Conquest (Demo Interlace) (Billy Eno) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "590ac71fa5f71d3eb29c41023b09ade9", "Atari - GCC, Mark Ackerman, Glenn Parker", "CX2684", "Galaxian (01-05-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "590ac71fa5f71d3eb29c41023b09ade9", "Atari - GCC, Mark Ackerman, Tom Calderwood, Glenn Parker", "CX2684", "Galaxian (01-05-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "59135f13985b84c4f13cc9e55eec869a", "", "", "Multi-Sprite Game V2.0 (Piero Cavina) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "594dbc80b93fa5804e0f1368c037331d", "Telesys, Alex Leavens", "", "Bouncin' Baby Bunnies (1983) (Telesys) (Prototype)", "AKA Bouncing Baby Monkeys", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5961d259115e99c30b64fe7058256bcf", "Universal Gamex Corporation, Alan Roberts, H.K. Poon", "GX-001", "X-Man (1983) (Universal)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1189,7 +1189,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "5a0ff99ba10bd26d542e1d6f59f56850", "Champ Games", "CG-04-P", "Super Cobra Arcade (PAL60)", "Compatible with Genesis controller", "Homebrew", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "YES", "" }, { "5a17e30e6e911e74ccd7b716d02b16c6", "Activision, Dan Kitchen", "AX-029", "Crackpots (1983) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5a272012a62becabcd52920348c7c60b", "Star Game", "", "Pitfall (Star Game)", "AKA Pitfall!", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5a2f2dcd775207536d9299e768bcd2df", "Quelle", "781698", "Flippern (Double-Game Package) (1983) (Quelle) (PAL)", "AKA Video Pinball", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5a2f2dcd775207536d9299e768bcd2df", "Otto Versand", "781698", "Flippern (Double-Game Package) (1983) (Otto Versand) (PAL)", "AKA Video Pinball", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5a5390f91437af9951a5f8455b61cd43", "Retroactive", "", "Qb (0.11) (Retroactive) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "5a6febb9554483d8c71c86a84a0aa74e", "CCE", "C-1003", "Donkey Kong Jr (1983) (CCE)", "AKA Donkey Kong Junior", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5a734779d797ccef25dc8acfa47244c7", "", "", "Oh No! (Version 2) (18-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1212,7 +1212,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "5b92a93b23523ff16e2789b820e2a4c5", "Activision, Dan Kitchen", "AG-039-04", "Kung-Fu Master (1987) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5b98e0536c3f60547dd708ae22adb04b", "Ben Hudman", "", "Donkey Kong Gingerbread Man (Ben Hudman) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5b9c2e0012fbfd29efd3306359bbfc4a", "HES", "", "2 Pak Special - Hoppy, Alien Force (1992) (HES) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5babe0cad3ec99d76b0aa1d36a695d2f", "Coleco, Ed Temple", "2654", "Looping (1983) (Coleco) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5babe0cad3ec99d76b0aa1d36a695d2f", "Coleco - Individeo, Ed Temple", "2654", "Looping (1983) (Coleco) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5bba254e18257e578c245ed96f6b003b", "", "", "Music Effects Demo (21-01-2003) (Paul Slocum)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "5bbab3f3e4b47e3e23f9820765dbb45c", "", "", "Pitfall! (says 1985) [h1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5bc9998b7e9a970e31d2cb60e8696cc4", "Jack Kortkamp", "", "Borgwars Asteroids (2003) (Jack Kortkamp) (Hack)", "Hack of Asteroids", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -1244,7 +1244,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "5de8803a59c36725888346fdc6e7429d", "Atari, John Dunn - Sears", "CX2631 - 49-75152", "Superman (1979) (Atari) [fixed]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5df32450b9fbcaf43f9d83bd66bd5a81", "Eric Ball", "", "Atari Logo Playfield Demo (2001) (Eric Ball) (PD)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5df559a36347d8572f9a6e8075a31322", "Digivision", "", "Enduro (Digivision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5e0c37f534ab5ccc4661768e2ddf0162", "Telegames, Ed Salvo", "5667 A106", "Glacier Patrol (1988) (Telegames)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5e0c37f534ab5ccc4661768e2ddf0162", "Telegames - VSS, Ed Salvo", "5667 A106", "Glacier Patrol (1988) (Telegames)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5e1b4629426f4992cf3b2905a696e1a7", "Activision, Robert C. Polaro", "AK-049-04", "Rampage! (1989) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5e1b7a6078af428ef056fe85a37a95ca", "Activision, David Crane", "AX-014, AX-014-04", "Grand Prix (1982) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5e1cd11a6d41fc15cf4792257400a31e", "Philip R. Frey", "", "Return of Mario Bros (Philip R. Frey) (Hack)", "Hack of Mario Bros.", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1359,13 +1359,13 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "66362890eb78d6ea65301592cce65f5b", "", "", "Euchre (13-07-2001) (Eric Eid) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "663ef22eb399504d5204c543b8a86bcd", "CBS Electronics, Joe Hellesen", "4L1720, 4L1721, 4L1722, 4L2276", "Wizard of Wor (1982) (CBS Electronics) (PAL)", "Uses the Joystick Controllers (swapped)", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "YES", "" }, { "6651e2791d38edc02c5a5fd7b47a1627", "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (04-05-1984) (Parker Bros) (Prototype) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "665b8f8ead0eef220ed53886fbd61ec9", "Telesys, Don 'Donyo' Ruffcorn, Jack Woodman", "1003", "Fast Food (1982) (Telesys)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "665b8f8ead0eef220ed53886fbd61ec9", "Telesys, Don Ruffcorn, Jack Woodman", "1003", "Fast Food (1982) (Telesys)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "66706459e62514d0c39c3797cbf73ff1", "Video Gems", "VG-05", "Treasure Below (1983) (Video Gems) (PAL)", "", "", "", "", "", "A", "", "", "", "", "", "", "", "", "", "", "" }, { "6672de8f82c4f7b8f7f1ef8b6b4f614d", "Videospielkassette - Ariola", "PGP237", "Angeln I (Ariola) (PAL)", "AKA Fishing Derby", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "668dc528b7ea9345140f4fcfbecf7066", "Gakken", "001", "Pooyan (1983) (Gakken) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6697f177847c70505824422e76aad586", "", "", "Tennis (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "669840b0411bfbab5c05b786947d55d4", "Atari, Andrew Fuchs, Jeffrey Gusman, Dave Jolly, Suki Lee", "CX26117", "Obelix (1983) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "66b89ba44e7ae0b51f9ef000ebba1eb7", "Atari, Stephan R. Keith, Preston Stuart", "CX26106", "Grover's Music Maker (01-18-1983) (Atari) (Prototype)", "Uses Keypad Controller", "Prototype", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "", "" }, + { "66b89ba44e7ae0b51f9ef000ebba1eb7", "Atari - CCW, Stephan R. Keith, Laura Scholl, Preston Stuart", "CX26106", "Grover's Music Maker (01-18-1983) (Atari) (Prototype)", "Uses Keypad Controller", "Prototype", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "", "" }, { "66b92ede655b73b402ecd1f4d8cd9c50", "Activision, John Van Ryzin - Ariola", "EAZ-036-04, EAZ-036-04B, EAZ-036-04I - 711 036-720", "H.E.R.O. (1984) (Activision) (PAL) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "66bc1bef269ea59033928bac2d1d81e6", "Arcadia Corporation, Scott Nelson", "AR-4300", "Fireball (Preview) (1982) (Arcadia)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "01", "", "", "", "", "" }, { "66c2380c71709efa7b166621e5bb4558", "Parker Brothers, Dave Engman, Dawn Stockbridge", "931509", "Tutankham (1983) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1382,7 +1382,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "679e910b27406c6a2072f9569ae35fc8", "Data Age", "DA1002", "Warplock (1982) (Data Age)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "01 40", "", "", "", "YES", "" }, { "67bd3d4dc5ac6a42a99950b4245bdc81", "Retroactive", "", "Qb (2.11) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "67c05ae94bf8b83a666c3ae2c4bc14de", "Atari", "CX26163P", "NFL Football (32 in 1) (1988) (Atari) (PAL) (4K)", "AKA Football", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "67cdde4176e0447fc45a71e0a1cdd288", "Telegames, Ed Salvo", "5665 A016", "Glacier Patrol (1988) (Telegames) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "67cdde4176e0447fc45a71e0a1cdd288", "Telegames - VSS, Ed Salvo", "5665 A016", "Glacier Patrol (1988) (Telegames) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "67ce6cdf788d324935fd317d064ed842", "Retroactive", "", "Qb (V2.09) (Stella) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "67cf913d1df0bf2d7ae668060d0b6694", "", "", "Hangman Monkey 4letter (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6803fa7c2c094b428b859a58dc1dd06a", "Retroactive", "", "Qb (0.11) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -1469,7 +1469,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "6dda84fb8e442ecf34241ac0d1d91d69", "Atari - GCC, Douglas B. Macrae", "CX2677", "Dig Dug (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6de924c2297c8733524952448d54a33c", "CCE", "C-1006", "Moon Patrol (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6dfad2dd2c7c16ac0fa257b6ce0be2f0", "Parker Brothers, Larry Gelberg, Gary Goltz", "PB5065", "Star Wars - Ewok Adventure (1983) (Parker Bros) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "6e179eee3d4631a7434d40cf7aeea6e8", "Wizard Video Games, Robert Barber, Tim Martin", "007", "Halloween (1983) (Wizard Video Games) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "6e179eee3d4631a7434d40cf7aeea6e8", "Wizard Video Games - MicroGraphic Image, Robert Barber, Tim Martin", "007", "Halloween (1983) (Wizard Video Games) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6e19428387686a77d8c8d2f731cb09e0", "", "", "Purple Cross Demo (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6e372f076fb9586aff416144f5cfe1cb", "Atari, Tod Frye - Sears", "CX2646 - 49-75185", "Pac-Man (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6e4521989a60a0ddf4ff1fc6e6e5fc3d", "", "", "Star Fire (01-05-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1507,12 +1507,12 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "70d14c66c319683b4c19abbe0e3db57c", "", "", "Oystron (V2.82) (Piero Cavina) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "710497df2caab69cdcc45e919c69e13f", "Arcadia Corporation, Dennis Caswell", "5 AR-4200", "Labyrinth (Escape from the Mindmaster Beta) (1982) (Arcadia) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "713fde2af865b6ec464dfd72e2ebb83e", "", "", "Challenge (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "71464c54da46adae9447926fdbfc1abe", "M Network, Bruce Pedersen - INTV", "MT5663", "Lock 'n' Chase (1982) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "71464c54da46adae9447926fdbfc1abe", "M Network - APh Technological Consulting, Bruce Pedersen - INTV", "MT5663", "Lock 'n' Chase (1982) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "714e13c08508ee9a7785ceac908ae831", "Home Vision - Gem International Corp.", "VCS83123", "Parachute (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "715dbf2e39ba8a52c5fe5cdd927b37e0", "Amiga", "3135", "S.A.C. Alert (1983) (Amiga) (Prototype)", "Uses Joyboard", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "715dd9e0240638d441a3add49316c018", "Atari", "", "128-in-1 Junior Console (Chip 2 of 4) (1991) (Atari) (PAL)", "Actually contains only 16 games, not 32", "", "", "16IN1", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7187118674ff3c0bb932e049d9dbb379", "Zirok", "", "Keystone Keypers (1983) (Zirok)", "AKA Keystone Kapers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "718ae62c70af4e5fd8e932fee216948a", "Data Age, J. Ray Dettling", "112-006", "Journey Escape (1982) (Data Age)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "718ae62c70af4e5fd8e932fee216948a", "Data Age, J. Ray Dettling", "112-006", "Journey Escape (1983) (Data Age)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "718ee85ea7ec27d5bea60d11f6d40030", "Thomas Jentzsch", "", "Ghostbusters II (1992) (Thomas Jentzsch)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "7197b6cbde6ecd10376155e6b848e80d", "Piero Cavina", "", "Multi-Sprite Game V2.1 (Piero Cavina) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "71b193f46c88fb234329855452dfac5b", "Digitel", "", "Atlantis (1983) (Digitel)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1536,7 +1536,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "73521c6b9fed6a243d9b7b161a0fb793", "Atari", "CX26163P", "Miniaturer Golf (32 in 1) (1988) (Atari) (PAL)", "AKA Miniature Golf", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "736388d73198552d77d423962000006f", "Dactari", "", "Tennis (Dactari) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "73a710e621d44e97039d640071908aef", "", "", "Barber Pole Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "73aa02458b413091ac940c0489301710", "Quelle", "463.574 4 - 781393, 986153", "Kampf dem Steinfresser (1983) (Quelle) (PAL)", "Boom Bang (AKA Crackpots)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "73aa02458b413091ac940c0489301710", "Quelle - Otto Versand", "463.574 4 - 781393, 986153", "Kampf dem Steinfresser (1983) (Quelle) (PAL)", "Boom Bang (AKA Crackpots)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "73b4e8f8b04515d91937510e680214bc", "", "", "Rubik's Cube Demo 3 (24-12-2002) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "73c545db2afd5783d37c46004e4024c2", "CBS Electronics, Henry Will IV", "4L1767, 4L1768, 4L1769, 4L1770", "Smurf (1982) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "73c839aff6a055643044d2ce16b3aaf7", "Activision, Alan Miller - Ariola", "EAX-016, PAX-016 - 711 016-725", "StarMaster (1982) (Activision) (PAL)", "Use Color/BW switch to change between galactic chart and front views", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1585,7 +1585,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "76a9bf05a6de8418a3ebc7fc254b71b4", "VideoSoft, Jerry Lawson, Dan McElroy", "VS1008", "Color Bar Generator (1984) (VideoSoft)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "76c685d1a60c0107aa54a772113a2972", "Arcadia Corporation, Steve Mundry, Scott Nelson", "AR-4401", "Survival Island (3 of 3) (1983) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "76c88341017eae660efc6e49c4b6ab40", "", "", "Indiana Pitfall (Hack)", "Hack of Pitfall!", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "76ee917d817ef9a654bc4783e0273ac4", "Quelle", "311377", "Fox & Goat (Double-Game Package) (1983) (Quelle) (PAL)", "AKA Nuts", "", "", "", "", "", "", "", "", "", "", "", "", "45", "256", "", "" }, + { "76ee917d817ef9a654bc4783e0273ac4", "Otto Versand", "311377", "Fox & Goat (Double-Game Package) (1983) (Otto Versand) (PAL)", "AKA Nuts", "", "", "", "", "", "", "", "", "", "", "", "", "45", "256", "", "" }, { "76f53abbbf39a0063f24036d6ee0968a", "M Network, David Akers, Joe 'Ferreira' King, Patricia Lewis Du Long, Jeff Ratcliff - INTV", "MT7045", "Bump 'n' Jump (1983) (M Network)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "76f66ce3b83d7a104a899b4b3354a2f2", "UA Limited", "", "Cat Trax (1983) (UA Limited) (1)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "77057d9d14b99e465ea9e29783af0ae3", "Activision, David Crane", "AG-001", "Dragster (1980) (Activision)", "AKA Drag Strip", "", "", "", "", "", "", "", "", "", "", "", "", "20", "", "", "" }, @@ -1641,7 +1641,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "7b24bfe1b61864e758ada1fe9adaa098", "Atari, Chris Crawford", "", "Wizard (1980) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7b33407b2b198af74906b936ce1eecbb", "King Atari", "", "Ghostbuster 2 (King Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "7b3cf0256e1fa0fdc538caf3d5d86337", "CommaVid, Joseph Biel", "CM-009", "Stronghold (1983) (CommaVid)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "7b43c32e3d4ff5932f39afcb4c551627", "Syncro, Dan Wolf", "", "Kamikaze Saucers (1983) (Syncro) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "222", "", "" }, + { "7b43c32e3d4ff5932f39afcb4c551627", "Syncro, Daniel Wolf", "", "Kamikaze Saucers (1983) (Syncro) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "222", "", "" }, { "7b5207e68ee85b16998bea861987c690", "Atari, Carol Shaw", "CX26163P", "3-D Tic-Tac-Toe (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7b6f3348dbf71ada88db0fdaf7feefe0", "", "", "3-D Corridor (Pink Spiral) (31-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7b79beb378d1b4471def90ceccf413de", "", "", "Pitfall Cupcake (Hack)", "Hack of Pitfall", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1651,7 +1651,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "7ba07d4ea18bf3b3245c374d8720ad30", "Starpath Corporation, Stephen H. Landrum", "AR-4101", "Communist Mutants from Space (Preview) (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7bb286cb659d146af3966d699b51f509", "Atari - Axlon, Tod Frye", "CX26178", "Save Mary! (04-03-1989) (Atari) (Prototype)", "AKA Saving Mary", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7bc4fd254ec8c0a25a13f02fd3f762ff", "Retroactive", "", "Qb (V1.00) (Stella) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "7c00e7a205d3fda98eb20da7c9c50a55", "Games by Apollo - Larry Minor, Ernie Runyon, Ed Salvo", "AP-2004", "Lost Luggage (1981) (Apollo)", "AKA Airport Mayhem", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "7c00e7a205d3fda98eb20da7c9c50a55", "Apollo - Games by Apollo, Larry Minor, Ernie Runyon, Ed Salvo", "AP-2004", "Lost Luggage (1982) (Apollo)", "AKA Airport Mayhem", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7c4a499d343fca0cef2d59dd16af621a", "", "", "Poker Card Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7c757bb151269b2a626c907a22f5dae7", "TNT Games - Sculptured Software, Adam Clayton", "26192", "BMX Air Master (1989) (TNT Games) (PAL)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7c7a4a2d505c2d0c75337c44711d8d54", "Atari, Warren Robinett", "", "Elf Adventure (04-22-83) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1712,7 +1712,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "7ff53f6922708119e7bf478d7d618c86", "Suntek", "SS-032", "Walker (Suntek) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7ffc2d80fd49a124808315306d19868e", "Ishido", "", "Domino (Ishido) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "801ba40f3290fc413e8c816c467c765c", "Hozer Video Games", "", "Gunfight 2600 - Westward Ho! (2001) (MP)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "803393ed29a9e9346569dd1bf209907b", "Atari - GCC, Mark Ackerman, Glenn Parker", "CX2684", "Galaxian (02-04-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "803393ed29a9e9346569dd1bf209907b", "Atari - GCC, Mark Ackerman, Tom Calderwood, Glenn Parker", "CX2684", "Galaxian (02-04-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "804ed85eadf1ce3e93721547cbea7592", "CCE", "", "Fishing Derby (CCE) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8055b9c2622136fd91edfea6df642daf", "Activision", "", "Unknown Activision Game #1 (1983) (Activision) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "805f9a32ef97ac25f999a25014dc5c23", "SnailSoft", "", "Balthazar (SnailSoft)", "AKA Babylon 5", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -1739,7 +1739,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "8190b403d67bf9792fe22fa5d22f3556", "", "", "Sky Diver (Unknown) (PAL) (Hack)", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "819aeeb9a2e11deb54e6de334f843894", "Atari, Gary Palmer", "CX2661", "Fun with Numbers (1980) (Atari)", "AKA Basic Math", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "81a010abdba1a640f7adf7f84e13d307", "Telegames", "7062 A305", "Universal Chaos (1988) (Telegames)", "AKA Targ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "81b3bf17cf01039d311b4cd738ae608e", "CBS Electronics, Joe Gaucher, Alex Leavens", "M8776, M8793", "Gorf (1982) (CBS Electronics)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "81b3bf17cf01039d311b4cd738ae608e", "CBS Electronics - Roklan, Joe Gaucher, Alex Leavens", "M8776, M8793", "Gorf (1982) (CBS Electronics)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "81f4f0285f651399a12ff2e2f35bab77", "Arcadia Corporation, Dennis Caswell", "AR-4200", "Escape from the Mindmaster (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "822a950f27ff0122870558a89a49cad3", "", "", "Space Jockey (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "82337e5fe0f418ca9484ca851dfc226a", "", "", "Robot City (V1.0) (Alpha) (TJ)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1788,7 +1788,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "85bbefb90e16bf386b304c1e9a1f6084", "Champ Games", "CG-02-P", "Conquest Of Mars (PAL60)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "", "" }, { "85e48d68c8d802e3ba9d494a47d6e016", "", "", "Ship Demo (V 15) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "85e564dae5687e431955056fbda10978", "Milton Bradley Company", "4362", "Survival Run (1983) (Milton Bradley)", "AKA Cosmic Commander", "", "", "", "", "", "", "", "", "", "", "", "", "", "225", "YES", "" }, - { "86128001e69ab049937f265911ce7e8a", "Apollo - Games by Apollo, Steve Stringfellow", "AP-2005", "Lochjaw (1981) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "86128001e69ab049937f265911ce7e8a", "Apollo - Games by Apollo, Steve Stringfellow", "AP-2005", "Lochjaw (1982) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "28", "", "", "" }, { "862cf669cbced78f9ed31a5d375b2ebe", "", "", "Gunfight 2600 - Flicker acceptance (2001) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8644352b806985efde499ae6fc7b0fec", "CCE", "C-801", "Mr. Postman (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8654d7f0fb351960016e06646f639b02", "Home Vision - Gem International Corp. - R.J.P.G.", "VCS83106", "Ski Hunt (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1847,7 +1847,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "8a9d874a38608964f33ec0c35cab618d", "Chris Cracknell", "", "Rescue Bira Bira (Chris Cracknell)", "Hack of Jungle Fever", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "8a9d953ac3db52a313a90d6a9b139c76", "", "", "Hangman Invader Biglist3 (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8aad33da907bed78b76b87fceaa838c1", "Atari, Larry Kaplan", "CX26163P", "Air-Sea Battle (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, - { "8ac18076d01a6b63acf6e2cab4968940", "Atari, Dan Hitchens", "CX2685", "Gravitar (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "8ac18076d01a6b63acf6e2cab4968940", "Atari, Dan Hitchens, Mimi Nyden", "CX2685", "Gravitar (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8af58a9b90b25907da0251ec0facf3b8", "Jone Yuan Telephonic Enterprise Co", "", "Cosmic Swarm (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "8b04e9d132b8e30d447acaa6bd049c32", "Starpath Corporation, Stephen H. Landrum", "AR-4400", "Dragonstomper (1982) (Starpath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8b40a9ca1cfcd14822e2547eaa9df5c1", "Parker Brothers, Dave Hampton, Tom Sloper", "931517", "Q-bert (1983) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1966,7 +1966,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "94ff6b7489ed401dcaaf952fece10f67", "Atari - GCC, Mark Ackerman, Noellie Alito", "CX2692", "Moon Patrol (07-31-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "951e8cec7a1a1d6c01fd649e7ff7743a", "Atari - Sculptured Software, Adam Clayton", "CX26151, CX26151P", "Dark Chambers (1988) (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9526e3db3bdfbc27989a9cbfd0ee34bf", "", "", "Atari Logo Demo 6 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "95351b46fa9c45471d852d28b9b4e00b", "Atari", "CX26163P", "Golf (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "95351b46fa9c45471d852d28b9b4e00b", "Atari, Tom Rudadahl", "CX26163P", "Golf (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "955c408265ad6994f61f9b66657bbae9", "", "", "Quadrun (Video Conversion) (Fabrizio Zavagli)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "956496f81775de0b69a116a0d1ad41cc", "CCE", "", "Alien (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "956b99511c0f47b3a11d18e8b7ac8d47", "", "", "Bones (Arcade Golf Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2024,7 +2024,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "99f7c6c26046bbe95f1c604b25da8360", "SnailSoft", "", "Comitoid beta 2 (SnailSoft)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9a01115206f32eb0b539c7e5a47ccafa", "Atari, Jerome Domurat, Steve Woita", "CX2699", "Taz (07-15-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9a165c39af3f050fdee6583fdfcdc9be", "Zirok", "", "Mario Bros. (Zirok)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "9a21fba9ee9794e0fadd7c7eb6be4e12", "Atari", "CX26177", "Ikari Warriors (1989) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "9a21fba9ee9794e0fadd7c7eb6be4e12", "Atari - Imagineering, Dan Kitchen", "CX26177", "Ikari Warriors (1991) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9a25b3cfe2bbb847b66a97282200cca2", "Atari, Brad Stewart - Sears", "CX2622 - 6-99813, 49-75107", "Breakout (1978) (Atari) (4K)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "01 60", "", "", "", "", "" }, { "9a4274409216ff09ecde799f2a56ac73", "CCE", "C-801", "Mr. Postman (1983) (CCE) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9ab72d3fd2cc1a0c9adb504502579037", "Epyx, Steven A. Baker, Peter Engelbrite", "80561-00286", "California Games (1988) (Epyx)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2083,7 +2083,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "9f93734c68f6479eb022cab40814142e", "", "", "Push (V0.07) (2001) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9f9ee0f60c119c831e80694b6678ca1a", "Jeffry Johnston", "", "Radial Pong - Version 8 (Jeffry Johnston) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9fa0c664b157a0c27d10319dbbca812c", "Chris Walton, Justin Hairgrove, Tony Morse", "", "Hunchy II (2005)", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "9fc2d1627dcdd8925f4c042e38eb0bc9", "Atari - GCC, Mike Feinstein, John Allred", "CX2688, CX2688P", "Jungle Hunt (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "9fc2d1627dcdd8925f4c042e38eb0bc9", "Atari - GCC, John Allred, Mike Feinstein", "CX2688, CX2688P", "Jungle Hunt (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "E68E28752D3C54EDD3CCDA42C27E320C", "Xonox - K-Tel Software, Anthony R. Henderson", "99007, 6240", "Tomarc the Barbarian (1983) (Xonox)", "Genesis controller (B is jump and throw, C switches between players)", "Hack of Tomarc the Barbarian", "", "", "", "", "", "", "GENESIS", "", "", "", "", "", "", "", "" }, { "a0028f057d496f22b549fd8deecc6f78", "Joe Grand", "", "SCSIcide Pre-release 6 (Joe Grand)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a00ec89d22fcc0c1a85bb542ddcb1178", "CCE", "C-1012", "Phoenix (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2160,7 +2160,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "a5262fe6d01d6a1253692682a47f79dd", "", "", "JKH Text Scrolling Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a537879d8e82e1061d3ad800479d3b84", "Andrew Wallace", "", "Brooni (2001) (Andrew Wallace) (PD) (PAL)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a539b9fd1ba57e46442b3e9351e6383b", "", "", "River Raid (208 in 1) (Unknown) (PAL) (Hack) [a]", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "a56b642a3d3ab9bbeee63cd44eb73216", "Carrere Video, Sylvia Day, Henry Will IV - Teldec", "USC2001", "Gopher (1983) (Carrere Video) (PAL)", "AKA Vossicht Whlmaus!", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "a56b642a3d3ab9bbeee63cd44eb73216", "Carrere Video - JWDA, Sylvia Day, Todd Marshall, Robin McDaniel, Henry Will IV - Teldec - Prism", "USC2001", "Gopher (1983) (Carrere Video) (PAL)", "AKA Vossicht Whlmaus!", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a5855d73d304d83ef07dde03e379619f", "Atari, David Crane", "", "Boggle (08-07-1978) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "215", "YES", "" }, { "a58b11148c18d85e4c2aef4ff46ade67", "", "", "Video Chess (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a591b5e8587aae0d984a0f6fe2cc7d1c", "", "", "Globe Trotter Demo (24-03-2003) (Weston)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2280,7 +2280,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "afd2cf258d51ae4965ee21abba3627ab", "Atari - CCW, Christopher H. Omarzu", "CX26104", "Big Bird's Egg Catch (12-08-1982) (Atari) (Prototype)", "Uses the Keypad Controller", "Prototype", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "", "" }, { "afe4eefc7d885c277fc0649507fbcd84", "Atari", "CX26163P", "Ant Party (32 in 1) (1988) (Atari) (PAL)", "AKA Cosmic Swarm", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "afe776db50e3378cd6f29c7cdd79104a", "Thomas Jentzsch", "", "Bobby is Going Home (TJ)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "23", "245", "", "" }, - { "afe88aae81d99e0947c0cfb687b16251", "Apollo - Games by Apollo", "AP-2006", "Infiltrate (1981) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "afe88aae81d99e0947c0cfb687b16251", "Apollo - Games by Apollo", "AP-2006", "Infiltrate (1982) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "aff8cba0f2d2eb239953dd7116894a08", "Starpath Corporation, Stephen H. Landrum", "AR-4400", "Dragonstomper (3 of 3) (1982) (Starpath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b00088418fc891f3faa3d4ddde6ace94", "", "", "Unknown Title (bin00007 (200102)) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b00a8bc9d7fe7080980a514005cbad13", "K-Tel Vision", "", "Vulture Attack (1982) (K-Tel Vision) (PAL)", "AKA Condor Attack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2320,14 +2320,14 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "b2d5d200f0af8485413fad957828582a", "Atari, Robert C. Polaro", "CX26155P", "Sprint Master (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b2f0d7217147160b2f481954cedf814b", "", "", "Marquee Drawer (2001) (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "b3017e397f74efd53caf8fae0a38e3fe", "Retroactive", "", "Qb (2.12) (Retroactive) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "b311ab95e85bc0162308390728a7361d", "Parker Brothers", "PB5080", "Gyruss (1984) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "b311ab95e85bc0162308390728a7361d", "Parker Brothers - Roklan", "PB5080", "Gyruss (1984) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "b31dc989f594764eacfa7931cead0050", "Arcadia Corporation, Steve Mundry, Scott Nelson", "AR-4401", "Survival Island (2 of 3) (1983) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b31f178aa0d569cccac7959f84e0a724", "Atari, Jerome Domurat, Steve Woita", "CX2699", "Taz (07-13-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b3203e383b435f7e43f9492893c7469f", "Gameworld", "133-003", "Sssnake (1983) (Gameworld) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b36040a2f9ecafa73d835d804a572dbf", "Digitel", "", "Pac Man (1983) (Digitel)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b37f0fe822b92ca8f5e330bf62d56ea9", "Xonox - K-Tel Software - Beck-Tech", "6210, 7210, 06003. 99001", "Spike's Peak (1983) (Xonox) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b392964e8b1c9c2bed12246f228011b2", "", "", "Name This Game (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "b4030c38a720dd84b84178b6ce1fc749", "M Network, Kevin Miller", "MT5687", "International Soccer (1982) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "b4030c38a720dd84b84178b6ce1fc749", "M Network - APh Technological Consulting, Kevin Miller", "MT5687", "International Soccer (1982) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b40dea357d41c5408546e4e4d5f27779", "Digivision", "", "Spider Fighter (Digivision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b41fdd4a522e1d5a2721840028684ac2", "", "", "Green and Yellow Number 1 Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "b42df8d92e3118dc594cecd575f515d7", "Mystique - American Multiple Industries", "1003", "Burning Desire (1982) (Mystique) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -2371,7 +2371,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "b7b1d3ce07e75976c43a2dca3866237e", "Atari", "CX26163P", "Freeway Chicken (32 in 1) (1988) (Atari) (PAL) (4K)", "AKA Freeway", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b7e459d5416eeb196aaa8e092db14463", "", "", "Push (V0.02) (1998) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b7f184013991823fc02a6557341d2a7a", "", "", "Blue Rod Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "b80d50ecee73919a507498d0a4d922ae", "20th Century Fox Video Games, David Lubar", "11008", "Fantastic Voyage (1982) (20th Century Fox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "b80d50ecee73919a507498d0a4d922ae", "20th Century Fox Video Games - Sirius Software, David Lubar", "11008", "Fantastic Voyage (1982) (20th Century Fox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b816296311019ab69a21cb9e9e235d12", "Atari, Bob Whitehead - Sears", "CX2652 - 6-99816, 49-75151", "Casino (1979) (Atari)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES_IAXIS", "", "", "", "", "", "", "", "" }, { "b822fba8b7c8a97ea4e92aeb2c455ef9", "Dactari", "", "Freeway (Dactari) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b83579c4450fcbdf2b108903731fa734", "", "", "Mission 3,000 A.D. (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -2398,7 +2398,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "ba657d940a11e807ff314bba2c8b389b", "Activision, John Van Ryzin", "AG-038-04", "Cosmic Commuter (1984) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bac28d06dfc03d3d2f4a7c13383e84ee", "Supergame", "", "Demon Attack (Supergame)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bae1a23f9b6acdadf465cfb330ba0acb", "Atari - GCC, Doug Macrae", "CX2677", "Dig Dug (1983) (Atari) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "bae66907c3200bc63592efe5a9a69dbb", "Spectravision, Spectravideo - Quelle", "SA-201 - 412.783 3", "Gangster Alley (1982) (Spectravision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "bae66907c3200bc63592efe5a9a69dbb", "Spectravision - Spectravideo - Quelle", "SA-201 - 412.783 3", "Gangster Alley (1982) (Spectravision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "baf4ce885aa281fd31711da9b9795485", "Atari, Douglas Neubauer", "CX26176", "Radar Lock (1989) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bb07f917611cde42b7d83746ee27147d", "", "", "Star Fire - Warping!! (13-04-2003) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bb18189021d58362d9e4d317cd2e28b7", "Activision, David Crane - Ariola", "EAG-001, PAG-001, EAG-001-04B, EAG-001-04I - 711 001-715", "Dragster (1980) (Activision) (PAL) (4K)", "AKA Dragster Rennen", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2465,7 +2465,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "c118854d670289a8b5d5156aa74b0c49", "Jone Yuan Telephonic Enterprise Co", "", "Skiing (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c126656df6badfa519cc63e681fb3596", "Ron Corcoran", "", "Space Invaders (2002) (Ron Corcoran) (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c150c76cbde2c9b5a97eb5399d46c64f", "", "", "Unknown Title (xxx00000 (200203)) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "c16c79aad6272baffb8aae9a7fff0864", "U.S. Games Corporation, Sylvia Day, Henry Will IV", "VC2001", "Gopher (1982) (U.S. Games)", "AKA Gopher Attack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "c16c79aad6272baffb8aae9a7fff0864", "U.S. Games Corporation - JWDA, Sylvia Day, Todd Marshall, Robin McDaniel, Henry Will IV", "VC2001", "Gopher (1982) (U.S. Games)", "AKA Gopher Attack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c16fbfdbfdf5590cc8179e4b0f5f5aeb", "", "", "Wall Break (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c17bdc7d14a36e10837d039f43ee5fa3", "Spectravision - Spectravideo", "SA-203", "Cross Force (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c1a83f44137ea914b495fc6ac036c493", "Atari, Carla Meninsky", "CX2660", "Star Raiders (1982) (Atari) (PAL)", "Uses Joystick (left) and Keypad (right) Controllers", "", "", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "" }, @@ -2580,7 +2580,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "ca50cc4b21b0155255e066fcd6396331", "Suntek", "SS-031", "UFO Patrol (Suntek) (PAL)", "AKA X'Mission", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "ca53fc8fd8b3c4a7df89ac86b222eba0", "CCE", "C-812", "Pac Man (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ca54de69f7cdf4d7996e86f347129892", "PlayAround - J.H.M.", "201", "Philly Flasher (1982) (PlayAround)", "Uses the Paddle Controllers, AKA Beat 'Em & Eat 'Em", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 45", "", "", "", "", "" }, - { "ca7aaebd861a9ef47967d31c5a6c4555", "Atari", "CX26163P", "Homerun (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, + { "ca7aaebd861a9ef47967d31c5a6c4555", "Atari, Bob Whitehead", "CX26163P", "Homerun (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, { "ca7abc774a2fa95014688bc0849eee47", "Atari, Michael Kosaka, Peter C. Niday, Robert Vieira", "CX26110", "Crystal Castles (1984) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ca7f166a94eed1a349dec6d6a358bcad", "Activision, Alan Miller - Ariola", "EAG-007, EAG-007-04I, PAG-007 - 711 007-720", "Tennis (1981) (Activision) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cac9928a84e1001817b223f0cecaa3f2", "Amiga - Video Soft, Jerry Lawson, Dan McElroy", "", "3-D Genesis (1983) (Amiga) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -2616,7 +2616,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "ccb807eb79b0ed0f5fdc460445ef703a", "", "", "Superman (Stunt_Cycle_Rules!) (Hack)", "Hack of Superman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ccbd36746ed4525821a8083b0d6d2c2c", "Atari, Brad Stewart - Sears", "CX2649, 49-75163", "Asteroids (1981) (Atari) [no copyright]", "", "Common", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "cccfe9e9a11b1dad04beba46eefb7351", "", "", "Poker Squares (V0.25) (PAL) (2001) (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "ccd6ce508eee4b3fca67212833edcd85", "Quelle", "746422", "Hot Wave (Double-Game Package) (1983) (Quelle) (PAL)", "AKA Ram It", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "ccd6ce508eee4b3fca67212833edcd85", "Otto Versand", "746422", "Hot Wave (Double-Game Package) (1983) (Otto Versand) (PAL)", "AKA Ram It", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cd032ab6764b55438a7b0bfb5e78595a", "", "", "Hangman Pac-Man 4letter (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cd139ae6d09f3665ad09eb79da3f9e49", "Eric Mooney", "", "Invaders by Erik Mooney (4-24-97) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cd34b3b3ef9e485201e841ba71beb253", "Bradford W. Mott", "", "Hit HMOVE At Various Cycles After WSYNC Test (Bradford W. Mott) (1998) (PD)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2636,7 +2636,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "cdc1a5c61d7488eadc9aba36166b253d", "Retroactive", "", "Qb (V0.12) (Stella) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "cddabfd68363a76cd30bee4e8094c646", "Computer Magic - CommaVid, John Bronstein", "CM-001", "MagiCard (1981) (CommaVid)", "Uses the Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "ce17325834bf8b0a0d0d8de08478d436", "", "", "Boring Freeway (Hack)", "Hack of Freeway", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "ce243747bf34a2de366f846b3f4ca772", "Home Vision - Gem International Corp.", "", "Jacky Jump (1983) (Home Vision) (PAL)", "AKA Bobby Is Going Home", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, + { "ce243747bf34a2de366f846b3f4ca772", "Home Vision - Gem International Corp. - VDI", "", "Jacky Jump (1983) (Home Vision) (PAL)", "AKA Bobby Is Going Home", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, { "ce4bbe11d682c15a490ae15a4a8716cf", "", "", "Okie Dokie (Older) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ce5cc62608be2cd3ed8abd844efb8919", "Atari, Robert C. Polaro", "CX2663", "Road Runner (1989) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ce64812eb83c95723b04fb56d816910b", "Retroactive", "", "Qb (V2.04) (NTSC) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -2684,7 +2684,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "d09f1830fb316515b90694c45728d702", "Imagic, Brad Stewart", "720105-1A, IA3400", "Fire Fighter (1982) (Imagic)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d0a379946ed77b1b126230ca68461333", "Ataripoll", "", "Atari Invaders (Ataripoll) (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d0af33865512e9b6900714c26db5fa23", "Telegames", "", "Armor Ambush (1988) (Telegames) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "d0b26e908370683ad99bc6b52137a784", "Games by Apollo - Larry Minor, Ernie Runyon, Ed Salvo - RCA Video Jeux", "AP-2004", "Lost Luggage (1981) (Apollo) (PAL)", "AKA La valise piegee", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "d0b26e908370683ad99bc6b52137a784", "Apollo - Games by Apollo, Larry Minor, Ernie Runyon, Ed Salvo - RCA Video Jeux", "AP-2004", "Lost Luggage (1982) (Apollo) (PAL)", "AKA La valise piegee", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d0b9df57bfea66378c0418ec68cfe37f", "20th Century Fox Video Games - Sirius, Grady Ward", "11002", "Beany Bopper (1982) (20th Century Fox)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d0b9f705aa5f61f47a748a66009ae2d2", "", "", "Synthcart (14-01-2002) (Paul Slocum)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "YES", "" }, { "d0cb28e1b7bd6c7f683a0917b59f707e", "Atari, Gary Palmer", "CX2661P", "Fun with Numbers (1980) (Atari) (PAL) (4K)", "AKA Basic Math", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2839,7 +2839,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "dca90ea1084a2fdbe300d7178ca1a138", "Imagic, Dennis Koble", "IA3000P", "Trick Shot (1982) (Imagic) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "dca941dab5c6f859b71883b13ade9744", "", "", "Hangman Pac-Man Biglist2 (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dcba0e33aa4aed67630a4b292386f405", "Retroactive", "", "Qb (V2.08) (Half Speed Version) (NTSC) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "dcc2956c7a39fdbf1e861fc5c595da0d", "M Network, David Rolfe - INTV", "MT5664", "Frogs and Flies (1982) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "dcc2956c7a39fdbf1e861fc5c595da0d", "M Network - APh Technological Consulting, David Rolfe - INTV", "MT5664", "Frogs and Flies (1982) (M Network)", "AKA Frogs 'n' Flies", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dcec46a98f45b193f07239611eb878c2", "", "", "Bars and Text Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dd08e18cfee87a0e7fc19a684b36e124", "Atari - GCC, Kevin Osborn", "CX2689, CX2689P", "Kangaroo (1983) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dd0cbe5351551a538414fb9e37fc56e8", "Xonox - K-Tel Software, Anthony R. Henderson", "99006, 6220", "Sir Lancelot (1983) (Xonox) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2896,7 +2896,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e0221c95aa657f5764eeeb64c8429258", "", "", "Tomb Raider 2600 [REV 02] (Montezuma's Revenge Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e03b0b091bea5bc9d3f14ee0221e714d", "CBS Electronics, Bob Curtiss", "4L1845, 4L1852, 4L1853, 4L1854, 4L1855", "Solar Fox (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e040df95a055b18ebdb094e904cb71b2", "", "", "Score Demo (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e04f1c1e4401d584d3f4343410a5bcc4", "Wizard Video Games, Robert Barber, Tim Martin", "007", "Halloween (1983) (Wizard Video Games) (Prototype) [a]", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "e04f1c1e4401d584d3f4343410a5bcc4", "Wizard Video Games - MicroGraphic Image, Robert Barber, Tim Martin", "007", "Halloween (1983) (Wizard Video Games) (Prototype) [a]", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e0b24c3f40a46cda52e29835ab7ad660", "Quelle", "626.502 9 - 746381", "Top Gun (1983) (Quelle) (PAL)", "AKA Air Raiders", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e0cf2dcc4c1348c468f5bb1e421c9164", "", "", "Invader Sprites in a Line Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e0de3773f5b867795db557be7b8a703e", "", "", "Boulderdash (13 Blocks Wide) (02-04-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2923,7 +2923,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e1e09e2f280e8e142121a377d0dc1b46", "Thomas Jentzsch", "", "Thrust (V1.21) (2000) (TJ)", "Won't work with Stella < V1.2, bugfixed", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e1efe2ef7664bb6758b1a22ff8ea16a1", "Dynacom", "", "Enduro (1983) (Dynacom)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e1f88da6da8a7d521ca1dcbf2bc6978b", "Activision, Bob Whitehead - Ariola", "EAG-005, PAG-005, EAG-005-04B - 711 005-715", "Skiing (1980) (Activision) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e21ee3541ebd2c23e817ffb449939c37", "Tigervision, Karl T. Olinger", "7-001", "King Kong (1982) (Tigervision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "28", "", "", "" }, + { "e21ee3541ebd2c23e817ffb449939c37", "Tigervision - Software Electronics Corp., Karl T. Olinger - Teldec", "7-001", "King Kong (1982) (Tigervision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "28", "", "", "" }, { "e237ee91514d5ed535c95a14fc608c11", "Activision, Matthew L. Hubbard, Bob Whitehead", "AX-024", "Dolphin (1983) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e2389c0be5b5b84e0d3ca36ec7e67514", "Retroactive", "", "Qb (V2.09) (NTSC) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "e24d7d879281ffec0641e9c3f52e505a", "Parker Brothers, Mark Lesser", "PB5950", "Lord of the Rings (1983) (Parker Bros) (Prototype)", "Journey to Rivendell (The Lord of the Rings I)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2964,11 +2964,11 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e4d41f2d59a56a9d917038682b8e0b8c", "Cody Pittman", "", "Kiss Meets Pacman (Cody Pittman) (Hack)", "Hack of Pac-Man", "Hack", "", "", "", "", "", "", "", "", "", "", "", "33", "", "", "" }, { "e4e9125a8741977583776729359614e1", "SnailSoft", "", "Comitoid beta 4 (SnailSoft)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e505bd8e59e31aaed20718d47b15c61b", "Funvision - Fund. Int'l Co.", "", "Space War (1982) (Funvision) (PAL)", "AKA Condor Attack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e51030251e440cffaab1ac63438b44ae", "Parker Brothers, Joe Gaucher, Louis Marbel", "PB5110", "James Bond 007 (1983) (Parker Bros)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "e51030251e440cffaab1ac63438b44ae", "Parker Brothers - On-Time Software, Joe Gaucher, Louis Marbel", "PB5110", "James Bond 007 (1984) (Parker Bros)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "e51c23389e43ab328ccfb05be7d451da", "Arcadia Corporation, Scott Nelson", "13", "Sweat! - The Decathlon Game (1983) (Arcadia) (Prototype)", "Uses the Paddle Controllers (left only)", "Prototype", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "", "" }, { "e5359cbbbff9c6d7fe8aeff5fb471b46", "CCE", "C-849", "Boom Bang (1983) (CCE)", "AKA Crackpots", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e549f1178e038fa88dc6d657dc441146", "Atari, Bob Whitehead - Sears", "CX2625 - 6-99827, 49-75114", "Football (1979) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e556e07cc06c803f2955986f53ef63ed", "Coleco, Ed Temple", "2665", "Front Line (1984) (Coleco)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "e556e07cc06c803f2955986f53ef63ed", "Coleco - Individeo, Ed Temple", "2665", "Front Line (1984) (Coleco)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e558be88eef569f33716e8e330d2f5bc", "Shock Vision", "", "Keystone Kapers (Shock Vision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e56da674188ba2f02c7a0a343a01236f", "", "", "This Planet Sucks Demo 4 (Greg Troutman) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "36", "", "", "" }, { "e5a6e0bb7d56e2f08b237e15076e5699", "", "", "Color Table Display Helper (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2980,7 +2980,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e5f360226dc552aba3e7e9b202330f48", "Supercat", "", "Mega Bitmap Demo (2007) (Supercat)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "e5f84930aa468db33c0d0f7b26dd8293", "CCE", "C-826", "Grand Prix (1983) (CCE) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e5fcc62e1d73706be7b895e887e90f84", "", "", "Air-Sea Battle (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "40", "260", "", "" }, - { "e600f5e98a20fafa47676198efe6834d", "Parker Brothers", "PB5080", "Gyruss (1984) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "e600f5e98a20fafa47676198efe6834d", "Parker Brothers - Roklan", "PB5080", "Gyruss (1984) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "e609e8a007127b8fcff79ffc380da6b1", "", "", "Multi-Sprite Game V2.3 (Piero Cavina) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e61210293b14c9c4ecc91705072c6a7e", "Gameworld", "133-005", "Bugs (1983) (Gameworld) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 50", "", "", "", "", "" }, { "e62e60a3e6cb5563f72982fcd83de25a", "Jone Yuan Telephonic Enterprise Co", "", "End of the World (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "240", "", "" }, @@ -3096,7 +3096,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "eea0da9b987d661264cce69a7c13c3bd", "Coleco", "2454", "Zaxxon (1982) (Coleco)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "eeb92f3f46df841487d1504f2896d61a", "Cody Pittman", "", "Corys Adventure (Cody Pittman) (Hack)", "Hack of Pac-Man", "Hack", "", "", "", "", "", "", "", "", "", "", "", "33", "", "", "" }, { "eec61cc4250df70939d48fe02d7122ac", "Activision, Bob Whitehead - Ariola", "EAG-005, PAG-005, EAG-005-04B - 711 005-715", "Skiing (1980) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "eed9eaf1a0b6a2b9bc4c8032cb43e3fb", "Atari - Axlon, Steve DeFrisco", "CX26192", "Klax (1990) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "eed9eaf1a0b6a2b9bc4c8032cb43e3fb", "Atari - Axlon, Steve DeFrisco", "CX26192", "Klax (1991) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "eee7695ae3eea7818321df0b790b31f3", "", "", "Sound Paddle V2 (Dennis Caswell & Jim Nitchals) (PD)", "Uses the Paddle Controllers", "", "", "", "", "", "", "YES", "PADDLES", "", "", "01", "", "", "", "", "" }, { "ef263d40a23483ab339cac44d9515a56", "Thomas Jentzsch", "", "Fatal Run (TJ)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ef3a4f64b6494ba770862768caf04b86", "Activision, Bob Whitehead", "AG-034-04", "Private Eye (1983) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3200,7 +3200,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f69a39b215852a0c2764d2a923c1e463", "", "", "Move a Blue Blob Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f69bb58b815a6bdca548fa4d5e0d5a75", "Atari, Larry Kaplan", "CX26163P", "Bowling (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f69d4fcf76942fcd9bdf3fd8fde790fb", "CCE", "", "Aquaventure (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "f6a282374441012b01714e19699fc62a", "ZiMAG - Emag - Vidco", "710-111 - GN-010", "I Want My Mommy (1983) (ZiMAG)", "AKA Open Sesame", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "f6a282374441012b01714e19699fc62a", "ZiMAG - Emag - Vidco", "710-111 - GN-010", "I Want My Mommy (1983) (ZiMAG)", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "YES", "" }, { "f6a9ea814d15b85bffe980c927df606b", "", "", "Missile Command (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "f6b5ebb65cbb2981af4d546c470629d7", "Coleco - Individeo, Ed Temple", "", "Cabbage Patch Kids (09-13-1984) (Coleco) (Prototype) [a]", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f6c13e816e58c8c62f82b2c8b91a2d67", "", "", "Scrolling Playfield 2 (Junkosoft) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3310,7 +3310,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "fcf8e306f6615f74feba5cb25550038c", "", "", "Blue Dot Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fd0e5148162e8ec6719445d559f018a9", "Activision, Steve Cartwright - Ariola", "EAX-022, EAX-022-04I - 711 022-720", "Seaquest (1983) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fd10915633aea4f9cd8b518a25d62b55", "Atari, John Dunn", "CX2631, CX2631P", "Superman (1979) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "fd16949913aaab5beaefed73bf2ca67c", "Atari - GCC, Mike Feinstein, John Allred", "CX2688", "Jungle Hunt (02-03-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "fd16949913aaab5beaefed73bf2ca67c", "Atari - GCC, John Allred, Mike Feinstein", "CX2688", "Jungle Hunt (02-03-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fd4f5536fd80f35c64d365df85873418", "Atari - Bobco, Robert C. Polaro", "CX26140", "Desert Falcon (1987) (Atari)", "AKA Nile Flyer, Sphinx", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fd6e507b5df68beeeddeaf696b6828fa", "", "", "Boxing (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fd7464edaa8cc264b97ba0d13e7f0678", "HES", "771-333", "2 Pak Special - Challenge, Surfing (1990) (HES) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, diff --git a/src/emucore/stella.pro b/src/emucore/stella.pro index d421d6ba5..349f34721 100644 --- a/src/emucore/stella.pro +++ b/src/emucore/stella.pro @@ -416,9 +416,9 @@ "" "Cartridge.MD5" "05ccf96247af12eef59698f1a060a54f" -"Cartridge.Manufacturer" "Quelle" +"Cartridge.Manufacturer" "Otto Versand" "Cartridge.ModelNo" "600273" -"Cartridge.Name" "King Arthur (1983) (Quelle) (PAL)" +"Cartridge.Name" "King Arthur (1983) (Otto Versand) (PAL)" "Cartridge.Note" "AKA Dragonfire (Double-Game Package)" "" @@ -533,7 +533,7 @@ "Cartridge.MD5" "074ec425ec20579e64a7ded592155d48" "Cartridge.Manufacturer" "Atari - Sculptured Software, Steve Aguirre" "Cartridge.ModelNo" "CX26162" -"Cartridge.Name" "Fatal Run (Ultimate Driving) (1989) (Atari) (PAL)" +"Cartridge.Name" "Fatal Run (Ultimate Driving) (1991) (Atari) (PAL)" "" "Cartridge.MD5" "075069ad80cde15eca69e3c98bd66714" @@ -891,7 +891,7 @@ "" "Cartridge.MD5" "0b1056f1091cfdc5eb0e2301f47ac6c3" -"Cartridge.Manufacturer" "Tigervision, Karl T. Olinger - Teldec" +"Cartridge.Manufacturer" "Tigervision - Software Electronics Corp., Karl T. Olinger - Teldec" "Cartridge.ModelNo" "7-001 - 3.60001 VE" "Cartridge.Name" "King Kong (1982) (Tigervision) (PAL) [a]" "" @@ -923,7 +923,7 @@ "" "Cartridge.MD5" "0b55399cf640a2a00ba72dd155a0c140" -"Cartridge.Manufacturer" "Imagic, Wilfredo 'Willy' Aguilar, Michael Becker, Rob Fulop" +"Cartridge.Manufacturer" "Imagic, Wilfredo Aguilar, Michael Becker, Rob Fulop" "Cartridge.ModelNo" "720111-1A, 03205" "Cartridge.Name" "Fathom (1983) (Imagic)" "Cartridge.Note" "AKA Scuba" @@ -999,7 +999,7 @@ "" "Cartridge.MD5" "0c7bd935d9a7f2522155e48315f44fa0" -"Cartridge.Manufacturer" "Carrere Video, Jeff Corsiglia, Paul Allen Newell - Teldec" +"Cartridge.Manufacturer" "Carrere Video - Western Technologies, Jeff Corsiglia, Paul Allen Newell, Tom Sloper - Teldec - Prism" "Cartridge.ModelNo" "USC1009" "Cartridge.Name" "Infernal Tower (1983) (Carrere Video) (PAL)" "Cartridge.Note" "AKA Towering Inferno" @@ -1103,7 +1103,7 @@ "" "Cartridge.MD5" "0dd4c69b5f9a7ae96a7a08329496779a" -"Cartridge.Manufacturer" "Tigervision, Karl T. Olinger - Teldec" +"Cartridge.Manufacturer" "Tigervision - Software Electronics Corp., Karl T. Olinger - Teldec" "Cartridge.ModelNo" "7-001 - 3.60001 VE" "Cartridge.Name" "King Kong (1982) (Tigervision) (PAL)" "" @@ -1165,7 +1165,7 @@ "" "Cartridge.MD5" "0ec93f519bb769e0d9f80e61f6cc8023" -"Cartridge.Manufacturer" "Atari - GCC, Mike Feinstein, John Allred" +"Cartridge.Manufacturer" "Atari - GCC, John Allred, Mike Feinstein" "Cartridge.ModelNo" "CX2688" "Cartridge.Name" "Jungle Hunt (02-25-1983) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -1581,7 +1581,7 @@ "" "Cartridge.MD5" "13a37cf8170a3a34ce311b89bde82032" -"Cartridge.Manufacturer" "Atari - GCC, Mark Ackerman, Glenn Parker" +"Cartridge.Manufacturer" "Atari - GCC, Mark Ackerman, Tom Calderwood, Glenn Parker" "Cartridge.ModelNo" "CX2684, CX2684P" "Cartridge.Name" "Galaxian (1983) (Atari) (PAL)" "" @@ -2563,13 +2563,13 @@ "" "Cartridge.MD5" "20edcc3aa6c189259fa7e2f044a99c49" -"Cartridge.Manufacturer" "Spectravision, Spectravideo" +"Cartridge.Manufacturer" "Spectravision - Spectravideo" "Cartridge.ModelNo" "SA-201" "Cartridge.Name" "Gangster Alley (1982) (Spectravision)" "" "Cartridge.MD5" "211774f4c5739042618be8ff67351177" -"Cartridge.Manufacturer" "Atari - GCC, Mark Ackerman, Glenn Parker" +"Cartridge.Manufacturer" "Atari - GCC, Mark Ackerman, Tom Calderwood, Glenn Parker" "Cartridge.ModelNo" "CX2684" "Cartridge.Name" "Galaxian (1983) (Atari)" "" @@ -3285,7 +3285,7 @@ "Cartridge.MD5" "297c405afd01f3ac48cdb67b00d273fe" "Cartridge.Manufacturer" "Atari - GCC, Ava-Robin Cohen" "Cartridge.ModelNo" "CX26123, CX26123P" -"Cartridge.Name" "Jr. Pac-Man (1984) (Atari) (PAL)" +"Cartridge.Name" "Jr. Pac-Man (1986) (Atari) (PAL)" "" "Cartridge.MD5" "2982e655dffc89d218a0a3072cfc6811" @@ -3456,7 +3456,7 @@ "" "Cartridge.MD5" "2bb9f4686f7e08c5fcc69ec1a1c66fe7" -"Cartridge.Manufacturer" "Atari - GCC, Mike Feinstein, John Allred" +"Cartridge.Manufacturer" "Atari - GCC, John Allred, Mike Feinstein" "Cartridge.ModelNo" "CX2688" "Cartridge.Name" "Jungle Hunt (1983) (Atari)" "" @@ -3474,7 +3474,7 @@ "" "Cartridge.MD5" "2bee7f226d506c217163bad4ab1768c0" -"Cartridge.Manufacturer" "Xonox - K-Tel Software - Beck-Tech" +"Cartridge.Manufacturer" "Xonox - K-Tel Software - Beck-Tech, Steve Beck" "Cartridge.ModelNo" "6210, 06002, 06004, 99002" "Cartridge.Name" "Ghost Manor (1983) (Xonox)" "" @@ -3627,17 +3627,17 @@ "" "Cartridge.MD5" "2d76c5d1aad506442b9e9fb67765e051" -"Cartridge.Manufacturer" "Games by Apollo - Larry Minor, Ernie Runyon, Ed Salvo" +"Cartridge.Manufacturer" "Apollo - Games by Apollo, Larry Minor, Ernie Runyon, Ed Salvo" "Cartridge.ModelNo" "AP-2004" -"Cartridge.Name" "Lost Luggage (1981) (Apollo) [no opening scene]" +"Cartridge.Name" "Lost Luggage (1982) (Apollo) [no opening scene]" "Cartridge.Note" "AKA Airport Mayhem" "" "Cartridge.MD5" "2d9e5d8d083b6367eda880e80dfdfaeb" -"Cartridge.Manufacturer" "Selchow & Righter - QDI, Mike Montana, Rich Montana" +"Cartridge.Manufacturer" "QDI, Mike Montana, Rich Montana - Selchow & Righter" "Cartridge.ModelNo" "87" -"Cartridge.Name" "Glib (1983) (Selchow & Righter)" -"Cartridge.Note" "Enduro (Dactari - Milmar)" +"Cartridge.Name" "Glib (1983) (QDI)" +"Cartridge.Note" "AKA Video Word Game" "" "Cartridge.MD5" "2d9e65959808a6098c16c82a59c9d9dc" @@ -3838,10 +3838,11 @@ "Cartridge.Manufacturer" "Atari, Jim Huether - Sears" "Cartridge.ModelNo" "CX2644 - 6-99824" "Cartridge.Name" "Flag Capture (1978) (Atari)" +"Cartridge.Note" "AKA Capture the Flag" "" "Cartridge.MD5" "30516cfbaa1bc3b5335ee53ad811f17a" -"Cartridge.Manufacturer" "Wizard Video Games, Robert Barber, Tim Martin" +"Cartridge.Manufacturer" "Wizard Video Games - MicroGraphic Image, Robert Barber, Tim Martin" "Cartridge.ModelNo" "007" "Cartridge.Name" "Halloween (1983) (Wizard Video Games)" "" @@ -3982,7 +3983,7 @@ "" "Cartridge.MD5" "31e518debba46df6226b535fa8bd2543" -"Cartridge.Manufacturer" "Atari, Douglas 'Solaris' Neubauer" +"Cartridge.Manufacturer" "Atari, Douglas 'Solaris' Neubauer, Mimi Nyden" "Cartridge.ModelNo" "CX26134" "Cartridge.Name" "Last Starfighter (1984) (Atari) (Prototype)" "Cartridge.Note" "Solaris Beta" @@ -4011,9 +4012,9 @@ "" "Cartridge.MD5" "321c3451129357af42a375d12afd4450" -"Cartridge.Manufacturer" "Atari" +"Cartridge.Manufacturer" "Atari - Imagineering, Dan Kitchen" "Cartridge.ModelNo" "CX26177" -"Cartridge.Name" "Ikari Warriors (1989) (Atari) (PAL)" +"Cartridge.Name" "Ikari Warriors (1991) (Atari) (PAL)" "" "Cartridge.MD5" "32244e55ce6ec6bfbd763f33384bdc2e" @@ -4385,7 +4386,7 @@ "Cartridge.MD5" "36c29ceee2c151b23a1ad7aa04bd529d" "Cartridge.Manufacturer" "Atari - GCC, Ava-Robin Cohen" "Cartridge.ModelNo" "CX26123" -"Cartridge.Name" "Jr. Pac-Man (1984) (Atari)" +"Cartridge.Name" "Jr. Pac-Man (1986) (Atari)" "" "Cartridge.MD5" "36c31bb5daeb103f488c66de67ac5075" @@ -4772,7 +4773,7 @@ "Cartridge.MD5" "3b69f8929373598e1752f43f8da61aa4" "Cartridge.Manufacturer" "Apollo - Games by Apollo - RCA Video Jeux" "Cartridge.ModelNo" "AP-2006" -"Cartridge.Name" "Infiltrate (1981) (Apollo) (PAL)" +"Cartridge.Name" "Infiltrate (1921) (Apollo) (PAL)" "Display.Phosphor" "YES" "" @@ -5001,7 +5002,7 @@ "" "Cartridge.MD5" "3e03086da53ecc29d855d8edf10962cb" -"Cartridge.Manufacturer" "CBS Electronics, Joe Gaucher, Alex Leavens" +"Cartridge.Manufacturer" "CBS Electronics - Roklan, Joe Gaucher, Alex Leavens" "Cartridge.ModelNo" "4L1751, 4L1752, 4L1753, 4L2275" "Cartridge.Name" "Gorf (1982) (CBS Electronics) (PAL)" "Display.Phosphor" "YES" @@ -5280,7 +5281,7 @@ "" "Cartridge.MD5" "40d8ed6a5106245aa79f05642a961485" -"Cartridge.Manufacturer" "Xonox - K-Tel Software - Beck-Tech" +"Cartridge.Manufacturer" "Xonox - K-Tel Software - Beck-Tech, Steve Beck" "Cartridge.ModelNo" "6210, 06002, 06004, 99002" "Cartridge.Name" "Ghost Manor (1983) (Xonox) (PAL)" "Display.YStart" "30" @@ -5717,7 +5718,7 @@ "" "Cartridge.MD5" "4767356fa0ed3ebe21437b4473d4ee28" -"Cartridge.Manufacturer" "Atari, Dan Hitchens" +"Cartridge.Manufacturer" "Atari, Dan Hitchens, Mimi Nyden" "Cartridge.ModelNo" "CX2685" "Cartridge.Name" "Gravitar (04-12-1983) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -5776,7 +5777,7 @@ "" "Cartridge.MD5" "47cd61f83457a0890de381e478f5cf5f" -"Cartridge.Manufacturer" "Imagic, Wilfredo 'Willy' Aguilar, Michael Becker, Rob Fulop" +"Cartridge.Manufacturer" "Imagic, Wilfredo Aguilar, Michael Becker, Rob Fulop" "Cartridge.ModelNo" "720111-2A, 13205" "Cartridge.Name" "Fathom (1983) (Imagic) (PAL)" "Cartridge.Note" "AKA Scuba" @@ -5803,7 +5804,7 @@ "" "Cartridge.MD5" "48411c9ef7e2cef1d6b2bee0e6055c27" -"Cartridge.Manufacturer" "Telesys, Don 'Donyo' Ruffcorn, Jack Woodman" +"Cartridge.Manufacturer" "Telesys, Don Ruffcorn, Jack Woodman" "Cartridge.ModelNo" "1003" "Cartridge.Name" "Fast Food (1982) (Telesys) (PAL)" "" @@ -6009,13 +6010,12 @@ "" "Cartridge.MD5" "4ac9f40ddfcf194bd8732a75b3f2f214" -"Cartridge.Manufacturer" "Atari, Stephan R. Keith, Preston Stuart" +"Cartridge.Manufacturer" "Atari - CCW, Stephan R. Keith, Laura Scholl, Preston Stuart" "Cartridge.ModelNo" "CX26106" "Cartridge.Name" "Grover's Music Maker (12-29-1982) (Atari) (Prototype)" -"Cartridge.Note" "Uses Kids/Keypad Controllers" +"Cartridge.Note" "Uses Keypad Controller" "Cartridge.Rarity" "Prototype" "Controller.Left" "KEYBOARD" -"Controller.Right" "KEYBOARD" "" "Cartridge.MD5" "4ae8c76cd6f24a2e181ae874d4d2aa3d" @@ -7051,7 +7051,7 @@ "" "Cartridge.MD5" "590ac71fa5f71d3eb29c41023b09ade9" -"Cartridge.Manufacturer" "Atari - GCC, Mark Ackerman, Glenn Parker" +"Cartridge.Manufacturer" "Atari - GCC, Mark Ackerman, Tom Calderwood, Glenn Parker" "Cartridge.ModelNo" "CX2684" "Cartridge.Name" "Galaxian (01-05-1983) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -7150,9 +7150,9 @@ "" "Cartridge.MD5" "5a2f2dcd775207536d9299e768bcd2df" -"Cartridge.Manufacturer" "Quelle" +"Cartridge.Manufacturer" "Otto Versand" "Cartridge.ModelNo" "781698" -"Cartridge.Name" "Flippern (Double-Game Package) (1983) (Quelle) (PAL)" +"Cartridge.Name" "Flippern (Double-Game Package) (1983) (Otto Versand) (PAL)" "Cartridge.Note" "AKA Video Pinball" "" @@ -7292,7 +7292,7 @@ "" "Cartridge.MD5" "5babe0cad3ec99d76b0aa1d36a695d2f" -"Cartridge.Manufacturer" "Coleco, Ed Temple" +"Cartridge.Manufacturer" "Coleco - Individeo, Ed Temple" "Cartridge.ModelNo" "2654" "Cartridge.Name" "Looping (1983) (Coleco) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -7493,7 +7493,7 @@ "" "Cartridge.MD5" "5e0c37f534ab5ccc4661768e2ddf0162" -"Cartridge.Manufacturer" "Telegames, Ed Salvo" +"Cartridge.Manufacturer" "Telegames - VSS, Ed Salvo" "Cartridge.ModelNo" "5667 A106" "Cartridge.Name" "Glacier Patrol (1988) (Telegames)" "" @@ -7867,6 +7867,11 @@ "Cartridge.Rarity" "New Release" "" +"Cartridge.MD5" "62d1f50219edf9a429a9f004c19f31b3" +"Cartridge.Manufacturer" "JWDA, Todd Marshall" +"Cartridge.Name" "Euro Gen (02-01-83) (JWDA) (PAL)" +"" + "Cartridge.MD5" "62f74a2736841191135514422b20382d" "Cartridge.Name" "Pharaoh's Curse (Unknown)" "Display.Format" "PAL60" @@ -8186,7 +8191,7 @@ "" "Cartridge.MD5" "665b8f8ead0eef220ed53886fbd61ec9" -"Cartridge.Manufacturer" "Telesys, Don 'Donyo' Ruffcorn, Jack Woodman" +"Cartridge.Manufacturer" "Telesys, Don Ruffcorn, Jack Woodman" "Cartridge.ModelNo" "1003" "Cartridge.Name" "Fast Food (1982) (Telesys)" "" @@ -8222,7 +8227,7 @@ "" "Cartridge.MD5" "66b89ba44e7ae0b51f9ef000ebba1eb7" -"Cartridge.Manufacturer" "Atari, Stephan R. Keith, Preston Stuart" +"Cartridge.Manufacturer" "Atari - CCW, Stephan R. Keith, Laura Scholl, Preston Stuart" "Cartridge.ModelNo" "CX26106" "Cartridge.Name" "Grover's Music Maker (01-18-1983) (Atari) (Prototype)" "Cartridge.Note" "Uses Keypad Controller" @@ -8331,7 +8336,7 @@ "" "Cartridge.MD5" "67cdde4176e0447fc45a71e0a1cdd288" -"Cartridge.Manufacturer" "Telegames, Ed Salvo" +"Cartridge.Manufacturer" "Telegames - VSS, Ed Salvo" "Cartridge.ModelNo" "5665 A016" "Cartridge.Name" "Glacier Patrol (1988) (Telegames) (PAL)" "" @@ -8872,7 +8877,7 @@ "" "Cartridge.MD5" "6e179eee3d4631a7434d40cf7aeea6e8" -"Cartridge.Manufacturer" "Wizard Video Games, Robert Barber, Tim Martin" +"Cartridge.Manufacturer" "Wizard Video Games - MicroGraphic Image, Robert Barber, Tim Martin" "Cartridge.ModelNo" "007" "Cartridge.Name" "Halloween (1983) (Wizard Video Games) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -9096,7 +9101,7 @@ "" "Cartridge.MD5" "71464c54da46adae9447926fdbfc1abe" -"Cartridge.Manufacturer" "M Network, Bruce Pedersen - INTV" +"Cartridge.Manufacturer" "M Network - APh Technological Consulting, Bruce Pedersen - INTV" "Cartridge.ModelNo" "MT5663" "Cartridge.Name" "Lock 'n' Chase (1982) (M Network)" "" @@ -9131,7 +9136,7 @@ "Cartridge.MD5" "718ae62c70af4e5fd8e932fee216948a" "Cartridge.Manufacturer" "Data Age, J. Ray Dettling" "Cartridge.ModelNo" "112-006" -"Cartridge.Name" "Journey Escape (1982) (Data Age)" +"Cartridge.Name" "Journey Escape (1983) (Data Age)" "Display.Phosphor" "YES" "" @@ -9278,7 +9283,7 @@ "" "Cartridge.MD5" "73aa02458b413091ac940c0489301710" -"Cartridge.Manufacturer" "Quelle" +"Cartridge.Manufacturer" "Quelle - Otto Versand" "Cartridge.ModelNo" "463.574 4 - 781393, 986153" "Cartridge.Name" "Kampf dem Steinfresser (1983) (Quelle) (PAL)" "Cartridge.Note" "Boom Bang (AKA Crackpots)" @@ -9576,9 +9581,9 @@ "" "Cartridge.MD5" "76ee917d817ef9a654bc4783e0273ac4" -"Cartridge.Manufacturer" "Quelle" +"Cartridge.Manufacturer" "Otto Versand" "Cartridge.ModelNo" "311377" -"Cartridge.Name" "Fox & Goat (Double-Game Package) (1983) (Quelle) (PAL)" +"Cartridge.Name" "Fox & Goat (Double-Game Package) (1983) (Otto Versand) (PAL)" "Cartridge.Note" "AKA Nuts" "Display.YStart" "45" "Display.Height" "256" @@ -9917,7 +9922,7 @@ "" "Cartridge.MD5" "7b43c32e3d4ff5932f39afcb4c551627" -"Cartridge.Manufacturer" "Syncro, Dan Wolf" +"Cartridge.Manufacturer" "Syncro, Daniel Wolf" "Cartridge.Name" "Kamikaze Saucers (1983) (Syncro) (Prototype)" "Cartridge.Rarity" "Prototype" "Display.Height" "222" @@ -9978,9 +9983,9 @@ "" "Cartridge.MD5" "7c00e7a205d3fda98eb20da7c9c50a55" -"Cartridge.Manufacturer" "Games by Apollo - Larry Minor, Ernie Runyon, Ed Salvo" +"Cartridge.Manufacturer" "Apollo - Games by Apollo, Larry Minor, Ernie Runyon, Ed Salvo" "Cartridge.ModelNo" "AP-2004" -"Cartridge.Name" "Lost Luggage (1981) (Apollo)" +"Cartridge.Name" "Lost Luggage (1982) (Apollo)" "Cartridge.Note" "AKA Airport Mayhem" "" @@ -10354,7 +10359,7 @@ "" "Cartridge.MD5" "803393ed29a9e9346569dd1bf209907b" -"Cartridge.Manufacturer" "Atari - GCC, Mark Ackerman, Glenn Parker" +"Cartridge.Manufacturer" "Atari - GCC, Mark Ackerman, Tom Calderwood, Glenn Parker" "Cartridge.ModelNo" "CX2684" "Cartridge.Name" "Galaxian (02-04-1983) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -10528,7 +10533,7 @@ "" "Cartridge.MD5" "81b3bf17cf01039d311b4cd738ae608e" -"Cartridge.Manufacturer" "CBS Electronics, Joe Gaucher, Alex Leavens" +"Cartridge.Manufacturer" "CBS Electronics - Roklan, Joe Gaucher, Alex Leavens" "Cartridge.ModelNo" "M8776, M8793" "Cartridge.Name" "Gorf (1982) (CBS Electronics)" "Display.Phosphor" "YES" @@ -10841,7 +10846,8 @@ "Cartridge.MD5" "86128001e69ab049937f265911ce7e8a" "Cartridge.Manufacturer" "Apollo - Games by Apollo, Steve Stringfellow" "Cartridge.ModelNo" "AP-2005" -"Cartridge.Name" "Lochjaw (1981) (Apollo)" +"Cartridge.Name" "Lochjaw (1982) (Apollo)" +"Display.YStart" "28" "" "Cartridge.MD5" "862cf669cbced78f9ed31a5d375b2ebe" @@ -11192,7 +11198,7 @@ "" "Cartridge.MD5" "8ac18076d01a6b63acf6e2cab4968940" -"Cartridge.Manufacturer" "Atari, Dan Hitchens" +"Cartridge.Manufacturer" "Atari, Dan Hitchens, Mimi Nyden" "Cartridge.ModelNo" "CX2685" "Cartridge.Name" "Gravitar (1983) (Atari)" "" @@ -11917,7 +11923,7 @@ "" "Cartridge.MD5" "95351b46fa9c45471d852d28b9b4e00b" -"Cartridge.Manufacturer" "Atari" +"Cartridge.Manufacturer" "Atari, Tom Rudadahl" "Cartridge.ModelNo" "CX26163P" "Cartridge.Name" "Golf (32 in 1) (1988) (Atari) (PAL)" "" @@ -12254,9 +12260,9 @@ "" "Cartridge.MD5" "9a21fba9ee9794e0fadd7c7eb6be4e12" -"Cartridge.Manufacturer" "Atari" +"Cartridge.Manufacturer" "Atari - Imagineering, Dan Kitchen" "Cartridge.ModelNo" "CX26177" -"Cartridge.Name" "Ikari Warriors (1989) (Atari)" +"Cartridge.Name" "Ikari Warriors (1991) (Atari)" "" "Cartridge.MD5" "9a25b3cfe2bbb847b66a97282200cca2" @@ -12621,7 +12627,7 @@ "" "Cartridge.MD5" "9fc2d1627dcdd8925f4c042e38eb0bc9" -"Cartridge.Manufacturer" "Atari - GCC, Mike Feinstein, John Allred" +"Cartridge.Manufacturer" "Atari - GCC, John Allred, Mike Feinstein" "Cartridge.ModelNo" "CX2688, CX2688P" "Cartridge.Name" "Jungle Hunt (1983) (Atari) (PAL)" "" @@ -13084,7 +13090,7 @@ "" "Cartridge.MD5" "a56b642a3d3ab9bbeee63cd44eb73216" -"Cartridge.Manufacturer" "Carrere Video, Sylvia Day, Henry Will IV - Teldec" +"Cartridge.Manufacturer" "Carrere Video - JWDA, Sylvia Day, Todd Marshall, Robin McDaniel, Henry Will IV - Teldec - Prism" "Cartridge.ModelNo" "USC2001" "Cartridge.Name" "Gopher (1983) (Carrere Video) (PAL)" "Cartridge.Note" "AKA Vossicht Whlmaus!" @@ -13828,7 +13834,7 @@ "Cartridge.MD5" "afe88aae81d99e0947c0cfb687b16251" "Cartridge.Manufacturer" "Apollo - Games by Apollo" "Cartridge.ModelNo" "AP-2006" -"Cartridge.Name" "Infiltrate (1981) (Apollo)" +"Cartridge.Name" "Infiltrate (1982) (Apollo)" "Display.Phosphor" "YES" "" @@ -14086,7 +14092,7 @@ "" "Cartridge.MD5" "b311ab95e85bc0162308390728a7361d" -"Cartridge.Manufacturer" "Parker Brothers" +"Cartridge.Manufacturer" "Parker Brothers - Roklan" "Cartridge.ModelNo" "PB5080" "Cartridge.Name" "Gyruss (1984) (Parker Bros)" "Display.Phosphor" "YES" @@ -14127,7 +14133,7 @@ "" "Cartridge.MD5" "b4030c38a720dd84b84178b6ce1fc749" -"Cartridge.Manufacturer" "M Network, Kevin Miller" +"Cartridge.Manufacturer" "M Network - APh Technological Consulting, Kevin Miller" "Cartridge.ModelNo" "MT5687" "Cartridge.Name" "International Soccer (1982) (M Network)" "" @@ -14394,7 +14400,7 @@ "" "Cartridge.MD5" "b80d50ecee73919a507498d0a4d922ae" -"Cartridge.Manufacturer" "20th Century Fox Video Games, David Lubar" +"Cartridge.Manufacturer" "20th Century Fox Video Games - Sirius Software, David Lubar" "Cartridge.ModelNo" "11008" "Cartridge.Name" "Fantastic Voyage (1982) (20th Century Fox)" "" @@ -14567,7 +14573,7 @@ "" "Cartridge.MD5" "bae66907c3200bc63592efe5a9a69dbb" -"Cartridge.Manufacturer" "Spectravision, Spectravideo - Quelle" +"Cartridge.Manufacturer" "Spectravision - Spectravideo - Quelle" "Cartridge.ModelNo" "SA-201 - 412.783 3" "Cartridge.Name" "Gangster Alley (1982) (Spectravision) (PAL)" "" @@ -14952,7 +14958,7 @@ "" "Cartridge.MD5" "c16c79aad6272baffb8aae9a7fff0864" -"Cartridge.Manufacturer" "U.S. Games Corporation, Sylvia Day, Henry Will IV" +"Cartridge.Manufacturer" "U.S. Games Corporation - JWDA, Sylvia Day, Todd Marshall, Robin McDaniel, Henry Will IV" "Cartridge.ModelNo" "VC2001" "Cartridge.Name" "Gopher (1982) (U.S. Games)" "Cartridge.Note" "AKA Gopher Attack" @@ -15687,7 +15693,7 @@ "" "Cartridge.MD5" "ca7aaebd861a9ef47967d31c5a6c4555" -"Cartridge.Manufacturer" "Atari" +"Cartridge.Manufacturer" "Atari, Bob Whitehead" "Cartridge.ModelNo" "CX26163P" "Cartridge.Name" "Homerun (32 in 1) (1988) (Atari) (PAL)" "Console.SwapPorts" "YES" @@ -15911,9 +15917,9 @@ "" "Cartridge.MD5" "ccd6ce508eee4b3fca67212833edcd85" -"Cartridge.Manufacturer" "Quelle" +"Cartridge.Manufacturer" "Otto Versand" "Cartridge.ModelNo" "746422" -"Cartridge.Name" "Hot Wave (Double-Game Package) (1983) (Quelle) (PAL)" +"Cartridge.Name" "Hot Wave (Double-Game Package) (1983) (Otto Versand) (PAL)" "Cartridge.Note" "AKA Ram It" "" @@ -16039,7 +16045,7 @@ "" "Cartridge.MD5" "ce243747bf34a2de366f846b3f4ca772" -"Cartridge.Manufacturer" "Home Vision - Gem International Corp." +"Cartridge.Manufacturer" "Home Vision - Gem International Corp. - VDI" "Cartridge.Name" "Jacky Jump (1983) (Home Vision) (PAL)" "Cartridge.Note" "AKA Bobby Is Going Home" "Display.Height" "256" @@ -16336,9 +16342,9 @@ "" "Cartridge.MD5" "d0b26e908370683ad99bc6b52137a784" -"Cartridge.Manufacturer" "Games by Apollo - Larry Minor, Ernie Runyon, Ed Salvo - RCA Video Jeux" +"Cartridge.Manufacturer" "Apollo - Games by Apollo, Larry Minor, Ernie Runyon, Ed Salvo - RCA Video Jeux" "Cartridge.ModelNo" "AP-2004" -"Cartridge.Name" "Lost Luggage (1981) (Apollo) (PAL)" +"Cartridge.Name" "Lost Luggage (1982) (Apollo) (PAL)" "Cartridge.Note" "AKA La valise piegee" "" @@ -17273,9 +17279,10 @@ "" "Cartridge.MD5" "dcc2956c7a39fdbf1e861fc5c595da0d" -"Cartridge.Manufacturer" "M Network, David Rolfe - INTV" +"Cartridge.Manufacturer" "M Network - APh Technological Consulting, David Rolfe - INTV" "Cartridge.ModelNo" "MT5664" "Cartridge.Name" "Frogs and Flies (1982) (M Network)" +"Cartridge.Note" "AKA Frogs 'n' Flies" "" "Cartridge.MD5" "dcec46a98f45b193f07239611eb878c2" @@ -17611,7 +17618,7 @@ "" "Cartridge.MD5" "e04f1c1e4401d584d3f4343410a5bcc4" -"Cartridge.Manufacturer" "Wizard Video Games, Robert Barber, Tim Martin" +"Cartridge.Manufacturer" "Wizard Video Games - MicroGraphic Image, Robert Barber, Tim Martin" "Cartridge.ModelNo" "007" "Cartridge.Name" "Halloween (1983) (Wizard Video Games) (Prototype) [a]" "Cartridge.Rarity" "Prototype" @@ -17777,7 +17784,7 @@ "" "Cartridge.MD5" "e21ee3541ebd2c23e817ffb449939c37" -"Cartridge.Manufacturer" "Tigervision, Karl T. Olinger" +"Cartridge.Manufacturer" "Tigervision - Software Electronics Corp., Karl T. Olinger - Teldec" "Cartridge.ModelNo" "7-001" "Cartridge.Name" "King Kong (1982) (Tigervision)" "Display.YStart" "28" @@ -18033,9 +18040,9 @@ "" "Cartridge.MD5" "e51030251e440cffaab1ac63438b44ae" -"Cartridge.Manufacturer" "Parker Brothers, Joe Gaucher, Louis Marbel" +"Cartridge.Manufacturer" "Parker Brothers - On-Time Software, Joe Gaucher, Louis Marbel" "Cartridge.ModelNo" "PB5110" -"Cartridge.Name" "James Bond 007 (1983) (Parker Bros)" +"Cartridge.Name" "James Bond 007 (1984) (Parker Bros)" "Cartridge.Rarity" "Rare" "Display.Phosphor" "YES" "" @@ -18063,7 +18070,7 @@ "" "Cartridge.MD5" "e556e07cc06c803f2955986f53ef63ed" -"Cartridge.Manufacturer" "Coleco, Ed Temple" +"Cartridge.Manufacturer" "Coleco - Individeo, Ed Temple" "Cartridge.ModelNo" "2665" "Cartridge.Name" "Front Line (1984) (Coleco)" "" @@ -18135,7 +18142,7 @@ "" "Cartridge.MD5" "e600f5e98a20fafa47676198efe6834d" -"Cartridge.Manufacturer" "Parker Brothers" +"Cartridge.Manufacturer" "Parker Brothers - Roklan" "Cartridge.ModelNo" "PB5080" "Cartridge.Name" "Gyruss (1984) (Parker Bros) (PAL)" "Display.Phosphor" "YES" @@ -18844,7 +18851,7 @@ "Cartridge.MD5" "eed9eaf1a0b6a2b9bc4c8032cb43e3fb" "Cartridge.Manufacturer" "Atari - Axlon, Steve DeFrisco" "Cartridge.ModelNo" "CX26192" -"Cartridge.Name" "Klax (1990) (Atari) (PAL)" +"Cartridge.Name" "Klax (1991) (Atari) (PAL)" "" "Cartridge.MD5" "eee7695ae3eea7818321df0b790b31f3" @@ -19479,7 +19486,7 @@ "Cartridge.Manufacturer" "ZiMAG - Emag - Vidco" "Cartridge.ModelNo" "710-111 - GN-010" "Cartridge.Name" "I Want My Mommy (1983) (ZiMAG)" -"Cartridge.Note" "AKA Open Sesame" +"Display.YStart" "30" "Display.Phosphor" "YES" "" @@ -20155,7 +20162,7 @@ "" "Cartridge.MD5" "fd16949913aaab5beaefed73bf2ca67c" -"Cartridge.Manufacturer" "Atari - GCC, Mike Feinstein, John Allred" +"Cartridge.Manufacturer" "Atari - GCC, John Allred, Mike Feinstein" "Cartridge.ModelNo" "CX2688" "Cartridge.Name" "Jungle Hunt (02-03-1983) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -20362,7 +20369,3 @@ "Cartridge.Name" "Spitfire Attack (1983) (Milton Bradley) [h1]" "" -"Cartridge.MD5" "62d1f50219edf9a429a9f004c19f31b3" -"Cartridge.Manufacturer" "JWDA, Todd Marshall" -"Cartridge.Name" "Euro Gen (02-01-83) (JWDA) (PAL)" -"" From f61e45829c79b1291941dc7e837eb81ae7de86d9 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 20 Dec 2017 16:20:52 +0100 Subject: [PATCH 114/156] changed tracking for collisions and various TIA status registers added --- docs/debugger.html | 4 +- src/debugger/TIADebug.cxx | 66 ++++++++++++++++++++++++++ src/debugger/TIADebug.hxx | 4 ++ src/debugger/gui/TiaWidget.cxx | 54 ++++++++++----------- src/debugger/gui/TogglePixelWidget.cxx | 16 +++++++ 5 files changed, 115 insertions(+), 29 deletions(-) diff --git a/docs/debugger.html b/docs/debugger.html index 4f1d506cc..10c43e512 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -388,8 +388,8 @@ in detail in the User's Guide.


        Change Tracking

        -

        The debugger tracks changes to the CPU registers and RAM by displaying -changed locations or registers with a red background after each step, +

        The debugger tracks changes to the CPU, TIA and RIOT registers and RAM by +displaying changed locations or registers with a red background after each step, trace, scanline, or frame advance. This sounds simple, and it is, but it's also amazingly useful.

        diff --git a/src/debugger/TIADebug.cxx b/src/debugger/TIADebug.cxx index b2e1ad755..2ed0cc518 100644 --- a/src/debugger/TIADebug.cxx +++ b/src/debugger/TIADebug.cxx @@ -60,6 +60,24 @@ const DebuggerState& TIADebug::getState() myState.fixedCols.push_back(myTIA.myFixedColorPalette[mode][TIA::BL]); myState.fixedCols.push_back(TIA::FixedColor::HBLANK_WHITE); + // Collisions + myState.cx.clear(); + myState.cx.push_back(collP0_PF()); + myState.cx.push_back(collP0_BL()); + myState.cx.push_back(collM1_P0()); + myState.cx.push_back(collM0_P0()); + myState.cx.push_back(collP0_P1()); + myState.cx.push_back(collP1_PF()); + myState.cx.push_back(collP1_BL()); + myState.cx.push_back(collM1_P1()); + myState.cx.push_back(collM0_P1()); + myState.cx.push_back(collM0_PF()); + myState.cx.push_back(collM0_BL()); + myState.cx.push_back(collM0_M1()); + myState.cx.push_back(collM1_PF()); + myState.cx.push_back(collM1_BL()); + myState.cx.push_back(collBL_PF()); + // Player 0 & 1 and Ball graphics registers myState.gr.clear(); myState.gr.push_back(myTIA.myPlayer0.getGRPNew()); @@ -69,6 +87,18 @@ const DebuggerState& TIADebug::getState() myState.gr.push_back(myTIA.myBall.getENABLNew()); myState.gr.push_back(myTIA.myBall.getENABLOld()); + // Player 0 & 1, Missile 0 & 1 and Ball graphics status registers + myState.ref.clear(); + myState.ref.push_back(refP0()); + myState.ref.push_back(refP1()); + myState.vdel.clear(); + myState.vdel.push_back(vdelP0()); + myState.vdel.push_back(vdelP1()); + myState.vdel.push_back(vdelBL()); + myState.res.clear(); + myState.res.push_back(resMP0()); + myState.res.push_back(resMP1()); + // Position registers myState.pos.clear(); myState.pos.push_back(posP0()); @@ -90,6 +120,9 @@ const DebuggerState& TIADebug::getState() myState.pf.push_back(pf0()); myState.pf.push_back(pf1()); myState.pf.push_back(pf2()); + myState.pf.push_back(refPF()); + myState.pf.push_back(scorePF()); + myState.pf.push_back(priorityPF()); // Size registers myState.size.clear(); @@ -131,6 +164,24 @@ void TIADebug::saveOldState() myOldState.coluRegs.push_back(coluPF()); myOldState.coluRegs.push_back(coluBK()); + // Collisions + myOldState.cx.clear(); + myOldState.cx.push_back(collP0_PF()); + myOldState.cx.push_back(collP0_BL()); + myOldState.cx.push_back(collM1_P0()); + myOldState.cx.push_back(collM0_P0()); + myOldState.cx.push_back(collP0_P1()); + myOldState.cx.push_back(collP1_PF()); + myOldState.cx.push_back(collP1_BL()); + myOldState.cx.push_back(collM1_P1()); + myOldState.cx.push_back(collM0_P1()); + myOldState.cx.push_back(collM0_PF()); + myOldState.cx.push_back(collM0_BL()); + myOldState.cx.push_back(collM0_M1()); + myOldState.cx.push_back(collM1_PF()); + myOldState.cx.push_back(collM1_BL()); + myOldState.cx.push_back(collBL_PF()); + // Player 0 & 1 graphics registers myOldState.gr.clear(); myOldState.gr.push_back(myTIA.myPlayer0.getGRPNew()); @@ -140,6 +191,18 @@ void TIADebug::saveOldState() myOldState.gr.push_back(myTIA.myBall.getENABLNew()); myOldState.gr.push_back(myTIA.myBall.getENABLOld()); + // Player 0 & 1, Missile 0 & 1 and Ball graphics status registers + myOldState.ref.clear(); + myOldState.ref.push_back(refP0()); + myOldState.ref.push_back(refP1()); + myOldState.vdel.clear(); + myOldState.vdel.push_back(vdelP0()); + myOldState.vdel.push_back(vdelP1()); + myOldState.vdel.push_back(vdelBL()); + myOldState.res.clear(); + myOldState.res.push_back(resMP0()); + myOldState.res.push_back(resMP1()); + // Position registers myOldState.pos.clear(); myOldState.pos.push_back(posP0()); @@ -161,6 +224,9 @@ void TIADebug::saveOldState() myOldState.pf.push_back(pf0()); myOldState.pf.push_back(pf1()); myOldState.pf.push_back(pf2()); + myOldState.pf.push_back(refPF()); + myOldState.pf.push_back(scorePF()); + myOldState.pf.push_back(priorityPF()); // Size registers myOldState.size.clear(); diff --git a/src/debugger/TIADebug.hxx b/src/debugger/TIADebug.hxx index 55fe764d0..6b1d4f6bb 100644 --- a/src/debugger/TIADebug.hxx +++ b/src/debugger/TIADebug.hxx @@ -39,7 +39,11 @@ class TiaState : public DebuggerState public: IntArray coluRegs; IntArray fixedCols; + BoolArray cx; IntArray gr; + BoolArray ref; + BoolArray vdel; + BoolArray res; IntArray pos; IntArray hm; IntArray pf; diff --git a/src/debugger/gui/TiaWidget.cxx b/src/debugger/gui/TiaWidget.cxx index a0dc84676..7a7bb1832 100644 --- a/src/debugger/gui/TiaWidget.cxx +++ b/src/debugger/gui/TiaWidget.cxx @@ -915,21 +915,21 @@ void TiaWidget::loadConfig() //////////////////////////// // Collision register bits //////////////////////////// - myCollision[kP0_PFID]->setState(tia.collP0_PF()); - myCollision[kP0_BLID]->setState(tia.collP0_BL()); - myCollision[kP0_M1ID]->setState(tia.collM1_P0()); - myCollision[kP0_M0ID]->setState(tia.collM0_P0()); - myCollision[kP0_P1ID]->setState(tia.collP0_P1()); - myCollision[kP1_PFID]->setState(tia.collP1_PF()); - myCollision[kP1_BLID]->setState(tia.collP1_BL()); - myCollision[kP1_M1ID]->setState(tia.collM1_P1()); - myCollision[kP1_M0ID]->setState(tia.collM0_P1()); - myCollision[kM0_PFID]->setState(tia.collM0_PF()); - myCollision[kM0_BLID]->setState(tia.collM0_BL()); - myCollision[kM0_M1ID]->setState(tia.collM0_M1()); - myCollision[kM1_PFID]->setState(tia.collM1_PF()); - myCollision[kM1_BLID]->setState(tia.collM1_BL()); - myCollision[kBL_PFID]->setState(tia.collBL_PF()); + myCollision[kP0_PFID]->setState(tia.collP0_PF(), state.cx[0] != oldstate.cx[0]); + myCollision[kP0_BLID]->setState(tia.collP0_BL(), state.cx[1] != oldstate.cx[1]); + myCollision[kP0_M1ID]->setState(tia.collM1_P0(), state.cx[2] != oldstate.cx[2]); + myCollision[kP0_M0ID]->setState(tia.collM0_P0(), state.cx[3] != oldstate.cx[3]); + myCollision[kP0_P1ID]->setState(tia.collP0_P1(), state.cx[4] != oldstate.cx[4]); + myCollision[kP1_PFID]->setState(tia.collP1_PF(), state.cx[5] != oldstate.cx[5]); + myCollision[kP1_BLID]->setState(tia.collP1_BL(), state.cx[6] != oldstate.cx[6]); + myCollision[kP1_M1ID]->setState(tia.collM1_P1(), state.cx[7] != oldstate.cx[7]); + myCollision[kP1_M0ID]->setState(tia.collM0_P1(), state.cx[8] != oldstate.cx[8]); + myCollision[kM0_PFID]->setState(tia.collM0_PF(), state.cx[9] != oldstate.cx[9]); + myCollision[kM0_BLID]->setState(tia.collM0_BL(), state.cx[10] != oldstate.cx[10]); + myCollision[kM0_M1ID]->setState(tia.collM0_M1(), state.cx[11] != oldstate.cx[11]); + myCollision[kM1_PFID]->setState(tia.collM1_PF(), state.cx[12] != oldstate.cx[12]); + myCollision[kM1_BLID]->setState(tia.collM1_BL(), state.cx[13] != oldstate.cx[13]); + myCollision[kBL_PFID]->setState(tia.collBL_PF(), state.cx[14] != oldstate.cx[14]); //////////////////////////// // P0 register info @@ -957,8 +957,8 @@ void TiaWidget::loadConfig() myHMP0->setList(0, state.hm[P0], state.hm[P0] != oldstate.hm[P0]); // refP0 & vdelP0 - myRefP0->setState(tia.refP0()); - myDelP0->setState(tia.vdelP0()); + myRefP0->setState(tia.refP0(), state.ref[P0] != oldstate.ref[P0]); + myDelP0->setState(tia.vdelP0(), state.vdel[P0] != oldstate.vdel[P0]); // NUSIZ0 (player portion) bool nusiz0changed = state.size[P0] != oldstate.size[P0]; @@ -991,8 +991,8 @@ void TiaWidget::loadConfig() myHMP1->setList(0, state.hm[P1], state.hm[P1] != oldstate.hm[P1]); // refP1 & vdelP1 - myRefP1->setState(tia.refP1()); - myDelP1->setState(tia.vdelP1()); + myRefP1->setState(tia.refP1(), state.ref[P1] != oldstate.ref[P1]); + myDelP1->setState(tia.vdelP1(), state.vdel[P1] != oldstate.vdel[P1]); // NUSIZ1 (player portion) bool nusiz1changed = state.size[P1] != oldstate.size[P1]; @@ -1004,7 +1004,7 @@ void TiaWidget::loadConfig() //////////////////////////// // enaM0 myEnaM0->setColor(state.coluRegs[0]); - myEnaM0->setIntState(tia.enaM0() ? 1: 0, false); + myEnaM0->setIntState(tia.enaM0() ? 1 : 0, false); // posM0 myPosM0->setList(0, state.pos[M0], state.pos[M0] != oldstate.pos[M0]); @@ -1016,14 +1016,14 @@ void TiaWidget::loadConfig() myNusizM0->setList(0, state.size[M0], state.size[M0] != oldstate.size[M0]); // resMP0 - myResMP0->setState(tia.resMP0()); + myResMP0->setState(tia.resMP0(), state.res[P0] != oldstate.res[P0]); //////////////////////////// // M1 register info //////////////////////////// // enaM1 myEnaM1->setColor(state.coluRegs[1]); - myEnaM1->setIntState(tia.enaM1() ? 1: 0, false); + myEnaM1->setIntState(tia.enaM1() ? 1 : 0, false); // posM1 myPosM1->setList(0, state.pos[M1], state.pos[M1] != oldstate.pos[M1]); @@ -1035,7 +1035,7 @@ void TiaWidget::loadConfig() myNusizM1->setList(0, state.size[M1], state.size[M1] != oldstate.size[M1]); // resMP1 - myResMP1->setState(tia.resMP1()); + myResMP1->setState(tia.resMP1(),state.res[P1] != oldstate.res[P1]); //////////////////////////// // BL register info @@ -1066,7 +1066,7 @@ void TiaWidget::loadConfig() mySizeBL->setList(0, state.size[BL], state.size[BL] != oldstate.size[BL]); // vdelBL - myDelBL->setState(tia.vdelBL()); + myDelBL->setState(tia.vdelBL(), state.vdel[2] != oldstate.vdel[2]); //////////////////////////// // PF register info @@ -1084,13 +1084,13 @@ void TiaWidget::loadConfig() myPF[2]->setIntState(state.pf[2], true); // reverse bit order // Reflect - myRefPF->setState(tia.refPF()); + myRefPF->setState(tia.refPF(), state.pf[3] != oldstate.pf[3]); // Score - myScorePF->setState(tia.scorePF()); + myScorePF->setState(tia.scorePF(), state.pf[4] != oldstate.pf[4]); // Priority - myPriorityPF->setState(tia.priorityPF()); + myPriorityPF->setState(tia.priorityPF(), state.pf[5] != oldstate.pf[5]); myDelayQueueWidget->loadConfig(); } diff --git a/src/debugger/gui/TogglePixelWidget.cxx b/src/debugger/gui/TogglePixelWidget.cxx index 5f310ea91..abd9e7e40 100644 --- a/src/debugger/gui/TogglePixelWidget.cxx +++ b/src/debugger/gui/TogglePixelWidget.cxx @@ -40,11 +40,25 @@ TogglePixelWidget::TogglePixelWidget(GuiObject* boss, const GUI::Font& font, // Changed state isn't used, but we still need to fill it while(int(_changedList.size()) < rows * cols) _changedList.push_back(false); + // prepare _stateList for change tracking + while(int(_stateList.size()) < rows * cols) + _stateList.push_back(false); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void TogglePixelWidget::setState(const BoolArray& state) { + // track changes automatically + for(int row = 0; row < _rows; row++) + { + for(int col = 0; col < _cols; col++) + { + int pos = row * _cols + col; + + _changedList[pos] = _stateList[pos] != state[pos]; + } + } + _stateList.clear(); _stateList = state; @@ -133,6 +147,8 @@ void TogglePixelWidget::drawWidget(bool hilite) // Either draw the pixel in given color, or erase (show background) s.fillRect(x - 3, y - 1, _colWidth-1, _rowHeight-1, _stateList[pos] ? _pixelColor : _backgroundColor); + if (_changedList[pos]) + s.frameRect(x - 3, y - 1, _colWidth - 1, _rowHeight - 1, kDbgChangedColor); } } From 0826ce6bd6018c2fb15d5e05f2a5e7adae890e8e Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 20 Dec 2017 18:18:07 +0100 Subject: [PATCH 115/156] Made collisions editable --- docs/graphics/debugger_main.png | Bin 86550 -> 86508 bytes docs/graphics/debugger_tiatab.png | Bin 12050 -> 12035 bytes src/debugger/TIADebug.cxx | 90 ++++++++++++++++++++++++------ src/debugger/TIADebug.hxx | 6 +- src/debugger/gui/TiaWidget.cxx | 61 +++++++++++++++++++- src/debugger/gui/TiaWidget.hxx | 1 + src/emucore/tia/TIA.cxx | 90 ++++++++++++++++++++++++++++++ src/emucore/tia/TIA.hxx | 19 +++++++ 8 files changed, 246 insertions(+), 21 deletions(-) diff --git a/docs/graphics/debugger_main.png b/docs/graphics/debugger_main.png index 823e3ce6685c549bbe39864b7a1b81326dc497ca..0543f3ec6d595f79405940ac10e5c6a430b3ca42 100644 GIT binary patch literal 86508 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 g2N}a3a)vxE&0j5XW#=3bxHTRv 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 delta 9564 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 diff --git a/src/debugger/TIADebug.cxx b/src/debugger/TIADebug.cxx index 2ed0cc518..8882c271d 100644 --- a/src/debugger/TIADebug.cxx +++ b/src/debugger/TIADebug.cxx @@ -417,25 +417,83 @@ bool TIADebug::priorityPF(int newVal) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool TIADebug::collision(CollisionBit id) const +bool TIADebug::collision(CollisionBit id, bool toggle) const { switch(id) { - case Cx_M0P1: return myTIA.collCXM0P() & 0x80; - case Cx_M0P0: return myTIA.collCXM0P() & 0x40; - case Cx_M1P0: return myTIA.collCXM1P() & 0x80; - case Cx_M1P1: return myTIA.collCXM1P() & 0x40; - case Cx_P0PF: return myTIA.collCXP0FB() & 0x80; - case Cx_P0BL: return myTIA.collCXP0FB() & 0x40; - case Cx_P1PF: return myTIA.collCXP1FB() & 0x80; - case Cx_P1BL: return myTIA.collCXP1FB() & 0x40; - case Cx_M0PF: return myTIA.collCXM0FB() & 0x80; - case Cx_M0BL: return myTIA.collCXM0FB() & 0x40; - case Cx_M1PF: return myTIA.collCXM1FB() & 0x80; - case Cx_M1BL: return myTIA.collCXM1FB() & 0x40; - case Cx_BLPF: return myTIA.collCXBLPF() & 0x80; - case Cx_P0P1: return myTIA.collCXPPMM() & 0x80; - case Cx_M0M1: return myTIA.collCXPPMM() & 0x40; + case Cx_M0P1: + if(toggle) + myTIA.toggleCollP1M0(); + return myTIA.collCXM0P() & 0x80; + + case Cx_M0P0: + if(toggle) + myTIA.toggleCollP0M0(); + return myTIA.collCXM0P() & 0x40; + + case Cx_M1P0: + if(toggle) + myTIA.toggleCollP0M1(); + return myTIA.collCXM1P() & 0x80; + + case Cx_M1P1: + if(toggle) + myTIA.toggleCollP1M1(); + return myTIA.collCXM1P() & 0x40; + + case Cx_P0PF: + if(toggle) + myTIA.toggleCollP0PF(); + return myTIA.collCXP0FB() & 0x80; + case Cx_P0BL: + if(toggle) + myTIA.toggleCollP0BL(); + return myTIA.collCXP0FB() & 0x40; + + case Cx_P1PF: + if(toggle) + myTIA.toggleCollP1PF(); + return myTIA.collCXP1FB() & 0x80; + + case Cx_P1BL: + if(toggle) + myTIA.toggleCollP1BL(); + return myTIA.collCXP1FB() & 0x40; + + case Cx_M0PF: + if(toggle) + myTIA.toggleCollM0PF(); + return myTIA.collCXM0FB() & 0x80; + + case Cx_M0BL: + if(toggle) + myTIA.toggleCollM0BL(); + return myTIA.collCXM0FB() & 0x40; + + case Cx_M1PF: + if(toggle) + myTIA.toggleCollM1PF(); + return myTIA.collCXM1FB() & 0x80; + + case Cx_M1BL: + if(toggle) + myTIA.toggleCollM1BL(); + return myTIA.collCXM1FB() & 0x40; + + case Cx_BLPF: + if(toggle) + myTIA.toggleCollBLPF(); + return myTIA.collCXBLPF() & 0x80; + + case Cx_P0P1: + if(toggle) + myTIA.toggleCollP0P1(); + return myTIA.collCXPPMM() & 0x80; + + case Cx_M0M1: + if(toggle) + myTIA.toggleCollM0M1(); + return myTIA.collCXPPMM() & 0x40; } return false; // make compiler happy } diff --git a/src/debugger/TIADebug.hxx b/src/debugger/TIADebug.hxx index 6b1d4f6bb..89f89e3dc 100644 --- a/src/debugger/TIADebug.hxx +++ b/src/debugger/TIADebug.hxx @@ -130,6 +130,9 @@ class TIADebug : public DebuggerSystem bool scorePF(int newVal = -1); bool priorityPF(int newVal = -1); + /** Get specific bits in the collision register (used by collXX_XX) */ + bool collision(CollisionBit id, bool toggle = false) const; + // Collision registers bool collM0_P1() const { return collision(Cx_M0P1); } bool collM0_P0() const { return collision(Cx_M0P0); } @@ -179,9 +182,6 @@ class TIADebug : public DebuggerSystem /** Display a color patch for color at given index in the palette */ string colorSwatch(uInt8 c) const; - /** Get specific bits in the collision register (used by collXX_XX) */ - bool collision(CollisionBit id) const; - string audFreq(uInt8 div); string booleanWithLabel(string label, bool value); diff --git a/src/debugger/gui/TiaWidget.cxx b/src/debugger/gui/TiaWidget.cxx index 7a7bb1832..af3d476bf 100644 --- a/src/debugger/gui/TiaWidget.cxx +++ b/src/debugger/gui/TiaWidget.cxx @@ -129,10 +129,9 @@ TiaWidget::TiaWidget(GuiObject* boss, const GUI::Font& lfont, for(uInt32 col = 0; col < 5 - row; ++col) { - myCollision[idx] = new CheckboxWidget(boss, lfont, collX, collY, ""); + myCollision[idx] = new CheckboxWidget(boss, lfont, collX, collY, "", CheckboxWidget::kCheckActionCmd); myCollision[idx]->setTarget(this); myCollision[idx]->setID(idx); - myCollision[idx]->setEditable(false); // TODO - enable this? // We need to know where the PF_BL register is, to properly position // the CXCLR button @@ -827,6 +826,64 @@ void TiaWidget::handleCommand(CommandSender* sender, int cmd, int data, int id) case CheckboxWidget::kCheckActionCmd: switch(id) { + case kP0_PFID: + tia.collision(Cx_P0PF, true); + break; + + case kP0_BLID: + tia.collision(Cx_P0BL, true); + break; + + case kP0_M1ID: + tia.collision(Cx_M1P0, true); + break; + + case kP0_M0ID: + tia.collision(Cx_M0P0, true); + break; + + case kP0_P1ID: + tia.collision(Cx_P0P1, true); + break; + + case kP1_PFID: + tia.collision(Cx_P1PF, true); + break; + case kP1_BLID: + tia.collision(Cx_P1BL, true); + break; + + case kP1_M1ID: + tia.collision(Cx_M1P1, true); + break; + case kP1_M0ID: + tia.collision(Cx_M0P1, true); + break; + + case kM0_PFID: + tia.collision(Cx_M0PF, true); + break; + + case kM0_BLID: + tia.collision(Cx_M0BL, true); + break; + + case kM0_M1ID: + tia.collision(Cx_M0M1, true); + break; + + case kM1_PFID: + tia.collision(Cx_M1PF, true); + break; + + case kM1_BLID: + tia.collision(Cx_M1BL, true); + break; + + case kBL_PFID: + tia.collision(Cx_BLPF, true); + break; + case kRefP0ID: tia.refP0(myRefP0->getState() ? 1 : 0); break; diff --git a/src/debugger/gui/TiaWidget.hxx b/src/debugger/gui/TiaWidget.hxx index 2a7d69231..32b965f36 100644 --- a/src/debugger/gui/TiaWidget.hxx +++ b/src/debugger/gui/TiaWidget.hxx @@ -136,6 +136,7 @@ class TiaWidget : public Widget, public CommandSender kResBLCmd = 'Srbl', kHmoveCmd = 'Shmv', kHmclrCmd = 'Shmc', + kCxChgCmd = 'Sccc', kCxclrCmd = 'Scxl', kDbgClCmd = 'DBGc', }; diff --git a/src/emucore/tia/TIA.cxx b/src/emucore/tia/TIA.cxx index 6e57c0454..8562949e9 100644 --- a/src/emucore/tia/TIA.cxx +++ b/src/emucore/tia/TIA.cxx @@ -1618,6 +1618,96 @@ uInt8 TIA::collCXBLPF() const return (myCollisionMask & CollisionMask::ball & CollisionMask::playfield) ? 0x80 : 0; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::toggleCollP0PF() +{ + myCollisionMask ^= (CollisionMask::player0 & CollisionMask::playfield); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::toggleCollP0BL() +{ + myCollisionMask ^= (CollisionMask::player0 & CollisionMask::ball); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::toggleCollP0M1() +{ + myCollisionMask ^= (CollisionMask::player0 & CollisionMask::missile1); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::toggleCollP0M0() +{ + myCollisionMask ^= (CollisionMask::player0 & CollisionMask::missile0); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::toggleCollP0P1() +{ + myCollisionMask ^= (CollisionMask::player0 & CollisionMask::player1); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::toggleCollP1PF() +{ + myCollisionMask ^= (CollisionMask::player1 & CollisionMask::playfield); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::toggleCollP1BL() +{ + myCollisionMask ^= (CollisionMask::player1 & CollisionMask::ball); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::toggleCollP1M1() +{ + myCollisionMask ^= (CollisionMask::player1 & CollisionMask::missile1); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::toggleCollP1M0() +{ + myCollisionMask ^= (CollisionMask::player1 & CollisionMask::missile0); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::toggleCollM0PF() +{ + myCollisionMask ^= (CollisionMask::missile0 & CollisionMask::playfield); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::toggleCollM0BL() +{ + myCollisionMask ^= (CollisionMask::missile0 & CollisionMask::ball); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::toggleCollM0M1() +{ + myCollisionMask ^= (CollisionMask::missile0 & CollisionMask::missile1); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::toggleCollM1PF() +{ + myCollisionMask ^= (CollisionMask::missile1 & CollisionMask::playfield); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::toggleCollM1BL() +{ + myCollisionMask ^= (CollisionMask::missile1 & CollisionMask::ball); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TIA::toggleCollBLPF() +{ + myCollisionMask ^= (CollisionMask::ball & CollisionMask::playfield); +} + #ifdef DEBUGGER_SUPPORT // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void TIA::createAccessBase() diff --git a/src/emucore/tia/TIA.hxx b/src/emucore/tia/TIA.hxx index 85fb673c4..a34169d8b 100644 --- a/src/emucore/tia/TIA.hxx +++ b/src/emucore/tia/TIA.hxx @@ -565,6 +565,25 @@ class TIA : public Device uInt8 collCXPPMM() const; uInt8 collCXBLPF() const; + /** + Toggle the specified collision bits + */ + void toggleCollP0PF(); + void toggleCollP0BL(); + void toggleCollP0M1(); + void toggleCollP0M0(); + void toggleCollP0P1(); + void toggleCollP1PF(); + void toggleCollP1BL(); + void toggleCollP1M1(); + void toggleCollP1M0(); + void toggleCollM0PF(); + void toggleCollM0BL(); + void toggleCollM0M1(); + void toggleCollM1PF(); + void toggleCollM1BL(); + void toggleCollBLPF(); + #ifdef DEBUGGER_SUPPORT void createAccessBase(); From 63b3b2ab1e87c2d9168b2aba136a402f0d9e188a Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Wed, 20 Dec 2017 14:23:34 -0330 Subject: [PATCH 116/156] Updated ROM properties to 'R'. Fixed F8 scheme to not randomize 'special' ROMs (those hardcoded with a certain startup bank). Bumped state file version number. --- src/common/StateManager.cxx | 2 +- src/emucore/Cart.cxx | 1 - src/emucore/CartF8.cxx | 27 ++-- src/emucore/CartF8.hxx | 3 + src/emucore/DefProps.hxx | 185 +++++++++++++------------- src/emucore/stella.pro | 252 ++++++++++++++++++++---------------- 6 files changed, 252 insertions(+), 218 deletions(-) diff --git a/src/common/StateManager.cxx b/src/common/StateManager.cxx index 7cfd39248..1f3aaec00 100644 --- a/src/common/StateManager.cxx +++ b/src/common/StateManager.cxx @@ -27,7 +27,7 @@ #include "StateManager.hxx" -#define STATE_HEADER "05000304state" +#define STATE_HEADER "05009901state" // #define MOVIE_HEADER "03030000movie" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/Cart.cxx b/src/emucore/Cart.cxx index 2cb87e469..0abfe97ce 100644 --- a/src/emucore/Cart.cxx +++ b/src/emucore/Cart.cxx @@ -116,4 +116,3 @@ bool Cartridge::randomStartBank() const { return mySettings.getBool(mySettings.getBool("dev.settings") ? "dev.bankrandom" : "plr.bankrandom"); } - diff --git a/src/emucore/CartF8.cxx b/src/emucore/CartF8.cxx index 14ef0b820..755cddf2a 100644 --- a/src/emucore/CartF8.cxx +++ b/src/emucore/CartF8.cxx @@ -22,7 +22,8 @@ CartridgeF8::CartridgeF8(const BytePtr& image, uInt32 size, const string& md5, const Settings& settings) : Cartridge(settings), - myBankOffset(0) + myBankOffset(0), + myHardcodedStartBank(false) { // Copy the ROM image into my buffer memcpy(myImage, image.get(), std::min(8192u, size)); @@ -30,21 +31,23 @@ CartridgeF8::CartridgeF8(const BytePtr& image, uInt32 size, const string& md5, // Normally bank 1 is the reset bank, unless we're dealing with ROMs // that have been incorrectly created with banks in the opposite order - myStartBank = - (md5 == "bc24440b59092559a1ec26055fd1270e" || // Private Eye [a] - md5 == "75ea60884c05ba496473c23a58edf12f" || // 8-in-1 Yars Revenge - md5 == "75ee371ccfc4f43e7d9b8f24e1266b55" || // Snow White - md5 == "74c8a6f20f8adaa7e05183f796eda796" || // Tricade Demo - md5 == "9905f9f4706223dadee84f6867ede8e3" || // Challenge - md5 == "3c7a7b3a0a7e6319b2fa0f923ef6c9af") // Racer Prototype - ? 0 : 1; + myHardcodedStartBank = + md5 == "bc24440b59092559a1ec26055fd1270e" || // Private Eye [a] + md5 == "75ea60884c05ba496473c23a58edf12f" || // 8-in-1 Yars Revenge + md5 == "75ee371ccfc4f43e7d9b8f24e1266b55" || // Snow White + md5 == "74c8a6f20f8adaa7e05183f796eda796" || // Tricade Demo + md5 == "9905f9f4706223dadee84f6867ede8e3" || // Challenge + md5 == "3c7a7b3a0a7e6319b2fa0f923ef6c9af"; // Racer Prototype } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeF8::reset() { - // define random startup bank - randomizeStartBank(); + // Define random startup bank (only for those not hardcoded) + if(myHardcodedStartBank) + myStartBank = 0; + else + randomizeStartBank(); // Upon reset we switch to the reset bank bank(myStartBank); @@ -170,6 +173,7 @@ bool CartridgeF8::save(Serializer& out) const { out.putString(name()); out.putShort(myBankOffset); + out.putBool(myHardcodedStartBank); } catch(...) { @@ -189,6 +193,7 @@ bool CartridgeF8::load(Serializer& in) return false; myBankOffset = in.getShort(); + myHardcodedStartBank = in.getBool(); } catch(...) { diff --git a/src/emucore/CartF8.hxx b/src/emucore/CartF8.hxx index 8504f67b1..98910fddb 100644 --- a/src/emucore/CartF8.hxx +++ b/src/emucore/CartF8.hxx @@ -156,6 +156,9 @@ class CartridgeF8 : public Cartridge // Indicates the offset into the ROM image (aligns to current bank) uInt16 myBankOffset; + // Certain ROMs have hardcoded start banks + bool myHardcodedStartBank; + private: // Following constructors and assignment operators not supported CartridgeF8() = delete; diff --git a/src/emucore/DefProps.hxx b/src/emucore/DefProps.hxx index e62281da8..5c6be8eeb 100644 --- a/src/emucore/DefProps.hxx +++ b/src/emucore/DefProps.hxx @@ -25,7 +25,7 @@ regenerated and the application recompiled. */ -#define DEF_PROPS_SIZE 3315 +#define DEF_PROPS_SIZE 3316 static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "000509d1ed2b8d30a9d94be1b3b5febb", "Greg Zumwalt", "", "Jungle Jane (2003) (Greg Zumwalt) (Hack)", "Hack of Pitfall!", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -53,7 +53,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "01e60a109a6a67c70d3c0528381d0187", "ITT Family Games, Perry Rhodan-Serie", "554-33 383", "Fire Birds (1983) (ITT Family Games) (PAL)", "AKA Sky Alien", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "01f584bf67b0e464014a8c8b5ea470e3", "Arcadia Corporation, Dennis Caswell", "5 AR-4200", "Labyrinth (Escape from the Mindmaster Beta) (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "02066b17f29082412c6754c1a2d6302e", "", "", "Demo Image Series #3 - Baboon (19-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "024365007a87f213cbe8ef5f2e8e1333", "Atari, Frank Hausman, Steve Woita", "CX2686", "Quadrun (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "024365007a87f213cbe8ef5f2e8e1333", "Atari, Frank Hausman, Mimi Nyden, Steve Woita", "CX2686", "Quadrun (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "025668e36a788e8af8ac4f1be7e72043", "Atari, Jerome Domurat, Howard Scott Warshaw", "CX2659", "Raiders of the Lost Ark (06-14-82) (Atari) (Prototype)", "Console ports are swapped", "Prototype", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, { "026180bf641ff17d8577c33facf0edea", "Activision, Steve Cartwright", "AX-022", "Seaquest (1983) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0277c449fae63f6f1c8f94dedfcf0058", "", "", "Laser Demo (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -77,7 +77,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "03ff9e8a7af437f16447fe88cea3226c", "Bomb - Onbase", "CA285", "Wall-Defender (1983) (Bomb)", "AKA Wall Break", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "04014d563b094e79ac8974366f616308", "Atari, Andrew Fuchs, Courtney Granner, Jeffrey Gusman, Mark R. Hahn", "CX2690", "Pengo (1984) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "041b5e56bbc650db574bd8db3fae2696", "", "", "Thrust (V1.0) (2000) (TJ)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "043f165f384fbea3ea89393597951512", "Spectravision, Spectravideo", "SA-202", "Planet Patrol (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "043f165f384fbea3ea89393597951512", "Spectravision - Spectravideo", "SA-202", "Planet Patrol (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0443cfa9872cdb49069186413275fa21", "M Network, Patricia Lewis Du Long, Ron Surratt - INTV", "MT4518", "BurgerTime (1983) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "045035f995272eb2deb8820111745a07", "Arcadia Corporation, Steve Mundry, Scott Nelson", "AR-4401", "Survival Island (1983) (Arcadia)", "AKA Jungle Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "047ac3b9faea64522b7a23c4465a7aa8", "", "", "Defender (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -86,7 +86,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "04b488d4eef622d022a0021375e7e339", "Home Vision - Gem International Corp.", "VCS83107", "Tennis (1983) (Home Vision) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "04dfb4acac1d0909e4c360fd2ac04480", "", "", "Jammed (2001) (XYPE) (NTSC)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "04e737c9d53cd84bfd5ee679954e4706", "Jone Yuan Telephonic Enterprise Co", "", "Checkers (Jone Yuan) (4K)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "04fccc7735155a6c1373d453b110c640", "HES, David Lubar", "535", "My Golf (1990) (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "04fccc7735155a6c1373d453b110c640", "HES - Imagineering, David Lubar", "535", "My Golf (1990) (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0519f395d5f7d76be813b834aa51c0be", "Atari, Ian Shepard", "CX2604", "Space War (1978) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0546f4e6b946f38956799dd00caab3b1", "Thomas Jentzsch", "", "My Golf (Thomas Jentzsch)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "056f5d886a4e7e6fdd83650554997d0d", "Parker Brothers, Ed Temple", "931504", "Amidar (1982) (Parker Bros) (PAL)", "", "Uncommon", "", "", "A", "A", "", "", "", "", "", "", "", "", "", "", "" }, @@ -109,7 +109,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "06953ed762220dba63d63930d4ad0cc3", "", "", "Star Fire - Eckhard WIP (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "069c17beb1e8e0557adb8539fdcf6cba", "", "", "Phantom II & Pirate (PAL60)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "", "" }, { "06b0194ce992584c365278e0d7323279", "Activision", "", "Unknown Activision Game #2 (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "06b6c5031b8353f3a424a5b86b8fe409", "Activision, Mike Lorenzen - Ariola", "EAX-023 - 711 023-720", "Oink! (1982) (Activision) (PAL)", "AKA Das Schweinchen und der Wolf", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "06b6c5031b8353f3a424a5b86b8fe409", "Activision, Mike Lorenzen - Ariola", "EAX-023 - 711 023-720", "Oink! (1983) (Activision) (PAL)", "AKA Das Schweinchen und der Wolf", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "06cfd57f0559f38b9293adae9128ff88", "Telegames", "4317 A009", "Adventures on GX-12 (1988) (Telegames) (PAL)", "AKA Adventures of Tron", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "06db908011065e5ebb37f4e253c2a0b0", "", "", "Gopher (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "06e5dc181a8eda1c31cc7c581c68b6ef", "", "", "Tac-Scan (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -140,14 +140,14 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "0894aa7be77521f9df562be8d9555fe6", "CBS Electronics, Dan Kitchen, Garry Kitchen", "4L1700, 4L1701, 4L1702, 4L1802, 4L2274", "Donkey Kong (1982) (CBS Electronics) (PAL) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "08989fa4ff537f5dbd611aff4019521a", "Atari, Gary Palmer", "CX26163P", "Fun with Numbers (32 in 1) (1988) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "08bd4c1dcc843f6a0b563d9fd80b3b11", "Quelle", "343.273 9", "Phantompanzer II (1983) (Quelle) (PAL)", "AKA Thunderground", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "08bf437d012db07b05ff57a0c745c49e", "Arcadia Corporation, Steve Hales, Stephen Harland Landrum", "4 AR-4102", "Meteoroids (1982) (Arcadia) (Prototype)", "Suicide Mission Beta", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "08bf437d012db07b05ff57a0c745c49e", "Arcadia Corporation, Steve Hales, Stephen H. Landrum", "4 AR-4102", "Meteoroids (1982) (Arcadia) (Prototype)", "Suicide Mission Beta", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "08d1b6d75206edb999252caf542a2c7f", "Larry Petit", "", "Super Home Run (2003) (Larry Petit) (Hack)", "Hack of Home Run", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "08d60a58a691c7f690162850302dc0e1", "", "", "Poker Squares (V0.27) (PAL) (2001) (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "08e5960bb52d9a3e2c9954677b5e4472", "Atari, Christopher H. Omarzu, Preston Stuart, Bruce Williams", "CX26101", "Oscar's Trash Race (10-20-1982) (Atari) (Prototype)", "Uses the Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, + { "08e5960bb52d9a3e2c9954677b5e4472", "Atari - CCW, Christopher H. Omarzu, Preston Stuart, Bruce Williams", "CX26101", "Oscar's Trash Race (10-20-1982) (Atari) (Prototype)", "Uses the Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "34", "", "", "" }, { "08f4dc6f118f7c98e2406c180c08e78e", "Arcadia Corporation, Dennis Caswell", "AR-4302", "Party Mix - Tug of War (2 of 3) (1983) (Arcadia) (PAL)", "Uses Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "02", "", "", "", "", "" }, { "08f853e8e01e711919e734d85349220d", "Atari, Jerome Domurat, Michael Sierchio", "CX2667", "RealSports Soccer (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0906c6e0e4bda9c10cfa4c5fc64d2f4b", "Retroactive", "", "Qb (V0.12) (NTSC) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "090f0a7ef8a3f885048d213faa59b2f8", "Carrere Video - Teldec", "USC1012", "M.A.D. (1983) (Carrere Video) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "090f0a7ef8a3f885048d213faa59b2f8", "Carrere Video - Western Technologies - Teldec - Prism", "USC1012", "M.A.D. (1983) (Carrere Video) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "09274c3fc1c43bf1e362fda436651fd8", "Thomas Jentzsch", "", "Acid Drop (TJ)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "6", "240", "", "" }, { "09388bf390cd9a86dc0849697b96c7dc", "Absolute Entertainment, Alex DeMeo", "AG-045-04, AK-045-04", "Pete Rose Baseball (1988) (Absolute)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0945081a6bd00345ff3d58eb7a07330a", "", "", "Stampede (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -214,7 +214,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "0e08cd2c5bcf11c6a7e5a009a7715b6a", "", "", "Boing! (PD) [a1]", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0e224ea74310da4e7e2103400eb1b4bf", "Atari, Gary Shannon, Howard Scott Warshaw", "", "Mind Maze (10-10-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "MINDLINK", "", "", "", "", "", "", "" }, { "0e4b2b6e014a93ef8be896823da0d4ec", "", "", "Skiing (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "0e713d4e272ea7322c5b27d645f56dd0", "Home Vision - Gem International Corp.", "VCS83105", "Panda Chase (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, + { "0e713d4e272ea7322c5b27d645f56dd0", "Home Vision - Gem International Corp. - VDI", "VCS83105", "Panda Chase (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, { "0e7e73421606873b544e858c59dc283e", "Digivision", "", "Super Soccer (Digivision)", "AKA RealSports Soccer", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "0e86470791b26292abe1c64545c47985", "Arcadia Corporation, Dennis Caswell", "AR-4302", "Party Mix - Down on the Line (3 of 3) (1983) (Arcadia) (PAL)", "Uses Paddle Controllers", "", "", "", "", "", "", "", "PADDLES_IAXIS", "", "", "01 70", "", "", "", "", "" }, { "0ec93f519bb769e0d9f80e61f6cc8023", "Atari - GCC, John Allred, Mike Feinstein", "CX2688", "Jungle Hunt (02-25-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -265,7 +265,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "1201c18cf00d2c236f42e4d7d8c86aa1", "", "", "Nick Bensema Demo (Nick Bensema)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "12123b534bdee79ed7563b9ad74f1cbd", "Absolute Entertainment, Alex DeMeo", "AG-041-04", "Title Match Pro Wrestling (1987) (Absolute)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1228c01cd3c4b9c477540c5adb306d2a", "Atari, Alan Miller", "CX26163P", "Basketball (32 in 1) (1988) (Atari) (PAL)", "Console ports are swapped", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, - { "1266b3fd632c981f3ef9bdbf9f86ce9a", "Activision, Bob Whitehead", "EAZ-034-04, EAZ-034-04I", "Private Eye (1983) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "1266b3fd632c981f3ef9bdbf9f86ce9a", "Activision, Bob Whitehead", "EAZ-034-04, EAZ-034-04I", "Private Eye (1984) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1267e3c6ca951ff1df6f222c8f813d97", "", "", "Dragonfire (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1278f74ca1dfaa9122df3eca3c5bcaad", "Quelle", "719.013 5", "Ungeheuer der Tiefe (Quelle) (PAL)", "AKA Skindiver", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1287535256bf5dff404839ac9e25c3e7", "PacManPlus", "Rev 2", "Alien Pac-Man (PacManPlus) (Hack)", "Hack of Alien", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -275,7 +275,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "130c5742cd6cbe4877704d733d5b08ca", "Home Vision - Gem International Corp.", "VCS83109", "World End (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1323c45d660f5a5b6d5ea45c6c4cbe4a", "Canal 3 - Intellivision", "", "Enduro (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "133456269a03e3fdae6cddd65754c50d", "Tigervision - Teldec", "7-006 - 3.60008 VG", "Springer (1982) (Tigervision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "133a4234512e8c4e9e8c5651469d4a09", "Atari, Andrew Fuchs, Jeffrey Gusman, Dave Jolly, Suki Lee", "CX26117", "Obelix (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "133a4234512e8c4e9e8c5651469d4a09", "Atari, Andrew Fuchs, Jeffrey Gusman, Dave Jolly, Suki Lee", "CX26117", "Obelix (1984) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "133b56de011d562cbab665968bde352b", "Activision, John Van Ryzin", "AG-038-04", "Cosmic Commuter (1984) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1343de49c2a50d99176255f99f0d0234", "Gray Games & AtariAge", "", "E.T. Book Cart (PAL)", "Charles F. Gray & Michael Rideout", "", "", "", "", "", "", "", "", "", "", "", "", "24", "280", "YES", "55" }, { "13448eb5ba575e8d7b8d5b280ea6788f", "Digivision", "", "Crackpots (Digivision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -343,7 +343,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "17ba72433dd41383065d4aa6dedb3d91", "", "", "SCSIcide (09-06-2001) (Joe Grand)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "17badbb3f54d1fc01ee68726882f26a6", "M Network, Hal Finney, Bruce Pedersen - INTV", "MT5659", "Space Attack (1982) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "17bbe288c3855c235950fea91c9504e9", "Dismac", "", "Pega Ladrao (Dismac)", "AKA Keystone Kapers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "17c0a63f9a680e7a61beba81692d9297", "U.S. Games Corporation, Tom Sloper", "VC2004", "Picnic (1982) (U.S. Games)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 45", "", "", "", "", "" }, + { "17c0a63f9a680e7a61beba81692d9297", "U.S. Games Corporation - Western Technologies, Tom Sloper", "VC2004", "Picnic (1983) (U.S. Games)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 45", "", "", "", "", "" }, { "17d000a2882f9fdaa8b4a391ad367f00", "Atari - GCC", "CX2676", "Centipede (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "17ee158d15e4a34f57a837bc1ce2b0ce", "Atari - GCC, Mike Feinstein, Kevin Osborn", "CX2691, CX2691P", "Joust (1983) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "17ee23e5da931be82f733917adcb6386", "Salu, Dennis M. Kiss", "460758", "Acid Drop (1992) (Salu) (PAL)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "50", "256", "", "" }, @@ -370,7 +370,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "19abaf2144b6a7b281c4112cff154904", "Atari, Brad Stewart", "CX2649, CX2649P", "Asteroids (1981) (Atari) (PAL) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "19d6956ff17a959c48fcd8f4706a848d", "PlayAround - J.H.M.", "202", "Burning Desire (1982) (PlayAround)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "19d9b5f8428947eae6f8e97c7f33bf44", "", "", "Fortress (Dual Version) (20-04-2003) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "19e739c2764a5ab9ed08f9095aa2af0b", "Atari, Andrew Fuchs, Jeffrey Gusman, Dave Jolly, Suki Lee", "CX26117", "Obelix (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "19e739c2764a5ab9ed08f9095aa2af0b", "Atari, Andrew Fuchs, Jeffrey Gusman, Dave Jolly, Suki Lee", "CX26117", "Obelix (1984) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "19e761e53e5ec8e9f2fceea62715ca06", "Panda", "104", "Scuba Diver (1983) (Panda)", "AKA Skindiver", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1a23540d91f87584a04f184304a00648", "", "", "Race Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1a613ce60fc834d4970e1e674b9196b3", "Home Vision - Gem International Corp.", "VCS83135", "Tanks War (1983) (Home Vision) (PAL)", "AKA Phantom Tank", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -382,7 +382,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "1b22a3d79ddd79335b69c94dd9b3e44e", "Tron", "", "Moon Patrol (Tron)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1b4b06c2a14ed3ee73b7d0fd61b6aaf5", "Arcadia Corporation, Stephen H. Landrum", "AR-4400", "Excalibur (Dragonstomper Beta) (1982) (Arcadia) (Prototype) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1b8c3c0bfb815b2a1010bba95998b66e", "Telegames", "", "Frogs and Flies (1988) (Telegames) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "1b8d35d93697450ea26ebf7ff17bd4d1", "Quelle", "176.764 9 - 781644", "Marineflieger (1983) (Quelle) (PAL)", "AKA Seahawk", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "1b8d35d93697450ea26ebf7ff17bd4d1", "Quelle - Otto Versand", "176.764 9 - 781644", "Marineflieger (1983) (Quelle) (PAL)", "AKA Seahawk", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1bb91bae919ddbd655fa25c54ea6f532", "Suntek", "SS-026", "Treasure Island (Suntek) (PAL)", "AKA Treasure Discovery", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1bc2427ac9b032a52fe527c7b26ce22c", "Intellivision Productions - M Network, Bruce Pedersen, Larry Zwick", "MT5860", "Sea Battle (1983) (M Network)", "High Seas", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1bef389e3dd2d4ca4f2f60d42c932509", "Dimax - Sinmax", "SM8001", "Space Robot (1983) (Dimax - Sinmax) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -405,7 +405,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "1da2da7974d2ca73a823523f82f517b3", "Spectravision - Spectravideo - Sirius Software, David Lubar", "SA-206", "Challenge of.... Nexar, The (1982) (Spectravision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1db3bc4601f22cf43be7ce015d74f59a", "", "", "Ship Demo (V 10) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1e060a8025512ad2127e3da11e212ccc", "Arcadia Corporation, Scott Nelson", "13", "Sweat! - The Decathlon Game (3 of 3) (1983) (Arcadia) (Prototype)", "Uses the Paddle Controllers (left only)", "Prototype", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "", "" }, - { "1e0ef01e330e5b91387f75f700ccaf8f", "Quelle", "686.561 2 - 781627", "Mein Weg (1983) (Quelle) (PAL)", "AKA Challenge", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "1e0ef01e330e5b91387f75f700ccaf8f", "Quelle - Otto Versand", "686.561 2 - 781627", "Mein Weg (1983) (Quelle) (PAL)", "AKA Challenge", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1e1290ea102e12d7ac52820961457e2b", "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (12-15-1983) (Parker Bros) (Prototype)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "1e1817d9cbcc3ba75043b7db4e6c228f", "", "", "Star Fire (07-10-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1e272d09c0e55f5ef14fcb76a735f6d7", "Atari, David Crane", "CX26163P", "Slot Machine (32 in 1) (1988) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -419,7 +419,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "1ec5bef77b91e59313cba205f15b06d7", "", "", "Overhead Adventure Demo 1 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "60", "", "", "" }, { "1ede4f365ce1386d58f121b15a775e24", "Parker Brothers, Dave Hampton, Tom Sloper", "931517", "Q-bert (1983) (Parker Bros) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1ee2cfc7d0333b96bd11f7f3ec8ce8bc", "Arcadia Corporation, Dennis Caswell", "AR-4200", "Escape from the Mindmaster (4 of 4) (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "1ee9c1ba95cef2cf987d63f176c54ac3", "Atari - GCC, Mark Ackerman, Glenn Parker", "CX2675, CX2675P", "Ms. Pac-Man (1982) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "1ee9c1ba95cef2cf987d63f176c54ac3", "Atari - GCC, Mark Ackerman, Glenn Parker", "CX2675, CX2675P", "Ms. Pac-Man (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1ef04e7e508296a8d9eb61cc7dae2e5d", "SOLID Corp. (D. Scott Williamson)", "CX2655-069", "Star Castle 2600 (SolidCorp) [069]", "http://starcastle2600.blogspot.com/p/star-castle-2600-story.html", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "1f21666b8f78b65051b7a609f1d48608", "K-Tel Vision", "", "Vulture Attack (1982) (K-Tel Vision)", "AKA Condor Attack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1f2ae0c70a04c980c838c2cdc412cf45", "Atari - GCC", "CX2698", "Rubik's Cube (1984) (Atari)", "AKA Atari Video Cube", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -476,7 +476,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "2353725ec98e0f0073462109e886efd7", "Champ Games", "CG-03-P", "Scramble (PAL60)", "Compatible with Genesis controller", "Homebrew", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "YES", "" }, { "235436ab0832370e73677c9c6f0c8b06", "", "", "Beast Invaders (Double Shot) (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2365e1534d67f94d8670394ab99150ce", "Thomas Jentzsch", "", "Missile Command (Atari Mouse) (2002) (TJ)", "Uses Atari ST Mouse Controller", "Homebrew", "", "", "", "", "", "", "ATARIMOUSE", "", "", "", "", "", "", "YES", "" }, - { "23d445ea19a18fb78d5035878d9fb649", "CBS Electronics, Sylvia Day, Henry Will IV", "4L1818, 4L1819, 4L1820, 4L1821", "Mouse Trap (1982) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "23d445ea19a18fb78d5035878d9fb649", "CBS Electronics - JWDA, Sylvia Day, Todd Marshall, Henry Will IV", "4L1818, 4L1819, 4L1820, 4L1821", "Mouse Trap (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "23e4ca038aba11982e1694559f3be10f", "", "", "Big Dig (V3) (20-10-2002) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "23fad5a125bcd4463701c8ad8a0043a9", "CCE", "C-840", "Stone Age (1983) (CCE)", "Uses the Joystick Controllers (swapped)", "", "", "", "A", "A", "", "YES", "", "", "", "", "", "", "220", "YES", "" }, { "240bfbac5163af4df5ae713985386f92", "Activision, Steve Cartwright", "AX-022", "Seaquest (1983) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -485,7 +485,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "2447e17a4e18e6b609de498fe4ab52ba", "CCE", "", "Super Futebol (CCE)", "AKA RealSports Soccer", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "244c6de27faff527886fc7699a41c3be", "", "", "Matt Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2450dfa1df70d12b60683185775efed8", "Jeffry Johnston", "", "Radial Pong - Version 7 (Jeffry Johnston) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "24544ee5d76f579992d9522e9b238955", "Carrere Video, Tom Sloper - Teldec", "USC2004", "Picnic (1983) (Carrere Video) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 45", "", "", "", "", "" }, + { "24544ee5d76f579992d9522e9b238955", "Carrere Video - Western Technologies, Tom Sloper - Teldec - Prism", "USC2004", "Picnic (1983) (Carrere Video) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 45", "", "", "", "", "" }, { "245f07c8603077a0caf5f83ee6cf8b43", "Home Vision - Thomas Jentzsch", "", "Parachute (Thomas Jentzsch)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "240", "", "" }, { "24759be31e8fe55d2829fd86bdf3181f", "Hozer Video Games", "", "Gunfight 2600 - Worst Nightmare... (2001) (MP)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "247fa1a29ad90e64069ee13d96fea6d6", "CCE", "C-867", "Radar (1983) (CCE)", "AKA Exocet", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -547,7 +547,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "2880c6b59bd54b153174676e465167c7", "Tron", "", "Donkey Kong Jr. (Tron)", "AKA Donkey Kong Junior", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "28a2bea8f84936cb2e063f857414cda0", "Thiago Paiva", "", "Mega Mania Raid (1999) (Thiago Paiva) (Hack)", "Hack of Megamania", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "28a4cd87fb9de4ee91693a38611cb53c", "", "", "Skeleton (V1.1) (NTSC) (24-10-2002) (Eric Ball)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "28d5df3ed036ed63d33a31d0d8b85c47", "Goliath", "5", "Open Sesame (1983) (Goliath) (PAL) [a]", "AKA Open, Sesame!", "", "", "", "", "", "", "", "", "", "", "", "", "38", "256", "YES", "" }, + { "28d5df3ed036ed63d33a31d0d8b85c47", "Bit Corporation", "PG204", "Open, Sesame! (1983) (BitCorp) (PAL) [a]", "AKA I Want My Mommy", "", "", "", "", "", "", "", "", "", "", "", "", "38", "256", "YES", "" }, { "2903896d88a341511586d69fcfc20f7d", "Activision, David Crane", "AX-014, AX-014-04", "Grand Prix (1982) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "291bcdb05f2b37cdf9452d2bf08e0321", "Atari", "CX26163P", "32 in 1 Game Cartridge (1988) (Atari) (Prototype) (PAL)", "", "Prototype", "", "32IN1", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "291cc37604bc899e8e065c30153fc4b9", "Activision, Carol Shaw", "AX-020, AX-020-04", "River Raid (1982) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -694,7 +694,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "3316ee2f887e9cb9b54dd23c5b98c3e2", "", "", "Texas Golf (miniature Gold Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "331938989f0f33ca39c10af4c09ff640", "Zach Matley", "", "Combat - Tank AI (19-04-2003) (Zach Matley)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "332f01fd18e99c6584f61aa45ee7791e", "", "", "X'Mission (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "3347a6dd59049b15a38394aa2dafa585", "Parker Brothers, Robert Jaeger", "PB5760", "Montezuma's Revenge (1984) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "3347a6dd59049b15a38394aa2dafa585", "Parker Brothers - JWDA, Henry Will IV", "PB5760", "Montezuma's Revenge (1984) (Parker Bros)", "Featuring Panama Joe", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "335793736cbf6fc99c9359ed2a32a49d", "", "", "Analog Clock (V0.0) (20-01-2003) (AD) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "335a7c5cfa6fee0f35f5824d1fa09aed", "Sega - Beck-Tech, Steve Beck, Phat Ho - Teldec", "006-01 - 3.60105 VG", "Congo Bongo (1983) (Sega) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3367eeba3269aa04720abe6169767502", "", "", "Space Treat (30-12-2002) (Fabrizio Zavagli)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -720,7 +720,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "35163b56f4a692a232ae96ad3e23310f", "Retroactive", "", "Qb (2.12) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "3556e125681aea864e17b09f3f3b2a75", "", "", "Incoming (2 Player Demo) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3576037c9281656655fa114a835be553", "Arcadia Corporation, Dennis Caswell", "AR-4200", "Escape from the Mindmaster (1 of 4) (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "3577e19714921912685bb0e32ddf943c", "TechnoVision", "TVS1003", "Pharaoh's Curse (1983) (TechnoVision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "34", "", "YES", "" }, + { "3577e19714921912685bb0e32ddf943c", "TechnoVision - Video Technology", "TVS1003", "Pharaoh's Curse (1983) (TechnoVision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "34", "", "YES", "" }, { "35ae903dff7389755ad4a07f2fb7400c", "", "", "Colored Wall Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "35b10a248a7e67493ec43aeb9743538c", "Dor-x", "", "Defender (Dor-x) (Hack)", "Hack of Defender", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "35b43b54e83403bb3d71f519739a9549", "Parker Brothers, Dave Engman, Isabel Garret", "", "McDonald's (06-06-1983) (Parker Bros) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -730,7 +730,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "360c0dcb11506e73bd0b77207c81bc62", "Digitel", "", "Enduro (1983) (Digitel)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3619786f6a32efc1e4a262d5aca8a070", "Atari, John Dunn - Sears", "CX2631 - 49-75152", "Superman (1979) (Atari) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3624e5568368929fabb55d7f9df1022e", "Activision - Imagineering, Dan Kitchen", "EAK-050-04", "Double Dragon (1989) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "36306070f0c90a72461551a7a4f3a209", "U.S. Games Corporation, Roger Booth, Sylvia Day, Ron Dubren, Todd Marshall, Wes Trager, Henry Will IV", "VC1007", "Name This Game (1982) (U.S. Games)", "AKA Octopussy", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "36306070f0c90a72461551a7a4f3a209", "U.S. Games Corporation - JWDA, Roger Booth, Sylvia Day, Ron Dubren, Todd Marshall, Robin McDaniel, Wes Trager, Henry Will IV", "VC1007", "Name This Game (1983) (U.S. Games)", "AKA Octopussy", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "36547bc6faa5132b87504e18d088e1d7", "", "", "Cosmic Swarm (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "367411b78119299234772c08df10e134", "Atari", "CX26163P", "Skiing (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3685060707df27d4091ba0ea2dc4b059", "", "", "PezZerk - PezMan in Ghost Manor (Hack)", "Hack of Berzerk", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -750,7 +750,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "37527966823ee9243d34c7da8302774f", "", "", "Word Zapper (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "376944889dcfa96c73d3079f308e3d32", "Retroactive", "", "Qb (0.11) (Retroactive) (Stella)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "3783f12821b88b08814da8adb1a9f220", "", "", "Mission Survive (PAL) (Genesis)", "Genesis controller (C is vertical fire)", "Hack of Mission Survive)", "", "", "", "A", "", "", "GENESIS", "", "", "", "", "", "", "YES", "" }, - { "378a62af6e9c12a760795ff4fc939656", "Atari - Axlon, Steve DeFrisco", "CX26171", "MotoRodeo (1990) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "378a62af6e9c12a760795ff4fc939656", "Atari - Axlon, Steve DeFrisco", "CX26171", "MotoRodeo (1991) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "378c118b3bda502c73e76190ca089eef", "Atari, Alan Miller", "CX2662P", "Hangman (1978) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "37ab3affc7987995784b59fcd3fcbd31", "", "", "Sprite Test (29-11-2002) (Eric Ball)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "37b98344c8e0746c486caf5aaeec892a", "K-Tel Vision", "6", "Spider Maze (1982) (K-Tel Vision) (PAL)", "AKA Spider Kong", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -769,10 +769,10 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "38cf93eacfb2fa9a2c5e39059ff35a74", "Greg Zumwalt", "", "WacMan (2003) (Greg Zumwalt) (Hack)", "Hack of Ms. Pac-Man", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "38de7b68379770b9bd3f7bf000136eb0", "Imagic, Mark Klein", "EIZ-003-04I", "Subterranea (1983) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "391764720140c432aec454a468f77a40", "Video Game Program", "", "Miss Pack Man (Video Game Program) (PAL)", "AKA Ms. Pac-Man", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "392d34c0498075dd58df0ce7cd491ea2", "Atari, Frank Hausman, Steve Woita", "CX2686", "Quadrun (1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "392d34c0498075dd58df0ce7cd491ea2", "Atari, Frank Hausman, Mimi Nyden, Steve Woita", "CX2686", "Quadrun (1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "392f00fd1a074a3c15bc96b0a57d52a1", "Atari, Rob Fulop - Sears", "CX2633 - 49-75119", "Night Driver (1980) (Atari)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 65", "", "", "", "YES", "" }, { "393948436d1f4cc3192410bb918f9724", "Activision, Carol Shaw", "AX-020, AX-020-04", "River Raid (1982) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "393e41ca8bdd35b52bf6256a968a9b89", "U.S. Games Corporation", "VC1012", "M.A.D. (1982) (U.S. Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "393e41ca8bdd35b52bf6256a968a9b89", "U.S. Games Corporation - Western Technologies", "VC1012", "M.A.D. (1983) (U.S. Games)", "AKA Missile Intercept", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3947eb7305b0c904256cdbc5c5956c0f", "Jone Yuan Telephonic Enterprise Co", "", "Lilly Adventure (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "230", "", "" }, { "396f7bc90ab4fa4975f8c74abe4e81f0", "Atari, Larry Kaplan - Sears", "CX2612 - 99804, 49-75103", "Street Racer (1977) (Atari)", "Uses the Paddle Controllers (swapped)", "", "", "", "", "", "", "", "PADDLES", "", "YES", "10 60", "", "", "", "", "" }, { "39790a2e9030751d7db414e13f1b6960", "", "", "Robotfindskitten2600 (26-04-2003) (Jeremy Penner) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -793,7 +793,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "3ac6c50a8e62d4ce71595134cbd8035e", "Absolute Entertainment, Dan Kitchen", "AK-046-04", "Tomcat (1988) (Absolute)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3ad3dc799211ccd424d7c6d454401436", "Probe 2000 - North American Philips Consumer Electronics Corporation", "", "Power Lords (1983) (Probe) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3ad58b53a1e972396890bd86c735e78d", "Arcadia Corporation, Stephen H. Landrum", "AR-4400", "Excalibur Version 36 (Dragonstomper Beta) (1982) (Arcadia) (Prototype)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "3b040ed7d1ef8acb4efdeebebdaa2052", "Tigervision", "7-008", "Miner 2049er (1982) (Tigervision) [fixed]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "214", "", "" }, + { "3b040ed7d1ef8acb4efdeebebdaa2052", "Tigervision", "7-008", "Miner 2049er (1983) (Tigervision) [fixed]", "", "", "", "", "", "", "", "", "", "", "", "", "", "28", "214", "", "" }, { "3b097a7ed5bd2a84dc3d3ed361e9c31c", "", "", "Interleaved ChronoColour Demo (PAL) (05-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3b10106836565e5db28c7823c0898fbb", "Xonox - Beck-Tech", "6210, 06002, 06004, 99002", "Ghost Manor (1983) (Xonox) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, { "3b2c32fcd331664d037952bcaa62df94", "Xonox", "6230, 6250", "Super Kung-Fu (1983) (Xonox) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -815,7 +815,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "3c4a6f613ca8ba27ce9e43c6c92a3128", "", "", "Qb (V0.04) (Non-Lax Version) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "3c57748c8286cf9e821ecd064f21aaa9", "Atari, Jerome Domurat, Andrew Fuchs, Dave Staugas, Robert Vieira", "CX26118", "Millipede (1984) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3c72ddaf41158fdd66e4f1cb90d4fd29", "Dismac", "", "Comando Suicida (Dismac)", "AKA Chopper Command", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "3c7a7b3a0a7e6319b2fa0f923ef6c9af", "Atari, Joe Gaucher", "", "Racer (1982) (Atari) (Prototype)", "ROM must be started in bank 0", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "3c7a7b3a0a7e6319b2fa0f923ef6c9af", "Atari - Roklan, Joe Gaucher", "", "Racer (1982) (Atari) (Prototype)", "ROM must be started in bank 0", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3c7a96978f52b2b15426cdd50f2c4048", "", "", "Overhead Adventure Demo 3 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3c82e808fe0e6a006dc0c4e714d36209", "Activision, David Crane", "AG-004", "Fishing Derby (1980) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3c853d864a1d5534ed0d4b325347f131", "Telesys, Don 'Donyo' Ruffcorn", "1002", "Cosmic Creeps (1982) (Telesys)", "AKA Space Maze, Spaze Maze", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -870,7 +870,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "3fd1f9d66a418c9f787fc5799174ddb7", "Aaron Curtis", "", "AStar (PAL)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3fd53bfeee39064c945a769f17815a7f", "CCE", "", "Sea Hawk (CCE)", "AKA Seahawk", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3fe43915e5655cf69485364e9f464097", "CCE", "C-863", "Fisher Price (1983) (CCE)", "AKA Skindiver", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "3ff5165378213dab531ffa4f1a41ae45", "Quelle", "311377", "Pygmy (1983) (Quelle) (PAL)", "AKA Lock 'n' Chase (Double-Game Package)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "3ff5165378213dab531ffa4f1a41ae45", "Otto Versand", "311377", "Pygmy (1983) (Otto Versand) (PAL)", "AKA Lock 'n' Chase (Double-Game Package)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "402b1ca3c230a60fb279d4a2a10fa677", "", "", "3-D Tic-Tac-Toe (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "62", "", "", "" }, { "402d876ec4a73f9e3133f8f7f7992a1e", "Alex Herbert", "", "Man Goes Down (2006) (A. Herbert) (Prototype)", "Uses AtariVox controller", "Homebrew", "", "", "", "", "", "", "", "ATARIVOX", "", "", "", "", "", "", "" }, { "405f8591b6941cff56c9b392c2d5e4e5", "Telegames", "", "Star Strike (1988) (Telegames) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -915,7 +915,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "435fd469f088468c4d66be6b5204d887", "Atari - GCC", "CX2680, CX2680P", "RealSports Tennis (1983) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "438968a26b7cfe14a499f5bbbbf844db", "", "", "Raft Rider (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "43adf60ebdd6b5a0fae21594ecf17154", "Jone Yuan Telephonic Enterprise Co", "", "Stampede (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "43c6cfffeddab6b3787357fed9d44529", "20th Century Fox Video Games, Douglas 'Dallas North' Neubauer", "11111", "M.A.S.H (1983) (20th Century Fox) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "43c6cfffeddab6b3787357fed9d44529", "20th Century Fox Video Games, Frank Cohen, Douglas 'Dallas North' Neubauer", "11111", "M.A.S.H (1983) (20th Century Fox) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "43e6c5159c3a093fca88656628c6ef34", "", "", "Star Fire (17-02-2003) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "43f33c6dfdeaf5138ce6e6968ad7c5ce", "Jeffry Johnston", "", "Radial Pong - Version 11 (Jeffry Johnston) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "43f8459d39fb4eddf9186d62722ff795", "", "", "Skeleton+ (17-04-2003) (Eric Ball) (PAL)", "", "", "STEREO", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -941,7 +941,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "45a4f55bb9a5083d470ad479afd8bca2", "CommaVid, Joseph Biel", "", "Frog Demo (1983) (CommaVid)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "45beef9da1a7e45f37f3f445f769a0b3", "Atari, Suki Lee", "CX2658", "Math Gran Prix (1982) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "45c4413dd703b9cfea49a13709d560eb", "Jone Yuan Telephonic Enterprise Co", "", "Challenge of.... Nexar, The (Jone Yuan) (Hack)", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "45cb0f41774b78def53331e4c3bf3362", "Carrere Video, Roger Booth, Sylvia Day, Todd Marshall, Wes Trager, Henry Will IV - Teldec", "USC1007", "Octopus (1983) (Carrere Video) (PAL)", "AKA Name This Game", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "45cb0f41774b78def53331e4c3bf3362", "Carrere Video - JWDA, Roger Booth, Sylvia Day, Todd Marshall, Robin McDaniel, Wes Trager, Henry Will IV - Teldec - Prism", "USC1007", "Octopus (1983) (Carrere Video) (PAL)", "AKA Name This Game", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4605a00f5b44a9cbd5803a7a55de150e", "Coleco - Individeo, Ed Temple", "", "Cabbage Patch Kids (07-03-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "461029ab23800833e9645be3e472d470", "", "", "Combat TC (v0.1)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "46258bd92b1f66f4cb47864d7654f542", "Zellers", "", "Turmoil (Zellers)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -960,7 +960,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "47464694e9cce07fdbfd096605bf39d4", "Activision, Dan Kitchen", "EAK-050-04", "Double Dragon (1989) (Activision) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4767356fa0ed3ebe21437b4473d4ee28", "Atari, Dan Hitchens, Mimi Nyden", "CX2685", "Gravitar (04-12-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "47711c44723da5d67047990157dcb5dd", "CCE", "", "Ice Hockey (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "47911752bf113a2496dbb66c70c9e70c", "Atari, Christopher H. Omarzu, Preston Stuart, Bruce Williams", "CX26101", "Oscar's Trash Race (1983) (Atari) (PAL)", "Uses the Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, + { "47911752bf113a2496dbb66c70c9e70c", "Atari - CCW, Christopher H. Omarzu, Preston Stuart, Bruce Williams", "CX26101", "Oscar's Trash Race (1984) (Atari) (PAL)", "Uses the Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "4799a40b6e889370b7ee55c17ba65141", "Konami", "RC 100-X 02", "Pooyan (1983) (Konami)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "215", "", "" }, { "47aad247cce2534fd70c412cb483c7e0", "Rainbow Vision - Suntek", "SS-010", "Mafia (Rainbow Vision) (PAL)", "AKA Gangster Alley", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "47abfb993ff14f502f88cf988092e055", "Zellers", "", "Inca Gold (Zellers)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1014,7 +1014,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "4b27f5397c442d25f0c418ccdacf1926", "Atari, Warren Robinett", "CX2613, 49-75154", "Adventure (1980) (Atari) (PAL)", "", "Common", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4b71197153d651480830638cb6a03249", "Atari, Larry Kaplan", "CX26163P", "Bowling (32 in 1) (1988) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4b753a97aee91e4b3e4e02f5e9758c72", "Glenn Saunders, Roger Williams", "", "Asymmetric Reflected Playfield (Glenn Saunders)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "4b94fd272785d7ec6c95fb7279d0f522", "Atari, Christopher H. Omarzu, Preston Stuart, Bruce Williams", "CX26101", "Oscar's Trash Race (12-03-1982) (Atari) (Prototype)", "Uses the Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, + { "4b94fd272785d7ec6c95fb7279d0f522", "Atari - CCW, Christopher H. Omarzu, Preston Stuart, Bruce Williams", "CX26101", "Oscar's Trash Race (12-03-1982) (Atari) (Prototype)", "Uses the Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "4b9581c3100a1ef05eac1535d25385aa", "", "", "IQ 180 (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "20", "235", "", "" }, { "4baada22435320d185c95b7dd2bcdb24", "Atari, Jerome Domurat, Dave Staugas", "CX2682", "Krull (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4bcc7f6ba501a26ee785b7efbfb0fdc8", "Atari, Andrew Fuchs, Courtney Granner, Jeffrey Gusman, Mark R. Hahn", "CX2690", "Pengo (1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1026,7 +1026,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "4c462b2b6fb0a19a1437eb2c3dc20783", "Arcadia Corporation, Steve Mundry, Scott Nelson", "AR-4401", "Survival Island (1 of 3) (1983) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4c4ce802cbfd160f7b3ec0f13f2a29df", "", "", "Beta Demo (V1.1) (26-09-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4c606235f4ec5d2a4b89139093a69437", "Andrew Davies", "", "Andrew Davies early notBoulderDash demo (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "4c6afb8a44adf8e28f49164c84144bfe", "Bit Corporation", "PG207", "Mission 3,000 A.D. (1983) (BitCorp)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "4c6afb8a44adf8e28f49164c84144bfe", "CCE", "C-806", "Mission 3,000 A.D. (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4c8832ed387bbafc055320c05205bc08", "Atari, Joe Decuir, Steve Mayer, Larry Wagner - Sears", "CX2601 - 99801, 6-99801, 49-75124", "Combat (1977) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4c8970f6c294a0a54c9c45e5e8445f93", "Xonox - K-Tel Software, Anthony R. Henderson", "99006, 6220", "Sir Lancelot (1983) (Xonox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4c9307de724c36fd487af6c99ca078f2", "Imagic, Brad Stewart", "720106-1A, IA3409", "Sky Patrol (1982) (Imagic) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1089,7 +1089,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "514f911ecff2be5eeff2f39c49a9725c", "Parker Brothers", "931510", "Sky Skipper (1983) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "515046e3061b7b18aa3a551c3ae12673", "Atari - GCC, Mark Ackerman, Noellie Alito", "CX2692", "Moon Patrol (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "516ffd008057a1d78d007c851e6eff37", "Parker Brothers, Dawn Stockbridge", "PB5910", "Strawberry Shortcake - Musical Match-Ups (1983) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "517592e6e0c71731019c0cebc2ce044f", "Parker Brothers, Todd Marshall", "PB5550", "Q-bert's Qubes (1984) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "214", "", "" }, + { "517592e6e0c71731019c0cebc2ce044f", "Parker Brothers - JWDA, Todd Marshall", "PB5550", "Q-bert's Qubes (1984) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "214", "", "" }, { "517923e655755086a3b72c0b17b430e6", "Tron", "", "Super Tennis (Tron)", "AKA RealSports Tennis", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5188fee071d3c5ef0d66fb45c123e4a5", "Gameworld", "133-001", "Encounter at L-5 (1983) (Gameworld) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 50", "", "", "", "", "" }, { "519f007c0e14fb90208dbb5199dfb604", "Amiga - Video Soft", "", "Depth Charge (1983) (Amiga) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1099,7 +1099,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "51f211c8fc879391fee26edfa7d3f11c", "Activision, Bob Whitehead", "AX-015, AX-015-04", "Chopper Command (1982) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "521f4dd1eb84a09b2b19959a41839aad", "Bit Corporation", "PG206", "Bobby Is Going Home (1983) (BitCorp)", "AKA Bobby geht Heim", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "522c9cf684ecd72db2f85053e6f6f720", "Rainbow Vision - Suntek", "SS-008", "Year 1999, The (Rainbow Vision) (PAL)", "AKA Condor Attack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "52385334ac9e9b713e13ffa4cc5cb940", "CCE", "C-804", "Open, Sesame! (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "214", "YES", "" }, + { "52385334ac9e9b713e13ffa4cc5cb940", "CCE", "C-804", "Open, Sesame! (1983) (CCE)", "AKA I Want My Mommy", "", "", "", "", "", "", "", "", "", "", "", "", "", "214", "YES", "" }, { "523f5cbb992f121e2d100f0f9965e33f", "Joe Grand", "", "SCSIcide (1.30) (CGE 2001 Release) (Joe Grand)", "Uses the Paddle Controllers", "New Release", "", "", "", "", "", "", "PADDLES_IAXDR", "", "", "AUTO 65", "", "", "", "", "" }, { "524693b337f7ecc9e8b9126e04a232af", "", "", "Euchre (19-08-2001) (Eric Eid) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5256f68d1491986aae5cfdff539bfeb5", "Atari - GCC, Mark Ackerman, Noellie Alito", "CX2692", "Moon Patrol (07-26-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1198,7 +1198,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "5a8afe5422abbfb0a342fb15afd7415f", "Atari, Robert C. Polaro", "CX26155", "Sprint Master (1988) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5a93265095146458df2baf2162014889", "Activision, Steve Cartwright - Ariola", "EAX-031, EAX-031-04B - 711 031-717", "Frostbite (1983) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5a9685c4d51a6c1d6a9544946d9e8dc3", "AtariAge", "", "Grandma's Revenge (AtariAge)", "Can use driving controller in right port", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5a9d188245aff829efde816fcade0b16", "CCE", "C-808", "Phantom Tank (1983) (CCE) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5a9d188245aff829efde816fcade0b16", "CCE", "C-808", "Phantom Tank (1983) (CCE) (PAL)", "AKA Tanks But No Tanks", "", "", "", "", "", "", "", "", "", "", "", "", "36", "", "", "" }, { "5acf9865a72c0ce944979f76ff9610f0", "", "", "Dodge Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5ae73916fa1da8d38ceff674fa25a78a", "CCE", "", "Barnstorming (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5aea9974b975a6a844e6df10d2b861c4", "Atari, Dan Hitchens", "CX2656", "SwordQuest - EarthWorld (1982) (Atari)", "AKA Adventure I, SwordQuest I - EarthWorld", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1258,7 +1258,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "5f1b7d5fa73aa071ba0a3c2819511505", "CCE", "", "Cosmic Commuter (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5f2b4c155949f01c06507fb32369d42a", "Apollo, Ed Salvo", "AP-1001", "Skeet Shoot (1981) (Apollo) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5f316973ffd107f7ab9117e93f50e4bd", "", "", "Commando Raid (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5f39353f7c6925779b0169a87ff86f1e", "Atari - GCC, Betty Ryan Tylko, Douglas B. Macrae", "CX2694", "Pole Position (1983) (Atari) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5f39353f7c6925779b0169a87ff86f1e", "Atari - GCC, John Allred, Douglas B. Macrae, Betty Ryan Tylko", "CX2694", "Pole Position (1983) (Atari) [a]", "AKA RealSports Driving", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5f46d1ff6d7cdeb4b09c39d04dfd50a1", "Atari, Gary Palmer", "CX2661P", "Fun with Numbers (1980) (Atari) (PAL)", "AKA Basic Math", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5f560837396387455c9dcb05cdd4b053", "Canal 3 - Intellivision", "", "Eggomania (Canal 3)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 60", "", "", "", "", "" }, { "5f681403b1051a0822344f467b05a94d", "Atari, Howard Scott Warshaw - Sears", "CX2655 - 49-75167", "Yars' Revenge (1982) (Atari) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -1350,7 +1350,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "65917ae29a8c9785bb1f2acb0d6aafd0", "", "", "Junkosoft One Year Demo (1999) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6596b3737ae4b976e4aadb68d836c5c7", "Digivision", "", "Defender (Digivision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "659a20019de4a23c748ec2292ea5f221", "Retroactive", "", "Qb (V2.05) (NTSC) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "65b106eba3e45f3dab72ea907f39f8b4", "Sparrow - HomeComputer Software Co., Dan Schafer, Glenn Stohel, Jon Tedesco", "GCG 1001T", "Music Machine, The (1983) (Sparrow)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 45", "", "", "", "", "" }, + { "65b106eba3e45f3dab72ea907f39f8b4", "Sparrow - HomeComputer Software, Dan Schafer, Glenn Stohel, Jon Tedesco", "GCG 1001T", "Music Machine, The (1983) (Sparrow)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 45", "", "", "", "", "" }, { "65ba1a4c643d1ab44481bdddeb403827", "Quelle", "876.013 4", "Katastrophen-Einsatz (1983) (Quelle) (PAL)", "AKA M.A.S.H.", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "65bd29e8ab1b847309775b0de6b2e4fe", "Coleco, Ed English", "2667", "Roc 'n Rope (1984) (Coleco)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "65c6406f5af934590097c8c032ebb482", "", "", "Three Hugger (Pave Demo) (20-12-2002) (Billy Eno)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1402,7 +1402,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "68cd2adc6b1fc9a1f263ab4561112f30", "Thomas Jentzsch", "", "Boulderdash Demo (09-12-2002) (TJ)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "68feb6d6ff63e80df1302d8547979aec", "", "", "Starfield Demo 2 (20-12-2002) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "690a6049db78b9400c13521646708e9c", "King Tripod Enterprise Co.", "SS - 007", "Space Raid (King Tripod) (PAL)", "AKA Challenge of.... Nexar, The", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "6913c90002636c1487538d4004f7cac2", "Atari", "CX26131", "Monster Cise (1984) (Atari) (Prototype)", "Uses the Keypad Controllers (left only)", "Prototype", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "", "" }, + { "6913c90002636c1487538d4004f7cac2", "Atari - CCW", "CX26131", "Monster Cise (1984) (Atari) (Prototype)", "Uses the Keypad Controllers (left only)", "Prototype", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "", "" }, { "691d67910b08b63de8631901d1887c1f", "Arcadia Corporation, Steve Mundry, Scott Nelson", "AR-4401", "Survival Island (1983) (Arcadia) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, { "692202772d8b38ccf85a90c8003a1324", "", "", "Zi - The Flie Buster (2002) (Fernando Mora) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "693137592a7f5ccc9baae2d1041b7a85", "", "", "Qb (V2.02) (Stella) (2001) (Retroactive) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -1413,7 +1413,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "69df0411d4d176e558017f961f5c5849", "CCE", "C-831", "Cosmic Ark (1983) (CCE) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "69e79b1352b9ee1754bbe63b4a7062c3", "Barry Laws Jr.", "", "Pink Floyd - The Wall (2003) (Barry Laws Jr.) (Hack)", "Hack of Berzerk", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "69ebf910ab9b63e5b8345f016095003b", "", "", "Maze Demo 1 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "69fac82cd2312dd9ce5d90e22e2f070a", "Spectravision, Spectravideo - Quelle", "SA-202 - 412.851 8", "Planet Patrol (1982) (Spectravision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "69fac82cd2312dd9ce5d90e22e2f070a", "Spectravision - Spectravideo - Quelle", "SA-202 - 412.851 8", "Planet Patrol (1982) (Spectravision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6a03c28d505bab710bf20b954e14d521", "", "", "Pressure Gauge 2 Beta (Hozer Video Games)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6a07836c382195dd5305ce61d992aaa6", "Apollo, Larry Martin", "AP-2008", "Guardian (1982) (Apollo) (Prototype)", "Uses the Paddle Controller (left only)", "Prototype", "", "", "", "", "", "", "PADDLES", "", "", "01", "", "", "", "", "" }, { "6a091b8ffeacd0939850da2094b51564", "", "", "Vertically Scrolling Playfield (02-02-2003) (Aaron Bergstrom)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1429,7 +1429,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "6ac3fd31a51730358708c7fdc62487f8", "Matthias Jaap", "", "PC Invaders (Matthias Jaap) (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6ae4dc6d7351dacd1012749ca82f9a56", "Atari - GCC, Jaques Hugon, Seth Lipkin", "CX26125, CX26127", "Track and Field (1984) (Atari)", "Uses the Track & Field Controller", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6b01a519b413f8cfa2f399f4d2841b42", "", "", "Aphex Invaders (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "6b1fc959e28bd71aed7b89014574bdc2", "Bit Corporation", "PG203", "Phantom Tank (1982) (BitCorp) (PAL)", "AKA Phantom-Panzer", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "6b1fc959e28bd71aed7b89014574bdc2", "Bit Corporation", "PG203", "Phantom Tank (1982) (BitCorp) (PAL)", "AKA Tanks But No Tanks", "", "", "", "", "", "", "", "", "", "", "", "", "36", "", "", "" }, { "6b4eb5b3df80995b8d9117cb7e9aeb3c", "Gameworld, J. Ray Dettling", "133-006", "Journey Escape (1983) (Gameworld) (PAL)", "AKA Rock 'n' Roll Escape", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "6b683be69f92958abe0e2a9945157ad5", "U.S. Games Corporation - Western Technologies, Jeff Corsiglia, Paul Allen Newell, Steven B. Sidley, Tom Sloper", "VC2007", "Entombed (1983) (U.S. Games)", "Released as Name That Game for a contest (winning name was Entombed)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "6b6ca32228ae352b4267e4bd2cddf10c", "", "", "Pac-Man 4 (Pac-Man Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "33", "", "", "" }, @@ -1463,7 +1463,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "6d218dafbf5a691045cdc1f67ceb6a8f", "Robin Harbron", "", "6 Digit Score Display (1998) (Robin Harbron) (PD)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6d475019ea30d0b29f695e9dcfd8f730", "Eric Mooney", "", "Invaders by Erik Mooney (Alpha 2) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6d74ebaba914a5cfc868de9dd1a5c434", "", "", "Fortress (Smooth Version) (20-04-2003) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "6d842c96d5a01967be9680080dd5be54", "Activision, David Crane", "AB-035-04", "Pitfall II (1983) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "6d842c96d5a01967be9680080dd5be54", "Activision, David Crane", "AB-035-04", "Pitfall II (1984) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6d8a04ee15951480cb7c466e5951eee0", "Zirok", "", "Kanguru (1983) (Zirok)", "AKA Kangaroo", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6d9afd70e9369c2a6bff96c4964413b7", "", "", "Time Warp (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6dda84fb8e442ecf34241ac0d1d91d69", "Atari - GCC, Douglas B. Macrae", "CX2677", "Dig Dug (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1508,7 +1508,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "710497df2caab69cdcc45e919c69e13f", "Arcadia Corporation, Dennis Caswell", "5 AR-4200", "Labyrinth (Escape from the Mindmaster Beta) (1982) (Arcadia) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "713fde2af865b6ec464dfd72e2ebb83e", "", "", "Challenge (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "71464c54da46adae9447926fdbfc1abe", "M Network - APh Technological Consulting, Bruce Pedersen - INTV", "MT5663", "Lock 'n' Chase (1982) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "714e13c08508ee9a7785ceac908ae831", "Home Vision - Gem International Corp.", "VCS83123", "Parachute (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "714e13c08508ee9a7785ceac908ae831", "Home Vision - Gem International Corp. - VDI", "VCS83123", "Parachute (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "715dbf2e39ba8a52c5fe5cdd927b37e0", "Amiga", "3135", "S.A.C. Alert (1983) (Amiga) (Prototype)", "Uses Joyboard", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "715dd9e0240638d441a3add49316c018", "Atari", "", "128-in-1 Junior Console (Chip 2 of 4) (1991) (Atari) (PAL)", "Actually contains only 16 games, not 32", "", "", "16IN1", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7187118674ff3c0bb932e049d9dbb379", "Zirok", "", "Keystone Keypers (1983) (Zirok)", "AKA Keystone Kapers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1533,7 +1533,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "72fd08deed1d6195942e0c6f392e9848", "HES", "0701-406", "2 Pak Special - Wall Defender, Planet Patrol (1990) (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "72ffbef6504b75e69ee1045af9075f66", "Atari, Richard Maurer - Sears", "CX2632 - 49-75153", "Space Invaders (1980) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "73158ea51d77bf521e1369311d26c27b", "Zellers", "", "Challenge (Zellers)", "", "", "", "", "", "", "", "", "", "", "", "", "", "25", "", "", "" }, - { "73521c6b9fed6a243d9b7b161a0fb793", "Atari", "CX26163P", "Miniaturer Golf (32 in 1) (1988) (Atari) (PAL)", "AKA Miniature Golf", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "73521c6b9fed6a243d9b7b161a0fb793", "Atari, Tom Reuterdahl", "CX26163P", "Miniaturer Golf (32 in 1) (1988) (Atari) (PAL)", "AKA Miniature Golf", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "736388d73198552d77d423962000006f", "Dactari", "", "Tennis (Dactari) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "73a710e621d44e97039d640071908aef", "", "", "Barber Pole Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "73aa02458b413091ac940c0489301710", "Quelle - Otto Versand", "463.574 4 - 781393, 986153", "Kampf dem Steinfresser (1983) (Quelle) (PAL)", "Boom Bang (AKA Crackpots)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1576,7 +1576,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "75ea128ba96ac6db8edf54b071027c4e", "Atari, David Crane", "CX26163P", "Slot Machine (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "75ea60884c05ba496473c23a58edf12f", "Atari, Howard Scott Warshaw - Sears", "CX2655 - 49-75167", "Yars' Revenge (1982) (Atari) (PAL) [a]", "ROM must be started in bank 0", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "75ee371ccfc4f43e7d9b8f24e1266b55", "Atari, Greg Easter, Mimi Nyden", "CX26107", "Snow White and the Seven Dwarfs (11-09-1982) (Atari) (Prototype)", "ROM must be started in bank 0", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "7608abdfd9b26f4a0ecec18b232bea54", "Atari", "CX26163P", "NFL Football (32 in 1) (1988) (Atari) (PAL)", "AKA Football", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "7608abdfd9b26f4a0ecec18b232bea54", "Atari, Bob Whitehead", "CX26163P", "NFL Football (32 in 1) (1988) (Atari) (PAL)", "AKA Football", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7623a639a6fffdb246775fe2eabc8d01", "Activision, Bob Whitehead", "AG-005, CAG-005, AG-005-04", "Skiing (1980) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7628d3cadeee0fd2e41e68b3b8fbe229", "Atari", "CX26163P", "Fishing Derby (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7648e72a5b5899076688df18a1ddcf72", "CBS Electronics, Richard K. Balaska Jr., Andy Frank, Stuart Ross", "4L 2520 5000", "Tunnel Runner (1983) (CBS Electronics) (Prototype)", "Black Box", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1621,8 +1621,8 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "79d4af56036ec28f298cad964a2e2494", "", "", "Hangman Pac-Man Wordlist (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "79d6f61da3c64688ac8e075667f8a39f", "", "", "Tie-Fighters (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "79e5338dbfa6b64008bb0d72a3179d3c", "M Network, David Akers, Patricia Lewis Du Long - INTV", "MT4313", "Star Strike (1983) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "79fcdee6d71f23f6cf3d01258236c3b9", "Atari - GCC, Mike Feinstein, John Mracek", "CX2673, CX2673P", "Phoenix (1982) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "7a09299f473105ae1ef3ad6f9f2cd807", "Atari, Steve Wright", "CX2616P", "Pele's Soccer (1981) (Atari) (PAL)", "AKA Championship Soccer", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "79fcdee6d71f23f6cf3d01258236c3b9", "Atari - GCC, Mike Feinstein, John Mracek", "CX2673, CX2673P", "Phoenix (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "7a09299f473105ae1ef3ad6f9f2cd807", "Atari, Steve Wright", "CX2616P", "Pele's Soccer (1981) (Atari) (PAL)", "AKA Pele's Championship Soccer", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7a2af383014f5d810ad26d322823549d", "", "", "FlickerSort Demo (20-04-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7a5463545dfb2dcfdafa6074b2f2c15e", "20th Century Fox Video Games, Mark Turmell", "11007", "Turmoil (1982) (20th Century Fox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7a63d7ea3f2851bcf04f0bb4ba1a3929", "Arcadia Corporation, Dennis Caswell", "AR-4200", "Escape from the Mindmaster (3 of 4) (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1637,7 +1637,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "7ad257833190bc60277c1ca475057051", "Atari, Alan J. Murphy, Robert Zdybel", "CX2668", "RealSports Football (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "7ad782952e5147b88b65a25cadcdf9e0", "Imagic, Dave Johnson", "720119-1A, 03211", "Kwibble (1983) (Imagic) (Prototype)", "AKA Quick Step! Beta", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7adbcf78399b19596671edbffc3d34aa", "Atari, Joseph Tung", "CX26152", "Super Baseball (1988) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "7af40c1485ce9f29b1a7b069a2eb04a7", "Amiga", "3120", "Mogul Maniac (1983) (Amiga)", "Uses the Amiga Joyboard", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "7af40c1485ce9f29b1a7b069a2eb04a7", "Amiga - Video Soft", "3120", "Mogul Maniac (1983) (Amiga)", "Uses the Amiga Joyboard", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7b24bfe1b61864e758ada1fe9adaa098", "Atari, Chris Crawford", "", "Wizard (1980) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7b33407b2b198af74906b936ce1eecbb", "King Atari", "", "Ghostbuster 2 (King Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "7b3cf0256e1fa0fdc538caf3d5d86337", "CommaVid, Joseph Biel", "CM-009", "Stronghold (1983) (CommaVid)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1683,7 +1683,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "7e464186ba384069582d9f0c141f7491", "PlayAround - J.H.M.", "206", "General Re-Treat (1982) (PlayAround) (PAL)", "AKA Custer's Revenge", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7e4783a59972ae2cd8384f231757ea0b", "Atari - Imagineering, Dan Kichen", "CX26139P", "Crossbow (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7e51a58de2c0db7d33715f518893b0db", "CBS Electronics, E.F. Dreyer, Ed Salvo", "4L 2738 0000", "Mountain King (1983) (CBS Electronics) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "7e52a95074a66640fcfde124fffd491a", "Atari - GCC, Mike Feinstein, John Mracek", "CX2673", "Phoenix (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "7e52a95074a66640fcfde124fffd491a", "Atari - GCC, Mike Feinstein, John Mracek", "CX2673", "Phoenix (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7e7c4c59d55494e66eef5e04ec1c6157", "Baroque Gaming (Brian Eno)", "", "Warring Worms (2002) (Baroque Gaming)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7e8aa18bc9502eb57daaf5e7c1e94da7", "CBS Electronics", "M8774, M8794", "Wizard of Wor (1982) (CBS Electronics)", "Uses the Joystick Controllers (swapped)", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "YES", "" }, { "7e9da5cb84d5bc869854938fe3e85ffa", "Atari, Ian Shepard - Sears", "CX2604 - 6-99812, 49-75106", "Space War (1978) (Atari) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1697,7 +1697,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "7edc8fcb319b3fb61cac87614afd4ffa", "Activision, Alan Miller", "AG-003", "Checkers (1980) (Activision) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7ef3ca08abde439c6ccca84693839c57", "Arcadia Corporation, Dennis Caswell", "AR-4302", "Party Mix (1983) (Arcadia) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "01", "", "", "", "", "" }, { "7ef74879d7cb9fa0ef161b91ad55b3bb", "CCE", "", "Vanguard (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "7f0209cfcc3d181715463f4d6451cecf", "Atari - GCC, Betty Ryan Tylko, Douglas B. Macrae", "CX2694", "Pole Position (05-15-1983) (Atari) (Prototype)", "AKA RealSports Driving", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "7f0209cfcc3d181715463f4d6451cecf", "Atari - GCC, John Allred, Douglas B. Macrae, Betty Ryan Tylko", "CX2694", "Pole Position (05-15-1983) (Atari) (Prototype)", "AKA RealSports Driving", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7f07cd2e89dda5a3a90d3ab064bfd1f6", "Videospielkassette - Ariola", "PGP234", "Boxen (Ariola) (PAL)", "AKA Boxing", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7f430c33044e0354815392b53a9a772d", "HES", "773-891", "2 Pak Special - Cavern Blaster, City War (1992) (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7f525b07bc98080cc8950f7284e52ede", "Atari", "", "128-in-1 Junior Console (Chip 4 of 4) (1991) (Atari) (PAL)", "Actually contains only 16 games, not 32", "", "", "16IN1", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1752,9 +1752,9 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "82e7aab602c378cffdd8186a099e807e", "", "", "Space Robot (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "82efe7984783e23a7c55266a5125c68e", "CCE", "C-837", "Pizza Chef (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "834a2273e97aec3181ee127917b4b269", "Quelle", "043.151 0, 874.382 5", "Die hungrigen Froesche (1983) (Quelle) (PAL)", "AKA Frogs and Flies", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "835759ff95c2cdc2324d7c1e7c5fa237", "20th Century Fox Video Games, Douglas 'Dallas North' Neubauer", "11011", "M.A.S.H (1983) (20th Century Fox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "835759ff95c2cdc2324d7c1e7c5fa237", "20th Century Fox Video Games, Frank Cohen, Douglas 'Dallas North' Neubauer", "11011", "M.A.S.H (1983) (20th Century Fox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8372eec01a08c60dbed063c5524cdfb1", "", "", "Cross Force (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "8388d6fe59c38c0b3a6ab2c58420036a", "Atari, Frank Hausman, Steve Woita", "CX2686", "Quadrun (12-06-1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "8388d6fe59c38c0b3a6ab2c58420036a", "Atari, Frank Hausman, Mimi Nyden, Steve Woita", "CX2686", "Quadrun (12-06-1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "83b8c01c72306d60dd9b753332ebd276", "", "", "Bank Heist (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "83bdc819980db99bf89a7f2ed6a2de59", "Atari, Carla Meninsky - Sears", "CX2637 - 49-75158", "Dodge 'Em (1980) (Atari) [fixed]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "83d15fb9843d9f84aa3710538403f434", "", "", "Gunfight 2600 - Release Candidate (2001) (MP) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1808,11 +1808,11 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "877a5397f3f205bf6750398c98f33de1", "Erik Eid", "", "Euchre (Beta) (PAL) (12-09-2002) (Erik Eid)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8786c1e56ef221d946c64f6b65b697e9", "20th Century Fox Video Games, David Lubar", "11015", "AKA Space Adventure", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8786f229b974c393222874f73a9f3206", "Activision, Larry Miller - Ariola", "EAX-021, EAX-021-04I - 711 021-720", "Spider Fighter (1982) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "8786f4609a66fbea2cd9aa48ca7aa11c", "Goliath", "5", "Open Sesame (1983) (Goliath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "34", "", "YES", "" }, + { "8786f4609a66fbea2cd9aa48ca7aa11c", "Goliath", "5", "Open Sesame (1983) (Goliath) (PAL)", "AKA I Want My Mommy", "", "", "", "", "", "", "", "", "", "", "", "", "34", "", "YES", "" }, { "87b460df21b7bbcfc57b1c082c6794b0", "Dennis Debro", "", "Climber 5 (20-03-2003) (Dennis Debro)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "87b6a17132fc32f576bc49ea18729506", "Atari, Andrew Fuchs, Courtney Granner, Jeffrey Gusman, Mark R. Hahn", "CX2690", "Pengo (1984) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "87bea777a34278d29b3b6029833c5422", "Thomas Jentzsch", "", "Polaris (1983) (Thomas Jentzsch)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "87e79cd41ce136fd4f72cc6e2c161bee", "Atari - GCC, Mark Ackerman, Glenn Parker", "CX2675", "Ms. Pac-Man (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "87e79cd41ce136fd4f72cc6e2c161bee", "Atari - GCC, Mark Ackerman, Glenn Parker", "CX2675", "Ms. Pac-Man (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "87f020daa98d0132e98e43db7d8fea7e", "20th Century Fox Video Games - Sirius, David Lubar", "11001", "Worm War I (1982) (20th Century Fox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "883258dcd68cefc6cd4d40b1185116dc", "Activision, David Crane - Ariola", "EAZ-030, EAZ-030-04B, EAZ-030-04I - 711 030-725", "Decathlon (1983) (Activision) (PAL)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8874b68751fd2ba6d3306a263ae57a7d", "Eric Mooney", "", "Invaders by Erik Mooney (Alpha 1) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1850,7 +1850,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "8ac18076d01a6b63acf6e2cab4968940", "Atari, Dan Hitchens, Mimi Nyden", "CX2685", "Gravitar (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8af58a9b90b25907da0251ec0facf3b8", "Jone Yuan Telephonic Enterprise Co", "", "Cosmic Swarm (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "8b04e9d132b8e30d447acaa6bd049c32", "Starpath Corporation, Stephen H. Landrum", "AR-4400", "Dragonstomper (1982) (Starpath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "8b40a9ca1cfcd14822e2547eaa9df5c1", "Parker Brothers, Dave Hampton, Tom Sloper", "931517", "Q-bert (1983) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "8b40a9ca1cfcd14822e2547eaa9df5c1", "Parker Brothers - Western Technologies, Dave Hampton, Tom Sloper", "931517", "Q-bert (1983) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8b504b417c8626167a7e02f44229f0e7", "Retroactive", "", "Qb (V1.00) (NTSC) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "8b556c3d9ca8e5e6e665bd759b93ffae", "", "", "Synthcart (2002) (Paul Slocum) (PAL) [!]", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "YES", "" }, { "8b5b1e3a434ebbdc2c2a49dc68f46360", "CBS Electronics - Woodside Design Associates - Imaginative Systems Software, Dan Kitchen, Garry Kitchen", "4L1700, 4L1701, 4L1702, 4L1802, 4L2274", "Donkey Kong (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1909,7 +1909,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "8fffc8f15bb2e6d24e211884a5479aa5", "Retroactive", "", "Qb (V1.00) (PAL) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "9048ccb7e0802cd8fa5bfc2609f292d8", "Tigervision, Robert H. O'Neil", "7-007", "Polaris (1983) (Tigervision) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9057694dce8449521e6164d263702185", "Activision, Bob Whitehead", "AG-011", "Stampede (1981) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "90578a63441de4520be5324e8f015352", "Bit Corporation", "PGP204", "Open Sesame (4 Game in One Dark Green) (1983) (BitCorp) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "34", "", "YES", "" }, + { "90578a63441de4520be5324e8f015352", "Bit Corporation", "PGP204", "Open Sesame (4 Game in One) (1983) (BitCorp) (PAL)", "AKA I Want My Mommy", "", "", "", "", "", "", "", "", "", "", "", "", "34", "", "YES", "" }, { "9072c142728a3a3d994956d03bfacba2", "Fabrizio Zavagli", "", "Crash Dive (Fabrizio Zavagli) (PAL60)", "NTSC Conversion", "Hack", "", "", "", "", "", "", "", "", "", "", "PAL60", "30", "", "", "" }, { "90b1799dddb8bf748ee286d22e609480", "", "", "Ship Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "90b647bfb6b18af35fcf613573ad2eec", "AtariAge (Chris Walton)", "", "Juno First (2009)", "AtariVox supported", "Homebrew", "", "", "", "", "", "", "", "ATARIVOX", "", "", "", "", "", "YES", "" }, @@ -2110,7 +2110,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "a1ead9c181d67859aa93c44e40f1709c", "American Videogame - Dunhill Electronics, Darrell Wagner, Todd Clark Holm, John Simonds", "", "Tax Avoiders (1982) (American Videogame)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a1f9159121142d42e63e6fb807d337aa", "Quelle - Otto Versand", "700.223 1 - 781627", "Der moderne Ritter (1983) (Quelle) (PAL)", "AKA Fast Eddie", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a204cd4fb1944c86e800120706512a64", "Coleco", "2511", "Smurfs Save the Day (1983) (Coleco)", "Uses the Kid Vid Controller", "", "", "", "", "", "", "", "", "KIDVID", "", "", "", "", "", "", "" }, - { "a20b7abbcdf90fbc29ac0fafa195bd12", "Quelle", "719.383 2 - 649635, 781393, 781784", "Motocross (1983) (Quelle) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "a20b7abbcdf90fbc29ac0fafa195bd12", "Quelle - Otto Versand", "719.383 2 - 649635, 781393, 781784, 986404", "Motocross (1983) (Quelle) (PAL)", "AKA Motorcross", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a20d931a8fddcd6f6116ed21ff5c4832", "Apollo - Games by Apollo, Ed Salvo, Byron Parks", "AP-2003", "Racquetball (1981) (Apollo) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "a2170318a8ef4b50a1b1d38567c220d6", "Amiga", "3125", "Surf's Up (1983) (Amiga) (Prototype) [a1]", "Uses the Amiga Joyboard", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a23ffc86804240ce77134a1c91926685", "", "", "Star Fire - Paulstar WIP (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2155,7 +2155,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "a4e885726af9d97b12bb5a36792eab63", "Xonox - K-Tel Software - Beck-Tech", "6210, 7210, 06003. 99001", "Spike's Peak (1983) (Xonox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "223", "", "" }, { "a4ecb54f877cd94515527b11e698608c", "Atari, Jerome Domurat, Howard Scott Warshaw", "CX26119", "Saboteur (12-20-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a4f1cea2c8479284e2a2292f8d51b5fa", "", "", "Gunfight 2600 - The Final Kernel Part 2 (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "a4ff39d513b993159911efe01ac12eba", "Atari - GCC, Betty Ryan Tylko, Douglas B. Macrae", "CX2694", "Pole Position (1983) (Atari)", "AKA RealSports Driving", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "a4ff39d513b993159911efe01ac12eba", "Atari - GCC, John Allred, Douglas B. Macrae, Betty Ryan Tylko", "CX2694", "Pole Position (1983) (Atari)", "AKA RealSports Driving", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a511f7ee13e4b35512f9217a677b4028", "Atari, Jerome Domurat, Howard Scott Warshaw", "CX2674", "E.T. - The Extra-Terrestrial (1982) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a5262fe6d01d6a1253692682a47f79dd", "", "", "JKH Text Scrolling Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a537879d8e82e1061d3ad800479d3b84", "Andrew Wallace", "", "Brooni (2001) (Andrew Wallace) (PD) (PAL)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2172,7 +2172,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "a62e3e19280ff958407e05ca0a2d5ec7", "", "", "Hangman Ghost Biglist3 (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a6737c81542a99ee71cb5f5ff14703d9", "", "", "Scrolling Playfield 3 (Junkosoft) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a69f5b1761a8a11c98e706ec7204937f", "", "", "Pharaoh's Curse (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "34", "", "YES", "" }, - { "a74689a08746a667a299b0507e1e6dd9", "Arcadia Corporation, Stephen Harland Landrum", "AR-4105", "Official Frogger, The (1983) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "a74689a08746a667a299b0507e1e6dd9", "Starpath Corporation, Stephen H. Landrum", "9 AR-4105", "Official Frogger, The (1983) (Starpath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a7523db9a33e9417637be0e71fa4377c", "Videospielkassette - Ariola", "PGP238", "Gangster (Ariola) (PAL)", "AKA Outlaw", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a7673809068062106db8e9d10b56a5b3", "Atari, Jerome Domurat, Andrew Fuchs, Dave Staugas, Robert Vieira", "CX26118, CX26118P", "Millipede (1984) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a779b9fa02c62d00d7c31ed51268f18a", "Arcadia Corporation, Brian McGhie", "AR-4104", "Rabbit Transit (1983) (Arcadia) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2217,6 +2217,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "aa5cfe3b20395aba1d479135943ad85c", "", "", "Defender (Hack) (Unknown)", "", "Hack of Defender", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "aa7bb54d2c189a31bb1fa20099e42859", "CBS Electronics, Ed English", "4L4478", "Mr. Do! (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "aa8e4b2cb8a78ffe6b20580033f4dec9", "", "", "Bitmap Demo (13-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "aaac0d277eda054861e613c59c2e4ff2", "JWDA, Todd Marshall", "", "Music Demo (JWDA)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "aab840db22075aa0f6a6b83a597f8890", "Home Vision - Gem International Corp. - R.J.P.G.", "VCS83124", "Racing Car (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, { "aad61898633f470ce528e3d7ef3d0adb", "Commavid, Ben Burch", "CM-010", "Rush Hour (1983) (Commavid) (Prototype) [a1]", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "aad91be0bf78d33d29758876d999848a", "Activision, David Crane", "AX-018, AX-018-04", "Pitfall! (1981) (Activision) (Prototype)", "Pitfall Harry's Jungle Adventure (Jungle Runner)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2249,7 +2250,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "acb6787b938079f4e74313a905ec3ceb", "", "", "Chronocolor Donkey Kong (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "acb7750b4d0c4bd34969802a7deb2990", "Parker Brothers, Ed Temple", "PB5310", "Amidar (1982) (Parker Bros)", "", "Uncommon", "", "", "A", "A", "", "", "", "", "", "", "", "", "", "", "" }, { "acb962473185d7a652f90ed6591ae13b", "Imagic, Dennis Koble", "IA3203, IX-010-04", "Atlantis (1982) (Imagic) (16K)", "AKA Lost City of Atlantis", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "ace319dc4f76548659876741a6690d57", "Atari, Steve Wright", "CX2616", "Pele's Soccer (1981) (Atari)", "AKA Championship Soccer", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "ace319dc4f76548659876741a6690d57", "Atari, Steve Wright", "CX2616", "Pele's Soccer (1981) (Atari)", "AKA Pele's Championship Soccer", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ad2e6bfb3b9b9b36ba8bf493ce764c49", "", "", "2600 Collison Demo 1 (Piero Cavina) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ad42e3ca3144e2159e26be123471bffc", "Atari", "CX26163P", "Human Cannonball (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ad7e97c19bd25d5aa3999430845c755b", "", "", "Sprite Demo 5 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2304,7 +2305,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "b1b20536aef4eed9c79dc5804f077862", "", "", "Euchre (NTSC) (09-11-2001) (Erik Eid)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b1c14b5ac896400cc91c8e5dd67acb59", "", "", "River Raid (208 in 1) (Unknown) (PAL) (Hack)", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b1d1e083dc9e7d9a5dc1627869d2ade7", "CCE", "C-1004", "Mario's Bros. (1983) (CCE)", "AKA Mario Bros.", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "b1e2d5dc1353af6d56cd2fe7cfe75254", "Atari - Axlon, Steve DeFrisco", "CX26171", "MotoRodeo (1990) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "b1e2d5dc1353af6d56cd2fe7cfe75254", "Atari - Axlon, Steve DeFrisco", "CX26171", "MotoRodeo (1991) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "b1fd0b71de9f6eeb5143a97963674cb6", "", "", "Multi-Color Demo 7 (Bob Colbert) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b227175699e372b8fe10ce243ad6dda5", "Atari, Brad Stewart - Sears", "CX2649, 49-75163", "Asteroids (1981) (Atari) [a1]", "", "Common", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "b23ebf427713dd0198b7ef47dbd07ef4", "Jone Yuan Telephonic Enterprise Co", "", "Sky Diver (Jone Yuan) (4K) (Hack)", "2600 Screen Search Console", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2313,7 +2314,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "b2737034f974535f5c0c6431ab8caf73", "CBS Electronics, Richard K. Balaska Jr., Andy Frank, Stuart Ross", "4L 2520 5000", "Tunnel Runner (1983) (CBS Electronics)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b2761efb8a11fc59b00a3b9d78022ad6", "Atari, Bob Whitehead - Sears", "CX2651 - 99805, 49-75602", "Blackjack (1977) (Atari) (4K)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES_IAXIS", "", "", "", "", "", "", "", "" }, { "b290c2b139344fcff5b312c71b9ac3b2", "Atari", "CX26163P", "UFO (32 in 1) (1988) (Atari) (PAL) (4K)", "AKA Space Jockey", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "b29359f7de62fed6e6ad4c948f699df8", "Puzzy - Bit Corporation", "PG203", "Phantom Tank (1982) (Puzzy) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "b29359f7de62fed6e6ad4c948f699df8", "Goliath", "3", "Phantom Tank (1983) (Goliath) (PAL)", "AKA Tanks But No Tanks", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b2a6f31636b699aeda900f07152bab6e", "", "", "Space Instigators (Public Release 2) (06-01-2003) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b2d1e63f7f22864096b7b6c154151d55", "Fabrizio Zavagli", "", "Bounce! (17-03-2003) (Fabrizio Zavagli)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "b2d3bcee001cff2bd2d8a21b2cb55109", "Atari - GCC, Mike Feinstein, Kevin Osborn", "CX2691", "Joust (08-09-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -2342,7 +2343,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "b4f87ce75f7329c18301a2505fe59cd3", "Videospielkassett - Ariola", "PGP232", "Autorennen (Ariola) (PAL)", "AKA Grand Prix", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b50ae55aac93fbed258bc5a873edd2cb", "Recompile", "", "E.T. The Extra-Terrestrial (Recompile) (Hack)", "www.neocomputer.org/projects/et", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b5110f55ed99d5279f18266d001a8cd5", "Eckhard Stolberg", "", "Auto-mobile Demo (2001) (Eckhard Stolberg)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "b56264f738b2eb2c8f7cf5a2a75e5fdc", "Atari - GCC, Betty Ryan Tylko, Douglas B. Macrae", "CX2694, CX2694P", "Pole Position (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "b56264f738b2eb2c8f7cf5a2a75e5fdc", "Atari - GCC, John Allred, Douglas B. Macrae, Betty Ryan Tylko", "CX2694, CX2694P", "Pole Position (1983) (Atari) (PAL)", "AKA RealSports Driving", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b5657d4c1c732fbb6af150668464247f", "Arcadia Corporation, Stephen H. Landrum", "AR-4400", "Excalibur (Dragonstomper Beta) (1982) (Arcadia) (Prototype)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b59417d083b0be2d49a7d93769880a4b", "Pet Boat", "", "Donkey Kong (1983) (Pet Boat) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b59fd465abf76f64c85652ff29d5952d", "VentureVision, Dan Oliver", "", "Innerspace (1983) (VentureVision) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2350,14 +2351,14 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "b5cb9cf6e668ea3f4cc2be00ea70ec3c", "CommaVid, Irwin Gaines - Ariola", "CM-005 - 712 005-720", "Mines of Minos (1982) (CommaVid) (PAL)", "AKA Im Labyrinth des Roboters", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "b5cdbab514ea726a14383cff6db40e26", "Video Gems", "VG-04", "Mission Survive (1983) (Video Gems) (PAL) [a]", "", "", "", "", "", "A", "", "", "", "", "", "", "", "", "", "YES", "" }, { "b5efe0271d2214e4d5dc798881486884", "Atari - Axlon, Steve DeFrisco", "CX26192", "Klax (06-14-1990) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "b6166f15720fdf192932f1f76df5b65d", "Amiga", "3130", "Off Your Rocker (1983) (Amiga) (Prototype)", "Uses the Amiga Joyboard", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "b6166f15720fdf192932f1f76df5b65d", "Amiga - Video Soft", "3130", "Off Your Rocker (1983) (Amiga) (Prototype)", "Uses the Amiga Joyboard", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b64426e787f04ff23ee629182c168603", "Dynacom", "", "Plaque Attack (1983) (Dynacom)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b65d4a38d6047735824ee99684f3515e", "Dynacom", "", "MegaBoy (Dynacom)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b676a9b7094e0345a76ef027091d916b", "Thomas Jentzsch", "", "Mission Survive (Thomas Jentzsch)", "NTSC Conversion", "Homebrew", "", "", "", "A", "", "", "", "", "", "", "", "", "220", "YES", "" }, { "b6812eaf87127f043e78f91f2028f9f4", "Simage", "", "Eli's Ladder (1984) (Simage)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b6821ac51c4c1dcb283f01be2f047dc1", "", "", "Rubik's Cube 3D Demo (25-11-2002) (TJ)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b6960be26bee87d53ba4e2e71cfe772f", "", "", "3-D Corridor (Spiral Words) (31-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "b6d52a0cf53ad4216feb04147301f87d", "Imagic, Michael Greene", "720055-1A, IA3312", "No Escape! (1982) (Imagic)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "b6d52a0cf53ad4216feb04147301f87d", "Imagic, Michael Greene", "720055-1A, IA3312", "No Escape! (1983) (Imagic)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b6e40bce550672e5495a8cdde7075b8b", "Arcadia Corporation, Steve Mundry, Scott Nelson", "AR-4401", "Survival Island (1 of 3) (1983) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b702641d698c60bcdc922dbd8c9dd49c", "Atari, Ian Shepard", "CX26163P", "Space War (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b719ada17771a8d206c7976553825139", "Ron Corcoran", "", "DUP Space Invaders (Ron Corcoran) (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2514,14 +2515,14 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "c473b222b7c5308d0773326416094272", "", "", "Star Fire (28-11-2002) (MP) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c47b7389e76974fd0de3f088fea35576", "Funvision - Fund. International Co.", "", "Mighty Mouse (Funvision)", "AKA Gopher", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c482f8eebd45e0b8d479d9b71dd72bb8", "Retroactive", "", "Push (V0.03) (1998) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "c49fe437800ad7fd9302f3a90a38fb7d", "Atari, Dan Hitchens", "CX2697, CX2697P", "Mario Bros. (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "c49fe437800ad7fd9302f3a90a38fb7d", "Atari, Dan Hitchens, Mimi Nyden", "CX2697, CX2697P", "Mario Bros. (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c4b73c35bc2f54b66cd786f55b668a82", "Arcadia Corporation, Stephen Harland Landrum", "AR-4101", "Communist Mutants from Space (1982) (Arcadia) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c4bbbb0c8fe203cbd3be2e318e55bcc0", "", "", "Atlantis (Unknown) (PAL) (Hack)", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c4bc8c2e130d76346ebf8eb544991b46", "Imagic", "", "Imagic Selector ROM (1982) (Imagic) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c4d888bcf532e7c9c5fdeafbb145266a", "", "", "Space Robot (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "c504a71c411a601d1fc3173369cfdca4", "Retroactive", "", "Qb (V2.02) (Stella) (2001) (Retroactive)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "c5124e7d7a8c768e5a18bde8b54aeb1d", "Imagic, Rob Fulop", "720104-2A, IA3204P, EIX-008-04I", "Cosmic Ark (1982) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "c517144e3d3ac5c06f2f682ebf212dd7", "Tigervision - Teldec", "7-008 - 3.60006 VG", "Miner 2049er (1982) (Tigervision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "c517144e3d3ac5c06f2f682ebf212dd7", "Tigervision - Teldec", "7-008 - 3.60006 VG", "Miner 2049er (1983) (Tigervision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c529e63013698064149b9e0468afd941", "", "", "S.I.PLIX 2 (Hack)", "Hack of Kaboom!", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "01 50", "", "", "", "", "" }, { "c52d9bbdc5530e1ef8e8ba7be692b01e", "Atari, Robert C. Polaro", "CX26130", "Holey Moley (02-29-1984) (Atari) (Prototype)", "Uses Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "c5301f549d0722049bb0add6b10d1e09", "Atari, Carla Meninsky, Ed Riddle - Sears", "CX2611 - 99821, 49-75149", "Indy 500 (1977) (Atari)", "Uses the Driving Controllers", "", "", "", "", "", "", "", "DRIVING", "DRIVING", "", "45", "", "", "", "", "" }, @@ -2551,7 +2552,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "c6d7fe7a46dc46f962fe8413c6f53fc9", "Parker Brothers, Mark Lesser", "PB5950", "Lord of the Rings (1983) (Parker Bros) (Prototype) [a]", "Journey to Rivendell (The Lord of the Rings I)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c6db733e0b108c2580a1d65211f06dbf", "Atari, Eric Manghise, Joseph Tung", "CX2640", "RealSports Baseball (07-09-1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c738fc3f5aae1e8f86f7249f6c82ac81", "Atari, Brad Stewart - Sears", "CX2622 - 6-99813, 49-75107", "Breakout (1978) (Atari) (16K)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "01 60", "", "", "", "", "" }, - { "c73ae5ba5a0a3f3ac77f0a9e14770e73", "Arcadia Corporation, Stephen Harland Landrum", "AR-4105", "Official Frogger, The (1983) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "32", "", "", "" }, + { "c73ae5ba5a0a3f3ac77f0a9e14770e73", "Starpath Corporation, Stephen H. Landrum", "9 AR-4105", "Official Frogger, The (1983) (Starpath)", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, { "c745487828a1a6a743488ecebc55ad44", "Rainbow Vision - Suntek", "SS-002", "Galactic (Rainbow Vision) (PAL)", "AKA The Challenge of.... Nexar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c74bfd02c7f1877bbe712c1da5c4c194", "Thomas Jentzsch", "", "River Raid Tanks (Thomas Jentzsch) (Hack)", "Hack of River Raid", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c7600d72247c5dfa1ec1a88d23e6c85e", "Arcadia Corporation, Scott Nelson", "13", "Sweat! - The Decathlon Game (1 of 3) (1983) (Arcadia) (Prototype)", "Uses the Paddle Controllers (left only)", "Prototype", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "", "" }, @@ -2571,7 +2572,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "c9196e28367e46f8a55e04c27743148f", "Atari", "CX26163P", "Stampede (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c92cfa54b5d022637fdcbdc1ef640d82", "Retroactive", "", "Qb (V2.05) (PAL) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "c9b7afad3bfd922e006a6bfc1d4f3fe7", "Atari, Larry Kaplan - Sears", "CX2628 - 6-99842, 49-75117", "Bowling (1979) (Atari)", "", "Common", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "c9c25fc536de9a7cdc5b9a916c459110", "Activision, Mike Lorenzen", "AX-023", "Oink! (1982) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "c9c25fc536de9a7cdc5b9a916c459110", "Activision, Mike Lorenzen", "AX-023", "Oink! (1983) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c9d02d3cfeef8b48fb71cb4520a4aa84", "", "", "Euchre (More for less) (PAL) (22-08-2002) (Erik Eid)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c9e721eb29c940c2e743485b044c0a3f", "Arcadia Corporation, Dennis Caswell", "AR-4200", "Escape from the Mindmaster (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c9f6e521a49a2d15dac56b6ddb3fb4c7", "Parker Brothers, Rex Bradford", "PB5000", "Star Wars - Jedi Arena (1983) (Parker Bros)", "Uses the Paddle Controllers (swapped)", "", "", "", "", "", "", "", "PADDLES", "", "YES", "10 50", "", "", "", "", "" }, @@ -2607,7 +2608,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "cc1939e4769d0c157ace326efcfdcf80", "Arcadia Corporation, Dennis Caswell", "AR-4200", "Escape from the Mindmaster (3 of 4) (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cc2973680c150886cce1ed8693c3aca2", "Quelle", "874.254 6", "Super-Cowboy beim Rodeo (1983) (Quelle) (PAL) (4K)", "AKA Stampede", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cc3d942c6958bd16b1c602623f59e6e1", "Atari, Bill Aspromonte, John Russell, Michael Sierchio, Robert Zdybel", "CX26114", "Pigs in Space (1983) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "cc7138202cd8f6776212ebfc3a820ecc", "Atari, Christopher H. Omarzu, Preston Stuart, Bruce Williams", "CX26101", "Oscar's Trash Race (03-30-1983) (Atari) (Prototype)", "Uses the Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, + { "cc7138202cd8f6776212ebfc3a820ecc", "Atari - CCW, Christopher H. Omarzu, Preston Stuart, Bruce Williams", "CX26101", "Oscar's Trash Race (03-30-1983) (Atari) (Prototype)", "Uses the Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "cc724ebe74a109e39c0b2784ddc980ca", "Atari, Jerome Domurat, Dave Staugas", "CX2682", "Krull (05-27-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cc74ddb45d7bc4d04c2e6f1907416699", "", "", "Colour Display Programme (1997) (Chris Cracknell)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cca33ae30a58f39e3fc5d80f94dc0362", "", "", "Okie Dokie (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2718,7 +2719,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "d326db524d93fa2897ab69c42d6fb698", "Parker Brothers, Paul Crowley", "931505", "Super Cobra (1982) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d339b95f273f8c3550dc4daa67a4aa94", "", "", "Laser Blast (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d341d39774277cee6a1d378a013f92ac", "Xonox, John Perkins", "6230, 7210, 06004, 99004", "Artillery Duel (1983) (Xonox) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "20", "", "", "" }, - { "d3423d7600879174c038f53e5ebbf9d3", "U.S. Games Corporation", "VC2005", "Piece o' Cake (1982) (U.S. Games)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 60", "", "", "", "", "" }, + { "d3423d7600879174c038f53e5ebbf9d3", "U.S. Games Corporation - Western Technologies", "VC2005", "Piece o' Cake (1983) (U.S. Games)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 60", "", "", "", "", "" }, { "d3456b4cf1bd1a7b8fb907af1a80ee15", "Avalon Hill, Duncan Scott", "5003002", "Wall Ball (1983) (Avalon Hill)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "d34b933660e29c0a0a04004f15d7e160", "", "", "Multi-Color Demo 5 (Bob Colbert) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d36308387241e98f813646f346e7f9f7", "King Atari", "", "Ghostbuster 2 (King Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -2758,7 +2759,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "d65900fefa7dc18ac3ad99c213e2fa4e", "", "", "Grid and Purple Dot Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d69559f9c9dc6ef528d841bf9d91b275", "Activision, Alan Miller", "AX-016", "StarMaster (1982) (Activision)", "Use Color/BW switch to change between galactic chart and front views", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d6a44277c3eb4f9d039185e0ecf7bfa6", "", "", "Trick (1997) (Eckhard Stolberg)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "d6acff6aed0f04690fe4024d58ff4ce3", "Spectravision, Spectravideo - Quelle", "SA-202 - 412.851 8", "Planet Patrol (1982) (Spectravision) (PAL) [different spaceship]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "d6acff6aed0f04690fe4024d58ff4ce3", "Spectravision - Spectravideo - Quelle", "SA-202 - 412.851 8", "Planet Patrol (1982) (Spectravision) (PAL) [different spaceship]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d6b8beeb05e5b730084d4b8f381bbf8d", "", "", "208 in 1 Game Select ROM (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d6d1ddd21e9d17ea5f325fa09305069c", "Funvision - Fund. International Co.", "", "Time Warp (1982) (Funvision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d6d5dd8fd322d3cf874e651e7b6c1657", "", "", "How to Draw a Playfield (1997) (Nick Bensema) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2805,7 +2806,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "da6465a34d2e44d26aa9a2a0cd1bce4d", "Absolute Entertainment, Alex DeMeo", "AG-041-04", "Title Match Pro Wrestling (1987) (Absolute) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "da64f33d0521d5c9958e5d2d4434ff95", "", "", "Star Fire - Return of the Starfield (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "da66d75e4b47fab99733529743f86f4f", "Digitel", "", "Chopper Command (1983) (Digitel)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "da732c57697ad7d7af414998fa527e75", "Atari, Glenn Axworthy", "CX26129", "Midnight Magic (1984) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "da732c57697ad7d7af414998fa527e75", "Atari - Glenn Axworthy", "CX26129", "Midnight Magic (1986) (Atari) (PAL)", "AKA Pinball Wizard", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "da79aad11572c80a96e261e4ac6392d0", "Salu - Ubi Soft, Dennis M. Kiss", "460673", "Pick 'n' Pile (1990) (Salu) (PAL)", "", "", "", "", "", "", "", "YES", "", "", "", "", "", "40", "256", "YES", "" }, { "da7a17dcdaa62d6971393c0a6faf202a", "", "", "Flag Capture (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dab844deed4c752632b5e786b0f47999", "", "", "Super Challenge Baseball (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2818,7 +2819,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "dafc3945677ccc322ce323d1e9930beb", "Atari", "", "A-Team (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "db1753cc702c18d3917ec7f3b0e8659f", "", "", "Frame Counter 2 (2001) (Jake Patterson) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "db339aea2b65b84c7cfe0eeab11e110a", "", "", "Chronocolor Frame Demo 2 (10-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "db4eb44bc5d652d9192451383d3249fc", "CBS Electronics, E.F. Dreyer, Ed Salvo", "4L 2738 0000", "Mountain King (1983) (CBS Electronics)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "db4eb44bc5d652d9192451383d3249fc", "CBS Electronics - E.F. Dreyer - VSS, Ed Salvo", "4L 2738 0000", "Mountain King (1983) (CBS Electronics)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "db5073bd75eb05f7d62a7268396d1e77", "Atari", "CX26163P", "Golf (32 in 1) (1988) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "db76f7a0819659d9e585f2cdde9175c7", "Xonox", "99005, 6220, 6250", "Robin Hood (1983) (Xonox) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, { "db80d8ef9087af4764236f7b5649fa12", "M Network, Steve Crandall, Patricia Lewis Du Long", "MT4646", "Rocky & Bullwinkle (1983) (Mattel) (Prototype) (4K)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2834,7 +2835,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "dc13df8420ec69841a7c51e41b9fbba5", "Atari, Mimi Nyden, Steve Woita", "CX26132", "Garfield (06-21-1984) (Atari) (Prototype)", "AKA Garfield on the Run", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dc33479d66615a3b09670775de4c2a38", "Suntek", "SS-033", "I.Q. Memory Teaser (Suntek) (PAL)", "AKA IQ 180", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dc6aa0bb21a6e66e80e75ba5edc5c0dd", "", "", "Star Fire - Kernel Done (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "dc81c4805bf23959fcf2c649700b82bf", "Imagic, Michael Greene", "720055-2A, IA3312P", "No Escape! (1982) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "dc81c4805bf23959fcf2c649700b82bf", "Imagic, Michael Greene", "720055-2A, IA3312P", "No Escape! (1983) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dc905b22de0f191a029df13eddfcabc4", "Atari, Warren Robinett", "", "Elf Adventure (05-02-83) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dca90ea1084a2fdbe300d7178ca1a138", "Imagic, Dennis Koble", "IA3000P", "Trick Shot (1982) (Imagic) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "dca941dab5c6f859b71883b13ade9744", "", "", "Hangman Pac-Man Biglist2 (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2854,7 +2855,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "dd92d6ad50976f881d86b52d38616118", "SpkSoft", "", "River Raid (SpkSoft) [h1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dda23757407c4e217f64962c87ad0c82", "Atari Freak 1", "", "Nitemare at Sunshine Bowl-a-Rama (Atari Freak 1) (Hack) [a]", "Hack of Pac-Man Jr.", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ddd1efc1862cd3eb3baf4cba81ff5050", "", "", "Max3 (2001) (Maxime Beauvais) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "de0173ed6be9de6fd049803811e5f1a8", "Xonox - K-Tel Software, Anthony R. Henderson", "99008, 6240", "Motocross Racer (1983) (Xonox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "de0173ed6be9de6fd049803811e5f1a8", "Xonox - K-Tel Software - Product Guild, Anthony R. Henderson", "99008, 6240", "Motocross Racer (1983) (Xonox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "de07e9cb43ad8d06a35f6506e22c62e9", "", "", "Oh No! (Version 4) (22-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "de1a636d098349be11bbc2d090f4e9cf", "", "", "Pressure Gauge (Hozer Video Games)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "de1e9fb700baf8d2e5ae242bffe2dbda", "Activision - Imagineering, Mike Reidel", "EAK-043-04I", "Commando (1988) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2877,12 +2878,12 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "df3e6a9b6927cf59b7afb626f6fd7eea", "", "", "Tuby Bird (208 in 1) (Unknown) (PAL)", "AKA Dolphin", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "df40af244a8d68b492bfba9e97dea4d6", "Franklin Cruz", "", "Asteroids 2 (Franlin Cruz) (Hack)", "Hack of Asteroids", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "df5cc5cccdc140eb7107f5b8adfacda1", "Cracker Jack Productions", "", "Lumberman (Cracker Jack) (Hack)", "Hack of Pac-Man", "Hack", "", "", "", "", "", "", "", "", "", "", "", "33", "", "", "" }, - { "df62a658496ac98a3aa4a6ee5719c251", "Atari - Sears", "CX2626 - 6-99829, 49-75116", "Miniature Golf (1979) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "df62a658496ac98a3aa4a6ee5719c251", "Atari, Tom Reuterdahl - Sears", "CX2626 - 6-99829, 49-75116", "Miniature Golf (1979) (Atari)", "AKA Arcade Golf", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "df6a28a89600affe36d94394ef597214", "Apollo - Games by Apollo, Dan Oliver", "AP-2002", "Space Cavern (1981) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "df6a46714960a3e39b57b3c3983801b5", "Puzzy - Bit Corporation", "PG201", "Sea Monster (1982) (Puzzy) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "df753cb87d3af4d03f694ab848638108", "CBS Electronics, Bob Curtiss", "4L1845, 4L1852, 4L1853, 4L1854", "Solar Fox (1983) (CBS Electronics) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "df95e4af466c809619299f49ece92365", "Atari - CCW, Michael Callahan, Preston Stuart", "CX26103", "Alpha Beam with Ernie (06-03-1983) (Atari) (Prototype) (PAL)", "Uses Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, - { "dfad86dd85a11c80259f3ddb6151f48f", "HES, David Lubar", "535", "My Golf (1990) (HES) (PAL) [fixed]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "dfad86dd85a11c80259f3ddb6151f48f", "HES - Imagineering, David Lubar", "535", "My Golf (1990) (HES) (PAL) [fixed]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dfafa3fa58f5cc3f0342cca475df6095", "", "", "Space Treat (V1.1 Beta) (24-12-2002) (Fabrizio Zavagli)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dfc03ef371cf5163f54c50d8ee73c8cf", "Atari, Gary Palmer", "CX2661", "Fun with Numbers (1980) (Atari) (4K)", "AKA Basic Math", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dfc3dbbb39f05d7dd8ee3ac987478970", "", "", "Imagic Selector ROM (1982) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2938,7 +2939,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e2ca84a2bb63d1a210ebb659929747a9", "Telesys, Don 'Donyo' Ruffcorn", "1002", "Cosmic Creeps (1982) (Telesys) (PAL)", "AKA Space Maze, Spaze Maze", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "e2eccbbe963f80f291cb1f18803bf557", "Atari, Joe Decuir, Steve Mayer, Larry Wagner", "CX26163P", "Combat (32 in 1) (1988) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "40", "256", "", "" }, { "e314b42761cd13c03def744b4afc7b1b", "Activision, David Crane, Dan Kitchen", "AZ-108-04", "Ghostbusters (1985) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e34c236630c945089fcdef088c4b6e06", "Activision, David Crane - Ariola", "EAB-035-04 - 711 035-720", "Pitfall II (1983) (Activision) (PAL)", "Lost Caverns", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "e34c236630c945089fcdef088c4b6e06", "Activision, David Crane - Ariola", "EAB-035-04 - 711 035-721", "Pitfall II (1984) (Activision) (PAL)", "Lost Caverns", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e3533684a7ef930a7fbd0c4dd8ec4847", "CCE", "C-856", "Pimball (1983) (CCE)", "AKA Video Pinball", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e3600be9eb98146adafdc12d91323d0f", "Atari, Carol Shaw", "CX2618, CX2618P", "3-D Tic-Tac-Toe (1980) (Atari) (PAL)", "", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e363e467f605537f3777ad33e74e113a", "Atari, Bob Whitehead - Sears", "CX2603 - 99803, 49-75601", "Star Ship (1977) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2948,7 +2949,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e39843c56b7a4a08b18fa7949ec3ee6b", "", "", "Joshua Invaders (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e39a13b13dc82c5fdbfbbfd55ba1230e", "", "", "Analog Clock (Additional Frame Info) (V0.0) (20-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e3c0451d29dad724231bc5818ec4bae0", "", "", "Single-Scanline Positioning Demo 1 (2001) (Roger Williams)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e3c35eac234537396a865d23bafb1c84", "TechnoVision", "TVS1001", "Nuts (1983) (TechnoVision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "45", "", "", "" }, + { "e3c35eac234537396a865d23bafb1c84", "TechnoVision - Video Technology", "TVS1001", "Nuts (1983) (TechnoVision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "45", "", "", "" }, { "e3ed4ba3361756970f076e46e9cad1d2", "", "", "Tennis (Unknown) (PAL) (4K) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e40a818dac4dd851f3b4aafbe2f1e0c1", "Atari, Bill Aspromonte, Dr. Lee Salk", "CX26135", "Peek-A-Boo (1984) (Atari) (Prototype)", "Uses the Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "e42b937c30c617241ca9e01e4510c3f6", "", "", "Pitfall! (No Walls Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3015,8 +3016,8 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e8aa36e3d49e9bfa654c25dcc19c74e6", "Atari, Joe Decuir, Larry Caplan, Steve Mayer, Larry Wagner", "CX2601, CX2601P", "Combat (1977) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "260", "", "" }, { "e8e7b9bdf4bf04930c2bcaa0278ee637", "", "", "Boring Taz (Hack)", "Hack of Taz", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e8f7679359c4f532f5d5e93af7d8a985", "", "", "Hangman Invader Original Words (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e9034b41741dcee64ab6605aba9de455", "Digivision", "", "Phanton Tank (Digivision)", "AKA Phantom Tank", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, - { "e908611d99890733be31733a979c62d8", "Atari, Dan Hitchens", "CX2697", "Mario Bros. (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "e9034b41741dcee64ab6605aba9de455", "Digivision", "", "Phanton Tank (Digivision)", "AKA Tanks But No Tanks", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, + { "e908611d99890733be31733a979c62d8", "Atari, Dan Hitchens, Mimi Nyden", "CX2697", "Mario Bros. (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e91d2ecf8803ae52b55bbf105af04d4b", "Atari, Howard Scott Warshaw", "CX2655, CX2655P", "Yars' Revenge (1982) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "e923001015bedd7901569f035d9c592c", "", "", "Adventure II (Hack)", "Hack of Adventure", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e927ecf80f3784d745abd8368d78f2f3", "", "", "Space Instigators (V1.8) (19-10-2002) (CT) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3074,8 +3075,8 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "ed1306436ce237afc5a7ed3f77134202", "HES", "771-341", "2 Pak Special - Dolphin, Pigs 'n' Wolf (1990) (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ed1492d4cafd7ebf064f0c933249f5b0", "CCE", "", "Video Cube (CCE)", "AKA Atari Video Cube", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ed1a784875538c7871d035b7a98c2433", "", "", "Save Our Ship (Unknown) (Hack)", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "37", "", "", "" }, - { "ed2218b3075d15eaa34e3356025ccca3", "Atari, Richard Maurer", "CX2635, CX2635P", "Maze Craze (1980) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "PAL", "", "", "", "" }, - { "ed5ccfc93ad4561075436ee42a15438a", "Atari", "CX2626, CX2626P", "Miniature Golf (1979) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "ed2218b3075d15eaa34e3356025ccca3", "Atari, Richard Maurer", "CX2635, CX2635P", "Maze Craze (1980) (Atari) (PAL)", "AKA A Game of Cops 'n Robbers", "", "", "", "", "", "", "", "", "", "", "", "PAL", "", "", "", "" }, + { "ed5ccfc93ad4561075436ee42a15438a", "Atari, Tom Reuterdahl", "CX2626, CX2626P", "Miniature Golf (1979) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ed8f319e82d355832195eb7715644795", "Activision, Larry Kaplan, David Crane", "AG-010, AG-010-04", "Kaboom! (1981) (Activision) (8K)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "01 50", "", "", "", "", "" }, { "ed9999911b406dc5f75c850dcc17bdf4", "", "", "Star Fire - Shootable (Friendlier Collision Detection) (26-09-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "eddef10fdc0029301064115ae0cd41d4", "CCE", "", "Freeway (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3099,7 +3100,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "eed9eaf1a0b6a2b9bc4c8032cb43e3fb", "Atari - Axlon, Steve DeFrisco", "CX26192", "Klax (1991) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "eee7695ae3eea7818321df0b790b31f3", "", "", "Sound Paddle V2 (Dennis Caswell & Jim Nitchals) (PD)", "Uses the Paddle Controllers", "", "", "", "", "", "", "YES", "PADDLES", "", "", "01", "", "", "", "", "" }, { "ef263d40a23483ab339cac44d9515a56", "Thomas Jentzsch", "", "Fatal Run (TJ)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "ef3a4f64b6494ba770862768caf04b86", "Activision, Bob Whitehead", "AG-034-04", "Private Eye (1983) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "ef3a4f64b6494ba770862768caf04b86", "Activision, Bob Whitehead", "AG-034-04", "Private Eye (1984) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ef60b06fddb675b0d783afbfa5fc5232", "", "", "Many Blue Bars and Text Demo 4 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ef66af190840871409fe1702d2483554", "Andrew Davie, Paul Slocum, Christopher Tumber", "", "DiscoTech (12-02-2003) (Andrew Davie)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ef71e9fb0d8d477226d8d42261fbf0a7", "Piero Cavina", "", "Multi-Sprite Demo V2.0 (Piero Cavina) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3131,7 +3132,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f137211537438b1fce3d811baef25457", "", "", "Incoming (02-10-2002) (Ben Larson) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f1489e27a4539a0c6c8529262f9f7e18", "Champ Games", "CG-01-P", "Lady Bug (PAL60)", "", "Homebrew", "", "", "", "A", "", "", "", "", "", "", "PAL60", "", "", "YES", "" }, { "f14d5e96ec3380aef57a4b70132c6677", "Goliath - Hot Shot", "83-414", "Pac Kong (1983) (Goliath) (PAL)", "AKA Inca Gold", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "f1554569321dc933c87981cf5c239c43", "Atari, Glenn Axworthy", "CX26129", "Midnight Magic (1984) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "f1554569321dc933c87981cf5c239c43", "Atari - Glenn Axworthy", "CX26129", "Midnight Magic (1986) (Atari)", "AKA Pinball Wizard", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "f16c709df0a6c52f47ff52b9d95b7d8d", "Atari, Alan Miller - Sears", "CX2662 - 6-99811", "Hangman (1978) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f1929bb9b5db22d98dd992aa3fe72920", "", "", "Cube Conquest (Improved Interlace) (Billy Eno) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "f19aba18f86e415812480ad2be221425", "Chris Larkin", "", "Solaris Trainer (2002) (Chris Larkin) (Hack)", "Hack of Solaris", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3191,7 +3192,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f5a2f6efa33a3e5541bc680e9dc31d5b", "Suntek", "SS-022", "Motocross (Suntek) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f5a3e051730d45fea518f2e8b926565b", "Robby", "", "Keystone Kapers (Robby)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f5aa6bd10f662199c42e43863a30106c", "", "", "Music Kit (V1.0) - Song Player (Paul Slocum)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "f5d103a9ae36d1d4ee7eef657b75d2b3", "Arcadia Corporation, Stephen Harland Landrum", "AR-4105", "Official Frogger, The (Preview) (1983) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "32", "", "", "" }, + { "f5d103a9ae36d1d4ee7eef657b75d2b3", "Starpath Corporation, Stephen H. Landrum", "9 AR-4105", "Official Frogger, The (Preview) (1983) (Starpath)", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, { "f613aad84d2163d6b197b220bfec1b7e", "", "", "X-Doom V.27 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f661f129644f338b13d9f4510d816c03", "Atari, David Crane", "CX26163P", "Outlaw (32 in 1) (1988) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f6676e3fe901eb8515fc7ae310302c3c", "Activision, David Crane", "AG-008", "Laser Blast (1981) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3211,7 +3212,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f70e3f3bb2d19ec2aaec8f78dc43744f", "Jone Yuan Telephonic Enterprise Co", "", "Pooyan (Jone Yuan) (Hack)", "2600 Screen Search Console", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "215", "", "" }, { "f714a223954c28eccf459295517dcae6", "", "", "Big - Move This Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f724d3dd2471ed4cf5f191dbb724b69f", "Atari, Jerome Domurat, Howard Scott Warshaw", "CX2659", "Raiders of the Lost Ark (1982) (Atari)", "Console ports are swapped", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, - { "f736864442164b29235e8872013180cd", "Telegames", "6057 A227", "Quest for Quintana Roo (1988) (Telegames) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "f736864442164b29235e8872013180cd", "Telegames - VSS", "6057 A227", "Quest for Quintana Roo (1988) (Telegames) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f73d2d0eff548e8fc66996f27acf2b4b", "CCE", "C-813", "Pitfall (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f7424985bac41067502b4a05b64cb75a", "Activision, Steve Cartwright", "AX-027", "Plaque Attack (1983) (Activision)", "Genesis controller (B is fire up, C is fire down)", "Hack of Plaque Attack", "", "", "", "", "", "", "GENESIS", "GENESIS", "", "", "", "", "", "", "" }, { "f74ad642552385c3daa203a2a6fc2291", "Eckhard Stolberg", "", "Cubis (1997) (Eckhard Stolberg)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "20", "", "", "" }, @@ -3231,7 +3232,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f802fa61011dd9eb6f80b271bac479d0", "Suntek", "SS-023", "Mole Hunter (Suntek) (PAL)", "AKA Topy", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f80cf77164079d774b9b0fae33dffca9", "", "", "Fu Kung! (V0.15) (Negative Version) (05-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f8240e62d8c0a64a61e19388414e3104", "Activision, Steve Cartwright", "AX-013", "Barnstorming (1982) (Activision)", "", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "f825c538481f9a7a46d1e9bc06200aaf", "Atari, Richard Maurer - Sears", "CX2635 - 49-75157", "Maze Craze (1980) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "NTSC", "", "", "", "" }, + { "f825c538481f9a7a46d1e9bc06200aaf", "Atari, Richard Maurer - Sears", "CX2635 - 49-75157", "Maze Craze (1980) (Atari)", "AKA A Game of Cops 'n Robbers", "", "", "", "", "", "", "", "", "", "", "", "NTSC", "", "", "", "" }, { "f844f4c6f3baaaf5322657442d6f29eb", "Atari, Richard Dobbis, Nick 'Sandy Maiwald' Turner", "CX26111", "Snoopy and the Red Baron (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f847fb8dba6c6d66d13724dbe5d95c4d", "Absolute Entertainment, David Crane", "AG-042-02, AG-042-04", "Skate Boardin' (1987) (Absolute)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f8582bc6ca7046adb8e18164e8cecdbc", "", "", "Panda Chase (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, @@ -3243,7 +3244,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f8ff34b53d86f55bd52d7a520af6d1dc", "", "", "Big Dig (04-04-2003) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "220", "", "" }, { "f90b5da189f24d7e1a2117d8c8abc952", "Atari, David Crane - Sears", "CX2653 - 6-99823, 49-75111", "Slot Machine (1979) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f91fb8da3223b79f1c9a07b77ebfa0b2", "Atari, Alan J. Murphy, Nick 'Sandy Maiwald' Turner - Sears", "CX2615 - 49-75140", "Demons to Diamonds (1982) (Atari)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "YES", "10 57", "", "", "", "", "" }, - { "f93d7fee92717e161e6763a88a293ffa", "20th Century Fox Video Games - Lazer Micro Systems - Dunhill Electronic Media Corp., B. Winston Hendrickson, Randall Hyde, Mark V. Rhoads, John Simonds", "11013", "Porky's (1983) (20th Century Fox)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "f93d7fee92717e161e6763a88a293ffa", "20th Century Fox Video Games - Lazer Micro Systems - Dunhill Electronics, B. Winston Hendrickson, Randall Hyde, Mark V. Rhoads, John Simonds", "11013", "Porky's (1983) (20th Century Fox)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f9420173efcb4b9f2b01c2a7b595cca7", "CCE", "", "Laser Blast (CCE) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f954381f9e0f2009d1ac40dedd777b1a", "Thomas Jentzsch", "", "Robot City (V0.18) (01-09-2002) (TJ)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f9655ed51462ecfc690c7b97cec649f9", "Andrew Wallace", "", "Laseresal 2002 (PAL) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3260,8 +3261,8 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f9da42f91a1c5cfa344d2ff440c6f8d4", "ZUT", "", "Pac Invaders (ZUT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f9de91d868d6ebfb0076af9063d7195e", "", "", "Maze Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f9e99596345a84358bc5d1fbe877134b", "Activision, Larry Kaplan, David Crane - Ariola", "EAG-010, PAG-010 - 711 010-720", "Kaboom! (1981) (Activision) (PAL)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "01 50", "", "", "", "", "" }, - { "fa0570561aa80896f0ead05c46351389", "Tigervision", "7-008", "Miner 2049er (1982) (Tigervision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "214", "", "" }, - { "fa1b060fd8e0bca0c2a097dcffce93d3", "Atari, Christopher H. Omarzu, Preston Stuart, Bruce Williams", "CX26101", "Oscar's Trash Race (1983) (Atari)", "Uses the Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, + { "fa0570561aa80896f0ead05c46351389", "Tigervision", "7-008", "Miner 2049er (1983) (Tigervision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "28", "214", "", "" }, + { "fa1b060fd8e0bca0c2a097dcffce93d3", "Atari - CCW, Christopher H. Omarzu, Preston Stuart, Bruce Williams", "CX26101", "Oscar's Trash Race (1984) (Atari)", "Uses the Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "fa2be8125c3c60ab83e1c0fe56922fcb", "DSD-Camelot - Johnson & Johnson, Michael Doherty, Clyde Hager", "", "Tooth Protectors (1983) (DSD-Camelot)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "fa3de71841c0841db6a741884a6b6b2f", "", "", "Warring Worms (17-02-2002) (Billy Eno)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fa4404fabc094e3a31fcd7b559cdd029", "Atari, Alan J. Murphy, Robert C. Polaro", "CX26100", "Bugs Bunny (1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, diff --git a/src/emucore/stella.pro b/src/emucore/stella.pro index 349f34721..3599480ba 100644 --- a/src/emucore/stella.pro +++ b/src/emucore/stella.pro @@ -160,7 +160,7 @@ "" "Cartridge.MD5" "024365007a87f213cbe8ef5f2e8e1333" -"Cartridge.Manufacturer" "Atari, Frank Hausman, Steve Woita" +"Cartridge.Manufacturer" "Atari, Frank Hausman, Mimi Nyden, Steve Woita" "Cartridge.ModelNo" "CX2686" "Cartridge.Name" "Quadrun (1983) (Atari)" "" @@ -303,7 +303,7 @@ "" "Cartridge.MD5" "043f165f384fbea3ea89393597951512" -"Cartridge.Manufacturer" "Spectravision, Spectravideo" +"Cartridge.Manufacturer" "Spectravision - Spectravideo" "Cartridge.ModelNo" "SA-202" "Cartridge.Name" "Planet Patrol (1982) (Spectravision)" "" @@ -353,7 +353,7 @@ "" "Cartridge.MD5" "04fccc7735155a6c1373d453b110c640" -"Cartridge.Manufacturer" "HES, David Lubar" +"Cartridge.Manufacturer" "HES - Imagineering, David Lubar" "Cartridge.ModelNo" "535" "Cartridge.Name" "My Golf (1990) (HES) (PAL)" "" @@ -490,7 +490,7 @@ "Cartridge.MD5" "06b6c5031b8353f3a424a5b86b8fe409" "Cartridge.Manufacturer" "Activision, Mike Lorenzen - Ariola" "Cartridge.ModelNo" "EAX-023 - 711 023-720" -"Cartridge.Name" "Oink! (1982) (Activision) (PAL)" +"Cartridge.Name" "Oink! (1983) (Activision) (PAL)" "Cartridge.Note" "AKA Das Schweinchen und der Wolf" "" @@ -675,7 +675,7 @@ "" "Cartridge.MD5" "08bf437d012db07b05ff57a0c745c49e" -"Cartridge.Manufacturer" "Arcadia Corporation, Steve Hales, Stephen Harland Landrum" +"Cartridge.Manufacturer" "Arcadia Corporation, Steve Hales, Stephen H. Landrum" "Cartridge.ModelNo" "4 AR-4102" "Cartridge.Name" "Meteoroids (1982) (Arcadia) (Prototype)" "Cartridge.Note" "Suicide Mission Beta" @@ -695,13 +695,14 @@ "" "Cartridge.MD5" "08e5960bb52d9a3e2c9954677b5e4472" -"Cartridge.Manufacturer" "Atari, Christopher H. Omarzu, Preston Stuart, Bruce Williams" +"Cartridge.Manufacturer" "Atari - CCW, Christopher H. Omarzu, Preston Stuart, Bruce Williams" "Cartridge.ModelNo" "CX26101" "Cartridge.Name" "Oscar's Trash Race (10-20-1982) (Atari) (Prototype)" "Cartridge.Note" "Uses the Keypad Controllers" "Cartridge.Rarity" "Prototype" "Controller.Left" "KEYBOARD" "Controller.Right" "KEYBOARD" +"Display.YStart" "34" "" "Cartridge.MD5" "08f4dc6f118f7c98e2406c180c08e78e" @@ -727,7 +728,7 @@ "" "Cartridge.MD5" "090f0a7ef8a3f885048d213faa59b2f8" -"Cartridge.Manufacturer" "Carrere Video - Teldec" +"Cartridge.Manufacturer" "Carrere Video - Western Technologies - Teldec - Prism" "Cartridge.ModelNo" "USC1012" "Cartridge.Name" "M.A.D. (1983) (Carrere Video) (PAL)" "" @@ -1142,7 +1143,7 @@ "" "Cartridge.MD5" "0e713d4e272ea7322c5b27d645f56dd0" -"Cartridge.Manufacturer" "Home Vision - Gem International Corp." +"Cartridge.Manufacturer" "Home Vision - Gem International Corp. - VDI" "Cartridge.ModelNo" "VCS83105" "Cartridge.Name" "Panda Chase (1983) (Home Vision) (PAL)" "Display.Height" "256" @@ -1454,7 +1455,7 @@ "Cartridge.MD5" "1266b3fd632c981f3ef9bdbf9f86ce9a" "Cartridge.Manufacturer" "Activision, Bob Whitehead" "Cartridge.ModelNo" "EAZ-034-04, EAZ-034-04I" -"Cartridge.Name" "Private Eye (1983) (Activision) (PAL)" +"Cartridge.Name" "Private Eye (1984) (Activision) (PAL)" "" "Cartridge.MD5" "1267e3c6ca951ff1df6f222c8f813d97" @@ -1512,7 +1513,7 @@ "Cartridge.MD5" "133a4234512e8c4e9e8c5651469d4a09" "Cartridge.Manufacturer" "Atari, Andrew Fuchs, Jeffrey Gusman, Dave Jolly, Suki Lee" "Cartridge.ModelNo" "CX26117" -"Cartridge.Name" "Obelix (1983) (Atari)" +"Cartridge.Name" "Obelix (1984) (Atari)" "" "Cartridge.MD5" "133b56de011d562cbab665968bde352b" @@ -1921,9 +1922,9 @@ "" "Cartridge.MD5" "17c0a63f9a680e7a61beba81692d9297" -"Cartridge.Manufacturer" "U.S. Games Corporation, Tom Sloper" +"Cartridge.Manufacturer" "U.S. Games Corporation - Western Technologies, Tom Sloper" "Cartridge.ModelNo" "VC2004" -"Cartridge.Name" "Picnic (1982) (U.S. Games)" +"Cartridge.Name" "Picnic (1983) (U.S. Games)" "Cartridge.Note" "Uses the Paddle Controllers" "Controller.Left" "PADDLES" "Controller.MouseAxis" "AUTO 45" @@ -2090,7 +2091,7 @@ "Cartridge.MD5" "19e739c2764a5ab9ed08f9095aa2af0b" "Cartridge.Manufacturer" "Atari, Andrew Fuchs, Jeffrey Gusman, Dave Jolly, Suki Lee" "Cartridge.ModelNo" "CX26117" -"Cartridge.Name" "Obelix (1983) (Atari) (PAL)" +"Cartridge.Name" "Obelix (1984) (Atari) (PAL)" "" "Cartridge.MD5" "19e761e53e5ec8e9f2fceea62715ca06" @@ -2161,7 +2162,7 @@ "" "Cartridge.MD5" "1b8d35d93697450ea26ebf7ff17bd4d1" -"Cartridge.Manufacturer" "Quelle" +"Cartridge.Manufacturer" "Quelle - Otto Versand" "Cartridge.ModelNo" "176.764 9 - 781644" "Cartridge.Name" "Marineflieger (1983) (Quelle) (PAL)" "Cartridge.Note" "AKA Seahawk" @@ -2309,7 +2310,7 @@ "" "Cartridge.MD5" "1e0ef01e330e5b91387f75f700ccaf8f" -"Cartridge.Manufacturer" "Quelle" +"Cartridge.Manufacturer" "Quelle - Otto Versand" "Cartridge.ModelNo" "686.561 2 - 781627" "Cartridge.Name" "Mein Weg (1983) (Quelle) (PAL)" "Cartridge.Note" "AKA Challenge" @@ -2397,7 +2398,7 @@ "Cartridge.MD5" "1ee9c1ba95cef2cf987d63f176c54ac3" "Cartridge.Manufacturer" "Atari - GCC, Mark Ackerman, Glenn Parker" "Cartridge.ModelNo" "CX2675, CX2675P" -"Cartridge.Name" "Ms. Pac-Man (1982) (Atari) (PAL)" +"Cartridge.Name" "Ms. Pac-Man (1983) (Atari) (PAL)" "" "Cartridge.MD5" "1ef04e7e508296a8d9eb61cc7dae2e5d" @@ -2750,9 +2751,9 @@ "" "Cartridge.MD5" "23d445ea19a18fb78d5035878d9fb649" -"Cartridge.Manufacturer" "CBS Electronics, Sylvia Day, Henry Will IV" +"Cartridge.Manufacturer" "CBS Electronics - JWDA, Sylvia Day, Todd Marshall, Henry Will IV" "Cartridge.ModelNo" "4L1818, 4L1819, 4L1820, 4L1821" -"Cartridge.Name" "Mouse Trap (1982) (CBS Electronics) (PAL)" +"Cartridge.Name" "Mouse Trap (1983) (CBS Electronics) (PAL)" "Display.Phosphor" "YES" "" @@ -2809,7 +2810,7 @@ "" "Cartridge.MD5" "24544ee5d76f579992d9522e9b238955" -"Cartridge.Manufacturer" "Carrere Video, Tom Sloper - Teldec" +"Cartridge.Manufacturer" "Carrere Video - Western Technologies, Tom Sloper - Teldec - Prism" "Cartridge.ModelNo" "USC2004" "Cartridge.Name" "Picnic (1983) (Carrere Video) (PAL)" "Cartridge.Note" "Uses the Paddle Controllers" @@ -3204,10 +3205,10 @@ "" "Cartridge.MD5" "28d5df3ed036ed63d33a31d0d8b85c47" -"Cartridge.Manufacturer" "Goliath" -"Cartridge.ModelNo" "5" -"Cartridge.Name" "Open Sesame (1983) (Goliath) (PAL) [a]" -"Cartridge.Note" "AKA Open, Sesame!" +"Cartridge.Manufacturer" "Bit Corporation" +"Cartridge.ModelNo" "PG204" +"Cartridge.Name" "Open, Sesame! (1983) (BitCorp) (PAL) [a]" +"Cartridge.Note" "AKA I Want My Mommy" "Display.YStart" "38" "Display.Height" "256" "Display.Phosphor" "YES" @@ -4123,9 +4124,10 @@ "" "Cartridge.MD5" "3347a6dd59049b15a38394aa2dafa585" -"Cartridge.Manufacturer" "Parker Brothers, Robert Jaeger" +"Cartridge.Manufacturer" "Parker Brothers - JWDA, Henry Will IV" "Cartridge.ModelNo" "PB5760" "Cartridge.Name" "Montezuma's Revenge (1984) (Parker Bros)" +"Cartridge.Note" "Featuring Panama Joe" "" "Cartridge.MD5" "335793736cbf6fc99c9359ed2a32a49d" @@ -4281,7 +4283,7 @@ "" "Cartridge.MD5" "3577e19714921912685bb0e32ddf943c" -"Cartridge.Manufacturer" "TechnoVision" +"Cartridge.Manufacturer" "TechnoVision - Video Technology" "Cartridge.ModelNo" "TVS1003" "Cartridge.Name" "Pharaoh's Curse (1983) (TechnoVision) (PAL)" "Display.YStart" "34" @@ -4342,9 +4344,9 @@ "" "Cartridge.MD5" "36306070f0c90a72461551a7a4f3a209" -"Cartridge.Manufacturer" "U.S. Games Corporation, Roger Booth, Sylvia Day, Ron Dubren, Todd Marshall, Wes Trager, Henry Will IV" +"Cartridge.Manufacturer" "U.S. Games Corporation - JWDA, Roger Booth, Sylvia Day, Ron Dubren, Todd Marshall, Robin McDaniel, Wes Trager, Henry Will IV" "Cartridge.ModelNo" "VC1007" -"Cartridge.Name" "Name This Game (1982) (U.S. Games)" +"Cartridge.Name" "Name This Game (1983) (U.S. Games)" "Cartridge.Note" "AKA Octopussy" "" @@ -4465,7 +4467,7 @@ "Cartridge.MD5" "378a62af6e9c12a760795ff4fc939656" "Cartridge.Manufacturer" "Atari - Axlon, Steve DeFrisco" "Cartridge.ModelNo" "CX26171" -"Cartridge.Name" "MotoRodeo (1990) (Atari)" +"Cartridge.Name" "MotoRodeo (1991) (Atari)" "Display.Phosphor" "YES" "" @@ -4584,7 +4586,7 @@ "" "Cartridge.MD5" "392d34c0498075dd58df0ce7cd491ea2" -"Cartridge.Manufacturer" "Atari, Frank Hausman, Steve Woita" +"Cartridge.Manufacturer" "Atari, Frank Hausman, Mimi Nyden, Steve Woita" "Cartridge.ModelNo" "CX2686" "Cartridge.Name" "Quadrun (1983) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -4607,9 +4609,10 @@ "" "Cartridge.MD5" "393e41ca8bdd35b52bf6256a968a9b89" -"Cartridge.Manufacturer" "U.S. Games Corporation" +"Cartridge.Manufacturer" "U.S. Games Corporation - Western Technologies" "Cartridge.ModelNo" "VC1012" -"Cartridge.Name" "M.A.D. (1982) (U.S. Games)" +"Cartridge.Name" "M.A.D. (1983) (U.S. Games)" +"Cartridge.Note" "AKA Missile Intercept" "" "Cartridge.MD5" "3947eb7305b0c904256cdbc5c5956c0f" @@ -4738,7 +4741,8 @@ "Cartridge.MD5" "3b040ed7d1ef8acb4efdeebebdaa2052" "Cartridge.Manufacturer" "Tigervision" "Cartridge.ModelNo" "7-008" -"Cartridge.Name" "Miner 2049er (1982) (Tigervision) [fixed]" +"Cartridge.Name" "Miner 2049er (1983) (Tigervision) [fixed]" +"Display.YStart" "28" "Display.Height" "214" "" @@ -4865,7 +4869,7 @@ "" "Cartridge.MD5" "3c7a7b3a0a7e6319b2fa0f923ef6c9af" -"Cartridge.Manufacturer" "Atari, Joe Gaucher" +"Cartridge.Manufacturer" "Atari - Roklan, Joe Gaucher" "Cartridge.Name" "Racer (1982) (Atari) (Prototype)" "Cartridge.Note" "ROM must be started in bank 0" "Cartridge.Rarity" "Prototype" @@ -5216,9 +5220,9 @@ "" "Cartridge.MD5" "3ff5165378213dab531ffa4f1a41ae45" -"Cartridge.Manufacturer" "Quelle" +"Cartridge.Manufacturer" "Otto Versand" "Cartridge.ModelNo" "311377" -"Cartridge.Name" "Pygmy (1983) (Quelle) (PAL)" +"Cartridge.Name" "Pygmy (1983) (Otto Versand) (PAL)" "Cartridge.Note" "AKA Lock 'n' Chase (Double-Game Package)" "" @@ -5473,7 +5477,7 @@ "" "Cartridge.MD5" "43c6cfffeddab6b3787357fed9d44529" -"Cartridge.Manufacturer" "20th Century Fox Video Games, Douglas 'Dallas North' Neubauer" +"Cartridge.Manufacturer" "20th Century Fox Video Games, Frank Cohen, Douglas 'Dallas North' Neubauer" "Cartridge.ModelNo" "11111" "Cartridge.Name" "M.A.S.H (1983) (20th Century Fox) (PAL)" "" @@ -5618,7 +5622,7 @@ "" "Cartridge.MD5" "45cb0f41774b78def53331e4c3bf3362" -"Cartridge.Manufacturer" "Carrere Video, Roger Booth, Sylvia Day, Todd Marshall, Wes Trager, Henry Will IV - Teldec" +"Cartridge.Manufacturer" "Carrere Video - JWDA, Roger Booth, Sylvia Day, Todd Marshall, Robin McDaniel, Wes Trager, Henry Will IV - Teldec - Prism" "Cartridge.ModelNo" "USC1007" "Cartridge.Name" "Octopus (1983) (Carrere Video) (PAL)" "Cartridge.Note" "AKA Name This Game" @@ -5730,9 +5734,9 @@ "" "Cartridge.MD5" "47911752bf113a2496dbb66c70c9e70c" -"Cartridge.Manufacturer" "Atari, Christopher H. Omarzu, Preston Stuart, Bruce Williams" +"Cartridge.Manufacturer" "Atari - CCW, Christopher H. Omarzu, Preston Stuart, Bruce Williams" "Cartridge.ModelNo" "CX26101" -"Cartridge.Name" "Oscar's Trash Race (1983) (Atari) (PAL)" +"Cartridge.Name" "Oscar's Trash Race (1984) (Atari) (PAL)" "Cartridge.Note" "Uses the Keypad Controllers" "Controller.Left" "KEYBOARD" "Controller.Right" "KEYBOARD" @@ -6069,7 +6073,7 @@ "" "Cartridge.MD5" "4b94fd272785d7ec6c95fb7279d0f522" -"Cartridge.Manufacturer" "Atari, Christopher H. Omarzu, Preston Stuart, Bruce Williams" +"Cartridge.Manufacturer" "Atari - CCW, Christopher H. Omarzu, Preston Stuart, Bruce Williams" "Cartridge.ModelNo" "CX26101" "Cartridge.Name" "Oscar's Trash Race (12-03-1982) (Atari) (Prototype)" "Cartridge.Note" "Uses the Keypad Controllers" @@ -6143,9 +6147,9 @@ "" "Cartridge.MD5" "4c6afb8a44adf8e28f49164c84144bfe" -"Cartridge.Manufacturer" "Bit Corporation" -"Cartridge.ModelNo" "PG207" -"Cartridge.Name" "Mission 3,000 A.D. (1983) (BitCorp)" +"Cartridge.Manufacturer" "CCE" +"Cartridge.ModelNo" "C-806" +"Cartridge.Name" "Mission 3,000 A.D. (1983) (CCE)" "" "Cartridge.MD5" "4c8832ed387bbafc055320c05205bc08" @@ -6535,9 +6539,10 @@ "" "Cartridge.MD5" "517592e6e0c71731019c0cebc2ce044f" -"Cartridge.Manufacturer" "Parker Brothers, Todd Marshall" +"Cartridge.Manufacturer" "Parker Brothers - JWDA, Todd Marshall" "Cartridge.ModelNo" "PB5550" "Cartridge.Name" "Q-bert's Qubes (1984) (Parker Bros)" +"Display.YStart" "30" "Display.Height" "214" "" @@ -6602,6 +6607,7 @@ "Cartridge.Manufacturer" "CCE" "Cartridge.ModelNo" "C-804" "Cartridge.Name" "Open, Sesame! (1983) (CCE)" +"Cartridge.Note" "AKA I Want My Mommy" "Display.Height" "214" "Display.Phosphor" "YES" "" @@ -7208,6 +7214,8 @@ "Cartridge.Manufacturer" "CCE" "Cartridge.ModelNo" "C-808" "Cartridge.Name" "Phantom Tank (1983) (CCE) (PAL)" +"Cartridge.Note" "AKA Tanks But No Tanks" +"Display.YStart" "36" "" "Cartridge.MD5" "5acf9865a72c0ce944979f76ff9610f0" @@ -7574,9 +7582,10 @@ "" "Cartridge.MD5" "5f39353f7c6925779b0169a87ff86f1e" -"Cartridge.Manufacturer" "Atari - GCC, Betty Ryan Tylko, Douglas B. Macrae" +"Cartridge.Manufacturer" "Atari - GCC, John Allred, Douglas B. Macrae, Betty Ryan Tylko" "Cartridge.ModelNo" "CX2694" "Cartridge.Name" "Pole Position (1983) (Atari) [a]" +"Cartridge.Note" "AKA RealSports Driving" "" "Cartridge.MD5" "5f46d1ff6d7cdeb4b09c39d04dfd50a1" @@ -8135,7 +8144,7 @@ "" "Cartridge.MD5" "65b106eba3e45f3dab72ea907f39f8b4" -"Cartridge.Manufacturer" "Sparrow - HomeComputer Software Co., Dan Schafer, Glenn Stohel, Jon Tedesco" +"Cartridge.Manufacturer" "Sparrow - HomeComputer Software, Dan Schafer, Glenn Stohel, Jon Tedesco" "Cartridge.ModelNo" "GCG 1001T" "Cartridge.Name" "Music Machine, The (1983) (Sparrow)" "Cartridge.Note" "Uses the Paddle Controllers (left only)" @@ -8466,7 +8475,7 @@ "" "Cartridge.MD5" "6913c90002636c1487538d4004f7cac2" -"Cartridge.Manufacturer" "Atari" +"Cartridge.Manufacturer" "Atari - CCW" "Cartridge.ModelNo" "CX26131" "Cartridge.Name" "Monster Cise (1984) (Atari) (Prototype)" "Cartridge.Note" "Uses the Keypad Controllers (left only)" @@ -8534,7 +8543,7 @@ "" "Cartridge.MD5" "69fac82cd2312dd9ce5d90e22e2f070a" -"Cartridge.Manufacturer" "Spectravision, Spectravideo - Quelle" +"Cartridge.Manufacturer" "Spectravision - Spectravideo - Quelle" "Cartridge.ModelNo" "SA-202 - 412.851 8" "Cartridge.Name" "Planet Patrol (1982) (Spectravision) (PAL)" "" @@ -8637,7 +8646,8 @@ "Cartridge.Manufacturer" "Bit Corporation" "Cartridge.ModelNo" "PG203" "Cartridge.Name" "Phantom Tank (1982) (BitCorp) (PAL)" -"Cartridge.Note" "AKA Phantom-Panzer" +"Cartridge.Note" "AKA Tanks But No Tanks" +"Display.YStart" "36" "" "Cartridge.MD5" "6b4eb5b3df80995b8d9117cb7e9aeb3c" @@ -8844,7 +8854,7 @@ "Cartridge.MD5" "6d842c96d5a01967be9680080dd5be54" "Cartridge.Manufacturer" "Activision, David Crane" "Cartridge.ModelNo" "AB-035-04" -"Cartridge.Name" "Pitfall II (1983) (Activision)" +"Cartridge.Name" "Pitfall II (1984) (Activision)" "" "Cartridge.MD5" "6d8a04ee15951480cb7c466e5951eee0" @@ -9107,7 +9117,7 @@ "" "Cartridge.MD5" "714e13c08508ee9a7785ceac908ae831" -"Cartridge.Manufacturer" "Home Vision - Gem International Corp." +"Cartridge.Manufacturer" "Home Vision - Gem International Corp. - VDI" "Cartridge.ModelNo" "VCS83123" "Cartridge.Name" "Parachute (1983) (Home Vision) (PAL)" "" @@ -9267,7 +9277,7 @@ "" "Cartridge.MD5" "73521c6b9fed6a243d9b7b161a0fb793" -"Cartridge.Manufacturer" "Atari" +"Cartridge.Manufacturer" "Atari, Tom Reuterdahl" "Cartridge.ModelNo" "CX26163P" "Cartridge.Name" "Miniaturer Golf (32 in 1) (1988) (Atari) (PAL)" "Cartridge.Note" "AKA Miniature Golf" @@ -9522,7 +9532,7 @@ "" "Cartridge.MD5" "7608abdfd9b26f4a0ecec18b232bea54" -"Cartridge.Manufacturer" "Atari" +"Cartridge.Manufacturer" "Atari, Bob Whitehead" "Cartridge.ModelNo" "CX26163P" "Cartridge.Name" "NFL Football (32 in 1) (1988) (Atari) (PAL)" "Cartridge.Note" "AKA Football" @@ -9800,14 +9810,14 @@ "Cartridge.MD5" "79fcdee6d71f23f6cf3d01258236c3b9" "Cartridge.Manufacturer" "Atari - GCC, Mike Feinstein, John Mracek" "Cartridge.ModelNo" "CX2673, CX2673P" -"Cartridge.Name" "Phoenix (1982) (Atari) (PAL)" +"Cartridge.Name" "Phoenix (1983) (Atari) (PAL)" "" "Cartridge.MD5" "7a09299f473105ae1ef3ad6f9f2cd807" "Cartridge.Manufacturer" "Atari, Steve Wright" "Cartridge.ModelNo" "CX2616P" "Cartridge.Name" "Pele's Soccer (1981) (Atari) (PAL)" -"Cartridge.Note" "AKA Championship Soccer" +"Cartridge.Note" "AKA Pele's Championship Soccer" "" "Cartridge.MD5" "7a2af383014f5d810ad26d322823549d" @@ -9897,7 +9907,7 @@ "" "Cartridge.MD5" "7af40c1485ce9f29b1a7b069a2eb04a7" -"Cartridge.Manufacturer" "Amiga" +"Cartridge.Manufacturer" "Amiga - Video Soft" "Cartridge.ModelNo" "3120" "Cartridge.Name" "Mogul Maniac (1983) (Amiga)" "Cartridge.Note" "Uses the Amiga Joyboard" @@ -10180,7 +10190,7 @@ "Cartridge.MD5" "7e52a95074a66640fcfde124fffd491a" "Cartridge.Manufacturer" "Atari - GCC, Mike Feinstein, John Mracek" "Cartridge.ModelNo" "CX2673" -"Cartridge.Name" "Phoenix (1982) (Atari)" +"Cartridge.Name" "Phoenix (1983) (Atari)" "" "Cartridge.MD5" "7e7c4c59d55494e66eef5e04ec1c6157" @@ -10266,7 +10276,7 @@ "" "Cartridge.MD5" "7f0209cfcc3d181715463f4d6451cecf" -"Cartridge.Manufacturer" "Atari - GCC, Betty Ryan Tylko, Douglas B. Macrae" +"Cartridge.Manufacturer" "Atari - GCC, John Allred, Douglas B. Macrae, Betty Ryan Tylko" "Cartridge.ModelNo" "CX2694" "Cartridge.Name" "Pole Position (05-15-1983) (Atari) (Prototype)" "Cartridge.Note" "AKA RealSports Driving" @@ -10612,7 +10622,7 @@ "" "Cartridge.MD5" "835759ff95c2cdc2324d7c1e7c5fa237" -"Cartridge.Manufacturer" "20th Century Fox Video Games, Douglas 'Dallas North' Neubauer" +"Cartridge.Manufacturer" "20th Century Fox Video Games, Frank Cohen, Douglas 'Dallas North' Neubauer" "Cartridge.ModelNo" "11011" "Cartridge.Name" "M.A.S.H (1983) (20th Century Fox)" "" @@ -10622,7 +10632,7 @@ "" "Cartridge.MD5" "8388d6fe59c38c0b3a6ab2c58420036a" -"Cartridge.Manufacturer" "Atari, Frank Hausman, Steve Woita" +"Cartridge.Manufacturer" "Atari, Frank Hausman, Mimi Nyden, Steve Woita" "Cartridge.ModelNo" "CX2686" "Cartridge.Name" "Quadrun (12-06-1982) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -10953,6 +10963,7 @@ "Cartridge.Manufacturer" "Goliath" "Cartridge.ModelNo" "5" "Cartridge.Name" "Open Sesame (1983) (Goliath) (PAL)" +"Cartridge.Note" "AKA I Want My Mommy" "Display.YStart" "34" "Display.Phosphor" "YES" "" @@ -10979,7 +10990,7 @@ "Cartridge.MD5" "87e79cd41ce136fd4f72cc6e2c161bee" "Cartridge.Manufacturer" "Atari - GCC, Mark Ackerman, Glenn Parker" "Cartridge.ModelNo" "CX2675" -"Cartridge.Name" "Ms. Pac-Man (1982) (Atari)" +"Cartridge.Name" "Ms. Pac-Man (1983) (Atari)" "" "Cartridge.MD5" "87f020daa98d0132e98e43db7d8fea7e" @@ -11217,7 +11228,7 @@ "" "Cartridge.MD5" "8b40a9ca1cfcd14822e2547eaa9df5c1" -"Cartridge.Manufacturer" "Parker Brothers, Dave Hampton, Tom Sloper" +"Cartridge.Manufacturer" "Parker Brothers - Western Technologies, Dave Hampton, Tom Sloper" "Cartridge.ModelNo" "931517" "Cartridge.Name" "Q-bert (1983) (Parker Bros) (PAL)" "" @@ -11584,7 +11595,8 @@ "Cartridge.MD5" "90578a63441de4520be5324e8f015352" "Cartridge.Manufacturer" "Bit Corporation" "Cartridge.ModelNo" "PGP204" -"Cartridge.Name" "Open Sesame (4 Game in One Dark Green) (1983) (BitCorp) (PAL)" +"Cartridge.Name" "Open Sesame (4 Game in One) (1983) (BitCorp) (PAL)" +"Cartridge.Note" "AKA I Want My Mommy" "Display.YStart" "34" "Display.Phosphor" "YES" "" @@ -12796,9 +12808,10 @@ "" "Cartridge.MD5" "a20b7abbcdf90fbc29ac0fafa195bd12" -"Cartridge.Manufacturer" "Quelle" -"Cartridge.ModelNo" "719.383 2 - 649635, 781393, 781784" +"Cartridge.Manufacturer" "Quelle - Otto Versand" +"Cartridge.ModelNo" "719.383 2 - 649635, 781393, 781784, 986404" "Cartridge.Name" "Motocross (1983) (Quelle) (PAL)" +"Cartridge.Note" "AKA Motorcross" "" "Cartridge.MD5" "a20d931a8fddcd6f6116ed21ff5c4832" @@ -13062,7 +13075,7 @@ "" "Cartridge.MD5" "a4ff39d513b993159911efe01ac12eba" -"Cartridge.Manufacturer" "Atari - GCC, Betty Ryan Tylko, Douglas B. Macrae" +"Cartridge.Manufacturer" "Atari - GCC, John Allred, Douglas B. Macrae, Betty Ryan Tylko" "Cartridge.ModelNo" "CX2694" "Cartridge.Name" "Pole Position (1983) (Atari)" "Cartridge.Note" "AKA RealSports Driving" @@ -13159,9 +13172,9 @@ "" "Cartridge.MD5" "a74689a08746a667a299b0507e1e6dd9" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" -"Cartridge.ModelNo" "AR-4105" -"Cartridge.Name" "Official Frogger, The (1983) (Arcadia) (PAL)" +"Cartridge.Manufacturer" "Starpath Corporation, Stephen H. Landrum" +"Cartridge.ModelNo" "9 AR-4105" +"Cartridge.Name" "Official Frogger, The (1983) (Starpath) (PAL)" "" "Cartridge.MD5" "a7523db9a33e9417637be0e71fa4377c" @@ -13439,6 +13452,11 @@ "Cartridge.Name" "Bitmap Demo (13-01-2003) (AD)" "" +"Cartridge.MD5" "aaac0d277eda054861e613c59c2e4ff2" +"Cartridge.Manufacturer" "JWDA, Todd Marshall" +"Cartridge.Name" "Music Demo (JWDA)" +"" + "Cartridge.MD5" "aab840db22075aa0f6a6b83a597f8890" "Cartridge.Manufacturer" "Home Vision - Gem International Corp. - R.J.P.G." "Cartridge.ModelNo" "VCS83124" @@ -13643,7 +13661,7 @@ "Cartridge.Manufacturer" "Atari, Steve Wright" "Cartridge.ModelNo" "CX2616" "Cartridge.Name" "Pele's Soccer (1981) (Atari)" -"Cartridge.Note" "AKA Championship Soccer" +"Cartridge.Note" "AKA Pele's Championship Soccer" "" "Cartridge.MD5" "ad2e6bfb3b9b9b36ba8bf493ce764c49" @@ -13990,7 +14008,7 @@ "Cartridge.MD5" "b1e2d5dc1353af6d56cd2fe7cfe75254" "Cartridge.Manufacturer" "Atari - Axlon, Steve DeFrisco" "Cartridge.ModelNo" "CX26171" -"Cartridge.Name" "MotoRodeo (1990) (Atari) (PAL)" +"Cartridge.Name" "MotoRodeo (1991) (Atari) (PAL)" "Display.Phosphor" "YES" "" @@ -14050,9 +14068,10 @@ "" "Cartridge.MD5" "b29359f7de62fed6e6ad4c948f699df8" -"Cartridge.Manufacturer" "Puzzy - Bit Corporation" -"Cartridge.ModelNo" "PG203" -"Cartridge.Name" "Phantom Tank (1982) (Puzzy) (PAL)" +"Cartridge.Manufacturer" "Goliath" +"Cartridge.ModelNo" "3" +"Cartridge.Name" "Phantom Tank (1983) (Goliath) (PAL)" +"Cartridge.Note" "AKA Tanks But No Tanks" "" "Cartridge.MD5" "b2a6f31636b699aeda900f07152bab6e" @@ -14221,9 +14240,10 @@ "" "Cartridge.MD5" "b56264f738b2eb2c8f7cf5a2a75e5fdc" -"Cartridge.Manufacturer" "Atari - GCC, Betty Ryan Tylko, Douglas B. Macrae" +"Cartridge.Manufacturer" "Atari - GCC, John Allred, Douglas B. Macrae, Betty Ryan Tylko" "Cartridge.ModelNo" "CX2694, CX2694P" "Cartridge.Name" "Pole Position (1983) (Atari) (PAL)" +"Cartridge.Note" "AKA RealSports Driving" "" "Cartridge.MD5" "b5657d4c1c732fbb6af150668464247f" @@ -14273,7 +14293,7 @@ "" "Cartridge.MD5" "b6166f15720fdf192932f1f76df5b65d" -"Cartridge.Manufacturer" "Amiga" +"Cartridge.Manufacturer" "Amiga - Video Soft" "Cartridge.ModelNo" "3130" "Cartridge.Name" "Off Your Rocker (1983) (Amiga) (Prototype)" "Cartridge.Note" "Uses the Amiga Joyboard" @@ -14315,7 +14335,7 @@ "Cartridge.MD5" "b6d52a0cf53ad4216feb04147301f87d" "Cartridge.Manufacturer" "Imagic, Michael Greene" "Cartridge.ModelNo" "720055-1A, IA3312" -"Cartridge.Name" "No Escape! (1982) (Imagic)" +"Cartridge.Name" "No Escape! (1983) (Imagic)" "" "Cartridge.MD5" "b6e40bce550672e5495a8cdde7075b8b" @@ -15244,7 +15264,7 @@ "" "Cartridge.MD5" "c49fe437800ad7fd9302f3a90a38fb7d" -"Cartridge.Manufacturer" "Atari, Dan Hitchens" +"Cartridge.Manufacturer" "Atari, Dan Hitchens, Mimi Nyden" "Cartridge.ModelNo" "CX2697, CX2697P" "Cartridge.Name" "Mario Bros. (1983) (Atari) (PAL)" "" @@ -15286,7 +15306,7 @@ "Cartridge.MD5" "c517144e3d3ac5c06f2f682ebf212dd7" "Cartridge.Manufacturer" "Tigervision - Teldec" "Cartridge.ModelNo" "7-008 - 3.60006 VG" -"Cartridge.Name" "Miner 2049er (1982) (Tigervision) (PAL)" +"Cartridge.Name" "Miner 2049er (1983) (Tigervision) (PAL)" "" "Cartridge.MD5" "c529e63013698064149b9e0468afd941" @@ -15497,10 +15517,10 @@ "" "Cartridge.MD5" "c73ae5ba5a0a3f3ac77f0a9e14770e73" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" -"Cartridge.ModelNo" "AR-4105" -"Cartridge.Name" "Official Frogger, The (1983) (Arcadia)" -"Display.YStart" "32" +"Cartridge.Manufacturer" "Starpath Corporation, Stephen H. Landrum" +"Cartridge.ModelNo" "9 AR-4105" +"Cartridge.Name" "Official Frogger, The (1983) (Starpath)" +"Display.YStart" "30" "" "Cartridge.MD5" "c745487828a1a6a743488ecebc55ad44" @@ -15632,7 +15652,7 @@ "Cartridge.MD5" "c9c25fc536de9a7cdc5b9a916c459110" "Cartridge.Manufacturer" "Activision, Mike Lorenzen" "Cartridge.ModelNo" "AX-023" -"Cartridge.Name" "Oink! (1982) (Activision)" +"Cartridge.Name" "Oink! (1983) (Activision)" "" "Cartridge.MD5" "c9d02d3cfeef8b48fb71cb4520a4aa84" @@ -15858,7 +15878,7 @@ "" "Cartridge.MD5" "cc7138202cd8f6776212ebfc3a820ecc" -"Cartridge.Manufacturer" "Atari, Christopher H. Omarzu, Preston Stuart, Bruce Williams" +"Cartridge.Manufacturer" "Atari - CCW, Christopher H. Omarzu, Preston Stuart, Bruce Williams" "Cartridge.ModelNo" "CX26101" "Cartridge.Name" "Oscar's Trash Race (03-30-1983) (Atari) (Prototype)" "Cartridge.Note" "Uses the Keypad Controllers" @@ -16551,9 +16571,9 @@ "" "Cartridge.MD5" "d3423d7600879174c038f53e5ebbf9d3" -"Cartridge.Manufacturer" "U.S. Games Corporation" +"Cartridge.Manufacturer" "U.S. Games Corporation - Western Technologies" "Cartridge.ModelNo" "VC2005" -"Cartridge.Name" "Piece o' Cake (1982) (U.S. Games)" +"Cartridge.Name" "Piece o' Cake (1983) (U.S. Games)" "Cartridge.Note" "Uses the Paddle Controllers" "Controller.Left" "PADDLES" "Controller.MouseAxis" "AUTO 60" @@ -16795,7 +16815,7 @@ "" "Cartridge.MD5" "d6acff6aed0f04690fe4024d58ff4ce3" -"Cartridge.Manufacturer" "Spectravision, Spectravideo - Quelle" +"Cartridge.Manufacturer" "Spectravision - Spectravideo - Quelle" "Cartridge.ModelNo" "SA-202 - 412.851 8" "Cartridge.Name" "Planet Patrol (1982) (Spectravision) (PAL) [different spaceship]" "" @@ -17065,9 +17085,10 @@ "" "Cartridge.MD5" "da732c57697ad7d7af414998fa527e75" -"Cartridge.Manufacturer" "Atari, Glenn Axworthy" +"Cartridge.Manufacturer" "Atari - Glenn Axworthy" "Cartridge.ModelNo" "CX26129" -"Cartridge.Name" "Midnight Magic (1984) (Atari) (PAL)" +"Cartridge.Name" "Midnight Magic (1986) (Atari) (PAL)" +"Cartridge.Note" "AKA Pinball Wizard" "Display.Phosphor" "YES" "" @@ -17145,7 +17166,7 @@ "" "Cartridge.MD5" "db4eb44bc5d652d9192451383d3249fc" -"Cartridge.Manufacturer" "CBS Electronics, E.F. Dreyer, Ed Salvo" +"Cartridge.Manufacturer" "CBS Electronics - E.F. Dreyer - VSS, Ed Salvo" "Cartridge.ModelNo" "4L 2738 0000" "Cartridge.Name" "Mountain King (1983) (CBS Electronics)" "Display.Phosphor" "YES" @@ -17250,7 +17271,7 @@ "Cartridge.MD5" "dc81c4805bf23959fcf2c649700b82bf" "Cartridge.Manufacturer" "Imagic, Michael Greene" "Cartridge.ModelNo" "720055-2A, IA3312P" -"Cartridge.Name" "No Escape! (1982) (Imagic) (PAL)" +"Cartridge.Name" "No Escape! (1983) (Imagic) (PAL)" "" "Cartridge.MD5" "dc905b22de0f191a029df13eddfcabc4" @@ -17367,7 +17388,7 @@ "" "Cartridge.MD5" "de0173ed6be9de6fd049803811e5f1a8" -"Cartridge.Manufacturer" "Xonox - K-Tel Software, Anthony R. Henderson" +"Cartridge.Manufacturer" "Xonox - K-Tel Software - Product Guild, Anthony R. Henderson" "Cartridge.ModelNo" "99008, 6240" "Cartridge.Name" "Motocross Racer (1983) (Xonox)" "" @@ -17512,9 +17533,10 @@ "" "Cartridge.MD5" "df62a658496ac98a3aa4a6ee5719c251" -"Cartridge.Manufacturer" "Atari - Sears" +"Cartridge.Manufacturer" "Atari, Tom Reuterdahl - Sears" "Cartridge.ModelNo" "CX2626 - 6-99829, 49-75116" "Cartridge.Name" "Miniature Golf (1979) (Atari)" +"Cartridge.Note" "AKA Arcade Golf" "" "Cartridge.MD5" "df6a28a89600affe36d94394ef597214" @@ -17546,7 +17568,7 @@ "" "Cartridge.MD5" "dfad86dd85a11c80259f3ddb6151f48f" -"Cartridge.Manufacturer" "HES, David Lubar" +"Cartridge.Manufacturer" "HES - Imagineering, David Lubar" "Cartridge.ModelNo" "535" "Cartridge.Name" "My Golf (1990) (HES) (PAL) [fixed]" "" @@ -17882,8 +17904,8 @@ "Cartridge.MD5" "e34c236630c945089fcdef088c4b6e06" "Cartridge.Manufacturer" "Activision, David Crane - Ariola" -"Cartridge.ModelNo" "EAB-035-04 - 711 035-720" -"Cartridge.Name" "Pitfall II (1983) (Activision) (PAL)" +"Cartridge.ModelNo" "EAB-035-04 - 711 035-721" +"Cartridge.Name" "Pitfall II (1984) (Activision) (PAL)" "Cartridge.Note" "Lost Caverns" "" @@ -17940,7 +17962,7 @@ "" "Cartridge.MD5" "e3c35eac234537396a865d23bafb1c84" -"Cartridge.Manufacturer" "TechnoVision" +"Cartridge.Manufacturer" "TechnoVision - Video Technology" "Cartridge.ModelNo" "TVS1001" "Cartridge.Name" "Nuts (1983) (TechnoVision) (PAL)" "Display.YStart" "45" @@ -18364,12 +18386,12 @@ "Cartridge.MD5" "e9034b41741dcee64ab6605aba9de455" "Cartridge.Manufacturer" "Digivision" "Cartridge.Name" "Phanton Tank (Digivision)" -"Cartridge.Note" "AKA Phantom Tank" +"Cartridge.Note" "AKA Tanks But No Tanks" "Display.YStart" "30" "" "Cartridge.MD5" "e908611d99890733be31733a979c62d8" -"Cartridge.Manufacturer" "Atari, Dan Hitchens" +"Cartridge.Manufacturer" "Atari, Dan Hitchens, Mimi Nyden" "Cartridge.ModelNo" "CX2697" "Cartridge.Name" "Mario Bros. (1983) (Atari)" "" @@ -18719,11 +18741,12 @@ "Cartridge.Manufacturer" "Atari, Richard Maurer" "Cartridge.ModelNo" "CX2635, CX2635P" "Cartridge.Name" "Maze Craze (1980) (Atari) (PAL)" +"Cartridge.Note" "AKA A Game of Cops 'n Robbers" "Display.Format" "PAL" "" "Cartridge.MD5" "ed5ccfc93ad4561075436ee42a15438a" -"Cartridge.Manufacturer" "Atari" +"Cartridge.Manufacturer" "Atari, Tom Reuterdahl" "Cartridge.ModelNo" "CX2626, CX2626P" "Cartridge.Name" "Miniature Golf (1979) (Atari) (PAL)" "" @@ -18872,7 +18895,7 @@ "Cartridge.MD5" "ef3a4f64b6494ba770862768caf04b86" "Cartridge.Manufacturer" "Activision, Bob Whitehead" "Cartridge.ModelNo" "AG-034-04" -"Cartridge.Name" "Private Eye (1983) (Activision)" +"Cartridge.Name" "Private Eye (1984) (Activision)" "" "Cartridge.MD5" "ef60b06fddb675b0d783afbfa5fc5232" @@ -19060,9 +19083,10 @@ "" "Cartridge.MD5" "f1554569321dc933c87981cf5c239c43" -"Cartridge.Manufacturer" "Atari, Glenn Axworthy" +"Cartridge.Manufacturer" "Atari - Glenn Axworthy" "Cartridge.ModelNo" "CX26129" -"Cartridge.Name" "Midnight Magic (1984) (Atari)" +"Cartridge.Name" "Midnight Magic (1986) (Atari)" +"Cartridge.Note" "AKA Pinball Wizard" "Display.Phosphor" "YES" "" @@ -19432,10 +19456,10 @@ "" "Cartridge.MD5" "f5d103a9ae36d1d4ee7eef657b75d2b3" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" -"Cartridge.ModelNo" "AR-4105" -"Cartridge.Name" "Official Frogger, The (Preview) (1983) (Arcadia)" -"Display.YStart" "32" +"Cartridge.Manufacturer" "Starpath Corporation, Stephen H. Landrum" +"Cartridge.ModelNo" "9 AR-4105" +"Cartridge.Name" "Official Frogger, The (Preview) (1983) (Starpath)" +"Display.YStart" "30" "" "Cartridge.MD5" "f613aad84d2163d6b197b220bfec1b7e" @@ -19548,7 +19572,7 @@ "" "Cartridge.MD5" "f736864442164b29235e8872013180cd" -"Cartridge.Manufacturer" "Telegames" +"Cartridge.Manufacturer" "Telegames - VSS" "Cartridge.ModelNo" "6057 A227" "Cartridge.Name" "Quest for Quintana Roo (1988) (Telegames) (PAL)" "" @@ -19689,6 +19713,7 @@ "Cartridge.Manufacturer" "Atari, Richard Maurer - Sears" "Cartridge.ModelNo" "CX2635 - 49-75157" "Cartridge.Name" "Maze Craze (1980) (Atari)" +"Cartridge.Note" "AKA A Game of Cops 'n Robbers" "Display.Format" "NTSC" "" @@ -19760,7 +19785,7 @@ "" "Cartridge.MD5" "f93d7fee92717e161e6763a88a293ffa" -"Cartridge.Manufacturer" "20th Century Fox Video Games - Lazer Micro Systems - Dunhill Electronic Media Corp., B. Winston Hendrickson, Randall Hyde, Mark V. Rhoads, John Simonds" +"Cartridge.Manufacturer" "20th Century Fox Video Games - Lazer Micro Systems - Dunhill Electronics, B. Winston Hendrickson, Randall Hyde, Mark V. Rhoads, John Simonds" "Cartridge.ModelNo" "11013" "Cartridge.Name" "Porky's (1983) (20th Century Fox)" "Cartridge.Rarity" "Rare" @@ -19865,14 +19890,15 @@ "Cartridge.MD5" "fa0570561aa80896f0ead05c46351389" "Cartridge.Manufacturer" "Tigervision" "Cartridge.ModelNo" "7-008" -"Cartridge.Name" "Miner 2049er (1982) (Tigervision)" +"Cartridge.Name" "Miner 2049er (1983) (Tigervision)" +"Display.YStart" "28" "Display.Height" "214" "" "Cartridge.MD5" "fa1b060fd8e0bca0c2a097dcffce93d3" -"Cartridge.Manufacturer" "Atari, Christopher H. Omarzu, Preston Stuart, Bruce Williams" +"Cartridge.Manufacturer" "Atari - CCW, Christopher H. Omarzu, Preston Stuart, Bruce Williams" "Cartridge.ModelNo" "CX26101" -"Cartridge.Name" "Oscar's Trash Race (1983) (Atari)" +"Cartridge.Name" "Oscar's Trash Race (1984) (Atari)" "Cartridge.Note" "Uses the Keypad Controllers" "Controller.Left" "KEYBOARD" "Controller.Right" "KEYBOARD" From 81179ab34f821026e7257cfb2f13ba63a34b2a58 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Wed, 20 Dec 2017 14:47:17 -0330 Subject: [PATCH 117/156] Revert handling of broken F8 ROMs; we can turn off randomization to make them work. --- src/emucore/CartF8.cxx | 27 +++++++++++---------------- src/emucore/CartF8.hxx | 3 --- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/emucore/CartF8.cxx b/src/emucore/CartF8.cxx index 755cddf2a..14ef0b820 100644 --- a/src/emucore/CartF8.cxx +++ b/src/emucore/CartF8.cxx @@ -22,8 +22,7 @@ CartridgeF8::CartridgeF8(const BytePtr& image, uInt32 size, const string& md5, const Settings& settings) : Cartridge(settings), - myBankOffset(0), - myHardcodedStartBank(false) + myBankOffset(0) { // Copy the ROM image into my buffer memcpy(myImage, image.get(), std::min(8192u, size)); @@ -31,23 +30,21 @@ CartridgeF8::CartridgeF8(const BytePtr& image, uInt32 size, const string& md5, // Normally bank 1 is the reset bank, unless we're dealing with ROMs // that have been incorrectly created with banks in the opposite order - myHardcodedStartBank = - md5 == "bc24440b59092559a1ec26055fd1270e" || // Private Eye [a] - md5 == "75ea60884c05ba496473c23a58edf12f" || // 8-in-1 Yars Revenge - md5 == "75ee371ccfc4f43e7d9b8f24e1266b55" || // Snow White - md5 == "74c8a6f20f8adaa7e05183f796eda796" || // Tricade Demo - md5 == "9905f9f4706223dadee84f6867ede8e3" || // Challenge - md5 == "3c7a7b3a0a7e6319b2fa0f923ef6c9af"; // Racer Prototype + myStartBank = + (md5 == "bc24440b59092559a1ec26055fd1270e" || // Private Eye [a] + md5 == "75ea60884c05ba496473c23a58edf12f" || // 8-in-1 Yars Revenge + md5 == "75ee371ccfc4f43e7d9b8f24e1266b55" || // Snow White + md5 == "74c8a6f20f8adaa7e05183f796eda796" || // Tricade Demo + md5 == "9905f9f4706223dadee84f6867ede8e3" || // Challenge + md5 == "3c7a7b3a0a7e6319b2fa0f923ef6c9af") // Racer Prototype + ? 0 : 1; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeF8::reset() { - // Define random startup bank (only for those not hardcoded) - if(myHardcodedStartBank) - myStartBank = 0; - else - randomizeStartBank(); + // define random startup bank + randomizeStartBank(); // Upon reset we switch to the reset bank bank(myStartBank); @@ -173,7 +170,6 @@ bool CartridgeF8::save(Serializer& out) const { out.putString(name()); out.putShort(myBankOffset); - out.putBool(myHardcodedStartBank); } catch(...) { @@ -193,7 +189,6 @@ bool CartridgeF8::load(Serializer& in) return false; myBankOffset = in.getShort(); - myHardcodedStartBank = in.getBool(); } catch(...) { diff --git a/src/emucore/CartF8.hxx b/src/emucore/CartF8.hxx index 98910fddb..8504f67b1 100644 --- a/src/emucore/CartF8.hxx +++ b/src/emucore/CartF8.hxx @@ -156,9 +156,6 @@ class CartridgeF8 : public Cartridge // Indicates the offset into the ROM image (aligns to current bank) uInt16 myBankOffset; - // Certain ROMs have hardcoded start banks - bool myHardcodedStartBank; - private: // Following constructors and assignment operators not supported CartridgeF8() = delete; From c6acb622ccf7cdabc7daca30c088da8af5f57de2 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Wed, 20 Dec 2017 16:43:04 -0330 Subject: [PATCH 118/156] Updated ROM properties up to 'T'. --- src/emucore/DefProps.hxx | 232 ++++++++++++++--------------- src/emucore/stella.pro | 305 +++++++++++++++++++++------------------ 2 files changed, 283 insertions(+), 254 deletions(-) diff --git a/src/emucore/DefProps.hxx b/src/emucore/DefProps.hxx index 5c6be8eeb..dc950455d 100644 --- a/src/emucore/DefProps.hxx +++ b/src/emucore/DefProps.hxx @@ -42,7 +42,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "00f7985c20b8bdf3c557fac4d3f26775", "Aaron Curtis", "", "AStar (NTSC)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "012020625a3227815e47b37fd025e480", "Rob Kudla", "", "Better Space Invaders (1999) (Rob Kudla) (Hack) [a]", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "01293bd90a4579abb7aed2f7d440681f", "Century", "", "Snoopy (1983) (Century) (PAL)", "AKA Snoopy and the Red Baron", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "01297d9b450455dd716db9658efb2fae", "TechnoVision", "TVS1002", "Save Our Ship (1983) (TechnoVision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "45", "", "", "" }, + { "01297d9b450455dd716db9658efb2fae", "TechnoVision - Video Technology", "TVS1002", "Save Our Ship (1983) (TechnoVision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "45", "", "", "" }, { "012b8e6ef3b5fd5aabc94075c527709d", "Arcadia Corporation, Dennis Caswell", "AR-4302", "Party Mix (1983) (Arcadia)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "01 56", "", "", "", "", "" }, { "0164f26f6b38a34208cd4a2d0212afc3", "Coleco, Ed English", "2656", "Mr. Do! (1983) (Coleco)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "0173675d40a8d975763ee493377ca87d", "CBS Electronics, Ed English", "4L1751", "Roc 'n Rope (1984) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -119,7 +119,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "073d7aff37b7601431e4f742c36c0dc1", "", "", "Bermuda (Unknown) (PAL)", "AKA River Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "074ec425ec20579e64a7ded592155d48", "Atari - Sculptured Software, Steve Aguirre", "CX26162", "Fatal Run (Ultimate Driving) (1991) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "075069ad80cde15eca69e3c98bd66714", "CCE", "C-803", "Bobby Is Going Home (1983) (CCE)", "AKA Bobby Vai Para Casa", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "0751f342ee4cf28f2c9a6e8467c901be", "Atari, Joseph Tung", "CX26152", "Super Baseball (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "0751f342ee4cf28f2c9a6e8467c901be", "Atari, Mimi Nyden, Joseph Tung", "CX26152", "Super Baseball (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "07973be3ecfd55235bf59aa56bdef28c", "Quelle", "732.052 6", "Eddy Langfinger, der Museumsdieb (1983) (Quelle) (PAL)", "AKA A Mysterious Thief", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "079fe9103515d15bc108577e234a484d", "", "", "Multi-Color Demo 0 (Bob Colbert) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "07a3af1e18b63765b6807876366f5e8a", "Joe Grand", "", "SCSIcide Pre-release 2 (Joe Grand)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -180,13 +180,13 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "0b4e793c9425175498f5a65a3e960086", "CCE", "", "Kung Fu Master (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0b55399cf640a2a00ba72dd155a0c140", "Imagic, Wilfredo Aguilar, Michael Becker, Rob Fulop", "720111-1A, 03205", "Fathom (1983) (Imagic)", "AKA Scuba", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "0b577e63b0c64f9779f315dca8967587", "Videospielkassette - Ariola", "PGP236", "Raketen-Angriff (Ariola) (PAL)", "AKA Missile Control", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "0b8d3002d8f744a753ba434a4d39249a", "Sears Tele-Games, Robert Zdybel", "CX2619 - 49-75159", "Stellar Track (1980) (Sears)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "0b8d3002d8f744a753ba434a4d39249a", "Sears Tele-Games, Robert Zdybel", "CX2619 - 49-75159", "Stellar Track (1981) (Sears)", "AKA Stella Trak", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "0bf19e40d5cd8aa5afb33b16569313e6", "Atari, Jerome Domurat, Andrew Fuchs, Dave Staugas, Robert Vieira", "CX26118", "Millipede (01-04-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0bf1e354304f46c0caf8fc0f6f5e9525", "Arcadia Corporation, Stephen Harland Landrum", "AR-4105", "Official Frogger (1983) (Arcadia) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "32", "", "", "" }, { "0bfabf1e98bdb180643f35f2165995d0", "Atari, Bob Whitehead - Sears", "CX2623 - 6-99819, 49-75108, 49-75125", "Home Run (1978) (Atari)", "", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, { "0c0392db94a20e4d006d885abbe60d8e", "", "", "Dodge Demo 3 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0c35806ff0019a270a7acae68de89d28", "Froggo", "FG1003", "Task Force (1987) (Froggo)", "AKA Gangster Alley", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "0c48e820301251fbb6bcdc89bd3555d9", "Atari, Andrew Fuchs", "CX26120", "Stargate (1984) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "0c48e820301251fbb6bcdc89bd3555d9", "Atari, Bill Aspromonte, Andrew Fuchs", "CX26120", "Stargate (1984) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0c54811cf3b1f1573c9164d5f19eca65", "Activision, David Crane - Ariola", "EAG-001, PAG-001, EAG-001-04B, EAG-001-04I - 711 001-715", "Dragster (1980) (Activision) (PAL)", "AKA Dragster Rennen, Drag Strip", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0c7926d660f903a2d6910c254660c32c", "Atari, Larry Kaplan", "CX2602, CX2602P", "Air-Sea Battle (1977) (Atari) (PAL)", "AKA Anti-Aircraft", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, { "0c7bd935d9a7f2522155e48315f44fa0", "Carrere Video - Western Technologies, Jeff Corsiglia, Paul Allen Newell, Tom Sloper - Teldec - Prism", "USC1009", "Infernal Tower (1983) (Carrere Video) (PAL)", "AKA Towering Inferno", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "YES", "" }, @@ -225,7 +225,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "0f24ca5668b4ab5dfaf217933c505926", "", "", "Fantastic Voyage (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0f2e09c71cc216f79d22a804152ba24b", "Bob Colbert", "", "Scroller Demo (Bob Colbert) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "0f341d1f4e144e3163d9a5fc5a662b79", "", "", "RUN Platform Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "0f39fc03d579d0d93a6b729a3746843e", "Atari, Richard Dobbis, Nick 'Sandy Maiwald' Turner", "CX26111", "Snoopy and the Red Baron (05-27-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "0f39fc03d579d0d93a6b729a3746843e", "Atari, Sam Comstock, Richard Dobbis, Nick 'Sandy Maiwald' Turner", "CX26111", "Snoopy and the Red Baron (05-27-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0f643c34e40e3f1daafd9c524d3ffe64", "Atari, Robert C. Polaro, Alan J. Murphy - Sears", "CX2609 - 49-75186", "Defender (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0f6676b05621f80c670966e2995b227a", "", "", "Globe Trotter Demo 1 (24-03-2003) (Weston)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0f738dc44437557624eb277ed7ad91c9", "", "", "Grand Prix (Unknown) (PAL)", "AKA Grand Prix", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -274,7 +274,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "12d7e0d6b187889f8d150bf7034d1db2", "", "", "Poker Squares (V0.0e) (2001) (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "130c5742cd6cbe4877704d733d5b08ca", "Home Vision - Gem International Corp.", "VCS83109", "World End (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1323c45d660f5a5b6d5ea45c6c4cbe4a", "Canal 3 - Intellivision", "", "Enduro (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "133456269a03e3fdae6cddd65754c50d", "Tigervision - Teldec", "7-006 - 3.60008 VG", "Springer (1982) (Tigervision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "133456269a03e3fdae6cddd65754c50d", "Tigervision - Software Electronics Corporation - Teldec", "7-006 - 3.60008 VG", "Springer (1983) (Tigervision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "133a4234512e8c4e9e8c5651469d4a09", "Atari, Andrew Fuchs, Jeffrey Gusman, Dave Jolly, Suki Lee", "CX26117", "Obelix (1984) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "133b56de011d562cbab665968bde352b", "Activision, John Van Ryzin", "AG-038-04", "Cosmic Commuter (1984) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1343de49c2a50d99176255f99f0d0234", "Gray Games & AtariAge", "", "E.T. Book Cart (PAL)", "Charles F. Gray & Michael Rideout", "", "", "", "", "", "", "", "", "", "", "", "", "24", "280", "YES", "55" }, @@ -318,7 +318,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "15b498199ed0ed28057bf0dbdce9b8d8", "Hozer Video Games", "", "Jammed (V0.2) (Demo) (2001) (TJ)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "15bcd74f2f1f2a63e1aa93e90d2c0555", "", "", "Incoming (22-08-2002) (Ben Larson) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "15bf2ef7583bfcbbba630847a1dc5539", "Erik Eid", "", "Euchre (Jul 15) (2002) (Eric Eid) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "15c11ab6e4502b2010b18366133fc322", "Atari - Axlon, Tod Frye", "CX26169", "Shooting Arcade (09-19-1989) (Atari) (Prototype)", "Uses the Light Gun Controller (left only)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "15c11ab6e4502b2010b18366133fc322", "Atari - Axlon, Tod Frye - Heuristica, Augustin Ortiz", "CX26169", "Shooting Arcade (09-19-1989) (Atari) (Prototype)", "Uses the Light Gun Controller (left only)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "15dd21c2608e0d7d9f54c0d3f08cca1f", "Data Age, J. Ray Dettling", "112-008", "Frankenstein's Monster (1983) (Data Age)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "15fe28d0c8893be9223e8cb2d032e557", "", "", "Towering Inferno (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "1619bc27632f9148d8480cd813aa74c3", "Thomas Jentzsch", "", "Steeple Chase (Thomas Jentzsch)", "NTSC Conversion", "Homebrew", "", "", "", "A", "", "", "", "", "", "", "", "", "220", "YES", "" }, @@ -341,7 +341,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "177504abd4260c4265e1338955e9fa47", "HCC Software", "", "Pitfall! (Steroids Hack)", "Hack of Pitfall! (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1782929e1c214b70fb6884f77c207a55", "Activision, David Crane", "AX-018, AX-018-04", "Pitfall! (1982) (Activision) (Prototype)", "Pitfall Harry's Jungle Adventure (Jungle Runner)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "17ba72433dd41383065d4aa6dedb3d91", "", "", "SCSIcide (09-06-2001) (Joe Grand)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "17badbb3f54d1fc01ee68726882f26a6", "M Network, Hal Finney, Bruce Pedersen - INTV", "MT5659", "Space Attack (1982) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "17badbb3f54d1fc01ee68726882f26a6", "M Network - APh Technological Consulting, Hal Finney, Bruce Pedersen - INTV", "MT5659", "Space Attack (1982) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "17bbe288c3855c235950fea91c9504e9", "Dismac", "", "Pega Ladrao (Dismac)", "AKA Keystone Kapers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "17c0a63f9a680e7a61beba81692d9297", "U.S. Games Corporation - Western Technologies, Tom Sloper", "VC2004", "Picnic (1983) (U.S. Games)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 45", "", "", "", "", "" }, { "17d000a2882f9fdaa8b4a391ad367f00", "Atari - GCC", "CX2676", "Centipede (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -384,7 +384,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "1b8c3c0bfb815b2a1010bba95998b66e", "Telegames", "", "Frogs and Flies (1988) (Telegames) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1b8d35d93697450ea26ebf7ff17bd4d1", "Quelle - Otto Versand", "176.764 9 - 781644", "Marineflieger (1983) (Quelle) (PAL)", "AKA Seahawk", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1bb91bae919ddbd655fa25c54ea6f532", "Suntek", "SS-026", "Treasure Island (Suntek) (PAL)", "AKA Treasure Discovery", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "1bc2427ac9b032a52fe527c7b26ce22c", "Intellivision Productions - M Network, Bruce Pedersen, Larry Zwick", "MT5860", "Sea Battle (1983) (M Network)", "High Seas", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "1bc2427ac9b032a52fe527c7b26ce22c", "Intellivision Productions - M Network - APh Technological Consulting, Bruce Pedersen, Larry Zwick", "MT5860", "Sea Battle (1983) (M Network)", "High Seas", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1bef389e3dd2d4ca4f2f60d42c932509", "Dimax - Sinmax", "SM8001", "Space Robot (1983) (Dimax - Sinmax) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "1bf503c724001b09be79c515ecfcbd03", "", "", "Bumper Bash (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "54", "", "", "" }, { "1c3f3133a3e5b023c77ecba94fd65995", "CCE", "C-830", "Planet Patrol (1983) (CCE) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -406,7 +406,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "1db3bc4601f22cf43be7ce015d74f59a", "", "", "Ship Demo (V 10) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1e060a8025512ad2127e3da11e212ccc", "Arcadia Corporation, Scott Nelson", "13", "Sweat! - The Decathlon Game (3 of 3) (1983) (Arcadia) (Prototype)", "Uses the Paddle Controllers (left only)", "Prototype", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "", "" }, { "1e0ef01e330e5b91387f75f700ccaf8f", "Quelle - Otto Versand", "686.561 2 - 781627", "Mein Weg (1983) (Quelle) (PAL)", "AKA Challenge", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "1e1290ea102e12d7ac52820961457e2b", "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (12-15-1983) (Parker Bros) (Prototype)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "1e1290ea102e12d7ac52820961457e2b", "Parker Brothers, Wilfredo Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (12-15-1983) (Parker Bros) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "1e1817d9cbcc3ba75043b7db4e6c228f", "", "", "Star Fire (07-10-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1e272d09c0e55f5ef14fcb76a735f6d7", "Atari, David Crane", "CX26163P", "Slot Machine (32 in 1) (1988) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1e587ca91518a47753a28217cd4fd586", "Telesys, Jim Rupp, Jack Woodman", "1001", "Coco Nuts (1982) (Telesys)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -443,7 +443,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "205070b6a0d454961dd9196a8e81d877", "", "", "Hangman Monkey Biglist2 (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2091af29b4e7b86914d79d9aaa4cbd20", "CBS Electronics - Woodside Design Associates, Harley H. Puthuff Jr.", "4L1802", "Donkey Kong Junior (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "251", "", "" }, { "20ae62fb69c6cc6e8098cca8cd080487", "Zirok", "", "Tennis (Zirok)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "20d4457ba22517253fcb62967af11b37", "Atari, Eric Manghise, Joseph Tung", "CX2640", "RealSports Baseball (1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "20d4457ba22517253fcb62967af11b37", "Atari, Eric Manghise, Mimi Nyden, Joseph Tung", "CX2640", "RealSports Baseball (1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "20dca534b997bf607d658e77fbb3c0ee", "Mythicon, Bill Bryner, Bruce de Graaf", "MA1002", "Fire Fly (1983) (Mythicon)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "20edcc3aa6c189259fa7e2f044a99c49", "Spectravision - Spectravideo", "SA-201", "Gangster Alley (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "211774f4c5739042618be8ff67351177", "Atari - GCC, Mark Ackerman, Tom Calderwood, Glenn Parker", "CX2684", "Galaxian (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -494,7 +494,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "24aff972d58990f9b88a6d787c796f1e", "CBS Electronics", "4L1767, 4L1768, 4L1769, 4L1770", "Smurf (1982) (CBS Electronics) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "24b5f4bbdb853eca38ea0cae2dfe73a1", "", "", "Home Run (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, { "24b9adac1b4f85b0bac9bf9b9e180906", "Angelino", "", "Space 2002 (Angelino) (Hack)", "Hack of Space Jockey", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "24d018c4a6de7e5bd19a36f2b879b335", "Activision, Larry Miller", "AX-021", "Spider Fighter (1982) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "24d018c4a6de7e5bd19a36f2b879b335", "Activision, Larry Miller", "AX-021", "Spider Fighter (1983) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "24d9a55d8f0633e886a1b33ee1e0e797", "Thomas Jentzsch", "", "Dragon Defender (Thomas Jentzsch)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "15", "240", "YES", "" }, { "24df052902aa9de21c2b2525eb84a255", "Imagic, Dennis Koble", "720000-100, 720100-1B, IA3000, IA3000C", "Trick Shot (1982) (Imagic)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "24fbf8250a71611e40ef18552e61b009", "", "", "Movable Grid Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -658,11 +658,11 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "30e012e8d50330c8972f126b8e913bc4", "", "", "Indy 500 (Hack) [a2]", "Hack of Indy 500", "Hack", "", "", "", "", "", "", "DRIVING", "DRIVING", "", "", "", "", "", "", "" }, { "30e0ab8be713208ae9a978b34e9e8e8c", "Atari, Mike Lorenzen", "CX2630, CX2630P", "Circus Atari (1980) (Atari) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "01 55", "", "", "", "", "" }, { "30f0b49661cfcfd4ec63395fab837dc3", "Sega, Jeff Lorenz - Teldec", "004-01", "Star Trek - Strategic Operations Simulator (1983) (Sega) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "3105967f7222cc36a5ac6e5f6e89a0b4", "Sega, Jeff Lorenz - Bally Midway", "011-01, 011-02", "Spy Hunter (1984) (Sega)", "Uses Joystick Coupler (Dual Control Module)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "3105967f7222cc36a5ac6e5f6e89a0b4", "Sega, Jeff Lorenz", "011-01, 011-02", "Spy Hunter (1984) (Sega)", "Uses Joystick Coupler (Dual Control Module)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "310ba30e25ea8957e58180b663503c0c", "Ed Federmeyer", "", "Sound X6 (1994) (Ed Federmeyer)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "313243fc41e49ef6bd3aa9ebc0d372dd", "", "", "Fast Food (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "31512cdfadfd82bfb6f196e3b0fd83cd", "Tigervision", "7-004", "River Patrol (1984) (Tigervision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "3177cc5c04c1a4080a927dfa4099482b", "Atari", "CX26135", "RealSports Boxing (1987) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "3177cc5c04c1a4080a927dfa4099482b", "Atari - Imagineering, Alex DeMeo", "CX26135", "RealSports Boxing (1987) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "317a4cdbab090dcc996833d07cb40165", "Goliath - Hot Shot", "83-312", "Missile War (1983) (Goliath) (PAL)", "AKA Astrowar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "318046ae3711c05fd16e479b298e5fcc", "Retroactive", "", "Qb (V2.08) (Stella) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "318a9d6dda791268df92d72679914ac3", "Activision, Steve Cartwright", "AX-017, AX-017-04", "MegaMania (1982) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -678,7 +678,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "321c3451129357af42a375d12afd4450", "Atari - Imagineering, Dan Kitchen", "CX26177", "Ikari Warriors (1991) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "32244e55ce6ec6bfbd763f33384bdc2e", "Activision, Steve Cartwright", "AX-027", "Plaque Attack (1983) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3225676f5c0c577aeccfaa7e6bedd765", "CCE", "C-1002", "Pole Position (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "322b29e84455aa41e7cc9af463bffa89", "Atari, Robert C. Polaro", "CX2663", "Road Runner (06-25-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "322b29e84455aa41e7cc9af463bffa89", "Atari - Bobco, Robert C. Polaro", "CX2663", "Road Runner (06-25-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "324cb4a749bcac4f3db9da842b85d2f7", "Dennis Debro", "", "Climber 5 (01-05-2003) (Dennis Debro)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "327468d6c19697e65ab702f06502c7ed", "Charles Morgan", "", "Aster-Hawk (2002) (Charles Morgan) (Hack)", "Hack of Asteroids", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "3276c777cbe97cdd2b4a63ffc16b7151", "Atari - GCC, Mike Feinstein, Kevin Osborn", "CX2691", "Joust (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -824,7 +824,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "3caa902ac0ce4509308990645876426a", "Atari - GCC, Dave Payne", "CX2669, CX2669P", "Vanguard (1982) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3cbdf71bb9fd261fbc433717f547d738", "CCE", "C-803", "Bobby Is Going Home (1983) (CCE) (PAL)", "AKA Bobby Vai Para Casa", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3cdd91e1c28d28e856c0063d602da166", "", "", "Stell-A-Sketch (03-11-1997) (Bob Colbert) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "3d1e83afdb4265fa2fb84819c9cfd39c", "Coleco, Henry Will IV", "2465", "Smurf - Rescue in Gargamel's Castle (1982) (Coleco)", "AKA Smurf, Smurf Action", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "3d1e83afdb4265fa2fb84819c9cfd39c", "Coleco - JWDA, Todd Marshall, Robin McDaniel, Henry Will IV", "2465", "Smurf - Rescue in Gargamel's Castle (1983) (Coleco)", "AKA Smurf, Smurf Action", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3d2367b2b09c28f1659c082bb46a7334", "Imagic, Dennis Koble", "720103-2A, IA3203P, EIX-010-04I", "Atlantis (1982) (Imagic) (PAL)", "AKA Lost City of Atlantis", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3d2652cbea462a886a41791dd7c8d073", "", "", "Ritorno dei frattelli di Mario (Mario Bros Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3d48b8b586a09bdbf49f1a016bf4d29a", "Video Game Cartridge - Ariola", "TP-606", "Hole Hunter (Video Game Cartridge)", "AKA Topy", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -929,12 +929,12 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "44e9c4a047c348dbeb7ace60f45484b4", "", "", "Moon Patrol Arcade (Genesis)", "Genesis controller (C is jump)", "Hack of Moon Patrol", "", "", "", "", "", "", "GENESIS", "", "", "", "", "", "", "", "" }, { "44f71e70b89dcc7cf39dfd622cfb9a27", "Tigervision, Robert H. O'Neil", "7-007", "Polaris (1983) (Tigervision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "45027dde2be5bdd0cab522b80632717d", "Epyx, Steven A. Baker, Tod Frye, Peter Engelbrite", "80561-00250", "Summer Games (1987) (Epyx)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "45040679d72b101189c298a864a5b5ba", "20th Century Fox Video Games, David Lubar", "11022", "SpaceMaster X-7 (1983) (20th Century Fox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "45040679d72b101189c298a864a5b5ba", "20th Century Fox Video Games - Sirius Software, David Lubar", "11022", "SpaceMaster X-7 (1983) (20th Century Fox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4543b7691914dfd69c3755a5287a95e1", "CommaVid, Irwin Gaines", "CM-005", "Mines of Minos (1982) (CommaVid)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "456453a54ca65191781aef316343ae00", "", "", "Full Screen Bitmap (3-D Green) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4565c1a7abce773e53c75b35414adefd", "Arcadia Corporation", "", "Supercharger BIOS (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "457b03cd48ff6d895795ef043c6b0f1e", "AtariAge, Chris Spry", "CX26201", "Zippy the Porcupine (2014) (Sprybug)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "457e7d4fcd56ebc47f5925dbea3ee427", "Carrere Video, Garry Kitchen - Teldec", "USC1001", "Space Jockey (1983) (Carrere Video) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "457e7d4fcd56ebc47f5925dbea3ee427", "Carrere Video - JWDA, Garry Kitchen - Teldec - Prism", "USC1001", "Space Jockey (1983) (Carrere Video) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "457f4ad2cda5f4803f122508bfbde3f5", "", "", "Canyon Bomber (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "458883f1d952cd772cf0057abca57497", "", "", "Fishing Derby (Unknown) (PAL) (Hack)", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "45a095645696a217e416e4bd2baea723", "Digivision", "", "Snoopy (Digivision)", "AKA Snoopy and the Red Baron", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -945,7 +945,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "4605a00f5b44a9cbd5803a7a55de150e", "Coleco - Individeo, Ed Temple", "", "Cabbage Patch Kids (07-03-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "461029ab23800833e9645be3e472d470", "", "", "Combat TC (v0.1)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "46258bd92b1f66f4cb47864d7654f542", "Zellers", "", "Turmoil (Zellers)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "463dd4770506e6c0ef993a40c52c47be", "Arcadia Corporation, Steve Hales, Stephen Harland Landrum", "AR-4102", "Suicide Mission (Preview) (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "463dd4770506e6c0ef993a40c52c47be", "Arcadia Corporation, Steve Hales, Stephen H. Landrum", "4 AR-4102", "Suicide Mission (Preview) (1982) (Arcadia)", "AKA Meteoroids", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "463e66ad98806a49106cffa49c08e2ed", "", "", "Interlace Game Demo (01-09-2002) (Billy Eno)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "467340a18158649aa5e02a4372dcfccd", "Activision, John Van Ryzin - Ariola", "EAZ-036-04, EAZ-036-04B, EAZ-036-04I - 711 036-720", "H.E.R.O. (1984) (Activision) (PAL) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4689081b7363721858756fe781cc7713", "", "", "Oystron (V2.6) (Piero Cavina) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -980,7 +980,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "48e5c4ae4f2d3b62b35a87bca18dc9f5", "Quelle", "476.774 5", "Bobby geht nach Hause (1983) (Quelle) (PAL)", "AKA Bobby Is Going Home", "", "", "", "", "", "", "", "", "", "", "", "", "42", "", "", "" }, { "48f18d69799a5f5451a5f0d17876acef", "ZiMAG - Emag - Vidco", "GN-070", "Mysterious Thief, A (1983) (ZiMAG) (Prototype) [a]", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "4901c05068512828367fde3fb22199fe", "Imagic, Rob Fulop", "720101-2B, IA3200P, EIX-006-04I", "Demon Attack (1982) (Imagic) (PAL)", "AKA Death from Above", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "4904a2550759b9b4570e886374f9d092", "Parker Brothers, Charlie Heath", "931506", "Reactor (1982) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "4904a2550759b9b4570e886374f9d092", "Parker Brothers, Charlie Heath", "931506", "Reactor (1983) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "490e3cc59d82f85fae817cdf767ea7a0", "", "", "Berzerk (Unknown) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "490eed07d4691b27f473953fbea6541a", "Activision, David Crane", "AB-035-04", "Pitfall II (1983) (Activision) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "493daaf9fb1ba450eba6b8ed53ffb37d", "", "", "3-D Corridor Demo (27-03-2003) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1003,7 +1003,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "4a9009620038f7f30aaeb2a00ae58fde", "Arcadia Corporation, Steve Mundry, Scott Nelson", "AR-4401", "Survival Island (3 of 3) (1983) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4ab2ebd95a8f861ea451abebdad914a5", "Nukey Shay, Thomas Jentzsch", "PAL conversion (F6)", "Montezuma's Revenge (PAL) (Genesis)", "Genesis controller (B jumps left, C jumps right)", "Homebrew", "", "", "", "", "", "", "GENESIS", "", "", "", "", "", "", "", "" }, { "4ab4af3adcdae8cdacc3d06084fc8d6a", "Nick Bensema", "", "Sucky Zepplin (Nick Bensema) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "4abb4c87a4c5f5d0c14ead2bb36251be", "Atari", "CX26135, CX26135P", "RealSports Boxing (1987) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "4abb4c87a4c5f5d0c14ead2bb36251be", "Atari - Imagineering, Alex DeMeo", "CX26135, CX26135P", "RealSports Boxing (1987) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4ac9f40ddfcf194bd8732a75b3f2f214", "Atari - CCW, Stephan R. Keith, Laura Scholl, Preston Stuart", "CX26106", "Grover's Music Maker (12-29-1982) (Atari) (Prototype)", "Uses Keypad Controller", "Prototype", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "", "" }, { "4ae8c76cd6f24a2e181ae874d4d2aa3d", "", "", "Flash Gordon (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4af4103759d603c82b1c9c5acd2d8faf", "Imagic, Bob Smith", "720114-2A, 13207, EIZ-001-04I", "Moonsweeper (1983) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -1028,13 +1028,13 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "4c606235f4ec5d2a4b89139093a69437", "Andrew Davies", "", "Andrew Davies early notBoulderDash demo (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "4c6afb8a44adf8e28f49164c84144bfe", "CCE", "C-806", "Mission 3,000 A.D. (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4c8832ed387bbafc055320c05205bc08", "Atari, Joe Decuir, Steve Mayer, Larry Wagner - Sears", "CX2601 - 99801, 6-99801, 49-75124", "Combat (1977) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "4c8970f6c294a0a54c9c45e5e8445f93", "Xonox - K-Tel Software, Anthony R. Henderson", "99006, 6220", "Sir Lancelot (1983) (Xonox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "4c8970f6c294a0a54c9c45e5e8445f93", "Xonox - K-Tel Software - Product Guild, Anthony R. Henderson", "99006, 6220", "Sir Lancelot (1983) (Xonox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4c9307de724c36fd487af6c99ca078f2", "Imagic, Brad Stewart", "720106-1A, IA3409", "Sky Patrol (1982) (Imagic) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4ca0959f846d2beada18ecf29efe137e", "Atari, Jim Huether, Alan J. Murphy, Robert C. Polaro", "CX2666, CX2666P", "RealSports Volleyball (1982) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4ca73eb959299471788f0b685c3ba0b5", "Activision, Steve Cartwright", "AX-031", "Frostbite (1983) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4ca90ba45eced6f5ad560ea8938641b2", "", "", "Hangman Man Wordlist (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4cabc895ea546022c2ecaa5129036634", "Funvision - Fund. International Co.", "", "Ocean City (Funvision)", "AKA Atlantis", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "4cd796b5911ed3f1062e805a3df33d98", "Tigervision", "7-006", "Springer (1982) (Tigervision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "220", "", "" }, + { "4cd796b5911ed3f1062e805a3df33d98", "Tigervision - Software Electronics Corporation - Teldec", "7-006", "Springer (1983) (Tigervision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "220", "", "" }, { "4d0a28443f7df5f883cf669894164cfa", "", "", "Beast Invaders (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4d2cef8f19cafeec72d142e34a1bbc03", "HES", "771-422", "2 Pak Special - Star Warrior, Frogger (1990) (HES) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4d38e1105c3a5f0b3119a805f261fcb5", "Bit Corporation", "PGP212", "Phantom UFO (4 Game in One Light Green) (1983) (BitCorp) (PAL)", "AKA Spider Fighter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1064,10 +1064,10 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "4f32b24869d8c1310fecf039c6424db6", "U.S. Games Corporation - JWDA, Todd Marshall", "", "3-D Zapper (12-15-82) (U.S. Games) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4f618c2429138e0280969193ed6c107e", "Activision, Alan Miller", "AZ-028, AG-028-04", "Robot Tank (1983) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4f634893d54e9cabe106e0ec0b7bdcdf", "Retroactive", "", "Qb (2.14) (Retroactive) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "4f64d6d0694d9b7a1ed7b0cb0b83e759", "20th Century Fox Video Games, John Russell", "11016", "Revenge of the Beefsteak Tomatoes (1982) (20th Century Fox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "4f6702c3ba6e0ee2e2868d054b00c064", "Activision, Steve 'Jessica' Kitchen - Ariola", "EAZ-033 - 711 033-725", "Space Shuttle (1983) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "4f64d6d0694d9b7a1ed7b0cb0b83e759", "20th Century Fox Video Games, John Russell", "11016", "Revenge of the Beefsteak Tomatoes (1983) (20th Century Fox)", "AKA Revenge of the Cherry Tomatoes", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "4f6702c3ba6e0ee2e2868d054b00c064", "Activision - Woodside Design Associates, Steve 'Jessica Stevens' Kitchen - Ariola", "EAZ-033 - 711 033-725", "Space Shuttle (1983) (Activision) (PAL)", "A Journey Into Space, Eine Reise ins All", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4f781f0476493c50dc578336f1132a67", "", "", "Indy 500 (Unknown) (PAL) (4K)", "Uses Driving Controllers", "", "", "", "", "", "", "", "DRIVING", "DRIVING", "", "45", "", "", "", "", "" }, - { "4f7b07ec2bef5ccffe06403a142f80db", "Apollo - Games by Apollo, Ed Salvo, Byron Parks", "AP-2003", "Racquetball (1981) (Apollo) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "4f7b07ec2bef5ccffe06403a142f80db", "Apollo - Games by Apollo, Ed Salvo, Byron Parks", "AP-2003", "Racquetball (1982) (Apollo) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "4f82d8d78099dd71e8e169646e799d05", "", "", "Miniature Golf (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4f89b897444e7c3b36aed469b8836839", "Atari", "CX26190", "BMX Air Master (1989) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4fae08027365d31c558e400b687adf21", "", "", "Qb (V2.17) (NTSC) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -1106,7 +1106,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "525ea747d746f3e80e3027720e1fa7ac", "Activision, Garry Kitchen - Ariola", "EAZ-032 - 771 032-712", "Pressure Cooker (1983) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "525f2dfc8b21b0186cff2568e0509bfc", "Activision, David Crane", "AG-930-04, AZ-030", "Decathlon (1983) (Activision) [fixed]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "52615ae358a68de6e76467e95eb404c7", "", "", "DJdsl-wopd (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "528400fad9a77fd5ad7fc5fdc2b7d69d", "Arcadia Corporation, Stephen Harland Landrum, Jon Leupp", "AR-4201", "Sword of Saros (1983) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "528400fad9a77fd5ad7fc5fdc2b7d69d", "Starpath Corporation, Stephen H. Landrum, Jon Leupp", "11 AR-4201", "Sword of Saros (1983) (Starpath)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "52a0003efb3b1c49fcde4dbc2c685d8f", "Atari, Alan Miller - Sears", "CX2641 - 99807, 49-75105", "Surround (1977) (Atari) (4K) [a]", "", "", "", "2K", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "52b448757081fd9fabf859f4e2f91f6b", "", "", "Worm War I (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "52bae1726d2d7a531c9ca81e25377fc3", "", "", "Space Instigators (V1.8 Fixed) (20-10-2002) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1114,7 +1114,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "52e9db3fe8b5d336843acac234aaea79", "", "", "Fu Kung! (V0.11) (28-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5305f69fbf772fac4760cdcf87f1ab1f", "Jone Yuan Telephonic Enterprise Co", "", "Ski Run (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5324cf5b6dc17af4c64bf8696c39c2c1", "Imagic, Dennis Koble", "IA3203, IX-010-04", "Atlantis (1982) (Imagic) (8K)", "AKA Lost City of Atlantis", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5336f86f6b982cc925532f2e80aa1e17", "Parker Brothers, Ray Miller, Todd Marshall", "PB5060", "Star Wars - Death Star Battle (1983) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "5336f86f6b982cc925532f2e80aa1e17", "Parker Brothers - JWDA, Todd Marshall, Robin McDaniel, Ray Miller", "PB5060", "Star Wars - Death Star Battle (1983) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "534e23210dd1993c828d944c6ac4d9fb", "M Network, Stephen Tatsumi, Jane Terjung - Kool Aid", "MT4648", "Kool-Aid Man (1983) (M Network)", "AKA Kool Aid Pitcher Man", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5355f80cacf0e63a49cbf4ade4e27034", "Christian Samuel", "", "Cute Dead Things House (Christian Samuel) (Hack)", "Hack of Haunted House", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5360693f1eb90856176bd1c0a7b17432", "", "", "Oystron (V2.85) (Piero Cavina) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1141,7 +1141,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "551a64a945d7d6ece81e9c1047acedbc", "Matthias Jaap", "", "Coffee Cup Soccer (Matthias Jaap) (Hack)", "Hack of Pele's Soccer", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "551ef75593ec18d078e8f5cc0229e1c4", "", "", "Star Fire - New Paulstar WIP (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5524718a19107a04ec3265c93136a7b5", "Thomas Jentzsch", "", "RealSports Basketball (Thomas Jentzsch)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "557e893616648c37a27aab5a47acbf10", "Atari - Axlon, Tod Frye", "CX26169", "Shooting Arcade (01-16-1990) (Atari) (Prototype) (PAL)", "Uses the Light Gun Controller (left only)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "557e893616648c37a27aab5a47acbf10", "Atari - Axlon, Tod Frye - Heuristica, Augustin Ortiz", "CX26169", "Shooting Arcade (01-16-1990) (Atari) (Prototype) (PAL)", "Uses the Light Gun Controller (left only)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "559317712f989f097ea464517f1a8318", "Panda", "100", "Space Canyon (1983) (Panda)", "AKA Space Cavern", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "55949cb7884f9db0f8dfcf8707c7e5cb", "Atari, Ed Logg, Carol Shaw - Sears", "CX2639 - 49-75162", "Othello (1981) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "55ace3c775f42eb46f08bb1dca9114e7", "", "", "Shadow Keep (04-03-2003) (Andrew Towers)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1157,7 +1157,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "571c6d9bc71cb97617422851f787f8fe", "Activision, David Crane - Ariola", "EAG-004, PAG-004 - 711 004-715", "Fishing Derby (1980) (Activision) (PAL)", "AKA Schneller als der Hai", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "572d0a4633d6a9407d3ba83083536e0f", "Funvision - Fund. International Co.", "", "Busy Police (Funvision)", "AKA Keystone Kapers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "575c0fb61e66a31d982c95c9dea6865c", "", "", "Blackjack (Unknown) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES_IAXIS", "", "", "", "", "", "", "", "" }, - { "57939b326df86b74ca6404f64f89fce9", "Atari, Richard Dobbis, Nick 'Sandy Maiwald' Turner", "CX26111", "Snoopy and the Red Baron (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "57939b326df86b74ca6404f64f89fce9", "Atari, Sam Comstock, Richard Dobbis, Nick 'Sandy Maiwald' Turner", "CX26111", "Snoopy and the Red Baron (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "579baa6a4aa44f035d245908ea7a044d", "Jess Ragan", "", "Galaxian Enhanced Graphics (Jess Ragan) (Hack)", "Hack of Galaxian", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "57a66b6db7efc5df17b0b0f2f2c2f078", "Retroactive", "", "Qb (V2.08) (NTSC) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "57c5b351d4de021785cf8ed8191a195c", "Atari - CCW, Gary Stark", "CX26102", "Cookie Monster Munch (1983) (Atari)", "Uses Kids/Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, @@ -1168,7 +1168,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "585f73010e205ae5b04ee5c1a67e632d", "", "", "Daredevil (V3) (Stunt_Cycle_Rules!) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5864cab0bc21a60be3853b6bcd50c59f", "", "", "Commando Raid (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "58746219d8094edff869f0f5c2aeaad5", "Jone Yuan Telephonic Enterprise Co", "", "Bowling (Jone Yuan) (4K)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5894c9c0c1e7e29f3ab86c6d3f673361", "Activision, Steve 'Jessica' Kitchen", "AZ-033, AZ-033-04", "Space Shuttle (1983) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5894c9c0c1e7e29f3ab86c6d3f673361", "Activision - Woodside Design Associates, Steve 'Jessica Stevens' Kitchen", "AZ-033, AZ-033-04", "Space Shuttle (1983) (Activision)", "A Journey Into Space", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "589c73bbcd77db798cb92a992b4c06c3", "Xonox - K-Tel Software - Action Graphics, John Perkins, David Thiel", "6230, 7210, 06004, 99004", "Artillery Duel (1983) (Xonox) (PAL60)", "", "", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "", "" }, { "58a82e1da64a692fd727c25faef2ecc9", "CCE", "C-824", "Jaw Breaker (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "58c396323ea3e85671e34c98eb54e2a4", "Brian Watson", "", "Color Tweaker (B. Watson)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1195,14 +1195,14 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "5a734779d797ccef25dc8acfa47244c7", "", "", "Oh No! (Version 2) (18-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5a80b857eb8b908ab477ec4ef902edc8", "Activision, Bob Whitehead", "AG-002, CAG-002, AG-002-04", "Boxing (1980) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5a81ad4e184050851e63c8e16e3dac77", "Jone Yuan Telephonic Enterprise Co", "Hack", "Sky Diver (Jone Yuan) (Hack)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5a8afe5422abbfb0a342fb15afd7415f", "Atari, Robert C. Polaro", "CX26155", "Sprint Master (1988) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5a8afe5422abbfb0a342fb15afd7415f", "Atari - Bobco, Robert C. Polaro", "CX26155", "Sprint Master (1988) (Atari)", "AKA Sprint 88, Sprint 2000", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5a93265095146458df2baf2162014889", "Activision, Steve Cartwright - Ariola", "EAX-031, EAX-031-04B - 711 031-717", "Frostbite (1983) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5a9685c4d51a6c1d6a9544946d9e8dc3", "AtariAge", "", "Grandma's Revenge (AtariAge)", "Can use driving controller in right port", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5a9d188245aff829efde816fcade0b16", "CCE", "C-808", "Phantom Tank (1983) (CCE) (PAL)", "AKA Tanks But No Tanks", "", "", "", "", "", "", "", "", "", "", "", "", "36", "", "", "" }, { "5acf9865a72c0ce944979f76ff9610f0", "", "", "Dodge Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5ae73916fa1da8d38ceff674fa25a78a", "CCE", "", "Barnstorming (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5aea9974b975a6a844e6df10d2b861c4", "Atari, Dan Hitchens", "CX2656", "SwordQuest - EarthWorld (1982) (Atari)", "AKA Adventure I, SwordQuest I - EarthWorld", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5af9cd346266a1f2515e1fbc86f5186a", "Sega", "002-01", "Sub-Scan (1982) (Sega)", "AKA Subterfuge", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5aea9974b975a6a844e6df10d2b861c4", "Atari, Dan Hitchens. Mimi Nyden", "CX2656", "SwordQuest - EarthWorld (1982) (Atari)", "AKA Adventure I, SwordQuest I - EarthWorld", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5af9cd346266a1f2515e1fbc86f5186a", "Sega", "002-01", "Sub-Scan (1983) (Sega)", "AKA Subterfuge", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5b124850de9eea66781a50b2e9837000", "PlayAround - J.H.M.", "205", "Bachelor Party (1982) (PlayAround)", "Uses the paddle controllers", "Extremely Rare", "", "", "", "", "", "", "PADDLES_IAXIS", "", "", "AUTO 65", "", "22", "222", "YES", "" }, { "5b574faa56836da0866ba32ae32547f2", "", "", "Tomb Raider 2600 [REV 03] (Montezuma's Revenge Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5b5d04887922b430de0b7b2a21f9cd25", "", "", "Omega Race (Genesis)", "Genesis controller (B is thrust, C is fire)", "Hack of Omega Race", "", "", "", "", "", "", "GENESIS", "", "", "", "", "", "", "", "" }, @@ -1231,7 +1231,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "5ce98f22ade915108860424d8dde0d35", "", "", "Hangman Man Biglist3 (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5d0e8a25cbd23e76f843c75a86b7e15b", "Coleco - Individeo, Ed Temple", "", "Cabbage Patch Kids (09-07-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5d132d121aabc5235dd039dfc46aa024", "", "", "Basketball (208 in 1) (Unknown) (PAL) (Hack)", "Console ports are swapped", "Hack", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, - { "5d25df9dc2cde746ceac48e834cf84a7", "Activision, Steve 'Jessica' Kitchen", "EAZ-033", "Space Shuttle (1983) (Activision) (SECAM)", "", "", "", "FE", "", "", "", "", "", "", "", "", "SECAM", "", "", "", "" }, + { "5d25df9dc2cde746ceac48e834cf84a7", "Activision - Woodside Design Associates, Steve 'Jessica Stevens' Kitchen", "EAZ-033", "Space Shuttle (1983) (Activision) (SECAM)", "A Journey Into Space", "", "", "FE", "", "", "", "", "", "", "", "", "SECAM", "", "", "", "" }, { "5d2cc33ca798783dee435eb29debf6d6", "Activision - Imagineering, Mike Reidel", "AK-043-04", "Commando (1988) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5d799bfa9e1e7b6224877162accada0d", "Spectravision - Spectravideo - Sirius Software, David Lubar", "SA-206", "Challenge of.... Nexar, The (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5d8f1ab95362acdf3426d572a6301bf2", "Thomas Jentzsch", "", "SWOOPS! (v0.96) (TJ) (PAL)", "Uses the Joystick (L) and Paddle (R) Controllers", "Homebrew", "", "", "", "", "", "", "", "PADDLES", "", "", "", "28", "", "", "" }, @@ -1245,7 +1245,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "5df32450b9fbcaf43f9d83bd66bd5a81", "Eric Ball", "", "Atari Logo Playfield Demo (2001) (Eric Ball) (PD)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5df559a36347d8572f9a6e8075a31322", "Digivision", "", "Enduro (Digivision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5e0c37f534ab5ccc4661768e2ddf0162", "Telegames - VSS, Ed Salvo", "5667 A106", "Glacier Patrol (1988) (Telegames)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5e1b4629426f4992cf3b2905a696e1a7", "Activision, Robert C. Polaro", "AK-049-04", "Rampage! (1989) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5e1b4629426f4992cf3b2905a696e1a7", "Activision - Bobco, Robert C. Polaro", "AK-049-04", "Rampage! (1989) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5e1b7a6078af428ef056fe85a37a95ca", "Activision, David Crane", "AX-014, AX-014-04", "Grand Prix (1982) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5e1cd11a6d41fc15cf4792257400a31e", "Philip R. Frey", "", "Return of Mario Bros (Philip R. Frey) (Hack)", "Hack of Mario Bros.", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5e201d6bfc520424a28f129ee5e56835", "Universal Gamex Corporation, Alan Roberts, H.K. Poon", "GX-001", "X-Man (1983) (Universal) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1313,7 +1313,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "63166867f75869a3592b7a94ea62d147", "", "", "Indy 500 (Hack) [a1]", "Hack of Indy 500", "Hack", "", "", "", "", "", "", "DRIVING", "DRIVING", "", "", "", "", "", "", "" }, { "6333ef5b5cbb77acd47f558c8b7a95d3", "Greg Troutman", "", "Dark Mage (Greg Troutman) (PD) (8K)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "6337927ad909aa739d6d0044699a916d", "Jeffry Johnston", "", "Radial Pong - Version 2 (Jeffry Johnston) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "6339d28c9a7f92054e70029eb0375837", "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (1984) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "6339d28c9a7f92054e70029eb0375837", "Parker Brothers, Wilfredo Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (1984) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "6342afe9c9ad1b6120b8f6fb040d0926", "", "", "Move a Blue Blob Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6354f9c7588a27109c66905b0405825b", "Thomas Jentzsch", "", "Amidar DS (2003) (TJ) (Hack)", "Hack of Amidar", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "635cc7a0db33773959d739d04eff96c2", "", "", "Minesweeper (V.90) (Soren Gust) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1326,14 +1326,14 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "63c5fef3208bb1424d26cf1ab984b40c", "", "", "Analog Clock (V0.1) (20-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "63c7395d412a3cd095ccdd9b5711f387", "Eric Ball", "ELB005", "Skeleton+ (PAL)", "Stereo sound", "Homebrew", "STEREO", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "63d6247f35902ba32aa49e7660b0ecaa", "", "", "Space War (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "63e42d576800086488679490a833e097", "Telesys, Jim Rupp", "1004", "Ram It (1982) (Telesys) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "63e42d576800086488679490a833e097", "Telesys, Jim Rupp", "1004", "Ram It (1983) (Telesys) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "63e783994df824caf289b69a084cbf3e", "David Marli", "", "Fat Albert (David Marli) (Hack)", "Hack of Fast Food", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "63e9e612bbee31045f8d184a4e53f8ec", "ATARITALIA", "", "Moby Blues (2002) (ATARITALIA) (Hack)", "Hack of Mario Bros", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "640a08e9ca019172d612df22a9190afb", "Atari - GCC, Mike Feinstein, Kevin Osborn", "CX2691, CX2691P", "Joust (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "64198bb6470c78ac24fcf13fe76ab28c", "Arcadia Corporation, Dennis Caswell", "AR-4200", "Escape from the Mindmaster (1982) (Arcadia) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "643e6451eb6b8ab793eb60ba9c02e000", "Salu - Avantgarde Software, Michael Buetepage", "460741", "Ghostbusters II (1992) (Salu) (PAL) [different tune]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "645bf7f9146f0e4811ff9c7898f5cd93", "Xonox - K-Tel Software", "6230, 6250", "Super Kung-Fu (1983) (Xonox) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "6468d744be9984f2a39ca9285443a2b2", "Atari", "CX26163P", "Reversi (32 in 1) (1988) (Atari) (PAL)", "AKA Othello", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "645bf7f9146f0e4811ff9c7898f5cd93", "Xonox - K-Tel Software - VSS, Robert Weatherby", "6230, 6250", "Super Kung-Fu (1983) (Xonox) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "6468d744be9984f2a39ca9285443a2b2", "Atari, Ed Logg, Carol Shaw", "CX26163P", "Reversi (32 in 1) (1988) (Atari) (PAL)", "AKA Othello", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "647162cceb550fd49820e2206d9ee7e8", "", "", "Skeleton (NTSC) (2002) (Eric Ball)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "64b8e19c767191ccdc97acc6904c397b", "Jeffry Johnston", "", "Radial Pong - Version 6 (Jeffry Johnston) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "64ca518905311d2d9aeb56273f6caa04", "CCE", "", "Cubo Magico (CCE)", "AKA Cubicolor", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1358,7 +1358,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "662eca7e3d89175ba0802e8e3425dedb", "", "", "Hangman Pac-Man Biglist3 (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "66362890eb78d6ea65301592cce65f5b", "", "", "Euchre (13-07-2001) (Eric Eid) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "663ef22eb399504d5204c543b8a86bcd", "CBS Electronics, Joe Hellesen", "4L1720, 4L1721, 4L1722, 4L2276", "Wizard of Wor (1982) (CBS Electronics) (PAL)", "Uses the Joystick Controllers (swapped)", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "YES", "" }, - { "6651e2791d38edc02c5a5fd7b47a1627", "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (04-05-1984) (Parker Bros) (Prototype) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "6651e2791d38edc02c5a5fd7b47a1627", "Parker Brothers, Wilfredo Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (04-05-1984) (Parker Bros) (Prototype) (8K)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "665b8f8ead0eef220ed53886fbd61ec9", "Telesys, Don Ruffcorn, Jack Woodman", "1003", "Fast Food (1982) (Telesys)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "66706459e62514d0c39c3797cbf73ff1", "Video Gems", "VG-05", "Treasure Below (1983) (Video Gems) (PAL)", "", "", "", "", "", "A", "", "", "", "", "", "", "", "", "", "", "" }, { "6672de8f82c4f7b8f7f1ef8b6b4f614d", "Videospielkassette - Ariola", "PGP237", "Angeln I (Ariola) (PAL)", "AKA Fishing Derby", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1459,7 +1459,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "6ce2110ac5dd89ab398d9452891752ab", "Funvision - Fund. International Co.", "", "Persian Gulf War (Funvision)", "AKA River Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6cea35ded079863a846159c3a1101cc7", "", "", "Atlantis (208 in 1) (Unknown) (PAL) (Hack)", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6ceb7d6a54e9a5e62d26874d1cc88dbc", "Video Soft", "", "Atom Smasher (1984) (Video Soft) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "6cf054cd23a02e09298d2c6f787eb21d", "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (1984) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "6cf054cd23a02e09298d2c6f787eb21d", "Parker Brothers, Wilfredo Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (1984) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "6d218dafbf5a691045cdc1f67ceb6a8f", "Robin Harbron", "", "6 Digit Score Display (1998) (Robin Harbron) (PD)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6d475019ea30d0b29f695e9dcfd8f730", "Eric Mooney", "", "Invaders by Erik Mooney (Alpha 2) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6d74ebaba914a5cfc868de9dd1a5c434", "", "", "Fortress (Smooth Version) (20-04-2003) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1468,7 +1468,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "6d9afd70e9369c2a6bff96c4964413b7", "", "", "Time Warp (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6dda84fb8e442ecf34241ac0d1d91d69", "Atari - GCC, Douglas B. Macrae", "CX2677", "Dig Dug (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6de924c2297c8733524952448d54a33c", "CCE", "C-1006", "Moon Patrol (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "6dfad2dd2c7c16ac0fa257b6ce0be2f0", "Parker Brothers, Larry Gelberg, Gary Goltz", "PB5065", "Star Wars - Ewok Adventure (1983) (Parker Bros) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "6dfad2dd2c7c16ac0fa257b6ce0be2f0", "Parker Brothers, Larry Gelberg", "PB5065", "Star Wars - Ewok Adventure (1983) (Parker Bros) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6e179eee3d4631a7434d40cf7aeea6e8", "Wizard Video Games - MicroGraphic Image, Robert Barber, Tim Martin", "007", "Halloween (1983) (Wizard Video Games) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6e19428387686a77d8c8d2f731cb09e0", "", "", "Purple Cross Demo (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6e372f076fb9586aff416144f5cfe1cb", "Atari, Tod Frye - Sears", "CX2646 - 49-75185", "Pac-Man (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1480,7 +1480,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "6ed6bda5c42b2eb7a21c54e5b3ace3e3", "Canal 3 - Intellivision", "", "Ice Hockey (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6efe876168e2d45d4719b6a61355e5fe", "Bit Corporation", "PG207", "Mission 3,000 A.D. (1983) (BitCorp) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "6f084daf265599f65422ef4173b69bc7", "", "", "Music Kit (V2.0) - Song Player (Paul Slocum)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "6f2aaffaaf53d23a28bf6677b86ac0e3", "U.S. Games Corporation, Garry Kitchen - Vidtec", "VC1001", "Space Jockey (1982) (U.S. Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "6f2aaffaaf53d23a28bf6677b86ac0e3", "U.S. Games Corporation - Vidtec - JWDA, Garry Kitchen", "VC1001", "Space Jockey (1982) (U.S. Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6f3e3306da2aa6e74a5e046ff43bf028", "", "", "Defender Arcade (Genesis)", "Genesis controller (C is smartbomb)", "Hack of Defender 2", "", "", "", "", "", "", "GENESIS", "", "", "", "", "", "", "", "" }, { "6f74ed915ffe73b524ef0f63819e2a1d", "Eckhard Stolberg", "", "An Exercise In Minimalism (V2) (1999) (Eckhard Stolberg)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6f75d72e4cf996100ccdd163d57bdac2", "", "", "Star Fire (200203) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1500,7 +1500,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "705fe719179e65b0af328644f3a04900", "Atari, David Crane - Sears", "CX2653 - 6-99823, 49-75111", "Slot Machine (1979) (Atari) (4K) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "706e3cc4931f984447213b92d1417aff", "", "", "Joustpong (06-07-2002) (Kirk Israel) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "707ecd80030e85751ef311ced66220bc", "", "", "Double-Height 6-Digit Score Display (Background Color Change) (2001) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "7096a198531d3f16a99d518ac0d7519a", "Telesys, Jim Rupp", "1004", "Ram It (1982) (Telesys)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "7096a198531d3f16a99d518ac0d7519a", "Telesys, Jim Rupp", "1004", "Ram It (1983) (Telesys)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "709910c2e83361bc4bf8cd0c20c34fbf", "Rainbow Vision - Suntek", "SS-006", "Netmaker (Rainbow Vision) (PAL)", "AKA Amidar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "70a8480cfaf08776e5420365732159d2", "Rob Kudla", "", "Horizontally Scrolling Playfield Thing (Rob Kudla) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "70ce036e59be92821c4c7fd735ec6f68", "Activision, Steve Cartwright - Ariola", "EAX-031, EAX-031-04B - 711 031-717", "Frostbite (1983) (Activision) (PAL) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1509,7 +1509,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "713fde2af865b6ec464dfd72e2ebb83e", "", "", "Challenge (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "71464c54da46adae9447926fdbfc1abe", "M Network - APh Technological Consulting, Bruce Pedersen - INTV", "MT5663", "Lock 'n' Chase (1982) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "714e13c08508ee9a7785ceac908ae831", "Home Vision - Gem International Corp. - VDI", "VCS83123", "Parachute (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "715dbf2e39ba8a52c5fe5cdd927b37e0", "Amiga", "3135", "S.A.C. Alert (1983) (Amiga) (Prototype)", "Uses Joyboard", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "715dbf2e39ba8a52c5fe5cdd927b37e0", "Amiga - Video Soft", "3135", "S.A.C. Alert (1983) (Amiga) (Prototype)", "Uses Joyboard", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "715dd9e0240638d441a3add49316c018", "Atari", "", "128-in-1 Junior Console (Chip 2 of 4) (1991) (Atari) (PAL)", "Actually contains only 16 games, not 32", "", "", "16IN1", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7187118674ff3c0bb932e049d9dbb379", "Zirok", "", "Keystone Keypers (1983) (Zirok)", "AKA Keystone Kapers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "718ae62c70af4e5fd8e932fee216948a", "Data Age, J. Ray Dettling", "112-006", "Journey Escape (1983) (Data Age)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -1525,7 +1525,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "724613effaf7743cbcd695fab469c2a8", "", "", "Super-Ferrari (Unknown)", "AKA Enduro", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "728152f5ae6fdd0d3a9b88709bee6c7a", "Spectravideo, Mark Turmell", "SA-217", "Gas Hog (1983) (Spectravideo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "72876fd7c7435f41d571f1101fc456ea", "Quelle", "688.383 9", "Die Ente und der Wolf (1983) (Quelle) (PAL)", "AKA Pooyan", "", "", "", "", "", "", "", "", "", "", "", "", "26", "256", "", "" }, - { "72a46e0c21f825518b7261c267ab886e", "Xonox - K-Tel Software", "99005, 6220, 6250", "Robin Hood (1983) (Xonox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "220", "", "" }, + { "72a46e0c21f825518b7261c267ab886e", "Xonox - K-Tel Software - Computer Magic", "99005, 6220, 6250", "Robin Hood (1983) (Xonox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "31", "220", "", "" }, { "72a5b5052272ac785fa076709d16cef4", "", "", "KC Munckin (29-01-2003) (J. Parlee)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "72bda70c75dfa2365b3f8894bace9e6a", "Thomas Jentzsch", "", "Atlantis (TJ) (Hack)", "Hack of Atlantis", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "72d0acb5de0db662de0360a6fc59334d", "", "", "Cosmic Ark (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1538,7 +1538,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "73a710e621d44e97039d640071908aef", "", "", "Barber Pole Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "73aa02458b413091ac940c0489301710", "Quelle - Otto Versand", "463.574 4 - 781393, 986153", "Kampf dem Steinfresser (1983) (Quelle) (PAL)", "Boom Bang (AKA Crackpots)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "73b4e8f8b04515d91937510e680214bc", "", "", "Rubik's Cube Demo 3 (24-12-2002) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "73c545db2afd5783d37c46004e4024c2", "CBS Electronics, Henry Will IV", "4L1767, 4L1768, 4L1769, 4L1770", "Smurf (1982) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "73c545db2afd5783d37c46004e4024c2", "CBS Electronics - JWDA, Todd Marshall, Robin McDaniel, Henry Will IV", "4L1767, 4L1768, 4L1769, 4L1770", "Smurf - Schtroumpfs (1983) (CBS Electronics) (PAL)", "Pitufo", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "73c839aff6a055643044d2ce16b3aaf7", "Activision, Alan Miller - Ariola", "EAX-016, PAX-016 - 711 016-725", "StarMaster (1982) (Activision) (PAL)", "Use Color/BW switch to change between galactic chart and front views", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "73cb1f1666f3fd30b52b4f3d760c928f", "", "", "Mines of Minos (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "225", "YES", "" }, { "73e66e82ac22b305eb4d9578e866236e", "Jone Yuan Telephonic Enterprise Co", "", "Unknown Datatech Game (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1557,7 +1557,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "74d072e8a34560c36cacbc57b2462360", "Sancho - Tang's Electronic Co.", "TEC002", "Seahawk (1982) (Sancho) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "74ebaca101cc428cf219f15dda84b6f8", "Activision, Alan Miller", "AG-007, CAG-007", "Tennis (1981) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "74f623833429d35341b7a84bc09793c0", "Zellers", "", "Radar (Zellers)", "AKA Exocet", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "75028162bfc4cc8e74b04e320f9e6a3f", "Atari, Greg Easter, Mimi Nyden", "CX26107", "Snow White and the Seven Dwarfs (02-09-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "75028162bfc4cc8e74b04e320f9e6a3f", "Atari, Greg Easter, Mimi Nyden", "CX26107", "Snow White (02-09-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7511c34518a9a124ea773f5b0b5c9a48", "", "", "Donkey Kong (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "75169c08b56e4e6c36681e599c4d8cc5", "M Network - APh Technological Consulting, Hal Finney - INTV", "MT5666", "Astroblast (1982) (M Network)", "Can also use left joystick", "Uncommon", "", "", "", "", "", "", "PADDLES", "", "YES", "AUTO 55", "", "", "", "", "" }, { "753375d183c713cfa0aa7298d1f3067b", "Arcadia Corporation, Steve Hales, Stephen Harland Landrum", "AR-4102", "Suicide Mission (1982) (Arcadia) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -1575,7 +1575,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "75e8d8b9e9c5c67c2226dbfd77dcfa7d", "", "", "2600 Digital Clock (V b1) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "75ea128ba96ac6db8edf54b071027c4e", "Atari, David Crane", "CX26163P", "Slot Machine (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "75ea60884c05ba496473c23a58edf12f", "Atari, Howard Scott Warshaw - Sears", "CX2655 - 49-75167", "Yars' Revenge (1982) (Atari) (PAL) [a]", "ROM must be started in bank 0", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "75ee371ccfc4f43e7d9b8f24e1266b55", "Atari, Greg Easter, Mimi Nyden", "CX26107", "Snow White and the Seven Dwarfs (11-09-1982) (Atari) (Prototype)", "ROM must be started in bank 0", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "75ee371ccfc4f43e7d9b8f24e1266b55", "Atari, Greg Easter, Mimi Nyden", "CX26107", "Snow White (11-09-1982) (Atari) (Prototype)", "ROM must be started in bank 0", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7608abdfd9b26f4a0ecec18b232bea54", "Atari, Bob Whitehead", "CX26163P", "NFL Football (32 in 1) (1988) (Atari) (PAL)", "AKA Football", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7623a639a6fffdb246775fe2eabc8d01", "Activision, Bob Whitehead", "AG-005, CAG-005, AG-005-04", "Skiing (1980) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7628d3cadeee0fd2e41e68b3b8fbe229", "Atari", "CX26163P", "Fishing Derby (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1636,7 +1636,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "7ac4f4fb425db38288fa07fb8ff4b21d", "Goliath", "83-213", "Space Eagle (1983) (Goliath) (PAL)", "AKA Exocet", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7ad257833190bc60277c1ca475057051", "Atari, Alan J. Murphy, Robert Zdybel", "CX2668", "RealSports Football (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "7ad782952e5147b88b65a25cadcdf9e0", "Imagic, Dave Johnson", "720119-1A, 03211", "Kwibble (1983) (Imagic) (Prototype)", "AKA Quick Step! Beta", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "7adbcf78399b19596671edbffc3d34aa", "Atari, Joseph Tung", "CX26152", "Super Baseball (1988) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "7adbcf78399b19596671edbffc3d34aa", "Atari, Mimi Nyden, Joseph Tung", "CX26152", "Super Baseball (1988) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7af40c1485ce9f29b1a7b069a2eb04a7", "Amiga - Video Soft", "3120", "Mogul Maniac (1983) (Amiga)", "Uses the Amiga Joyboard", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7b24bfe1b61864e758ada1fe9adaa098", "Atari, Chris Crawford", "", "Wizard (1980) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7b33407b2b198af74906b936ce1eecbb", "King Atari", "", "Ghostbuster 2 (King Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -1708,7 +1708,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "7f819454734ddf93f83fefcffcd3e212", "Jone Yuan Telephonic Enterprise Co", "", "Outlaw (Jone Yuan) (4K)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7f9fbe3e00a21ea06e6ae5e0e5db2143", "", "", "Skate Boardin' (2002) (Skyworks)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7fcd1766de75c614a3ccc31b25dd5b7a", "PlayAround - J.H.M.", "203", "Knight on the Town (1982) (PlayAround)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "216", "YES", "" }, - { "7fcd5fb59e88fc7b8473c641f44226c3", "CCE", "C-807", "Space Tunnel (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "215", "", "" }, + { "7fcd5fb59e88fc7b8473c641f44226c3", "CCE", "C-807", "Space Tunnel (1983) (CCE)", "AKA Cosmic Corridor, O Tunel Espacial", "", "", "", "", "", "", "", "", "", "", "", "", "32", "215", "", "" }, { "7ff53f6922708119e7bf478d7d618c86", "Suntek", "SS-032", "Walker (Suntek) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7ffc2d80fd49a124808315306d19868e", "Ishido", "", "Domino (Ishido) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "801ba40f3290fc413e8c816c467c765c", "Hozer Video Games", "", "Gunfight 2600 - Westward Ho! (2001) (MP)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1787,11 +1787,11 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "85b1bca93e69f13905107cc802a02470", "Atari, Craig Nelson", "CX2617, CX2617P", "Backgammon (1979) (Atari) (PAL)", "Uses the Paddle Controllers", "Extremely Rare", "", "", "", "", "", "", "PADDLES_IAXDR", "", "", "AUTO 80", "", "", "", "", "" }, { "85bbefb90e16bf386b304c1e9a1f6084", "Champ Games", "CG-02-P", "Conquest Of Mars (PAL60)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "", "" }, { "85e48d68c8d802e3ba9d494a47d6e016", "", "", "Ship Demo (V 15) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "85e564dae5687e431955056fbda10978", "Milton Bradley Company", "4362", "Survival Run (1983) (Milton Bradley)", "AKA Cosmic Commander", "", "", "", "", "", "", "", "", "", "", "", "", "", "225", "YES", "" }, + { "85e564dae5687e431955056fbda10978", "Milton Bradley Company - Renaissance Technology, Ty Roberts", "4362", "Survival Run (1983) (Milton Bradley)", "AKA Cosmic Commander", "", "", "", "", "", "", "", "", "", "", "", "", "", "225", "YES", "" }, { "86128001e69ab049937f265911ce7e8a", "Apollo - Games by Apollo, Steve Stringfellow", "AP-2005", "Lochjaw (1982) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "28", "", "", "" }, { "862cf669cbced78f9ed31a5d375b2ebe", "", "", "Gunfight 2600 - Flicker acceptance (2001) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8644352b806985efde499ae6fc7b0fec", "CCE", "C-801", "Mr. Postman (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "8654d7f0fb351960016e06646f639b02", "Home Vision - Gem International Corp. - R.J.P.G.", "VCS83106", "Ski Hunt (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "8654d7f0fb351960016e06646f639b02", "Home Vision, R.J.P.G. - Gem International Corp. - VDI", "VCS83106", "Ski Hunt (1983) (Home Vision) (PAL)", "AKA Skiiing Hunt", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "866e5150c995c4ae5172e5207ba948c7", "Canal 3 - Intellivision", "", "Stampede (Canal 3) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "869abe0426e6e9fcb6d75a3c2d6e05d1", "", "", "Stampede (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "86b4aa76bbeb70e1a4f9211a9880ba8e", "", "", "Incoming (1 Player Version) (05-11-2002) (Ben Larson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1807,7 +1807,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "876a953daae0e946620cf05ed41989f4", "Retroactive", "", "Qb (V2.08) (PAL) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "877a5397f3f205bf6750398c98f33de1", "Erik Eid", "", "Euchre (Beta) (PAL) (12-09-2002) (Erik Eid)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8786c1e56ef221d946c64f6b65b697e9", "20th Century Fox Video Games, David Lubar", "11015", "AKA Space Adventure", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "8786f229b974c393222874f73a9f3206", "Activision, Larry Miller - Ariola", "EAX-021, EAX-021-04I - 711 021-720", "Spider Fighter (1982) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "8786f229b974c393222874f73a9f3206", "Activision, Larry Miller - Ariola", "EAX-021, EAX-021-04I - 711 021-720", "Spider Fighter (1983) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8786f4609a66fbea2cd9aa48ca7aa11c", "Goliath", "5", "Open Sesame (1983) (Goliath) (PAL)", "AKA I Want My Mommy", "", "", "", "", "", "", "", "", "", "", "", "", "34", "", "YES", "" }, { "87b460df21b7bbcfc57b1c082c6794b0", "Dennis Debro", "", "Climber 5 (20-03-2003) (Dennis Debro)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "87b6a17132fc32f576bc49ea18729506", "Atari, Andrew Fuchs, Courtney Granner, Jeffrey Gusman, Mark R. Hahn", "CX2690", "Pengo (1984) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1831,15 +1831,15 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "8933976f2029c0d8492ebd8f4eb21492", "", "", "Synthcart Plus (09-02-2003) (Paul Slocum)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "8953bc11352d794431d3303e31d3b892", "Tigervision, Robert H. O'Neil", "7-007", "Polaris (02-17-1983) (Tigervision) (Prototype) (4K)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "896ec58f26e930e02f5e4f046602c3a1", "", "", "Synthcart (Beta) (2002) (Paul Slocum)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "YES", "" }, - { "898143773824663efe88d0a3a0bb1ba4", "Activision, Steve 'Jessica' Kitchen", "AZ-033, AZ-033-04", "Space Shuttle (1983) (Activision) [FE]", "A Journey Into Space", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "898143773824663efe88d0a3a0bb1ba4", "Activision - Woodside Design Associates, Steve 'Jessica Stevens' Kitchen", "AZ-033, AZ-033-04", "Space Shuttle (1983) (Activision) [FE]", "A Journey Into Space", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "898748d5eaac3164b0391a64ae1e0e32", "", "", "Hangman Man 4letter (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "898b5467551d32af48a604802407b6e8", "Bit Corporation", "PG208", "Snail Against Squirrel (1983) (BitCorp) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "89a65b83203980d5d4d60f52a584a5b8", "", "", "Marble Craze (PAL) (02-02-2003) (Paul Slocum)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "89a68746eff7f266bbf08de2483abe55", "Atari, Jerome Domurat, Steve Woita", "CX2696", "Asterix (1984) (Atari)", "AKA Taz", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "89afff4a10807093c105740c73e9b544", "", "", "Pooyan (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "89eaba47a59cbfd26e74aad32f553cd7", "Apollo - Games by Apollo, Ed Salvo, Bryson Park", "AP-2001", "Spacechase (1981) (Apollo) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "89eaba47a59cbfd26e74aad32f553cd7", "Apollo - Games by Apollo, Ed Salvo, Byron Parks", "AP-2001", "Spacechase (1982) (Apollo) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8a159ee58b2f0a54805162984b0f07e5", "Atari - Sculptured Software, Inc., Steve Aguirre", "CX26162", "Fatal Run (1989) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "8a183b6357987db5170c5cf9f4a113e5", "Atari, Joe Gaucher", "CX2679", "RealSports Basketball (1983) (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "8a183b6357987db5170c5cf9f4a113e5", "Atari - Roklan, Joe Gaucher", "CX2679", "RealSports Basketball (1983) (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8a42e2c7266439d8997a55d0124c912c", "", "", "Hangman Invader Wordlist (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8a49cf1785e3dea2012d331a3ad476e1", "", "", "Boulderdash (10 Blocks Wide) (02-04-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8a6c84f481acf42abcb78ba5064ad755", "128-in-1 Junior Console", "", "Street Racer (128-in-1 Junior Console) (PAL) (4K)", "Uses the Paddle Controllers (swapped)", "", "", "", "", "", "", "", "PADDLES", "", "YES", "10 75", "", "", "", "", "" }, @@ -1854,7 +1854,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "8b504b417c8626167a7e02f44229f0e7", "Retroactive", "", "Qb (V1.00) (NTSC) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "8b556c3d9ca8e5e6e665bd759b93ffae", "", "", "Synthcart (2002) (Paul Slocum) (PAL) [!]", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "YES", "" }, { "8b5b1e3a434ebbdc2c2a49dc68f46360", "CBS Electronics - Woodside Design Associates - Imaginative Systems Software, Dan Kitchen, Garry Kitchen", "4L1700, 4L1701, 4L1702, 4L1802, 4L2274", "Donkey Kong (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "8b7ca29a55432f886cee3d452fb00481", "Arcadia Corporation, Stephen Harland Landrum, Jon Leupp", "AR-4201", "Sword of Saros (1983) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "8b7ca29a55432f886cee3d452fb00481", "Starpath Corporation, Stephen H. Landrum, Jon Leupp", "11 AR-4201", "Sword of Saros (1983) (Starpath) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8b8152d6081f31365406cb716bd95567", "Atari", "CX2626, CX2626P", "Miniature Golf (1979) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8b8789c6669a4cee86c579a65332f852", "Digivision", "", "Plaque Attack (Digivision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8bbfd951c89cc09c148bfabdefa08bec", "UA Limited", "", "Pleiades (1983) (UA Limited) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -1877,7 +1877,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "8d1e2a6d2885966e6d86717180938f87", "Thomas Jentzsch", "", "Missile Command (Amiga Mouse) (2002) (TJ)", "Uses Amiga Mouse Controller", "Homebrew", "", "", "", "", "", "", "AMIGAMOUSE", "", "", "", "", "", "", "YES", "" }, { "8d8b7d7b983f75debbdaac651e814768", "", "", "Demo Image Series #15 - Three Marios (PAL) (06-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8d9a06101ebb0f147936356e645309b8", "", "", "Grid Pattern Demo 2 (20-12-2002) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "8da51e0c4b6b46f7619425119c7d018e", "Atari, David Lubar", "CX26183", "Sentinel (1990) (Atari)", "Uses the Light Gun Controller (left only)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "8da51e0c4b6b46f7619425119c7d018e", "Atari - Imagineering, David Lubar", "CX26183", "Sentinel (1991) (Atari)", "Uses the Light Gun Controller (left only)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8db152458abaef3cfa7a4e420ddbda59", "", "", "Keystone Kapers (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8df4be9ddc54ac363b13dc57ceaf161a", "Scott Stilphen", "", "Asteroids SS (Scott Stilphen) (Hack)", "Hack of Asteroids", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "8e0ab801b1705a740b476b7f588c6d16", "Activision, David Crane", "AG-009, AG-009-04", "Freeway (1981) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1934,7 +1934,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "9281eccd7f6ef4b3ebdcfd2204c9763a", "Retroactive", "", "Qb (2.15) (Retroactive) (PAL)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "9295570a141cdec18074c55dc7229d08", "Telegames", "7045 A015", "Bump 'n' Jump (1988) (Telegames) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "929e8a84ed50601d9af8c49b0425c7ea", "Bit Corporation", "PG205", "Dancing Plate (1982) (BitCorp) (PAL)", "AKA Dishaster, Dancing Plates, Tanzende Teller", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "92a1a605b7ad56d863a56373a866761b", "U.S. Games Corporation, Dave Hampton", "VC2006", "Raft Rider (1982) (U.S. Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "92a1a605b7ad56d863a56373a866761b", "U.S. Games Corporation - Western Technologies, Dave Hampton", "VC2006", "Raft Rider (1983) (U.S. Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "92c5abb7a8bb1c3fc66c92ba353a3d21", "", "", "Star Fire - Sorting Fixed (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "92d1f6ac179ebe5963868d6bc1bdda8d", "HES", "498", "Smash Hit Pak - Frogger, Boxing, Seaquest, Skiing, Stampede (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "92e72f7cc569584c44c9530d645ae04e", "Canal 3 - Intellivision", "", "Spider Fighter (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1992,7 +1992,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "972486110933623039a3581db308fda6", "", "", "Xeno Plus (Hack)", "Hack of Xenophobe", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "97327d6962f8c64e6f926f79cd01c6b9", "", "", "Jawbreaker (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "977294ae6526c31c7f9a166ee00964ad", "Atari - GCC, Douglas B. Macrae", "CX2677, CX2677P", "Dig Dug (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "97842fe847e8eb71263d6f92f7e122bd", "Imagic, Wilfredo 'Willy' Aguilar, Michael Becker, Dennis Koble", "720113-1A, 03206", "Solar Storm (1983) (Imagic)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "01 45", "", "", "", "", "" }, + { "97842fe847e8eb71263d6f92f7e122bd", "Imagic, Wilfredo Aguilar, Michael Becker, Dennis Koble", "720113-1A, 03206", "Solar Storm (1983) (Imagic)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "01 45", "", "", "", "", "" }, { "97933c9f20873446e4c1f8a4da21575f", "", "", "Racquetball (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "97a9bb5c3679d67f5c2cd17f30b85d95", "Atari", "", "Colors (1980) (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "97cd63c483fe3c68b7ce939ab8f7a318", "Thomas Jentzsch", "", "Robot City (V0.21) (15-09-2002) (TJ)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2053,7 +2053,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "9d2938eb2b17bb73e9a79bbc06053506", "Imagic, Michael Greene", "EIZ-002-04I", "Wing War (1983) (Imagic) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9d2f05d0fe8b2dfcf770b02eda066fc1", "", "", "Push (V0.06) (2001) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9d33d31fb1de58c5460d8a67b57b36da", "", "", "Star Voyager (Genesis)", "Genesis controller (C is secondary lasers)", "Hack of Star Voyager", "", "", "", "", "", "", "GENESIS", "", "", "", "", "", "", "", "" }, - { "9d37a1be4a6e898026414b8fee2fc826", "M Network, David Rolfe - INTV", "MT5665", "Super Challenge Baseball (1982) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "9d37a1be4a6e898026414b8fee2fc826", "M Network - APh Technological Consulting, David Rolfe - INTV", "MT5665", "Super Challenge Baseball (1982) (M Network)", "AKA Big League Baseball", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9d4bc7c6fe9a7c8c4aa24a237c340adb", "Dennis Debro", "", "Climber 5 (16-04-2003) (Dennis Debro)", "For Philly Classic 4", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9d522a3759aa855668e75962c84546f7", "Atari, Tom Rudadahl", "CX2634, CX2634P", "Golf (1980) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9d7f04618bb4043f531d087e3aaa7ac8", "Parker Brothers, Larry Gelberg, Gary Goltz", "PB5065", "Star Wars - Ewok Adventure (1983) (Parker Bros) (Prototype) (PAL) (16K)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2078,7 +2078,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "9f48eeb47836cf145a15771775f0767a", "Atari, Warren Robinett", "CX2620", "Basic Programming (1979) (Atari)", "Uses Keypad Controllers", "Rare", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "YES", "" }, { "9f5096a6f1a5049df87798eb59707583", "20th Century Fox Video Games, Mark Klein", "11036", "Entity, The (1983) (20th Century Fox) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9f59eddf9ba91a7d93bce7ee4b7693bc", "Thomas Jentzsch", "", "Montezuma's Revenge (Thomas Jentzsch) (PAL60)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "", "" }, - { "9f8fad4badcd7be61bbd2bcaeef3c58f", "Parker Brothers, Charlie Heath", "PB5330", "Reactor (1982) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "9f8fad4badcd7be61bbd2bcaeef3c58f", "Parker Brothers, Charlie Heath", "PB5330", "Reactor (1983) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "9f901509f0474bf9760e6ebd80e629cd", "Atari, Bob Whitehead - Sears", "CX2623 - 6-99819, 49-75108, 49-75125", "Home Run (1978) (Atari) (4K)", "", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, { "9f93734c68f6479eb022cab40814142e", "", "", "Push (V0.07) (2001) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9f9ee0f60c119c831e80694b6678ca1a", "Jeffry Johnston", "", "Radial Pong - Version 8 (Jeffry Johnston) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2097,7 +2097,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "a0d502dc8b90b1d7daa5f6effb10d349", "", "", "Demo Image Series #5 - Sam (19-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a0e2d310e3e98646268200c8f0f08f46", "Atari, Ed Logg, Carol Shaw", "CX2639, CX2639P", "Othello (1981) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a100eff2d7ae61ca2b8e65baf7e2aae8", "David Marli", "", "Muncher (David Marli) (Hack)", "Hack of Pac-Man", "Hack", "", "", "", "", "", "", "", "", "", "", "", "33", "", "", "" }, - { "a11099b6ec24e4b00b8795744fb12005", "Activision, Robert C. Polaro", "EAK-049-04B", "Rampage! (1989) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "a11099b6ec24e4b00b8795744fb12005", "Activision - Bobco, Robert C. Polaro", "EAK-049-04B", "Rampage! (1989) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a1403fef01641dcd3980cac9f24d63f9", "Dactari - Milmar", "", "Atlantis (Dactari - Milmar)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a14d8a388083c60283e00592b18d4c6c", "", "", "Tunnel Demo (28-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a15b5831a1fab52e4c416068c85ec011", "Hozer Video Games", "", "Gunfight 2600 - The Good, The Bad, The Ugly (2001) (MP)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2111,8 +2111,8 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "a1f9159121142d42e63e6fb807d337aa", "Quelle - Otto Versand", "700.223 1 - 781627", "Der moderne Ritter (1983) (Quelle) (PAL)", "AKA Fast Eddie", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a204cd4fb1944c86e800120706512a64", "Coleco", "2511", "Smurfs Save the Day (1983) (Coleco)", "Uses the Kid Vid Controller", "", "", "", "", "", "", "", "", "KIDVID", "", "", "", "", "", "", "" }, { "a20b7abbcdf90fbc29ac0fafa195bd12", "Quelle - Otto Versand", "719.383 2 - 649635, 781393, 781784, 986404", "Motocross (1983) (Quelle) (PAL)", "AKA Motorcross", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "a20d931a8fddcd6f6116ed21ff5c4832", "Apollo - Games by Apollo, Ed Salvo, Byron Parks", "AP-2003", "Racquetball (1981) (Apollo) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "a2170318a8ef4b50a1b1d38567c220d6", "Amiga", "3125", "Surf's Up (1983) (Amiga) (Prototype) [a1]", "Uses the Amiga Joyboard", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "a20d931a8fddcd6f6116ed21ff5c4832", "Apollo - Games by Apollo, Ed Salvo, Byron Parks", "AP-2003", "Racquetball (1982) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "a2170318a8ef4b50a1b1d38567c220d6", "Amiga - Video Soft", "3125", "Surf's Up (1983) (Amiga) (Prototype) [a1]", "Uses the Joyboard controller", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a23ffc86804240ce77134a1c91926685", "", "", "Star Fire - Paulstar WIP (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a2424c1a0c783d7585d701b1c71b5fdc", "", "", "Video Pinball (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a25bb76e9e773117e567fd4300b1bb23", "", "", "Interleaved ChronoColour Demo (NTSC) (05-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2132,7 +2132,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "a35d47898b2b16ec641d1dfa8a45c2b7", "Activision, Steve Cartwright", "AX-017, AX-017-04", "MegaMania (1982) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a3873d7c544af459f40d58dfcfb78887", "", "", "Tennis (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a3b9d2be822eab07e7f4b10593fb5eaa", "", "", "GREGXM Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "a3c1c70024d7aabb41381adbfb6d3b25", "Telesys, Alex Leavens", "1005", "Stargunner (1982) (Telesys)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "a3c1c70024d7aabb41381adbfb6d3b25", "Telesys, Alex Leavens", "1005", "Stargunner (1983) (Telesys)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a3d7c299fbcd7b637898ee0fdcfc47fc", "Arcadia Corporation, Scott Nelson", "AR-4300", "Fireball (Preview) (1982) (Arcadia) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "01", "", "", "", "", "" }, { "a3f2a0fcf74bbc5fa763b0ee979b05b1", "Quelle", "873.790 0", "Eishockey-Fieber (1983) (Quelle) (PAL)", "AKA Ice Hockey", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a3f8aebb38182749cb8da85cfbc63d7c", "", "", "Tennis (208 in 1) (Unknown) (PAL) (Hack)", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2152,7 +2152,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "a4b99aa5ed85cfdb7d101923147de035", "Jim Goebel", "", "Pac-Law (Jim Goebel) (Hack)", "Hack of Outlaw", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a4c08c4994eb9d24fb78be1793e82e26", "Activision, Alan Miller", "AX-012, CAX-012, AX-012-04", "Ice Hockey (1981) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a4d026a5c200ef98518ebb77719fe8dc", "Kyle Pittman", "", "SpongeBob SquarePants (2003) (Kyle Pittman) (Hack)", "Hack of Revenge of the Beefsteak Tomatoes", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "a4e885726af9d97b12bb5a36792eab63", "Xonox - K-Tel Software - Beck-Tech", "6210, 7210, 06003. 99001", "Spike's Peak (1983) (Xonox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "223", "", "" }, + { "a4e885726af9d97b12bb5a36792eab63", "Xonox - K-Tel Software - Beck-Tech, Steve Beck", "6210, 7210, 06003. 99001", "Spike's Peak (1983) (Xonox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "28", "223", "", "" }, { "a4ecb54f877cd94515527b11e698608c", "Atari, Jerome Domurat, Howard Scott Warshaw", "CX26119", "Saboteur (12-20-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a4f1cea2c8479284e2a2292f8d51b5fa", "", "", "Gunfight 2600 - The Final Kernel Part 2 (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a4ff39d513b993159911efe01ac12eba", "Atari - GCC, John Allred, Douglas B. Macrae, Betty Ryan Tylko", "CX2694", "Pole Position (1983) (Atari)", "AKA RealSports Driving", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2189,7 +2189,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "a8435ec570141de5d833c4abec499e55", "", "", "Happy Birthday Demo (2001) (Dennis Debro) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a8633050a686270fcf6c0cc4dcbad630", "Zirok", "", "Phoenix (Zirok)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a867b76098786c4091dba2fcee5084c3", "", "", "Dragrace (Hack)", "Hack of Dragster", "Hack", "", "", "", "", "", "", "", "", "", "", "", "20", "", "", "" }, - { "a875f0a919129b4f1b5103ddd200d2fe", "Atari, Dan Hitchens", "CX2656", "SwordQuest - EarthWorld (1982) (Atari) (PAL)", "AKA Adventure I, SwordQuest I - EarthWorld", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "a875f0a919129b4f1b5103ddd200d2fe", "Atari, Dan Hitchens. Mimi Nyden", "CX2656", "SwordQuest - EarthWorld (1982) (Atari) (PAL)", "AKA Adventure I, SwordQuest I - EarthWorld", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a8916734ff8c64ec3342f4c73fd5b57d", "Atari", "", "Stand Alone Test Cart (1982) (Atari) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a89a3e0547d6887279c34aba4b17a560", "M Network, Steve Crandall, Patricia Lewis Du Long", "MT4646", "Rocky & Bullwinkle (1983) (Mattel) (Prototype)", "", "Prototype", "", "4K", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a8a703e073183a89c94d4d99b9661b7f", "Franklin Cruz", "", "Spice Invaders (Franklin Cruz) (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2218,7 +2218,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "aa7bb54d2c189a31bb1fa20099e42859", "CBS Electronics, Ed English", "4L4478", "Mr. Do! (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "aa8e4b2cb8a78ffe6b20580033f4dec9", "", "", "Bitmap Demo (13-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "aaac0d277eda054861e613c59c2e4ff2", "JWDA, Todd Marshall", "", "Music Demo (JWDA)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "aab840db22075aa0f6a6b83a597f8890", "Home Vision - Gem International Corp. - R.J.P.G.", "VCS83124", "Racing Car (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, + { "aab840db22075aa0f6a6b83a597f8890", "Home Vision, R.J.P.G. - Gem International Corp. - VDI", "VCS83124", "Racing Car (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, { "aad61898633f470ce528e3d7ef3d0adb", "Commavid, Ben Burch", "CM-010", "Rush Hour (1983) (Commavid) (Prototype) [a1]", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "aad91be0bf78d33d29758876d999848a", "Activision, David Crane", "AX-018, AX-018-04", "Pitfall! (1981) (Activision) (Prototype)", "Pitfall Harry's Jungle Adventure (Jungle Runner)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "aaea37b65db9e492798f0105a6915e96", "Arcadia Corporation, Dennis Caswell", "AR-4302", "Party Mix - Tug of War (2 of 3) (1983) (Arcadia)", "Uses Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "02", "", "", "", "", "" }, @@ -2229,7 +2229,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "ab301d3d7f2f4fe3fdd8a3540b7a74f5", "Jone Yuan Telephonic Enterprise Co", "", "IQ 180 (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "27", "230", "", "" }, { "ab434f4c942d6472e75d5490cc4dd128", "HES", "773-875", "2 Pak Special - Hoppy, Alien Force (1992) (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ab4ac994865fb16ebb85738316309457", "Atari, Alan Miller - Sears", "CX2624 - 6-99826, 49-75113", "Basketball (1978) (Atari)", "Console ports are swapped", "Common", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, - { "ab56f1b2542a05bebc4fbccfc4803a38", "Activision, David Lubar", "AK-048-04", "River Raid II (1988) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "ab56f1b2542a05bebc4fbccfc4803a38", "Activision - Imagineering, Dan Kitchen, David Lubar", "AK-048-04", "River Raid II (1988) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ab5bf1ef5e463ad1cbb11b6a33797228", "Imagic, Rob Fulop", "720104-1A, 720104-1B, IA3204", "Cosmic Ark (1982) (Imagic)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ab60ea7b707c58d356cad858eb18db43", "", "", "Tazer (John K. Harvey)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ab8d318da4addd39c65b7f9c408df2a6", "", "", "Star Trek (Genesis)", "Genesis controller (B is phaser, C is warp)", "Hack of Star Trek", "", "", "", "", "", "", "GENESIS", "", "", "", "", "", "", "YES", "" }, @@ -2263,7 +2263,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "ae0d4f3396cb49de0fabdff03cb2756f", "Retroactive", "", "Qb (V2.02) (PAL) (2001) (Retroactive)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "ae10527840a1ac24de43730645ed508d", "Charles Morgan", "", "Planet Invaders (Charles Morgan) (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ae18c11e4d7ed2437f0bf5d167c0e96c", "", "", "Multi-Color Demo 3 (Bob Colbert) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "ae2f1f69bb38355395c1c75c81acc644", "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (12-23-1983) (Parker Bros) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "ae2f1f69bb38355395c1c75c81acc644", "Parker Brothers, Wilfredo Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (12-23-1983) (Parker Bros) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "ae465044dfba287d344ba468820995d7", "", "", "Inca Gold (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ae4be3a36b285c1a1dff202157e2155d", "Spectravideo", "SA-210", "Master Builder (1983) (Spectravideo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ae682886058cd6981c4b8e93e7b019cf", "Retroactive", "", "Qb (V0.12) (PAL) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -2271,7 +2271,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "ae83541cf4a4c0bce0adccd2c1bf6288", "", "", "Maze 003 Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ae97cf8ed21f4154b4360a3cf6c95c5e", "", "", "Teleterm 2600 (John K. Harvey) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "aeb104f1e7b166bc0cbaca0a968fde51", "", "", "Ms. Pac-Man (1999) (Hack)", "Hack of Ms. Pac-Man", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "aec9b885d0e8b24e871925630884095c", "Amiga", "3125", "Surf's Up (1983) (Amiga) (Prototype)", "Uses the Amiga Joyboard", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "aec9b885d0e8b24e871925630884095c", "Amiga - Video Soft", "3125", "Surf's Up (1983) (Amiga) (Prototype)", "Uses the Joyboard controller", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "aed0b7bd64cc384f85fdea33e28daf3b", "Atari, Alan J. Murphy, Robert C. Polaro", "CX2666", "RealSports Volleyball (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "aed82052f7589df05a3f417bb4e45f0c", "Atari, Warren Robinett - Sears", "CX2606 - 6-99825, 49-75112", "Slot Racers (1978) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "af6ab88d3d7c7417db2b3b3c70b0da0a", "Activision, Larry Kaplan, David Crane", "AG-010, AG-010-04", "Kaboom! (1981) (Activision) (4K)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "01 50", "", "", "", "", "" }, @@ -2286,7 +2286,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "b00088418fc891f3faa3d4ddde6ace94", "", "", "Unknown Title (bin00007 (200102)) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b00a8bc9d7fe7080980a514005cbad13", "K-Tel Vision", "", "Vulture Attack (1982) (K-Tel Vision) (PAL)", "AKA Condor Attack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b00e8217633e870bf39d948662a52aac", "Konami", "RC 102-X 02", "Marine Wars (1983) (Konami)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "b049fc8ac50be7c2f28418817979c637", "Activision, David Lubar", "EAK-048-04, EAK-048-04B", "River Raid II (1988) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "b049fc8ac50be7c2f28418817979c637", "Activision - Imagineering, Dan Kitchen, David Lubar", "EAK-048-04, EAK-048-04B", "River Raid II (1988) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b06050f686c6b857d0df1b79fea47bb4", "Activision", "AIZ-001", "Moonsweeper (1988) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "b061e98a4c854a672aadefa233236e51", "Atari, Warren Robinett", "CX2620, CX2620P", "Basic Programming (1979) (Atari) (PAL)", "Uses Keypad Controllers", "Common", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "YES", "" }, { "b095009004df341386d22b2a3fae3c81", "", "", "Sub-Scan (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2318,7 +2318,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "b2a6f31636b699aeda900f07152bab6e", "", "", "Space Instigators (Public Release 2) (06-01-2003) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b2d1e63f7f22864096b7b6c154151d55", "Fabrizio Zavagli", "", "Bounce! (17-03-2003) (Fabrizio Zavagli)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "b2d3bcee001cff2bd2d8a21b2cb55109", "Atari - GCC, Mike Feinstein, Kevin Osborn", "CX2691", "Joust (08-09-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "b2d5d200f0af8485413fad957828582a", "Atari, Robert C. Polaro", "CX26155P", "Sprint Master (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "b2d5d200f0af8485413fad957828582a", "Atari - Bobco, Robert C. Polaro", "CX26155P", "Sprint Master (1988) (Atari) (PAL)", "AKA Sprint 88, Sprint 2000", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b2f0d7217147160b2f481954cedf814b", "", "", "Marquee Drawer (2001) (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "b3017e397f74efd53caf8fae0a38e3fe", "Retroactive", "", "Qb (2.12) (Retroactive) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "b311ab95e85bc0162308390728a7361d", "Parker Brothers - Roklan", "PB5080", "Gyruss (1984) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -2326,7 +2326,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "b31f178aa0d569cccac7959f84e0a724", "Atari, Jerome Domurat, Steve Woita", "CX2699", "Taz (07-13-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b3203e383b435f7e43f9492893c7469f", "Gameworld", "133-003", "Sssnake (1983) (Gameworld) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b36040a2f9ecafa73d835d804a572dbf", "Digitel", "", "Pac Man (1983) (Digitel)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "b37f0fe822b92ca8f5e330bf62d56ea9", "Xonox - K-Tel Software - Beck-Tech", "6210, 7210, 06003. 99001", "Spike's Peak (1983) (Xonox) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "b37f0fe822b92ca8f5e330bf62d56ea9", "Xonox - K-Tel Software - Beck-Tech, Steve Beck", "6210, 7210, 06003. 99001", "Spike's Peak (1983) (Xonox) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b392964e8b1c9c2bed12246f228011b2", "", "", "Name This Game (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b4030c38a720dd84b84178b6ce1fc749", "M Network - APh Technological Consulting, Kevin Miller", "MT5687", "International Soccer (1982) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b40dea357d41c5408546e4e4d5f27779", "Digivision", "", "Spider Fighter (Digivision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2338,7 +2338,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "b4a4c87840613f102acb5b3a647d0a67", "", "", "Mobile 48 Sprite Kernel (04-01-2003) (Eric Ball)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b4daedb43511521db9036d503b3c1b69", "", "", "Sokoban (01-01-2003) (Adam Wozniak) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b4e2fd27d3180f0f4eb1065afc0d7fc9", "Avalon Hill, Jean Baer, Bill 'Rebecca Ann' Heineman, William O. Sheppard", "5002002", "London Blitz (1983) (Avalon Hill)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "b4f05e544834d0238a0c263491775edf", "Arcadia Corporation, Steve Hales, Stephen Harland Landrum", "AR-4102", "Suicide Mission (Preview) (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "b4f05e544834d0238a0c263491775edf", "Starpath Corporation, Steve Hales, Stephen H. Landrum", "4 AR-4102", "Suicide Mission (Preview) (1982) (Starpath) (PAL)", "AKA Meteoroids", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "b4f31ea8a6cc9f1fd4d5585a87c3b487", "Mystique - American Multiple Industries, Joel H. Martin", "", "Beat 'Em & Eat 'Em (1982) (Mystique) (PAL)", "Uses the Paddle Controller (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 45", "", "", "", "", "" }, { "b4f87ce75f7329c18301a2505fe59cd3", "Videospielkassett - Ariola", "PGP232", "Autorennen (Ariola) (PAL)", "AKA Grand Prix", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b50ae55aac93fbed258bc5a873edd2cb", "Recompile", "", "E.T. The Extra-Terrestrial (Recompile) (Hack)", "www.neocomputer.org/projects/et", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2347,7 +2347,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "b5657d4c1c732fbb6af150668464247f", "Arcadia Corporation, Stephen H. Landrum", "AR-4400", "Excalibur (Dragonstomper Beta) (1982) (Arcadia) (Prototype)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b59417d083b0be2d49a7d93769880a4b", "Pet Boat", "", "Donkey Kong (1983) (Pet Boat) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b59fd465abf76f64c85652ff29d5952d", "VentureVision, Dan Oliver", "", "Innerspace (1983) (VentureVision) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "b5a1a189601a785bdb2f02a424080412", "Imagic, Dennis Koble", "720021-1A, IA3410", "Shootin' Gallery (1982) (Imagic)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "b5a1a189601a785bdb2f02a424080412", "Imagic, Dennis Koble", "720021-1A, IA3410", "Shootin' Gallery (1983) (Imagic)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b5cb9cf6e668ea3f4cc2be00ea70ec3c", "CommaVid, Irwin Gaines - Ariola", "CM-005 - 712 005-720", "Mines of Minos (1982) (CommaVid) (PAL)", "AKA Im Labyrinth des Roboters", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "b5cdbab514ea726a14383cff6db40e26", "Video Gems", "VG-04", "Mission Survive (1983) (Video Gems) (PAL) [a]", "", "", "", "", "", "A", "", "", "", "", "", "", "", "", "", "YES", "" }, { "b5efe0271d2214e4d5dc798881486884", "Atari - Axlon, Steve DeFrisco", "CX26192", "Klax (06-14-1990) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2392,7 +2392,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "b9d1e3be30b131324482345959aed5e5", "Activision, Rex Bradford", "", "Kabobber (07-25-1983) (Activision) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "b9f6fa399b8cd386c235983ec45e4355", "Parker Brothers, John Emerson", "931511", "Action Force (1983) (Parker Bros) (PAL)", "AKA G.I. Joe - Cobra Strike", "", "", "", "", "", "", "", "PADDLES", "", "", "01 55", "", "", "", "", "" }, { "b9f9c0fed0db08c34346317f3957a945", "SuperVision", "405, 427, 806, 808, 813, 816", "Chopper Command (SuperVision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "ba257438f8a78862a9e014d831143690", "U.S. Games Corporation, Henry Will IV", "VC2002", "Squeeze Box (1982) (U.S. Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "ba257438f8a78862a9e014d831143690", "U.S. Games Corporation - JWDA, Todd Marshall, Robin McDaniel, Henry Will IV", "VC2002", "Squeeze Box (1983) (U.S. Games)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ba317f83cdfcd58cbc65aac1ccb87bc5", "", "", "Jammed (2001) (XYPE) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ba3a17efd26db8b4f09c0cf7afdf84d1", "Activision, Larry Miller", "AX-021", "Spider Fighter (1983) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, { "ba3b0eebccc7b791107de5b4abb671b4", "", "", "Thrust (V0.9) (2000) (TJ)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2412,7 +2412,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "bbf8c7c9ed280151934aabe138e41ba7", "Amiga", "1130", "Power Play Arcade Video Game Album V (1984) (Amiga) (Prototype)", "Mogul Maniac, Surf's Up, Off Your Rocker, S.A.C. Alert", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bc3057a35319aae3a5cd87a203736abe", "CCE", "C-845", "Time Warp (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bc33c685e6ffced83abe7a43f30df7f9", "Dynacom", "", "Seaquest (1983) (Dynacom)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "bc4cf38a4bee45752dc466c98ed7ad09", "Atari, Douglas Neubauer", "CX26136", "Solaris (1986) (Atari) (PAL)", "AKA Universe, Star Raiders II, The Last Starfighter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "bc4cf38a4bee45752dc466c98ed7ad09", "Atari, Douglas Neubauer, Mimi Nyden", "CX26136", "Solaris (1986) (Atari) (PAL)", "AKA Universe, Star Raiders II, The Last Starfighter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bc526185ad324241782dc68ba5d0540b", "", "", "Dodge Demo 1 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bc5389839857612cfabeb810ba7effdc", "Atari, Tod Frye", "CX2671", "SwordQuest - WaterWorld (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bc6432cbed32c695658514c4eb41d905", "Manuel Polik", "", "Star Fire (MP) (2002) (PD)", "Won't work with Stella < V1.2", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2436,7 +2436,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "be1922bd8e09d74da471287e1e968653", "Cropsy", "", "Hangman Pacman Demo (Cropsy) (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "be2870a0120fd28d25284e9ccdcbdc99", "", "", "Tomb Raider 2600 [REV 01] (Montezuma's Revenge Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "be35d8b37bbc03848a5f020662a99909", "Atari, Joe Decuir, Steve Mayer, Larry Wagner - Sears", "CX2601 - 99801, 6-99801, 49-75124", "Combat (1977) (Atari) (4K) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "be3f0e827e2f748819dac2a22d6ac823", "Puzzy - Bit Corporation", "PG202", "Space Tunnel (1982) (Puzzy)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "215", "", "" }, + { "be3f0e827e2f748819dac2a22d6ac823", "Puzzy - Bit Corporation", "PG202", "Space Tunnel (1982) (Puzzy)", "AKA Cosmic Corridor, Le Tunnel de L'Estace", "", "", "", "", "", "", "", "", "", "", "", "", "34", "215", "", "" }, { "be41463cd918daef107d249f8cde3409", "", "", "Berzerk (Voice Enhanced) (Hack)", "Hack of Berzerk", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "be561b286b6432cac71bccbae68002f7", "", "", "Counter Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "be929419902e21bd7830a7a7d746195d", "Activision, Garry Kitchen", "AX-025, AX-025-04", "Keystone Kapers (1983) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2446,7 +2446,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "bf52327c2197d9d2c4544be053caded1", "HES", "AG-930-04, AZ-030", "Decathlon (HES) (PAL) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bf5e2079586cb307bf5eb2413e2e61af", "", "", "Star Fire - 1LK Intro (13-11-2002) (TJ)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bf84f528de44225dd733c0e6a8e400a0", "CCE", "", "Demons to Diamonds (CCE)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "YES", "10 57", "", "", "", "", "" }, - { "bf976cf80bcf52c5f164c1d45f2b316b", "Atari, Tod Frye", "CX2657", "SwordQuest - FireWorld (1982) (Atari) (PAL)", "AKA Adventure II, SwordQuest II - FireWorld", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "bf976cf80bcf52c5f164c1d45f2b316b", "Atari, Tod Frye, Mimi Nyden", "CX2657", "SwordQuest - FireWorld (1982) (Atari) (PAL)", "AKA Adventure II, SwordQuest II - FireWorld", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bf9ddc5dd9056633d4ac0dac8b871dfe", "", "", "Star Fire - Cockpit View (10-10-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bfa58198c6b9cd8062ee76a2b38e9b33", "", "", "20 Sprites at Once Demo 4 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "bfb73aabb2489316cd5882c3cd11d9f9", "AtariAge, Chris Walton & Thomas Jentzsch", "165", "Star Castle Arcade (2014) (AtariAge)", "", "Homebrew", "", "", "", "", "", "", "", "SAVEKEY", "", "", "", "30", "", "YES", "" }, @@ -2488,17 +2488,17 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "c2778507b83d9540e9be5713758ff945", "", "", "Island Flyer Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c28b29764c2338b0cf95537cc9aad8c9", "", "", "Multi-Color Demo 4 (Bob Colbert) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c29d17eef6b0784db4586c12cb5fd454", "Jone Yuan Telephonic Enterprise Co", "", "River Raid (Jone Yuan) (Hack)", "2600 Screen Search Console", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "c29f8db680990cb45ef7fef6ab57a2c2", "Parker Brothers, Paul Crowley", "PB5320", "Super Cobra (1982) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "c29f8db680990cb45ef7fef6ab57a2c2", "Parker Brothers, Mike Brodie - Roklan, Paul Crowley", "PB5320", "Super Cobra (1983) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c2a37f1c7603c5fd97df47d6c562abfa", "Roger Williams", "", "Bar-Score Demo (2001) (Roger Williams)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c2b5c50ccb59816867036d7cf730bf75", "Salu - Avantgarde Software, Michael Buetepage", "460741", "Ghostbusters II (1992) (Salu) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "c2bcd8f2378c3779067f3a551f662bb7", "Activision, Bob Whitehead - Ariola", "EAG-002, EAG-002-04I, PAG-002 - 711 002-715", "Boxing (1980) (Activision) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c2c7a11717e255593e54d0acaf653ee5", "", "", "Chopper Command (208 in 1) (Unknown) (PAL) (Hack)", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c2fbef02b6eea37d8df3e91107f89950", "Champ Games", "CG-02-N", "Conquest Of Mars (NTSC)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "c31a17942d162b80962cb1f7571cd1d5", "Home Vision - Gem International Corp.", "VCS83112", "Sky Alien (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "c31a17942d162b80962cb1f7571cd1d5", "Home Vision - Gem International Corp. - VDI", "VCS83112", "Sky Alien (1983) (Home Vision) (PAL)", "AKA Sky Aliem", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c3205e3707f646e1a106e09c5c49c1bf", "", "", "Unknown Title (bin00003 (200206)) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c3472fa98c3b452fa2fd37d1c219fb6f", "Atari, Carla Meninsky - Sears", "CX2637 - 49-75158", "Dodge 'Em (1980) (Atari) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c370c3268ad95b3266d6e36ff23d1f0c", "Atari, Alan Miller", "CX2641, CX2641P", "Surround (1977) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "c3a9550f6345f4c25b372c42dc865703", "Atari, Robert C. Polaro", "CX2663", "Road Runner (1989) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "c3a9550f6345f4c25b372c42dc865703", "Atari - Bobco, Robert C. Polaro", "CX2663", "Road Runner (1989) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c3aeb796fdaf9429e8cd6af6346f337e", "", "", "If It's Not One Thing It's Another (1997) (Chris Cracknell)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c3bbc673acf2701b5275e85d9372facf", "Atari, Robert C. Polaro", "CX26157", "Stunt Cycle (07-21-1980) (Atari) (Prototype)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c3e4aa718f46291311f1cce53e6ccd79", "", "", "Hangman Ghost 4letter (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2526,7 +2526,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "c529e63013698064149b9e0468afd941", "", "", "S.I.PLIX 2 (Hack)", "Hack of Kaboom!", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "01 50", "", "", "", "", "" }, { "c52d9bbdc5530e1ef8e8ba7be692b01e", "Atari, Robert C. Polaro", "CX26130", "Holey Moley (02-29-1984) (Atari) (Prototype)", "Uses Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "c5301f549d0722049bb0add6b10d1e09", "Atari, Carla Meninsky, Ed Riddle - Sears", "CX2611 - 99821, 49-75149", "Indy 500 (1977) (Atari)", "Uses the Driving Controllers", "", "", "", "", "", "", "", "DRIVING", "DRIVING", "", "45", "", "", "", "", "" }, - { "c5387fc1aa71f11d2fa82459e189a5f0", "Bit Corporation", "PG202", "Space Tunnel (1982) (BitCorp) (PAL)", "AKA Weltraum-Tunnel", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, + { "c5387fc1aa71f11d2fa82459e189a5f0", "Bit Corporation", "PG202", "Space Tunnel (1982) (BitCorp) (PAL)", "AKA Cosmic Corridor, Weltraum-Tunnel", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, { "c541a5f6fc23b40a211196dd78233780", "Atari, Carla Meninsky - Sears", "CX2660 - 49-75187", "Star Raiders (1981) (Atari) (Prototype)", "Uses Joystick (left) and Keypad (right) Controllers", "Prototype", "", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "" }, { "c54b4207ce1d4bf72fadbb1a805d4a39", "Billy Eno", "", "Sniper (Feb 30) (2001) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c569e57dca93d3bee115a49923057fd7", "", "", "Pac-Space (Pac-Man Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "33", "", "", "" }, @@ -2550,7 +2550,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "c6cedb25b7d390b580ea8edb614b168b", "", "", "Star Fire - Radar Completed (22-10-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c6d48c6ae6461e0e82753540a985ac9e", "Ed Federmeyer", "", "Edtris (1994) (Ed Federmeyer)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c6d7fe7a46dc46f962fe8413c6f53fc9", "Parker Brothers, Mark Lesser", "PB5950", "Lord of the Rings (1983) (Parker Bros) (Prototype) [a]", "Journey to Rivendell (The Lord of the Rings I)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "c6db733e0b108c2580a1d65211f06dbf", "Atari, Eric Manghise, Joseph Tung", "CX2640", "RealSports Baseball (07-09-1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "c6db733e0b108c2580a1d65211f06dbf", "Atari, Eric Manghise, Mimi Nyden, Joseph Tung", "CX2640", "RealSports Baseball (07-09-1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c738fc3f5aae1e8f86f7249f6c82ac81", "Atari, Brad Stewart - Sears", "CX2622 - 6-99813, 49-75107", "Breakout (1978) (Atari) (16K)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "01 60", "", "", "", "", "" }, { "c73ae5ba5a0a3f3ac77f0a9e14770e73", "Starpath Corporation, Stephen H. Landrum", "9 AR-4105", "Official Frogger, The (1983) (Starpath)", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, { "c745487828a1a6a743488ecebc55ad44", "Rainbow Vision - Suntek", "SS-002", "Galactic (Rainbow Vision) (PAL)", "AKA The Challenge of.... Nexar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2594,12 +2594,12 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "cb8399dc0d409ff1f531ef86b3b34953", "", "", "Demo Image Series #12 - Luigi And Mario (01-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cb9626517b440f099c0b6b27ca65142c", "Atari, Larry Kaplan - Sears", "CX2664 - 6-99818", "Brain Games (1978) (Atari) (4K)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "cb96b0cf90ab7777a2f6f05e8ad3f694", "Silvio Mogno", "", "Rainbow Invaders", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "cb9b2e9806a7fbab3d819cfe15f0f05a", "Parker Brothers, Ray Miller, Todd Marshall", "931513", "Star Wars - Death Star Battle (1983) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "cb9b2e9806a7fbab3d819cfe15f0f05a", "Parker Brothers - JWDA, Todd Marshall, Robin McDaniel, Ray Miller", "931513", "Star Wars - Death Star Battle (1983) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cba56e939252b05df7b7de87307d12ca", "", "", "Playfield Text Demo (2001) (Roger Williams)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cbad928e10aeee848786cc55394fb692", "", "", "Fu Kung! (V0.06a Cuttle Cart Compatible) (15-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cbb0ee17c1308148823cc6da85bff25c", "", "", "Rotating Colors Demo 1 (Junkosoft) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cbc373fbcb1653b4c56bfabba33ea50d", "CCE", "", "Super Voleyball (CCE)", "AKA RealSports Volleyball", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "cbced209dd0575a27212d3eee6aee3bc", "Apollo - Games by Apollo, Ed Salvo, Byron Parks", "AP-2003", "Racquetball (1981) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "cbced209dd0575a27212d3eee6aee3bc", "Apollo - Games by Apollo, Ed Salvo, Byron Parks", "AP-2003", "Racquetball (1982) (Apollo) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "cbd981a23c592fb9ab979223bb368cd5", "Atari, Carla Meninsky - Sears", "CX2660 - 49-75187", "Star Raiders (1982) (Atari)", "Uses Joystick (left) and Keypad (right) Controllers", "", "", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "" }, { "cbe5a166550a8129a5e6d374901dffad", "Atari, Carla Meninsky - Sears", "CX2610 - 49-75127", "Warlords (1981) (Atari)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "AUTO 50", "", "", "", "", "" }, { "cbeafd37f15e0dddb0540dbe15c545a4", "", "", "Black and White Fast Scolling Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2630,7 +2630,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "cd5af682685cfecbc25a983e16b9d833", "Atari, Jerome Domurat, Howard Scott Warshaw", "CX26133", "A-Team, The (05-08-1984) (Atari) (Prototype)", "AKA Saboteur", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cd88ef1736497288c4533bcca339f881", "Sega - Teldec", "005-10", "Buck Rogers - Planet of Zoom (1983) (Sega) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "PAL", "", "", "YES", "" }, { "cd8fa2e9f6255ef3d3b9b5a4f24a54f7", "", "", "Daredevil (V2) (Stunt_Cycle_Rules!) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "220", "", "" }, - { "cd98be8a48ebf610c9609a688b9c57f2", "Arcadia Corporation, Steve Hales, Stephen Harland Landrum", "4 AR-4102", "Suicide Mission (1982) (Arcadia) (Prototype)", "AKA Meteoroids", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "cd98be8a48ebf610c9609a688b9c57f2", "Arcadia Corporation, Steve Hales, Stephen H. Landrum", "4 AR-4102", "Suicide Mission (1982) (Arcadia) (Prototype)", "AKA Meteoroids", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "cd9fea12051e414a6dfe17052067da8e", "Paul Slocum", "", "Marble Craze Demo (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, { "cda38714267978b9a8b0b24bee3529ae", "", "", "Space Instigators (V1.6) (17-10-2002) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cdb81bf33d830ee4ee0606ee99e84dba", "Arcadia Corporation, Scott Nelson", "AR-4300", "Fireball (1982) (Arcadia) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "01", "", "", "", "", "" }, @@ -2639,7 +2639,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "ce17325834bf8b0a0d0d8de08478d436", "", "", "Boring Freeway (Hack)", "Hack of Freeway", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ce243747bf34a2de366f846b3f4ca772", "Home Vision - Gem International Corp. - VDI", "", "Jacky Jump (1983) (Home Vision) (PAL)", "AKA Bobby Is Going Home", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, { "ce4bbe11d682c15a490ae15a4a8716cf", "", "", "Okie Dokie (Older) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "ce5cc62608be2cd3ed8abd844efb8919", "Atari, Robert C. Polaro", "CX2663", "Road Runner (1989) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "ce5cc62608be2cd3ed8abd844efb8919", "Atari - Bobco, Robert C. Polaro", "CX2663", "Road Runner (1989) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ce64812eb83c95723b04fb56d816910b", "Retroactive", "", "Qb (V2.04) (NTSC) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "ce6c4270f605ad3ce5e82678b0fc71f8", "", "", "Vertical Rainbow Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ce82a675c773ff21e0ffc0a4d1c90a71", "", "", "Defender 2 (Genesis)", "Genesis controller (C is smartbomb)", "Hack of Defender 2", "", "", "", "", "", "", "GENESIS", "", "", "", "", "", "", "", "" }, @@ -2690,7 +2690,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "d0b9f705aa5f61f47a748a66009ae2d2", "", "", "Synthcart (14-01-2002) (Paul Slocum)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "YES", "" }, { "d0cb28e1b7bd6c7f683a0917b59f707e", "Atari, Gary Palmer", "CX2661P", "Fun with Numbers (1980) (Atari) (PAL) (4K)", "AKA Basic Math", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d0cdafcb000b9ae04ac465f17788ad11", "Quelle - Otto Versand", "732.273 8 - 600273, 781644", "Lilly Adventure (1983) (Quelle) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "d0e15a3ce322c5af60f07343594392af", "Amiga", "3125", "Surf's Up (1983) (Amiga) (Prototype) (4K)", "Uses the Joyboard controller", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "d0e15a3ce322c5af60f07343594392af", "Amiga - Video Soft", "3125", "Surf's Up (1983) (Amiga) (Prototype) (4K)", "Uses the Joyboard controller", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d0e9beb2347595c6c7d158e9d83d2da8", "Retroactive", "", "Qb (2.00) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "d100b11be34a1e5b7832b1b53f711497", "", "", "Robotfindskitten2600 (26-04-2003) (Jeremy Penner) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d170317ae4c7d997a989c7d6567c2840", "Jone Yuan Telephonic Enterprise Co", "", "Stampede (Jone Yuan) (4K) (Hack)", "2600 Screen Search Console", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2716,7 +2716,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "d2deddb77c8b823e4be9c57cb3c69adc", "Canal 3 - Intellivision", "C 3007", "Snoopy and the Red Baron (Canal 3)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d2f713c78a9ebba9da6d10aeefc6f20f", "Digivision", "", "Enduro (Digivision) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d3171407c3a8bb401a3a62eb578f48fb", "ZiMAG - Emag - Vidco", "GN-080", "Spinning Fireball (1983) (ZiMAG) (Prototype) [a]", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "d326db524d93fa2897ab69c42d6fb698", "Parker Brothers, Paul Crowley", "931505", "Super Cobra (1982) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "d326db524d93fa2897ab69c42d6fb698", "Parker Brothers, Mike Brodie - Roklan, Paul Crowley", "931505", "Super Cobra (1983) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d339b95f273f8c3550dc4daa67a4aa94", "", "", "Laser Blast (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d341d39774277cee6a1d378a013f92ac", "Xonox, John Perkins", "6230, 7210, 06004, 99004", "Artillery Duel (1983) (Xonox) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "20", "", "", "" }, { "d3423d7600879174c038f53e5ebbf9d3", "U.S. Games Corporation - Western Technologies", "VC2005", "Piece o' Cake (1983) (U.S. Games)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 60", "", "", "", "", "" }, @@ -2725,7 +2725,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "d36308387241e98f813646f346e7f9f7", "King Atari", "", "Ghostbuster 2 (King Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "d39e29b03af3c28641084dd1528aae05", "Funvision - Fund. Int'l Co.", "", "Spider Monster (1982) (Funvision) (PAL)", "AKA Spider Kong", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d3bb42228a6cd452c111c1932503cc03", "UA Limited", "", "Funky Fish (1983) (UA Limited) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "220", "YES", "" }, - { "d44d90e7c389165f5034b5844077777f", "Parker Brothers, Larry Gelberg, Gary Goltz", "PB5065", "Star Wars - Ewok Adventure (1983) (Parker Bros) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "d44d90e7c389165f5034b5844077777f", "Parker Brothers, Larry Gelberg", "PB5065", "Star Wars - Ewok Adventure (1983) (Parker Bros) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, { "d45bf71871b196022829aa3b96bfcfd4", "Activision, Steve Cartwright", "AX-017, AX-017-04", "MegaMania (1982) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d45ebf130ed9070ea8ebd56176e48a38", "Sega", "001-01", "Tac-Scan (1982) (Sega)", "Uses the Paddle Controllers (right only)", "", "", "", "", "", "", "YES", "PADDLES", "", "YES", "AUTO 60", "", "", "215", "YES", "" }, { "d47387658ed450db77c3f189b969cc00", "PlayAround - J.H.M.", "206", "Westward Ho (1982) (PlayAround) (PAL)", "AKA Custer's Revenge", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2765,7 +2765,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "d6d5dd8fd322d3cf874e651e7b6c1657", "", "", "How to Draw a Playfield (1997) (Nick Bensema) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d6dc9b4508da407e2437bfa4de53d1b2", "Bomb - Onbase", "CA283", "Z-Tack (1983) (Bomb) (PAL)", "AKA Base Attack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d726621c676552afa503b7942af5afa2", "Atari, Bob Whitehead", "CX26163P", "Blackjack (32 in 1) (1988) (Atari) (PAL) (4K)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "", "", "63", "", "", "" }, - { "d73ad614f1c2357997c88f37e75b18fe", "Puzzy - Bit Corporation", "PG202", "Space Tunnel (1982) (Puzzy) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "d73ad614f1c2357997c88f37e75b18fe", "Goliath", "7", "Space Tunnel (1983) (Goliath) (PAL)", "AKA Cosmic Corridor", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d74a81fcd89c5cf0bd4c88eb207ebd62", "", "", "Poker Squares (V0.00a) (2001) (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d763e3a9cdcdd56c715ec826106fab6a", "Activision, David Crane", "AG-001", "Dragster (1980) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "27", "", "", "" }, { "d7759fa91902edd93f1568a37dc70cdb", "Atari, Robert C. Polaro", "CX26157", "Stunt Cycle (1980) (Atari) (Prototype) (4K)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2791,7 +2791,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "d8e4c8e2d210270cd1e0f6d1b4582b91", "Imagic, Mark Klein", "EIZ-003-04I", "Subterranea (1983) (Imagic) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d90205e29bb73a4cdf28ea7662ba0c3c", "Thomas Jentzsch", "", "Boulderdash Demo (Brighter Version) (09-12-2002) (TJ)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "d912312349d90e9d41a9db0d5cd3db70", "CCE", "C-818", "Star Voyager (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "d9548ad44e67edec202d1b8b325e5adf", "Apollo - Games by Apollo, Dan Oliver - RCA Video Jeux", "AP-2002", "Space Cavern (1981) (Apollo) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "d9548ad44e67edec202d1b8b325e5adf", "Apollo - Games by Apollo, Dan Oliver - RCA Video Jeux", "AP-2002", "Space Cavern (1982) (Apollo) (PAL)", "AKA Les guerriers de l'espace", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d97e3d0b4575ce0b9a6132e19cfeac6e", "Fabrizio Zavagli", "", "Space Treat (061002) (PD)", "Won't work with Stella < V1.2", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d97fd5e6e1daacd909559a71f189f14b", "M Network, Steve Crandall, Patricia Lewis Du Long", "MT4646", "Rocky & Bullwinkle (04-20-1983) (M Network) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d9ab6b67a17da51e5ad13717e93fa2e2", "", "", "Turbo (Coleco) Prototype Fake v0.1 (TJ)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2843,13 +2843,13 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "dcc2956c7a39fdbf1e861fc5c595da0d", "M Network - APh Technological Consulting, David Rolfe - INTV", "MT5664", "Frogs and Flies (1982) (M Network)", "AKA Frogs 'n' Flies", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dcec46a98f45b193f07239611eb878c2", "", "", "Bars and Text Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dd08e18cfee87a0e7fc19a684b36e124", "Atari - GCC, Kevin Osborn", "CX2689, CX2689P", "Kangaroo (1983) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "dd0cbe5351551a538414fb9e37fc56e8", "Xonox - K-Tel Software, Anthony R. Henderson", "99006, 6220", "Sir Lancelot (1983) (Xonox) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "dd0cbe5351551a538414fb9e37fc56e8", "Xonox - K-Tel Software - Product Guild, Anthony R. Henderson", "99006, 6220", "Sir Lancelot (1983) (Xonox) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dd0de0f61af2a2a4878e377b880a3933", "SOLID Corp. (D. Scott Williamson)", "CX2655-013", "Star Castle 2600 (SolidCorp) [013]", "http://starcastle2600.blogspot.com/p/star-castle-2600-story.html", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "dd10b5ee37fdbf909423f2998a1f3179", "", "", "Space Instigators (V1.9) (21-10-2002) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dd1422ffd538e2e33b339ebeef4f259d", "Atari, Tod Frye", "", "Red Vs. Blue (1981) (Atari) (Prototype)", "RealSports Football Beta", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dd17711a30ad60109c8beace0d4a76e8", "", "", "Karate (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "20", "", "", "" }, { "dd4f4e0fbd81762533e39e6f5b55bb3a", "", "", "Turbo WIP (TJ)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "dd7598b8bcb81590428900f71b720efb", "Xonox - K-Tel Software", "99005, 6220, 6250", "Robin Hood (1983) (Xonox) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, + { "dd7598b8bcb81590428900f71b720efb", "Xonox - K-Tel Software - Computer Magic", "99005, 6220, 6250", "Robin Hood (1983) (Xonox) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, { "dd7884b4f93cab423ac471aa1935e3df", "Atari, Brad Stewart - Sears", "CX2649, 49-75163", "Asteroids (1981) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "dd8a2124d4eda200df715c698a6ea887", "Starpath Corporation, Stephen H. Landrum", "AR-4400", "Dragonstomper (3 of 3) (1982) (Starpath)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dd92d6ad50976f881d86b52d38616118", "SpkSoft", "", "River Raid (SpkSoft) [h1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2873,13 +2873,13 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "dea0ade296f7093e71185e802b500db8", "CCE", "", "Fishing Derby (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "deb39482e77f984d4ce73be9fd8adabd", "Activision, David Lubar", "AK-048-04", "River Raid II (1988) (Activision) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ded26e1cb17f875a9c17515c900f9933", "", "", "Space Treat (29-12-2002) (Fabrizio Zavagli)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "df12953b919844dad2070ed2e70c9fa2", "Amiga", "3135", "S.A.C. Alert (1983) (Amiga) (Prototype) (PAL)", "Uses Joyboard", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "df2745d585238780101df812d00b49f4", "Bit Corporation", "PG202", "Space Tunnel (1982) (BitCorp)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "222", "", "" }, + { "df12953b919844dad2070ed2e70c9fa2", "Amiga - Video Soft", "3135", "S.A.C. Alert (1983) (Amiga) (Prototype) (PAL)", "Uses Joyboard", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "df2745d585238780101df812d00b49f4", "Bit Corporation", "PG202", "Space Tunnel (1982) (BitCorp)", "AKA Cosmic Corridor, Weltraum-Tunnel", "", "", "", "", "", "", "", "", "", "", "", "", "", "222", "", "" }, { "df3e6a9b6927cf59b7afb626f6fd7eea", "", "", "Tuby Bird (208 in 1) (Unknown) (PAL)", "AKA Dolphin", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "df40af244a8d68b492bfba9e97dea4d6", "Franklin Cruz", "", "Asteroids 2 (Franlin Cruz) (Hack)", "Hack of Asteroids", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "df5cc5cccdc140eb7107f5b8adfacda1", "Cracker Jack Productions", "", "Lumberman (Cracker Jack) (Hack)", "Hack of Pac-Man", "Hack", "", "", "", "", "", "", "", "", "", "", "", "33", "", "", "" }, { "df62a658496ac98a3aa4a6ee5719c251", "Atari, Tom Reuterdahl - Sears", "CX2626 - 6-99829, 49-75116", "Miniature Golf (1979) (Atari)", "AKA Arcade Golf", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "df6a28a89600affe36d94394ef597214", "Apollo - Games by Apollo, Dan Oliver", "AP-2002", "Space Cavern (1981) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "df6a28a89600affe36d94394ef597214", "Apollo - Games by Apollo, Dan Oliver", "AP-2002", "Space Cavern (1982) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "df6a46714960a3e39b57b3c3983801b5", "Puzzy - Bit Corporation", "PG201", "Sea Monster (1982) (Puzzy) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "df753cb87d3af4d03f694ab848638108", "CBS Electronics, Bob Curtiss", "4L1845, 4L1852, 4L1853, 4L1854", "Solar Fox (1983) (CBS Electronics) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "df95e4af466c809619299f49ece92365", "Atari - CCW, Michael Callahan, Preston Stuart", "CX26103", "Alpha Beam with Ernie (06-03-1983) (Atari) (Prototype) (PAL)", "Uses Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, @@ -2895,7 +2895,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e020f612255e266a8a6a9795a4df0c0f", "Telegames", "7062 A305", "Universal Chaos (1988) (Telegames) (PAL)", "AKA Targ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e02156294393818ff872d4314fc2f38e", "Sancho - Tang's Electronic Co.", "TEC005", "Dice Puzzle (1983) (Sancho) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "e0221c95aa657f5764eeeb64c8429258", "", "", "Tomb Raider 2600 [REV 02] (Montezuma's Revenge Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e03b0b091bea5bc9d3f14ee0221e714d", "CBS Electronics, Bob Curtiss", "4L1845, 4L1852, 4L1853, 4L1854, 4L1855", "Solar Fox (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "e03b0b091bea5bc9d3f14ee0221e714d", "CBS Electronics, Bob Curtiss", "4L1852, 4L1853, 4L1854, 4L1855", "Solar Fox (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e040df95a055b18ebdb094e904cb71b2", "", "", "Score Demo (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e04f1c1e4401d584d3f4343410a5bcc4", "Wizard Video Games - MicroGraphic Image, Robert Barber, Tim Martin", "007", "Halloween (1983) (Wizard Video Games) (Prototype) [a]", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e0b24c3f40a46cda52e29835ab7ad660", "Quelle", "626.502 9 - 746381", "Top Gun (1983) (Quelle) (PAL)", "AKA Air Raiders", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2929,7 +2929,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e2389c0be5b5b84e0d3ca36ec7e67514", "Retroactive", "", "Qb (V2.09) (NTSC) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "e24d7d879281ffec0641e9c3f52e505a", "Parker Brothers, Mark Lesser", "PB5950", "Lord of the Rings (1983) (Parker Bros) (Prototype)", "Journey to Rivendell (The Lord of the Rings I)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e25e173740f7ecc0e23025445c4591f3", "Greg Zumwalt", "", "Comitoid (Greg Zumwalt)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e275cbe7d4e11e62c3bfcfb38fca3d49", "M Network, Ken Smith - INTV", "MT5658", "Super Challenge Football (1982) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "e275cbe7d4e11e62c3bfcfb38fca3d49", "M Network - APh Technological Consulting, Ken Smith - INTV", "MT5658", "Super Challenge Football (1982) (M Network)", "AKA Pro Football", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e28113d10c0c14cc3b5f430b0d142fcb", "CCE", "C-816", "Keystone Kappers (1983) (CCE) [a]", "AKA Keystone Kapers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e2846af3e4d172b251ab77cbdd01761e", "Steve Engelhardt", "", "Adventure Plus (2003) (Steve Engelhardt) (Hack)", "Hack of Adventure", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e2904748da63dfefc8816652b924b642", "Jone Yuan Telephonic Enterprise Co", "", "Catch Time (Jone Yuan)", "AKA Plaque Attack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2961,7 +2961,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e4bff1d5df70163c0428a1ead309c22d", "Atari, Robert C. Polaro, Alan J. Murphy", "CX2609, CX2609P", "Defender (1982) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e4c00beb17fdc5881757855f2838c816", "20th Century Fox Video Games - Sirius, Ed Hodapp", "11004", "Deadly Duck (1982) (20th Century Fox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e4c2077a18e3c27f4819aa7757903aa0", "", "", "Many Blue Bars Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e4c666ca0c36928b95b13d33474dbb44", "Arcadia Corporation, Steve Hales, Stephen Harland Landrum", "AR-4102", "Suicide Mission (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "e4c666ca0c36928b95b13d33474dbb44", "Arcadia Corporation, Steve Hales, Stephen H. Landrum", "4 AR-4102", "Suicide Mission (1982) (Arcadia)", "AKA Meteoroids", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "e4d41f2d59a56a9d917038682b8e0b8c", "Cody Pittman", "", "Kiss Meets Pacman (Cody Pittman) (Hack)", "Hack of Pac-Man", "Hack", "", "", "", "", "", "", "", "", "", "", "", "33", "", "", "" }, { "e4e9125a8741977583776729359614e1", "SnailSoft", "", "Comitoid beta 4 (SnailSoft)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e505bd8e59e31aaed20718d47b15c61b", "Funvision - Fund. Int'l Co.", "", "Space War (1982) (Funvision) (PAL)", "AKA Condor Attack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2992,11 +2992,11 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e6508b878145187b87b9cded097293e7", "", "", "Oystron (V2.8) (Piero Cavina) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e66e5af5dea661d58420088368e4ef0d", "Activision, Bob Whitehead", "AG-011", "Stampede (1981) (Activision) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e6d5948f451a24994dfaaca51dfdb4e1", "Jone Yuan Telephonic Enterprise Co", "", "Football (Jone Yuan) (4K)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e6de4ef9ab62e2196962aa6b0dedac59", "Imagic, Wilfredo 'Willy' Aguilar, Michael Becker, Dennis Koble", "720113-2A, 13206", "Solar Storm (1983) (Imagic) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "01 45", "", "", "", "", "" }, + { "e6de4ef9ab62e2196962aa6b0dedac59", "Imagic, Wilfredo Aguilar, Michael Becker, Dennis Koble", "720113-2A, 13206", "Solar Storm (1983) (Imagic) (PAL)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "01 45", "", "", "", "", "" }, { "e6e5bb0e4f4350da573023256268313d", "Thomas Jentzsch", "", "Missile Control (Thomas Jentzsch)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e6f49a1053c79211f82be4d90dc9fe3d", "", "", "Gunfight 2600 - Little progress... (2001) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e723ad8f406cb258b89681ef4cef0eff", "Thomas Jentzsch", "", "Sadoom (TJ) (PAL) (Hack)", "Hack of Kaboom!", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "01 50", "", "", "", "", "" }, - { "e72eb8d4410152bdcb69e7fba327b420", "Atari, Douglas Neubauer", "CX26136", "Solaris (1986) (Atari)", "AKA Universe, Star Raiders II, The Last Starfighter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "e72eb8d4410152bdcb69e7fba327b420", "Atari, Douglas Neubauer, Mimi Nyden", "CX26136", "Solaris (1986) (Atari)", "AKA Universe, Star Raiders II, The Last Starfighter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e72ee2d6e501f07ec5e8a0efbe520bee", "Imagic, Dave Johnson", "720119-2A, 13211, EIX-004-04I", "Quick Step! (1983) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e73838c43040bcbc83e4204a3e72eef4", "CCE", "", "Apples and Dolls (CCE)", "AKA I Want My Mommy", "", "", "", "", "", "", "", "", "", "", "", "", "", "215", "YES", "" }, { "e74022cfe31ec8908844718dfbdedf7a", "", "", "Space Treat (30-12-2002) (Fabrizio Zavagli) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3012,7 +3012,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e823b13751e4388f1f2a375d3560a8d7", "Arcadia Corporation, Stephen Harland Landrum", "AR-4105", "Official Frogger (Preview) (1983) (Arcadia) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "32", "", "", "" }, { "e879b7093ac4cfad74c88d636ca97d00", "", "", "Poker Squares (V0.0f) (2001) (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e88340f5bd2f03e2e9ce5ecfa9c644f5", "", "", "Lock 'n' Chase (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e8a3473bf786cf796d1336d2d03a0008", "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "", "Star Wars - The Arcade Game (12-05-1983) (Parker Bros) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "e8a3473bf786cf796d1336d2d03a0008", "Parker Brothers, Wilfredo Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (12-05-1983) (Parker Bros) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "e8aa36e3d49e9bfa654c25dcc19c74e6", "Atari, Joe Decuir, Larry Caplan, Steve Mayer, Larry Wagner", "CX2601, CX2601P", "Combat (1977) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "260", "", "" }, { "e8e7b9bdf4bf04930c2bcaa0278ee637", "", "", "Boring Taz (Hack)", "Hack of Taz", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e8f7679359c4f532f5d5e93af7d8a985", "", "", "Hangman Invader Original Words (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3049,11 +3049,11 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "eb4252faff7a4f2ba5284a98b8f78d1a", "", "", "John K Harvey's Equalizer (NTSC) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "eb46e99ec15858f8cd8c91cef384ce09", "Goliath - Hot Shot", "83-113", "Ground Zero (1983) (Goliath) (PAL)", "AKA River Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "eb503cc64c3560cd78b7051188b7ba56", "Star Game", "043", "Moto Laser (Star Game)", "AKA Mega Force", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "eb634650c3912132092b7aee540bbce3", "Atari, Eric Manghise, Joseph Tung", "CX2640", "RealSports Baseball (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "eb634650c3912132092b7aee540bbce3", "Atari, Eric Manghise, Mimi Nyden, Joseph Tung", "CX2640", "RealSports Baseball (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "eb6d6e22a16f30687ade526d7a6f05c5", "Atari", "CX26150P", "Q-bert (1987) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "eb71743c6c7ccce5b108fad70a326ad9", "", "", "Euchre (25-11-2001) (Erik Eid) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "eb7934360658a29c50aeaff20bfda23b", "Activision, John Van Ryzin", "EAZ-036-04", "H.E.R.O. (1984) (Activision) (SECAM)", "", "", "", "", "", "", "", "", "", "", "", "", "SECAM", "", "", "", "" }, - { "eb92193f06b645df0b2a15d077ce435f", "Arcadia Corporation, Steve Hales, Stephen Harland Landrum", "AR-4102", "Suicide Mission (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "eb92193f06b645df0b2a15d077ce435f", "Starpath Corporation, Steve Hales, Stephen H. Landrum", "4 AR-4102", "Suicide Mission (1982) (Starpath) (PAL)", "AKA Meteoroids", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "eb9712e423b57f0b07ccd315bb9abf61", "Retroactive", "", "Qb (V2.04) (PAL) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "eb9f8b84c193d9d93a58fca112aa39ed", "", "", "Register Twiddler Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ebcb084a91d41865b2c1915779001ca7", "JVP", "", "Bob Is Going Home (JVP)", "AKA Bobby Is Going Home", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3064,7 +3064,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "ec26fdc87b1d35f1d60ea89cda4f4dd4", "", "", "Star Fire - Crash Scene (04-11-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ec3beb6d8b5689e867bafb5d5f507491", "U.S. Games Corporation, Henry Will IV - Vidtec", "VC1003", "Word Zapper (1982) (U.S. Games)", "AKA Word Grabber", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ec407a206b718a0a9f69b03e920a0185", "Quelle", "876.482 1", "Landung in der Normandie (1983) (Quelle) (PAL)", "AKA Commando Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "ec5c861b487a5075876ab01155e74c6c", "Apollo - Games by Apollo, Ed Salvo, Byron Parks", "AP-2001", "Spacechase (1981) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "ec5c861b487a5075876ab01155e74c6c", "Apollo - Games by Apollo, Ed Salvo, Byron Parks", "AP-2001", "Spacechase (1982) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ece463abde92e8b89bcd867ec71751b8", "Puzzy - Bit Corporation", "PG205", "Dancing Plate (1982) (Puzzy) (PAL)", "AKA Dishaster", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "ece908d77ab944f7bac84322b9973549", "", "", "Tom Boy (Unknown) (PAL60)", "AKA Pitfall!", "", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "", "" }, { "ecf51385384b468834611d44a8429c03", "20th Century Fox Video Games, Douglas 'Dallas North' Neubauer", "11105", "Mega Force (1982) (20th Century Fox) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3167,7 +3167,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f39e4bc99845edd8621b0f3c7b8c4fd9", "AtariAge", "", "Toyshop Trouble (AtariAge)", "F8 Emulator Release", "", "", "", "", "", "", "", "", "PADDLES", "", "", "", "32", "", "", "" }, { "f3c431930e035a457fe370ed4d230659", "", "", "Crackpots (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f3cd0f886201d1376f3abab2df53b1b9", "Commavid, Ben Burch", "CM-010", "Rush Hour (1983) (Commavid) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "f3dfae774f3bd005a026e29894db40d3", "Quelle", "649635", "See Saw (Double-Game Package) (1983) (Quelle) (PAL)", "AKA Circus Atari", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "f3dfae774f3bd005a026e29894db40d3", "Otto Versand", "649635", "See Saw (Double-Game Package) (1983) (Otto Versand) (PAL)", "AKA Circus Atari", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f3f5f72bfdd67f3d0e45d097e11b8091", "Sears Tele-Games, Marilyn Churchill, Matthew L. Hubbard", "CX2647 - 49-75142", "Submarine Commander (1982) (Sears)", "AKA Seawolf 3", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f3f92aad3a335f0a1ead24a0214ff446", "", "", "Spectrum Color Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f4204fc92d17ed4cb567c40361ad58f1", "Inky", "", "Beanie Baby Bash (Inky) (Hack)", "Hack of Beany Bopper", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3179,7 +3179,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f48735115ec302ba8bb2d2f3a442e814", "", "", "Dishaster (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "f49a34f1fdd7dc147cbf96ce2ce71b76", "", "", "Qb (Special Edition) (PAL) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "f4ab6bd5f80d8988141edde4c84b23b5", "Atari, Alan Miller", "CX2624, CX2624P", "Basketball (1978) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "f4b8a47a95b61895e671c3ec86ffd461", "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (01-03-1984) (Parker Bros) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "f4b8a47a95b61895e671c3ec86ffd461", "Parker Brothers, Wilfredo Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (01-03-1984) (Parker Bros) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "f4c2e50b01dff99bddbe037b3489511c", "", "", "Hypnotic (V0.04) (2001) (Inkling) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f4c6621f1a0b4d27081123c08d7d1497", "CCE", "C-838", "Immies & Aggies (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f4cf6881b65c424095dc25dc987f151f", "", "", "128 in 1 Game Select ROM (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3233,7 +3233,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f80cf77164079d774b9b0fae33dffca9", "", "", "Fu Kung! (V0.15) (Negative Version) (05-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f8240e62d8c0a64a61e19388414e3104", "Activision, Steve Cartwright", "AX-013", "Barnstorming (1982) (Activision)", "", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f825c538481f9a7a46d1e9bc06200aaf", "Atari, Richard Maurer - Sears", "CX2635 - 49-75157", "Maze Craze (1980) (Atari)", "AKA A Game of Cops 'n Robbers", "", "", "", "", "", "", "", "", "", "", "", "NTSC", "", "", "", "" }, - { "f844f4c6f3baaaf5322657442d6f29eb", "Atari, Richard Dobbis, Nick 'Sandy Maiwald' Turner", "CX26111", "Snoopy and the Red Baron (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "f844f4c6f3baaaf5322657442d6f29eb", "Atari, Sam Comstock, Richard Dobbis, Nick 'Sandy Maiwald' Turner", "CX26111", "Snoopy and the Red Baron (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f847fb8dba6c6d66d13724dbe5d95c4d", "Absolute Entertainment, David Crane", "AG-042-02, AG-042-04", "Skate Boardin' (1987) (Absolute)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f8582bc6ca7046adb8e18164e8cecdbc", "", "", "Panda Chase (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, { "f8648d0c6ad1266434f6c485ff69ec40", "CCE", "", "Oink! (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3257,7 +3257,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f992a39b46aa48188fab12ad3809ae4a", "", "", "Sky Jinks (Unknown) (PAL) (Hack)", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f9967369943209b4788d4e92cefc0795", "Atari", "CX26163P", "Fishing (32 in 1) (1988) (Atari) (PAL) (4K)", "AKA Fishing Derby", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f9cef637ea8e905a10e324e582dd39c2", "CCE", "", "Private Eye (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "f9d51a4e5f8b48f68770c89ffd495ed1", "Atari, Tod Frye", "CX2657", "SwordQuest - FireWorld (1982) (Atari)", "AKA Adventure II, SwordQuest II - FireWorld", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "f9d51a4e5f8b48f68770c89ffd495ed1", "Atari, Tod Frye, Mimi Nyden", "CX2657", "SwordQuest - FireWorld (1982) (Atari)", "AKA Adventure II, SwordQuest II - FireWorld", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f9da42f91a1c5cfa344d2ff440c6f8d4", "ZUT", "", "Pac Invaders (ZUT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f9de91d868d6ebfb0076af9063d7195e", "", "", "Maze Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f9e99596345a84358bc5d1fbe877134b", "Activision, Larry Kaplan, David Crane - Ariola", "EAG-010, PAG-010 - 711 010-720", "Kaboom! (1981) (Activision) (PAL)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "01 50", "", "", "", "", "" }, @@ -3315,7 +3315,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "fd4f5536fd80f35c64d365df85873418", "Atari - Bobco, Robert C. Polaro", "CX26140", "Desert Falcon (1987) (Atari)", "AKA Nile Flyer, Sphinx", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fd6e507b5df68beeeddeaf696b6828fa", "", "", "Boxing (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fd7464edaa8cc264b97ba0d13e7f0678", "HES", "771-333", "2 Pak Special - Challenge, Surfing (1990) (HES) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "fd78f186bdff83fbad7f97cb583812fe", "Amiga", "3125", "Surf's Up (1983) (Amiga) (Prototype) [a2]", "Uses the Joyboard controller", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "fd78f186bdff83fbad7f97cb583812fe", "Amiga - Video Soft", "3125", "Surf's Up (1983) (Amiga) (Prototype) [a2]", "Uses the Joyboard controller", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fd8b4ee0d57605b35e236e814f706ff1", "Atari - GCC, Mike Feinstein, John Mracek", "CX2673, CX2673P", "Phoenix (1982) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fd9b321cee5fbb32c39ba3ca5d9ec7cf", "Jeffry Johnston", "", "Radial Pong - Version 5 (Jeffry Johnston) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fdd4995a50395db14f518f63c2d63438", "", "", "Oh No! (Version 3) (18-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, diff --git a/src/emucore/stella.pro b/src/emucore/stella.pro index 3599480ba..12ea0d7c8 100644 --- a/src/emucore/stella.pro +++ b/src/emucore/stella.pro @@ -90,7 +90,7 @@ "" "Cartridge.MD5" "01297d9b450455dd716db9658efb2fae" -"Cartridge.Manufacturer" "TechnoVision" +"Cartridge.Manufacturer" "TechnoVision - Video Technology" "Cartridge.ModelNo" "TVS1002" "Cartridge.Name" "Save Our Ship (1983) (TechnoVision) (PAL)" "Display.YStart" "45" @@ -544,7 +544,7 @@ "" "Cartridge.MD5" "0751f342ee4cf28f2c9a6e8467c901be" -"Cartridge.Manufacturer" "Atari, Joseph Tung" +"Cartridge.Manufacturer" "Atari, Mimi Nyden, Joseph Tung" "Cartridge.ModelNo" "CX26152" "Cartridge.Name" "Super Baseball (1988) (Atari) (PAL)" "" @@ -941,7 +941,8 @@ "Cartridge.MD5" "0b8d3002d8f744a753ba434a4d39249a" "Cartridge.Manufacturer" "Sears Tele-Games, Robert Zdybel" "Cartridge.ModelNo" "CX2619 - 49-75159" -"Cartridge.Name" "Stellar Track (1980) (Sears)" +"Cartridge.Name" "Stellar Track (1981) (Sears)" +"Cartridge.Note" "AKA Stella Trak" "Display.Phosphor" "YES" "" @@ -978,7 +979,7 @@ "" "Cartridge.MD5" "0c48e820301251fbb6bcdc89bd3555d9" -"Cartridge.Manufacturer" "Atari, Andrew Fuchs" +"Cartridge.Manufacturer" "Atari, Bill Aspromonte, Andrew Fuchs" "Cartridge.ModelNo" "CX26120" "Cartridge.Name" "Stargate (1984) (Atari)" "" @@ -1215,7 +1216,7 @@ "" "Cartridge.MD5" "0f39fc03d579d0d93a6b729a3746843e" -"Cartridge.Manufacturer" "Atari, Richard Dobbis, Nick 'Sandy Maiwald' Turner" +"Cartridge.Manufacturer" "Atari, Sam Comstock, Richard Dobbis, Nick 'Sandy Maiwald' Turner" "Cartridge.ModelNo" "CX26111" "Cartridge.Name" "Snoopy and the Red Baron (05-27-1983) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -1505,9 +1506,9 @@ "" "Cartridge.MD5" "133456269a03e3fdae6cddd65754c50d" -"Cartridge.Manufacturer" "Tigervision - Teldec" +"Cartridge.Manufacturer" "Tigervision - Software Electronics Corporation - Teldec" "Cartridge.ModelNo" "7-006 - 3.60008 VG" -"Cartridge.Name" "Springer (1982) (Tigervision) (PAL)" +"Cartridge.Name" "Springer (1983) (Tigervision) (PAL)" "" "Cartridge.MD5" "133a4234512e8c4e9e8c5651469d4a09" @@ -1762,7 +1763,7 @@ "" "Cartridge.MD5" "15c11ab6e4502b2010b18366133fc322" -"Cartridge.Manufacturer" "Atari - Axlon, Tod Frye" +"Cartridge.Manufacturer" "Atari - Axlon, Tod Frye - Heuristica, Augustin Ortiz" "Cartridge.ModelNo" "CX26169" "Cartridge.Name" "Shooting Arcade (09-19-1989) (Atari) (Prototype)" "Cartridge.Note" "Uses the Light Gun Controller (left only)" @@ -1910,7 +1911,7 @@ "" "Cartridge.MD5" "17badbb3f54d1fc01ee68726882f26a6" -"Cartridge.Manufacturer" "M Network, Hal Finney, Bruce Pedersen - INTV" +"Cartridge.Manufacturer" "M Network - APh Technological Consulting, Hal Finney, Bruce Pedersen - INTV" "Cartridge.ModelNo" "MT5659" "Cartridge.Name" "Space Attack (1982) (M Network)" "" @@ -2176,7 +2177,7 @@ "" "Cartridge.MD5" "1bc2427ac9b032a52fe527c7b26ce22c" -"Cartridge.Manufacturer" "Intellivision Productions - M Network, Bruce Pedersen, Larry Zwick" +"Cartridge.Manufacturer" "Intellivision Productions - M Network - APh Technological Consulting, Bruce Pedersen, Larry Zwick" "Cartridge.ModelNo" "MT5860" "Cartridge.Name" "Sea Battle (1983) (M Network)" "Cartridge.Note" "High Seas" @@ -2317,9 +2318,10 @@ "" "Cartridge.MD5" "1e1290ea102e12d7ac52820961457e2b" -"Cartridge.Manufacturer" "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart" +"Cartridge.Manufacturer" "Parker Brothers, Wilfredo Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart" "Cartridge.ModelNo" "PB5540" "Cartridge.Name" "Star Wars - The Arcade Game (12-15-1983) (Parker Bros) (Prototype)" +"Cartridge.Rarity" "Prototype" "Display.Phosphor" "YES" "" @@ -2551,7 +2553,7 @@ "" "Cartridge.MD5" "20d4457ba22517253fcb62967af11b37" -"Cartridge.Manufacturer" "Atari, Eric Manghise, Joseph Tung" +"Cartridge.Manufacturer" "Atari, Eric Manghise, Mimi Nyden, Joseph Tung" "Cartridge.ModelNo" "CX2640" "Cartridge.Name" "RealSports Baseball (1982) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -2870,7 +2872,7 @@ "Cartridge.MD5" "24d018c4a6de7e5bd19a36f2b879b335" "Cartridge.Manufacturer" "Activision, Larry Miller" "Cartridge.ModelNo" "AX-021" -"Cartridge.Name" "Spider Fighter (1982) (Activision)" +"Cartridge.Name" "Spider Fighter (1983) (Activision)" "" "Cartridge.MD5" "24d9a55d8f0633e886a1b33ee1e0e797" @@ -3907,7 +3909,7 @@ "" "Cartridge.MD5" "3105967f7222cc36a5ac6e5f6e89a0b4" -"Cartridge.Manufacturer" "Sega, Jeff Lorenz - Bally Midway" +"Cartridge.Manufacturer" "Sega, Jeff Lorenz" "Cartridge.ModelNo" "011-01, 011-02" "Cartridge.Name" "Spy Hunter (1984) (Sega)" "Cartridge.Note" "Uses Joystick Coupler (Dual Control Module)" @@ -3930,7 +3932,7 @@ "" "Cartridge.MD5" "3177cc5c04c1a4080a927dfa4099482b" -"Cartridge.Manufacturer" "Atari" +"Cartridge.Manufacturer" "Atari - Imagineering, Alex DeMeo" "Cartridge.ModelNo" "CX26135" "Cartridge.Name" "RealSports Boxing (1987) (Atari)" "" @@ -4031,7 +4033,7 @@ "" "Cartridge.MD5" "322b29e84455aa41e7cc9af463bffa89" -"Cartridge.Manufacturer" "Atari, Robert C. Polaro" +"Cartridge.Manufacturer" "Atari - Bobco, Robert C. Polaro" "Cartridge.ModelNo" "CX2663" "Cartridge.Name" "Road Runner (06-25-1984) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -4927,9 +4929,9 @@ "" "Cartridge.MD5" "3d1e83afdb4265fa2fb84819c9cfd39c" -"Cartridge.Manufacturer" "Coleco, Henry Will IV" +"Cartridge.Manufacturer" "Coleco - JWDA, Todd Marshall, Robin McDaniel, Henry Will IV" "Cartridge.ModelNo" "2465" -"Cartridge.Name" "Smurf - Rescue in Gargamel's Castle (1982) (Coleco)" +"Cartridge.Name" "Smurf - Rescue in Gargamel's Castle (1983) (Coleco)" "Cartridge.Note" "AKA Smurf, Smurf Action" "" @@ -5555,7 +5557,7 @@ "" "Cartridge.MD5" "45040679d72b101189c298a864a5b5ba" -"Cartridge.Manufacturer" "20th Century Fox Video Games, David Lubar" +"Cartridge.Manufacturer" "20th Century Fox Video Games - Sirius Software, David Lubar" "Cartridge.ModelNo" "11022" "Cartridge.Name" "SpaceMaster X-7 (1983) (20th Century Fox)" "" @@ -5584,7 +5586,7 @@ "" "Cartridge.MD5" "457e7d4fcd56ebc47f5925dbea3ee427" -"Cartridge.Manufacturer" "Carrere Video, Garry Kitchen - Teldec" +"Cartridge.Manufacturer" "Carrere Video - JWDA, Garry Kitchen - Teldec - Prism" "Cartridge.ModelNo" "USC1001" "Cartridge.Name" "Space Jockey (1983) (Carrere Video) (PAL)" "" @@ -5645,9 +5647,10 @@ "" "Cartridge.MD5" "463dd4770506e6c0ef993a40c52c47be" -"Cartridge.Manufacturer" "Arcadia Corporation, Steve Hales, Stephen Harland Landrum" -"Cartridge.ModelNo" "AR-4102" +"Cartridge.Manufacturer" "Arcadia Corporation, Steve Hales, Stephen H. Landrum" +"Cartridge.ModelNo" "4 AR-4102" "Cartridge.Name" "Suicide Mission (Preview) (1982) (Arcadia)" +"Cartridge.Note" "AKA Meteoroids" "Display.Phosphor" "YES" "" @@ -5875,7 +5878,7 @@ "Cartridge.MD5" "4904a2550759b9b4570e886374f9d092" "Cartridge.Manufacturer" "Parker Brothers, Charlie Heath" "Cartridge.ModelNo" "931506" -"Cartridge.Name" "Reactor (1982) (Parker Bros) (PAL)" +"Cartridge.Name" "Reactor (1983) (Parker Bros) (PAL)" "Display.Phosphor" "YES" "" @@ -6008,7 +6011,7 @@ "" "Cartridge.MD5" "4abb4c87a4c5f5d0c14ead2bb36251be" -"Cartridge.Manufacturer" "Atari" +"Cartridge.Manufacturer" "Atari - Imagineering, Alex DeMeo" "Cartridge.ModelNo" "CX26135, CX26135P" "Cartridge.Name" "RealSports Boxing (1987) (Atari) (PAL)" "" @@ -6159,7 +6162,7 @@ "" "Cartridge.MD5" "4c8970f6c294a0a54c9c45e5e8445f93" -"Cartridge.Manufacturer" "Xonox - K-Tel Software, Anthony R. Henderson" +"Cartridge.Manufacturer" "Xonox - K-Tel Software - Product Guild, Anthony R. Henderson" "Cartridge.ModelNo" "99006, 6220" "Cartridge.Name" "Sir Lancelot (1983) (Xonox)" "" @@ -6196,9 +6199,9 @@ "" "Cartridge.MD5" "4cd796b5911ed3f1062e805a3df33d98" -"Cartridge.Manufacturer" "Tigervision" +"Cartridge.Manufacturer" "Tigervision - Software Electronics Corporation - Teldec" "Cartridge.ModelNo" "7-006" -"Cartridge.Name" "Springer (1982) (Tigervision)" +"Cartridge.Name" "Springer (1983) (Tigervision)" "Display.Height" "220" "" @@ -6387,13 +6390,15 @@ "Cartridge.MD5" "4f64d6d0694d9b7a1ed7b0cb0b83e759" "Cartridge.Manufacturer" "20th Century Fox Video Games, John Russell" "Cartridge.ModelNo" "11016" -"Cartridge.Name" "Revenge of the Beefsteak Tomatoes (1982) (20th Century Fox)" +"Cartridge.Name" "Revenge of the Beefsteak Tomatoes (1983) (20th Century Fox)" +"Cartridge.Note" "AKA Revenge of the Cherry Tomatoes" "" "Cartridge.MD5" "4f6702c3ba6e0ee2e2868d054b00c064" -"Cartridge.Manufacturer" "Activision, Steve 'Jessica' Kitchen - Ariola" +"Cartridge.Manufacturer" "Activision - Woodside Design Associates, Steve 'Jessica Stevens' Kitchen - Ariola" "Cartridge.ModelNo" "EAZ-033 - 711 033-725" "Cartridge.Name" "Space Shuttle (1983) (Activision) (PAL)" +"Cartridge.Note" "A Journey Into Space, Eine Reise ins All" "" "Cartridge.MD5" "4f781f0476493c50dc578336f1132a67" @@ -6407,7 +6412,7 @@ "Cartridge.MD5" "4f7b07ec2bef5ccffe06403a142f80db" "Cartridge.Manufacturer" "Apollo - Games by Apollo, Ed Salvo, Byron Parks" "Cartridge.ModelNo" "AP-2003" -"Cartridge.Name" "Racquetball (1981) (Apollo) (PAL)" +"Cartridge.Name" "Racquetball (1982) (Apollo) (PAL)" "Display.Phosphor" "YES" "" @@ -6650,9 +6655,9 @@ "" "Cartridge.MD5" "528400fad9a77fd5ad7fc5fdc2b7d69d" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum, Jon Leupp" -"Cartridge.ModelNo" "AR-4201" -"Cartridge.Name" "Sword of Saros (1983) (Arcadia)" +"Cartridge.Manufacturer" "Starpath Corporation, Stephen H. Landrum, Jon Leupp" +"Cartridge.ModelNo" "11 AR-4201" +"Cartridge.Name" "Sword of Saros (1983) (Starpath)" "" "Cartridge.MD5" "52a0003efb3b1c49fcde4dbc2c685d8f" @@ -6694,7 +6699,7 @@ "" "Cartridge.MD5" "5336f86f6b982cc925532f2e80aa1e17" -"Cartridge.Manufacturer" "Parker Brothers, Ray Miller, Todd Marshall" +"Cartridge.Manufacturer" "Parker Brothers - JWDA, Todd Marshall, Robin McDaniel, Ray Miller" "Cartridge.ModelNo" "PB5060" "Cartridge.Name" "Star Wars - Death Star Battle (1983) (Parker Bros)" "Display.Phosphor" "YES" @@ -6865,7 +6870,7 @@ "" "Cartridge.MD5" "557e893616648c37a27aab5a47acbf10" -"Cartridge.Manufacturer" "Atari - Axlon, Tod Frye" +"Cartridge.Manufacturer" "Atari - Axlon, Tod Frye - Heuristica, Augustin Ortiz" "Cartridge.ModelNo" "CX26169" "Cartridge.Name" "Shooting Arcade (01-16-1990) (Atari) (Prototype) (PAL)" "Cartridge.Note" "Uses the Light Gun Controller (left only)" @@ -6957,7 +6962,7 @@ "" "Cartridge.MD5" "57939b326df86b74ca6404f64f89fce9" -"Cartridge.Manufacturer" "Atari, Richard Dobbis, Nick 'Sandy Maiwald' Turner" +"Cartridge.Manufacturer" "Atari, Sam Comstock, Richard Dobbis, Nick 'Sandy Maiwald' Turner" "Cartridge.ModelNo" "CX26111" "Cartridge.Name" "Snoopy and the Red Baron (1983) (Atari)" "" @@ -7023,9 +7028,10 @@ "" "Cartridge.MD5" "5894c9c0c1e7e29f3ab86c6d3f673361" -"Cartridge.Manufacturer" "Activision, Steve 'Jessica' Kitchen" +"Cartridge.Manufacturer" "Activision - Woodside Design Associates, Steve 'Jessica Stevens' Kitchen" "Cartridge.ModelNo" "AZ-033, AZ-033-04" "Cartridge.Name" "Space Shuttle (1983) (Activision)" +"Cartridge.Note" "A Journey Into Space" "" "Cartridge.MD5" "589c73bbcd77db798cb92a992b4c06c3" @@ -7193,9 +7199,10 @@ "" "Cartridge.MD5" "5a8afe5422abbfb0a342fb15afd7415f" -"Cartridge.Manufacturer" "Atari, Robert C. Polaro" +"Cartridge.Manufacturer" "Atari - Bobco, Robert C. Polaro" "Cartridge.ModelNo" "CX26155" "Cartridge.Name" "Sprint Master (1988) (Atari)" +"Cartridge.Note" "AKA Sprint 88, Sprint 2000" "" "Cartridge.MD5" "5a93265095146458df2baf2162014889" @@ -7228,7 +7235,7 @@ "" "Cartridge.MD5" "5aea9974b975a6a844e6df10d2b861c4" -"Cartridge.Manufacturer" "Atari, Dan Hitchens" +"Cartridge.Manufacturer" "Atari, Dan Hitchens. Mimi Nyden" "Cartridge.ModelNo" "CX2656" "Cartridge.Name" "SwordQuest - EarthWorld (1982) (Atari)" "Cartridge.Note" "AKA Adventure I, SwordQuest I - EarthWorld" @@ -7237,7 +7244,7 @@ "Cartridge.MD5" "5af9cd346266a1f2515e1fbc86f5186a" "Cartridge.Manufacturer" "Sega" "Cartridge.ModelNo" "002-01" -"Cartridge.Name" "Sub-Scan (1982) (Sega)" +"Cartridge.Name" "Sub-Scan (1983) (Sega)" "Cartridge.Note" "AKA Subterfuge" "" @@ -7418,9 +7425,10 @@ "" "Cartridge.MD5" "5d25df9dc2cde746ceac48e834cf84a7" -"Cartridge.Manufacturer" "Activision, Steve 'Jessica' Kitchen" +"Cartridge.Manufacturer" "Activision - Woodside Design Associates, Steve 'Jessica Stevens' Kitchen" "Cartridge.ModelNo" "EAZ-033" "Cartridge.Name" "Space Shuttle (1983) (Activision) (SECAM)" +"Cartridge.Note" "A Journey Into Space" "Cartridge.Type" "FE" "Display.Format" "SECAM" "" @@ -7507,7 +7515,7 @@ "" "Cartridge.MD5" "5e1b4629426f4992cf3b2905a696e1a7" -"Cartridge.Manufacturer" "Activision, Robert C. Polaro" +"Cartridge.Manufacturer" "Activision - Bobco, Robert C. Polaro" "Cartridge.ModelNo" "AK-049-04" "Cartridge.Name" "Rampage! (1989) (Activision)" "" @@ -7915,7 +7923,7 @@ "" "Cartridge.MD5" "6339d28c9a7f92054e70029eb0375837" -"Cartridge.Manufacturer" "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart" +"Cartridge.Manufacturer" "Parker Brothers, Wilfredo Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart" "Cartridge.ModelNo" "PB5540" "Cartridge.Name" "Star Wars - The Arcade Game (1984) (Parker Bros)" "Display.Phosphor" "YES" @@ -7993,7 +8001,7 @@ "Cartridge.MD5" "63e42d576800086488679490a833e097" "Cartridge.Manufacturer" "Telesys, Jim Rupp" "Cartridge.ModelNo" "1004" -"Cartridge.Name" "Ram It (1982) (Telesys) (PAL)" +"Cartridge.Name" "Ram It (1983) (Telesys) (PAL)" "" "Cartridge.MD5" "63e783994df824caf289b69a084cbf3e" @@ -8031,13 +8039,13 @@ "" "Cartridge.MD5" "645bf7f9146f0e4811ff9c7898f5cd93" -"Cartridge.Manufacturer" "Xonox - K-Tel Software" +"Cartridge.Manufacturer" "Xonox - K-Tel Software - VSS, Robert Weatherby" "Cartridge.ModelNo" "6230, 6250" "Cartridge.Name" "Super Kung-Fu (1983) (Xonox) (PAL)" "" "Cartridge.MD5" "6468d744be9984f2a39ca9285443a2b2" -"Cartridge.Manufacturer" "Atari" +"Cartridge.Manufacturer" "Atari, Ed Logg, Carol Shaw" "Cartridge.ModelNo" "CX26163P" "Cartridge.Name" "Reversi (32 in 1) (1988) (Atari) (PAL)" "Cartridge.Note" "AKA Othello" @@ -8193,9 +8201,10 @@ "" "Cartridge.MD5" "6651e2791d38edc02c5a5fd7b47a1627" -"Cartridge.Manufacturer" "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart" +"Cartridge.Manufacturer" "Parker Brothers, Wilfredo Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart" "Cartridge.ModelNo" "PB5540" "Cartridge.Name" "Star Wars - The Arcade Game (04-05-1984) (Parker Bros) (Prototype) (8K)" +"Cartridge.Rarity" "Prototype" "Display.Phosphor" "YES" "" @@ -8829,7 +8838,7 @@ "" "Cartridge.MD5" "6cf054cd23a02e09298d2c6f787eb21d" -"Cartridge.Manufacturer" "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart" +"Cartridge.Manufacturer" "Parker Brothers, Wilfredo Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart" "Cartridge.ModelNo" "PB5540" "Cartridge.Name" "Star Wars - The Arcade Game (1984) (Parker Bros) (PAL)" "Display.Phosphor" "YES" @@ -8880,7 +8889,7 @@ "" "Cartridge.MD5" "6dfad2dd2c7c16ac0fa257b6ce0be2f0" -"Cartridge.Manufacturer" "Parker Brothers, Larry Gelberg, Gary Goltz" +"Cartridge.Manufacturer" "Parker Brothers, Larry Gelberg" "Cartridge.ModelNo" "PB5065" "Cartridge.Name" "Star Wars - Ewok Adventure (1983) (Parker Bros) (Prototype) (PAL)" "Cartridge.Rarity" "Prototype" @@ -8952,7 +8961,7 @@ "" "Cartridge.MD5" "6f2aaffaaf53d23a28bf6677b86ac0e3" -"Cartridge.Manufacturer" "U.S. Games Corporation, Garry Kitchen - Vidtec" +"Cartridge.Manufacturer" "U.S. Games Corporation - Vidtec - JWDA, Garry Kitchen" "Cartridge.ModelNo" "VC1001" "Cartridge.Name" "Space Jockey (1982) (U.S. Games)" "" @@ -9073,7 +9082,7 @@ "Cartridge.MD5" "7096a198531d3f16a99d518ac0d7519a" "Cartridge.Manufacturer" "Telesys, Jim Rupp" "Cartridge.ModelNo" "1004" -"Cartridge.Name" "Ram It (1982) (Telesys)" +"Cartridge.Name" "Ram It (1983) (Telesys)" "" "Cartridge.MD5" "709910c2e83361bc4bf8cd0c20c34fbf" @@ -9123,7 +9132,7 @@ "" "Cartridge.MD5" "715dbf2e39ba8a52c5fe5cdd927b37e0" -"Cartridge.Manufacturer" "Amiga" +"Cartridge.Manufacturer" "Amiga - Video Soft" "Cartridge.ModelNo" "3135" "Cartridge.Name" "S.A.C. Alert (1983) (Amiga) (Prototype)" "Cartridge.Note" "Uses Joyboard" @@ -9230,9 +9239,10 @@ "" "Cartridge.MD5" "72a46e0c21f825518b7261c267ab886e" -"Cartridge.Manufacturer" "Xonox - K-Tel Software" +"Cartridge.Manufacturer" "Xonox - K-Tel Software - Computer Magic" "Cartridge.ModelNo" "99005, 6220, 6250" "Cartridge.Name" "Robin Hood (1983) (Xonox)" +"Display.YStart" "31" "Display.Height" "220" "" @@ -9304,9 +9314,10 @@ "" "Cartridge.MD5" "73c545db2afd5783d37c46004e4024c2" -"Cartridge.Manufacturer" "CBS Electronics, Henry Will IV" +"Cartridge.Manufacturer" "CBS Electronics - JWDA, Todd Marshall, Robin McDaniel, Henry Will IV" "Cartridge.ModelNo" "4L1767, 4L1768, 4L1769, 4L1770" -"Cartridge.Name" "Smurf (1982) (CBS Electronics) (PAL)" +"Cartridge.Name" "Smurf - Schtroumpfs (1983) (CBS Electronics) (PAL)" +"Cartridge.Note" "Pitufo" "" "Cartridge.MD5" "73c839aff6a055643044d2ce16b3aaf7" @@ -9417,7 +9428,7 @@ "Cartridge.MD5" "75028162bfc4cc8e74b04e320f9e6a3f" "Cartridge.Manufacturer" "Atari, Greg Easter, Mimi Nyden" "Cartridge.ModelNo" "CX26107" -"Cartridge.Name" "Snow White and the Seven Dwarfs (02-09-1983) (Atari) (Prototype)" +"Cartridge.Name" "Snow White (02-09-1983) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" "" @@ -9526,7 +9537,7 @@ "Cartridge.MD5" "75ee371ccfc4f43e7d9b8f24e1266b55" "Cartridge.Manufacturer" "Atari, Greg Easter, Mimi Nyden" "Cartridge.ModelNo" "CX26107" -"Cartridge.Name" "Snow White and the Seven Dwarfs (11-09-1982) (Atari) (Prototype)" +"Cartridge.Name" "Snow White (11-09-1982) (Atari) (Prototype)" "Cartridge.Note" "ROM must be started in bank 0" "Cartridge.Rarity" "Prototype" "" @@ -9901,7 +9912,7 @@ "" "Cartridge.MD5" "7adbcf78399b19596671edbffc3d34aa" -"Cartridge.Manufacturer" "Atari, Joseph Tung" +"Cartridge.Manufacturer" "Atari, Mimi Nyden, Joseph Tung" "Cartridge.ModelNo" "CX26152" "Cartridge.Name" "Super Baseball (1988) (Atari)" "" @@ -10347,6 +10358,8 @@ "Cartridge.Manufacturer" "CCE" "Cartridge.ModelNo" "C-807" "Cartridge.Name" "Space Tunnel (1983) (CCE)" +"Cartridge.Note" "AKA Cosmic Corridor, O Tunel Espacial" +"Display.YStart" "32" "Display.Height" "215" "" @@ -10845,7 +10858,7 @@ "" "Cartridge.MD5" "85e564dae5687e431955056fbda10978" -"Cartridge.Manufacturer" "Milton Bradley Company" +"Cartridge.Manufacturer" "Milton Bradley Company - Renaissance Technology, Ty Roberts" "Cartridge.ModelNo" "4362" "Cartridge.Name" "Survival Run (1983) (Milton Bradley)" "Cartridge.Note" "AKA Cosmic Commander" @@ -10871,9 +10884,10 @@ "" "Cartridge.MD5" "8654d7f0fb351960016e06646f639b02" -"Cartridge.Manufacturer" "Home Vision - Gem International Corp. - R.J.P.G." +"Cartridge.Manufacturer" "Home Vision, R.J.P.G. - Gem International Corp. - VDI" "Cartridge.ModelNo" "VCS83106" "Cartridge.Name" "Ski Hunt (1983) (Home Vision) (PAL)" +"Cartridge.Note" "AKA Skiiing Hunt" "" "Cartridge.MD5" "866e5150c995c4ae5172e5207ba948c7" @@ -10956,7 +10970,7 @@ "Cartridge.MD5" "8786f229b974c393222874f73a9f3206" "Cartridge.Manufacturer" "Activision, Larry Miller - Ariola" "Cartridge.ModelNo" "EAX-021, EAX-021-04I - 711 021-720" -"Cartridge.Name" "Spider Fighter (1982) (Activision) (PAL)" +"Cartridge.Name" "Spider Fighter (1983) (Activision) (PAL)" "" "Cartridge.MD5" "8786f4609a66fbea2cd9aa48ca7aa11c" @@ -11109,7 +11123,7 @@ "" "Cartridge.MD5" "898143773824663efe88d0a3a0bb1ba4" -"Cartridge.Manufacturer" "Activision, Steve 'Jessica' Kitchen" +"Cartridge.Manufacturer" "Activision - Woodside Design Associates, Steve 'Jessica Stevens' Kitchen" "Cartridge.ModelNo" "AZ-033, AZ-033-04" "Cartridge.Name" "Space Shuttle (1983) (Activision) [FE]" "Cartridge.Note" "A Journey Into Space" @@ -11144,9 +11158,9 @@ "" "Cartridge.MD5" "89eaba47a59cbfd26e74aad32f553cd7" -"Cartridge.Manufacturer" "Apollo - Games by Apollo, Ed Salvo, Bryson Park" +"Cartridge.Manufacturer" "Apollo - Games by Apollo, Ed Salvo, Byron Parks" "Cartridge.ModelNo" "AP-2001" -"Cartridge.Name" "Spacechase (1981) (Apollo) (PAL)" +"Cartridge.Name" "Spacechase (1982) (Apollo) (PAL)" "" "Cartridge.MD5" "8a159ee58b2f0a54805162984b0f07e5" @@ -11156,7 +11170,7 @@ "" "Cartridge.MD5" "8a183b6357987db5170c5cf9f4a113e5" -"Cartridge.Manufacturer" "Atari, Joe Gaucher" +"Cartridge.Manufacturer" "Atari - Roklan, Joe Gaucher" "Cartridge.ModelNo" "CX2679" "Cartridge.Name" "RealSports Basketball (1983) (Atari) (Prototype) (PAL)" "Cartridge.Rarity" "Prototype" @@ -11254,9 +11268,9 @@ "" "Cartridge.MD5" "8b7ca29a55432f886cee3d452fb00481" -"Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum, Jon Leupp" -"Cartridge.ModelNo" "AR-4201" -"Cartridge.Name" "Sword of Saros (1983) (Arcadia) (PAL)" +"Cartridge.Manufacturer" "Starpath Corporation, Stephen H. Landrum, Jon Leupp" +"Cartridge.ModelNo" "11 AR-4201" +"Cartridge.Name" "Sword of Saros (1983) (Starpath) (PAL)" "" "Cartridge.MD5" "8b8152d6081f31365406cb716bd95567" @@ -11400,9 +11414,9 @@ "" "Cartridge.MD5" "8da51e0c4b6b46f7619425119c7d018e" -"Cartridge.Manufacturer" "Atari, David Lubar" +"Cartridge.Manufacturer" "Atari - Imagineering, David Lubar" "Cartridge.ModelNo" "CX26183" -"Cartridge.Name" "Sentinel (1990) (Atari)" +"Cartridge.Name" "Sentinel (1991) (Atari)" "Cartridge.Note" "Uses the Light Gun Controller (left only)" "" @@ -11745,9 +11759,9 @@ "" "Cartridge.MD5" "92a1a605b7ad56d863a56373a866761b" -"Cartridge.Manufacturer" "U.S. Games Corporation, Dave Hampton" +"Cartridge.Manufacturer" "U.S. Games Corporation - Western Technologies, Dave Hampton" "Cartridge.ModelNo" "VC2006" -"Cartridge.Name" "Raft Rider (1982) (U.S. Games)" +"Cartridge.Name" "Raft Rider (1983) (U.S. Games)" "" "Cartridge.MD5" "92c5abb7a8bb1c3fc66c92ba353a3d21" @@ -12087,7 +12101,7 @@ "" "Cartridge.MD5" "97842fe847e8eb71263d6f92f7e122bd" -"Cartridge.Manufacturer" "Imagic, Wilfredo 'Willy' Aguilar, Michael Becker, Dennis Koble" +"Cartridge.Manufacturer" "Imagic, Wilfredo Aguilar, Michael Becker, Dennis Koble" "Cartridge.ModelNo" "720113-1A, 03206" "Cartridge.Name" "Solar Storm (1983) (Imagic)" "Cartridge.Note" "Uses the Paddle Controllers" @@ -12446,9 +12460,10 @@ "" "Cartridge.MD5" "9d37a1be4a6e898026414b8fee2fc826" -"Cartridge.Manufacturer" "M Network, David Rolfe - INTV" +"Cartridge.Manufacturer" "M Network - APh Technological Consulting, David Rolfe - INTV" "Cartridge.ModelNo" "MT5665" "Cartridge.Name" "Super Challenge Baseball (1982) (M Network)" +"Cartridge.Note" "AKA Big League Baseball" "" "Cartridge.MD5" "9d4bc7c6fe9a7c8c4aa24a237c340adb" @@ -12611,7 +12626,7 @@ "Cartridge.MD5" "9f8fad4badcd7be61bbd2bcaeef3c58f" "Cartridge.Manufacturer" "Parker Brothers, Charlie Heath" "Cartridge.ModelNo" "PB5330" -"Cartridge.Name" "Reactor (1982) (Parker Bros)" +"Cartridge.Name" "Reactor (1983) (Parker Bros)" "Display.Phosphor" "YES" "" @@ -12727,7 +12742,7 @@ "" "Cartridge.MD5" "a11099b6ec24e4b00b8795744fb12005" -"Cartridge.Manufacturer" "Activision, Robert C. Polaro" +"Cartridge.Manufacturer" "Activision - Bobco, Robert C. Polaro" "Cartridge.ModelNo" "EAK-049-04B" "Cartridge.Name" "Rampage! (1989) (Activision) (PAL)" "" @@ -12817,15 +12832,15 @@ "Cartridge.MD5" "a20d931a8fddcd6f6116ed21ff5c4832" "Cartridge.Manufacturer" "Apollo - Games by Apollo, Ed Salvo, Byron Parks" "Cartridge.ModelNo" "AP-2003" -"Cartridge.Name" "Racquetball (1981) (Apollo) [a]" +"Cartridge.Name" "Racquetball (1982) (Apollo)" "Display.Phosphor" "YES" "" "Cartridge.MD5" "a2170318a8ef4b50a1b1d38567c220d6" -"Cartridge.Manufacturer" "Amiga" +"Cartridge.Manufacturer" "Amiga - Video Soft" "Cartridge.ModelNo" "3125" "Cartridge.Name" "Surf's Up (1983) (Amiga) (Prototype) [a1]" -"Cartridge.Note" "Uses the Amiga Joyboard" +"Cartridge.Note" "Uses the Joyboard controller" "Cartridge.Rarity" "Prototype" "" @@ -12934,7 +12949,7 @@ "Cartridge.MD5" "a3c1c70024d7aabb41381adbfb6d3b25" "Cartridge.Manufacturer" "Telesys, Alex Leavens" "Cartridge.ModelNo" "1005" -"Cartridge.Name" "Stargunner (1982) (Telesys)" +"Cartridge.Name" "Stargunner (1983) (Telesys)" "" "Cartridge.MD5" "a3d7c299fbcd7b637898ee0fdcfc47fc" @@ -13057,9 +13072,10 @@ "" "Cartridge.MD5" "a4e885726af9d97b12bb5a36792eab63" -"Cartridge.Manufacturer" "Xonox - K-Tel Software - Beck-Tech" +"Cartridge.Manufacturer" "Xonox - K-Tel Software - Beck-Tech, Steve Beck" "Cartridge.ModelNo" "6210, 7210, 06003. 99001" "Cartridge.Name" "Spike's Peak (1983) (Xonox)" +"Display.YStart" "28" "Display.Height" "223" "" @@ -13282,7 +13298,7 @@ "" "Cartridge.MD5" "a875f0a919129b4f1b5103ddd200d2fe" -"Cartridge.Manufacturer" "Atari, Dan Hitchens" +"Cartridge.Manufacturer" "Atari, Dan Hitchens. Mimi Nyden" "Cartridge.ModelNo" "CX2656" "Cartridge.Name" "SwordQuest - EarthWorld (1982) (Atari) (PAL)" "Cartridge.Note" "AKA Adventure I, SwordQuest I - EarthWorld" @@ -13458,7 +13474,7 @@ "" "Cartridge.MD5" "aab840db22075aa0f6a6b83a597f8890" -"Cartridge.Manufacturer" "Home Vision - Gem International Corp. - R.J.P.G." +"Cartridge.Manufacturer" "Home Vision, R.J.P.G. - Gem International Corp. - VDI" "Cartridge.ModelNo" "VCS83124" "Cartridge.Name" "Racing Car (1983) (Home Vision) (PAL)" "Console.SwapPorts" "YES" @@ -13533,7 +13549,7 @@ "" "Cartridge.MD5" "ab56f1b2542a05bebc4fbccfc4803a38" -"Cartridge.Manufacturer" "Activision, David Lubar" +"Cartridge.Manufacturer" "Activision - Imagineering, Dan Kitchen, David Lubar" "Cartridge.ModelNo" "AK-048-04" "Cartridge.Name" "River Raid II (1988) (Activision)" "" @@ -13732,7 +13748,7 @@ "" "Cartridge.MD5" "ae2f1f69bb38355395c1c75c81acc644" -"Cartridge.Manufacturer" "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart" +"Cartridge.Manufacturer" "Parker Brothers, Wilfredo Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart" "Cartridge.ModelNo" "PB5540" "Cartridge.Name" "Star Wars - The Arcade Game (12-23-1983) (Parker Bros) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -13774,10 +13790,10 @@ "" "Cartridge.MD5" "aec9b885d0e8b24e871925630884095c" -"Cartridge.Manufacturer" "Amiga" +"Cartridge.Manufacturer" "Amiga - Video Soft" "Cartridge.ModelNo" "3125" "Cartridge.Name" "Surf's Up (1983) (Amiga) (Prototype)" -"Cartridge.Note" "Uses the Amiga Joyboard" +"Cartridge.Note" "Uses the Joyboard controller" "Cartridge.Rarity" "Prototype" "" @@ -13879,7 +13895,7 @@ "" "Cartridge.MD5" "b049fc8ac50be7c2f28418817979c637" -"Cartridge.Manufacturer" "Activision, David Lubar" +"Cartridge.Manufacturer" "Activision - Imagineering, Dan Kitchen, David Lubar" "Cartridge.ModelNo" "EAK-048-04, EAK-048-04B" "Cartridge.Name" "River Raid II (1988) (Activision) (PAL)" "" @@ -14094,9 +14110,10 @@ "" "Cartridge.MD5" "b2d5d200f0af8485413fad957828582a" -"Cartridge.Manufacturer" "Atari, Robert C. Polaro" +"Cartridge.Manufacturer" "Atari - Bobco, Robert C. Polaro" "Cartridge.ModelNo" "CX26155P" "Cartridge.Name" "Sprint Master (1988) (Atari) (PAL)" +"Cartridge.Note" "AKA Sprint 88, Sprint 2000" "" "Cartridge.MD5" "b2f0d7217147160b2f481954cedf814b" @@ -14142,7 +14159,7 @@ "" "Cartridge.MD5" "b37f0fe822b92ca8f5e330bf62d56ea9" -"Cartridge.Manufacturer" "Xonox - K-Tel Software - Beck-Tech" +"Cartridge.Manufacturer" "Xonox - K-Tel Software - Beck-Tech, Steve Beck" "Cartridge.ModelNo" "6210, 7210, 06003. 99001" "Cartridge.Name" "Spike's Peak (1983) (Xonox) (PAL)" "" @@ -14205,9 +14222,10 @@ "" "Cartridge.MD5" "b4f05e544834d0238a0c263491775edf" -"Cartridge.Manufacturer" "Arcadia Corporation, Steve Hales, Stephen Harland Landrum" -"Cartridge.ModelNo" "AR-4102" -"Cartridge.Name" "Suicide Mission (Preview) (1982) (Arcadia) (PAL)" +"Cartridge.Manufacturer" "Starpath Corporation, Steve Hales, Stephen H. Landrum" +"Cartridge.ModelNo" "4 AR-4102" +"Cartridge.Name" "Suicide Mission (Preview) (1982) (Starpath) (PAL)" +"Cartridge.Note" "AKA Meteoroids" "Display.Phosphor" "YES" "" @@ -14266,7 +14284,7 @@ "Cartridge.MD5" "b5a1a189601a785bdb2f02a424080412" "Cartridge.Manufacturer" "Imagic, Dennis Koble" "Cartridge.ModelNo" "720021-1A, IA3410" -"Cartridge.Name" "Shootin' Gallery (1982) (Imagic)" +"Cartridge.Name" "Shootin' Gallery (1983) (Imagic)" "" "Cartridge.MD5" "b5cb9cf6e668ea3f4cc2be00ea70ec3c" @@ -14554,9 +14572,9 @@ "" "Cartridge.MD5" "ba257438f8a78862a9e014d831143690" -"Cartridge.Manufacturer" "U.S. Games Corporation, Henry Will IV" +"Cartridge.Manufacturer" "U.S. Games Corporation - JWDA, Todd Marshall, Robin McDaniel, Henry Will IV" "Cartridge.ModelNo" "VC2002" -"Cartridge.Name" "Squeeze Box (1982) (U.S. Games)" +"Cartridge.Name" "Squeeze Box (1983) (U.S. Games)" "" "Cartridge.MD5" "ba317f83cdfcd58cbc65aac1ccb87bc5" @@ -14663,7 +14681,7 @@ "" "Cartridge.MD5" "bc4cf38a4bee45752dc466c98ed7ad09" -"Cartridge.Manufacturer" "Atari, Douglas Neubauer" +"Cartridge.Manufacturer" "Atari, Douglas Neubauer, Mimi Nyden" "Cartridge.ModelNo" "CX26136" "Cartridge.Name" "Solaris (1986) (Atari) (PAL)" "Cartridge.Note" "AKA Universe, Star Raiders II, The Last Starfighter" @@ -14801,6 +14819,8 @@ "Cartridge.Manufacturer" "Puzzy - Bit Corporation" "Cartridge.ModelNo" "PG202" "Cartridge.Name" "Space Tunnel (1982) (Puzzy)" +"Cartridge.Note" "AKA Cosmic Corridor, Le Tunnel de L'Estace" +"Display.YStart" "34" "Display.Height" "215" "" @@ -14857,7 +14877,7 @@ "" "Cartridge.MD5" "bf976cf80bcf52c5f164c1d45f2b316b" -"Cartridge.Manufacturer" "Atari, Tod Frye" +"Cartridge.Manufacturer" "Atari, Tod Frye, Mimi Nyden" "Cartridge.ModelNo" "CX2657" "Cartridge.Name" "SwordQuest - FireWorld (1982) (Atari) (PAL)" "Cartridge.Note" "AKA Adventure II, SwordQuest II - FireWorld" @@ -15108,9 +15128,9 @@ "" "Cartridge.MD5" "c29f8db680990cb45ef7fef6ab57a2c2" -"Cartridge.Manufacturer" "Parker Brothers, Paul Crowley" +"Cartridge.Manufacturer" "Parker Brothers, Mike Brodie - Roklan, Paul Crowley" "Cartridge.ModelNo" "PB5320" -"Cartridge.Name" "Super Cobra (1982) (Parker Bros)" +"Cartridge.Name" "Super Cobra (1983) (Parker Bros)" "" "Cartridge.MD5" "c2a37f1c7603c5fd97df47d6c562abfa" @@ -15145,9 +15165,10 @@ "" "Cartridge.MD5" "c31a17942d162b80962cb1f7571cd1d5" -"Cartridge.Manufacturer" "Home Vision - Gem International Corp." +"Cartridge.Manufacturer" "Home Vision - Gem International Corp. - VDI" "Cartridge.ModelNo" "VCS83112" "Cartridge.Name" "Sky Alien (1983) (Home Vision) (PAL)" +"Cartridge.Note" "AKA Sky Aliem" "" "Cartridge.MD5" "c3205e3707f646e1a106e09c5c49c1bf" @@ -15167,7 +15188,7 @@ "" "Cartridge.MD5" "c3a9550f6345f4c25b372c42dc865703" -"Cartridge.Manufacturer" "Atari, Robert C. Polaro" +"Cartridge.Manufacturer" "Atari - Bobco, Robert C. Polaro" "Cartridge.ModelNo" "CX2663" "Cartridge.Name" "Road Runner (1989) (Atari) (PAL)" "" @@ -15341,7 +15362,7 @@ "Cartridge.Manufacturer" "Bit Corporation" "Cartridge.ModelNo" "PG202" "Cartridge.Name" "Space Tunnel (1982) (BitCorp) (PAL)" -"Cartridge.Note" "AKA Weltraum-Tunnel" +"Cartridge.Note" "AKA Cosmic Corridor, Weltraum-Tunnel" "Display.Height" "256" "" @@ -15500,7 +15521,7 @@ "" "Cartridge.MD5" "c6db733e0b108c2580a1d65211f06dbf" -"Cartridge.Manufacturer" "Atari, Eric Manghise, Joseph Tung" +"Cartridge.Manufacturer" "Atari, Eric Manghise, Mimi Nyden, Joseph Tung" "Cartridge.ModelNo" "CX2640" "Cartridge.Name" "RealSports Baseball (07-09-1982) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -15794,7 +15815,7 @@ "" "Cartridge.MD5" "cb9b2e9806a7fbab3d819cfe15f0f05a" -"Cartridge.Manufacturer" "Parker Brothers, Ray Miller, Todd Marshall" +"Cartridge.Manufacturer" "Parker Brothers - JWDA, Todd Marshall, Robin McDaniel, Ray Miller" "Cartridge.ModelNo" "931513" "Cartridge.Name" "Star Wars - Death Star Battle (1983) (Parker Bros) (PAL)" "" @@ -15820,7 +15841,7 @@ "Cartridge.MD5" "cbced209dd0575a27212d3eee6aee3bc" "Cartridge.Manufacturer" "Apollo - Games by Apollo, Ed Salvo, Byron Parks" "Cartridge.ModelNo" "AP-2003" -"Cartridge.Name" "Racquetball (1981) (Apollo)" +"Cartridge.Name" "Racquetball (1982) (Apollo) [a]" "Display.Phosphor" "YES" "" @@ -16016,7 +16037,7 @@ "" "Cartridge.MD5" "cd98be8a48ebf610c9609a688b9c57f2" -"Cartridge.Manufacturer" "Arcadia Corporation, Steve Hales, Stephen Harland Landrum" +"Cartridge.Manufacturer" "Arcadia Corporation, Steve Hales, Stephen H. Landrum" "Cartridge.ModelNo" "4 AR-4102" "Cartridge.Name" "Suicide Mission (1982) (Arcadia) (Prototype)" "Cartridge.Note" "AKA Meteoroids" @@ -16077,7 +16098,7 @@ "" "Cartridge.MD5" "ce5cc62608be2cd3ed8abd844efb8919" -"Cartridge.Manufacturer" "Atari, Robert C. Polaro" +"Cartridge.Manufacturer" "Atari - Bobco, Robert C. Polaro" "Cartridge.ModelNo" "CX2663" "Cartridge.Name" "Road Runner (1989) (Atari)" "" @@ -16397,7 +16418,7 @@ "" "Cartridge.MD5" "d0e15a3ce322c5af60f07343594392af" -"Cartridge.Manufacturer" "Amiga" +"Cartridge.Manufacturer" "Amiga - Video Soft" "Cartridge.ModelNo" "3125" "Cartridge.Name" "Surf's Up (1983) (Amiga) (Prototype) (4K)" "Cartridge.Note" "Uses the Joyboard controller" @@ -16554,9 +16575,9 @@ "" "Cartridge.MD5" "d326db524d93fa2897ab69c42d6fb698" -"Cartridge.Manufacturer" "Parker Brothers, Paul Crowley" +"Cartridge.Manufacturer" "Parker Brothers, Mike Brodie - Roklan, Paul Crowley" "Cartridge.ModelNo" "931505" -"Cartridge.Name" "Super Cobra (1982) (Parker Bros) (PAL)" +"Cartridge.Name" "Super Cobra (1983) (Parker Bros) (PAL)" "" "Cartridge.MD5" "d339b95f273f8c3550dc4daa67a4aa94" @@ -16611,10 +16632,11 @@ "" "Cartridge.MD5" "d44d90e7c389165f5034b5844077777f" -"Cartridge.Manufacturer" "Parker Brothers, Larry Gelberg, Gary Goltz" +"Cartridge.Manufacturer" "Parker Brothers, Larry Gelberg" "Cartridge.ModelNo" "PB5065" "Cartridge.Name" "Star Wars - Ewok Adventure (1983) (Parker Bros) (Prototype)" "Cartridge.Rarity" "Prototype" +"Display.YStart" "30" "" "Cartridge.MD5" "d45bf71871b196022829aa3b96bfcfd4" @@ -16850,9 +16872,10 @@ "" "Cartridge.MD5" "d73ad614f1c2357997c88f37e75b18fe" -"Cartridge.Manufacturer" "Puzzy - Bit Corporation" -"Cartridge.ModelNo" "PG202" -"Cartridge.Name" "Space Tunnel (1982) (Puzzy) (PAL)" +"Cartridge.Manufacturer" "Goliath" +"Cartridge.ModelNo" "7" +"Cartridge.Name" "Space Tunnel (1983) (Goliath) (PAL)" +"Cartridge.Note" "AKA Cosmic Corridor" "" "Cartridge.MD5" "d74a81fcd89c5cf0bd4c88eb207ebd62" @@ -16992,7 +17015,8 @@ "Cartridge.MD5" "d9548ad44e67edec202d1b8b325e5adf" "Cartridge.Manufacturer" "Apollo - Games by Apollo, Dan Oliver - RCA Video Jeux" "Cartridge.ModelNo" "AP-2002" -"Cartridge.Name" "Space Cavern (1981) (Apollo) (PAL)" +"Cartridge.Name" "Space Cavern (1982) (Apollo) (PAL)" +"Cartridge.Note" "AKA Les guerriers de l'espace" "" "Cartridge.MD5" "d97e3d0b4575ce0b9a6132e19cfeac6e" @@ -17317,7 +17341,7 @@ "" "Cartridge.MD5" "dd0cbe5351551a538414fb9e37fc56e8" -"Cartridge.Manufacturer" "Xonox - K-Tel Software, Anthony R. Henderson" +"Cartridge.Manufacturer" "Xonox - K-Tel Software - Product Guild, Anthony R. Henderson" "Cartridge.ModelNo" "99006, 6220" "Cartridge.Name" "Sir Lancelot (1983) (Xonox) (PAL)" "" @@ -17352,7 +17376,7 @@ "" "Cartridge.MD5" "dd7598b8bcb81590428900f71b720efb" -"Cartridge.Manufacturer" "Xonox - K-Tel Software" +"Cartridge.Manufacturer" "Xonox - K-Tel Software - Computer Magic" "Cartridge.ModelNo" "99005, 6220, 6250" "Cartridge.Name" "Robin Hood (1983) (Xonox) (PAL)" "Display.YStart" "30" @@ -17497,7 +17521,7 @@ "" "Cartridge.MD5" "df12953b919844dad2070ed2e70c9fa2" -"Cartridge.Manufacturer" "Amiga" +"Cartridge.Manufacturer" "Amiga - Video Soft" "Cartridge.ModelNo" "3135" "Cartridge.Name" "S.A.C. Alert (1983) (Amiga) (Prototype) (PAL)" "Cartridge.Note" "Uses Joyboard" @@ -17508,6 +17532,7 @@ "Cartridge.Manufacturer" "Bit Corporation" "Cartridge.ModelNo" "PG202" "Cartridge.Name" "Space Tunnel (1982) (BitCorp)" +"Cartridge.Note" "AKA Cosmic Corridor, Weltraum-Tunnel" "Display.Height" "222" "" @@ -17542,7 +17567,7 @@ "Cartridge.MD5" "df6a28a89600affe36d94394ef597214" "Cartridge.Manufacturer" "Apollo - Games by Apollo, Dan Oliver" "Cartridge.ModelNo" "AP-2002" -"Cartridge.Name" "Space Cavern (1981) (Apollo)" +"Cartridge.Name" "Space Cavern (1982) (Apollo)" "" "Cartridge.MD5" "df6a46714960a3e39b57b3c3983801b5" @@ -17631,7 +17656,7 @@ "Cartridge.MD5" "e03b0b091bea5bc9d3f14ee0221e714d" "Cartridge.Manufacturer" "CBS Electronics, Bob Curtiss" -"Cartridge.ModelNo" "4L1845, 4L1852, 4L1853, 4L1854, 4L1855" +"Cartridge.ModelNo" "4L1852, 4L1853, 4L1854, 4L1855" "Cartridge.Name" "Solar Fox (1983) (CBS Electronics) (PAL)" "" @@ -17838,9 +17863,10 @@ "" "Cartridge.MD5" "e275cbe7d4e11e62c3bfcfb38fca3d49" -"Cartridge.Manufacturer" "M Network, Ken Smith - INTV" +"Cartridge.Manufacturer" "M Network - APh Technological Consulting, Ken Smith - INTV" "Cartridge.ModelNo" "MT5658" "Cartridge.Name" "Super Challenge Football (1982) (M Network)" +"Cartridge.Note" "AKA Pro Football" "" "Cartridge.MD5" "e28113d10c0c14cc3b5f430b0d142fcb" @@ -18036,9 +18062,10 @@ "" "Cartridge.MD5" "e4c666ca0c36928b95b13d33474dbb44" -"Cartridge.Manufacturer" "Arcadia Corporation, Steve Hales, Stephen Harland Landrum" -"Cartridge.ModelNo" "AR-4102" +"Cartridge.Manufacturer" "Arcadia Corporation, Steve Hales, Stephen H. Landrum" +"Cartridge.ModelNo" "4 AR-4102" "Cartridge.Name" "Suicide Mission (1982) (Arcadia)" +"Cartridge.Note" "AKA Meteoroids" "Display.Phosphor" "YES" "" @@ -18234,7 +18261,7 @@ "" "Cartridge.MD5" "e6de4ef9ab62e2196962aa6b0dedac59" -"Cartridge.Manufacturer" "Imagic, Wilfredo 'Willy' Aguilar, Michael Becker, Dennis Koble" +"Cartridge.Manufacturer" "Imagic, Wilfredo Aguilar, Michael Becker, Dennis Koble" "Cartridge.ModelNo" "720113-2A, 13206" "Cartridge.Name" "Solar Storm (1983) (Imagic) (PAL)" "Cartridge.Note" "Uses the Paddle Controllers" @@ -18263,7 +18290,7 @@ "" "Cartridge.MD5" "e72eb8d4410152bdcb69e7fba327b420" -"Cartridge.Manufacturer" "Atari, Douglas Neubauer" +"Cartridge.Manufacturer" "Atari, Douglas Neubauer, Mimi Nyden" "Cartridge.ModelNo" "CX26136" "Cartridge.Name" "Solaris (1986) (Atari)" "Cartridge.Note" "AKA Universe, Star Raiders II, The Last Starfighter" @@ -18358,7 +18385,8 @@ "" "Cartridge.MD5" "e8a3473bf786cf796d1336d2d03a0008" -"Cartridge.Manufacturer" "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart" +"Cartridge.Manufacturer" "Parker Brothers, Wilfredo Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart" +"Cartridge.ModelNo" "PB5540" "Cartridge.Name" "Star Wars - The Arcade Game (12-05-1983) (Parker Bros) (Prototype)" "Cartridge.Rarity" "Prototype" "Display.Phosphor" "YES" @@ -18576,7 +18604,7 @@ "" "Cartridge.MD5" "eb634650c3912132092b7aee540bbce3" -"Cartridge.Manufacturer" "Atari, Eric Manghise, Joseph Tung" +"Cartridge.Manufacturer" "Atari, Eric Manghise, Mimi Nyden, Joseph Tung" "Cartridge.ModelNo" "CX2640" "Cartridge.Name" "RealSports Baseball (1982) (Atari)" "Display.Phosphor" "YES" @@ -18600,9 +18628,10 @@ "" "Cartridge.MD5" "eb92193f06b645df0b2a15d077ce435f" -"Cartridge.Manufacturer" "Arcadia Corporation, Steve Hales, Stephen Harland Landrum" -"Cartridge.ModelNo" "AR-4102" -"Cartridge.Name" "Suicide Mission (1982) (Arcadia) (PAL)" +"Cartridge.Manufacturer" "Starpath Corporation, Steve Hales, Stephen H. Landrum" +"Cartridge.ModelNo" "4 AR-4102" +"Cartridge.Name" "Suicide Mission (1982) (Starpath) (PAL)" +"Cartridge.Note" "AKA Meteoroids" "Display.Phosphor" "YES" "" @@ -18671,7 +18700,7 @@ "Cartridge.MD5" "ec5c861b487a5075876ab01155e74c6c" "Cartridge.Manufacturer" "Apollo - Games by Apollo, Ed Salvo, Byron Parks" "Cartridge.ModelNo" "AP-2001" -"Cartridge.Name" "Spacechase (1981) (Apollo)" +"Cartridge.Name" "Spacechase (1982) (Apollo)" "" "Cartridge.MD5" "ece463abde92e8b89bcd867ec71751b8" @@ -19309,9 +19338,9 @@ "" "Cartridge.MD5" "f3dfae774f3bd005a026e29894db40d3" -"Cartridge.Manufacturer" "Quelle" +"Cartridge.Manufacturer" "Otto Versand" "Cartridge.ModelNo" "649635" -"Cartridge.Name" "See Saw (Double-Game Package) (1983) (Quelle) (PAL)" +"Cartridge.Name" "See Saw (Double-Game Package) (1983) (Otto Versand) (PAL)" "Cartridge.Note" "AKA Circus Atari" "" @@ -19382,7 +19411,7 @@ "" "Cartridge.MD5" "f4b8a47a95b61895e671c3ec86ffd461" -"Cartridge.Manufacturer" "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart" +"Cartridge.Manufacturer" "Parker Brothers, Wilfredo Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart" "Cartridge.ModelNo" "PB5540" "Cartridge.Name" "Star Wars - The Arcade Game (01-03-1984) (Parker Bros) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -19718,7 +19747,7 @@ "" "Cartridge.MD5" "f844f4c6f3baaaf5322657442d6f29eb" -"Cartridge.Manufacturer" "Atari, Richard Dobbis, Nick 'Sandy Maiwald' Turner" +"Cartridge.Manufacturer" "Atari, Sam Comstock, Richard Dobbis, Nick 'Sandy Maiwald' Turner" "Cartridge.ModelNo" "CX26111" "Cartridge.Name" "Snoopy and the Red Baron (1983) (Atari) (PAL)" "" @@ -19863,7 +19892,7 @@ "" "Cartridge.MD5" "f9d51a4e5f8b48f68770c89ffd495ed1" -"Cartridge.Manufacturer" "Atari, Tod Frye" +"Cartridge.Manufacturer" "Atari, Tod Frye, Mimi Nyden" "Cartridge.ModelNo" "CX2657" "Cartridge.Name" "SwordQuest - FireWorld (1982) (Atari)" "Cartridge.Note" "AKA Adventure II, SwordQuest II - FireWorld" @@ -20212,7 +20241,7 @@ "" "Cartridge.MD5" "fd78f186bdff83fbad7f97cb583812fe" -"Cartridge.Manufacturer" "Amiga" +"Cartridge.Manufacturer" "Amiga - Video Soft" "Cartridge.ModelNo" "3125" "Cartridge.Name" "Surf's Up (1983) (Amiga) (Prototype) [a2]" "Cartridge.Note" "Uses the Joyboard controller" From e3baeb209e4cf224ab206416144e67aa260fba45 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 20 Dec 2017 21:32:07 +0100 Subject: [PATCH 119/156] added bank change tracking to most CartDebugWidgets --- src/debugger/gui/Cart0840Widget.cxx | 7 ++++++- src/debugger/gui/Cart3EWidget.cxx | 10 ++++++---- src/debugger/gui/Cart3EWidget.hxx | 1 + src/debugger/gui/Cart3FWidget.cxx | 7 ++++++- src/debugger/gui/CartARWidget.cxx | 7 ++++++- src/debugger/gui/CartBFSCWidget.cxx | 3 ++- src/debugger/gui/CartBFSCWidget.hxx | 1 + src/debugger/gui/CartDebugWidget.hxx | 2 ++ src/debugger/gui/CartEFSCWidget.cxx | 4 +++- src/debugger/gui/CartEFSCWidget.hxx | 1 + src/debugger/gui/CartF0Widget.cxx | 7 ++++++- src/debugger/gui/CartF4SCWidget.cxx | 3 ++- src/debugger/gui/CartF4SCWidget.hxx | 1 + src/debugger/gui/CartF4Widget.cxx | 7 ++++++- src/debugger/gui/CartF6SCWidget.cxx | 4 +++- src/debugger/gui/CartF6SCWidget.hxx | 1 + src/debugger/gui/CartF6Widget.cxx | 7 ++++++- src/debugger/gui/CartF8SCWidget.cxx | 4 +++- src/debugger/gui/CartF8SCWidget.hxx | 1 + src/debugger/gui/CartF8Widget.cxx | 7 ++++++- src/debugger/gui/CartFA2Widget.cxx | 4 +++- src/debugger/gui/CartFA2Widget.hxx | 1 + src/debugger/gui/CartFAWidget.cxx | 4 +++- src/debugger/gui/CartFAWidget.hxx | 1 + src/debugger/gui/CartFEWidget.cxx | 7 ++++++- src/debugger/gui/CartMNetworkWidget.cxx | 7 +++++-- src/debugger/gui/CartMNetworkWidget.hxx | 2 ++ src/debugger/gui/CartSBWidget.cxx | 7 ++++++- src/debugger/gui/CartUAWidget.cxx | 7 ++++++- src/debugger/gui/CartWDWidget.cxx | 4 +++- src/debugger/gui/CartWDWidget.hxx | 1 + src/debugger/gui/CartX07Widget.cxx | 7 ++++++- src/gui/PopUpWidget.cxx | 5 +++-- src/gui/PopUpWidget.hxx | 2 +- 34 files changed, 116 insertions(+), 28 deletions(-) diff --git a/src/debugger/gui/Cart0840Widget.cxx b/src/debugger/gui/Cart0840Widget.cxx index cb70c3056..b1db5e2bb 100644 --- a/src/debugger/gui/Cart0840Widget.cxx +++ b/src/debugger/gui/Cart0840Widget.cxx @@ -59,7 +59,12 @@ Cartridge0840Widget::Cartridge0840Widget( // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void Cartridge0840Widget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + Debugger& dbg = instance().debugger(); + CartDebug& cart = dbg.cartDebug(); + const CartState& state = static_cast(cart.getState()); + const CartState& oldstate = static_cast(cart.getOldState()); + + myBank->setSelectedIndex(myCart.getBank(), state.bank != oldstate.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/Cart3EWidget.cxx b/src/debugger/gui/Cart3EWidget.cxx index 0849f52d3..3eb38d01f 100644 --- a/src/debugger/gui/Cart3EWidget.cxx +++ b/src/debugger/gui/Cart3EWidget.cxx @@ -94,6 +94,8 @@ void Cartridge3EWidget::saveOldState() { myOldState.internalram.push_back(myCart.myRAM[i]); } + + myOldState.bank = myCart.myCurrentBank; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -101,13 +103,13 @@ void Cartridge3EWidget::loadConfig() { if(myCart.myCurrentBank < 256) { - myROMBank->setSelectedIndex(myCart.myCurrentBank % myNumRomBanks); - myRAMBank->setSelectedMax(); + myROMBank->setSelectedIndex(myCart.myCurrentBank % myNumRomBanks, myOldState.bank != myCart.myCurrentBank); + myRAMBank->setSelectedMax(myOldState.bank >= 256); } else { - myROMBank->setSelectedMax(); - myRAMBank->setSelectedIndex(myCart.myCurrentBank - 256); + myROMBank->setSelectedMax(myOldState.bank < 256); + myRAMBank->setSelectedIndex(myCart.myCurrentBank - 256, myOldState.bank != myCart.myCurrentBank); } CartDebugWidget::loadConfig(); diff --git a/src/debugger/gui/Cart3EWidget.hxx b/src/debugger/gui/Cart3EWidget.hxx index 71813a7fe..1432ee3f9 100644 --- a/src/debugger/gui/Cart3EWidget.hxx +++ b/src/debugger/gui/Cart3EWidget.hxx @@ -40,6 +40,7 @@ class Cartridge3EWidget : public CartDebugWidget struct CartState { ByteArray internalram; + uInt16 bank; }; CartState myOldState; diff --git a/src/debugger/gui/Cart3FWidget.cxx b/src/debugger/gui/Cart3FWidget.cxx index 2f68c9cbe..5b8e49aa9 100644 --- a/src/debugger/gui/Cart3FWidget.cxx +++ b/src/debugger/gui/Cart3FWidget.cxx @@ -60,7 +60,12 @@ Cartridge3FWidget::Cartridge3FWidget( // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void Cartridge3FWidget::loadConfig() { - myBank->setSelectedIndex(myCart.myCurrentBank); + Debugger& dbg = instance().debugger(); + CartDebug& cart = dbg.cartDebug(); + const CartState& state = static_cast(cart.getState()); + const CartState& oldstate = static_cast(cart.getOldState()); + + myBank->setSelectedIndex(myCart.getBank(), state.bank != oldstate.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartARWidget.cxx b/src/debugger/gui/CartARWidget.cxx index 5838dbbae..653d3b59a 100644 --- a/src/debugger/gui/CartARWidget.cxx +++ b/src/debugger/gui/CartARWidget.cxx @@ -79,7 +79,12 @@ CartridgeARWidget::CartridgeARWidget( // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeARWidget::loadConfig() { - myBank->setSelectedIndex(myCart.myCurrentBank); + Debugger& dbg = instance().debugger(); + CartDebug& cart = dbg.cartDebug(); + const CartState& state = static_cast(cart.getState()); + const CartState& oldstate = static_cast(cart.getOldState()); + + myBank->setSelectedIndex(myCart.getBank(), state.bank != oldstate.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartBFSCWidget.cxx b/src/debugger/gui/CartBFSCWidget.cxx index d95c6783b..8f2c21cd6 100644 --- a/src/debugger/gui/CartBFSCWidget.cxx +++ b/src/debugger/gui/CartBFSCWidget.cxx @@ -131,12 +131,13 @@ void CartridgeBFSCWidget::saveOldState() { myOldState.internalram.push_back(myCart.myRAM[i]); } + myOldState.bank = myCart.getBank(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeBFSCWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + myBank->setSelectedIndex(myCart.getBank(), myCart.getBank() != myOldState.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartBFSCWidget.hxx b/src/debugger/gui/CartBFSCWidget.hxx index 92c3682bf..9c1ccf000 100644 --- a/src/debugger/gui/CartBFSCWidget.hxx +++ b/src/debugger/gui/CartBFSCWidget.hxx @@ -38,6 +38,7 @@ class CartridgeBFSCWidget : public CartDebugWidget struct CartState { ByteArray internalram; + uInt16 bank; }; CartState myOldState; diff --git a/src/debugger/gui/CartDebugWidget.hxx b/src/debugger/gui/CartDebugWidget.hxx index fb16a3c6e..684e9b7aa 100644 --- a/src/debugger/gui/CartDebugWidget.hxx +++ b/src/debugger/gui/CartDebugWidget.hxx @@ -29,6 +29,8 @@ namespace GUI { #include "Base.hxx" // not needed here, but all child classes need it #include "Command.hxx" #include "Widget.hxx" +#include "Debugger.hxx" +#include "CartDebug.hxx" class CartDebugWidget : public Widget, public CommandSender { diff --git a/src/debugger/gui/CartEFSCWidget.cxx b/src/debugger/gui/CartEFSCWidget.cxx index 27c3428cf..75b5d9150 100644 --- a/src/debugger/gui/CartEFSCWidget.cxx +++ b/src/debugger/gui/CartEFSCWidget.cxx @@ -83,12 +83,14 @@ void CartridgeEFSCWidget::saveOldState() { myOldState.internalram.push_back(myCart.myRAM[i]); } + + myOldState.bank = myCart.getBank(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeEFSCWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + myBank->setSelectedIndex(myCart.getBank(), myCart.getBank() != myOldState.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartEFSCWidget.hxx b/src/debugger/gui/CartEFSCWidget.hxx index 5659d2b1b..24afa6a86 100644 --- a/src/debugger/gui/CartEFSCWidget.hxx +++ b/src/debugger/gui/CartEFSCWidget.hxx @@ -38,6 +38,7 @@ class CartridgeEFSCWidget : public CartDebugWidget struct CartState { ByteArray internalram; + uInt16 bank; }; CartState myOldState; diff --git a/src/debugger/gui/CartF0Widget.cxx b/src/debugger/gui/CartF0Widget.cxx index 40154d9fd..56cfa2a82 100644 --- a/src/debugger/gui/CartF0Widget.cxx +++ b/src/debugger/gui/CartF0Widget.cxx @@ -74,7 +74,12 @@ CartridgeF0Widget::CartridgeF0Widget( // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeF0Widget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + Debugger& dbg = instance().debugger(); + CartDebug& cart = dbg.cartDebug(); + const CartState& state = static_cast(cart.getState()); + const CartState& oldstate = static_cast(cart.getOldState()); + + myBank->setSelectedIndex(myCart.getBank(), state.bank != oldstate.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartF4SCWidget.cxx b/src/debugger/gui/CartF4SCWidget.cxx index c5ffba0d2..d557c0ab9 100644 --- a/src/debugger/gui/CartF4SCWidget.cxx +++ b/src/debugger/gui/CartF4SCWidget.cxx @@ -74,12 +74,13 @@ void CartridgeF4SCWidget::saveOldState() { myOldState.internalram.push_back(myCart.myRAM[i]); } + myOldState.bank = myCart.getBank(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeF4SCWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + myBank->setSelectedIndex(myCart.getBank(), myCart.getBank() != myOldState.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartF4SCWidget.hxx b/src/debugger/gui/CartF4SCWidget.hxx index 63a1260fa..1a246bdc1 100644 --- a/src/debugger/gui/CartF4SCWidget.hxx +++ b/src/debugger/gui/CartF4SCWidget.hxx @@ -38,6 +38,7 @@ class CartridgeF4SCWidget : public CartDebugWidget struct CartState { ByteArray internalram; + uInt16 bank; }; CartState myOldState; diff --git a/src/debugger/gui/CartF4Widget.cxx b/src/debugger/gui/CartF4Widget.cxx index 7f8df1598..85e486870 100644 --- a/src/debugger/gui/CartF4Widget.cxx +++ b/src/debugger/gui/CartF4Widget.cxx @@ -64,7 +64,12 @@ CartridgeF4Widget::CartridgeF4Widget( // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeF4Widget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + Debugger& dbg = instance().debugger(); + CartDebug& cart = dbg.cartDebug(); + const CartState& state = static_cast(cart.getState()); + const CartState& oldstate = static_cast(cart.getOldState()); + + myBank->setSelectedIndex(myCart.getBank(), state.bank != oldstate.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartF6SCWidget.cxx b/src/debugger/gui/CartF6SCWidget.cxx index 34a22b27e..5f4b79621 100644 --- a/src/debugger/gui/CartF6SCWidget.cxx +++ b/src/debugger/gui/CartF6SCWidget.cxx @@ -70,12 +70,14 @@ void CartridgeF6SCWidget::saveOldState() { myOldState.internalram.push_back(myCart.myRAM[i]); } + + myOldState.bank = myCart.getBank(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeF6SCWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + myBank->setSelectedIndex(myCart.getBank(), myCart.getBank() != myOldState.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartF6SCWidget.hxx b/src/debugger/gui/CartF6SCWidget.hxx index 377c080d6..ee0beffd9 100644 --- a/src/debugger/gui/CartF6SCWidget.hxx +++ b/src/debugger/gui/CartF6SCWidget.hxx @@ -35,6 +35,7 @@ class CartridgeF6SCWidget : public CartDebugWidget private: struct CartState { ByteArray internalram; + uInt16 bank; }; CartridgeF6SC& myCart; PopUpWidget* myBank; diff --git a/src/debugger/gui/CartF6Widget.cxx b/src/debugger/gui/CartF6Widget.cxx index 2eab73f65..17a96b745 100644 --- a/src/debugger/gui/CartF6Widget.cxx +++ b/src/debugger/gui/CartF6Widget.cxx @@ -60,7 +60,12 @@ CartridgeF6Widget::CartridgeF6Widget( // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeF6Widget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + Debugger& dbg = instance().debugger(); + CartDebug& cart = dbg.cartDebug(); + const CartState& state = static_cast(cart.getState()); + const CartState& oldstate = static_cast(cart.getOldState()); + + myBank->setSelectedIndex(myCart.getBank(), state.bank != oldstate.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartF8SCWidget.cxx b/src/debugger/gui/CartF8SCWidget.cxx index 73f5c7945..e8137275c 100644 --- a/src/debugger/gui/CartF8SCWidget.cxx +++ b/src/debugger/gui/CartF8SCWidget.cxx @@ -68,12 +68,14 @@ void CartridgeF8SCWidget::saveOldState() { myOldState.internalram.push_back(myCart.myRAM[i]); } + + myOldState.bank = myCart.getBank(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeF8SCWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + myBank->setSelectedIndex(myCart.getBank(), myCart.getBank() != myOldState.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartF8SCWidget.hxx b/src/debugger/gui/CartF8SCWidget.hxx index 05c80ad31..c4e7cd19e 100644 --- a/src/debugger/gui/CartF8SCWidget.hxx +++ b/src/debugger/gui/CartF8SCWidget.hxx @@ -38,6 +38,7 @@ class CartridgeF8SCWidget : public CartDebugWidget struct CartState { ByteArray internalram; + uInt16 bank; }; CartState myOldState; diff --git a/src/debugger/gui/CartF8Widget.cxx b/src/debugger/gui/CartF8Widget.cxx index aee8f05eb..226e26d9c 100644 --- a/src/debugger/gui/CartF8Widget.cxx +++ b/src/debugger/gui/CartF8Widget.cxx @@ -58,7 +58,12 @@ CartridgeF8Widget::CartridgeF8Widget( // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeF8Widget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + Debugger& dbg = instance().debugger(); + CartDebug& cart = dbg.cartDebug(); + const CartState& state = static_cast(cart.getState()); + const CartState& oldstate = static_cast(cart.getOldState()); + + myBank->setSelectedIndex(myCart.getBank(), state.bank != oldstate.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartFA2Widget.cxx b/src/debugger/gui/CartFA2Widget.cxx index 64fda7733..89aad9064 100644 --- a/src/debugger/gui/CartFA2Widget.cxx +++ b/src/debugger/gui/CartFA2Widget.cxx @@ -106,12 +106,14 @@ void CartridgeFA2Widget::saveOldState() { myOldState.internalram.push_back(myCart.myRAM[i]); } + + myOldState.bank = myCart.getBank(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeFA2Widget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + myBank->setSelectedIndex(myCart.getBank(), myCart.getBank() != myOldState.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartFA2Widget.hxx b/src/debugger/gui/CartFA2Widget.hxx index ca47488d1..32627bd13 100644 --- a/src/debugger/gui/CartFA2Widget.hxx +++ b/src/debugger/gui/CartFA2Widget.hxx @@ -40,6 +40,7 @@ class CartridgeFA2Widget : public CartDebugWidget struct CartState { ByteArray internalram; + uInt16 bank; }; CartState myOldState; diff --git a/src/debugger/gui/CartFAWidget.cxx b/src/debugger/gui/CartFAWidget.cxx index 77006a6f0..d7bc41a4c 100644 --- a/src/debugger/gui/CartFAWidget.cxx +++ b/src/debugger/gui/CartFAWidget.cxx @@ -69,12 +69,14 @@ void CartridgeFAWidget::saveOldState() { myOldState.internalram.push_back(myCart.myRAM[i]); } + + myOldState.bank = myCart.getBank(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeFAWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + myBank->setSelectedIndex(myCart.getBank(), myCart.getBank() != myOldState.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartFAWidget.hxx b/src/debugger/gui/CartFAWidget.hxx index ad1411076..9c66266dd 100644 --- a/src/debugger/gui/CartFAWidget.hxx +++ b/src/debugger/gui/CartFAWidget.hxx @@ -38,6 +38,7 @@ class CartridgeFAWidget : public CartDebugWidget struct CartState { ByteArray internalram; + uInt16 bank; }; CartState myOldState; diff --git a/src/debugger/gui/CartFEWidget.cxx b/src/debugger/gui/CartFEWidget.cxx index a8c8d8a1c..6e414aeb4 100644 --- a/src/debugger/gui/CartFEWidget.cxx +++ b/src/debugger/gui/CartFEWidget.cxx @@ -51,7 +51,12 @@ CartridgeFEWidget::CartridgeFEWidget( // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeFEWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + Debugger& dbg = instance().debugger(); + CartDebug& cart = dbg.cartDebug(); + const CartState& state = static_cast(cart.getState()); + const CartState& oldstate = static_cast(cart.getOldState()); + + myBank->setSelectedIndex(myCart.getBank(), state.bank != oldstate.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartMNetworkWidget.cxx b/src/debugger/gui/CartMNetworkWidget.cxx index f14f1ead3..56a2fcb52 100644 --- a/src/debugger/gui/CartMNetworkWidget.cxx +++ b/src/debugger/gui/CartMNetworkWidget.cxx @@ -69,13 +69,16 @@ void CartridgeMNetworkWidget::saveOldState() { myOldState.internalram.push_back(myCart.myRAM[i]); } + + myOldState.lowerBank = myCart.myCurrentSlice[0]; + myOldState.upperBank = myCart.myCurrentRAM; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeMNetworkWidget::loadConfig() { - myLower2K->setSelectedIndex(myCart.myCurrentSlice[0]); - myUpper256B->setSelectedIndex(myCart.myCurrentRAM); + myLower2K->setSelectedIndex(myCart.myCurrentSlice[0], myCart.myCurrentSlice[0] != myOldState.lowerBank); + myUpper256B->setSelectedIndex(myCart.myCurrentRAM, myCart.myCurrentRAM != myOldState.upperBank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartMNetworkWidget.hxx b/src/debugger/gui/CartMNetworkWidget.hxx index f4881dfda..296c9d777 100644 --- a/src/debugger/gui/CartMNetworkWidget.hxx +++ b/src/debugger/gui/CartMNetworkWidget.hxx @@ -42,6 +42,8 @@ class CartridgeMNetworkWidget : public CartDebugWidget struct CartState { ByteArray internalram; + uInt16 lowerBank; + uInt16 upperBank; }; CartState myOldState; diff --git a/src/debugger/gui/CartSBWidget.cxx b/src/debugger/gui/CartSBWidget.cxx index ed102641e..31b108df6 100644 --- a/src/debugger/gui/CartSBWidget.cxx +++ b/src/debugger/gui/CartSBWidget.cxx @@ -65,7 +65,12 @@ CartridgeSBWidget::CartridgeSBWidget( // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeSBWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + Debugger& dbg = instance().debugger(); + CartDebug& cart = dbg.cartDebug(); + const CartState& state = static_cast(cart.getState()); + const CartState& oldstate = static_cast(cart.getOldState()); + + myBank->setSelectedIndex(myCart.getBank(), state.bank != oldstate.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartUAWidget.cxx b/src/debugger/gui/CartUAWidget.cxx index 8a5ea27b7..cfe8d015d 100644 --- a/src/debugger/gui/CartUAWidget.cxx +++ b/src/debugger/gui/CartUAWidget.cxx @@ -59,7 +59,12 @@ CartridgeUAWidget::CartridgeUAWidget( // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeUAWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + Debugger& dbg = instance().debugger(); + CartDebug& cart = dbg.cartDebug(); + const CartState& state = static_cast(cart.getState()); + const CartState& oldstate = static_cast(cart.getOldState()); + + myBank->setSelectedIndex(myCart.getBank(), state.bank != oldstate.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartWDWidget.cxx b/src/debugger/gui/CartWDWidget.cxx index 123ef9ba2..d245f2c60 100644 --- a/src/debugger/gui/CartWDWidget.cxx +++ b/src/debugger/gui/CartWDWidget.cxx @@ -72,12 +72,14 @@ void CartridgeWDWidget::saveOldState() for(uInt32 i = 0; i < internalRamSize(); ++i) myOldState.internalram.push_back(myCart.myRAM[i]); + + myOldState.bank = myCart.getBank(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeWDWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + myBank->setSelectedIndex(myCart.getBank(), myCart.getBank() != myOldState.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartWDWidget.hxx b/src/debugger/gui/CartWDWidget.hxx index 3e6828d22..a1071e4e1 100644 --- a/src/debugger/gui/CartWDWidget.hxx +++ b/src/debugger/gui/CartWDWidget.hxx @@ -38,6 +38,7 @@ class CartridgeWDWidget : public CartDebugWidget struct CartState { ByteArray internalram; + uInt16 bank; // Current banking layout }; CartState myOldState; diff --git a/src/debugger/gui/CartX07Widget.cxx b/src/debugger/gui/CartX07Widget.cxx index 00d51c9b7..189fa878b 100644 --- a/src/debugger/gui/CartX07Widget.cxx +++ b/src/debugger/gui/CartX07Widget.cxx @@ -75,7 +75,12 @@ CartridgeX07Widget::CartridgeX07Widget( // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeX07Widget::loadConfig() { - myBank->setSelectedIndex(myCart.myCurrentBank); + Debugger& dbg = instance().debugger(); + CartDebug& cart = dbg.cartDebug(); + const CartState& state = static_cast(cart.getState()); + const CartState& oldstate = static_cast(cart.getOldState()); + + myBank->setSelectedIndex(myCart.getBank(), state.bank != oldstate.bank); CartDebugWidget::loadConfig(); } diff --git a/src/gui/PopUpWidget.cxx b/src/gui/PopUpWidget.cxx index 699ff4758..d91f2b647 100644 --- a/src/gui/PopUpWidget.cxx +++ b/src/gui/PopUpWidget.cxx @@ -100,8 +100,9 @@ void PopUpWidget::setSelectedIndex(int idx, bool changed) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void PopUpWidget::setSelectedMax() +void PopUpWidget::setSelectedMax(bool changed) { + _changed = changed; myMenu->setSelectedMax(); } @@ -248,7 +249,7 @@ void PopUpWidget::drawWidget(bool hilite) s.frameRect(x + w - 16, _y + 1, 15, _h - 2, isEnabled() && hilite ? kTextColorHi : kBGColorLo); // Fill the background - s.fillRect(x + 1, _y + 1, w - 17, _h - 2, kWidColor); + s.fillRect(x + 1, _y + 1, w - 17, _h - 2, _changed ? kDbgChangedColor : kWidColor); s.fillRect(x + w - 15, _y + 2, 13, _h - 4, isEnabled() && hilite ? kWidColor : kBGColorHi); // Draw an arrow pointing down at the right end to signal this is a dropdown/popup s.drawBitmap(down_arrow, x + w - 13, _y + myArrowsY + 1, diff --git a/src/gui/PopUpWidget.hxx b/src/gui/PopUpWidget.hxx index 94fb2145c..69f432cbb 100644 --- a/src/gui/PopUpWidget.hxx +++ b/src/gui/PopUpWidget.hxx @@ -51,7 +51,7 @@ class PopUpWidget : public Widget, public CommandSender void setSelected(const Variant& tag, const Variant& def = EmptyVariant); void setSelectedIndex(int idx, bool changed = false); - void setSelectedMax(); + void setSelectedMax(bool changed = false); void clearSelection(); int getSelected() const; From f0d5ffbd0a37aa2275d5d8edc58bd5684b81efed Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 20 Dec 2017 21:54:40 +0100 Subject: [PATCH 120/156] bank change tracking for more CartDebugWidgets added --- src/debugger/gui/CartBFWidget.cxx | 7 ++++++- src/debugger/gui/CartCMWidget.cxx | 4 +++- src/debugger/gui/CartCMWidget.hxx | 1 + src/debugger/gui/CartCTYWidget.cxx | 3 ++- src/debugger/gui/CartCTYWidget.hxx | 1 + src/debugger/gui/CartCVPlusWidget.cxx | 4 +++- src/debugger/gui/CartCVPlusWidget.hxx | 1 + src/debugger/gui/CartDFSCWidget.cxx | 4 +++- src/debugger/gui/CartDFSCWidget.hxx | 1 + src/debugger/gui/CartDFWidget.cxx | 7 ++++++- src/debugger/gui/CartDPCPlusWidget.cxx | 4 +++- src/debugger/gui/CartDPCPlusWidget.hxx | 1 + src/debugger/gui/CartDPCWidget.cxx | 4 +++- src/debugger/gui/CartDPCWidget.hxx | 1 + src/debugger/gui/CartEFWidget.cxx | 7 ++++++- 15 files changed, 41 insertions(+), 9 deletions(-) diff --git a/src/debugger/gui/CartBFWidget.cxx b/src/debugger/gui/CartBFWidget.cxx index a319843af..90e76bdd7 100644 --- a/src/debugger/gui/CartBFWidget.cxx +++ b/src/debugger/gui/CartBFWidget.cxx @@ -121,7 +121,12 @@ CartridgeBFWidget::CartridgeBFWidget( // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeBFWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + Debugger& dbg = instance().debugger(); + CartDebug& cart = dbg.cartDebug(); + const CartState& state = static_cast(cart.getState()); + const CartState& oldstate = static_cast(cart.getOldState()); + + myBank->setSelectedIndex(myCart.getBank(), state.bank != oldstate.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartCMWidget.cxx b/src/debugger/gui/CartCMWidget.cxx index b0d3942a7..6db45b47d 100644 --- a/src/debugger/gui/CartCMWidget.cxx +++ b/src/debugger/gui/CartCMWidget.cxx @@ -155,12 +155,14 @@ void CartridgeCMWidget::saveOldState() myOldState.internalram.clear(); for(uInt32 i = 0; i < this->internalRamSize();i++) myOldState.internalram.push_back(myCart.myRAM[i]); + + myOldState.bank = myCart.getBank(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeCMWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + myBank->setSelectedIndex(myCart.getBank(), myCart.getBank() != myOldState.bank); RiotDebug& riot = Debugger::debugger().riotDebug(); const RiotState& state = static_cast(riot.getState()); diff --git a/src/debugger/gui/CartCMWidget.hxx b/src/debugger/gui/CartCMWidget.hxx index f712b0afc..d348cdf9e 100644 --- a/src/debugger/gui/CartCMWidget.hxx +++ b/src/debugger/gui/CartCMWidget.hxx @@ -41,6 +41,7 @@ class CartridgeCMWidget : public CartDebugWidget uInt8 swcha; uInt8 column; ByteArray internalram; + uInt16 bank; }; CartridgeCM& myCart; diff --git a/src/debugger/gui/CartCTYWidget.cxx b/src/debugger/gui/CartCTYWidget.cxx index 1ed4fa98f..ad1c94e45 100644 --- a/src/debugger/gui/CartCTYWidget.cxx +++ b/src/debugger/gui/CartCTYWidget.cxx @@ -64,12 +64,13 @@ void CartridgeCTYWidget::saveOldState() { myOldState.internalram.push_back(myCart.myRAM[i]); } + myOldState.bank = myCart.getBank(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeCTYWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()-1); + myBank->setSelectedIndex(myCart.getBank()-1, myCart.getBank() != myOldState.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartCTYWidget.hxx b/src/debugger/gui/CartCTYWidget.hxx index 1ab1ec9c0..ea317d730 100644 --- a/src/debugger/gui/CartCTYWidget.hxx +++ b/src/debugger/gui/CartCTYWidget.hxx @@ -38,6 +38,7 @@ class CartridgeCTYWidget : public CartDebugWidget struct CartState { ByteArray internalram; + uInt16 bank; }; CartState myOldState; diff --git a/src/debugger/gui/CartCVPlusWidget.cxx b/src/debugger/gui/CartCVPlusWidget.cxx index 6e5bb9c72..97a4d1a14 100644 --- a/src/debugger/gui/CartCVPlusWidget.cxx +++ b/src/debugger/gui/CartCVPlusWidget.cxx @@ -58,7 +58,7 @@ CartridgeCVPlusWidget::CartridgeCVPlusWidget( // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeCVPlusWidget::loadConfig() { - myBank->setSelectedIndex(myCart.myCurrentBank); + myBank->setSelectedIndex(myCart.getBank(), myCart.getBank() != myOldState.bank); CartDebugWidget::loadConfig(); } @@ -92,6 +92,8 @@ void CartridgeCVPlusWidget::saveOldState() myOldState.internalram.clear(); for(uInt32 i = 0; i < this->internalRamSize();i++) myOldState.internalram.push_back(myCart.myRAM[i]); + + myOldState.bank = myCart.getBank(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/debugger/gui/CartCVPlusWidget.hxx b/src/debugger/gui/CartCVPlusWidget.hxx index 6d32641c0..c691bdb62 100644 --- a/src/debugger/gui/CartCVPlusWidget.hxx +++ b/src/debugger/gui/CartCVPlusWidget.hxx @@ -37,6 +37,7 @@ class CartridgeCVPlusWidget : public CartDebugWidget PopUpWidget* myBank; struct CartState { ByteArray internalram; + uInt16 bank; }; CartState myOldState; diff --git a/src/debugger/gui/CartDFSCWidget.cxx b/src/debugger/gui/CartDFSCWidget.cxx index 9979af959..bd66e577a 100644 --- a/src/debugger/gui/CartDFSCWidget.cxx +++ b/src/debugger/gui/CartDFSCWidget.cxx @@ -99,12 +99,14 @@ void CartridgeDFSCWidget::saveOldState() { myOldState.internalram.push_back(myCart.myRAM[i]); } + + myOldState.bank = myCart.getBank(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeDFSCWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + myBank->setSelectedIndex(myCart.getBank(), myCart.getBank() != myOldState.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartDFSCWidget.hxx b/src/debugger/gui/CartDFSCWidget.hxx index 7dbed13df..44e340354 100644 --- a/src/debugger/gui/CartDFSCWidget.hxx +++ b/src/debugger/gui/CartDFSCWidget.hxx @@ -38,6 +38,7 @@ class CartridgeDFSCWidget : public CartDebugWidget struct CartState { ByteArray internalram; + uInt16 bank; }; CartState myOldState; diff --git a/src/debugger/gui/CartDFWidget.cxx b/src/debugger/gui/CartDFWidget.cxx index 4462a9a49..911fbe938 100644 --- a/src/debugger/gui/CartDFWidget.cxx +++ b/src/debugger/gui/CartDFWidget.cxx @@ -89,7 +89,12 @@ CartridgeDFWidget::CartridgeDFWidget( // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeDFWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + Debugger& dbg = instance().debugger(); + CartDebug& cart = dbg.cartDebug(); + const CartState& state = static_cast(cart.getState()); + const CartState& oldstate = static_cast(cart.getOldState()); + + myBank->setSelectedIndex(myCart.getBank(), state.bank != oldstate.bank); CartDebugWidget::loadConfig(); } diff --git a/src/debugger/gui/CartDPCPlusWidget.cxx b/src/debugger/gui/CartDPCPlusWidget.cxx index f9425b8c6..9b8d59525 100644 --- a/src/debugger/gui/CartDPCPlusWidget.cxx +++ b/src/debugger/gui/CartDPCPlusWidget.cxx @@ -213,12 +213,14 @@ void CartridgeDPCPlusWidget::saveOldState() for(uInt32 i = 0; i < internalRamSize(); ++i) myOldState.internalram.push_back(myCart.myDisplayImage[i]); + + myOldState.bank = myCart.getBank(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeDPCPlusWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + myBank->setSelectedIndex(myCart.getBank(), myCart.getBank() != myOldState.bank); // Get registers, using change tracking IntArray alist; diff --git a/src/debugger/gui/CartDPCPlusWidget.hxx b/src/debugger/gui/CartDPCPlusWidget.hxx index 9494f16c3..668b5f580 100644 --- a/src/debugger/gui/CartDPCPlusWidget.hxx +++ b/src/debugger/gui/CartDPCPlusWidget.hxx @@ -47,6 +47,7 @@ class CartridgeDPCPlusWidget : public CartDebugWidget IntArray mwaves; uInt32 random; ByteArray internalram; + uInt16 bank; }; CartridgeDPCPlus& myCart; diff --git a/src/debugger/gui/CartDPCWidget.cxx b/src/debugger/gui/CartDPCWidget.cxx index cb4c1359b..150edc2b1 100644 --- a/src/debugger/gui/CartDPCWidget.cxx +++ b/src/debugger/gui/CartDPCWidget.cxx @@ -151,12 +151,14 @@ void CartridgeDPCWidget::saveOldState() for(uInt32 i = 0; i < internalRamSize(); ++i) myOldState.internalram.push_back(myCart.myDisplayImage[i]); + + myOldState.bank = myCart.getBank(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeDPCWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + myBank->setSelectedIndex(myCart.getBank(), myCart.getBank() != myOldState.bank); // Get registers, using change tracking IntArray alist; diff --git a/src/debugger/gui/CartDPCWidget.hxx b/src/debugger/gui/CartDPCWidget.hxx index 768d02c1c..6db4c587b 100644 --- a/src/debugger/gui/CartDPCWidget.hxx +++ b/src/debugger/gui/CartDPCWidget.hxx @@ -42,6 +42,7 @@ class CartridgeDPCWidget : public CartDebugWidget BoolArray music; uInt8 random; ByteArray internalram; + uInt16 bank; }; CartridgeDPC& myCart; diff --git a/src/debugger/gui/CartEFWidget.cxx b/src/debugger/gui/CartEFWidget.cxx index cc4b5c29d..c9ebd0cbc 100644 --- a/src/debugger/gui/CartEFWidget.cxx +++ b/src/debugger/gui/CartEFWidget.cxx @@ -73,7 +73,12 @@ CartridgeEFWidget::CartridgeEFWidget( // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CartridgeEFWidget::loadConfig() { - myBank->setSelectedIndex(myCart.getBank()); + Debugger& dbg = instance().debugger(); + CartDebug& cart = dbg.cartDebug(); + const CartState& state = static_cast(cart.getState()); + const CartState& oldstate = static_cast(cart.getOldState()); + + myBank->setSelectedIndex(myCart.getBank(), state.bank != oldstate.bank); CartDebugWidget::loadConfig(); } From 44bb4db73eadb4cd6587cd67d2ac9f65c2723440 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 20 Dec 2017 23:09:41 +0100 Subject: [PATCH 121/156] improved saveOldState() usage, now changes after a break are displayed too --- src/debugger/Debugger.cxx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index 58efb4265..f9ec7aa44 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -79,6 +79,8 @@ Debugger::Debugger(OSystem& osystem, Console& console) // there will only be ever one instance of debugger in Stella, // I don't care :) myStaticDebugger = this; + + saveOldState(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -616,7 +618,6 @@ void Debugger::setStartState() // Save initial state and add it to the rewind list (except when in currently rewinding) RewindManager& r = myOSystem.state().rewindManager(); - saveOldState(false); // avoid invalidating future states when entering the debugger during rewind if (r.atLast()) addState("enter debugger"); @@ -628,6 +629,8 @@ void Debugger::setStartState() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void Debugger::setQuitState() { + saveOldState(); + // Bus must be unlocked for normal operation when leaving debugger mode unlockBankswitchState(); From 6313c98fdc0766211f70c2adc51835c95a6e2c72 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Wed, 20 Dec 2017 18:41:24 -0330 Subject: [PATCH 122/156] Almost all ROM properties are now updated to RomHunter v14. - I will take a quick look over them again, to make sure I didn't miss any new ROMs. --- src/emucore/DefProps.hxx | 90 +++++++++++++++++----------------- src/emucore/stella.pro | 102 ++++++++++++++++++++------------------- 2 files changed, 97 insertions(+), 95 deletions(-) diff --git a/src/emucore/DefProps.hxx b/src/emucore/DefProps.hxx index dc950455d..44ca56070 100644 --- a/src/emucore/DefProps.hxx +++ b/src/emucore/DefProps.hxx @@ -83,7 +83,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "047ac3b9faea64522b7a23c4465a7aa8", "", "", "Defender (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "04856e3006a4f5f7b4638da71dad3d88", "Atari, Douglas Neubauer", "CX26176", "Radar Lock (1989) (Atari) (PAL)", "AKA Dog Fight", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "049626cbfb1a5f7a5dc885a0c4bb758e", "", "", "MegaMania (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "04b488d4eef622d022a0021375e7e339", "Home Vision - Gem International Corp.", "VCS83107", "Tennis (1983) (Home Vision) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "04b488d4eef622d022a0021375e7e339", "Home Vision - Gem International Corp. - VDI", "VCS83107", "Tennis (1983) (Home Vision) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "04dfb4acac1d0909e4c360fd2ac04480", "", "", "Jammed (2001) (XYPE) (NTSC)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "04e737c9d53cd84bfd5ee679954e4706", "Jone Yuan Telephonic Enterprise Co", "", "Checkers (Jone Yuan) (4K)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "04fccc7735155a6c1373d453b110c640", "HES - Imagineering, David Lubar", "535", "My Golf (1990) (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -162,7 +162,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "09f89bbfa2ab00f1964d200e12d7ced0", "Atari", "MA017600", "Diagnostic Test Cartridge 2.6 (1982) (Atari) (Prototype) (4K)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0a1b98937911d621b004b1617446d124", "", "", "Hangman Pac-Man Biglist1 (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0a981c03204ac2b278ba392674682560", "Atari, Bob Whitehead - Sears", "CX2651 - 99805, 49-75602", "Blackjack (1977) (Atari)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES_IAXIS", "", "", "", "", "", "", "", "" }, - { "0aa208060d7c140f20571e3341f5a3f8", "U.S. Games Corporation, Jeff Corsiglia, Paul Allen Newell", "VC1009", "Towering Inferno (1982) (U.S. Games)", "Uses the Joystick Controllers (swapped)", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "220", "YES", "" }, + { "0aa208060d7c140f20571e3341f5a3f8", "U.S. Games Corporation - Western Technologies, Jeff Corsiglia, Paul Allen Newell, Tom Sloper", "VC1009", "Towering Inferno (1982) (U.S. Games)", "Uses the Joystick Controllers (swapped)", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "220", "YES", "" }, { "0abf64ca504a116adca80f77f85e00fb", "", "", "Cube Conquest (Billy Eno) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0ac0d491763153fac75f5337ce32a9d6", "", "", "SPAM Image Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0acaf71e60b89f6b6eab63db6ab84510", "", "", "This Planet Sucks (Greg Troutman) [a2]", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "36", "", "", "" }, @@ -272,7 +272,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "12937db3d4a80da5c4452b752891252d", "Digitel", "", "Megamania (1983) (Digitel)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "12bca8305d5ab8ea51fe1cfd95d7ab0e", "Epyx, Steven A. Baker, Tod Frye, Peter Engelbrite", "80561-00250", "Summer Games (1987) (Epyx) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "12d7e0d6b187889f8d150bf7034d1db2", "", "", "Poker Squares (V0.0e) (2001) (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "130c5742cd6cbe4877704d733d5b08ca", "Home Vision - Gem International Corp.", "VCS83109", "World End (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "130c5742cd6cbe4877704d733d5b08ca", "Home Vision - Gem International Corp. - VDI", "VCS83109", "World End (1983) (Home Vision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1323c45d660f5a5b6d5ea45c6c4cbe4a", "Canal 3 - Intellivision", "", "Enduro (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "133456269a03e3fdae6cddd65754c50d", "Tigervision - Software Electronics Corporation - Teldec", "7-006 - 3.60008 VG", "Springer (1983) (Tigervision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "133a4234512e8c4e9e8c5651469d4a09", "Atari, Andrew Fuchs, Jeffrey Gusman, Dave Jolly, Suki Lee", "CX26117", "Obelix (1984) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -373,7 +373,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "19e739c2764a5ab9ed08f9095aa2af0b", "Atari, Andrew Fuchs, Jeffrey Gusman, Dave Jolly, Suki Lee", "CX26117", "Obelix (1984) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "19e761e53e5ec8e9f2fceea62715ca06", "Panda", "104", "Scuba Diver (1983) (Panda)", "AKA Skindiver", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1a23540d91f87584a04f184304a00648", "", "", "Race Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "1a613ce60fc834d4970e1e674b9196b3", "Home Vision - Gem International Corp.", "VCS83135", "Tanks War (1983) (Home Vision) (PAL)", "AKA Phantom Tank", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "1a613ce60fc834d4970e1e674b9196b3", "Home Vision - Gem International Corp. - VDI", "VCS83135", "Tanks War (1983) (Home Vision) (PAL)", "AKA Tanks But No Tanks", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1a624e236526c4c8f31175e9c89b2a22", "Rainbow Vision - Suntek", "SS-007", "Space Raid (Rainbow Vision) (PAL) [a]", "AKA MegaMania", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1a8204a2bcd793f539168773d9ad6230", "Atari, Rob Fulop - Sears", "CX2638 - 49-75166", "Missile Command (1981) (Atari) [no initials]", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1aa7344b563c597eecfbfcf8e7093c27", "David Marli", "", "Slot Invaders (David Marli) (Hack)", "Hack of Slot Machine", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -439,7 +439,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "2016726db38ad6a68b4c48ba6fe51557", "Piero Cavina, Erik Mooney", "", "INV 2 (Piero Cavina, Erik Mooney)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "203049f4d8290bb4521cc4402415e737", "Tigervision, Robert H. O'Neil - Teldec", "7-007 - 3.60005 VG", "Polaris (1983) (Tigervision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "203abb713c00b0884206dcc656caa48f", "Imagic, Bob Smith", "720114-1A, 03207, IZ-001-04", "Moonsweeper (1983) (Imagic)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "203b1efc6101d4b9d83bb6cc1c71f67f", "Quelle", "685.996 1", "Teller-Jonglieren! (1983) (Quelle) (PAL)", "AKA Dancing Plate", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "203b1efc6101d4b9d83bb6cc1c71f67f", "Quelle", "685.996 1", "Teller-Jonglieren! (1983) (Quelle) (PAL)", "AKA Dishaster", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "205070b6a0d454961dd9196a8e81d877", "", "", "Hangman Monkey Biglist2 (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2091af29b4e7b86914d79d9aaa4cbd20", "CBS Electronics - Woodside Design Associates, Harley H. Puthuff Jr.", "4L1802", "Donkey Kong Junior (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "251", "", "" }, { "20ae62fb69c6cc6e8098cca8cd080487", "Zirok", "", "Tennis (Zirok)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -507,7 +507,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "25a21c47afe925a3ca0806876a2b4f3f", "Quelle", "685.640 5", "Der kleine Baer (1983) (Quelle) (PAL)", "AKA Frostbite", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "25b52bf8dd215bcbd59c9abdb55c44f8", "Atari - GCC, Betty Ryan Tylko, Doug Macrae", "CX2694, CX2694P", "Pole Position (1983) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "25b6dc012cdba63704ea9535c6987beb", "Avalon Hill, Jean Baer, Bill Hood", "5004002", "Shuttle Orbiter (1983) (Avalon Hill)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "25bb080457351be724aac8a02021aa92", "CBS Electronics", "4L1784, 4L1786, 4L1787, 4L2277", "Zaxxon (1982) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "25bb080457351be724aac8a02021aa92", "CBS Electronics", "4L1784, 4L1786, 4L1787, 4L2277", "Zaxxon (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "25d4be3309b89583c6b39d9f93bf654f", "Activision, Bob Whitehead", "AX-015, AX-015-04", "Chopper Command (1982) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "25e73efb9a6edf119114718bd2f646ba", "Atari, Suki Lee", "CX26113", "Miss Piggy's Wedding (1983) (Atari) (Prototype) [a]", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "24", "", "", "" }, { "25f2e760cd7f56b88aac88d63757d41b", "Activision, Bob Whitehead - Ariola", "EAG-002, EAG-002-04I, PAG-002 - 711 002-715", "Boxing (1980) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -611,7 +611,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "2d1cf85fbc732856bf76470cd4060f4a", "", "", "Daredevil (V1) (Stunt_Cycle_Rules!) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "216", "", "" }, { "2d2c5f0761e609e3c5228766f446f7f8", "Atari - Axlon, Steve DeFrisco", "CX26170, CX26170P", "Secret Quest (1989) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2d405da70af82b20a6b3ecc3d1d2c4ec", "Genus", "", "Pitfall (Genus)", "AKA Pitfall!", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "2d6741cda3000230f6bbdd5e31941c01", "CBS Electronics", "80110", "Targ (1983) (CBS Electronics) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "2d6741cda3000230f6bbdd5e31941c01", "CBS Electronics - VSS", "80110", "Targ (1983) (CBS Electronics) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2d69a5f23784f1c2230143292a073b53", "", "", "Qb (Fixed background animation) (2001) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "2d6da0eb85eabc93270e5bb8a466ca51", "", "", "Sprite Demo 7 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "2d76c5d1aad506442b9e9fb67765e051", "Apollo - Games by Apollo, Larry Minor, Ernie Runyon, Ed Salvo", "AP-2004", "Lost Luggage (1982) (Apollo) [no opening scene]", "AKA Airport Mayhem", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -687,7 +687,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "328949872e454181223a80389d03c122", "", "", "Home Run (Unknown) (PAL)", "", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, { "32ae78abbb5e677e2aabae5cc86cec29", "Atari, Christopher H. Omarzu, Courtney Granner", "CX26112", "Good Luck, Charlie Brown (04-18-1984) (Atari) (Prototype)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "32d1260ea682e1bb10850fa94c04ec5f", "Atari, Alan Miller", "CX26163P", "Basketball (32 in 1) (1988) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "32dcd1b535f564ee38143a70a8146efe", "Xonox - K-Tel Software, Anthony R. Henderson", "99007, 6240", "Tomarc the Barbarian (1983) (Xonox)", "AKA Thundarr the Barbarian", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "32dcd1b535f564ee38143a70a8146efe", "Xonox - K-Tel Software - Product Guild, Anthony R. Henderson", "99007, 6240", "Tomarc the Barbarian (1983) (Xonox)", "AKA Thundarr the Barbarian", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "32e65d1e4dfcbcd9b57fee72cafe074c", "", "", "Eckhard Stolberg's Scrolling Text Demo 3 (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "32ecb5a652eb73d287e883eea751d99c", "Dactar - Milmar", "", "Bowling (Dactar - Milmar)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "32f4e47a71601ab06cfb59e1c6a0b846", "Ed Federmeyer", "", "Sound X (1994) (Ed Federmeyer)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -705,7 +705,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "340f546d59e72fb358c49ac2ca8482bb", "Sancho - Tang's Electronic Co.", "TEC003", "Skindiver (1983) (Sancho) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "34340c8eecd1e557314789cc6477e650", "Joe Grand", "", "SCSIcide Pre-release 4 (Joe Grand)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "345488d3b014b684a181108f0ef823cb", "CBS Electronics, Tom DiDomenico", "4L 2486 5000", "Blueprint (1983) (CBS Electronics) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "345758747b893e4c9bdde8877de47788", "CBS Electronics, Joseph Biel", "4L1802, 4L1803, 4L1804, 4L2278", "Venture (1982) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "345758747b893e4c9bdde8877de47788", "CBS Electronics, Joseph Biel", "4L1802, 4L1803, 4L1804, 4L2278", "Venture (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "345769d085113d57937198262af52298", "Rainbow Vision - Suntek", "SS-007", "Space Raid (Rainbow Vision) (PAL)", "AKA MegaMania", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "346555779a2d51b48833463b5433472f", "", "", "Thrust (V0.1) (2000) (TJ)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "348615ffa30fab3cec1441b5a76e9460", "Activision, Alan Miller - Ariola", "EAX-016, PAX-016 - 711 016-725", "StarMaster (1982) (Activision) (PAL) [fixed]", "Use Color/BW switch to change between galactic chart and front views", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -821,7 +821,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "3c853d864a1d5534ed0d4b325347f131", "Telesys, Don 'Donyo' Ruffcorn", "1002", "Cosmic Creeps (1982) (Telesys)", "AKA Space Maze, Spaze Maze", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "3c8e57a246742fa5d59e517134c0b4e6", "Parker Brothers, Rex Bradford, Sam Kjellman", "PB5050", "Star Wars - The Empire Strikes Back (1982) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3ca51b5c08f5a0ecfb17d0c1ec6d0942", "Atari, James Andreasen - Sears", "CX2654 - 49-75141", "Haunted House (09-28-81) (Atari) (Prototype)", "AKA Mystery Mansion, Graves' Manor, Nightmare Manor", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "3caa902ac0ce4509308990645876426a", "Atari - GCC, Dave Payne", "CX2669, CX2669P", "Vanguard (1982) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "3caa902ac0ce4509308990645876426a", "Atari - GCC, Dave Payne", "CX2669, CX2669P", "Vanguard (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3cbdf71bb9fd261fbc433717f547d738", "CCE", "C-803", "Bobby Is Going Home (1983) (CCE) (PAL)", "AKA Bobby Vai Para Casa", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3cdd91e1c28d28e856c0063d602da166", "", "", "Stell-A-Sketch (03-11-1997) (Bob Colbert) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "3d1e83afdb4265fa2fb84819c9cfd39c", "Coleco - JWDA, Todd Marshall, Robin McDaniel, Henry Will IV", "2465", "Smurf - Rescue in Gargamel's Castle (1983) (Coleco)", "AKA Smurf, Smurf Action", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -896,7 +896,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "4191b671bcd8237fc8e297b4947f2990", "Exus Corporation", "", "Video Jogger (1983) (Exus)", "AKA Foot Craz", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "41c4e3d45a06df9d21b7aae6ae7e9912", "CCE", "C-826", "Grand Prix (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "41f252a66c6301f1e8ab3612c19bc5d4", "Atari - GCC, Mike Feinstein, Brad Rice", "CX2681", "Battlezone (1983) (Atari)", "", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "4209e9dcdf05614e290167a1c033cfd2", "CommaVid, John Bronstein", "CM-002", "Video Life (1981) (CommaVid) [higher sounds]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "4209e9dcdf05614e290167a1c033cfd2", "CommaVid, John Bronstein", "CM-002", "Video Life (1984) (CommaVid) [higher sounds]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "42249ec8043a9a0203dde0b5bb46d8c4", "CCE", "", "Resgate Espacial (CCE)", "AKA Moonsweeper", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "4233eb824c2b4811abef9b6d00355ae9", "Retroactive", "", "Qb (V0.10) (PAL) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "4251b4557ea6953e88afb22a3a868724", "", "", "Robot City (V1.1) (TJ)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -989,7 +989,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "4947c9de2e28b2f5f3b0c40ce7e56d93", "", "", "3-D Corridor Demo 2 (29-03-2003) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "494cda91cc640551b4898c82be058dd9", "Andreas Dietrich", "", "Donkey Kong VCS (2017) (1.0) (PAL60)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "YES", "" }, { "49571b26f46620a85f93448359324c28", "", "", "Save Our Ship (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "37", "", "", "" }, - { "497f3d2970c43e5224be99f75e97cbbb", "CommaVid, John Bronstein", "CM-002", "Video Life (1981) (CommaVid)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "497f3d2970c43e5224be99f75e97cbbb", "CommaVid, John Bronstein", "CM-002", "Video Life (1984) (CommaVid)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "4981cefe5493ea512284e7f9f27d1e54", "Home Vision - Gem International Corp. - VDI", "VCS83136", "Cosmic War (1983) (Home Vision) (PAL)", "AKA Cosmic Corridor", "", "", "", "", "", "", "", "", "", "", "", "", "", "256", "", "" }, { "4999b45be0ab5a85bac1b7c0e551542b", "CCE", "", "Double Dragon (CCE) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "499b612f6544ae71d4915aa63e403e10", "Atari, Carol Shaw", "CX26163P", "Checkers (32 in 1) (1988) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1042,14 +1042,14 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "4d5f6db55f7f44fd0253258e810bde21", "Fabrizio Zavagli", "", "Betterblast (Fabrizio Zavagli) (Hack)", "Hack of Astroblast", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4d7517ae69f95cfbc053be01312b7dba", "Atari, Alan Miller - Sears", "CX2641 - 99807, 49-75105", "Surround (1977) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4d77f291dca1518d7d8e47838695f54b", "Data Age", "DA1004", "Airlock (1982) (Data Age)", "", "Common", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "4d8396deeabb40b5e8578276eb5a8b6d", "Quelle", "781698", "Volleyball (1983) (Quelle) (PAL)", "AKA RealSports Volleyball (Double-Game Package)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "4d8396deeabb40b5e8578276eb5a8b6d", "Otto Versand", "781698", "Volleyball (1983) (Otto Versand) (PAL)", "AKA RealSports Volleyball (Double-Game Package)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4dbf47c7f5ac767a3b07843a530d29a5", "Ric Pryor", "", "Breaking News (2002) (Ric Pryor) (Hack)", "Hack of Bump 'n' Jump", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4dcc7e7c2ec0738e26c817b9383091af", "", "", "Unknown Title (bin00026 (200110)) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4dd6c7ab9ef77f2b4950d8fc7cd42ee1", "Retroactive", "", "Qb (V2.04) (Stella) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "4df6124093ccb4f0b6c26a719f4b7706", "Atari, Brad Stewart - Sears", "CX2622 - 6-99813, 49-75107", "Breakout (1978) (Atari) [a]", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "01 60", "", "", "", "", "" }, { "4df9d7352a56a458abb7961bf10aba4e", "", "", "Racing Car (Unknown)", "", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, { "4e01d9072c500331e65bb87c24020d3f", "Atari, Jerome Domurat, Howard Scott Warshaw", "CX26119", "Saboteur (06-15-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "4e02880beeb8dbd4da724a3f33f0971f", "Imagic, Michael Greene", "EIZ-002-04I", "Wing War (1983) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "4e02880beeb8dbd4da724a3f33f0971f", "Imagic, Michael Greene", "EIZ-002-04I", "Wing War (1983) (Imagic) (PAL)", "AKA Flap!", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4e15ddfd48bca4f0bf999240c47b49f5", "Avalon Hill, Jean Baer, Jim Jacob", "5001002", "Death Trap (1983) (Avalon Hill)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "4e2c884d04b57b43f23a5a2f4e9d9750", "", "", "Baby Center Animation (PD)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "4e37992a37ea36489283f7eb90913bbc", "Kris", "", "Hangman Ghost Halloween (Kris) (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1177,7 +1177,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "590ac71fa5f71d3eb29c41023b09ade9", "Atari - GCC, Mark Ackerman, Tom Calderwood, Glenn Parker", "CX2684", "Galaxian (01-05-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "59135f13985b84c4f13cc9e55eec869a", "", "", "Multi-Sprite Game V2.0 (Piero Cavina) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "594dbc80b93fa5804e0f1368c037331d", "Telesys, Alex Leavens", "", "Bouncin' Baby Bunnies (1983) (Telesys) (Prototype)", "AKA Bouncing Baby Monkeys", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5961d259115e99c30b64fe7058256bcf", "Universal Gamex Corporation, Alan Roberts, H.K. Poon", "GX-001", "X-Man (1983) (Universal)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5961d259115e99c30b64fe7058256bcf", "Universal Gamex Corporation, Miguel Castillo, H.K. Poon", "GX-001", "X-Man (1983) (Universal)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "59734e1cc41822373845a09c51e6ba21", "Activision, John Van Ryzin", "AG-038-04", "Cosmic Commuter (1984) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "598a4e6e12f8238b7e7555f5a7777b46", "Tigervision", "7-008", "Miner 2049er (1982) (Tigervision) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "214", "", "" }, { "599cbf919d47a05af975ad447df29497", "Jake Patterson", "", "Baubles (V0.002) (2001) (Jake Patterson) (PD)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1248,12 +1248,12 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "5e1b4629426f4992cf3b2905a696e1a7", "Activision - Bobco, Robert C. Polaro", "AK-049-04", "Rampage! (1989) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5e1b7a6078af428ef056fe85a37a95ca", "Activision, David Crane", "AX-014, AX-014-04", "Grand Prix (1982) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5e1cd11a6d41fc15cf4792257400a31e", "Philip R. Frey", "", "Return of Mario Bros (Philip R. Frey) (Hack)", "Hack of Mario Bros.", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "5e201d6bfc520424a28f129ee5e56835", "Universal Gamex Corporation, Alan Roberts, H.K. Poon", "GX-001", "X-Man (1983) (Universal) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5e201d6bfc520424a28f129ee5e56835", "Universal Gamex Corporation, Miguel Castillo, H.K. Poon", "GX-001", "X-Man (1983) (Universal) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5e2495d43b981010304af55efed1e798", "Jone Yuan Telephonic Enterprise Co", "", "Math Gran Prix (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5e2928f089490017e88e9f9e5a881a25", "", "", "Star Fire - Faster Skipping 1 (24-10-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5e99aa93d0acc741dcda8752c4e813ce", "", "", "2600 Digital Clock (V b2) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5ec73ac7d2ac95ac9530c6d33e713d14", "Arcadia Corporation, Scott Nelson", "13", "Sweat! - The Decathlon Game (2 of 3) (1983) (Arcadia) (Prototype)", "Uses the Paddle Controllers (left only)", "Prototype", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "", "" }, - { "5eeb81292992e057b290a5cd196f155d", "Wizard Video Games, Ed Salvo", "008", "Texas Chainsaw Massacre, The (1983) (Wizard Video)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "5eeb81292992e057b290a5cd196f155d", "Wizard Video Games - VSS, Ed Salvo", "008", "Texas Chainsaw Massacre, The (1983) (Wizard Video)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5ef303b9f0aa8cf20720c560e5f9baa1", "Atari, Jim Huether", "CX2629, CX2629P", "Sky Diver (1979) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5f1b7d5fa73aa071ba0a3c2819511505", "CCE", "", "Cosmic Commuter (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5f2b4c155949f01c06507fb32369d42a", "Apollo, Ed Salvo", "AP-1001", "Skeet Shoot (1981) (Apollo) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1341,7 +1341,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "64fab9d15df937915b1c392fc119b83b", "Atari, Jerome Domurat, Howard Scott Warshaw", "CX26119", "Saboteur (05-20-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "650df778c6ce22d3fd1a7c33c565bcc3", "Atari - GCC, Betty Ryan Tylko, Douglas B. Macrae", "CX2694", "Pole Position (1983) (Atari)", "Genesis controller (B is high gear, C is low gear, left difficulty switch swaps gear buttons)", "Hack of Pole Position", "", "", "", "", "", "", "GENESIS", "", "", "", "", "", "", "", "" }, { "651d2b6743a3a18b426bce2c881af212", "CCE", "C-812", "Pac Man (1983) (CCE) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "6522717cfd75d1dba252cbde76992090", "Home Vision - Gem International Corp.", "VCS83102", "War 2000 (1983) (Home Vision) (PAL)", "AKA Astrowar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "6522717cfd75d1dba252cbde76992090", "Home Vision - Gem International Corp. - VDI", "VCS83102", "War 2000 (1983) (Home Vision) (PAL)", "AKA Astrowar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6538e454b0498ad2befe1ef0f87815c0", "Joe Grand", "", "SCSIcide (v1.2) (2001) (Joe Grand)", "", "New Release", "", "", "", "", "", "", "PADDLES_IAXDR", "", "", "AUTO 65", "", "", "", "", "" }, { "65490d61922f3e3883ee1d583ce10855", "Atari - GCC, Mark Ackerman, Noellie Alito", "CX2692, CX2692P", "Moon Patrol (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "65562f686b267b21b81c4dddc129d724", "", "", "Euchre (28-07-2001) (Eric Eid) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1357,7 +1357,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "6604f72a966ca6b2df6a94ee4a68eb82", "", "", "MegaMania (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "662eca7e3d89175ba0802e8e3425dedb", "", "", "Hangman Pac-Man Biglist3 (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "66362890eb78d6ea65301592cce65f5b", "", "", "Euchre (13-07-2001) (Eric Eid) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "663ef22eb399504d5204c543b8a86bcd", "CBS Electronics, Joe Hellesen", "4L1720, 4L1721, 4L1722, 4L2276", "Wizard of Wor (1982) (CBS Electronics) (PAL)", "Uses the Joystick Controllers (swapped)", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "YES", "" }, + { "663ef22eb399504d5204c543b8a86bcd", "CBS Electronics - Roklan, Joe Hellesen, Joe Wagner", "4L1720, 4L1721, 4L1722, 4L2276", "Wizard of Wor (1982) (CBS Electronics) (PAL)", "Uses the Joystick Controllers (swapped)", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "YES", "" }, { "6651e2791d38edc02c5a5fd7b47a1627", "Parker Brothers, Wilfredo Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (04-05-1984) (Parker Bros) (Prototype) (8K)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "665b8f8ead0eef220ed53886fbd61ec9", "Telesys, Don Ruffcorn, Jack Woodman", "1003", "Fast Food (1982) (Telesys)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "66706459e62514d0c39c3797cbf73ff1", "Video Gems", "VG-05", "Treasure Below (1983) (Video Gems) (PAL)", "", "", "", "", "", "A", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1549,7 +1549,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "740f39e71104e90416c29a73560b9c6b", "Atari", "TE016643", "Diagnostic Test Cartridge 2.6P (1982) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "742de93b8d849220f266b627fbabba82", "", "", "SCSIcide (25-02-2001) (Chris Wilkson) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7450ae4e10ba8380c55b259d7c2b13e8", "", "", "Register Twiddler Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "7454786af7126ccc7a0c31fcf5af40f1", "", "", "Phantom Tank (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "7454786af7126ccc7a0c31fcf5af40f1", "", "", "Tanks But No Tanks (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7465b06b6e25a4a6c6d77d02242af6d6", "Atari", "CX26193", "8 in 1 (01-16-92) (Atari) (Prototype)", "Game 2 is Centipede, but doesn't work", "Prototype", "", "8IN1", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7481f0771bff13885b2ff2570cf90d7b", "Arcadia Corporation, Brian McGhie", "AR-4104", "Rabbit Transit (1983) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "749fec9918160921576f850b2375b516", "Spectravision - Spectravideo", "SA-205", "China Syndrome (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -1565,7 +1565,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "75511bb694662301c9e71df645f4b5a7", "Activision, Bob Whitehead - Ariola", "EAG-011, PAG-011 - 711 011-715", "Stampede (1981) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "755fed16b48e81de05130708a905d00d", "SnailSoft", "", "Comitoid beta 3 (SnailSoft)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "756ca07a65a4fbbedeb5f0ddfc04d0be", "Atari, Jim Huether", "CX2629, CX2629P", "Sky Diver (1979) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "7574480ae2ab0d282c887e9015fdb54c", "Atari, Jerome Domurat, Steve Woita", "CX2699", "Taz (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "7574480ae2ab0d282c887e9015fdb54c", "Atari, Jerome Domurat, Steve Woita", "CX2699", "Taz (1984) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7576dd46c2f8d8ab159d97e3a3f2052f", "Goliath - Hot Shot", "83-112", "Time Machine (1983) (Goliath) (PAL)", "AKA Asteroid Fire", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "757f529026696e13838364dea382a4ed", "Activision, David Crane - Ariola", "EAX-014, PAX-014, EAX-014-04B, EAX-014-04I - 711 014-720", "Grand Prix (1982) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "75a303fd46ad12457ed8e853016815a0", "ZiMAG - Emag - Vidco", "715-111 - GN-060", "Immies & Aggies (1983) (ZiMAG) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1624,7 +1624,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "79fcdee6d71f23f6cf3d01258236c3b9", "Atari - GCC, Mike Feinstein, John Mracek", "CX2673, CX2673P", "Phoenix (1983) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7a09299f473105ae1ef3ad6f9f2cd807", "Atari, Steve Wright", "CX2616P", "Pele's Soccer (1981) (Atari) (PAL)", "AKA Pele's Championship Soccer", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7a2af383014f5d810ad26d322823549d", "", "", "FlickerSort Demo (20-04-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "7a5463545dfb2dcfdafa6074b2f2c15e", "20th Century Fox Video Games, Mark Turmell", "11007", "Turmoil (1982) (20th Century Fox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "7a5463545dfb2dcfdafa6074b2f2c15e", "20th Century Fox Video Games - Sirius Software, Mark Turmell", "11007", "Turmoil (1982) (20th Century Fox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7a63d7ea3f2851bcf04f0bb4ba1a3929", "Arcadia Corporation, Dennis Caswell", "AR-4200", "Escape from the Mindmaster (3 of 4) (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7a64a8b727c8215d945e37d565ca95a5", "Atari, Warren Robinett", "CX2606", "Slot Racers (1978) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7a64b5a6e90619c6aacf244cdd7502f8", "Baroque Gaming (Brian Eno)", "", "Warring Worms (Beta 1) (2002) (Baroque Gaming)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1685,7 +1685,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "7e51a58de2c0db7d33715f518893b0db", "CBS Electronics, E.F. Dreyer, Ed Salvo", "4L 2738 0000", "Mountain King (1983) (CBS Electronics) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "7e52a95074a66640fcfde124fffd491a", "Atari - GCC, Mike Feinstein, John Mracek", "CX2673", "Phoenix (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7e7c4c59d55494e66eef5e04ec1c6157", "Baroque Gaming (Brian Eno)", "", "Warring Worms (2002) (Baroque Gaming)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "7e8aa18bc9502eb57daaf5e7c1e94da7", "CBS Electronics", "M8774, M8794", "Wizard of Wor (1982) (CBS Electronics)", "Uses the Joystick Controllers (swapped)", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "YES", "" }, + { "7e8aa18bc9502eb57daaf5e7c1e94da7", "CBS Electronics - Roklan, Joe Hellesen, Joe Wagner", "M8774, M8794", "Wizard of Wor (1982) (CBS Electronics)", "Uses the Joystick Controllers (swapped)", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "YES", "" }, { "7e9da5cb84d5bc869854938fe3e85ffa", "Atari, Ian Shepard - Sears", "CX2604 - 6-99812, 49-75106", "Space War (1978) (Atari) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7eab0284a0cd1043461d446a08d08cec", "Jone Yuan Telephonic Enterprise Co", "", "Basic Math (Jone Yuan) (4K)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7ead257e8b5a44cac538f5f54c7a0023", "Xonox, Anthony R. Henderson", "99006, 6220", "Sir Lancelot (1983) (Xonox) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1717,7 +1717,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "8055b9c2622136fd91edfea6df642daf", "Activision", "", "Unknown Activision Game #1 (1983) (Activision) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "805f9a32ef97ac25f999a25014dc5c23", "SnailSoft", "", "Balthazar (SnailSoft)", "AKA Babylon 5", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "8068e07b484dfd661158b3771d6621ca", "Epyx, Steven A. Baker, Peter Engelbrite", "80561-00286", "California Games (1988) (Epyx) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "807841df228ee8aab0a06ee639ce5a8a", "Coleco, Michael Green, Anthony R. Henderson, Gary Littleton", "2455", "Turbo (1982) (Coleco) (Prototype)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "807841df228ee8aab0a06ee639ce5a8a", "Coleco - Project Guild - GMA, Michael Green, Anthony R. Henderson, Gary Littleton", "2455", "Turbo (1982) (Coleco) (Prototype)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "807a8ff6216b00d52aba2dfea5d8d860", "John Payson", "", "Strat-O-Gems Deluxe (2005) (J. Payson)", "Uses the AtariVox controller", "Homebrew", "", "", "", "", "", "", "", "ATARIVOX", "", "", "", "", "", "", "" }, { "808c3b1e60ee0e7c65205fa4bd772221", "CCE", "", "Defender (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "80cd42881e670e4b74a9ccd10d0d7b2e", "20th Century Fox Video Games - Sirius, Ed Hodapp", "11004", "Deadly Duck (1982) (20th Century Fox) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1738,7 +1738,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "81591a221419024060b890665beb0fb8", "Atari, Carla Meninsky, Ed Riddle", "CX2611, CX2611P", "Indy 500 (1977) (Atari) (PAL)", "Uses the Driving Controllers", "", "", "", "", "", "", "", "DRIVING", "DRIVING", "", "45", "", "", "", "", "" }, { "8190b403d67bf9792fe22fa5d22f3556", "", "", "Sky Diver (Unknown) (PAL) (Hack)", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "819aeeb9a2e11deb54e6de334f843894", "Atari, Gary Palmer", "CX2661", "Fun with Numbers (1980) (Atari)", "AKA Basic Math", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "81a010abdba1a640f7adf7f84e13d307", "Telegames", "7062 A305", "Universal Chaos (1988) (Telegames)", "AKA Targ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "81a010abdba1a640f7adf7f84e13d307", "Telegames - VSS", "7062 A305", "Universal Chaos (1988) (Telegames)", "AKA Targ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "81b3bf17cf01039d311b4cd738ae608e", "CBS Electronics - Roklan, Joe Gaucher, Alex Leavens", "M8776, M8793", "Gorf (1982) (CBS Electronics)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "81f4f0285f651399a12ff2e2f35bab77", "Arcadia Corporation, Dennis Caswell", "AR-4200", "Escape from the Mindmaster (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "822a950f27ff0122870558a89a49cad3", "", "", "Space Jockey (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1863,7 +1863,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "8bebac614571135933116045204f0f00", "Thomas Jentzsch", "", "Missile Command (Trakball) (2002) (TJ) (PAL)", "Uses the Trakball Controller", "Homebrew", "", "", "", "", "", "", "TRAKBALL", "", "", "", "", "", "", "YES", "" }, { "8c103a79b007a2fd5af602334937b4e1", "Thomas Jentzsch", "", "Laser Base (Thomas Jentzsch)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "240", "", "" }, { "8c136e97c0a4af66da4a249561ed17db", "", "", "Poker Squares (V0.27) (2001) (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "8c2fa33048f055f38358d51eefe417db", "Home Vision - Gem International Corp.", "VCS83137", "Teddy Apple (1983) (Home Vision) (PAL)", "AKA Open Sesame", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "8c2fa33048f055f38358d51eefe417db", "Home Vision - Gem International Corp. - VDI", "VCS83137", "Teddy Apple (1983) (Home Vision) (PAL)", "AKA I Want My Mommy", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "8c36ed2352801031516695d1eeefe617", "Epyx, Steven A. Baker, Tod Frye, Peter Engelbrite", "80561-00251", "Winter Games (1987) (Epyx) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8c7e5e2329f4f4e06cbcc994a30fd352", "Data Age", "DA1004", "Airlock (1982) (Data Age) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8c8a26ed57870daba8e13162d497bad1", "HES", "", "2 Pak Special - Dolphin, Oink (1990) (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1892,7 +1892,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "8e879aa58db41edb67cbf318b77766c4", "Thomas Jentzsch", "", "Cosmic Commuter (Thomas Jentzsch) (PAL60)", "NTSC Conversion", "Hack", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "", "" }, { "8e887d1ba5f3a71ae8a0ea16a4af9fc9", "", "", "Skeleton (V1.1) (PAL) (24-10-2002) (Eric Ball)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8ed5a746c59571feb255eaa7d6d0cf98", "", "", "Carnival (208 in 1) (Unknown) (PAL) (Hack)", "", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "8ed73106e2f42f91447fb90b6f0ea4a4", "Spectravision, Spectravideo", "SA-204", "Tapeworm (1982) (Spectravision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "8ed73106e2f42f91447fb90b6f0ea4a4", "Spectravision - Spectravideo", "SA-204", "Tapeworm (1982) (Spectravision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "8ee3f64dc0f349adc893fe93df5245d8", "", "", "Euchre (20-07-2001) (Eric Eid) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8f33bce5ba1053dcf4cea9c1c69981e4", "", "", "Jawbreaker (Unknown) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8f53a3b925f0fd961d9b8c4d46ee6755", "", "", "Astrowar (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2107,7 +2107,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "a189f280521f4e5224d345efb4e75506", "Atari - Thomas Jentzsch", "", "Obelix (1983) (Thomas Jentzsch)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a1bcbe0bfe6570da2661fc4de2f74e8a", "Imagic - Advanced Program Technology, Rob Fulop", "", "Actionauts (Microbots) (1984-2008) (Imagic)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a1ca372388b6465a693e4626cc98b865", "Quelle", "176.543 7", "Der Vielfrass (1983) (Quelle) (PAL)", "AKA Fast Food", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "a1ead9c181d67859aa93c44e40f1709c", "American Videogame - Dunhill Electronics, Darrell Wagner, Todd Clark Holm, John Simonds", "", "Tax Avoiders (1982) (American Videogame)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "a1ead9c181d67859aa93c44e40f1709c", "American Videogame - Dunhill Electronics, Darrell Wagner, Todd Clark Holm, John Simonds", "", "Tax Avoiders (1986) (American Videogame)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a1f9159121142d42e63e6fb807d337aa", "Quelle - Otto Versand", "700.223 1 - 781627", "Der moderne Ritter (1983) (Quelle) (PAL)", "AKA Fast Eddie", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a204cd4fb1944c86e800120706512a64", "Coleco", "2511", "Smurfs Save the Day (1983) (Coleco)", "Uses the Kid Vid Controller", "", "", "", "", "", "", "", "", "KIDVID", "", "", "", "", "", "", "" }, { "a20b7abbcdf90fbc29ac0fafa195bd12", "Quelle - Otto Versand", "719.383 2 - 649635, 781393, 781784, 986404", "Motocross (1983) (Quelle) (PAL)", "AKA Motorcross", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2145,7 +2145,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "a47878a760f5fa3aa99f95c3fdc70a0b", "", "", "Demo Image Series #5 - Baboon (19-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a4790224bd5afabd53cbe93e46a7f241", "Activision, Bob Whitehead", "AG-019", "Sky Jinks (1982) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a47e26096de6f6487bf5dd2d1cced294", "Atari", "CX2643", "Codebreaker (1978) (Atari) (PAL)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, - { "a499d720e7ee35c62424de882a3351b6", "Sega, Phat Ho - Bally Midway - Beck-Tech", "009-01", "Up 'n Down (1984) (Sega)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "a499d720e7ee35c62424de882a3351b6", "Sega - Beck-Tech, Steve Beck, Phat Ho", "009-01", "Up 'n Down (1984) (Sega)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a4aa7630e4c0ad7ebb9837d2d81de801", "", "", "Atari 2600 Invaders (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a4ab331e8768eafdc20ce8b0411ff77a", "", "", "Demo Image Series #1 - Sam (19-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a4b9423877a0b86ca35b52ca3c994ac5", "CCE", "C-805", "Sea Monster (1983) (CCE)", "O Monstro Marinho", "", "", "", "", "", "", "", "", "", "", "", "", "", "220", "", "" }, @@ -2275,7 +2275,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "aed0b7bd64cc384f85fdea33e28daf3b", "Atari, Alan J. Murphy, Robert C. Polaro", "CX2666", "RealSports Volleyball (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "aed82052f7589df05a3f417bb4e45f0c", "Atari, Warren Robinett - Sears", "CX2606 - 6-99825, 49-75112", "Slot Racers (1978) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "af6ab88d3d7c7417db2b3b3c70b0da0a", "Activision, Larry Kaplan, David Crane", "AG-010, AG-010-04", "Kaboom! (1981) (Activision) (4K)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "01 50", "", "", "", "", "" }, - { "af6f3e9718bccfcd8afb421f96561a34", "Atari, Tod Frye", "CX2695", "Xevious (11-08-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "af6f3e9718bccfcd8afb421f96561a34", "Atari, Tod Frye", "CX2695", "Xevious (01-18-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "afb3bc45c6a82739cc82582127cd96e6", "Atari - Sculptured Software, Adam Clayton", "CX26151, CX26151P", "Dungeon (11-22-1985) (Atari) (Prototype)", "Dark Chambers Beta", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "afc194534c1b346609ef05eff6d3cef6", "Jone Yuan Telephonic Enterprise Co", "", "Boxing (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "afd2cf258d51ae4965ee21abba3627ab", "Atari - CCW, Christopher H. Omarzu", "CX26104", "Big Bird's Egg Catch (12-08-1982) (Atari) (Prototype)", "Uses the Keypad Controller", "Prototype", "", "", "", "", "", "", "KEYBOARD", "", "", "", "", "", "", "", "" }, @@ -2462,7 +2462,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "c05f367fa4767ceb27abadf0066df7f4", "", "", "TomInv (31-07-2001) (TJ)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c08d0cee43077d3055febb00e5745c1d", "HES - Activision", "", "Super Hit Pak - River Raid, Sky Jinks, Grand Prix, Fishing Derby, Checkers (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c0a68837c60e15d1fc5a40c9a62894bc", "Arcadia Corporation, Kevin Norman", "7 AR-4103", "Killer Satellites (1983) (Arcadia) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "c0d2434348de72fa6edcc6d8e40f28d7", "Sega - Bally Midway - Beck-Tech", "010-01", "Tapper (1984) (Sega)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "225", "", "" }, + { "c0d2434348de72fa6edcc6d8e40f28d7", "Sega - Beck-Tech, Steve Beck", "010-01", "Tapper (1984) (Sega)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "225", "", "" }, { "c118854d670289a8b5d5156aa74b0c49", "Jone Yuan Telephonic Enterprise Co", "", "Skiing (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c126656df6badfa519cc63e681fb3596", "Ron Corcoran", "", "Space Invaders (2002) (Ron Corcoran) (Hack)", "Hack of Space Invaders", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c150c76cbde2c9b5a97eb5399d46c64f", "", "", "Unknown Title (xxx00000 (200203)) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2540,7 +2540,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "c5dd8399257d8862f3952be75c23e0eb", "Atari - GCC", "CX2680", "RealSports Tennis (1982) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c5fe45f2734afd47e27ca3b04a90213c", "Atari, Brad Stewart", "CX2622, CX2622P", "Breakout (1978) (Atari) (PAL) (4K)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "01", "", "", "", "", "" }, { "c63a98ca404aa5ee9fcff1de488c3f43", "Atari", "CX26145", "Venture (1987) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "c6556e082aac04260596b4045bc122de", "Atari - GCC, Dave Payne", "CX2669", "Vanguard (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "c6556e082aac04260596b4045bc122de", "Atari - GCC, Dave Payne", "CX2669", "Vanguard (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c6688781f4ab844852f4e3352772289b", "Atari, Tod Frye", "CX2695", "Xevious (08-02-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "c67ff409f28f44883bd5251cea79727d", "", "", "Gunfight 2600 - Music & Bugfixes 1 (2001) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c689148ad9275667924ab334107b517e", "Jone Yuan Telephonic Enterprise Co", "", "Space Raid (Jone Yuan)", "AKA MegaMania", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2557,14 +2557,14 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "c74bfd02c7f1877bbe712c1da5c4c194", "Thomas Jentzsch", "", "River Raid Tanks (Thomas Jentzsch) (Hack)", "Hack of River Raid", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c7600d72247c5dfa1ec1a88d23e6c85e", "Arcadia Corporation, Scott Nelson", "13", "Sweat! - The Decathlon Game (1 of 3) (1983) (Arcadia) (Prototype)", "Uses the Paddle Controllers (left only)", "Prototype", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "", "" }, { "c77c35a6fc3c0f12bf9e8bae48cba54b", "Xonox - K-Tel Software - Action Graphics, John Perkins, David Thiel", "6230, 7210, 06004, 99004", "Artillery Duel (1983) (Xonox)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "c77d3b47f2293e69419b92522c6f6647", "Panda", "101", "Tank Brigade (1983) (Panda)", "AKA Phantom Tank", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "c77d3b47f2293e69419b92522c6f6647", "Panda", "101", "Tank Brigade (1983) (Panda)", "AKA Tanks But No Tanks", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c7900a7fe95a47eef3b325072ad2c232", "Larry Petit", "", "Super Congo Bongo (2003) (Larry Petit) (Hack)", "Hack of Bongo", "Hack", "", "", "", "", "", "", "", "", "", "", "", "34", "", "", "" }, { "c7d5819b26b480a49eb26aeb63cc831e", "Bit Corporation", "PGP210", "Ice Hockey (4 Game in One Light Green) (1983) (BitCorp) (PAL)", "AKA Hockey, Hockey", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c7e43ad79c5e5c029d9f5ffde23e32cf", "", "", "PAL-NTSC Detector (15-11-2002) (CT)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c7eab66576696e11e3c11ffff92e13cc", "Atari - GCC", "CX2680, CX2680P", "RealSports Tennis (1983) (Atari) (PAL) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c7f13ef38f61ee2367ada94fdcc6d206", "Parker Brothers, Joe Gaucher", "PB5370", "Popeye (1983) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "c82ec00335cbb4b74494aecf31608fa1", "CCE", "", "E.T. - The Extra-Terrestrial (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "c830f6ae7ee58bcc2a6712fb33e92d55", "Atari, Carla Meninsky", "CX2687", "Tempest (01-05-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "c830f6ae7ee58bcc2a6712fb33e92d55", "Atari, Michael Kosaka, Carla Meninsky", "CX2687", "Tempest (01-05-1984) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c866c995c0d2ca7d017fef0fc0c2e268", "Retroactive", "", "Qb (2.00) (Retroactive) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "c880c659cdc0f84c4a66bc818f89618e", "Thomas Jentzsch", "", "Open Sesame (Thomas Jentzsch)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "20", "254", "YES", "" }, { "c8c7da12f087e8d16d3e6a21b371a5d3", "", "", "Demo Image Series #9 - Genius (28-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2727,7 +2727,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "d3bb42228a6cd452c111c1932503cc03", "UA Limited", "", "Funky Fish (1983) (UA Limited) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "220", "YES", "" }, { "d44d90e7c389165f5034b5844077777f", "Parker Brothers, Larry Gelberg", "PB5065", "Star Wars - Ewok Adventure (1983) (Parker Bros) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, { "d45bf71871b196022829aa3b96bfcfd4", "Activision, Steve Cartwright", "AX-017, AX-017-04", "MegaMania (1982) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "d45ebf130ed9070ea8ebd56176e48a38", "Sega", "001-01", "Tac-Scan (1982) (Sega)", "Uses the Paddle Controllers (right only)", "", "", "", "", "", "", "YES", "PADDLES", "", "YES", "AUTO 60", "", "", "215", "YES", "" }, + { "d45ebf130ed9070ea8ebd56176e48a38", "Sega, Jeff Lorenz", "001-01", "Tac-Scan (1983) (Sega)", "Uses the Paddle Controllers (right only)", "", "", "", "", "", "", "YES", "PADDLES", "", "YES", "AUTO 60", "", "31", "215", "YES", "" }, { "d47387658ed450db77c3f189b969cc00", "PlayAround - J.H.M.", "206", "Westward Ho (1982) (PlayAround) (PAL)", "AKA Custer's Revenge", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d4806775693fcaaa24cf00fc00edcdf3", "Atari - Bobco, Robert C. Polaro", "CX26140, CX26140P", "Desert Falcon (1987) (Atari) (PAL)", "AKA Nile Flyer, Sphinx", "", "", "", "", "", "", "", "", "", "", "", "PAL", "", "", "", "" }, { "d483f65468d9a265661917bae1a54f3e", "Joe Grand", "", "SCSIcide Pre-release 3 (Joe Grand)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2861,7 +2861,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "de1e9fb700baf8d2e5ae242bffe2dbda", "Activision - Imagineering, Mike Reidel", "EAK-043-04I", "Commando (1988) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "de24f700fd28d5b8381de13abd091db9", "CCE", "", "Plaque Attack (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "de29e46dbea003c3c09c892d668b9413", "Coleco - Woodside Design Associates, Steve 'Jessica Stevens' Kitchen", "4L1717, 4L1718, 4L1719, 4L2277", "Carnival (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "de3d0e37729d85afcb25a8d052a6e236", "Spectravision, Spectravideo", "SA-204", "Tapeworm (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "de3d0e37729d85afcb25a8d052a6e236", "Spectravision - Spectravideo", "SA-204", "Tapeworm (1982) (Spectravision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "de4436eaa41e5d7b7609512632b90078", "Activision, David Crane", "AX-014, AX-014-04", "Grand Prix (1982) (Activision) (16K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "de5aab22e5aba5edcb29a3e7491ff319", "Star Game", "001", "Donkey Kong (Star Game)", "AKA Inca Gold", "", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, { "de61a0b171e909a5a4cfcf81d146dbcb", "Rainbow Vision - Suntek", "SS-005", "Tom Boy (Rainbow Vision) (PAL)", "AKA Pitfall!", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2892,13 +2892,13 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "dfe6aa7443bb813cefa35a4cf4887422", "", "", "This Planet Sucks (Greg Troutman) [a1]", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "36", "", "", "" }, { "dff33523ccd2fdc8912e84cab8e0d982", "", "", "Fu Kung! (V0.03) (10-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e01e00504e6d4b88fa743c0bbe8a96e5", "", "", "Qb (Special Edition, some bugfixes) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "e020f612255e266a8a6a9795a4df0c0f", "Telegames", "7062 A305", "Universal Chaos (1988) (Telegames) (PAL)", "AKA Targ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "e020f612255e266a8a6a9795a4df0c0f", "Telegames - VSS", "7062 A305", "Universal Chaos (1988) (Telegames) (PAL)", "AKA Targ", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e02156294393818ff872d4314fc2f38e", "Sancho - Tang's Electronic Co.", "TEC005", "Dice Puzzle (1983) (Sancho) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "e0221c95aa657f5764eeeb64c8429258", "", "", "Tomb Raider 2600 [REV 02] (Montezuma's Revenge Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e03b0b091bea5bc9d3f14ee0221e714d", "CBS Electronics, Bob Curtiss", "4L1852, 4L1853, 4L1854, 4L1855", "Solar Fox (1983) (CBS Electronics) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e040df95a055b18ebdb094e904cb71b2", "", "", "Score Demo (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e04f1c1e4401d584d3f4343410a5bcc4", "Wizard Video Games - MicroGraphic Image, Robert Barber, Tim Martin", "007", "Halloween (1983) (Wizard Video Games) (Prototype) [a]", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e0b24c3f40a46cda52e29835ab7ad660", "Quelle", "626.502 9 - 746381", "Top Gun (1983) (Quelle) (PAL)", "AKA Air Raiders", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "e0b24c3f40a46cda52e29835ab7ad660", "Quelle - Otto Versand", "626.502 9 - 746381", "Top Gun (1983) (Quelle) (PAL)", "AKA Air Raiders", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e0cf2dcc4c1348c468f5bb1e421c9164", "", "", "Invader Sprites in a Line Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e0de3773f5b867795db557be7b8a703e", "", "", "Boulderdash (13 Blocks Wide) (02-04-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e0eff071f578ecf19edc2ab276644e46", "", "", "Gas Gauge Demo (2001) (Joe Grand) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3043,7 +3043,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "eada0dd61ce13f8317de774dc1e68604", "", "", "2600 Digital Clock (Demo 1) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "eae0c06ee61c63b81cd016096fc901b0", "Joe Grand", "", "SCSIcide (v1.0) (2001) (Joe Grand)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "eae6a5510055341d3abeb45667bb3e9b", "HES", "", "Wall Defender (HES) (PAL)", "AKA Wall Break", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "eaf744185d5e8def899950ba7c6e7bb5", "Atari", "CX26172", "Xenophobe (1990) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "eaf744185d5e8def899950ba7c6e7bb5", "Atari", "CX26172", "Xenophobe (1991) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "eafe8b40313a65792e88ff9f2fe2655c", "Eric Ball", "ELB004", "Skeleton+ (NTSC)", "Stereo sound", "Homebrew", "STEREO", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "eb3d680699f8762f71f38e28e321234d", "", "", "Fu Kung! (V0.01) (08-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "eb4252faff7a4f2ba5284a98b8f78d1a", "", "", "John K Harvey's Equalizer (NTSC) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -3062,7 +3062,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "ebf2dff78a08733251bf3838f02f7938", "Commavid, Ben Burch", "CM-010", "Rush Hour (1983) (Commavid) (Prototype) [a2]", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "23", "240", "", "" }, { "ebf9038e927e6a0db3e0d170c59911e6", "", "", "Pac-2600 (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ec26fdc87b1d35f1d60ea89cda4f4dd4", "", "", "Star Fire - Crash Scene (04-11-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "ec3beb6d8b5689e867bafb5d5f507491", "U.S. Games Corporation, Henry Will IV - Vidtec", "VC1003", "Word Zapper (1982) (U.S. Games)", "AKA Word Grabber", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "ec3beb6d8b5689e867bafb5d5f507491", "U.S. Games Corporation - Vidtec - JWDA, Todd Marshall, Henry Will IV", "VC1003", "Word Zapper (1982) (U.S. Games)", "AKA Word Grabber", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ec407a206b718a0a9f69b03e920a0185", "Quelle", "876.482 1", "Landung in der Normandie (1983) (Quelle) (PAL)", "AKA Commando Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ec5c861b487a5075876ab01155e74c6c", "Apollo - Games by Apollo, Ed Salvo, Byron Parks", "AP-2001", "Spacechase (1982) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ece463abde92e8b89bcd867ec71751b8", "Puzzy - Bit Corporation", "PG205", "Dancing Plate (1982) (Puzzy) (PAL)", "AKA Dishaster", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -3094,7 +3094,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "ee8027d554d14c8d0b86f94737d2fdcc", "Canal 3 - Intellivision", "", "Yars' Revenge (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "ee84bdc5dae268e227e407c7b5e6b6b7", "", "", "Marilyn Monroe Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ee9caee4eb958284fb10c277b14537f1", "Carrere Video, Garry Kitchen - Teldec", "USC1001", "Space Jockey (1983) (Carrere Video) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "59", "", "", "" }, - { "eea0da9b987d661264cce69a7c13c3bd", "Coleco", "2454", "Zaxxon (1982) (Coleco)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "eea0da9b987d661264cce69a7c13c3bd", "Coleco", "2454", "Zaxxon (1983) (Coleco)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "eeb92f3f46df841487d1504f2896d61a", "Cody Pittman", "", "Corys Adventure (Cody Pittman) (Hack)", "Hack of Pac-Man", "Hack", "", "", "", "", "", "", "", "", "", "", "", "33", "", "", "" }, { "eec61cc4250df70939d48fe02d7122ac", "Activision, Bob Whitehead - Ariola", "EAG-005, PAG-005, EAG-005-04B - 711 005-715", "Skiing (1980) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "eed9eaf1a0b6a2b9bc4c8032cb43e3fb", "Atari - Axlon, Steve DeFrisco", "CX26192", "Klax (1991) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3110,7 +3110,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "efd387430a35a659ff569a9a0ec22209", "Atari - GCC", "CX26118", "Millipede (1984) (Atari) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "efefc02bbc5258815457f7a5b8d8750a", "CBS Electronics, Richard K. Balaska Jr.", "4L 2520 5000", "Tunnel Runner (1983) (CBS Electronics) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "efffafc17b7cb01b9ca35324aa767364", "", "", "Circus Atari (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "f02ba8b5292bf3017d10553c9b7b2861", "Atari", "CX26172", "Xenophobe (1990) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "f02ba8b5292bf3017d10553c9b7b2861", "Atari", "CX26172", "Xenophobe (1991) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f032b2f2d8323404a6b4541f92dd1825", "", "", "Many Blue Bars and Text Demo 3 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f047df70d3d08e331122cd2de61d6af8", "Dave Neuman", "", "Space Battle (NTSC)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f04ee80011d95798006378643650aaa7", "Atari, Bill Aspromonte, John Russell, Michael Sierchio, Robert Zdybel", "CX26114", "Pigs in Space (1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3263,7 +3263,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f9e99596345a84358bc5d1fbe877134b", "Activision, Larry Kaplan, David Crane - Ariola", "EAG-010, PAG-010 - 711 010-720", "Kaboom! (1981) (Activision) (PAL)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "01 50", "", "", "", "", "" }, { "fa0570561aa80896f0ead05c46351389", "Tigervision", "7-008", "Miner 2049er (1983) (Tigervision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "28", "214", "", "" }, { "fa1b060fd8e0bca0c2a097dcffce93d3", "Atari - CCW, Christopher H. Omarzu, Preston Stuart, Bruce Williams", "CX26101", "Oscar's Trash Race (1984) (Atari)", "Uses the Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, - { "fa2be8125c3c60ab83e1c0fe56922fcb", "DSD-Camelot - Johnson & Johnson, Michael Doherty, Clyde Hager", "", "Tooth Protectors (1983) (DSD-Camelot)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "fa2be8125c3c60ab83e1c0fe56922fcb", "Camelot - DSD, Michael Doherty, Clyde Hager - Johnson & Johnson", "", "Tooth Protectors (1983) (Camelot)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "fa3de71841c0841db6a741884a6b6b2f", "", "", "Warring Worms (17-02-2002) (Billy Eno)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fa4404fabc094e3a31fcd7b559cdd029", "Atari, Alan J. Murphy, Robert C. Polaro", "CX26100", "Bugs Bunny (1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fa529ec88eca679f6d5fd0ccb2120e46", "", "", "20 Sprites at Once Demo 1 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3282,7 +3282,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "fb09ee4ccd47ae74a3c314f0d8a40344", "", "", "Titans (SnailSoft)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fb0c32ef7af5b45486db663510094be8", "", "", "Demo Image Series #15 - Three Marios (NTSC) (Non-Interleave) (06-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fb0e84cee4c108d24253bcb7e382cffd", "", "", "Interleaved ChronoColour Demo (SECAM) (05-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "fb27afe896e7c928089307b32e5642ee", "M Network, Jeff Ronne, Brett Stutz - INTV", "MT5662", "TRON - Deadly Discs (1982) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "fb27afe896e7c928089307b32e5642ee", "M Network - APh Technological Consulting, Jeff Ronne, Brett Stutz - INTV", "MT5662", "TRON - Deadly Discs (1983) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fb4ca865abc02d66e39651bd9ade140a", "Arcadia Corporation, Brian McGhie", "AR-4104", "Rabbit Transit (1983) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fb531febf8e155328ec0cd39ef77a122", "", "", "Worm War I (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "fb5c8af97bd8ffe88323656f462645a7", "", "", "Interlace Demo (Glenn Saunders)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -3297,7 +3297,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "fbd6102e17a5c02c6e1911381b7203f9", "", "", "Star Fire - Warping!! (10-04-2003) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fbe554aa8f759226d251ba6b64a9cce4", "Atari - GCC, Mike Feinstein, Brad Rice", "CX2681, CX2681P", "Battlezone (1983) (Atari) (PAL)", "", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fbfebee9c14694719e3eda4854dc42ee", "Jake Patterson", "", "Baubles 3 (Jake Patterson) (PD)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "fc2104dd2dadf9a6176c1c1c8f87ced9", "Coleco, Harley H. Puthuff Jr.", "2663", "Time Pilot (1983) (Coleco)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "fc2104dd2dadf9a6176c1c1c8f87ced9", "Coleco - Woodside Design Associates, Harley H. Puthuff Jr.", "2663", "Time Pilot (1983) (Coleco)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fc2233fc116faef0d3c31541717ca2db", "Atari, Tod Frye", "CX2646", "Pac-Man (1982) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fc24a94d4371c69bc58f5245ada43c44", "Atari - Axlon, Steve DeFrisco", "CX26170", "Secret Quest (1989) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fc6052438f339aea373bbc999433388a", "Atari, David Crane", "CX2653P", "Slot Machine (1979) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, diff --git a/src/emucore/stella.pro b/src/emucore/stella.pro index 12ea0d7c8..90ff27032 100644 --- a/src/emucore/stella.pro +++ b/src/emucore/stella.pro @@ -337,7 +337,7 @@ "" "Cartridge.MD5" "04b488d4eef622d022a0021375e7e339" -"Cartridge.Manufacturer" "Home Vision - Gem International Corp." +"Cartridge.Manufacturer" "Home Vision - Gem International Corp. - VDI" "Cartridge.ModelNo" "VCS83107" "Cartridge.Name" "Tennis (1983) (Home Vision) (PAL) (4K)" "" @@ -823,7 +823,7 @@ "" "Cartridge.MD5" "0aa208060d7c140f20571e3341f5a3f8" -"Cartridge.Manufacturer" "U.S. Games Corporation, Jeff Corsiglia, Paul Allen Newell" +"Cartridge.Manufacturer" "U.S. Games Corporation - Western Technologies, Jeff Corsiglia, Paul Allen Newell, Tom Sloper" "Cartridge.ModelNo" "VC1009" "Cartridge.Name" "Towering Inferno (1982) (U.S. Games)" "Cartridge.Note" "Uses the Joystick Controllers (swapped)" @@ -1495,7 +1495,7 @@ "" "Cartridge.MD5" "130c5742cd6cbe4877704d733d5b08ca" -"Cartridge.Manufacturer" "Home Vision - Gem International Corp." +"Cartridge.Manufacturer" "Home Vision - Gem International Corp. - VDI" "Cartridge.ModelNo" "VCS83109" "Cartridge.Name" "World End (1983) (Home Vision) (PAL)" "" @@ -2107,10 +2107,10 @@ "" "Cartridge.MD5" "1a613ce60fc834d4970e1e674b9196b3" -"Cartridge.Manufacturer" "Home Vision - Gem International Corp." +"Cartridge.Manufacturer" "Home Vision - Gem International Corp. - VDI" "Cartridge.ModelNo" "VCS83135" "Cartridge.Name" "Tanks War (1983) (Home Vision) (PAL)" -"Cartridge.Note" "AKA Phantom Tank" +"Cartridge.Note" "AKA Tanks But No Tanks" "" "Cartridge.MD5" "1a624e236526c4c8f31175e9c89b2a22" @@ -2530,7 +2530,7 @@ "Cartridge.Manufacturer" "Quelle" "Cartridge.ModelNo" "685.996 1" "Cartridge.Name" "Teller-Jonglieren! (1983) (Quelle) (PAL)" -"Cartridge.Note" "AKA Dancing Plate" +"Cartridge.Note" "AKA Dishaster" "Display.Phosphor" "YES" "" @@ -2955,7 +2955,7 @@ "Cartridge.MD5" "25bb080457351be724aac8a02021aa92" "Cartridge.Manufacturer" "CBS Electronics" "Cartridge.ModelNo" "4L1784, 4L1786, 4L1787, 4L2277" -"Cartridge.Name" "Zaxxon (1982) (CBS Electronics) (PAL)" +"Cartridge.Name" "Zaxxon (1983) (CBS Electronics) (PAL)" "" "Cartridge.MD5" "25d4be3309b89583c6b39d9f93bf654f" @@ -3614,7 +3614,7 @@ "" "Cartridge.MD5" "2d6741cda3000230f6bbdd5e31941c01" -"Cartridge.Manufacturer" "CBS Electronics" +"Cartridge.Manufacturer" "CBS Electronics - VSS" "Cartridge.ModelNo" "80110" "Cartridge.Name" "Targ (1983) (CBS Electronics) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -4088,7 +4088,7 @@ "" "Cartridge.MD5" "32dcd1b535f564ee38143a70a8146efe" -"Cartridge.Manufacturer" "Xonox - K-Tel Software, Anthony R. Henderson" +"Cartridge.Manufacturer" "Xonox - K-Tel Software - Product Guild, Anthony R. Henderson" "Cartridge.ModelNo" "99007, 6240" "Cartridge.Name" "Tomarc the Barbarian (1983) (Xonox)" "Cartridge.Note" "AKA Thundarr the Barbarian" @@ -4193,7 +4193,7 @@ "Cartridge.MD5" "345758747b893e4c9bdde8877de47788" "Cartridge.Manufacturer" "CBS Electronics, Joseph Biel" "Cartridge.ModelNo" "4L1802, 4L1803, 4L1804, 4L2278" -"Cartridge.Name" "Venture (1982) (CBS Electronics) (PAL)" +"Cartridge.Name" "Venture (1983) (CBS Electronics) (PAL)" "Display.Phosphor" "YES" "" @@ -4912,7 +4912,7 @@ "Cartridge.MD5" "3caa902ac0ce4509308990645876426a" "Cartridge.Manufacturer" "Atari - GCC, Dave Payne" "Cartridge.ModelNo" "CX2669, CX2669P" -"Cartridge.Name" "Vanguard (1982) (Atari) (PAL)" +"Cartridge.Name" "Vanguard (1983) (Atari) (PAL)" "" "Cartridge.MD5" "3cbdf71bb9fd261fbc433717f547d738" @@ -5374,7 +5374,7 @@ "Cartridge.MD5" "4209e9dcdf05614e290167a1c033cfd2" "Cartridge.Manufacturer" "CommaVid, John Bronstein" "Cartridge.ModelNo" "CM-002" -"Cartridge.Name" "Video Life (1981) (CommaVid) [higher sounds]" +"Cartridge.Name" "Video Life (1984) (CommaVid) [higher sounds]" "Display.Phosphor" "YES" "" @@ -5927,7 +5927,7 @@ "Cartridge.MD5" "497f3d2970c43e5224be99f75e97cbbb" "Cartridge.Manufacturer" "CommaVid, John Bronstein" "Cartridge.ModelNo" "CM-002" -"Cartridge.Name" "Video Life (1981) (CommaVid)" +"Cartridge.Name" "Video Life (1984) (CommaVid)" "Display.Phosphor" "YES" "" @@ -6252,9 +6252,9 @@ "" "Cartridge.MD5" "4d8396deeabb40b5e8578276eb5a8b6d" -"Cartridge.Manufacturer" "Quelle" +"Cartridge.Manufacturer" "Otto Versand" "Cartridge.ModelNo" "781698" -"Cartridge.Name" "Volleyball (1983) (Quelle) (PAL)" +"Cartridge.Name" "Volleyball (1983) (Otto Versand) (PAL)" "Cartridge.Note" "AKA RealSports Volleyball (Double-Game Package)" "" @@ -6301,6 +6301,7 @@ "Cartridge.Manufacturer" "Imagic, Michael Greene" "Cartridge.ModelNo" "EIZ-002-04I" "Cartridge.Name" "Wing War (1983) (Imagic) (PAL)" +"Cartridge.Note" "AKA Flap!" "" "Cartridge.MD5" "4e15ddfd48bca4f0bf999240c47b49f5" @@ -7081,7 +7082,7 @@ "" "Cartridge.MD5" "5961d259115e99c30b64fe7058256bcf" -"Cartridge.Manufacturer" "Universal Gamex Corporation, Alan Roberts, H.K. Poon" +"Cartridge.Manufacturer" "Universal Gamex Corporation, Miguel Castillo, H.K. Poon" "Cartridge.ModelNo" "GX-001" "Cartridge.Name" "X-Man (1983) (Universal)" "" @@ -7534,7 +7535,7 @@ "" "Cartridge.MD5" "5e201d6bfc520424a28f129ee5e56835" -"Cartridge.Manufacturer" "Universal Gamex Corporation, Alan Roberts, H.K. Poon" +"Cartridge.Manufacturer" "Universal Gamex Corporation, Miguel Castillo, H.K. Poon" "Cartridge.ModelNo" "GX-001" "Cartridge.Name" "X-Man (1983) (Universal) (PAL)" "" @@ -7563,7 +7564,7 @@ "" "Cartridge.MD5" "5eeb81292992e057b290a5cd196f155d" -"Cartridge.Manufacturer" "Wizard Video Games, Ed Salvo" +"Cartridge.Manufacturer" "Wizard Video Games - VSS, Ed Salvo" "Cartridge.ModelNo" "008" "Cartridge.Name" "Texas Chainsaw Massacre, The (1983) (Wizard Video)" "" @@ -8098,7 +8099,7 @@ "" "Cartridge.MD5" "6522717cfd75d1dba252cbde76992090" -"Cartridge.Manufacturer" "Home Vision - Gem International Corp." +"Cartridge.Manufacturer" "Home Vision - Gem International Corp. - VDI" "Cartridge.ModelNo" "VCS83102" "Cartridge.Name" "War 2000 (1983) (Home Vision) (PAL)" "Cartridge.Note" "AKA Astrowar" @@ -8192,7 +8193,7 @@ "" "Cartridge.MD5" "663ef22eb399504d5204c543b8a86bcd" -"Cartridge.Manufacturer" "CBS Electronics, Joe Hellesen" +"Cartridge.Manufacturer" "CBS Electronics - Roklan, Joe Hellesen, Joe Wagner" "Cartridge.ModelNo" "4L1720, 4L1721, 4L1722, 4L2276" "Cartridge.Name" "Wizard of Wor (1982) (CBS Electronics) (PAL)" "Cartridge.Note" "Uses the Joystick Controllers (swapped)" @@ -9378,7 +9379,7 @@ "" "Cartridge.MD5" "7454786af7126ccc7a0c31fcf5af40f1" -"Cartridge.Name" "Phantom Tank (Unknown) (PAL)" +"Cartridge.Name" "Tanks But No Tanks (Unknown) (PAL)" "" "Cartridge.MD5" "7465b06b6e25a4a6c6d77d02242af6d6" @@ -9478,7 +9479,7 @@ "Cartridge.MD5" "7574480ae2ab0d282c887e9015fdb54c" "Cartridge.Manufacturer" "Atari, Jerome Domurat, Steve Woita" "Cartridge.ModelNo" "CX2699" -"Cartridge.Name" "Taz (1983) (Atari)" +"Cartridge.Name" "Taz (1984) (Atari)" "" "Cartridge.MD5" "7576dd46c2f8d8ab159d97e3a3f2052f" @@ -9836,7 +9837,7 @@ "" "Cartridge.MD5" "7a5463545dfb2dcfdafa6074b2f2c15e" -"Cartridge.Manufacturer" "20th Century Fox Video Games, Mark Turmell" +"Cartridge.Manufacturer" "20th Century Fox Video Games - Sirius Software, Mark Turmell" "Cartridge.ModelNo" "11007" "Cartridge.Name" "Turmoil (1982) (20th Century Fox)" "" @@ -10211,7 +10212,7 @@ "" "Cartridge.MD5" "7e8aa18bc9502eb57daaf5e7c1e94da7" -"Cartridge.Manufacturer" "CBS Electronics" +"Cartridge.Manufacturer" "CBS Electronics - Roklan, Joe Hellesen, Joe Wagner" "Cartridge.ModelNo" "M8774, M8794" "Cartridge.Name" "Wizard of Wor (1982) (CBS Electronics)" "Cartridge.Note" "Uses the Joystick Controllers (swapped)" @@ -10413,7 +10414,7 @@ "" "Cartridge.MD5" "807841df228ee8aab0a06ee639ce5a8a" -"Cartridge.Manufacturer" "Coleco, Michael Green, Anthony R. Henderson, Gary Littleton" +"Cartridge.Manufacturer" "Coleco - Project Guild - GMA, Michael Green, Anthony R. Henderson, Gary Littleton" "Cartridge.ModelNo" "2455" "Cartridge.Name" "Turbo (1982) (Coleco) (Prototype)" "Cartridge.Note" "Prototype" @@ -10549,7 +10550,7 @@ "" "Cartridge.MD5" "81a010abdba1a640f7adf7f84e13d307" -"Cartridge.Manufacturer" "Telegames" +"Cartridge.Manufacturer" "Telegames - VSS" "Cartridge.ModelNo" "7062 A305" "Cartridge.Name" "Universal Chaos (1988) (Telegames)" "Cartridge.Note" "AKA Targ" @@ -11327,10 +11328,10 @@ "" "Cartridge.MD5" "8c2fa33048f055f38358d51eefe417db" -"Cartridge.Manufacturer" "Home Vision - Gem International Corp." +"Cartridge.Manufacturer" "Home Vision - Gem International Corp. - VDI" "Cartridge.ModelNo" "VCS83137" "Cartridge.Name" "Teddy Apple (1983) (Home Vision) (PAL)" -"Cartridge.Note" "AKA Open Sesame" +"Cartridge.Note" "AKA I Want My Mommy" "Display.Phosphor" "YES" "" @@ -11509,7 +11510,7 @@ "" "Cartridge.MD5" "8ed73106e2f42f91447fb90b6f0ea4a4" -"Cartridge.Manufacturer" "Spectravision, Spectravideo" +"Cartridge.Manufacturer" "Spectravision - Spectravideo" "Cartridge.ModelNo" "SA-204" "Cartridge.Name" "Tapeworm (1982) (Spectravision) (PAL)" "Display.Phosphor" "YES" @@ -12804,7 +12805,7 @@ "Cartridge.MD5" "a1ead9c181d67859aa93c44e40f1709c" "Cartridge.Manufacturer" "American Videogame - Dunhill Electronics, Darrell Wagner, Todd Clark Holm, John Simonds" -"Cartridge.Name" "Tax Avoiders (1982) (American Videogame)" +"Cartridge.Name" "Tax Avoiders (1986) (American Videogame)" "" "Cartridge.MD5" "a1f9159121142d42e63e6fb807d337aa" @@ -13028,7 +13029,7 @@ "" "Cartridge.MD5" "a499d720e7ee35c62424de882a3351b6" -"Cartridge.Manufacturer" "Sega, Phat Ho - Bally Midway - Beck-Tech" +"Cartridge.Manufacturer" "Sega - Beck-Tech, Steve Beck, Phat Ho" "Cartridge.ModelNo" "009-01" "Cartridge.Name" "Up 'n Down (1984) (Sega)" "" @@ -13821,7 +13822,7 @@ "Cartridge.MD5" "af6f3e9718bccfcd8afb421f96561a34" "Cartridge.Manufacturer" "Atari, Tod Frye" "Cartridge.ModelNo" "CX2695" -"Cartridge.Name" "Xevious (11-08-1984) (Atari) (Prototype)" +"Cartridge.Name" "Xevious (01-18-1984) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" "" @@ -14974,7 +14975,7 @@ "" "Cartridge.MD5" "c0d2434348de72fa6edcc6d8e40f28d7" -"Cartridge.Manufacturer" "Sega - Bally Midway - Beck-Tech" +"Cartridge.Manufacturer" "Sega - Beck-Tech, Steve Beck" "Cartridge.ModelNo" "010-01" "Cartridge.Name" "Tapper (1984) (Sega)" "Display.Height" "225" @@ -15464,7 +15465,7 @@ "Cartridge.MD5" "c6556e082aac04260596b4045bc122de" "Cartridge.Manufacturer" "Atari - GCC, Dave Payne" "Cartridge.ModelNo" "CX2669" -"Cartridge.Name" "Vanguard (1982) (Atari)" +"Cartridge.Name" "Vanguard (1983) (Atari)" "" "Cartridge.MD5" "c6688781f4ab844852f4e3352772289b" @@ -15578,7 +15579,7 @@ "Cartridge.Manufacturer" "Panda" "Cartridge.ModelNo" "101" "Cartridge.Name" "Tank Brigade (1983) (Panda)" -"Cartridge.Note" "AKA Phantom Tank" +"Cartridge.Note" "AKA Tanks But No Tanks" "" "Cartridge.MD5" "c7900a7fe95a47eef3b325072ad2c232" @@ -15619,7 +15620,7 @@ "" "Cartridge.MD5" "c830f6ae7ee58bcc2a6712fb33e92d55" -"Cartridge.Manufacturer" "Atari, Carla Meninsky" +"Cartridge.Manufacturer" "Atari, Michael Kosaka, Carla Meninsky" "Cartridge.ModelNo" "CX2687" "Cartridge.Name" "Tempest (01-05-1984) (Atari) (Prototype)" "Cartridge.Rarity" "Prototype" @@ -16646,14 +16647,15 @@ "" "Cartridge.MD5" "d45ebf130ed9070ea8ebd56176e48a38" -"Cartridge.Manufacturer" "Sega" +"Cartridge.Manufacturer" "Sega, Jeff Lorenz" "Cartridge.ModelNo" "001-01" -"Cartridge.Name" "Tac-Scan (1982) (Sega)" +"Cartridge.Name" "Tac-Scan (1983) (Sega)" "Cartridge.Note" "Uses the Paddle Controllers (right only)" "Console.SwapPorts" "YES" "Controller.Left" "PADDLES" "Controller.SwapPaddles" "YES" "Controller.MouseAxis" "AUTO 60" +"Display.YStart" "31" "Display.Height" "215" "Display.Phosphor" "YES" "" @@ -17444,7 +17446,7 @@ "" "Cartridge.MD5" "de3d0e37729d85afcb25a8d052a6e236" -"Cartridge.Manufacturer" "Spectravision, Spectravideo" +"Cartridge.Manufacturer" "Spectravision - Spectravideo" "Cartridge.ModelNo" "SA-204" "Cartridge.Name" "Tapeworm (1982) (Spectravision)" "Display.Phosphor" "YES" @@ -17637,7 +17639,7 @@ "" "Cartridge.MD5" "e020f612255e266a8a6a9795a4df0c0f" -"Cartridge.Manufacturer" "Telegames" +"Cartridge.Manufacturer" "Telegames - VSS" "Cartridge.ModelNo" "7062 A305" "Cartridge.Name" "Universal Chaos (1988) (Telegames) (PAL)" "Cartridge.Note" "AKA Targ" @@ -17672,7 +17674,7 @@ "" "Cartridge.MD5" "e0b24c3f40a46cda52e29835ab7ad660" -"Cartridge.Manufacturer" "Quelle" +"Cartridge.Manufacturer" "Quelle - Otto Versand" "Cartridge.ModelNo" "626.502 9 - 746381" "Cartridge.Name" "Top Gun (1983) (Quelle) (PAL)" "Cartridge.Note" "AKA Air Raiders" @@ -18567,7 +18569,7 @@ "Cartridge.MD5" "eaf744185d5e8def899950ba7c6e7bb5" "Cartridge.Manufacturer" "Atari" "Cartridge.ModelNo" "CX26172" -"Cartridge.Name" "Xenophobe (1990) (Atari)" +"Cartridge.Name" "Xenophobe (1991) (Atari)" "" "Cartridge.MD5" "eafe8b40313a65792e88ff9f2fe2655c" @@ -18684,7 +18686,7 @@ "" "Cartridge.MD5" "ec3beb6d8b5689e867bafb5d5f507491" -"Cartridge.Manufacturer" "U.S. Games Corporation, Henry Will IV - Vidtec" +"Cartridge.Manufacturer" "U.S. Games Corporation - Vidtec - JWDA, Todd Marshall, Henry Will IV" "Cartridge.ModelNo" "VC1003" "Cartridge.Name" "Word Zapper (1982) (U.S. Games)" "Cartridge.Note" "AKA Word Grabber" @@ -18883,7 +18885,7 @@ "Cartridge.MD5" "eea0da9b987d661264cce69a7c13c3bd" "Cartridge.Manufacturer" "Coleco" "Cartridge.ModelNo" "2454" -"Cartridge.Name" "Zaxxon (1982) (Coleco)" +"Cartridge.Name" "Zaxxon (1983) (Coleco)" "" "Cartridge.MD5" "eeb92f3f46df841487d1504f2896d61a" @@ -18979,7 +18981,7 @@ "Cartridge.MD5" "f02ba8b5292bf3017d10553c9b7b2861" "Cartridge.Manufacturer" "Atari" "Cartridge.ModelNo" "CX26172" -"Cartridge.Name" "Xenophobe (1990) (Atari) (PAL)" +"Cartridge.Name" "Xenophobe (1991) (Atari) (PAL)" "" "Cartridge.MD5" "f032b2f2d8323404a6b4541f92dd1825" @@ -19934,8 +19936,8 @@ "" "Cartridge.MD5" "fa2be8125c3c60ab83e1c0fe56922fcb" -"Cartridge.Manufacturer" "DSD-Camelot - Johnson & Johnson, Michael Doherty, Clyde Hager" -"Cartridge.Name" "Tooth Protectors (1983) (DSD-Camelot)" +"Cartridge.Manufacturer" "Camelot - DSD, Michael Doherty, Clyde Hager - Johnson & Johnson" +"Cartridge.Name" "Tooth Protectors (1983) (Camelot)" "Display.Phosphor" "YES" "" @@ -20048,9 +20050,9 @@ "" "Cartridge.MD5" "fb27afe896e7c928089307b32e5642ee" -"Cartridge.Manufacturer" "M Network, Jeff Ronne, Brett Stutz - INTV" +"Cartridge.Manufacturer" "M Network - APh Technological Consulting, Jeff Ronne, Brett Stutz - INTV" "Cartridge.ModelNo" "MT5662" -"Cartridge.Name" "TRON - Deadly Discs (1982) (M Network)" +"Cartridge.Name" "TRON - Deadly Discs (1983) (M Network)" "" "Cartridge.MD5" "fb4ca865abc02d66e39651bd9ade140a" @@ -20136,7 +20138,7 @@ "" "Cartridge.MD5" "fc2104dd2dadf9a6176c1c1c8f87ced9" -"Cartridge.Manufacturer" "Coleco, Harley H. Puthuff Jr." +"Cartridge.Manufacturer" "Coleco - Woodside Design Associates, Harley H. Puthuff Jr." "Cartridge.ModelNo" "2663" "Cartridge.Name" "Time Pilot (1983) (Coleco)" "" From 7890a9414456ce9fe73c055c2e02eee440bf18a5 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Wed, 20 Dec 2017 21:56:22 -0330 Subject: [PATCH 123/156] Several large infrastructure changes for upcoming Time Machine stuff: - renamed Rewinder and associated dialog to TimeMachine and friends - changed EventHandler state enum to stronger 'enum class' type (and associated changes to the codebase) - moved EventHandlerState into separate class, allowing a few files to not need to include EventHandler.hxx (reduce compile dependency) - plumbed EventHandlerState::TIMEMACHINE into the codebase; still TODO is activate it and add a usable dialog) --- src/common/RewindManager.cxx | 4 +- src/debugger/Debugger.cxx | 1 + src/debugger/Debugger.hxx | 1 + src/debugger/gui/DataGridWidget.cxx | 1 + src/debugger/gui/DebuggerDialog.cxx | 1 + src/debugger/gui/RomListWidget.cxx | 1 + src/debugger/gui/ToggleWidget.cxx | 1 + src/emucore/Console.cxx | 4 +- src/emucore/Console.hxx | 3 +- src/emucore/EventHandler.cxx | 100 ++++++++++-------- src/emucore/EventHandler.hxx | 25 ++--- src/emucore/EventHandlerConstants.hxx | 12 +++ src/emucore/FrameBuffer.cxx | 66 +++++++----- src/emucore/FrameBuffer.hxx | 4 +- src/emucore/OSystem.cxx | 33 +++--- src/emucore/OSystem.hxx | 17 +-- src/gui/ContextMenu.cxx | 1 + src/gui/Dialog.cxx | 1 + src/gui/EditableWidget.cxx | 1 + src/gui/InputDialog.cxx | 3 +- src/gui/JoystickDialog.cxx | 1 + src/gui/LauncherDialog.cxx | 1 + src/gui/ListWidget.cxx | 1 + src/gui/OptionsDialog.cxx | 5 +- src/gui/PopUpWidget.hxx | 1 + src/gui/RomInfoWidget.cxx | 6 +- src/gui/{Rewinder.cxx => TimeMachine.cxx} | 8 +- src/gui/{Rewinder.hxx => TimeMachine.hxx} | 22 ++-- ...RewindDialog.cxx => TimeMachineDialog.cxx} | 6 +- ...RewindDialog.hxx => TimeMachineDialog.hxx} | 20 ++-- src/gui/module.mk | 16 +-- 31 files changed, 200 insertions(+), 167 deletions(-) rename src/gui/{Rewinder.cxx => TimeMachine.cxx} (85%) rename src/gui/{Rewinder.hxx => TimeMachine.hxx} (65%) rename src/gui/{RewindDialog.cxx => TimeMachineDialog.cxx} (88%) rename src/gui/{RewindDialog.hxx => TimeMachineDialog.hxx} (63%) diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index 2c0d86765..21345bb99 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -227,7 +227,7 @@ uInt32 RewindManager::unwindState(uInt32 numStates) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void RewindManager::compressStates() { - uInt64 currentCycles = myOSystem.console().tia().cycles(); +// uInt64 currentCycles = myOSystem.console().tia().cycles(); double expectedCycles = myInterval * myFactor * (1 + myFactor); double maxError = 1; uInt32 idx = myStateList.size() - 2; @@ -302,7 +302,7 @@ string RewindManager::getUnitString(Int64 cycles) stringstream result; Int32 i; - cycles = abs(cycles); + cycles = std::abs(cycles); for(i = 0; i < NUM_UNITS - 1; ++i) { diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index f9ec7aa44..10342f8da 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -22,6 +22,7 @@ #include "Version.hxx" #include "OSystem.hxx" #include "FrameBuffer.hxx" +#include "EventHandler.hxx" #include "FSNode.hxx" #include "Settings.hxx" #include "DebuggerDialog.hxx" diff --git a/src/debugger/Debugger.hxx b/src/debugger/Debugger.hxx index 900f064d8..762ec381b 100644 --- a/src/debugger/Debugger.hxx +++ b/src/debugger/Debugger.hxx @@ -20,6 +20,7 @@ class OSystem; class Console; +class EventHandler; class TiaInfoWidget; class TiaOutputWidget; class TiaZoomWidget; diff --git a/src/debugger/gui/DataGridWidget.cxx b/src/debugger/gui/DataGridWidget.cxx index 898282016..9ede2a856 100644 --- a/src/debugger/gui/DataGridWidget.cxx +++ b/src/debugger/gui/DataGridWidget.cxx @@ -19,6 +19,7 @@ #include "Dialog.hxx" #include "Font.hxx" #include "Debugger.hxx" +#include "EventHandler.hxx" #include "FrameBuffer.hxx" #include "FBSurface.hxx" #include "DataGridWidget.hxx" diff --git a/src/debugger/gui/DebuggerDialog.cxx b/src/debugger/gui/DebuggerDialog.cxx index d856d1c70..b69b7fe93 100644 --- a/src/debugger/gui/DebuggerDialog.cxx +++ b/src/debugger/gui/DebuggerDialog.cxx @@ -19,6 +19,7 @@ #include "Widget.hxx" #include "Dialog.hxx" #include "Settings.hxx" +#include "EventHandler.hxx" #include "TabWidget.hxx" #include "TiaInfoWidget.hxx" #include "TiaOutputWidget.hxx" diff --git a/src/debugger/gui/RomListWidget.cxx b/src/debugger/gui/RomListWidget.cxx index e20c28841..5c8a0c8fc 100644 --- a/src/debugger/gui/RomListWidget.cxx +++ b/src/debugger/gui/RomListWidget.cxx @@ -20,6 +20,7 @@ #include "DiStella.hxx" #include "PackedBitArray.hxx" #include "Widget.hxx" +#include "EventHandler.hxx" #include "FBSurface.hxx" #include "Font.hxx" #include "ScrollBarWidget.hxx" diff --git a/src/debugger/gui/ToggleWidget.cxx b/src/debugger/gui/ToggleWidget.cxx index f4777e590..c884dfdd1 100644 --- a/src/debugger/gui/ToggleWidget.cxx +++ b/src/debugger/gui/ToggleWidget.cxx @@ -16,6 +16,7 @@ //============================================================================ #include "OSystem.hxx" +#include "EventHandler.hxx" #include "Widget.hxx" #include "ToggleWidget.hxx" diff --git a/src/emucore/Console.cxx b/src/emucore/Console.cxx index 91fc08741..0f326c468 100644 --- a/src/emucore/Console.cxx +++ b/src/emucore/Console.cxx @@ -1008,11 +1008,11 @@ void Console::attachDebugger(Debugger& dbg) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Console::stateChanged(EventHandler::State state) +void Console::stateChanged(EventHandlerState state) { // For now, only the CompuMate cares about state changes if(myCMHandler) - myCMHandler->enableKeyHandling(state == EventHandler::S_EMULATE); + myCMHandler->enableKeyHandling(state == EventHandlerState::EMULATION); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/Console.hxx b/src/emucore/Console.hxx index 26e4e8b59..695f5aefc 100644 --- a/src/emucore/Console.hxx +++ b/src/emucore/Console.hxx @@ -34,6 +34,7 @@ class Debugger; #include "TIATypes.hxx" #include "FrameBuffer.hxx" #include "Serializable.hxx" +#include "EventHandlerConstants.hxx" #include "NTSCFilter.hxx" #include "frame-manager/AbstractFrameManager.hxx" @@ -184,7 +185,7 @@ class Console : public Serializable /** Informs the Console of a change in EventHandler state. */ - void stateChanged(EventHandler::State state); + void stateChanged(EventHandlerState state); public: /** diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index f2f9c73f7..6b3161d1a 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -29,6 +29,7 @@ #include "TIASurface.hxx" #include "FSNode.hxx" #include "Launcher.hxx" +#include "TimeMachine.hxx" #include "Menu.hxx" #include "OSystem.hxx" #include "Joystick.hxx" @@ -60,7 +61,7 @@ EventHandler::EventHandler(OSystem& osystem) : myOSystem(osystem), myOverlay(nullptr), - myState(S_NONE), + myState(EventHandlerState::NONE), myAllowAllDirectionsFlag(false), myFryingFlag(false), myUseCtrlKeyFlag(true), @@ -124,7 +125,7 @@ void EventHandler::initialize() } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void EventHandler::reset(State state) +void EventHandler::reset(EventHandlerState state) { setEventState(state); myOSystem.state().reset(); @@ -213,7 +214,7 @@ void EventHandler::poll(uInt64 time) // Update controllers and console switches, and in general all other things // related to emulation - if(myState == S_EMULATE) + if(myState == EventHandlerState::EMULATION) { myOSystem.console().riot().update(); @@ -294,31 +295,31 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, bool state) myOSystem.frameBuffer().toggleFullscreen(); } // state rewinding must work in pause mode too - else if(myState == S_EMULATE || myState == S_PAUSE) + else if(myState == EventHandlerState::EMULATION || myState == EventHandlerState::PAUSE) { switch(key) { case KBDK_LEFT: // Alt-left(-shift) rewinds 1(10) states myOSystem.frameBuffer().setPauseDelay(); - setEventState(S_PAUSE); + setEventState(EventHandlerState::PAUSE); myOSystem.state().rewindState((kbdShift(mod) && state) ? 10 : 1); break; case KBDK_RIGHT: // Alt-right(-shift) unwinds 1(10) states myOSystem.frameBuffer().setPauseDelay(); - setEventState(S_PAUSE); + setEventState(EventHandlerState::PAUSE); myOSystem.state().unwindState((kbdShift(mod) && state) ? 10 : 1); break; case KBDK_DOWN: // Alt-down rewinds to start of list myOSystem.frameBuffer().setPauseDelay(); - setEventState(S_PAUSE); + setEventState(EventHandlerState::PAUSE); myOSystem.state().rewindState(1000); break; case KBDK_UP: // Alt-up rewinds to end of list myOSystem.frameBuffer().setPauseDelay(); - setEventState(S_PAUSE); + setEventState(EventHandlerState::PAUSE); myOSystem.state().unwindState(1000); break; @@ -328,7 +329,7 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, bool state) } } // These only work when in emulation mode - if(!handled && myState == S_EMULATE) + if(!handled && myState == EventHandlerState::EMULATION) { handled = true; switch(key) @@ -538,7 +539,7 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, bool state) handleEvent(Event::Quit, 1); } // These only work when in emulation mode - else if(myState == S_EMULATE) + else if(myState == EventHandlerState::EMULATION) { switch(key) { @@ -622,11 +623,11 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, bool state) // Otherwise, let the event handler deal with it switch(myState) { - case S_EMULATE: + case EventHandlerState::EMULATION: handleEvent(myKeyTable[key][kEmulationMode], state); break; - case S_PAUSE: + case EventHandlerState::PAUSE: switch(myKeyTable[key][kEmulationMode]) { case Event::TakeSnapshot: @@ -650,7 +651,7 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, bool state) void EventHandler::handleMouseMotionEvent(int x, int y, int xrel, int yrel, int button) { // Determine which mode we're in, then send the event to the appropriate place - if(myState == S_EMULATE) + if(myState == EventHandlerState::EMULATION) { if(!mySkipMouseMotion) { @@ -667,7 +668,7 @@ void EventHandler::handleMouseMotionEvent(int x, int y, int xrel, int yrel, int void EventHandler::handleMouseButtonEvent(MouseButton b, int x, int y) { // Determine which mode we're in, then send the event to the appropriate place - if(myState == S_EMULATE) + if(myState == EventHandlerState::EMULATION) { switch(b) { @@ -706,7 +707,7 @@ void EventHandler::handleJoyEvent(int stick, int button, uInt8 state) return; // Determine which mode we're in, then send the event to the appropriate place - if(myState == S_EMULATE) + if(myState == EventHandlerState::EMULATION) handleEvent(joy->btnTable[button][kEmulationMode], state); else if(myOverlay) myOverlay->handleJoyEvent(stick, button, state); @@ -726,7 +727,7 @@ void EventHandler::handleJoyEvent(int stick, int button, uInt8 state) // The 'type-4' here refers to the fact that 'StellaJoystick::JT_2600DAPTOR_LEFT' // and 'StellaJoystick::JT_2600DAPTOR_RIGHT' are at index 4 and 5 in the JoyType // enum; subtracting four gives us Controller 0 and 1 - if(myState == S_EMULATE) + if(myState == EventHandlerState::EMULATION) { switch(myOSystem.console().leftController().type()) { @@ -761,7 +762,7 @@ void EventHandler::handleJoyAxisEvent(int stick, int axis, int value) switch(joy->type) { case StellaJoystick::JT_REGULAR: - if(myState == S_EMULATE) + if(myState == EventHandlerState::EMULATION) { // Every axis event has two associated values, negative and positive Event::Type eventAxisNeg = joy->axisTable[axis][0][kEmulationMode]; @@ -867,7 +868,7 @@ void EventHandler::handleJoyHatEvent(int stick, int hat, int value) // Preprocess all hat events, converting to Stella JoyHat type // Generate multiple equivalent hat events representing combined direction // when we get a diagonal hat event - if(myState == S_EMULATE) + if(myState == EventHandlerState::EMULATION) { handleEvent(joy->hatTable[hat][int(JoyHat::UP)][kEmulationMode], value & EVENT_HATUP_M); @@ -913,7 +914,7 @@ void EventHandler::handleSystemEvent(SystemEvent e, int, int) break; #if 0 case EVENT_WINDOW_MINIMIZED: - if(myState == S_EMULATE) enterMenuMode(S_MENU); + if(myState == EventHandlerState::EMULATION) enterMenuMode(EventHandlerState::OPTIONSMENU); break; #endif default: // handle other events as testing requires @@ -1001,8 +1002,8 @@ void EventHandler::handleEvent(Event::Type event, int state) return; case Event::LauncherMode: - if((myState == S_EMULATE || myState == S_CMDMENU || - myState == S_DEBUGGER) && state) + if((myState == EventHandlerState::EMULATION || myState == EventHandlerState::CMDMENU || + myState == EventHandlerState::DEBUGGER) && state) { // Go back to the launcher, or immediately quit if(myOSystem.settings().getBool("exitlauncher") || @@ -1218,34 +1219,34 @@ bool EventHandler::eventStateChange(Event::Type type) switch(type) { case Event::PauseMode: - if(myState == S_EMULATE) - setEventState(S_PAUSE); - else if(myState == S_PAUSE) - setEventState(S_EMULATE); + if(myState == EventHandlerState::EMULATION) + setEventState(EventHandlerState::PAUSE); + else if(myState == EventHandlerState::PAUSE) + setEventState(EventHandlerState::EMULATION); else handled = false; break; case Event::MenuMode: - if(myState == S_EMULATE) - enterMenuMode(S_MENU); + if(myState == EventHandlerState::EMULATION) + enterMenuMode(EventHandlerState::OPTIONSMENU); else handled = false; break; case Event::CmdMenuMode: - if(myState == S_EMULATE) - enterMenuMode(S_CMDMENU); - else if(myState == S_CMDMENU) + if(myState == EventHandlerState::EMULATION) + enterMenuMode(EventHandlerState::CMDMENU); + else if(myState == EventHandlerState::CMDMENU) leaveMenuMode(); else handled = false; break; case Event::DebuggerMode: - if(myState == S_EMULATE || myState == S_PAUSE) + if(myState == EventHandlerState::EMULATION || myState == EventHandlerState::PAUSE) enterDebugMode(); - else if(myState == S_DEBUGGER) + else if(myState == EventHandlerState::DEBUGGER) leaveDebugMode(); else handled = false; @@ -2068,7 +2069,7 @@ void EventHandler::setContinuousSnapshots(uInt32 interval) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void EventHandler::enterMenuMode(State state) +void EventHandler::enterMenuMode(EventHandlerState state) { setEventState(state); myOverlay->reStack(); @@ -2078,7 +2079,7 @@ void EventHandler::enterMenuMode(State state) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void EventHandler::leaveMenuMode() { - setEventState(S_EMULATE); + setEventState(EventHandlerState::EMULATION); myOSystem.sound().mute(false); } @@ -2086,7 +2087,7 @@ void EventHandler::leaveMenuMode() bool EventHandler::enterDebugMode() { #ifdef DEBUGGER_SUPPORT - if(myState == S_DEBUGGER || !myOSystem.hasConsole()) + if(myState == EventHandlerState::DEBUGGER || !myOSystem.hasConsole()) return false; // Make sure debugger starts in a consistent state @@ -2094,13 +2095,13 @@ bool EventHandler::enterDebugMode() // mode, since it takes care of locking the debugger state, which will // probably be modified below myOSystem.debugger().setStartState(); - setEventState(S_DEBUGGER); + setEventState(EventHandlerState::DEBUGGER); FBInitStatus fbstatus = myOSystem.createFrameBuffer(); if(fbstatus != FBInitStatus::Success) { myOSystem.debugger().setQuitState(); - setEventState(S_EMULATE); + setEventState(EventHandlerState::EMULATION); if(fbstatus == FBInitStatus::FailTooLarge) myOSystem.frameBuffer().showMessage("Debugger window too large for screen", MessagePosition::BottomCenter, true); @@ -2121,20 +2122,20 @@ void EventHandler::leaveDebugMode() { #ifdef DEBUGGER_SUPPORT // paranoia: this should never happen: - if(myState != S_DEBUGGER) + if(myState != EventHandlerState::DEBUGGER) return; // Make sure debugger quits in a consistent state myOSystem.debugger().setQuitState(); - setEventState(S_EMULATE); + setEventState(EventHandlerState::EMULATION); myOSystem.createFrameBuffer(); myOSystem.sound().mute(false); #endif } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void EventHandler::setEventState(State state) +void EventHandler::setEventState(EventHandlerState state) { myState = state; @@ -2146,7 +2147,7 @@ void EventHandler::setEventState(State state) // keyboard acts as one large joystick with many (single) buttons switch(myState) { - case S_EMULATE: + case EventHandlerState::EMULATION: myOverlay = nullptr; myOSystem.sound().mute(false); enableTextEvents(false); @@ -2154,36 +2155,41 @@ void EventHandler::setEventState(State state) myUseCtrlKeyFlag = false; break; - case S_PAUSE: + case EventHandlerState::PAUSE: myOverlay = nullptr; myOSystem.sound().mute(true); enableTextEvents(false); break; - case S_MENU: + case EventHandlerState::OPTIONSMENU: myOverlay = &myOSystem.menu(); enableTextEvents(true); break; - case S_CMDMENU: + case EventHandlerState::CMDMENU: myOverlay = &myOSystem.commandMenu(); enableTextEvents(true); break; - case S_LAUNCHER: + case EventHandlerState::TIMEMACHINE: + myOverlay = &myOSystem.timeMachine(); + enableTextEvents(true); + break; + + case EventHandlerState::LAUNCHER: myOverlay = &myOSystem.launcher(); enableTextEvents(true); myEvent.clear(); break; #ifdef DEBUGGER_SUPPORT - case S_DEBUGGER: + case EventHandlerState::DEBUGGER: myOverlay = &myOSystem.debugger(); enableTextEvents(true); break; #endif - default: + case EventHandlerState::NONE: myOverlay = nullptr; break; } diff --git a/src/emucore/EventHandler.hxx b/src/emucore/EventHandler.hxx index 13dd55c36..a20620479 100644 --- a/src/emucore/EventHandler.hxx +++ b/src/emucore/EventHandler.hxx @@ -56,17 +56,6 @@ class EventHandler EventHandler(OSystem& osystem); virtual ~EventHandler(); - // Enumeration representing the different states of operation - enum State { - S_NONE, - S_EMULATE, - S_PAUSE, - S_LAUNCHER, - S_MENU, - S_CMDMENU, - S_DEBUGGER - }; - /** Returns the event object associated with this handler class. @@ -109,16 +98,16 @@ class EventHandler /** Returns the current state of the EventHandler - @return The State type + @return The EventHandlerState type */ - State state() const { return myState; } + EventHandlerState state() const { return myState; } /** Resets the state machine of the EventHandler to the defaults @param state The current state to set */ - void reset(State state); + void reset(EventHandlerState state); /** This method indicates that the system should terminate. @@ -131,7 +120,7 @@ class EventHandler @param enable Whether to use the mouse to emulate controllers Currently, this will be one of the following values: - 'always', 'analog', 'never' + 'always', 'analog', 'never' */ void setMouseControllerMode(const string& enable); @@ -163,7 +152,7 @@ class EventHandler return (mod & KBDM_SHIFT); } - void enterMenuMode(State state); + void enterMenuMode(EventHandlerState state); void leaveMenuMode(); bool enterDebugMode(); void leaveDebugMode(); @@ -519,7 +508,7 @@ class EventHandler */ bool eventIsAnalog(Event::Type event) const; - void setEventState(State state); + void setEventState(EventHandlerState state); private: // Structure used for action menu items @@ -547,7 +536,7 @@ class EventHandler Event::Type myComboTable[kComboSize][kEventsPerCombo]; // Indicates the current state of the system (ie, which mode is current) - State myState; + EventHandlerState myState; // Indicates whether the joystick emulates 'impossible' directions bool myAllowAllDirectionsFlag; diff --git a/src/emucore/EventHandlerConstants.hxx b/src/emucore/EventHandlerConstants.hxx index fee58c5f2..7b799a33b 100644 --- a/src/emucore/EventHandlerConstants.hxx +++ b/src/emucore/EventHandlerConstants.hxx @@ -18,6 +18,18 @@ #ifndef EVENTHANDLER_CONSTANTS_HXX #define EVENTHANDLER_CONSTANTS_HXX +// Enumeration representing the different states of operation +enum class EventHandlerState { + NONE, + EMULATION, + TIMEMACHINE, + PAUSE, + LAUNCHER, + OPTIONSMENU, + CMDMENU, + DEBUGGER +}; + enum class MouseButton { LBUTTONDOWN, LBUTTONUP, diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index ff0b12097..5045fbb8d 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -17,7 +17,6 @@ #include "bspf.hxx" -#include "CommandMenu.hxx" #include "Console.hxx" #include "EventHandler.hxx" #include "Event.hxx" @@ -28,6 +27,8 @@ #include "ConsoleFont.hxx" #include "Launcher.hxx" #include "Menu.hxx" +#include "CommandMenu.hxx" +#include "TimeMachine.hxx" #include "OSystem.hxx" #include "Settings.hxx" #include "TIA.hxx" @@ -205,8 +206,8 @@ FBInitStatus FrameBuffer::createDisplay(const string& title, myScreenSize = mode.screen; // Inform TIA surface about new mode - if(myOSystem.eventHandler().state() != EventHandler::S_LAUNCHER && - myOSystem.eventHandler().state() != EventHandler::S_DEBUGGER) + if(myOSystem.eventHandler().state() != EventHandlerState::LAUNCHER && + myOSystem.eventHandler().state() != EventHandlerState::DEBUGGER) myTIASurface->initialize(myOSystem.console(), mode); // Did we get the requested fullscreen state? @@ -262,14 +263,14 @@ void FrameBuffer::update() invalidate(); switch(myOSystem.eventHandler().state()) { - case EventHandler::S_EMULATE: + case EventHandlerState::EMULATION: { // Run the console for one frame // Note that the debugger can cause a breakpoint to occur, which changes // the EventHandler state 'behind our back' - we need to check for that myOSystem.console().tia().update(); #ifdef DEBUGGER_SUPPORT - if(myOSystem.eventHandler().state() != EventHandler::S_EMULATE) break; + if(myOSystem.eventHandler().state() != EventHandlerState::EMULATION) break; #endif if(myOSystem.eventHandler().frying()) myOSystem.console().fry(); @@ -295,10 +296,10 @@ void FrameBuffer::update() myStatsMsg.surface->render(); } myPausedCount = 0; - break; // S_EMULATE + break; // EventHandlerState::EMULATION } - case EventHandler::S_PAUSE: + case EventHandlerState::PAUSE: { myTIASurface->render(); @@ -308,38 +309,45 @@ void FrameBuffer::update() myPausedCount = uInt32(7 * myOSystem.frameRate()); showMessage("Paused", MessagePosition::MiddleCenter); } - break; // S_PAUSE + break; // EventHandlerState::PAUSE } - case EventHandler::S_MENU: + case EventHandlerState::OPTIONSMENU: { myTIASurface->render(); myOSystem.menu().draw(true); - break; // S_MENU + break; // EventHandlerState::OPTIONSMENU } - case EventHandler::S_CMDMENU: + case EventHandlerState::CMDMENU: { myTIASurface->render(); myOSystem.commandMenu().draw(true); - break; // S_CMDMENU + break; // EventHandlerState::CMDMENU } - case EventHandler::S_LAUNCHER: + case EventHandlerState::TIMEMACHINE: + { + myTIASurface->render(); + myOSystem.timeMachine().draw(true); + break; // EventHandlerState::TIMEMACHINE + } + + case EventHandlerState::LAUNCHER: { myOSystem.launcher().draw(true); - break; // S_LAUNCHER + break; // EventHandlerState::LAUNCHER } #ifdef DEBUGGER_SUPPORT - case EventHandler::S_DEBUGGER: + case EventHandlerState::DEBUGGER: { myOSystem.debugger().draw(true); - break; // S_DEBUGGER + break; // EventHandlerState::DEBUGGER } #endif - default: + case EventHandlerState::NONE: return; } @@ -528,7 +536,7 @@ void FrameBuffer::setPalette(const uInt32* raw_palette) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void FrameBuffer::stateChanged(EventHandler::State state) +void FrameBuffer::stateChanged(EventHandlerState state) { // Make sure any onscreen messages are removed myMsg.enabled = false; @@ -545,8 +553,8 @@ void FrameBuffer::setFullscreen(bool enable) myScreenSize = mode.screen; // Inform TIA surface about new mode - if(myOSystem.eventHandler().state() != EventHandler::S_LAUNCHER && - myOSystem.eventHandler().state() != EventHandler::S_DEBUGGER) + if(myOSystem.eventHandler().state() != EventHandlerState::LAUNCHER && + myOSystem.eventHandler().state() != EventHandlerState::DEBUGGER) myTIASurface->initialize(myOSystem.console(), mode); // Did we get the requested fullscreen state? @@ -566,9 +574,9 @@ void FrameBuffer::toggleFullscreen() bool FrameBuffer::changeWindowedVidMode(int direction) { #ifdef WINDOWED_SUPPORT - EventHandler::State state = myOSystem.eventHandler().state(); - bool tiaMode = (state != EventHandler::S_DEBUGGER && - state != EventHandler::S_LAUNCHER); + EventHandlerState state = myOSystem.eventHandler().state(); + bool tiaMode = (state != EventHandlerState::DEBUGGER && + state != EventHandlerState::LAUNCHER); // Ignore any attempts to change video size while in invalid modes if(!tiaMode || fullScreen()) @@ -605,7 +613,7 @@ void FrameBuffer::setCursorState() // Always grab mouse in emulation (if enabled) and emulating a controller // that always uses the mouse bool emulation = - myOSystem.eventHandler().state() == EventHandler::S_EMULATE; + myOSystem.eventHandler().state() == EventHandlerState::EMULATION; bool analog = myOSystem.hasConsole() ? (myOSystem.eventHandler().controllerIsAnalog(Controller::Left) || myOSystem.eventHandler().controllerIsAnalog(Controller::Right)) : false; @@ -669,9 +677,9 @@ void FrameBuffer::setAvailableVidModes(uInt32 baseWidth, uInt32 baseHeight) // Check if zooming is allowed for this state (currently only allowed // for TIA screens) - EventHandler::State state = myOSystem.eventHandler().state(); - bool tiaMode = (state != EventHandler::S_DEBUGGER && - state != EventHandler::S_LAUNCHER); + EventHandlerState state = myOSystem.eventHandler().state(); + bool tiaMode = (state != EventHandlerState::DEBUGGER && + state != EventHandlerState::LAUNCHER); // TIA mode allows zooming at integral factors in windowed modes, // and also non-integral factors in fullscreen mode @@ -730,7 +738,7 @@ void FrameBuffer::setAvailableVidModes(uInt32 baseWidth, uInt32 baseHeight) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - const VideoMode& FrameBuffer::getSavedVidMode(bool fullscreen) { - EventHandler::State state = myOSystem.eventHandler().state(); + EventHandlerState state = myOSystem.eventHandler().state(); if(fullscreen) { @@ -748,7 +756,7 @@ const VideoMode& FrameBuffer::getSavedVidMode(bool fullscreen) // Now select the best resolution depending on the state // UI modes (launcher and debugger) have only one supported resolution // so the 'current' one is the only valid one - if(state == EventHandler::S_DEBUGGER || state == EventHandler::S_LAUNCHER) + if(state == EventHandlerState::DEBUGGER || state == EventHandlerState::LAUNCHER) myCurrentModeList->setZoom(1); else myCurrentModeList->setZoom(myZoomMode); diff --git a/src/emucore/FrameBuffer.hxx b/src/emucore/FrameBuffer.hxx index 0c8758608..9dabf2c80 100644 --- a/src/emucore/FrameBuffer.hxx +++ b/src/emucore/FrameBuffer.hxx @@ -30,11 +30,11 @@ namespace GUI { class Font; } -#include "EventHandler.hxx" #include "Rect.hxx" #include "Variant.hxx" #include "TIAConstants.hxx" #include "FrameBufferConstants.hxx" +#include "EventHandlerConstants.hxx" #include "bspf.hxx" // Contains all relevant info for the dimensions of a video screen @@ -261,7 +261,7 @@ class FrameBuffer /** Informs the Framebuffer of a change in EventHandler state. */ - void stateChanged(EventHandler::State state); + void stateChanged(EventHandlerState state); ////////////////////////////////////////////////////////////////////// // The following methods are system-specific and can/must be diff --git a/src/emucore/OSystem.cxx b/src/emucore/OSystem.cxx index 2d7bd1fac..f473dd5af 100644 --- a/src/emucore/OSystem.cxx +++ b/src/emucore/OSystem.cxx @@ -47,7 +47,7 @@ #include "Menu.hxx" #include "CommandMenu.hxx" #include "Launcher.hxx" -#include "Rewinder.hxx" +#include "TimeMachine.hxx" #include "PNGLibrary.hxx" #include "Widget.hxx" #include "Console.hxx" @@ -140,8 +140,8 @@ bool OSystem::create() // Create menu and launcher GUI objects myMenu = make_unique(*this); myCommandMenu = make_unique(*this); + myTimeMachine = make_unique(*this); myLauncher = make_unique(*this); - myRewinder = make_unique(*this); myStateManager = make_unique(*this); // Create the sound object; the sound subsystem isn't actually @@ -250,27 +250,28 @@ FBInitStatus OSystem::createFrameBuffer() FBInitStatus fbstatus = FBInitStatus::FailComplete; switch(myEventHandler->state()) { - case EventHandler::S_EMULATE: - case EventHandler::S_PAUSE: - case EventHandler::S_MENU: - case EventHandler::S_CMDMENU: + case EventHandlerState::EMULATION: + case EventHandlerState::PAUSE: + case EventHandlerState::OPTIONSMENU: + case EventHandlerState::CMDMENU: + case EventHandlerState::TIMEMACHINE: if((fbstatus = myConsole->initializeVideo()) != FBInitStatus::Success) return fbstatus; - break; // S_EMULATE, S_PAUSE, S_MENU, S_CMDMENU + break; - case EventHandler::S_LAUNCHER: + case EventHandlerState::LAUNCHER: if((fbstatus = myLauncher->initializeVideo()) != FBInitStatus::Success) return fbstatus; - break; // S_LAUNCHER + break; #ifdef DEBUGGER_SUPPORT - case EventHandler::S_DEBUGGER: + case EventHandlerState::DEBUGGER: if((fbstatus = myDebugger->initializeVideo()) != FBInitStatus::Success) return fbstatus; - break; // S_DEBUGGER + break; #endif - default: // Should never happen + case EventHandlerState::NONE: // Should never happen logMessage("ERROR: Unknown emulation state in createFrameBuffer()", 0); break; } @@ -333,12 +334,12 @@ string OSystem::createConsole(const FilesystemNode& rom, const string& md5sum, #ifdef CHEATCODE_SUPPORT myCheatManager->loadCheats(myRomMD5); #endif - myEventHandler->reset(EventHandler::S_EMULATE); + myEventHandler->reset(EventHandlerState::EMULATION); myEventHandler->setMouseControllerMode(mySettings->getString("usemouse")); if(createFrameBuffer() != FBInitStatus::Success) // Takes care of initializeVideo() { logMessage("ERROR: Couldn't create framebuffer for console", 0); - myEventHandler->reset(EventHandler::S_LAUNCHER); + myEventHandler->reset(EventHandlerState::LAUNCHER); return "ERROR: Couldn't create framebuffer for console"; } myConsole->initializeAudio(); @@ -379,7 +380,7 @@ bool OSystem::reloadConsole() bool OSystem::hasConsole() const { return myConsole != nullptr && - myEventHandler->state() != EventHandler::S_LAUNCHER; + myEventHandler->state() != EventHandlerState::LAUNCHER; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -393,7 +394,7 @@ bool OSystem::createLauncher(const string& startdir) mySettings->setValue("tmpromdir", startdir); bool status = false; - myEventHandler->reset(EventHandler::S_LAUNCHER); + myEventHandler->reset(EventHandlerState::LAUNCHER); if(createFrameBuffer() == FBInitStatus::Success) { myLauncher->reStack(); diff --git a/src/emucore/OSystem.hxx b/src/emucore/OSystem.hxx index 7f6385e23..c42994df1 100644 --- a/src/emucore/OSystem.hxx +++ b/src/emucore/OSystem.hxx @@ -26,8 +26,9 @@ class Console; class Debugger; class Launcher; class Menu; -class Rewinder; +class TimeMachine; class FrameBuffer; +class EventHandler; class PNGLibrary; class Properties; class PropertiesSet; @@ -38,9 +39,9 @@ class Sound; class StateManager; class VideoDialog; -#include "EventHandler.hxx" #include "FSNode.hxx" #include "FrameBufferConstants.hxx" +#include "EventHandlerConstants.hxx" #include "bspf.hxx" struct TimingInfo { @@ -154,11 +155,11 @@ class OSystem Launcher& launcher() const { return *myLauncher; } /** - Get the state rewinder of the system. + Get the time machine of the system (manages state files). - @return The rewinder object + @return The time machine object */ - Rewinder& rewinder() const { return *myRewinder; } + TimeMachine& timeMachine() const { return *myTimeMachine; } /** Get the state manager of the system. @@ -410,7 +411,7 @@ class OSystem /** Informs the OSystem of a change in EventHandler state. */ - virtual void stateChanged(EventHandler::State state) { } + virtual void stateChanged(EventHandlerState state) { } /** Returns the default save and load paths for various files @@ -469,8 +470,8 @@ class OSystem unique_ptr myLauncher; bool myLauncherUsed; - // Pointer to the Rewinder object - unique_ptr myRewinder; + // Pointer to the TimeMachine object + unique_ptr myTimeMachine; #ifdef DEBUGGER_SUPPORT // Pointer to the Debugger object diff --git a/src/gui/ContextMenu.cxx b/src/gui/ContextMenu.cxx index aa17c91ed..f55d996a2 100644 --- a/src/gui/ContextMenu.cxx +++ b/src/gui/ContextMenu.cxx @@ -16,6 +16,7 @@ //============================================================================ #include "OSystem.hxx" +#include "EventHandler.hxx" #include "FrameBuffer.hxx" #include "FBSurface.hxx" #include "Font.hxx" diff --git a/src/gui/Dialog.cxx b/src/gui/Dialog.cxx index 8d7805024..bee6a2ac2 100644 --- a/src/gui/Dialog.cxx +++ b/src/gui/Dialog.cxx @@ -19,6 +19,7 @@ //============================================================================ #include "OSystem.hxx" +#include "EventHandler.hxx" #include "FrameBuffer.hxx" #include "FBSurface.hxx" #include "Font.hxx" diff --git a/src/gui/EditableWidget.cxx b/src/gui/EditableWidget.cxx index e6d192f04..fc747a1f8 100644 --- a/src/gui/EditableWidget.cxx +++ b/src/gui/EditableWidget.cxx @@ -16,6 +16,7 @@ //============================================================================ #include "Dialog.hxx" +#include "EventHandler.hxx" #include "FBSurface.hxx" #include "Font.hxx" #include "EditableWidget.hxx" diff --git a/src/gui/InputDialog.cxx b/src/gui/InputDialog.cxx index 54254ba95..a0dd29cb2 100644 --- a/src/gui/InputDialog.cxx +++ b/src/gui/InputDialog.cxx @@ -18,6 +18,7 @@ #include "bspf.hxx" #include "OSystem.hxx" #include "Console.hxx" +#include "EventHandler.hxx" #include "Joystick.hxx" #include "Paddles.hxx" #include "PointingDevice.hxx" @@ -348,7 +349,7 @@ void InputDialog::saveConfig() const string& cursor = myCursorState->getSelectedTag().toString(); instance().settings().setValue("cursor", cursor); instance().settings().setValue("grabmouse", myGrabMouse->getState()); - instance().frameBuffer().enableGrabMouse(myGrabMouse->getState()); + instance().frameBuffer().enableGrabMouse(myGrabMouse->getState()); // Enable/disable control key-combos instance().settings().setValue("ctrlcombo", myCtrlCombo->getState()); diff --git a/src/gui/JoystickDialog.cxx b/src/gui/JoystickDialog.cxx index 2eed2d9cd..fd127be30 100644 --- a/src/gui/JoystickDialog.cxx +++ b/src/gui/JoystickDialog.cxx @@ -16,6 +16,7 @@ //============================================================================ #include "OSystem.hxx" +#include "EventHandler.hxx" #include "Widget.hxx" #include "Font.hxx" #include "EditTextWidget.hxx" diff --git a/src/gui/LauncherDialog.cxx b/src/gui/LauncherDialog.cxx index c7559a7a7..56e44bd6e 100644 --- a/src/gui/LauncherDialog.cxx +++ b/src/gui/LauncherDialog.cxx @@ -30,6 +30,7 @@ #include "MessageBox.hxx" #include "OSystem.hxx" #include "FrameBuffer.hxx" +#include "EventHandler.hxx" #include "Props.hxx" #include "PropsSet.hxx" #include "RomInfoWidget.hxx" diff --git a/src/gui/ListWidget.cxx b/src/gui/ListWidget.cxx index 5dc01d43e..6358fda51 100644 --- a/src/gui/ListWidget.cxx +++ b/src/gui/ListWidget.cxx @@ -23,6 +23,7 @@ #include "ScrollBarWidget.hxx" #include "Dialog.hxx" #include "FrameBuffer.hxx" +#include "EventHandler.hxx" #include "ListWidget.hxx" #include "bspf.hxx" diff --git a/src/gui/OptionsDialog.cxx b/src/gui/OptionsDialog.cxx index 76b0e88b5..86cc6666b 100644 --- a/src/gui/OptionsDialog.cxx +++ b/src/gui/OptionsDialog.cxx @@ -17,6 +17,7 @@ #include "OSystem.hxx" #include "FrameBuffer.hxx" +#include "EventHandler.hxx" #include "Dialog.hxx" #include "DialogContainer.hxx" #include "Widget.hxx" @@ -164,10 +165,10 @@ void OptionsDialog::loadConfig() // in launcher mode switch(instance().eventHandler().state()) { - case EventHandler::S_EMULATE: + case EventHandlerState::EMULATION: myGameInfoButton->setFlags(WIDGET_ENABLED); break; - case EventHandler::S_LAUNCHER: + case EventHandlerState::LAUNCHER: if(instance().launcher().selectedRomMD5() != "") myGameInfoButton->setFlags(WIDGET_ENABLED); else diff --git a/src/gui/PopUpWidget.hxx b/src/gui/PopUpWidget.hxx index 69f432cbb..f697587fc 100644 --- a/src/gui/PopUpWidget.hxx +++ b/src/gui/PopUpWidget.hxx @@ -22,6 +22,7 @@ class GUIObject; class ContextMenu; #include "bspf.hxx" +#include "Variant.hxx" #include "Command.hxx" #include "Widget.hxx" diff --git a/src/gui/RomInfoWidget.cxx b/src/gui/RomInfoWidget.cxx index a49adb043..750e776a0 100644 --- a/src/gui/RomInfoWidget.cxx +++ b/src/gui/RomInfoWidget.cxx @@ -15,6 +15,7 @@ // this file, and for a DISCLAIMER OF ALL WARRANTIES. //============================================================================ +#include "EventHandler.hxx" #include "FrameBuffer.hxx" #include "Dialog.hxx" #include "FBSurface.hxx" @@ -26,7 +27,6 @@ #include "Rect.hxx" #include "Widget.hxx" #include "TIAConstants.hxx" - #include "RomInfoWidget.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -59,7 +59,7 @@ void RomInfoWidget::setProperties(const Properties& props) myProperties = props; // Decide whether the information should be shown immediately - if(instance().eventHandler().state() == EventHandler::S_LAUNCHER) + if(instance().eventHandler().state() == EventHandlerState::LAUNCHER) parseProperties(); } @@ -71,7 +71,7 @@ void RomInfoWidget::clearProperties() mySurface->setVisible(mySurfaceIsValid); // Decide whether the information should be shown immediately - if(instance().eventHandler().state() == EventHandler::S_LAUNCHER) + if(instance().eventHandler().state() == EventHandlerState::LAUNCHER) setDirty(); } diff --git a/src/gui/Rewinder.cxx b/src/gui/TimeMachine.cxx similarity index 85% rename from src/gui/Rewinder.cxx rename to src/gui/TimeMachine.cxx index 066e70759..b1fdf0f7b 100644 --- a/src/gui/Rewinder.cxx +++ b/src/gui/TimeMachine.cxx @@ -17,13 +17,13 @@ #include "Dialog.hxx" #include "FrameBuffer.hxx" -#include "RewindDialog.hxx" -#include "Rewinder.hxx" +#include "TimeMachineDialog.hxx" +#include "TimeMachine.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Rewinder::Rewinder(OSystem& osystem) +TimeMachine::TimeMachine(OSystem& osystem) : DialogContainer(osystem) { - myBaseDialog = new RewindDialog(myOSystem, *this, + myBaseDialog = new TimeMachineDialog(myOSystem, *this, FrameBuffer::kFBMinW, FrameBuffer::kFBMinH); } diff --git a/src/gui/Rewinder.hxx b/src/gui/TimeMachine.hxx similarity index 65% rename from src/gui/Rewinder.hxx rename to src/gui/TimeMachine.hxx index 67434d987..93457bd25 100644 --- a/src/gui/Rewinder.hxx +++ b/src/gui/TimeMachine.hxx @@ -15,31 +15,31 @@ // this file, and for a DISCLAIMER OF ALL WARRANTIES. //============================================================================ -#ifndef REWINDER_HXX -#define REWINDER_HXX +#ifndef TIME_MACHINE_HXX +#define TIME_MACHINE_HXX class OSystem; #include "DialogContainer.hxx" /** - The base dialog for all rewind-related UI items in Stella. + The base dialog for all time machine related UI items in Stella. @author Stephen Anthony */ -class Rewinder : public DialogContainer +class TimeMachine : public DialogContainer { public: - Rewinder(OSystem& osystem); - virtual ~Rewinder() = default; + TimeMachine(OSystem& osystem); + virtual ~TimeMachine() = default; private: // Following constructors and assignment operators not supported - Rewinder() = delete; - Rewinder(const Rewinder&) = delete; - Rewinder(Rewinder&&) = delete; - Rewinder& operator=(const Rewinder&) = delete; - Rewinder& operator=(Rewinder&&) = delete; + TimeMachine() = delete; + TimeMachine(const TimeMachine&) = delete; + TimeMachine(TimeMachine&&) = delete; + TimeMachine& operator=(const TimeMachine&) = delete; + TimeMachine& operator=(TimeMachine&&) = delete; }; #endif diff --git a/src/gui/RewindDialog.cxx b/src/gui/TimeMachineDialog.cxx similarity index 88% rename from src/gui/RewindDialog.cxx rename to src/gui/TimeMachineDialog.cxx index 682b25cc1..383b72aef 100644 --- a/src/gui/RewindDialog.cxx +++ b/src/gui/TimeMachineDialog.cxx @@ -21,11 +21,11 @@ #include "FrameBuffer.hxx" #include "OSystem.hxx" #include "Widget.hxx" -#include "RewindDialog.hxx" +#include "TimeMachineDialog.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -RewindDialog::RewindDialog(OSystem& osystem, DialogContainer& parent, - int max_w, int max_h) +TimeMachineDialog::TimeMachineDialog(OSystem& osystem, DialogContainer& parent, + int max_w, int max_h) : Dialog(osystem, parent) { const GUI::Font& font = instance().frameBuffer().font(); diff --git a/src/gui/RewindDialog.hxx b/src/gui/TimeMachineDialog.hxx similarity index 63% rename from src/gui/RewindDialog.hxx rename to src/gui/TimeMachineDialog.hxx index 6bf71f47b..27fe4149a 100644 --- a/src/gui/RewindDialog.hxx +++ b/src/gui/TimeMachineDialog.hxx @@ -15,8 +15,8 @@ // this file, and for a DISCLAIMER OF ALL WARRANTIES. //============================================================================ -#ifndef REWIND_DIALOG_HXX -#define REWIND_DIALOG_HXX +#ifndef TIME_MACHINE_DIALOG_HXX +#define TIME_MACHINE_DIALOG_HXX class CommandSender; class DialogContainer; @@ -24,19 +24,19 @@ class OSystem; #include "Dialog.hxx" -class RewindDialog : public Dialog +class TimeMachineDialog : public Dialog { public: - RewindDialog(OSystem& osystem, DialogContainer& parent, int max_w, int max_h); - virtual ~RewindDialog() = default; + TimeMachineDialog(OSystem& osystem, DialogContainer& parent, int max_w, int max_h); + virtual ~TimeMachineDialog() = default; private: // Following constructors and assignment operators not supported - RewindDialog() = delete; - RewindDialog(const RewindDialog&) = delete; - RewindDialog(RewindDialog&&) = delete; - RewindDialog& operator=(const RewindDialog&) = delete; - RewindDialog& operator=(RewindDialog&&) = delete; + TimeMachineDialog() = delete; + TimeMachineDialog(const TimeMachineDialog&) = delete; + TimeMachineDialog(TimeMachineDialog&&) = delete; + TimeMachineDialog& operator=(const TimeMachineDialog&) = delete; + TimeMachineDialog& operator=(TimeMachineDialog&&) = delete; }; #endif diff --git a/src/gui/module.mk b/src/gui/module.mk index ebe74d760..3058ac9c8 100644 --- a/src/gui/module.mk +++ b/src/gui/module.mk @@ -4,20 +4,20 @@ MODULE_OBJS := \ src/gui/AboutDialog.o \ src/gui/AudioDialog.o \ src/gui/BrowserDialog.o \ + src/gui/CheckListWidget.o \ src/gui/ColorWidget.o \ src/gui/ComboDialog.o \ src/gui/CommandDialog.o \ src/gui/CommandMenu.o \ + src/gui/ConfigPathDialog.o \ src/gui/ContextMenu.o \ - src/gui/DialogContainer.o \ src/gui/DeveloperDialog.o \ + src/gui/DialogContainer.o \ src/gui/Dialog.o \ src/gui/EditableWidget.o \ src/gui/EditTextWidget.o \ src/gui/EventMappingWidget.o \ src/gui/FileListWidget.o \ - src/gui/ConfigPathDialog.o \ - src/gui/SnapshotDialog.o \ src/gui/Font.o \ src/gui/GameInfoDialog.o \ src/gui/GameList.o \ @@ -26,25 +26,25 @@ MODULE_OBJS := \ src/gui/InputDialog.o \ src/gui/InputTextDialog.o \ src/gui/JoystickDialog.o \ - src/gui/Launcher.o \ src/gui/LauncherDialog.o \ src/gui/LauncherFilterDialog.o \ - src/gui/LoggerDialog.o \ + src/gui/Launcher.o \ src/gui/ListWidget.o \ + src/gui/LoggerDialog.o \ src/gui/Menu.o \ src/gui/MessageBox.o \ src/gui/OptionsDialog.o \ src/gui/PopUpWidget.o \ src/gui/ProgressDialog.o \ src/gui/RadioButtonWidget.o \ - src/gui/Rewinder.o \ - src/gui/RewindDialog.o \ src/gui/RomAuditDialog.o \ src/gui/RomInfoWidget.o \ src/gui/ScrollBarWidget.o \ - src/gui/CheckListWidget.o \ + src/gui/SnapshotDialog.o \ src/gui/StringListWidget.o \ src/gui/TabWidget.o \ + src/gui/TimeMachineDialog.o \ + src/gui/TimeMachine.o \ src/gui/UIDialog.o \ src/gui/VideoDialog.o \ src/gui/Widget.o From 6181c3fbe05b2f80e2f011e811a5091bb10de1a0 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Wed, 20 Dec 2017 22:27:13 -0330 Subject: [PATCH 124/156] Updated VS project files for recent class renames. - Also fixed several classes in the wrong place compared to their on-disk location. --- src/emucore/tia/TIAConstants.hxx | 17 +++++++ src/windows/Stella.vcxproj | 11 +++-- src/windows/Stella.vcxproj.filters | 77 ++++++++++++++++-------------- 3 files changed, 63 insertions(+), 42 deletions(-) diff --git a/src/emucore/tia/TIAConstants.hxx b/src/emucore/tia/TIAConstants.hxx index ec7bc5a88..7615c58f9 100644 --- a/src/emucore/tia/TIAConstants.hxx +++ b/src/emucore/tia/TIAConstants.hxx @@ -1,3 +1,20 @@ +//============================================================================ +// +// SSSS tt lll lll +// SS SS tt ll ll +// SS tttttt eeee ll ll aaaa +// SSSS tt ee ee ll ll aa +// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" +// SS SS tt ee ll ll aa aa +// SSSS ttt eeeee llll llll aaaaa +// +// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// and the Stella Team +// +// See the file "License.txt" for information on usage and redistribution of +// this file, and for a DISCLAIMER OF ALL WARRANTIES. +//============================================================================ + #ifndef TIA_CONSTANTS_HXX #define TIA_CONSTANTS_HXX diff --git a/src/windows/Stella.vcxproj b/src/windows/Stella.vcxproj index 37c361957..c9225f627 100644 --- a/src/windows/Stella.vcxproj +++ b/src/windows/Stella.vcxproj @@ -345,9 +345,9 @@ - - + + @@ -639,23 +639,24 @@ + + - - + + - diff --git a/src/windows/Stella.vcxproj.filters b/src/windows/Stella.vcxproj.filters index 5631a0089..7997369dd 100644 --- a/src/windows/Stella.vcxproj.filters +++ b/src/windows/Stella.vcxproj.filters @@ -849,21 +849,6 @@ Source Files\debugger - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - Source Files\gui @@ -885,12 +870,27 @@ Source Files\debugger - + Source Files\gui - + Source Files\gui + + Source Files\emucore\tia + + + Source Files\emucore\tia + + + Source Files\emucore\tia + + + Source Files\emucore\tia + + + Source Files\emucore\tia + @@ -1775,24 +1775,6 @@ Header Files - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files\gui - Header Files\gui @@ -1814,12 +1796,33 @@ Header Files\debugger - + Header Files\gui - + Header Files\gui + + Header Files\gui + + + Header Files\emucore\tia + + + Header Files\emucore\tia + + + Header Files\emucore\tia + + + Header Files\emucore\tia + + + Header Files\emucore\tia + + + Header Files\emucore\tia + From 24fccba02502f671f8f0a95021f0a8ba7cdb4420 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Wed, 20 Dec 2017 22:39:58 -0330 Subject: [PATCH 125/156] Updated OSX project file for TimeMachine classes. --- src/macosx/stella.xcodeproj/project.pbxproj | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/macosx/stella.xcodeproj/project.pbxproj b/src/macosx/stella.xcodeproj/project.pbxproj index 67989e38c..0358d89a8 100644 --- a/src/macosx/stella.xcodeproj/project.pbxproj +++ b/src/macosx/stella.xcodeproj/project.pbxproj @@ -427,6 +427,10 @@ DCA078351F8C1B04008EFEE5 /* SDL_lib.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCA078331F8C1B04008EFEE5 /* SDL_lib.hxx */; }; DCA23AE90D75B22500F77B33 /* CartX07.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCA23AE70D75B22500F77B33 /* CartX07.cxx */; }; DCA23AEA0D75B22500F77B33 /* CartX07.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCA23AE80D75B22500F77B33 /* CartX07.hxx */; }; + DCA82C711FEB4E780059340F /* TimeMachine.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCA82C6D1FEB4E780059340F /* TimeMachine.cxx */; }; + DCA82C721FEB4E780059340F /* TimeMachine.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCA82C6E1FEB4E780059340F /* TimeMachine.hxx */; }; + DCA82C731FEB4E780059340F /* TimeMachineDialog.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCA82C6F1FEB4E780059340F /* TimeMachineDialog.cxx */; }; + DCA82C741FEB4E780059340F /* TimeMachineDialog.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCA82C701FEB4E780059340F /* TimeMachineDialog.hxx */; }; DCAACAF6188D631500A4D282 /* Cart4KSC.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCAACAEC188D631500A4D282 /* Cart4KSC.cxx */; }; DCAACAF7188D631500A4D282 /* Cart4KSC.hxx in Headers */ = {isa = PBXBuildFile; fileRef = DCAACAED188D631500A4D282 /* Cart4KSC.hxx */; }; DCAACAF8188D631500A4D282 /* CartBF.cxx in Sources */ = {isa = PBXBuildFile; fileRef = DCAACAEE188D631500A4D282 /* CartBF.cxx */; }; @@ -1091,6 +1095,10 @@ DCA23AE70D75B22500F77B33 /* CartX07.cxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CartX07.cxx; sourceTree = ""; }; DCA23AE80D75B22500F77B33 /* CartX07.hxx */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.h; path = CartX07.hxx; sourceTree = ""; }; DCA43BFF10DED5890070CEFD /* Info-Stella.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Info-Stella.plist"; sourceTree = ""; }; + DCA82C6D1FEB4E780059340F /* TimeMachine.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TimeMachine.cxx; sourceTree = ""; }; + DCA82C6E1FEB4E780059340F /* TimeMachine.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = TimeMachine.hxx; sourceTree = ""; }; + DCA82C6F1FEB4E780059340F /* TimeMachineDialog.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TimeMachineDialog.cxx; sourceTree = ""; }; + DCA82C701FEB4E780059340F /* TimeMachineDialog.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = TimeMachineDialog.hxx; sourceTree = ""; }; DCAACAEC188D631500A4D282 /* Cart4KSC.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Cart4KSC.cxx; sourceTree = ""; }; DCAACAED188D631500A4D282 /* Cart4KSC.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Cart4KSC.hxx; sourceTree = ""; }; DCAACAEE188D631500A4D282 /* CartBF.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CartBF.cxx; sourceTree = ""; }; @@ -1895,6 +1903,10 @@ 2DEF21FB08BC033500B246B4 /* StringListWidget.hxx */, 2DDBEAD0084578BF00812C11 /* TabWidget.cxx */, 2DDBEAD1084578BF00812C11 /* TabWidget.hxx */, + DCA82C6D1FEB4E780059340F /* TimeMachine.cxx */, + DCA82C6E1FEB4E780059340F /* TimeMachine.hxx */, + DCA82C6F1FEB4E780059340F /* TimeMachineDialog.cxx */, + DCA82C701FEB4E780059340F /* TimeMachineDialog.hxx */, DC8078E60B4BD697005E9305 /* UIDialog.cxx */, DC8078E70B4BD697005E9305 /* UIDialog.hxx */, 2DDBEAD2084578BF00812C11 /* VideoDialog.cxx */, @@ -2280,6 +2292,7 @@ DC2B85E81EF5EF2300379EB9 /* AtariNTSC.hxx in Headers */, DCF467C30F939A1400B25D7A /* CartEF.hxx in Headers */, DC68F8901FA64C5300F4A2CC /* TIAConstants.hxx in Headers */, + DCA82C721FEB4E780059340F /* TimeMachine.hxx in Headers */, DCF467C50F939A1400B25D7A /* CartEFSC.hxx in Headers */, DC3EE8641E2C0E6D00905161 /* inffixed.h in Headers */, DC5D1AA7102C6FC900E59AC1 /* Stack.hxx in Headers */, @@ -2392,6 +2405,7 @@ DCAACAFF188D631500A4D282 /* CartDFSC.hxx in Headers */, DCAACB0F188D636F00A4D282 /* Cart4KSCWidget.hxx in Headers */, DCAACB11188D636F00A4D282 /* CartBFSCWidget.hxx in Headers */, + DCA82C741FEB4E780059340F /* TimeMachineDialog.hxx in Headers */, DC6A18FD19B3E67A00DEB242 /* CartMDM.hxx in Headers */, DCDDEAC51F5DBF0400C67366 /* RewindManager.hxx in Headers */, DCAACB13188D636F00A4D282 /* CartBFWidget.hxx in Headers */, @@ -2614,6 +2628,7 @@ 2D9174FD09BA90380026E9FF /* RomListWidget.cxx in Sources */, DCF3A6F81DFC75E3008A8AF3 /* PaddleReader.cxx in Sources */, 2D9174FE09BA90380026E9FF /* RomWidget.cxx in Sources */, + DCA82C731FEB4E780059340F /* TimeMachineDialog.cxx in Sources */, 2D9174FF09BA90380026E9FF /* TiaInfoWidget.cxx in Sources */, 2D91750009BA90380026E9FF /* TiaOutputWidget.cxx in Sources */, 2D91750109BA90380026E9FF /* TiaWidget.cxx in Sources */, @@ -2677,6 +2692,7 @@ DCB20EC71A0C506C0048F595 /* main.cxx in Sources */, DC6B2BA611037FF200F199A7 /* DiStella.cxx in Sources */, CFE3F6151E84A9CE00A8204E /* CartCDF.cxx in Sources */, + DCA82C711FEB4E780059340F /* TimeMachine.cxx in Sources */, DCD3F7C511340AAF00DBA3AE /* Genesis.cxx in Sources */, DCAD60A81152F8BD00BC4184 /* CartDPCPlus.cxx in Sources */, DC5ACB5B1FBFCE8E00A213FD /* DeveloperDialog.cxx in Sources */, From 65ed71479a71376ea6a7e28d45fde4e95c1e5ff5 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Thu, 21 Dec 2017 08:48:07 +0100 Subject: [PATCH 126/156] no background highlighting of disabled widgets --- src/gui/Widget.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/Widget.cxx b/src/gui/Widget.cxx index b754cdf6b..88515a7b1 100644 --- a/src/gui/Widget.cxx +++ b/src/gui/Widget.cxx @@ -85,7 +85,7 @@ void Widget::draw() x++; y++; w-=2; h-=2; } #ifndef FLAT_UI - s.fillRect(x, y, w, h, (_flags & WIDGET_HILITED) ? _bgcolorhi : _bgcolor); + s.fillRect(x, y, w, h, (_flags & WIDGET_HILITED) && isEnabled() ? _bgcolorhi : _bgcolor); #else s.fillRect(x, y, w, h, (_flags & WIDGET_HILITED) && isEnabled() ? _bgcolorhi : _bgcolor); #endif From e37b5305cf13709d4eff8cb061a94114b8976fef Mon Sep 17 00:00:00 2001 From: thrust26 Date: Thu, 21 Dec 2017 11:34:08 +0100 Subject: [PATCH 127/156] code cleanup --- src/common/RewindManager.cxx | 41 ++++++++++++------------------------ src/common/RewindManager.hxx | 4 ++-- 2 files changed, 16 insertions(+), 29 deletions(-) diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index 21345bb99..7e58d5ddb 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -145,14 +145,14 @@ uInt32 RewindManager::rewindState(uInt32 numStates) for(i = 0; i < numStates; ++i) { - if(!atFirst()) + if(!atFirst()) { if(!myLastTimeMachineAdd) // Set internal current iterator to previous state (back in time), - // since we will now processed this state + // since we will now process this state... myStateList.moveToPrevious(); else - // except fif the last state was added automatically, + // ...except when the last state was added automatically, // because that already happened one interval before myLastTimeMachineAdd = false; @@ -165,16 +165,8 @@ uInt32 RewindManager::rewindState(uInt32 numStates) } if(i) - { - RewindState& state = myStateList.current(); - Serializer& s = state.data; - - myStateManager.loadState(s); - myOSystem.console().tia().loadDisplay(s); - - // Get message indicating the rewind state - message = getMessage(startCycles, i); - } + // Load the current state and get the message string for the rewind + message = loadState(startCycles, i); else message = "Rewind not possible"; @@ -194,7 +186,7 @@ uInt32 RewindManager::unwindState(uInt32 numStates) if(!atLast()) { // Set internal current iterator to nextCycles state (forward in time), - // since we've now processed this state + // since we will now process this state myStateList.moveToNext(); RewindState& state = myStateList.current(); @@ -206,17 +198,8 @@ uInt32 RewindManager::unwindState(uInt32 numStates) } if(i) - { - RewindState& state = myStateList.current(); - Serializer& s = state.data; - - myStateManager.loadState(s); - myOSystem.console().tia().loadDisplay(s); - - // Get message indicating the rewind state - message = getMessage(startCycles, i); - myOSystem.frameBuffer().showMessage(message); - } + // Load the current state and get the message string for the unwind + message = loadState(startCycles, i); else message = "Unwind not possible"; @@ -227,7 +210,6 @@ uInt32 RewindManager::unwindState(uInt32 numStates) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void RewindManager::compressStates() { -// uInt64 currentCycles = myOSystem.console().tia().cycles(); double expectedCycles = myInterval * myFactor * (1 + myFactor); double maxError = 1; uInt32 idx = myStateList.size() - 2; @@ -269,9 +251,14 @@ void RewindManager::compressStates() } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -string RewindManager::getMessage(Int64 startCycles, uInt32 numStates) +string RewindManager::loadState(Int64 startCycles, uInt32 numStates) { RewindState& state = myStateList.current(); + Serializer& s = state.data; + + myStateManager.loadState(s); + myOSystem.console().tia().loadDisplay(s); + Int64 diff = startCycles - state.cycles; stringstream message; diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index d07f37f97..8c70feed7 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -170,11 +170,11 @@ class RewindManager void compressStates(); /** - Get the message string for the rewind/unwind + Load the current state and get the message string for the rewind/unwind @return The message */ - string getMessage(Int64 startCycles, uInt32 numStates); + string loadState(Int64 startCycles, uInt32 numStates); private: // Following constructors and assignment operators not supported From 4250f5d102f46374b9920c3bc52335fd4905c8a1 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Thu, 21 Dec 2017 19:44:18 -0330 Subject: [PATCH 128/156] Refactor EventHandler kbdXXX functions into StellaKeys: - These functions did not really have anything to do with EventHandler - StellaKeys is the proper place, since they're testing against a StellaMod - This removes the need to include 'EventHandler.hxx' in many header files, again reducing dependencies --- src/common/StellaKeys.hxx | 23 +++++++++++++++++++++++ src/debugger/gui/DataGridWidget.cxx | 9 ++++----- src/debugger/gui/DebuggerDialog.cxx | 13 +++++++------ src/debugger/gui/PromptWidget.cxx | 18 +++++++++--------- src/debugger/gui/RomListWidget.cxx | 4 ++-- src/debugger/gui/ToggleWidget.cxx | 5 ++--- src/emucore/EventHandler.cxx | 10 +++++----- src/emucore/EventHandler.hxx | 19 ------------------- src/gui/Dialog.cxx | 8 ++++---- src/gui/EditableWidget.cxx | 10 +++++----- src/gui/LauncherDialog.cxx | 3 ++- src/gui/ListWidget.cxx | 4 ++-- 12 files changed, 65 insertions(+), 61 deletions(-) diff --git a/src/common/StellaKeys.hxx b/src/common/StellaKeys.hxx index b9e6dc9f8..105ae8352 100644 --- a/src/common/StellaKeys.hxx +++ b/src/common/StellaKeys.hxx @@ -412,4 +412,27 @@ enum StellaMod KBDM_GUI = (KBDM_LGUI|KBDM_RGUI) }; +// Test if specified modifier is pressed +namespace StellaModTest +{ + inline bool isAlt(int mod) + { +#if defined(BSPF_MAC_OSX) || defined(OSX_KEYS) + return (mod & KBDM_GUI); +#else + return (mod & KBDM_ALT); +#endif + } + + inline bool isControl(int mod) + { + return (mod & KBDM_CTRL); + } + + inline bool isShift(int mod) + { + return (mod & KBDM_SHIFT); + } +}; + #endif /* StellaKeys */ diff --git a/src/debugger/gui/DataGridWidget.cxx b/src/debugger/gui/DataGridWidget.cxx index 9ede2a856..074466ee0 100644 --- a/src/debugger/gui/DataGridWidget.cxx +++ b/src/debugger/gui/DataGridWidget.cxx @@ -19,13 +19,13 @@ #include "Dialog.hxx" #include "Font.hxx" #include "Debugger.hxx" -#include "EventHandler.hxx" #include "FrameBuffer.hxx" #include "FBSurface.hxx" #include "DataGridWidget.hxx" #include "DataGridOpsWidget.hxx" #include "RamWidget.hxx" #include "ScrollBarWidget.hxx" +#include "StellaKeys.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DataGridWidget::DataGridWidget(GuiObject* boss, const GUI::Font& font, @@ -332,8 +332,7 @@ bool DataGridWidget::handleText(char text) bool DataGridWidget::handleKeyDown(StellaKey key, StellaMod mod) { // Ignore all mod keys - if(instance().eventHandler().kbdControl(mod) || - instance().eventHandler().kbdAlt(mod)) + if(StellaModTest::isControl(mod) || StellaModTest::isAlt(mod)) return true; bool handled = true; @@ -415,7 +414,7 @@ bool DataGridWidget::handleKeyDown(StellaKey key, StellaMod mod) break; case KBDK_PAGEUP: - if(instance().eventHandler().kbdShift(mod) && _scrollBar) + if(StellaModTest::isShift(mod) && _scrollBar) handleMouseWheel(0, 0, -1); else if (_currentRow > 0) { @@ -425,7 +424,7 @@ bool DataGridWidget::handleKeyDown(StellaKey key, StellaMod mod) break; case KBDK_PAGEDOWN: - if(instance().eventHandler().kbdShift(mod) && _scrollBar) + if(StellaModTest::isShift(mod) && _scrollBar) handleMouseWheel(0, 0, +1); else if (_currentRow < int(_rows) - 1) { diff --git a/src/debugger/gui/DebuggerDialog.cxx b/src/debugger/gui/DebuggerDialog.cxx index b69b7fe93..f87e122d9 100644 --- a/src/debugger/gui/DebuggerDialog.cxx +++ b/src/debugger/gui/DebuggerDialog.cxx @@ -19,6 +19,7 @@ #include "Widget.hxx" #include "Dialog.hxx" #include "Settings.hxx" +#include "StellaKeys.hxx" #include "EventHandler.hxx" #include "TabWidget.hxx" #include "TiaInfoWidget.hxx" @@ -84,7 +85,7 @@ void DebuggerDialog::loadConfig() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DebuggerDialog::handleKeyDown(StellaKey key, StellaMod mod) { - if(key == KBDK_GRAVE && !instance().eventHandler().kbdShift(mod)) + if(key == KBDK_GRAVE && !StellaModTest::isShift(mod)) { // Swallow backtick, so we don't see it when exiting the debugger instance().eventHandler().enableTextEvents(false); @@ -93,22 +94,22 @@ void DebuggerDialog::handleKeyDown(StellaKey key, StellaMod mod) { instance().debugger().parser().run("savesnap"); } - else if(instance().eventHandler().kbdControl(mod)) + else if(StellaModTest::isControl(mod)) { switch(key) { case KBDK_R: - if(instance().eventHandler().kbdAlt(mod)) + if(StellaModTest::isAlt(mod)) doRewindAll(); - else if(instance().eventHandler().kbdShift(mod)) + else if(StellaModTest::isShift(mod)) doRewind10(); else doRewind(); break; case KBDK_Y: - if(instance().eventHandler().kbdAlt(mod)) + if(StellaModTest::isAlt(mod)) doUnwindAll(); - else if(instance().eventHandler().kbdShift(mod)) + else if(StellaModTest::isShift(mod)) doUnwind10(); else doUnwind(); diff --git a/src/debugger/gui/PromptWidget.cxx b/src/debugger/gui/PromptWidget.cxx index 0a324943f..d2378174e 100644 --- a/src/debugger/gui/PromptWidget.cxx +++ b/src/debugger/gui/PromptWidget.cxx @@ -18,7 +18,7 @@ #include "ScrollBarWidget.hxx" #include "FBSurface.hxx" #include "Font.hxx" -#include "EventHandler.hxx" +#include "StellaKeys.hxx" #include "Version.hxx" #include "Debugger.hxx" #include "DebuggerDialog.hxx" @@ -329,7 +329,7 @@ bool PromptWidget::handleKeyDown(StellaKey key, StellaMod mod) break; case KBDK_PAGEUP: - if (instance().eventHandler().kbdShift(mod)) + if (StellaModTest::isShift(mod)) { // Don't scroll up when at top of buffer if(_scrollLine < _linesPerPage) @@ -345,7 +345,7 @@ bool PromptWidget::handleKeyDown(StellaKey key, StellaMod mod) break; case KBDK_PAGEDOWN: - if (instance().eventHandler().kbdShift(mod)) + if (StellaModTest::isShift(mod)) { // Don't scroll down when at bottom of buffer if(_scrollLine >= _promptEndPos / _lineWidth) @@ -361,7 +361,7 @@ bool PromptWidget::handleKeyDown(StellaKey key, StellaMod mod) break; case KBDK_HOME: - if (instance().eventHandler().kbdShift(mod)) + if (StellaModTest::isShift(mod)) { _scrollLine = _firstLineInBuffer + _linesPerPage - 1; updateScrollBuffer(); @@ -373,7 +373,7 @@ bool PromptWidget::handleKeyDown(StellaKey key, StellaMod mod) break; case KBDK_END: - if (instance().eventHandler().kbdShift(mod)) + if (StellaModTest::isShift(mod)) { _scrollLine = _promptEndPos / _lineWidth; if (_scrollLine < _linesPerPage - 1) @@ -387,7 +387,7 @@ bool PromptWidget::handleKeyDown(StellaKey key, StellaMod mod) break; case KBDK_UP: - if (instance().eventHandler().kbdShift(mod)) + if (StellaModTest::isShift(mod)) { if(_scrollLine <= _firstLineInBuffer + _linesPerPage - 1) break; @@ -402,7 +402,7 @@ bool PromptWidget::handleKeyDown(StellaKey key, StellaMod mod) break; case KBDK_DOWN: - if (instance().eventHandler().kbdShift(mod)) + if (StellaModTest::isShift(mod)) { // Don't scroll down when at bottom of buffer if(_scrollLine >= _promptEndPos / _lineWidth) @@ -432,11 +432,11 @@ bool PromptWidget::handleKeyDown(StellaKey key, StellaMod mod) break; default: - if (instance().eventHandler().kbdControl(mod)) + if (StellaModTest::isControl(mod)) { specialKeys(key); } - else if (instance().eventHandler().kbdAlt(mod)) + else if (StellaModTest::isAlt(mod)) { // Placeholder only - this will never be reached } diff --git a/src/debugger/gui/RomListWidget.cxx b/src/debugger/gui/RomListWidget.cxx index 5c8a0c8fc..5328f74b0 100644 --- a/src/debugger/gui/RomListWidget.cxx +++ b/src/debugger/gui/RomListWidget.cxx @@ -20,7 +20,7 @@ #include "DiStella.hxx" #include "PackedBitArray.hxx" #include "Widget.hxx" -#include "EventHandler.hxx" +#include "StellaKeys.hxx" #include "FBSurface.hxx" #include "Font.hxx" #include "ScrollBarWidget.hxx" @@ -303,7 +303,7 @@ bool RomListWidget::handleText(char text) bool RomListWidget::handleKeyDown(StellaKey key, StellaMod mod) { // Ignore all Alt-mod keys - if(instance().eventHandler().kbdAlt(mod)) + if(StellaModTest::isAlt(mod)) return true; bool handled = true; diff --git a/src/debugger/gui/ToggleWidget.cxx b/src/debugger/gui/ToggleWidget.cxx index c884dfdd1..2137bfe46 100644 --- a/src/debugger/gui/ToggleWidget.cxx +++ b/src/debugger/gui/ToggleWidget.cxx @@ -16,7 +16,7 @@ //============================================================================ #include "OSystem.hxx" -#include "EventHandler.hxx" +#include "StellaKeys.hxx" #include "Widget.hxx" #include "ToggleWidget.hxx" @@ -94,8 +94,7 @@ int ToggleWidget::findItem(int x, int y) bool ToggleWidget::handleKeyDown(StellaKey key, StellaMod mod) { // Ignore all mod keys - if(instance().eventHandler().kbdControl(mod) || - instance().eventHandler().kbdAlt(mod)) + if(StellaModTest::isControl(mod) || StellaModTest::isAlt(mod)) return true; bool handled = true; diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index 6b3161d1a..368b5260b 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -274,7 +274,7 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, bool state) // An attempt to speed up event processing; we quickly check for // Control or Alt/Cmd combos first - if(kbdAlt(mod) && state) + if(StellaModTest::isAlt(mod) && state) { #ifdef BSPF_MAC_OSX // These keys work in all states @@ -302,13 +302,13 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, bool state) case KBDK_LEFT: // Alt-left(-shift) rewinds 1(10) states myOSystem.frameBuffer().setPauseDelay(); setEventState(EventHandlerState::PAUSE); - myOSystem.state().rewindState((kbdShift(mod) && state) ? 10 : 1); + myOSystem.state().rewindState((StellaModTest::isShift(mod) && state) ? 10 : 1); break; case KBDK_RIGHT: // Alt-right(-shift) unwinds 1(10) states myOSystem.frameBuffer().setPauseDelay(); setEventState(EventHandlerState::PAUSE); - myOSystem.state().unwindState((kbdShift(mod) && state) ? 10 : 1); + myOSystem.state().unwindState((StellaModTest::isShift(mod) && state) ? 10 : 1); break; case KBDK_DOWN: // Alt-down rewinds to start of list @@ -531,7 +531,7 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, bool state) else handled = false; } - else if(kbdControl(mod) && state && myUseCtrlKeyFlag) + else if(StellaModTest::isControl(mod) && state && myUseCtrlKeyFlag) { // These keys work in all states if(key == KBDK_Q) @@ -616,7 +616,7 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, bool state) // Handle keys which switch eventhandler state // Arrange the logic to take advantage of short-circuit evaluation - if(!(kbdControl(mod) || kbdShift(mod) || kbdAlt(mod)) && + if(!(StellaModTest::isControl(mod) || StellaModTest::isShift(mod) || StellaModTest::isAlt(mod)) && !state && eventStateChange(myKeyTable[key][kEmulationMode])) return; diff --git a/src/emucore/EventHandler.hxx b/src/emucore/EventHandler.hxx index a20620479..7134da34a 100644 --- a/src/emucore/EventHandler.hxx +++ b/src/emucore/EventHandler.hxx @@ -133,25 +133,6 @@ class EventHandler */ void setContinuousSnapshots(uInt32 interval); - inline bool kbdAlt(int mod) const - { - #if defined(BSPF_MAC_OSX) || defined(OSX_KEYS) - return (mod & KBDM_GUI); - #else - return (mod & KBDM_ALT); - #endif - } - - inline bool kbdControl(int mod) const - { - return (mod & KBDM_CTRL); - } - - inline bool kbdShift(int mod) const - { - return (mod & KBDM_SHIFT); - } - void enterMenuMode(EventHandlerState state); void leaveMenuMode(); bool enterDebugMode(); diff --git a/src/gui/Dialog.cxx b/src/gui/Dialog.cxx index bee6a2ac2..9c26bf530 100644 --- a/src/gui/Dialog.cxx +++ b/src/gui/Dialog.cxx @@ -334,18 +334,18 @@ void Dialog::handleKeyDown(StellaKey key, StellaMod mod) // Detect selection of previous and next tab headers and objects if(key == KBDK_TAB) { - if(instance().eventHandler().kbdControl(mod)) + if(StellaModTest::isControl(mod)) { // tab header navigation - if(instance().eventHandler().kbdShift(mod) && cycleTab(-1)) + if(StellaModTest::isShift(mod) && cycleTab(-1)) return; - else if(!instance().eventHandler().kbdShift(mod) && cycleTab(+1)) + else if(!StellaModTest::isShift(mod) && cycleTab(+1)) return; } else { // object navigation - if(instance().eventHandler().kbdShift(mod)) + if(StellaModTest::isShift(mod)) e = Event::UINavPrev; else e = Event::UINavNext; diff --git a/src/gui/EditableWidget.cxx b/src/gui/EditableWidget.cxx index fc747a1f8..612c72144 100644 --- a/src/gui/EditableWidget.cxx +++ b/src/gui/EditableWidget.cxx @@ -16,7 +16,7 @@ //============================================================================ #include "Dialog.hxx" -#include "EventHandler.hxx" +#include "StellaKeys.hxx" #include "FBSurface.hxx" #include "Font.hxx" #include "EditableWidget.hxx" @@ -113,7 +113,7 @@ bool EditableWidget::handleKeyDown(StellaKey key, StellaMod mod) return true; // Ignore all alt-mod keys - if(instance().eventHandler().kbdAlt(mod)) + if(StellaModTest::isAlt(mod)) return true; bool handled = true; @@ -146,14 +146,14 @@ bool EditableWidget::handleKeyDown(StellaKey key, StellaMod mod) break; case KBDK_LEFT: - if(instance().eventHandler().kbdControl(mod)) + if(StellaModTest::isControl(mod)) dirty = specialKeys(key); else if(_caretPos > 0) dirty = setCaretPos(_caretPos - 1); break; case KBDK_RIGHT: - if(instance().eventHandler().kbdControl(mod)) + if(StellaModTest::isControl(mod)) dirty = specialKeys(key); else if(_caretPos < int(_editString.size())) dirty = setCaretPos(_caretPos + 1); @@ -168,7 +168,7 @@ bool EditableWidget::handleKeyDown(StellaKey key, StellaMod mod) break; default: - if (instance().eventHandler().kbdControl(mod)) + if (StellaModTest::isControl(mod)) { dirty = specialKeys(key); } diff --git a/src/gui/LauncherDialog.cxx b/src/gui/LauncherDialog.cxx index 56e44bd6e..7b5dfcd79 100644 --- a/src/gui/LauncherDialog.cxx +++ b/src/gui/LauncherDialog.cxx @@ -31,6 +31,7 @@ #include "OSystem.hxx" #include "FrameBuffer.hxx" #include "EventHandler.hxx" +#include "StellaKeys.hxx" #include "Props.hxx" #include "PropsSet.hxx" #include "RomInfoWidget.hxx" @@ -424,7 +425,7 @@ void LauncherDialog::handleKeyDown(StellaKey key, StellaMod mod) { // Grab the key before passing it to the actual dialog and check for // Control-R (reload ROM listing) - if(instance().eventHandler().kbdControl(mod) && key == KBDK_R) + if(StellaModTest::isControl(mod) && key == KBDK_R) updateListing(); else Dialog::handleKeyDown(key, mod); diff --git a/src/gui/ListWidget.cxx b/src/gui/ListWidget.cxx index 6358fda51..cc7604018 100644 --- a/src/gui/ListWidget.cxx +++ b/src/gui/ListWidget.cxx @@ -23,7 +23,7 @@ #include "ScrollBarWidget.hxx" #include "Dialog.hxx" #include "FrameBuffer.hxx" -#include "EventHandler.hxx" +#include "StellaKeys.hxx" #include "ListWidget.hxx" #include "bspf.hxx" @@ -298,7 +298,7 @@ bool ListWidget::handleText(char text) bool ListWidget::handleKeyDown(StellaKey key, StellaMod mod) { // Ignore all Alt-mod keys - if(instance().eventHandler().kbdAlt(mod)) + if(StellaModTest::isAlt(mod)) return true; bool handled = true; From 44c5882920f7351ff453b507830c2c8e291dc1bb Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Thu, 21 Dec 2017 19:53:54 -0330 Subject: [PATCH 129/156] Use 'enum class' instead of raw enum. --- src/common/EventHandlerSDL2.cxx | 24 ++++++++++++------------ src/emucore/EventHandler.cxx | 6 +++--- src/emucore/EventHandler.hxx | 26 +++++++++++++------------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/common/EventHandlerSDL2.cxx b/src/common/EventHandlerSDL2.cxx index eb4e0de1d..0c5a38881 100644 --- a/src/common/EventHandlerSDL2.cxx +++ b/src/common/EventHandlerSDL2.cxx @@ -148,42 +148,42 @@ void EventHandlerSDL2::pollEvent() switch(myEvent.window.event) { case SDL_WINDOWEVENT_SHOWN: - handleSystemEvent(EVENT_WINDOW_SHOWN); + handleSystemEvent(SystemEvent::WINDOW_SHOWN); break; case SDL_WINDOWEVENT_HIDDEN: - handleSystemEvent(EVENT_WINDOW_HIDDEN); + handleSystemEvent(SystemEvent::WINDOW_HIDDEN); break; case SDL_WINDOWEVENT_EXPOSED: - handleSystemEvent(EVENT_WINDOW_EXPOSED); + handleSystemEvent(SystemEvent::WINDOW_EXPOSED); break; case SDL_WINDOWEVENT_MOVED: - handleSystemEvent(EVENT_WINDOW_MOVED, + handleSystemEvent(SystemEvent::WINDOW_MOVED, myEvent.window.data1, myEvent.window.data1); break; case SDL_WINDOWEVENT_RESIZED: - handleSystemEvent(EVENT_WINDOW_RESIZED, + handleSystemEvent(SystemEvent::WINDOW_RESIZED, myEvent.window.data1, myEvent.window.data1); break; case SDL_WINDOWEVENT_MINIMIZED: - handleSystemEvent(EVENT_WINDOW_MINIMIZED); + handleSystemEvent(SystemEvent::WINDOW_MINIMIZED); break; case SDL_WINDOWEVENT_MAXIMIZED: - handleSystemEvent(EVENT_WINDOW_MAXIMIZED); + handleSystemEvent(SystemEvent::WINDOW_MAXIMIZED); break; case SDL_WINDOWEVENT_RESTORED: - handleSystemEvent(EVENT_WINDOW_RESTORED); + handleSystemEvent(SystemEvent::WINDOW_RESTORED); break; case SDL_WINDOWEVENT_ENTER: - handleSystemEvent(EVENT_WINDOW_ENTER); + handleSystemEvent(SystemEvent::WINDOW_ENTER); break; case SDL_WINDOWEVENT_LEAVE: - handleSystemEvent(EVENT_WINDOW_LEAVE); + handleSystemEvent(SystemEvent::WINDOW_LEAVE); break; case SDL_WINDOWEVENT_FOCUS_GAINED: - handleSystemEvent(EVENT_WINDOW_FOCUS_GAINED); + handleSystemEvent(SystemEvent::WINDOW_FOCUS_GAINED); break; case SDL_WINDOWEVENT_FOCUS_LOST: - handleSystemEvent(EVENT_WINDOW_FOCUS_LOST); + handleSystemEvent(SystemEvent::WINDOW_FOCUS_LOST); break; } break; // SDL_WINDOWEVENT diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index 368b5260b..2e7cc1a1e 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -902,18 +902,18 @@ void EventHandler::handleSystemEvent(SystemEvent e, int, int) { switch(e) { - case EVENT_WINDOW_EXPOSED: + case SystemEvent::WINDOW_EXPOSED: myOSystem.frameBuffer().update(); break; - case EVENT_WINDOW_FOCUS_GAINED: + case SystemEvent::WINDOW_FOCUS_GAINED: // Used to handle Alt-x key combos; sometimes the key associated with // Alt gets 'stuck' and is passed to the core for processing if(myAltKeyCounter > 0) myAltKeyCounter = 2; break; #if 0 - case EVENT_WINDOW_MINIMIZED: + case SystemEvent::WINDOW_MINIMIZED: if(myState == EventHandlerState::EMULATION) enterMenuMode(EventHandlerState::OPTIONSMENU); break; #endif diff --git a/src/emucore/EventHandler.hxx b/src/emucore/EventHandler.hxx index 7134da34a..ff498a9d0 100644 --- a/src/emucore/EventHandler.hxx +++ b/src/emucore/EventHandler.hxx @@ -322,19 +322,19 @@ class EventHandler virtual void pollEvent() = 0; // Other events that can be received from the underlying event handler - enum SystemEvent { - EVENT_WINDOW_SHOWN, - EVENT_WINDOW_HIDDEN, - EVENT_WINDOW_EXPOSED, - EVENT_WINDOW_MOVED, - EVENT_WINDOW_RESIZED, - EVENT_WINDOW_MINIMIZED, - EVENT_WINDOW_MAXIMIZED, - EVENT_WINDOW_RESTORED, - EVENT_WINDOW_ENTER, - EVENT_WINDOW_LEAVE, - EVENT_WINDOW_FOCUS_GAINED, - EVENT_WINDOW_FOCUS_LOST + enum class SystemEvent { + WINDOW_SHOWN, + WINDOW_HIDDEN, + WINDOW_EXPOSED, + WINDOW_MOVED, + WINDOW_RESIZED, + WINDOW_MINIMIZED, + WINDOW_MAXIMIZED, + WINDOW_RESTORED, + WINDOW_ENTER, + WINDOW_LEAVE, + WINDOW_FOCUS_GAINED, + WINDOW_FOCUS_LOST }; void handleSystemEvent(SystemEvent e, int data1 = 0, int data2 = 0); From e572bea6429577008d221ab692b15dd095794613 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Thu, 21 Dec 2017 20:03:53 -0330 Subject: [PATCH 130/156] Activate code to dynamically select available renderers. --- src/common/FrameBufferSDL2.cxx | 35 +++++++++++----------------------- 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/src/common/FrameBufferSDL2.cxx b/src/common/FrameBufferSDL2.cxx index be1cd5563..af38e7388 100644 --- a/src/common/FrameBufferSDL2.cxx +++ b/src/common/FrameBufferSDL2.cxx @@ -84,21 +84,19 @@ void FrameBufferSDL2::queryHardware(vector& displays, displays.emplace_back(display.w, display.h); } -#if 0 struct RenderName { string sdlName; string stellaName; }; - // create name map for all currently known SDL renderers - const int NUM_RENDERES = 5; - static const RenderName RENDERER_NAMES[NUM_RENDERES] = - { - {"direct3d", "Direct3D"}, - {"opengl", "OpenGL"}, - {"opengles", "OpenGLES"}, - {"opengles2", "OpenGLES2"}, - {"software", "Software"} + // Create name map for all currently known SDL renderers + const int NUM_RENDERERS = 5; + static const RenderName RENDERER_NAMES[NUM_RENDERERS] = { + { "direct3d", "Direct3D" }, + { "opengl", "OpenGL" }, + { "opengles", "OpenGLES" }, + { "opengles2", "OpenGLES2" }, + { "software", "Software" } }; int numDrivers = SDL_GetNumRenderDrivers(); @@ -107,9 +105,9 @@ void FrameBufferSDL2::queryHardware(vector& displays, SDL_RendererInfo info; if(SDL_GetRenderDriverInfo(i, &info) == 0) { - // map SDL names into nicer Stella names + // Map SDL names into nicer Stella names (if available) bool found = false; - for(int j = 0; j < NUM_RENDERES; ++j) + for(int j = 0; j < NUM_RENDERERS; ++j) { if(RENDERER_NAMES[j].sdlName == info.name) { @@ -118,21 +116,10 @@ void FrameBufferSDL2::queryHardware(vector& displays, break; } } - if (!found) + if(!found) VarList::push_back(renderers, info.name, info.name); } } -#endif - - // For now, supported render types are hardcoded; eventually, SDL may - // provide a method to query this -#if defined(BSPF_WINDOWS) - VarList::push_back(renderers, "Direct3D", "direct3d"); -#endif - VarList::push_back(renderers, "OpenGL", "opengl"); - VarList::push_back(renderers, "OpenGLES2", "opengles2"); - VarList::push_back(renderers, "OpenGLES", "opengles"); - VarList::push_back(renderers, "Software", "software"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From cbb494d7adb11e807622cf6a9ab2526a4f7d715d Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Thu, 21 Dec 2017 23:04:17 -0330 Subject: [PATCH 131/156] HiDPI fixes for framebuffer messages. --- src/emucore/FrameBuffer.cxx | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index 5045fbb8d..16390f83c 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -418,6 +418,8 @@ void FrameBuffer::enableMessages(bool enable) inline void FrameBuffer::drawMessage() { // Draw the bounded box and text + const GUI::Rect& dst = myMsg.surface->dstRect(); + switch(myMsg.position) { case MessagePosition::TopLeft: @@ -426,43 +428,43 @@ inline void FrameBuffer::drawMessage() break; case MessagePosition::TopCenter: - myMsg.x = (myImageRect.width() - myMsg.w) >> 1; + myMsg.x = (myImageRect.width() - dst.width()) >> 1; myMsg.y = 5; break; case MessagePosition::TopRight: - myMsg.x = myImageRect.width() - myMsg.w - 5; + myMsg.x = myImageRect.width() - dst.width() - 5; myMsg.y = 5; break; case MessagePosition::MiddleLeft: myMsg.x = 5; - myMsg.y = (myImageRect.height() - myMsg.h) >> 1; + myMsg.y = (myImageRect.height() - dst.height()) >> 1; break; case MessagePosition::MiddleCenter: - myMsg.x = (myImageRect.width() - myMsg.w) >> 1; - myMsg.y = (myImageRect.height() - myMsg.h) >> 1; + myMsg.x = (myImageRect.width() - dst.width()) >> 1; + myMsg.y = (myImageRect.height() - dst.height()) >> 1; break; case MessagePosition::MiddleRight: - myMsg.x = myImageRect.width() - myMsg.w - 5; - myMsg.y = (myImageRect.height() - myMsg.h) >> 1; + myMsg.x = myImageRect.width() - dst.width() - 5; + myMsg.y = (myImageRect.height() - dst.height()) >> 1; break; case MessagePosition::BottomLeft: myMsg.x = 5; - myMsg.y = myImageRect.height() - myMsg.h - 5; + myMsg.y = myImageRect.height() - dst.height() - 5; break; case MessagePosition::BottomCenter: - myMsg.x = (myImageRect.width() - myMsg.w) >> 1; - myMsg.y = myImageRect.height() - myMsg.h - 5; + myMsg.x = (myImageRect.width() - dst.width()) >> 1; + myMsg.y = myImageRect.height() - dst.height() - 5; break; case MessagePosition::BottomRight: - myMsg.x = myImageRect.width() - myMsg.w - 5; - myMsg.y = myImageRect.height() - myMsg.h - 5; + myMsg.x = myImageRect.width() - dst.width() - 5; + myMsg.y = myImageRect.height() - dst.height() - 5; break; } From ad69e8900d35c648d87abfe06a5b8af8d0051e23 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Fri, 22 Dec 2017 12:28:06 -0330 Subject: [PATCH 132/156] Time Machine dialog can now be toggled by pressing 'T'. - Note that the dialog is currently empty - See src/gui/CommandDialog for example of how to fill this dialog box --- src/emucore/Event.hxx | 2 +- src/emucore/EventHandler.cxx | 19 ++++++++++++++---- src/emucore/EventHandler.hxx | 2 +- src/gui/TimeMachineDialog.cxx | 37 +++++++++++++++++++++++++++++++---- src/gui/TimeMachineDialog.hxx | 7 +++++++ 5 files changed, 57 insertions(+), 10 deletions(-) diff --git a/src/emucore/Event.hxx b/src/emucore/Event.hxx index 0ed81b6d8..111c31220 100644 --- a/src/emucore/Event.hxx +++ b/src/emucore/Event.hxx @@ -71,7 +71,7 @@ class Event MouseButtonLeftValue, MouseButtonRightValue, ChangeState, LoadState, SaveState, TakeSnapshot, Quit, - PauseMode, MenuMode, CmdMenuMode, DebuggerMode, LauncherMode, + PauseMode, OptionsMenuMode, CmdMenuMode, TimeMachineMode, DebuggerMode, LauncherMode, Fry, VolumeDecrease, VolumeIncrease, UIUp, UIDown, UILeft, UIRight, UIHome, UIEnd, UIPgUp, UIPgDown, diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index 2e7cc1a1e..019818b42 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -1227,7 +1227,7 @@ bool EventHandler::eventStateChange(Event::Type type) handled = false; break; - case Event::MenuMode: + case Event::OptionsMenuMode: if(myState == EventHandlerState::EMULATION) enterMenuMode(EventHandlerState::OPTIONSMENU); else @@ -1243,6 +1243,15 @@ bool EventHandler::eventStateChange(Event::Type type) handled = false; break; + case Event::TimeMachineMode: + if(myState == EventHandlerState::EMULATION) + enterMenuMode(EventHandlerState::TIMEMACHINE); + else if(myState == EventHandlerState::TIMEMACHINE) + leaveMenuMode(); + else + handled = false; + break; + case Event::DebuggerMode: if(myState == EventHandlerState::EMULATION || myState == EventHandlerState::PAUSE) enterDebugMode(); @@ -1688,8 +1697,9 @@ void EventHandler::setDefaultKeymap(Event::Type event, EventMode mode) setDefaultKey( KBDK_F12, Event::TakeSnapshot ); setDefaultKey( KBDK_BACKSPACE, Event::Fry ); setDefaultKey( KBDK_PAUSE, Event::PauseMode ); - setDefaultKey( KBDK_TAB, Event::MenuMode ); + setDefaultKey( KBDK_TAB, Event::OptionsMenuMode ); setDefaultKey( KBDK_BACKSLASH, Event::CmdMenuMode ); + setDefaultKey( KBDK_T, Event::TimeMachineMode ); setDefaultKey( KBDK_GRAVE, Event::DebuggerMode ); setDefaultKey( KBDK_ESCAPE, Event::LauncherMode ); break; @@ -2228,8 +2238,9 @@ EventHandler::ActionList EventHandler::ourEmulActionList[kEmulActionListSize] = { Event::VolumeDecrease, "Decrease volume", "", false }, { Event::VolumeIncrease, "Increase volume", "", false }, { Event::PauseMode, "Pause", "", false }, - { Event::MenuMode, "Enter options menu mode", "", false }, - { Event::CmdMenuMode, "Toggle command menu mode", "", false }, + { Event::OptionsMenuMode, "Enter options menu UI", "", false }, + { Event::CmdMenuMode, "Toggle command menu UI", "", false }, + { Event::TimeMachineMode, "Toggle time machine UI", "", false }, { Event::DebuggerMode, "Toggle debugger mode", "", false }, { Event::LauncherMode, "Enter ROM launcher", "", false }, { Event::Quit, "Quit", "", false }, diff --git a/src/emucore/EventHandler.hxx b/src/emucore/EventHandler.hxx index ff498a9d0..33363f5e4 100644 --- a/src/emucore/EventHandler.hxx +++ b/src/emucore/EventHandler.hxx @@ -457,7 +457,7 @@ class EventHandler enum { kComboSize = 16, kEventsPerCombo = 8, - kEmulActionListSize = 79 + kComboSize, + kEmulActionListSize = 80 + kComboSize, kMenuActionListSize = 14 }; diff --git a/src/gui/TimeMachineDialog.cxx b/src/gui/TimeMachineDialog.cxx index 383b72aef..c3ff5f7aa 100644 --- a/src/gui/TimeMachineDialog.cxx +++ b/src/gui/TimeMachineDialog.cxx @@ -19,6 +19,7 @@ #include "Font.hxx" #include "EventHandler.hxx" #include "FrameBuffer.hxx" +#include "FBSurface.hxx" #include "OSystem.hxx" #include "Widget.hxx" #include "TimeMachineDialog.hxx" @@ -29,11 +30,39 @@ TimeMachineDialog::TimeMachineDialog(OSystem& osystem, DialogContainer& parent, : Dialog(osystem, parent) { const GUI::Font& font = instance().frameBuffer().font(); - const int buttonWidth = font.getStringWidth("Right Diff B") + 20, - buttonHeight = font.getLineHeight() + 6, + const int buttonWidth = font.getStringWidth(" ") + 20, +// buttonHeight = font.getLineHeight() + 6, rowHeight = font.getLineHeight() + 10; + WidgetArray wid; + // Set real dimensions - _w = 3 * (buttonWidth + 5) + 20; - _h = 6 * rowHeight + 15; + _w = 10 * (buttonWidth + 5) + 20; + _h = 2 * rowHeight + 15; +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TimeMachineDialog::center() +{ + // Place on the bottom of the screen, centered horizontally + const GUI::Size& screen = instance().frameBuffer().screenSize(); + const GUI::Rect& dst = surface().dstRect(); + surface().setDstPos((screen.w - dst.width()) >> 1, screen.h - dst.height() - 10); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TimeMachineDialog::loadConfig() +{ +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TimeMachineDialog::handleCommand(CommandSender* sender, int cmd, + int data, int id) +{ +cerr << cmd << endl; + switch(cmd) + { + default: + Dialog::handleCommand(sender, cmd, data, 0); + } } diff --git a/src/gui/TimeMachineDialog.hxx b/src/gui/TimeMachineDialog.hxx index 27fe4149a..253e9f3c8 100644 --- a/src/gui/TimeMachineDialog.hxx +++ b/src/gui/TimeMachineDialog.hxx @@ -30,6 +30,13 @@ class TimeMachineDialog : public Dialog TimeMachineDialog(OSystem& osystem, DialogContainer& parent, int max_w, int max_h); virtual ~TimeMachineDialog() = default; + private: + void loadConfig() override; + void handleCommand(CommandSender* sender, int cmd, int data, int id) override; + + /** This dialog uses its own positioning, so we override Dialog::center() */ + void center() override; + private: // Following constructors and assignment operators not supported TimeMachineDialog() = delete; From 93dcc9807df3098f28108c95487d818d8b93eb55 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Fri, 22 Dec 2017 23:47:07 -0330 Subject: [PATCH 133/156] Integrate 'TIATypes' into 'TIAConstants'; they serve the same purpose. --- src/common/SoundSDL2.cxx | 2 +- src/debugger/CartDebug.cxx | 2 +- src/debugger/gui/DelayQueueWidget.cxx | 2 +- src/emucore/Console.hxx | 2 +- src/emucore/Random.hxx | 2 - src/emucore/TIASnd.cxx | 2 +- src/emucore/TIATypes.hxx | 128 -------------------------- src/emucore/tia/TIA.hxx | 1 - src/emucore/tia/TIAConstants.hxx | 106 ++++++++++++++++++++- 9 files changed, 110 insertions(+), 137 deletions(-) delete mode 100644 src/emucore/TIATypes.hxx diff --git a/src/common/SoundSDL2.cxx b/src/common/SoundSDL2.cxx index 34fe07b16..d9515e8ff 100644 --- a/src/common/SoundSDL2.cxx +++ b/src/common/SoundSDL2.cxx @@ -23,7 +23,7 @@ #include "SDL_lib.hxx" #include "TIASnd.hxx" -#include "TIATypes.hxx" +#include "TIAConstants.hxx" #include "FrameBuffer.hxx" #include "Settings.hxx" #include "System.hxx" diff --git a/src/debugger/CartDebug.cxx b/src/debugger/CartDebug.cxx index 8850ee4a3..dbf330af7 100644 --- a/src/debugger/CartDebug.cxx +++ b/src/debugger/CartDebug.cxx @@ -15,7 +15,7 @@ // this file, and for a DISCLAIMER OF ALL WARRANTIES. //============================================================================ -#include +#include #include "bspf.hxx" #include "System.hxx" diff --git a/src/debugger/gui/DelayQueueWidget.cxx b/src/debugger/gui/DelayQueueWidget.cxx index 22f944f27..eb842e024 100644 --- a/src/debugger/gui/DelayQueueWidget.cxx +++ b/src/debugger/gui/DelayQueueWidget.cxx @@ -18,10 +18,10 @@ #include "DelayQueueWidget.hxx" #include "DelayQueueIterator.hxx" #include "OSystem.hxx" -#include "TIATypes.hxx" #include "Debugger.hxx" #include "CartDebug.hxx" #include "TIADebug.hxx" +#include "TIAConstants.hxx" #include "FBSurface.hxx" #include "Font.hxx" #include "Base.hxx" diff --git a/src/emucore/Console.hxx b/src/emucore/Console.hxx index 695f5aefc..a40d30baa 100644 --- a/src/emucore/Console.hxx +++ b/src/emucore/Console.hxx @@ -31,7 +31,7 @@ class Debugger; #include "bspf.hxx" #include "Control.hxx" #include "Props.hxx" -#include "TIATypes.hxx" +#include "TIAConstants.hxx" #include "FrameBuffer.hxx" #include "Serializable.hxx" #include "EventHandlerConstants.hxx" diff --git a/src/emucore/Random.hxx b/src/emucore/Random.hxx index 0eb989f4d..04c87ebf4 100644 --- a/src/emucore/Random.hxx +++ b/src/emucore/Random.hxx @@ -18,8 +18,6 @@ #ifndef RANDOM_HXX #define RANDOM_HXX -#include - #include "bspf.hxx" #include "OSystem.hxx" #include "Serializable.hxx" diff --git a/src/emucore/TIASnd.cxx b/src/emucore/TIASnd.cxx index ed8457e26..3378a31e9 100644 --- a/src/emucore/TIASnd.cxx +++ b/src/emucore/TIASnd.cxx @@ -16,7 +16,7 @@ //============================================================================ #include "System.hxx" -#include "TIATypes.hxx" +#include "TIAConstants.hxx" #include "TIASnd.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/TIATypes.hxx b/src/emucore/TIATypes.hxx deleted file mode 100644 index 4b416e121..000000000 --- a/src/emucore/TIATypes.hxx +++ /dev/null @@ -1,128 +0,0 @@ -//============================================================================ -// -// SSSS tt lll lll -// SS SS tt ll ll -// SS tttttt eeee ll ll aaaa -// SSSS tt ee ee ll ll aa -// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" -// SS SS tt ee ll ll aa aa -// SSSS ttt eeeee llll llll aaaaa -// -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony -// and the Stella Team -// -// See the file "License.txt" for information on usage and redistribution of -// this file, and for a DISCLAIMER OF ALL WARRANTIES. -//============================================================================ - -#ifndef TIA_TYPES_HXX -#define TIA_TYPES_HXX - -#include "bspf.hxx" - -enum TIABit { - P0Bit = 0x01, // Bit for Player 0 - M0Bit = 0x02, // Bit for Missle 0 - P1Bit = 0x04, // Bit for Player 1 - M1Bit = 0x08, // Bit for Missle 1 - BLBit = 0x10, // Bit for Ball - PFBit = 0x20, // Bit for Playfield - ScoreBit = 0x40, // Bit for Playfield score mode - PriorityBit = 0x80 // Bit for Playfield priority -}; - -enum TIAColor { - BKColor = 0, // Color index for Background - PFColor = 1, // Color index for Playfield - P0Color = 2, // Color index for Player 0 - P1Color = 3, // Color index for Player 1 - M0Color = 4, // Color index for Missle 0 - M1Color = 5, // Color index for Missle 1 - BLColor = 6, // Color index for Ball - HBLANKColor = 7 // Color index for HMove blank area -}; - -enum CollisionBit -{ - Cx_M0P1 = 1 << 0, // Missle0 - Player1 collision - Cx_M0P0 = 1 << 1, // Missle0 - Player0 collision - Cx_M1P0 = 1 << 2, // Missle1 - Player0 collision - Cx_M1P1 = 1 << 3, // Missle1 - Player1 collision - Cx_P0PF = 1 << 4, // Player0 - Playfield collision - Cx_P0BL = 1 << 5, // Player0 - Ball collision - Cx_P1PF = 1 << 6, // Player1 - Playfield collision - Cx_P1BL = 1 << 7, // Player1 - Ball collision - Cx_M0PF = 1 << 8, // Missle0 - Playfield collision - Cx_M0BL = 1 << 9, // Missle0 - Ball collision - Cx_M1PF = 1 << 10, // Missle1 - Playfield collision - Cx_M1BL = 1 << 11, // Missle1 - Ball collision - Cx_BLPF = 1 << 12, // Ball - Playfield collision - Cx_P0P1 = 1 << 13, // Player0 - Player1 collision - Cx_M0M1 = 1 << 14 // Missle0 - Missle1 collision -}; - -// TIA Write/Read register names -enum TIARegister { - VSYNC = 0x00, // Write: vertical sync set-clear (D1) - VBLANK = 0x01, // Write: vertical blank set-clear (D7-6,D1) - WSYNC = 0x02, // Write: wait for leading edge of hrz. blank (strobe) - RSYNC = 0x03, // Write: reset hrz. sync counter (strobe) - NUSIZ0 = 0x04, // Write: number-size player-missle 0 (D5-0) - NUSIZ1 = 0x05, // Write: number-size player-missle 1 (D5-0) - COLUP0 = 0x06, // Write: color-lum player 0 (D7-1) - COLUP1 = 0x07, // Write: color-lum player 1 (D7-1) - COLUPF = 0x08, // Write: color-lum playfield (D7-1) - COLUBK = 0x09, // Write: color-lum background (D7-1) - CTRLPF = 0x0a, // Write: cntrl playfield ballsize & coll. (D5-4,D2-0) - REFP0 = 0x0b, // Write: reflect player 0 (D3) - REFP1 = 0x0c, // Write: reflect player 1 (D3) - PF0 = 0x0d, // Write: playfield register byte 0 (D7-4) - PF1 = 0x0e, // Write: playfield register byte 1 (D7-0) - PF2 = 0x0f, // Write: playfield register byte 2 (D7-0) - RESP0 = 0x10, // Write: reset player 0 (strobe) - RESP1 = 0x11, // Write: reset player 1 (strobe) - RESM0 = 0x12, // Write: reset missle 0 (strobe) - RESM1 = 0x13, // Write: reset missle 1 (strobe) - RESBL = 0x14, // Write: reset ball (strobe) - AUDC0 = 0x15, // Write: audio control 0 (D3-0) - AUDC1 = 0x16, // Write: audio control 1 (D4-0) - AUDF0 = 0x17, // Write: audio frequency 0 (D4-0) - AUDF1 = 0x18, // Write: audio frequency 1 (D3-0) - AUDV0 = 0x19, // Write: audio volume 0 (D3-0) - AUDV1 = 0x1a, // Write: audio volume 1 (D3-0) - GRP0 = 0x1b, // Write: graphics player 0 (D7-0) - GRP1 = 0x1c, // Write: graphics player 1 (D7-0) - ENAM0 = 0x1d, // Write: graphics (enable) missle 0 (D1) - ENAM1 = 0x1e, // Write: graphics (enable) missle 1 (D1) - ENABL = 0x1f, // Write: graphics (enable) ball (D1) - HMP0 = 0x20, // Write: horizontal motion player 0 (D7-4) - HMP1 = 0x21, // Write: horizontal motion player 1 (D7-4) - HMM0 = 0x22, // Write: horizontal motion missle 0 (D7-4) - HMM1 = 0x23, // Write: horizontal motion missle 1 (D7-4) - HMBL = 0x24, // Write: horizontal motion ball (D7-4) - VDELP0 = 0x25, // Write: vertical delay player 0 (D0) - VDELP1 = 0x26, // Write: vertical delay player 1 (D0) - VDELBL = 0x27, // Write: vertical delay ball (D0) - RESMP0 = 0x28, // Write: reset missle 0 to player 0 (D1) - RESMP1 = 0x29, // Write: reset missle 1 to player 1 (D1) - HMOVE = 0x2a, // Write: apply horizontal motion (strobe) - HMCLR = 0x2b, // Write: clear horizontal motion registers (strobe) - CXCLR = 0x2c, // Write: clear collision latches (strobe) - - CXM0P = 0x00, // Read collision: D7=(M0,P1); D6=(M0,P0) - CXM1P = 0x01, // Read collision: D7=(M1,P0); D6=(M1,P1) - CXP0FB = 0x02, // Read collision: D7=(P0,PF); D6=(P0,BL) - CXP1FB = 0x03, // Read collision: D7=(P1,PF); D6=(P1,BL) - CXM0FB = 0x04, // Read collision: D7=(M0,PF); D6=(M0,BL) - CXM1FB = 0x05, // Read collision: D7=(M1,PF); D6=(M1,BL) - CXBLPF = 0x06, // Read collision: D7=(BL,PF); D6=(unused) - CXPPMM = 0x07, // Read collision: D7=(P0,P1); D6=(M0,M1) - INPT0 = 0x08, // Read pot port: D7 - INPT1 = 0x09, // Read pot port: D7 - INPT2 = 0x0a, // Read pot port: D7 - INPT3 = 0x0b, // Read pot port: D7 - INPT4 = 0x0c, // Read P1 joystick trigger: D7 - INPT5 = 0x0d // Read P2 joystick trigger: D7 -}; - -#endif // TIA_TYPES_HXX diff --git a/src/emucore/tia/TIA.hxx b/src/emucore/tia/TIA.hxx index a34169d8b..21f3c5b21 100644 --- a/src/emucore/tia/TIA.hxx +++ b/src/emucore/tia/TIA.hxx @@ -24,7 +24,6 @@ #include "Settings.hxx" #include "Device.hxx" #include "Serializer.hxx" -#include "TIATypes.hxx" #include "TIAConstants.hxx" #include "DelayQueue.hxx" #include "DelayQueueIterator.hxx" diff --git a/src/emucore/tia/TIAConstants.hxx b/src/emucore/tia/TIAConstants.hxx index 7615c58f9..976d38bb1 100644 --- a/src/emucore/tia/TIAConstants.hxx +++ b/src/emucore/tia/TIAConstants.hxx @@ -26,7 +26,111 @@ namespace TIAConstants { constexpr uInt32 minYStart = 1, maxYStart = 64; constexpr uInt32 minViewableHeight = 210, maxViewableHeight = 256; constexpr uInt32 initialGarbageFrames = 10; - } +enum TIABit { + P0Bit = 0x01, // Bit for Player 0 + M0Bit = 0x02, // Bit for Missle 0 + P1Bit = 0x04, // Bit for Player 1 + M1Bit = 0x08, // Bit for Missle 1 + BLBit = 0x10, // Bit for Ball + PFBit = 0x20, // Bit for Playfield + ScoreBit = 0x40, // Bit for Playfield score mode + PriorityBit = 0x80 // Bit for Playfield priority +}; + +enum TIAColor { + BKColor = 0, // Color index for Background + PFColor = 1, // Color index for Playfield + P0Color = 2, // Color index for Player 0 + P1Color = 3, // Color index for Player 1 + M0Color = 4, // Color index for Missle 0 + M1Color = 5, // Color index for Missle 1 + BLColor = 6, // Color index for Ball + HBLANKColor = 7 // Color index for HMove blank area +}; + +enum CollisionBit +{ + Cx_M0P1 = 1 << 0, // Missle0 - Player1 collision + Cx_M0P0 = 1 << 1, // Missle0 - Player0 collision + Cx_M1P0 = 1 << 2, // Missle1 - Player0 collision + Cx_M1P1 = 1 << 3, // Missle1 - Player1 collision + Cx_P0PF = 1 << 4, // Player0 - Playfield collision + Cx_P0BL = 1 << 5, // Player0 - Ball collision + Cx_P1PF = 1 << 6, // Player1 - Playfield collision + Cx_P1BL = 1 << 7, // Player1 - Ball collision + Cx_M0PF = 1 << 8, // Missle0 - Playfield collision + Cx_M0BL = 1 << 9, // Missle0 - Ball collision + Cx_M1PF = 1 << 10, // Missle1 - Playfield collision + Cx_M1BL = 1 << 11, // Missle1 - Ball collision + Cx_BLPF = 1 << 12, // Ball - Playfield collision + Cx_P0P1 = 1 << 13, // Player0 - Player1 collision + Cx_M0M1 = 1 << 14 // Missle0 - Missle1 collision +}; + +// TIA Write/Read register names +enum TIARegister { + VSYNC = 0x00, // Write: vertical sync set-clear (D1) + VBLANK = 0x01, // Write: vertical blank set-clear (D7-6,D1) + WSYNC = 0x02, // Write: wait for leading edge of hrz. blank (strobe) + RSYNC = 0x03, // Write: reset hrz. sync counter (strobe) + NUSIZ0 = 0x04, // Write: number-size player-missle 0 (D5-0) + NUSIZ1 = 0x05, // Write: number-size player-missle 1 (D5-0) + COLUP0 = 0x06, // Write: color-lum player 0 (D7-1) + COLUP1 = 0x07, // Write: color-lum player 1 (D7-1) + COLUPF = 0x08, // Write: color-lum playfield (D7-1) + COLUBK = 0x09, // Write: color-lum background (D7-1) + CTRLPF = 0x0a, // Write: cntrl playfield ballsize & coll. (D5-4,D2-0) + REFP0 = 0x0b, // Write: reflect player 0 (D3) + REFP1 = 0x0c, // Write: reflect player 1 (D3) + PF0 = 0x0d, // Write: playfield register byte 0 (D7-4) + PF1 = 0x0e, // Write: playfield register byte 1 (D7-0) + PF2 = 0x0f, // Write: playfield register byte 2 (D7-0) + RESP0 = 0x10, // Write: reset player 0 (strobe) + RESP1 = 0x11, // Write: reset player 1 (strobe) + RESM0 = 0x12, // Write: reset missle 0 (strobe) + RESM1 = 0x13, // Write: reset missle 1 (strobe) + RESBL = 0x14, // Write: reset ball (strobe) + AUDC0 = 0x15, // Write: audio control 0 (D3-0) + AUDC1 = 0x16, // Write: audio control 1 (D4-0) + AUDF0 = 0x17, // Write: audio frequency 0 (D4-0) + AUDF1 = 0x18, // Write: audio frequency 1 (D3-0) + AUDV0 = 0x19, // Write: audio volume 0 (D3-0) + AUDV1 = 0x1a, // Write: audio volume 1 (D3-0) + GRP0 = 0x1b, // Write: graphics player 0 (D7-0) + GRP1 = 0x1c, // Write: graphics player 1 (D7-0) + ENAM0 = 0x1d, // Write: graphics (enable) missle 0 (D1) + ENAM1 = 0x1e, // Write: graphics (enable) missle 1 (D1) + ENABL = 0x1f, // Write: graphics (enable) ball (D1) + HMP0 = 0x20, // Write: horizontal motion player 0 (D7-4) + HMP1 = 0x21, // Write: horizontal motion player 1 (D7-4) + HMM0 = 0x22, // Write: horizontal motion missle 0 (D7-4) + HMM1 = 0x23, // Write: horizontal motion missle 1 (D7-4) + HMBL = 0x24, // Write: horizontal motion ball (D7-4) + VDELP0 = 0x25, // Write: vertical delay player 0 (D0) + VDELP1 = 0x26, // Write: vertical delay player 1 (D0) + VDELBL = 0x27, // Write: vertical delay ball (D0) + RESMP0 = 0x28, // Write: reset missle 0 to player 0 (D1) + RESMP1 = 0x29, // Write: reset missle 1 to player 1 (D1) + HMOVE = 0x2a, // Write: apply horizontal motion (strobe) + HMCLR = 0x2b, // Write: clear horizontal motion registers (strobe) + CXCLR = 0x2c, // Write: clear collision latches (strobe) + + CXM0P = 0x00, // Read collision: D7=(M0,P1); D6=(M0,P0) + CXM1P = 0x01, // Read collision: D7=(M1,P0); D6=(M1,P1) + CXP0FB = 0x02, // Read collision: D7=(P0,PF); D6=(P0,BL) + CXP1FB = 0x03, // Read collision: D7=(P1,PF); D6=(P1,BL) + CXM0FB = 0x04, // Read collision: D7=(M0,PF); D6=(M0,BL) + CXM1FB = 0x05, // Read collision: D7=(M1,PF); D6=(M1,BL) + CXBLPF = 0x06, // Read collision: D7=(BL,PF); D6=(unused) + CXPPMM = 0x07, // Read collision: D7=(P0,P1); D6=(M0,M1) + INPT0 = 0x08, // Read pot port: D7 + INPT1 = 0x09, // Read pot port: D7 + INPT2 = 0x0a, // Read pot port: D7 + INPT3 = 0x0b, // Read pot port: D7 + INPT4 = 0x0c, // Read P1 joystick trigger: D7 + INPT5 = 0x0d // Read P2 joystick trigger: D7 +}; + #endif // TIA_CONSTANTS_HXX From e6dcce60de42e71e1b19ae020c71c596e6c2001d Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Fri, 22 Dec 2017 23:57:40 -0330 Subject: [PATCH 134/156] Convert raw enum to 'enum class'. --- src/debugger/TIADebug.cxx | 30 +++++++++++++++--------------- src/debugger/TIADebug.hxx | 30 +++++++++++++++--------------- src/debugger/gui/TiaWidget.cxx | 30 +++++++++++++++--------------- src/emucore/tia/TIAConstants.hxx | 32 ++++++++++++++++---------------- 4 files changed, 61 insertions(+), 61 deletions(-) diff --git a/src/debugger/TIADebug.cxx b/src/debugger/TIADebug.cxx index 8882c271d..33b827923 100644 --- a/src/debugger/TIADebug.cxx +++ b/src/debugger/TIADebug.cxx @@ -421,76 +421,76 @@ bool TIADebug::collision(CollisionBit id, bool toggle) const { switch(id) { - case Cx_M0P1: + case CollisionBit::M0P1: if(toggle) myTIA.toggleCollP1M0(); return myTIA.collCXM0P() & 0x80; - case Cx_M0P0: + case CollisionBit::M0P0: if(toggle) myTIA.toggleCollP0M0(); return myTIA.collCXM0P() & 0x40; - case Cx_M1P0: + case CollisionBit::M1P0: if(toggle) myTIA.toggleCollP0M1(); return myTIA.collCXM1P() & 0x80; - case Cx_M1P1: + case CollisionBit::M1P1: if(toggle) myTIA.toggleCollP1M1(); return myTIA.collCXM1P() & 0x40; - case Cx_P0PF: + case CollisionBit::P0PF: if(toggle) myTIA.toggleCollP0PF(); return myTIA.collCXP0FB() & 0x80; - case Cx_P0BL: + case CollisionBit::P0BL: if(toggle) myTIA.toggleCollP0BL(); return myTIA.collCXP0FB() & 0x40; - case Cx_P1PF: + case CollisionBit::P1PF: if(toggle) myTIA.toggleCollP1PF(); return myTIA.collCXP1FB() & 0x80; - case Cx_P1BL: + case CollisionBit::P1BL: if(toggle) myTIA.toggleCollP1BL(); return myTIA.collCXP1FB() & 0x40; - case Cx_M0PF: + case CollisionBit::M0PF: if(toggle) myTIA.toggleCollM0PF(); return myTIA.collCXM0FB() & 0x80; - case Cx_M0BL: + case CollisionBit::M0BL: if(toggle) myTIA.toggleCollM0BL(); return myTIA.collCXM0FB() & 0x40; - case Cx_M1PF: + case CollisionBit::M1PF: if(toggle) myTIA.toggleCollM1PF(); return myTIA.collCXM1FB() & 0x80; - case Cx_M1BL: + case CollisionBit::M1BL: if(toggle) myTIA.toggleCollM1BL(); return myTIA.collCXM1FB() & 0x40; - case Cx_BLPF: + case CollisionBit::BLPF: if(toggle) myTIA.toggleCollBLPF(); return myTIA.collCXBLPF() & 0x80; - case Cx_P0P1: + case CollisionBit::P0P1: if(toggle) myTIA.toggleCollP0P1(); return myTIA.collCXPPMM() & 0x80; - case Cx_M0M1: + case CollisionBit::M0M1: if(toggle) myTIA.toggleCollM0M1(); return myTIA.collCXPPMM() & 0x40; diff --git a/src/debugger/TIADebug.hxx b/src/debugger/TIADebug.hxx index 89f89e3dc..229d6f1df 100644 --- a/src/debugger/TIADebug.hxx +++ b/src/debugger/TIADebug.hxx @@ -134,21 +134,21 @@ class TIADebug : public DebuggerSystem bool collision(CollisionBit id, bool toggle = false) const; // Collision registers - bool collM0_P1() const { return collision(Cx_M0P1); } - bool collM0_P0() const { return collision(Cx_M0P0); } - bool collM1_P0() const { return collision(Cx_M1P0); } - bool collM1_P1() const { return collision(Cx_M1P1); } - bool collP0_PF() const { return collision(Cx_P0PF); } - bool collP0_BL() const { return collision(Cx_P0BL); } - bool collP1_PF() const { return collision(Cx_P1PF); } - bool collP1_BL() const { return collision(Cx_P1BL); } - bool collM0_PF() const { return collision(Cx_M0PF); } - bool collM0_BL() const { return collision(Cx_M0BL); } - bool collM1_PF() const { return collision(Cx_M1PF); } - bool collM1_BL() const { return collision(Cx_M1BL); } - bool collBL_PF() const { return collision(Cx_BLPF); } - bool collP0_P1() const { return collision(Cx_P0P1); } - bool collM0_M1() const { return collision(Cx_M0M1); } + bool collM0_P1() const { return collision(CollisionBit::M0P1); } + bool collM0_P0() const { return collision(CollisionBit::M0P0); } + bool collM1_P0() const { return collision(CollisionBit::M1P0); } + bool collM1_P1() const { return collision(CollisionBit::M1P1); } + bool collP0_PF() const { return collision(CollisionBit::P0PF); } + bool collP0_BL() const { return collision(CollisionBit::P0BL); } + bool collP1_PF() const { return collision(CollisionBit::P1PF); } + bool collP1_BL() const { return collision(CollisionBit::P1BL); } + bool collM0_PF() const { return collision(CollisionBit::M0PF); } + bool collM0_BL() const { return collision(CollisionBit::M0BL); } + bool collM1_PF() const { return collision(CollisionBit::M1PF); } + bool collM1_BL() const { return collision(CollisionBit::M1BL); } + bool collBL_PF() const { return collision(CollisionBit::BLPF); } + bool collP0_P1() const { return collision(CollisionBit::P0P1); } + bool collM0_M1() const { return collision(CollisionBit::M0M1); } // TIA strobe registers void strobeWsync(); diff --git a/src/debugger/gui/TiaWidget.cxx b/src/debugger/gui/TiaWidget.cxx index af3d476bf..627252bdd 100644 --- a/src/debugger/gui/TiaWidget.cxx +++ b/src/debugger/gui/TiaWidget.cxx @@ -827,61 +827,61 @@ void TiaWidget::handleCommand(CommandSender* sender, int cmd, int data, int id) switch(id) { case kP0_PFID: - tia.collision(Cx_P0PF, true); + tia.collision(CollisionBit::P0PF, true); break; case kP0_BLID: - tia.collision(Cx_P0BL, true); + tia.collision(CollisionBit::P0BL, true); break; case kP0_M1ID: - tia.collision(Cx_M1P0, true); + tia.collision(CollisionBit::M1P0, true); break; case kP0_M0ID: - tia.collision(Cx_M0P0, true); + tia.collision(CollisionBit::M0P0, true); break; case kP0_P1ID: - tia.collision(Cx_P0P1, true); + tia.collision(CollisionBit::P0P1, true); break; case kP1_PFID: - tia.collision(Cx_P1PF, true); + tia.collision(CollisionBit::P1PF, true); break; case kP1_BLID: - tia.collision(Cx_P1BL, true); + tia.collision(CollisionBit::P1BL, true); break; case kP1_M1ID: - tia.collision(Cx_M1P1, true); + tia.collision(CollisionBit::M1P1, true); break; case kP1_M0ID: - tia.collision(Cx_M0P1, true); + tia.collision(CollisionBit::M0P1, true); break; case kM0_PFID: - tia.collision(Cx_M0PF, true); + tia.collision(CollisionBit::M0PF, true); break; case kM0_BLID: - tia.collision(Cx_M0BL, true); + tia.collision(CollisionBit::M0BL, true); break; case kM0_M1ID: - tia.collision(Cx_M0M1, true); + tia.collision(CollisionBit::M0M1, true); break; case kM1_PFID: - tia.collision(Cx_M1PF, true); + tia.collision(CollisionBit::M1PF, true); break; case kM1_BLID: - tia.collision(Cx_M1BL, true); + tia.collision(CollisionBit::M1BL, true); break; case kBL_PFID: - tia.collision(Cx_BLPF, true); + tia.collision(CollisionBit::BLPF, true); break; case kRefP0ID: diff --git a/src/emucore/tia/TIAConstants.hxx b/src/emucore/tia/TIAConstants.hxx index 976d38bb1..e65a44af0 100644 --- a/src/emucore/tia/TIAConstants.hxx +++ b/src/emucore/tia/TIAConstants.hxx @@ -50,23 +50,23 @@ enum TIAColor { HBLANKColor = 7 // Color index for HMove blank area }; -enum CollisionBit +enum class CollisionBit { - Cx_M0P1 = 1 << 0, // Missle0 - Player1 collision - Cx_M0P0 = 1 << 1, // Missle0 - Player0 collision - Cx_M1P0 = 1 << 2, // Missle1 - Player0 collision - Cx_M1P1 = 1 << 3, // Missle1 - Player1 collision - Cx_P0PF = 1 << 4, // Player0 - Playfield collision - Cx_P0BL = 1 << 5, // Player0 - Ball collision - Cx_P1PF = 1 << 6, // Player1 - Playfield collision - Cx_P1BL = 1 << 7, // Player1 - Ball collision - Cx_M0PF = 1 << 8, // Missle0 - Playfield collision - Cx_M0BL = 1 << 9, // Missle0 - Ball collision - Cx_M1PF = 1 << 10, // Missle1 - Playfield collision - Cx_M1BL = 1 << 11, // Missle1 - Ball collision - Cx_BLPF = 1 << 12, // Ball - Playfield collision - Cx_P0P1 = 1 << 13, // Player0 - Player1 collision - Cx_M0M1 = 1 << 14 // Missle0 - Missle1 collision + M0P1 = 1 << 0, // Missle0 - Player1 collision + M0P0 = 1 << 1, // Missle0 - Player0 collision + M1P0 = 1 << 2, // Missle1 - Player0 collision + M1P1 = 1 << 3, // Missle1 - Player1 collision + P0PF = 1 << 4, // Player0 - Playfield collision + P0BL = 1 << 5, // Player0 - Ball collision + P1PF = 1 << 6, // Player1 - Playfield collision + P1BL = 1 << 7, // Player1 - Ball collision + M0PF = 1 << 8, // Missle0 - Playfield collision + M0BL = 1 << 9, // Missle0 - Ball collision + M1PF = 1 << 10, // Missle1 - Playfield collision + M1BL = 1 << 11, // Missle1 - Ball collision + BLPF = 1 << 12, // Ball - Playfield collision + P0P1 = 1 << 13, // Player0 - Player1 collision + M0M1 = 1 << 14 // Missle0 - Missle1 collision }; // TIA Write/Read register names From 1a89150d27fa0c89f2ea47d7323c7d97466ca289 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Fri, 29 Dec 2017 15:13:38 -0330 Subject: [PATCH 135/156] Updated to latest config scripts. --- config.guess | 104 +++++++++++++++++++++++++-------------------------- config.sub | 46 ++++++++++++++--------- 2 files changed, 81 insertions(+), 69 deletions(-) mode change 100644 => 100755 config.sub diff --git a/config.guess b/config.guess index 69ed3e573..770cb5c7e 100755 --- a/config.guess +++ b/config.guess @@ -2,7 +2,7 @@ # Attempt to guess a canonical system name. # Copyright 1992-2017 Free Software Foundation, Inc. -timestamp='2017-03-05' +timestamp='2017-12-17' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ timestamp='2017-03-05' # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, see . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -27,7 +27,7 @@ timestamp='2017-03-05' # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . @@ -39,7 +39,7 @@ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -244,6 +244,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} exit ;; + *:MidnightBSD:*:*) + echo ${UNAME_MACHINE}-unknown-midnightbsd${UNAME_RELEASE} + exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; @@ -259,6 +262,12 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:Sortix:*:*) echo ${UNAME_MACHINE}-unknown-sortix exit ;; + *:Redox:*:*) + echo ${UNAME_MACHINE}-unknown-redox + exit ;; + mips:OSF1:*.*) + echo mips-dec-osf1 + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) @@ -315,15 +324,6 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in exitcode=$? trap '' 0 exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; @@ -485,13 +485,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); @@ -614,7 +614,7 @@ EOF *:AIX:*:*) echo rs6000-ibm-aix exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and @@ -635,8 +635,8 @@ EOF 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` @@ -749,7 +749,7 @@ EOF { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) @@ -758,7 +758,7 @@ EOF *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) @@ -855,10 +855,6 @@ EOF *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; @@ -874,27 +870,12 @@ EOF echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; @@ -1097,7 +1078,7 @@ EOF i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + i*86:*:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} @@ -1304,14 +1285,21 @@ EOF if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub @@ -1335,16 +1323,16 @@ EOF *:QNX:*:4*) echo i386-pc-qnx exit ;; - NEO-?:NONSTOP_KERNEL:*:*) + NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; - NSR-?:NONSTOP_KERNEL:*:*) + NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; - NSX-?:NONSTOP_KERNEL:*:*) + NSX-*:NONSTOP_KERNEL:*:*) echo nsx-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) @@ -1418,16 +1406,28 @@ EOF exit ;; esac +echo "$0: unable to guess system type" >&2 + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 <. +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -33,7 +33,7 @@ timestamp='2017-04-02' # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -57,7 +57,7 @@ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -229,9 +229,6 @@ case $os in -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; - -windowsnt*) - os=`echo $os | sed -e 's/windowsnt/winnt/'` - ;; -psos*) os=-psos ;; @@ -316,7 +313,6 @@ case $basic_machine in | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | wasm32 \ - | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown @@ -643,7 +639,7 @@ case $basic_machine in basic_machine=rs6000-bull os=-bosx ;; - dpx2* | dpx2*-bull) + dpx2*) basic_machine=m68k-bull os=-sysv3 ;; @@ -905,7 +901,7 @@ case $basic_machine in basic_machine=v70-nec os=-sysv ;; - next | m*-next ) + next | m*-next) basic_machine=m68k-next case $os in -nextstep* ) @@ -1259,6 +1255,9 @@ case $basic_machine in basic_machine=hppa1.1-winbond os=-proelf ;; + x64) + basic_machine=x86_64-pc + ;; xbox) basic_machine=i686-pc os=-mingw32 @@ -1366,8 +1365,8 @@ esac if [ x"$os" != x"" ] then case $os in - # First match some system type aliases - # that might get confused with valid system types. + # First match some system type aliases that might get confused + # with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux @@ -1387,9 +1386,9 @@ case $os in -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; - # First accept the basic system types. + # Now accept the basic system types. # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. + # Each alternative MUST end in a * to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ @@ -1492,7 +1491,7 @@ case $os in -nova*) os=-rtmk-nova ;; - -ns2 ) + -ns2) os=-nextstep2 ;; -nsk*) @@ -1547,6 +1546,19 @@ case $os in -dicos*) os=-dicos ;; + -pikeos*) + # Until real need of OS specific support for + # particular features comes up, bare metal + # configurations are quite functional. + case $basic_machine in + arm*) + os=-eabi + ;; + *) + os=-elf + ;; + esac + ;; -nacl*) ;; -ios) @@ -1694,7 +1706,7 @@ case $basic_machine in m88k-omron*) os=-luna ;; - *-next ) + *-next) os=-nextstep ;; *-sequent) @@ -1829,7 +1841,7 @@ echo $basic_machine$os exit # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" From 542fed69edae994b01cc6ed7ac24c3c99d680d2f Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Fri, 29 Dec 2017 16:05:07 -0330 Subject: [PATCH 136/156] Collapsed MouseButton enum into just buttons, removing state (pressed or released). - By itself, this first patch doesn't seem to accomplish much, but it leads into patch 2 - Patch 2 will extend usage of MouseButton enum all throughout the GUI core --- src/common/EventHandlerSDL2.cxx | 9 ++- src/emucore/EventHandler.cxx | 19 +++--- src/emucore/EventHandler.hxx | 2 +- src/emucore/EventHandlerConstants.hxx | 6 +- src/gui/DialogContainer.cxx | 89 ++++++++++++++------------- src/gui/DialogContainer.hxx | 9 +-- 6 files changed, 65 insertions(+), 69 deletions(-) diff --git a/src/common/EventHandlerSDL2.cxx b/src/common/EventHandlerSDL2.cxx index 0c5a38881..88b39020b 100644 --- a/src/common/EventHandlerSDL2.cxx +++ b/src/common/EventHandlerSDL2.cxx @@ -67,15 +67,14 @@ void EventHandlerSDL2::pollEvent() case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: { - bool pressed = myEvent.button.type == SDL_MOUSEBUTTONDOWN; switch(myEvent.button.button) { case SDL_BUTTON_LEFT: - handleMouseButtonEvent(pressed ? MouseButton::LBUTTONDOWN : MouseButton::LBUTTONUP, + handleMouseButtonEvent(MouseButton::LEFT, myEvent.button.type == SDL_MOUSEBUTTONDOWN, myEvent.button.x, myEvent.button.y); break; case SDL_BUTTON_RIGHT: - handleMouseButtonEvent(pressed ? MouseButton::RBUTTONDOWN : MouseButton::RBUTTONUP, + handleMouseButtonEvent(MouseButton::RIGHT, myEvent.button.type == SDL_MOUSEBUTTONDOWN, myEvent.button.x, myEvent.button.y); break; } @@ -87,9 +86,9 @@ void EventHandlerSDL2::pollEvent() int x, y; SDL_GetMouseState(&x, &y); // we need mouse position too if(myEvent.wheel.y < 0) - handleMouseButtonEvent(MouseButton::WHEELDOWN, x, y); + handleMouseButtonEvent(MouseButton::WHEELDOWN, true, x, y); else if(myEvent.wheel.y > 0) - handleMouseButtonEvent(MouseButton::WHEELUP, x, y); + handleMouseButtonEvent(MouseButton::WHEELUP, true, x, y); break; } diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index 019818b42..93ba77928 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -665,31 +665,26 @@ void EventHandler::handleMouseMotionEvent(int x, int y, int xrel, int yrel, int } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void EventHandler::handleMouseButtonEvent(MouseButton b, int x, int y) +void EventHandler::handleMouseButtonEvent(MouseButton b, bool pressed, + int x, int y) { // Determine which mode we're in, then send the event to the appropriate place if(myState == EventHandlerState::EMULATION) { switch(b) { - case MouseButton::LBUTTONDOWN: - myEvent.set(Event::MouseButtonLeftValue, 1); + case MouseButton::LEFT: + myEvent.set(Event::MouseButtonLeftValue, int(pressed)); break; - case MouseButton::LBUTTONUP: - myEvent.set(Event::MouseButtonLeftValue, 0); - break; - case MouseButton::RBUTTONDOWN: - myEvent.set(Event::MouseButtonRightValue, 1); - break; - case MouseButton::RBUTTONUP: - myEvent.set(Event::MouseButtonRightValue, 0); + case MouseButton::RIGHT: + myEvent.set(Event::MouseButtonRightValue, int(pressed)); break; default: return; } } else if(myOverlay) - myOverlay->handleMouseButtonEvent(b, x, y); + myOverlay->handleMouseButtonEvent(b, pressed, x, y); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/EventHandler.hxx b/src/emucore/EventHandler.hxx index 33363f5e4..c77804cf7 100644 --- a/src/emucore/EventHandler.hxx +++ b/src/emucore/EventHandler.hxx @@ -305,7 +305,7 @@ class EventHandler void handleTextEvent(char text); void handleKeyEvent(StellaKey key, StellaMod mod, bool state); void handleMouseMotionEvent(int x, int y, int xrel, int yrel, int button); - void handleMouseButtonEvent(MouseButton b, int x, int y); + void handleMouseButtonEvent(MouseButton b, bool pressed, int x, int y); void handleJoyEvent(int stick, int button, uInt8 state); void handleJoyAxisEvent(int stick, int axis, int value); void handleJoyHatEvent(int stick, int hat, int value); diff --git a/src/emucore/EventHandlerConstants.hxx b/src/emucore/EventHandlerConstants.hxx index 7b799a33b..b4ab67aa3 100644 --- a/src/emucore/EventHandlerConstants.hxx +++ b/src/emucore/EventHandlerConstants.hxx @@ -31,10 +31,8 @@ enum class EventHandlerState { }; enum class MouseButton { - LBUTTONDOWN, - LBUTTONUP, - RBUTTONDOWN, - RBUTTONUP, + LEFT, + RIGHT, WHEELDOWN, WHEELUP }; diff --git a/src/gui/DialogContainer.cxx b/src/gui/DialogContainer.cxx index f9042b5f5..0cf962ddd 100644 --- a/src/gui/DialogContainer.cxx +++ b/src/gui/DialogContainer.cxx @@ -196,7 +196,8 @@ void DialogContainer::handleMouseMotionEvent(int x, int y, int button) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void DialogContainer::handleMouseButtonEvent(MouseButton b, int x, int y) +void DialogContainer::handleMouseButtonEvent(MouseButton b, bool pressed, + int x, int y) { if(myDialogStack.empty()) return; @@ -205,57 +206,59 @@ void DialogContainer::handleMouseButtonEvent(MouseButton b, int x, int y) Dialog* activeDialog = myDialogStack.top(); activeDialog->surface().translateCoords(x, y); - int button = (b == MouseButton::LBUTTONDOWN || b == MouseButton::LBUTTONUP) ? 1 : 2; + int button = b == MouseButton::LEFT ? 1 : 2; switch(b) { - case MouseButton::LBUTTONDOWN: - case MouseButton::RBUTTONDOWN: - // If more than two clicks have been recorded, we start over - if(myLastClick.count == 2) + case MouseButton::LEFT: + case MouseButton::RIGHT: + if(pressed) { - myLastClick.x = myLastClick.y = 0; - myLastClick.time = 0; - myLastClick.count = 0; - } + // If more than two clicks have been recorded, we start over + if(myLastClick.count == 2) + { + myLastClick.x = myLastClick.y = 0; + myLastClick.time = 0; + myLastClick.count = 0; + } - if(myLastClick.count && (myTime < myLastClick.time + kDoubleClickDelay) - && std::abs(myLastClick.x - x) < 3 - && std::abs(myLastClick.y - y) < 3) - { - myLastClick.count++; + if(myLastClick.count && (myTime < myLastClick.time + kDoubleClickDelay) + && std::abs(myLastClick.x - x) < 3 + && std::abs(myLastClick.y - y) < 3) + { + myLastClick.count++; + } + else + { + myLastClick.x = x; + myLastClick.y = y; + myLastClick.count = 1; + } + myLastClick.time = myTime; + + // Now account for repeated mouse events (click and hold), but only + // if the dialog wants them + if(activeDialog->handleMouseClicks(x - activeDialog->_x, y - activeDialog->_y, + button)) + { + myCurrentMouseDown.x = x; + myCurrentMouseDown.y = y; + myCurrentMouseDown.button = button; + myClickRepeatTime = myTime + kRepeatInitialDelay; + } + else + myCurrentMouseDown.button = -1; + + activeDialog->handleMouseDown(x - activeDialog->_x, y - activeDialog->_y, + button, myLastClick.count); } else { - myLastClick.x = x; - myLastClick.y = y; - myLastClick.count = 1; - } - myLastClick.time = myTime; - - // Now account for repeated mouse events (click and hold), but only - // if the dialog wants them - if(activeDialog->handleMouseClicks(x - activeDialog->_x, y - activeDialog->_y, - button)) - { - myCurrentMouseDown.x = x; - myCurrentMouseDown.y = y; - myCurrentMouseDown.button = button; - myClickRepeatTime = myTime + kRepeatInitialDelay; - } - else - myCurrentMouseDown.button = -1; - - activeDialog->handleMouseDown(x - activeDialog->_x, y - activeDialog->_y, + activeDialog->handleMouseUp(x - activeDialog->_x, y - activeDialog->_y, button, myLastClick.count); - break; - case MouseButton::LBUTTONUP: - case MouseButton::RBUTTONUP: - activeDialog->handleMouseUp(x - activeDialog->_x, y - activeDialog->_y, - button, myLastClick.count); - - if(button == myCurrentMouseDown.button) - myCurrentMouseDown.button = -1; + if(button == myCurrentMouseDown.button) + myCurrentMouseDown.button = -1; + } break; case MouseButton::WHEELUP: diff --git a/src/gui/DialogContainer.hxx b/src/gui/DialogContainer.hxx index 6a6fa4fdd..f806cb43a 100644 --- a/src/gui/DialogContainer.hxx +++ b/src/gui/DialogContainer.hxx @@ -86,11 +86,12 @@ class DialogContainer /** Handle a mouse button event. - @param b The mouse button - @param x The x location - @param y The y location + @param b The mouse button + @param pressed Whether the button was pressed (true) or released (false) + @param x The x location + @param y The y location */ - void handleMouseButtonEvent(MouseButton b, int x, int y); + void handleMouseButtonEvent(MouseButton b, bool pressed, int x, int y); /** Handle a joystick button event. From a15d5d8b064985309355bb008ec468e6067b93bd Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Fri, 29 Dec 2017 16:56:09 -0330 Subject: [PATCH 137/156] Properly integrate MouseButton enum into the GUI core: - The previous code used enumerations for DialogContainer, and constants for everything in src/gui - It took me over 3 hours to determine that a '1' in the first didn't mean the same as a '1' in the second - If ever there was a reason for strongly named constants (enum class), this was it. --- src/common/EventHandlerSDL2.cxx | 2 +- src/debugger/gui/DataGridWidget.cxx | 4 ++-- src/debugger/gui/DataGridWidget.hxx | 4 ++-- src/debugger/gui/PromptWidget.cxx | 2 +- src/debugger/gui/PromptWidget.hxx | 2 +- src/debugger/gui/RomListSettings.cxx | 4 ++-- src/debugger/gui/RomListSettings.hxx | 2 +- src/debugger/gui/RomListWidget.cxx | 6 +++--- src/debugger/gui/RomListWidget.hxx | 4 ++-- src/debugger/gui/TiaInfoWidget.cxx | 2 +- src/debugger/gui/TiaInfoWidget.hxx | 2 +- src/debugger/gui/TiaOutputWidget.cxx | 4 ++-- src/debugger/gui/TiaOutputWidget.hxx | 4 ++-- src/debugger/gui/TiaZoomWidget.cxx | 12 +++++------ src/debugger/gui/TiaZoomWidget.hxx | 8 +++---- src/debugger/gui/ToggleWidget.cxx | 4 ++-- src/debugger/gui/ToggleWidget.hxx | 4 ++-- src/emucore/EventHandler.cxx | 4 ++-- src/emucore/EventHandler.hxx | 2 +- src/emucore/EventHandlerConstants.hxx | 7 +++--- src/gui/CheckListWidget.cxx | 2 +- src/gui/ContextMenu.cxx | 8 +++---- src/gui/ContextMenu.hxx | 6 +++--- src/gui/Dialog.cxx | 30 +++++++++++++------------- src/gui/Dialog.hxx | 8 +++---- src/gui/DialogContainer.cxx | 31 +++++++++++++-------------- src/gui/DialogContainer.hxx | 9 ++++---- src/gui/EditTextWidget.cxx | 2 +- src/gui/EditTextWidget.hxx | 2 +- src/gui/LauncherDialog.cxx | 6 +++--- src/gui/LauncherDialog.hxx | 2 +- src/gui/ListWidget.cxx | 4 ++-- src/gui/ListWidget.hxx | 4 ++-- src/gui/PopUpWidget.cxx | 8 +++---- src/gui/PopUpWidget.hxx | 6 +++--- src/gui/RadioButtonWidget.cxx | 2 +- src/gui/RadioButtonWidget.hxx | 2 +- src/gui/ScrollBarWidget.cxx | 12 +++++------ src/gui/ScrollBarWidget.hxx | 12 +++++------ src/gui/TabWidget.cxx | 6 +++--- src/gui/TabWidget.hxx | 6 +++--- src/gui/Widget.cxx | 24 ++++++++++----------- src/gui/Widget.hxx | 30 +++++++++++++------------- 43 files changed, 152 insertions(+), 153 deletions(-) diff --git a/src/common/EventHandlerSDL2.cxx b/src/common/EventHandlerSDL2.cxx index 88b39020b..a9b0d74c9 100644 --- a/src/common/EventHandlerSDL2.cxx +++ b/src/common/EventHandlerSDL2.cxx @@ -60,7 +60,7 @@ void EventHandlerSDL2::pollEvent() case SDL_MOUSEMOTION: { handleMouseMotionEvent(myEvent.motion.x, myEvent.motion.y, - myEvent.motion.xrel, myEvent.motion.yrel, 0); + myEvent.motion.xrel, myEvent.motion.yrel); break; } diff --git a/src/debugger/gui/DataGridWidget.cxx b/src/debugger/gui/DataGridWidget.cxx index 074466ee0..7b838da54 100644 --- a/src/debugger/gui/DataGridWidget.cxx +++ b/src/debugger/gui/DataGridWidget.cxx @@ -251,7 +251,7 @@ void DataGridWidget::setRange(int lower, int upper) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void DataGridWidget::handleMouseDown(int x, int y, int button, int clickCount) +void DataGridWidget::handleMouseDown(int x, int y, MouseButton b, int clickCount) { if (!isEnabled()) return; @@ -277,7 +277,7 @@ void DataGridWidget::handleMouseDown(int x, int y, int button, int clickCount) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void DataGridWidget::handleMouseUp(int x, int y, int button, int clickCount) +void DataGridWidget::handleMouseUp(int x, int y, MouseButton b, int clickCount) { // If this was a double click and the mouse is still over the selected item, // send the double click command diff --git a/src/debugger/gui/DataGridWidget.hxx b/src/debugger/gui/DataGridWidget.hxx index 8bb4d3a9b..02e7b09af 100644 --- a/src/debugger/gui/DataGridWidget.hxx +++ b/src/debugger/gui/DataGridWidget.hxx @@ -97,8 +97,8 @@ class DataGridWidget : public EditableWidget void receivedFocusWidget() override; void lostFocusWidget() override; - void handleMouseDown(int x, int y, int button, int clickCount) override; - void handleMouseUp(int x, int y, int button, int clickCount) override; + void handleMouseDown(int x, int y, MouseButton b, int clickCount) override; + void handleMouseUp(int x, int y, MouseButton b, int clickCount) override; void handleMouseWheel(int x, int y, int direction) override; bool handleText(char text) override; bool handleKeyDown(StellaKey key, StellaMod mod) override; diff --git a/src/debugger/gui/PromptWidget.cxx b/src/debugger/gui/PromptWidget.cxx index d2378174e..13b84d948 100644 --- a/src/debugger/gui/PromptWidget.cxx +++ b/src/debugger/gui/PromptWidget.cxx @@ -106,7 +106,7 @@ void PromptWidget::drawWidget(bool hilite) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void PromptWidget::handleMouseDown(int x, int y, int button, int clickCount) +void PromptWidget::handleMouseDown(int x, int y, MouseButton b, int clickCount) { // cerr << "PromptWidget::handleMouseDown\n"; } diff --git a/src/debugger/gui/PromptWidget.hxx b/src/debugger/gui/PromptWidget.hxx index 03ac6f605..2db6df543 100644 --- a/src/debugger/gui/PromptWidget.hxx +++ b/src/debugger/gui/PromptWidget.hxx @@ -71,7 +71,7 @@ class PromptWidget : public Widget, public CommandSender void addToHistory(const char *str); void historyScroll(int direction); - void handleMouseDown(int x, int y, int button, int clickCount) override; + void handleMouseDown(int x, int y, MouseButton b, int clickCount) override; void handleMouseWheel(int x, int y, int direction) override; bool handleText(char text) override; bool handleKeyDown(StellaKey key, StellaMod mod) override; diff --git a/src/debugger/gui/RomListSettings.cxx b/src/debugger/gui/RomListSettings.cxx index 7a5805252..88e9c06fe 100644 --- a/src/debugger/gui/RomListSettings.cxx +++ b/src/debugger/gui/RomListSettings.cxx @@ -123,12 +123,12 @@ void RomListSettings::loadConfig() } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void RomListSettings::handleMouseDown(int x, int y, int button, int clickCount) +void RomListSettings::handleMouseDown(int x, int y, MouseButton b, int clickCount) { // Close dialog if mouse click is outside it (simulates a context menu) // Otherwise let the base dialog class process it if(x >= 0 && x < _w && y >= 0 && y < _h) - Dialog::handleMouseDown(x, y, button, clickCount); + Dialog::handleMouseDown(x, y, b, clickCount); else close(); } diff --git a/src/debugger/gui/RomListSettings.hxx b/src/debugger/gui/RomListSettings.hxx index bdddaad84..8d987e656 100644 --- a/src/debugger/gui/RomListSettings.hxx +++ b/src/debugger/gui/RomListSettings.hxx @@ -52,7 +52,7 @@ class RomListSettings : public Dialog, public CommandSender private: void loadConfig() override; - void handleMouseDown(int x, int y, int button, int clickCount) override; + void handleMouseDown(int x, int y, MouseButton b, int clickCount) override; void handleCommand(CommandSender* sender, int cmd, int data, int id) override; // Following constructors and assignment operators not supported diff --git a/src/debugger/gui/RomListWidget.cxx b/src/debugger/gui/RomListWidget.cxx index 5328f74b0..b3cb008cc 100644 --- a/src/debugger/gui/RomListWidget.cxx +++ b/src/debugger/gui/RomListWidget.cxx @@ -238,13 +238,13 @@ void RomListWidget::scrollToCurrent(int item) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void RomListWidget::handleMouseDown(int x, int y, int button, int clickCount) +void RomListWidget::handleMouseDown(int x, int y, MouseButton b, int clickCount) { if (!isEnabled()) return; // Grab right mouse button for context menu, left for selection/edit mode - if(button == 2) + if(b == MouseButton::RIGHT) { // Set selected and add menu at current x,y mouse location _selectedItem = findItem(x, y); @@ -270,7 +270,7 @@ void RomListWidget::handleMouseDown(int x, int y, int button, int clickCount) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void RomListWidget::handleMouseUp(int x, int y, int button, int clickCount) +void RomListWidget::handleMouseUp(int x, int y, MouseButton b, int clickCount) { // If this was a double click and the mouse is still over the selected item, // send the double click command diff --git a/src/debugger/gui/RomListWidget.hxx b/src/debugger/gui/RomListWidget.hxx index 14718bf1f..f3da4e7d1 100644 --- a/src/debugger/gui/RomListWidget.hxx +++ b/src/debugger/gui/RomListWidget.hxx @@ -58,8 +58,8 @@ class RomListWidget : public EditableWidget void setHighlighted(int item); protected: - void handleMouseDown(int x, int y, int button, int clickCount) override; - void handleMouseUp(int x, int y, int button, int clickCount) override; + void handleMouseDown(int x, int y, MouseButton b, int clickCount) override; + void handleMouseUp(int x, int y, MouseButton b, int clickCount) override; void handleMouseWheel(int x, int y, int direction) override; bool handleText(char text) override; bool handleKeyDown(StellaKey key, StellaMod mod) override; diff --git a/src/debugger/gui/TiaInfoWidget.cxx b/src/debugger/gui/TiaInfoWidget.cxx index abacbf2fa..469b37bea 100644 --- a/src/debugger/gui/TiaInfoWidget.cxx +++ b/src/debugger/gui/TiaInfoWidget.cxx @@ -112,7 +112,7 @@ TiaInfoWidget::TiaInfoWidget(GuiObject* boss, const GUI::Font& lfont, } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void TiaInfoWidget::handleMouseDown(int x, int y, int button, int clickCount) +void TiaInfoWidget::handleMouseDown(int x, int y, MouseButton b, int clickCount) { //cerr << "TiaInfoWidget button press: x = " << x << ", y = " << y << endl; } diff --git a/src/debugger/gui/TiaInfoWidget.hxx b/src/debugger/gui/TiaInfoWidget.hxx index 82a959edf..30e1128e2 100644 --- a/src/debugger/gui/TiaInfoWidget.hxx +++ b/src/debugger/gui/TiaInfoWidget.hxx @@ -49,7 +49,7 @@ class TiaInfoWidget : public Widget, public CommandSender CheckboxWidget* myVBlank; private: - void handleMouseDown(int x, int y, int button, int clickCount) override; + void handleMouseDown(int x, int y, MouseButton b, int clickCount) override; void handleCommand(CommandSender* sender, int cmd, int data, int id) override; // Following constructors and assignment operators not supported diff --git a/src/debugger/gui/TiaOutputWidget.cxx b/src/debugger/gui/TiaOutputWidget.cxx index 05d2cd091..d292879ce 100644 --- a/src/debugger/gui/TiaOutputWidget.cxx +++ b/src/debugger/gui/TiaOutputWidget.cxx @@ -92,10 +92,10 @@ void TiaOutputWidget::saveSnapshot(int execDepth, const string& execPrefix) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void TiaOutputWidget::handleMouseDown(int x, int y, int button, int clickCount) +void TiaOutputWidget::handleMouseDown(int x, int y, MouseButton b, int clickCount) { // Grab right mouse button for command context menu - if(button == 2) + if(b == MouseButton::RIGHT) { myClickX = x; myClickY = y; diff --git a/src/debugger/gui/TiaOutputWidget.hxx b/src/debugger/gui/TiaOutputWidget.hxx index b62fc123e..eb2c5c15a 100644 --- a/src/debugger/gui/TiaOutputWidget.hxx +++ b/src/debugger/gui/TiaOutputWidget.hxx @@ -42,7 +42,7 @@ class TiaOutputWidget : public Widget, public CommandSender // For example, clicking an area may cause an action // (fill to this scanline, etc). /* - void handleMouseUp(int x, int y, int button, int clickCount) override; + void handleMouseUp(int x, int y, MouseButton b, int clickCount) override; void handleMouseWheel(int x, int y, int direction) override; bool handleKeyDown(StellaKey key, StellaMod mod) override; bool handleKeyUp(StellaKey key, StellaMod mod) override; @@ -58,7 +58,7 @@ class TiaOutputWidget : public Widget, public CommandSender uInt32 myLineBuffer[320]; private: - void handleMouseDown(int x, int y, int button, int clickCount) override; + void handleMouseDown(int x, int y, MouseButton b, int clickCount) override; void handleCommand(CommandSender* sender, int cmd, int data, int id) override; void drawWidget(bool hilite) override; diff --git a/src/debugger/gui/TiaZoomWidget.cxx b/src/debugger/gui/TiaZoomWidget.cxx index 2633bb1e1..61fd8a7d9 100644 --- a/src/debugger/gui/TiaZoomWidget.cxx +++ b/src/debugger/gui/TiaZoomWidget.cxx @@ -102,18 +102,18 @@ void TiaZoomWidget::recalc() } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void TiaZoomWidget::handleMouseDown(int x, int y, int button, int clickCount) +void TiaZoomWidget::handleMouseDown(int x, int y, MouseButton b, int clickCount) { // Button 1 is for 'drag'/movement of the image // Button 2 is for context menu - if(button == 1) + if(b == MouseButton::LEFT) { // Indicate mouse drag started/in progress myMouseMoving = true; myXClick = x; myYClick = y; } - else if(button == 2) + else if(b == MouseButton::RIGHT) { // Add menu at current x,y mouse location myMenu->show(x + getAbsX(), y + getAbsY()); @@ -121,7 +121,7 @@ void TiaZoomWidget::handleMouseDown(int x, int y, int button, int clickCount) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void TiaZoomWidget::handleMouseUp(int x, int y, int button, int clickCount) +void TiaZoomWidget::handleMouseUp(int x, int y, MouseButton b, int clickCount) { myMouseMoving = false; } @@ -136,7 +136,7 @@ void TiaZoomWidget::handleMouseWheel(int x, int y, int direction) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void TiaZoomWidget::handleMouseMoved(int x, int y, int button) +void TiaZoomWidget::handleMouseMoved(int x, int y) { // TODO: Not yet working - finish for next release #if 0 @@ -165,7 +165,7 @@ void TiaZoomWidget::handleMouseMoved(int x, int y, int button) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void TiaZoomWidget::handleMouseLeft(int button) +void TiaZoomWidget::handleMouseLeft() { myMouseMoving = false; } diff --git a/src/debugger/gui/TiaZoomWidget.hxx b/src/debugger/gui/TiaZoomWidget.hxx index cc63999e9..e5b2af4de 100644 --- a/src/debugger/gui/TiaZoomWidget.hxx +++ b/src/debugger/gui/TiaZoomWidget.hxx @@ -39,11 +39,11 @@ class TiaZoomWidget : public Widget, public CommandSender void zoom(int level); void recalc(); - void handleMouseDown(int x, int y, int button, int clickCount) override; - void handleMouseUp(int x, int y, int button, int clickCount) override; + void handleMouseDown(int x, int y, MouseButton b, int clickCount) override; + void handleMouseUp(int x, int y, MouseButton b, int clickCount) override; void handleMouseWheel(int x, int y, int direction) override; - void handleMouseMoved(int x, int y, int button) override; - void handleMouseLeft(int button) override; + void handleMouseMoved(int x, int y) override; + void handleMouseLeft() override; bool handleEvent(Event::Type event) override; void handleCommand(CommandSender* sender, int cmd, int data, int id) override; diff --git a/src/debugger/gui/ToggleWidget.cxx b/src/debugger/gui/ToggleWidget.cxx index 2137bfe46..6d01edbe9 100644 --- a/src/debugger/gui/ToggleWidget.cxx +++ b/src/debugger/gui/ToggleWidget.cxx @@ -41,7 +41,7 @@ ToggleWidget::ToggleWidget(GuiObject* boss, const GUI::Font& font, } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void ToggleWidget::handleMouseDown(int x, int y, int button, int clickCount) +void ToggleWidget::handleMouseDown(int x, int y, MouseButton b, int clickCount) { if (!isEnabled()) return; @@ -62,7 +62,7 @@ void ToggleWidget::handleMouseDown(int x, int y, int button, int clickCount) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void ToggleWidget::handleMouseUp(int x, int y, int button, int clickCount) +void ToggleWidget::handleMouseUp(int x, int y, MouseButton b, int clickCount) { if (!isEnabled() || !_editable) return; diff --git a/src/debugger/gui/ToggleWidget.hxx b/src/debugger/gui/ToggleWidget.hxx index 337ce0322..21a84d632 100644 --- a/src/debugger/gui/ToggleWidget.hxx +++ b/src/debugger/gui/ToggleWidget.hxx @@ -66,8 +66,8 @@ class ToggleWidget : public Widget, public CommandSender void drawWidget(bool hilite) override = 0; int findItem(int x, int y); - void handleMouseDown(int x, int y, int button, int clickCount) override; - void handleMouseUp(int x, int y, int button, int clickCount) override; + void handleMouseDown(int x, int y, MouseButton b, int clickCount) override; + void handleMouseUp(int x, int y, MouseButton b, int clickCount) override; bool handleKeyDown(StellaKey key, StellaMod mod) override; void handleCommand(CommandSender* sender, int cmd, int data, int id) override; diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index 93ba77928..8e4d9c9cf 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -648,7 +648,7 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, bool state) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void EventHandler::handleMouseMotionEvent(int x, int y, int xrel, int yrel, int button) +void EventHandler::handleMouseMotionEvent(int x, int y, int xrel, int yrel) { // Determine which mode we're in, then send the event to the appropriate place if(myState == EventHandlerState::EMULATION) @@ -661,7 +661,7 @@ void EventHandler::handleMouseMotionEvent(int x, int y, int xrel, int yrel, int mySkipMouseMotion = false; } else if(myOverlay) - myOverlay->handleMouseMotionEvent(x, y, button); + myOverlay->handleMouseMotionEvent(x, y); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/EventHandler.hxx b/src/emucore/EventHandler.hxx index c77804cf7..df7416a4c 100644 --- a/src/emucore/EventHandler.hxx +++ b/src/emucore/EventHandler.hxx @@ -304,7 +304,7 @@ class EventHandler */ void handleTextEvent(char text); void handleKeyEvent(StellaKey key, StellaMod mod, bool state); - void handleMouseMotionEvent(int x, int y, int xrel, int yrel, int button); + void handleMouseMotionEvent(int x, int y, int xrel, int yrel); void handleMouseButtonEvent(MouseButton b, bool pressed, int x, int y); void handleJoyEvent(int stick, int button, uInt8 state); void handleJoyAxisEvent(int stick, int axis, int value); diff --git a/src/emucore/EventHandlerConstants.hxx b/src/emucore/EventHandlerConstants.hxx index b4ab67aa3..fd0dee9b8 100644 --- a/src/emucore/EventHandlerConstants.hxx +++ b/src/emucore/EventHandlerConstants.hxx @@ -20,21 +20,22 @@ // Enumeration representing the different states of operation enum class EventHandlerState { - NONE, EMULATION, TIMEMACHINE, PAUSE, LAUNCHER, OPTIONSMENU, CMDMENU, - DEBUGGER + DEBUGGER, + NONE }; enum class MouseButton { LEFT, RIGHT, WHEELDOWN, - WHEELUP + WHEELUP, + NONE }; enum class JoyHat { diff --git a/src/gui/CheckListWidget.cxx b/src/gui/CheckListWidget.cxx index 0836b5a1c..5c18c2b6c 100644 --- a/src/gui/CheckListWidget.cxx +++ b/src/gui/CheckListWidget.cxx @@ -164,7 +164,7 @@ bool CheckListWidget::handleEvent(Event::Type e) { case Event::UISelect: // Simulate a mouse button click - _checkList[ListWidget::getSelected()]->handleMouseUp(0, 0, 1, 0); + _checkList[ListWidget::getSelected()]->handleMouseUp(0, 0, MouseButton::LEFT, 0); return true; default: diff --git a/src/gui/ContextMenu.cxx b/src/gui/ContextMenu.cxx index f55d996a2..98ba39e38 100644 --- a/src/gui/ContextMenu.cxx +++ b/src/gui/ContextMenu.cxx @@ -233,13 +233,13 @@ bool ContextMenu::sendSelectionLast() } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void ContextMenu::handleMouseDown(int x, int y, int button, int clickCount) +void ContextMenu::handleMouseDown(int x, int y, MouseButton b, int clickCount) { // Compute over which item the mouse is... int item = findItem(x, y); // Only do a selection when the left button is in the dialog - if(button == 1) + if(b == MouseButton::LEFT) { if(item != -1) { @@ -252,7 +252,7 @@ void ContextMenu::handleMouseDown(int x, int y, int button, int clickCount) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void ContextMenu::handleMouseMoved(int x, int y, int button) +void ContextMenu::handleMouseMoved(int x, int y) { // Compute over which item the mouse is... int item = findItem(x, y); @@ -264,7 +264,7 @@ void ContextMenu::handleMouseMoved(int x, int y, int button) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool ContextMenu::handleMouseClicks(int x, int y, int button) +bool ContextMenu::handleMouseClicks(int x, int y, MouseButton b) { // Let continuous mouse clicks come through, as the scroll buttons need them return true; diff --git a/src/gui/ContextMenu.hxx b/src/gui/ContextMenu.hxx index a8f48072e..bdf3ba25c 100644 --- a/src/gui/ContextMenu.hxx +++ b/src/gui/ContextMenu.hxx @@ -82,9 +82,9 @@ class ContextMenu : public Dialog, public CommandSender bool sendSelectionLast(); private: - void handleMouseDown(int x, int y, int button, int clickCount) override; - void handleMouseMoved(int x, int y, int button) override; - bool handleMouseClicks(int x, int y, int button) override; + void handleMouseDown(int x, int y, MouseButton b, int clickCount) override; + void handleMouseMoved(int x, int y) override; + bool handleMouseClicks(int x, int y, MouseButton b) override; void handleMouseWheel(int x, int y, int direction) override; void handleKeyDown(StellaKey key, StellaMod mod) override; void handleJoyDown(int stick, int button) override; diff --git a/src/gui/Dialog.cxx b/src/gui/Dialog.cxx index 9c26bf530..920d75ac9 100644 --- a/src/gui/Dialog.cxx +++ b/src/gui/Dialog.cxx @@ -90,7 +90,7 @@ void Dialog::close(bool refresh) { if (_mouseWidget) { - _mouseWidget->handleMouseLeft(0); + _mouseWidget->handleMouseLeft(); _mouseWidget = nullptr; } @@ -377,7 +377,7 @@ void Dialog::handleKeyUp(StellaKey key, StellaMod mod) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Dialog::handleMouseDown(int x, int y, int button, int clickCount) +void Dialog::handleMouseDown(int x, int y, MouseButton b, int clickCount) { Widget* w = findWidget(x, y); @@ -386,11 +386,11 @@ void Dialog::handleMouseDown(int x, int y, int button, int clickCount) if(w) w->handleMouseDown(x - (w->getAbsX() - _x), y - (w->getAbsY() - _y), - button, clickCount); + b, clickCount); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Dialog::handleMouseUp(int x, int y, int button, int clickCount) +void Dialog::handleMouseUp(int x, int y, MouseButton b, int clickCount) { if(_focusedWidget) { @@ -402,7 +402,7 @@ void Dialog::handleMouseUp(int x, int y, int button, int clickCount) Widget* w = _dragWidget; if(w) w->handleMouseUp(x - (w->getAbsX() - _x), y - (w->getAbsY() - _y), - button, clickCount); + b, clickCount); _dragWidget = nullptr; } @@ -422,7 +422,7 @@ void Dialog::handleMouseWheel(int x, int y, int direction) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Dialog::handleMouseMoved(int x, int y, int button) +void Dialog::handleMouseMoved(int x, int y) { Widget* w; @@ -438,17 +438,17 @@ void Dialog::handleMouseMoved(int x, int y, int button) if(mouseInFocusedWidget && _mouseWidget != w) { if(_mouseWidget) - _mouseWidget->handleMouseLeft(button); + _mouseWidget->handleMouseLeft(); _mouseWidget = w; - w->handleMouseEntered(button); + w->handleMouseEntered(); } else if (!mouseInFocusedWidget && _mouseWidget == w) { _mouseWidget = nullptr; - w->handleMouseLeft(button); + w->handleMouseLeft(); } - w->handleMouseMoved(x - wx, y - wy, button); + w->handleMouseMoved(x - wx, y - wy); } // While a "drag" is in process (i.e. mouse is moved while a button is pressed), @@ -461,24 +461,24 @@ void Dialog::handleMouseMoved(int x, int y, int button) if (_mouseWidget != w) { if (_mouseWidget) - _mouseWidget->handleMouseLeft(button); + _mouseWidget->handleMouseLeft(); if (w) - w->handleMouseEntered(button); + w->handleMouseEntered(); _mouseWidget = w; } if (w && (w->getFlags() & WIDGET_TRACK_MOUSE)) - w->handleMouseMoved(x - (w->getAbsX() - _x), y - (w->getAbsY() - _y), button); + w->handleMouseMoved(x - (w->getAbsX() - _x), y - (w->getAbsY() - _y)); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool Dialog::handleMouseClicks(int x, int y, int button) +bool Dialog::handleMouseClicks(int x, int y, MouseButton b) { Widget* w = findWidget(x, y); if(w) return w->handleMouseClicks(x - (w->getAbsX() - _x), - y - (w->getAbsY() - _y), button); + y - (w->getAbsY() - _y), b); else return false; } diff --git a/src/gui/Dialog.hxx b/src/gui/Dialog.hxx index 0ffa0cc47..ca0638b4f 100644 --- a/src/gui/Dialog.hxx +++ b/src/gui/Dialog.hxx @@ -86,11 +86,11 @@ class Dialog : public GuiObject virtual void handleText(char text); virtual void handleKeyDown(StellaKey key, StellaMod modifiers); virtual void handleKeyUp(StellaKey key, StellaMod modifiers); - virtual void handleMouseDown(int x, int y, int button, int clickCount); - virtual void handleMouseUp(int x, int y, int button, int clickCount); + virtual void handleMouseDown(int x, int y, MouseButton b, int clickCount); + virtual void handleMouseUp(int x, int y, MouseButton b, int clickCount); virtual void handleMouseWheel(int x, int y, int direction); - virtual void handleMouseMoved(int x, int y, int button); - virtual bool handleMouseClicks(int x, int y, int button); + virtual void handleMouseMoved(int x, int y); + virtual bool handleMouseClicks(int x, int y, MouseButton b); virtual void handleJoyDown(int stick, int button); virtual void handleJoyUp(int stick, int button); virtual void handleJoyAxis(int stick, int axis, int value); diff --git a/src/gui/DialogContainer.cxx b/src/gui/DialogContainer.cxx index 0cf962ddd..0c962b6ce 100644 --- a/src/gui/DialogContainer.cxx +++ b/src/gui/DialogContainer.cxx @@ -65,11 +65,11 @@ void DialogContainer::updateTime(uInt64 time) } // Mouse button still pressed - if(myCurrentMouseDown.button != -1 && myClickRepeatTime < myTime) + if(myCurrentMouseDown.b != MouseButton::NONE && myClickRepeatTime < myTime) { activeDialog->handleMouseDown(myCurrentMouseDown.x - activeDialog->_x, myCurrentMouseDown.y - activeDialog->_y, - myCurrentMouseDown.button, 1); + myCurrentMouseDown.b, 1); myClickRepeatTime = myTime + kRepeatSustainDelay; } @@ -182,7 +182,7 @@ void DialogContainer::handleKeyEvent(StellaKey key, StellaMod mod, bool state) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void DialogContainer::handleMouseMotionEvent(int x, int y, int button) +void DialogContainer::handleMouseMotionEvent(int x, int y) { if(myDialogStack.empty()) return; @@ -190,9 +190,7 @@ void DialogContainer::handleMouseMotionEvent(int x, int y, int button) // Send the event to the dialog box on the top of the stack Dialog* activeDialog = myDialogStack.top(); activeDialog->surface().translateCoords(x, y); - activeDialog->handleMouseMoved(x - activeDialog->_x, - y - activeDialog->_y, - button); + activeDialog->handleMouseMoved(x - activeDialog->_x, y - activeDialog->_y); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -206,7 +204,6 @@ void DialogContainer::handleMouseButtonEvent(MouseButton b, bool pressed, Dialog* activeDialog = myDialogStack.top(); activeDialog->surface().translateCoords(x, y); - int button = b == MouseButton::LEFT ? 1 : 2; switch(b) { case MouseButton::LEFT: @@ -237,27 +234,26 @@ void DialogContainer::handleMouseButtonEvent(MouseButton b, bool pressed, // Now account for repeated mouse events (click and hold), but only // if the dialog wants them - if(activeDialog->handleMouseClicks(x - activeDialog->_x, y - activeDialog->_y, - button)) + if(activeDialog->handleMouseClicks(x - activeDialog->_x, y - activeDialog->_y, b)) { myCurrentMouseDown.x = x; myCurrentMouseDown.y = y; - myCurrentMouseDown.button = button; + myCurrentMouseDown.b = b; myClickRepeatTime = myTime + kRepeatInitialDelay; } else - myCurrentMouseDown.button = -1; + myCurrentMouseDown.b = MouseButton::NONE; activeDialog->handleMouseDown(x - activeDialog->_x, y - activeDialog->_y, - button, myLastClick.count); + b, myLastClick.count); } else { activeDialog->handleMouseUp(x - activeDialog->_x, y - activeDialog->_y, - button, myLastClick.count); + b, myLastClick.count); - if(button == myCurrentMouseDown.button) - myCurrentMouseDown.button = -1; + if(b == myCurrentMouseDown.b) + myCurrentMouseDown.b = MouseButton::NONE; } break; @@ -268,6 +264,9 @@ void DialogContainer::handleMouseButtonEvent(MouseButton b, bool pressed, case MouseButton::WHEELDOWN: activeDialog->handleMouseWheel(x - activeDialog->_x, y - activeDialog->_y, 1); break; + + case MouseButton::NONE: // should never get here + break; } } @@ -346,7 +345,7 @@ void DialogContainer::handleJoyHatEvent(int stick, int hat, JoyHat value) void DialogContainer::reset() { myCurrentKeyDown.keycode = KBDK_UNKNOWN; - myCurrentMouseDown.button = -1; + myCurrentMouseDown.b = MouseButton::NONE; myLastClick.x = myLastClick.y = 0; myLastClick.time = 0; myLastClick.count = 0; diff --git a/src/gui/DialogContainer.hxx b/src/gui/DialogContainer.hxx index f806cb43a..e9e4e593c 100644 --- a/src/gui/DialogContainer.hxx +++ b/src/gui/DialogContainer.hxx @@ -77,11 +77,10 @@ class DialogContainer /** Handle a mouse motion event. - @param x The x location - @param y The y location - @param button The currently pressed button + @param x The x location + @param y The y location */ - void handleMouseMotionEvent(int x, int y, int button); + void handleMouseMotionEvent(int x, int y); /** Handle a mouse button event. @@ -174,7 +173,7 @@ class DialogContainer struct { int x; int y; - int button; + MouseButton b; } myCurrentMouseDown; uInt64 myClickRepeatTime; diff --git a/src/gui/EditTextWidget.cxx b/src/gui/EditTextWidget.cxx index 2f330d978..bd7e8c7a0 100644 --- a/src/gui/EditTextWidget.cxx +++ b/src/gui/EditTextWidget.cxx @@ -41,7 +41,7 @@ void EditTextWidget::setText(const string& str, bool changed) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void EditTextWidget::handleMouseDown(int x, int y, int button, int clickCount) +void EditTextWidget::handleMouseDown(int x, int y, MouseButton b, int clickCount) { if(!isEditable()) return; diff --git a/src/gui/EditTextWidget.hxx b/src/gui/EditTextWidget.hxx index f9cef4862..c7edd9b5b 100644 --- a/src/gui/EditTextWidget.hxx +++ b/src/gui/EditTextWidget.hxx @@ -42,7 +42,7 @@ class EditTextWidget : public EditableWidget GUI::Rect getEditRect() const override; - void handleMouseDown(int x, int y, int button, int clickCount) override; + void handleMouseDown(int x, int y, MouseButton b, int clickCount) override; protected: string _backupString; diff --git a/src/gui/LauncherDialog.cxx b/src/gui/LauncherDialog.cxx index 7b5dfcd79..311cad15e 100644 --- a/src/gui/LauncherDialog.cxx +++ b/src/gui/LauncherDialog.cxx @@ -432,16 +432,16 @@ void LauncherDialog::handleKeyDown(StellaKey key, StellaMod mod) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void LauncherDialog::handleMouseDown(int x, int y, int button, int clickCount) +void LauncherDialog::handleMouseDown(int x, int y, MouseButton b, int clickCount) { // Grab right mouse button for context menu, send left to base class - if(button == 2) + if(b == MouseButton::RIGHT) { // Add menu at current x,y mouse location myMenu->show(x + getAbsX(), y + getAbsY()); } else - Dialog::handleMouseDown(x, y, button, clickCount); + Dialog::handleMouseDown(x, y, b, clickCount); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/LauncherDialog.hxx b/src/gui/LauncherDialog.hxx index 9abc6a364..17296adaf 100644 --- a/src/gui/LauncherDialog.hxx +++ b/src/gui/LauncherDialog.hxx @@ -79,7 +79,7 @@ class LauncherDialog : public Dialog private: void handleKeyDown(StellaKey key, StellaMod mod) override; - void handleMouseDown(int x, int y, int button, int clickCount) override; + void handleMouseDown(int x, int y, MouseButton b, int clickCount) override; void handleCommand(CommandSender* sender, int cmd, int data, int id) override; void loadConfig() override; diff --git a/src/gui/ListWidget.cxx b/src/gui/ListWidget.cxx index cc7604018..da9c676cd 100644 --- a/src/gui/ListWidget.cxx +++ b/src/gui/ListWidget.cxx @@ -191,7 +191,7 @@ void ListWidget::scrollBarRecalc() } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void ListWidget::handleMouseDown(int x, int y, int button, int clickCount) +void ListWidget::handleMouseDown(int x, int y, MouseButton b, int clickCount) { if (!isEnabled()) return; @@ -216,7 +216,7 @@ void ListWidget::handleMouseDown(int x, int y, int button, int clickCount) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void ListWidget::handleMouseUp(int x, int y, int button, int clickCount) +void ListWidget::handleMouseUp(int x, int y, MouseButton b, int clickCount) { // If this was a double click and the mouse is still over the selected item, // send the double click command diff --git a/src/gui/ListWidget.hxx b/src/gui/ListWidget.hxx index 1f7de9b8e..e006b7c00 100644 --- a/src/gui/ListWidget.hxx +++ b/src/gui/ListWidget.hxx @@ -65,8 +65,8 @@ class ListWidget : public EditableWidget static void setQuickSelectDelay(uInt64 time) { _QUICK_SELECT_DELAY = time; } protected: - void handleMouseDown(int x, int y, int button, int clickCount) override; - void handleMouseUp(int x, int y, int button, int clickCount) override; + void handleMouseDown(int x, int y, MouseButton b, int clickCount) override; + void handleMouseUp(int x, int y, MouseButton b, int clickCount) override; void handleMouseWheel(int x, int y, int direction) override; bool handleText(char text) override; bool handleKeyDown(StellaKey key, StellaMod mod) override; diff --git a/src/gui/PopUpWidget.cxx b/src/gui/PopUpWidget.cxx index d91f2b647..dff4113de 100644 --- a/src/gui/PopUpWidget.cxx +++ b/src/gui/PopUpWidget.cxx @@ -131,7 +131,7 @@ const Variant& PopUpWidget::getSelectedTag() const } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void PopUpWidget::handleMouseDown(int x, int y, int button, int clickCount) +void PopUpWidget::handleMouseDown(int x, int y, MouseButton b, int clickCount) { if(isEnabled() && !myMenu->isVisible()) { @@ -159,14 +159,14 @@ void PopUpWidget::handleMouseWheel(int x, int y, int direction) #ifdef FLAT_UI // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void PopUpWidget::handleMouseEntered(int button) +void PopUpWidget::handleMouseEntered() { setFlags(WIDGET_HILITED); setDirty(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void PopUpWidget::handleMouseLeft(int button) +void PopUpWidget::handleMouseLeft() { clearFlags(WIDGET_HILITED); setDirty(); @@ -182,7 +182,7 @@ bool PopUpWidget::handleEvent(Event::Type e) switch(e) { case Event::UISelect: - handleMouseDown(0, 0, 1, 0); + handleMouseDown(0, 0, MouseButton::LEFT, 0); return true; case Event::UIUp: case Event::UILeft: diff --git a/src/gui/PopUpWidget.hxx b/src/gui/PopUpWidget.hxx index f697587fc..1a60667b4 100644 --- a/src/gui/PopUpWidget.hxx +++ b/src/gui/PopUpWidget.hxx @@ -62,11 +62,11 @@ class PopUpWidget : public Widget, public CommandSender bool wantsFocus() const override { return true; } protected: - void handleMouseDown(int x, int y, int button, int clickCount) override; + void handleMouseDown(int x, int y, MouseButton b, int clickCount) override; void handleMouseWheel(int x, int y, int direction) override; #ifdef FLAT_UI - void handleMouseEntered(int button) override; - void handleMouseLeft(int button) override; + void handleMouseEntered() override; + void handleMouseLeft() override; #endif bool handleEvent(Event::Type e) override; void handleCommand(CommandSender* sender, int cmd, int data, int id) override; diff --git a/src/gui/RadioButtonWidget.cxx b/src/gui/RadioButtonWidget.cxx index 7c981e8c9..46b16e01f 100644 --- a/src/gui/RadioButtonWidget.cxx +++ b/src/gui/RadioButtonWidget.cxx @@ -173,7 +173,7 @@ RadioButtonWidget::RadioButtonWidget(GuiObject* boss, const GUI::Font& font, } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void RadioButtonWidget::handleMouseUp(int x, int y, int button, int clickCount) +void RadioButtonWidget::handleMouseUp(int x, int y, MouseButton b, int clickCount) { if(isEnabled() && _editable && x >= 0 && x < _w && y >= 0 && y < _h) { diff --git a/src/gui/RadioButtonWidget.hxx b/src/gui/RadioButtonWidget.hxx index 44cefad06..897524ef4 100644 --- a/src/gui/RadioButtonWidget.hxx +++ b/src/gui/RadioButtonWidget.hxx @@ -34,7 +34,7 @@ class RadioButtonWidget : public CheckboxWidget const string& label, RadioButtonGroup* group, int cmd = 0); - void handleMouseUp(int x, int y, int button, int clickCount) override; + void handleMouseUp(int x, int y, MouseButton b, int clickCount) override; void setState(bool state, bool send = true); protected: diff --git a/src/gui/ScrollBarWidget.cxx b/src/gui/ScrollBarWidget.cxx index ddc560126..962df8363 100644 --- a/src/gui/ScrollBarWidget.cxx +++ b/src/gui/ScrollBarWidget.cxx @@ -74,7 +74,7 @@ ScrollBarWidget::ScrollBarWidget(GuiObject* boss, const GUI::Font& font, } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void ScrollBarWidget::handleMouseDown(int x, int y, int button, +void ScrollBarWidget::handleMouseDown(int x, int y, MouseButton b, int clickCount) { // Ignore subsequent mouse clicks when the slider is being moved @@ -118,7 +118,7 @@ void ScrollBarWidget::handleMouseDown(int x, int y, int button, } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void ScrollBarWidget::handleMouseUp(int x, int y, int button, +void ScrollBarWidget::handleMouseUp(int x, int y, MouseButton b, int clickCount) { _draggingPart = kNoPart; @@ -142,7 +142,7 @@ void ScrollBarWidget::handleMouseWheel(int x, int y, int direction) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void ScrollBarWidget::handleMouseMoved(int x, int y, int button) +void ScrollBarWidget::handleMouseMoved(int x, int y) { // Do nothing if there are less items than fit on one page if(_numEntries <= _entriesPerPage) @@ -184,7 +184,7 @@ void ScrollBarWidget::handleMouseMoved(int x, int y, int button) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool ScrollBarWidget::handleMouseClicks(int x, int y, int button) +bool ScrollBarWidget::handleMouseClicks(int x, int y, MouseButton b) { // Let continuous mouse clicks come through, as the scroll buttons need them return true; @@ -206,13 +206,13 @@ void ScrollBarWidget::checkBounds(int old_pos) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void ScrollBarWidget::handleMouseEntered(int button) +void ScrollBarWidget::handleMouseEntered() { setFlags(WIDGET_HILITED); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void ScrollBarWidget::handleMouseLeft(int button) +void ScrollBarWidget::handleMouseLeft() { _part = kNoPart; clearFlags(WIDGET_HILITED); diff --git a/src/gui/ScrollBarWidget.hxx b/src/gui/ScrollBarWidget.hxx index a412c6175..d59a16f7a 100644 --- a/src/gui/ScrollBarWidget.hxx +++ b/src/gui/ScrollBarWidget.hxx @@ -45,12 +45,12 @@ class ScrollBarWidget : public Widget, public CommandSender void drawWidget(bool hilite) override; void checkBounds(int old_pos); - void handleMouseDown(int x, int y, int button, int clickCount) override; - void handleMouseUp(int x, int y, int button, int clickCount) override; - void handleMouseMoved(int x, int y, int button) override; - bool handleMouseClicks(int x, int y, int button) override; - void handleMouseEntered(int button) override; - void handleMouseLeft(int button) override; + void handleMouseDown(int x, int y, MouseButton b, int clickCount) override; + void handleMouseUp(int x, int y, MouseButton b, int clickCount) override; + void handleMouseMoved(int x, int y) override; + bool handleMouseClicks(int x, int y, MouseButton b) override; + void handleMouseEntered() override; + void handleMouseLeft() override; public: int _numEntries; diff --git a/src/gui/TabWidget.cxx b/src/gui/TabWidget.cxx index fb55d1096..11aec8730 100644 --- a/src/gui/TabWidget.cxx +++ b/src/gui/TabWidget.cxx @@ -171,7 +171,7 @@ void TabWidget::setParentWidget(int tabID, Widget* parent) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void TabWidget::handleMouseDown(int x, int y, int button, int clickCount) +void TabWidget::handleMouseDown(int x, int y, MouseButton b, int clickCount) { assert(y < _tabHeight); @@ -194,14 +194,14 @@ void TabWidget::handleMouseDown(int x, int y, int button, int clickCount) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void TabWidget::handleMouseEntered(int button) +void TabWidget::handleMouseEntered() { setFlags(WIDGET_HILITED); setDirty(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void TabWidget::handleMouseLeft(int button) +void TabWidget::handleMouseLeft() { clearFlags(WIDGET_HILITED); setDirty(); diff --git a/src/gui/TabWidget.hxx b/src/gui/TabWidget.hxx index 72fcb3480..acbf6a1e8 100644 --- a/src/gui/TabWidget.hxx +++ b/src/gui/TabWidget.hxx @@ -59,9 +59,9 @@ class TabWidget : public Widget, public CommandSender void loadConfig() override; protected: - void handleMouseDown(int x, int y, int button, int clickCount) override; - void handleMouseEntered(int button) override; - void handleMouseLeft(int button) override; + void handleMouseDown(int x, int y, MouseButton b, int clickCount) override; + void handleMouseEntered() override; + void handleMouseLeft() override; void handleCommand(CommandSender* sender, int cmd, int data, int id) override; bool handleEvent(Event::Type event) override; diff --git a/src/gui/Widget.cxx b/src/gui/Widget.cxx index 88515a7b1..b356636c6 100644 --- a/src/gui/Widget.cxx +++ b/src/gui/Widget.cxx @@ -400,14 +400,14 @@ ButtonWidget::ButtonWidget(GuiObject* boss, const GUI::Font& font, } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void ButtonWidget::handleMouseEntered(int button) +void ButtonWidget::handleMouseEntered() { setFlags(WIDGET_HILITED); setDirty(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void ButtonWidget::handleMouseLeft(int button) +void ButtonWidget::handleMouseLeft() { clearFlags(WIDGET_HILITED); setDirty(); @@ -423,7 +423,7 @@ bool ButtonWidget::handleEvent(Event::Type e) { case Event::UISelect: // Simulate mouse event - handleMouseUp(0, 0, 1, 0); + handleMouseUp(0, 0, MouseButton::LEFT, 0); return true; default: return false; @@ -431,7 +431,7 @@ bool ButtonWidget::handleEvent(Event::Type e) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void ButtonWidget::handleMouseUp(int x, int y, int button, int clickCount) +void ButtonWidget::handleMouseUp(int x, int y, MouseButton b, int clickCount) { if(isEnabled() && x >= 0 && x < _w && y >= 0 && y < _h) { @@ -572,21 +572,21 @@ CheckboxWidget::CheckboxWidget(GuiObject* boss, const GUI::Font& font, } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void CheckboxWidget::handleMouseEntered(int button) +void CheckboxWidget::handleMouseEntered() { setFlags(WIDGET_HILITED); setDirty(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void CheckboxWidget::handleMouseLeft(int button) +void CheckboxWidget::handleMouseLeft() { clearFlags(WIDGET_HILITED); setDirty(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void CheckboxWidget::handleMouseUp(int x, int y, int button, int clickCount) +void CheckboxWidget::handleMouseUp(int x, int y, MouseButton b, int clickCount) { if(isEnabled() && _editable && x >= 0 && x < _w && y >= 0 && y < _h) { @@ -728,7 +728,7 @@ void SliderWidget::setStepValue(int value) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void SliderWidget::handleMouseMoved(int x, int y, int button) +void SliderWidget::handleMouseMoved(int x, int y) { // TODO: when the mouse is dragged outside the widget, the slider should // snap back to the old value. @@ -737,17 +737,17 @@ void SliderWidget::handleMouseMoved(int x, int y, int button) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void SliderWidget::handleMouseDown(int x, int y, int button, int clickCount) +void SliderWidget::handleMouseDown(int x, int y, MouseButton b, int clickCount) { - if(isEnabled()) + if(isEnabled() && b == MouseButton::LEFT) { _isDragging = true; - handleMouseMoved(x, y, button); + handleMouseMoved(x, y); } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void SliderWidget::handleMouseUp(int x, int y, int button, int clickCount) +void SliderWidget::handleMouseUp(int x, int y, MouseButton b, int clickCount) { if(isEnabled() && _isDragging) sendCommand(_cmd, _value, _id); diff --git a/src/gui/Widget.hxx b/src/gui/Widget.hxx index b7430567a..4e04f6f07 100644 --- a/src/gui/Widget.hxx +++ b/src/gui/Widget.hxx @@ -68,13 +68,13 @@ class Widget : public GuiObject virtual bool handleText(char text) { return false; } virtual bool handleKeyDown(StellaKey key, StellaMod mod) { return false; } virtual bool handleKeyUp(StellaKey key, StellaMod mod) { return false; } - virtual void handleMouseDown(int x, int y, int button, int clickCount) { } - virtual void handleMouseUp(int x, int y, int button, int clickCount) { } - virtual void handleMouseEntered(int button) { } - virtual void handleMouseLeft(int button) { } - virtual void handleMouseMoved(int x, int y, int button) { } + virtual void handleMouseDown(int x, int y, MouseButton b, int clickCount) { } + virtual void handleMouseUp(int x, int y, MouseButton b, int clickCount) { } + virtual void handleMouseEntered() { } + virtual void handleMouseLeft() { } + virtual void handleMouseMoved(int x, int y) { } virtual void handleMouseWheel(int x, int y, int direction) { } - virtual bool handleMouseClicks(int x, int y, int button) { return false; } + virtual bool handleMouseClicks(int x, int y, MouseButton b) { return false; } virtual void handleJoyDown(int stick, int button) { } virtual void handleJoyUp(int stick, int button) { } virtual void handleJoyAxis(int stick, int axis, int value) { } @@ -226,9 +226,9 @@ class ButtonWidget : public StaticTextWidget, public CommandSender int getCmd() const { return _cmd; } protected: - void handleMouseUp(int x, int y, int button, int clickCount) override; - void handleMouseEntered(int button) override; - void handleMouseLeft(int button) override; + void handleMouseUp(int x, int y, MouseButton b, int clickCount) override; + void handleMouseEntered() override; + void handleMouseLeft() override; bool handleEvent(Event::Type event) override; void drawWidget(bool hilite) override; @@ -267,9 +267,9 @@ class CheckboxWidget : public ButtonWidget void toggleState() { setState(!_state); } bool getState() const { return _state; } - void handleMouseUp(int x, int y, int button, int clickCount) override; - void handleMouseEntered(int button) override; - void handleMouseLeft(int button) override; + void handleMouseUp(int x, int y, MouseButton b, int clickCount) override; + void handleMouseEntered() override; + void handleMouseLeft() override; static int boxSize() { return 14; } // box is square @@ -315,9 +315,9 @@ class SliderWidget : public ButtonWidget int getStepValue() const { return _stepValue; } protected: - void handleMouseMoved(int x, int y, int button) override; - void handleMouseDown(int x, int y, int button, int clickCount) override; - void handleMouseUp(int x, int y, int button, int clickCount) override; + void handleMouseMoved(int x, int y) override; + void handleMouseDown(int x, int y, MouseButton b, int clickCount) override; + void handleMouseUp(int x, int y, MouseButton b, int clickCount) override; void handleMouseWheel(int x, int y, int direction) override; bool handleEvent(Event::Type event) override; From 3d879d00804daca747d56b92240ab9e551018999 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Fri, 29 Dec 2017 17:10:37 -0330 Subject: [PATCH 138/156] Updated copyright date to 2018. A few days early, but nobody will mind ... --- Copyright.txt | 2 +- docs/index.html | 2 +- src/cheat/BankRomCheat.cxx | 2 +- src/cheat/BankRomCheat.hxx | 2 +- src/cheat/Cheat.hxx | 2 +- src/cheat/CheatCodeDialog.cxx | 2 +- src/cheat/CheatCodeDialog.hxx | 2 +- src/cheat/CheatManager.cxx | 2 +- src/cheat/CheatManager.hxx | 2 +- src/cheat/CheetahCheat.cxx | 2 +- src/cheat/CheetahCheat.hxx | 2 +- src/cheat/RamCheat.cxx | 2 +- src/cheat/RamCheat.hxx | 2 +- src/common/Base.cxx | 2 +- src/common/Base.hxx | 2 +- src/common/EventHandlerSDL2.cxx | 2 +- src/common/EventHandlerSDL2.hxx | 2 +- src/common/FBSurfaceSDL2.cxx | 2 +- src/common/FBSurfaceSDL2.hxx | 2 +- src/common/FSNodeFactory.hxx | 2 +- src/common/FSNodeZIP.cxx | 2 +- src/common/FSNodeZIP.hxx | 2 +- src/common/FrameBufferSDL2.cxx | 2 +- src/common/FrameBufferSDL2.hxx | 2 +- src/common/LinkedObjectPool.hxx | 2 +- src/common/MediaFactory.hxx | 2 +- src/common/MouseControl.cxx | 2 +- src/common/MouseControl.hxx | 2 +- src/common/PNGLibrary.cxx | 2 +- src/common/PNGLibrary.hxx | 2 +- src/common/RewindManager.cxx | 2 +- src/common/RewindManager.hxx | 2 +- src/common/SDL_lib.hxx | 2 +- src/common/SoundNull.hxx | 2 +- src/common/SoundSDL2.cxx | 2 +- src/common/SoundSDL2.hxx | 2 +- src/common/Stack.hxx | 2 +- src/common/StateManager.cxx | 2 +- src/common/StateManager.hxx | 2 +- src/common/StellaKeys.hxx | 2 +- src/common/StringParser.hxx | 2 +- src/common/Variant.hxx | 2 +- src/common/Vec.hxx | 2 +- src/common/Version.hxx | 2 +- src/common/ZipHandler.cxx | 2 +- src/common/ZipHandler.hxx | 2 +- src/common/bspf.hxx | 2 +- src/common/main.cxx | 2 +- src/common/smartmod.hxx | 2 +- src/common/tv_filters/AtariNTSC.cxx | 2 +- src/common/tv_filters/AtariNTSC.hxx | 2 +- src/common/tv_filters/NTSCFilter.cxx | 2 +- src/common/tv_filters/NTSCFilter.hxx | 2 +- src/debugger/CartDebug.cxx | 2 +- src/debugger/CartDebug.hxx | 2 +- src/debugger/CpuDebug.cxx | 2 +- src/debugger/CpuDebug.hxx | 2 +- src/debugger/Debugger.cxx | 2 +- src/debugger/Debugger.hxx | 2 +- src/debugger/DebuggerExpressions.hxx | 2 +- src/debugger/DebuggerParser.cxx | 2 +- src/debugger/DebuggerParser.hxx | 2 +- src/debugger/DebuggerSystem.hxx | 2 +- src/debugger/DiStella.cxx | 2 +- src/debugger/DiStella.hxx | 2 +- src/debugger/Expression.hxx | 2 +- src/debugger/PackedBitArray.hxx | 2 +- src/debugger/RiotDebug.cxx | 2 +- src/debugger/RiotDebug.hxx | 2 +- src/debugger/TIADebug.cxx | 2 +- src/debugger/TIADebug.hxx | 2 +- src/debugger/TrapArray.hxx | 2 +- src/debugger/gui/AmigaMouseWidget.cxx | 2 +- src/debugger/gui/AmigaMouseWidget.hxx | 2 +- src/debugger/gui/AtariMouseWidget.cxx | 2 +- src/debugger/gui/AtariMouseWidget.hxx | 2 +- src/debugger/gui/AtariVoxWidget.cxx | 2 +- src/debugger/gui/AtariVoxWidget.hxx | 2 +- src/debugger/gui/AudioWidget.cxx | 2 +- src/debugger/gui/AudioWidget.hxx | 2 +- src/debugger/gui/BoosterWidget.cxx | 2 +- src/debugger/gui/BoosterWidget.hxx | 2 +- src/debugger/gui/Cart0840Widget.cxx | 2 +- src/debugger/gui/Cart0840Widget.hxx | 2 +- src/debugger/gui/Cart2KWidget.cxx | 2 +- src/debugger/gui/Cart2KWidget.hxx | 2 +- src/debugger/gui/Cart3EPlusWidget.cxx | 2 +- src/debugger/gui/Cart3EPlusWidget.hxx | 2 +- src/debugger/gui/Cart3EWidget.cxx | 2 +- src/debugger/gui/Cart3EWidget.hxx | 2 +- src/debugger/gui/Cart3FWidget.cxx | 2 +- src/debugger/gui/Cart3FWidget.hxx | 2 +- src/debugger/gui/Cart4A50Widget.cxx | 2 +- src/debugger/gui/Cart4A50Widget.hxx | 2 +- src/debugger/gui/Cart4KSCWidget.cxx | 2 +- src/debugger/gui/Cart4KSCWidget.hxx | 2 +- src/debugger/gui/Cart4KWidget.cxx | 2 +- src/debugger/gui/Cart4KWidget.hxx | 2 +- src/debugger/gui/CartARWidget.cxx | 2 +- src/debugger/gui/CartARWidget.hxx | 2 +- src/debugger/gui/CartBFSCWidget.cxx | 2 +- src/debugger/gui/CartBFSCWidget.hxx | 2 +- src/debugger/gui/CartBFWidget.cxx | 2 +- src/debugger/gui/CartBFWidget.hxx | 2 +- src/debugger/gui/CartBUSWidget.cxx | 2 +- src/debugger/gui/CartBUSWidget.hxx | 2 +- src/debugger/gui/CartCDFWidget.cxx | 2 +- src/debugger/gui/CartCDFWidget.hxx | 2 +- src/debugger/gui/CartCMWidget.cxx | 2 +- src/debugger/gui/CartCMWidget.hxx | 2 +- src/debugger/gui/CartCTYWidget.cxx | 2 +- src/debugger/gui/CartCTYWidget.hxx | 2 +- src/debugger/gui/CartCVPlusWidget.cxx | 2 +- src/debugger/gui/CartCVPlusWidget.hxx | 2 +- src/debugger/gui/CartCVWidget.cxx | 2 +- src/debugger/gui/CartCVWidget.hxx | 2 +- src/debugger/gui/CartDASHWidget.cxx | 2 +- src/debugger/gui/CartDASHWidget.hxx | 2 +- src/debugger/gui/CartDFSCWidget.cxx | 2 +- src/debugger/gui/CartDFSCWidget.hxx | 2 +- src/debugger/gui/CartDFWidget.cxx | 2 +- src/debugger/gui/CartDFWidget.hxx | 2 +- src/debugger/gui/CartDPCPlusWidget.cxx | 2 +- src/debugger/gui/CartDPCPlusWidget.hxx | 2 +- src/debugger/gui/CartDPCWidget.cxx | 2 +- src/debugger/gui/CartDPCWidget.hxx | 2 +- src/debugger/gui/CartDebugWidget.cxx | 2 +- src/debugger/gui/CartDebugWidget.hxx | 2 +- src/debugger/gui/CartE0Widget.cxx | 2 +- src/debugger/gui/CartE0Widget.hxx | 2 +- src/debugger/gui/CartE78KWidget.cxx | 2 +- src/debugger/gui/CartE78KWidget.hxx | 2 +- src/debugger/gui/CartE7Widget.cxx | 2 +- src/debugger/gui/CartE7Widget.hxx | 2 +- src/debugger/gui/CartEFSCWidget.cxx | 2 +- src/debugger/gui/CartEFSCWidget.hxx | 2 +- src/debugger/gui/CartEFWidget.cxx | 2 +- src/debugger/gui/CartEFWidget.hxx | 2 +- src/debugger/gui/CartF0Widget.cxx | 2 +- src/debugger/gui/CartF0Widget.hxx | 2 +- src/debugger/gui/CartF4SCWidget.cxx | 2 +- src/debugger/gui/CartF4SCWidget.hxx | 2 +- src/debugger/gui/CartF4Widget.cxx | 2 +- src/debugger/gui/CartF4Widget.hxx | 2 +- src/debugger/gui/CartF6SCWidget.cxx | 2 +- src/debugger/gui/CartF6SCWidget.hxx | 2 +- src/debugger/gui/CartF6Widget.cxx | 2 +- src/debugger/gui/CartF6Widget.hxx | 2 +- src/debugger/gui/CartF8SCWidget.cxx | 2 +- src/debugger/gui/CartF8SCWidget.hxx | 2 +- src/debugger/gui/CartF8Widget.cxx | 2 +- src/debugger/gui/CartF8Widget.hxx | 2 +- src/debugger/gui/CartFA2Widget.cxx | 2 +- src/debugger/gui/CartFA2Widget.hxx | 2 +- src/debugger/gui/CartFAWidget.cxx | 2 +- src/debugger/gui/CartFAWidget.hxx | 2 +- src/debugger/gui/CartFEWidget.cxx | 2 +- src/debugger/gui/CartFEWidget.hxx | 2 +- src/debugger/gui/CartMDMWidget.cxx | 2 +- src/debugger/gui/CartMDMWidget.hxx | 2 +- src/debugger/gui/CartMNetworkWidget.cxx | 2 +- src/debugger/gui/CartMNetworkWidget.hxx | 2 +- src/debugger/gui/CartRamWidget.cxx | 2 +- src/debugger/gui/CartRamWidget.hxx | 2 +- src/debugger/gui/CartSBWidget.cxx | 2 +- src/debugger/gui/CartSBWidget.hxx | 2 +- src/debugger/gui/CartUAWidget.cxx | 2 +- src/debugger/gui/CartUAWidget.hxx | 2 +- src/debugger/gui/CartWDWidget.cxx | 2 +- src/debugger/gui/CartWDWidget.hxx | 2 +- src/debugger/gui/CartX07Widget.cxx | 2 +- src/debugger/gui/CartX07Widget.hxx | 2 +- src/debugger/gui/ControllerWidget.hxx | 2 +- src/debugger/gui/CpuWidget.cxx | 2 +- src/debugger/gui/CpuWidget.hxx | 2 +- src/debugger/gui/DataGridOpsWidget.cxx | 2 +- src/debugger/gui/DataGridOpsWidget.hxx | 2 +- src/debugger/gui/DataGridWidget.cxx | 2 +- src/debugger/gui/DataGridWidget.hxx | 2 +- src/debugger/gui/DebuggerDialog.cxx | 2 +- src/debugger/gui/DebuggerDialog.hxx | 2 +- src/debugger/gui/DelayQueueWidget.cxx | 2 +- src/debugger/gui/DelayQueueWidget.hxx | 2 +- src/debugger/gui/DrivingWidget.cxx | 2 +- src/debugger/gui/DrivingWidget.hxx | 2 +- src/debugger/gui/FlashWidget.cxx | 2 +- src/debugger/gui/FlashWidget.hxx | 2 +- src/debugger/gui/GenesisWidget.cxx | 2 +- src/debugger/gui/GenesisWidget.hxx | 2 +- src/debugger/gui/JoystickWidget.cxx | 2 +- src/debugger/gui/JoystickWidget.hxx | 2 +- src/debugger/gui/KeyboardWidget.cxx | 2 +- src/debugger/gui/KeyboardWidget.hxx | 2 +- src/debugger/gui/NullControlWidget.hxx | 2 +- src/debugger/gui/PaddleWidget.cxx | 2 +- src/debugger/gui/PaddleWidget.hxx | 2 +- src/debugger/gui/PointingDeviceWidget.cxx | 2 +- src/debugger/gui/PointingDeviceWidget.hxx | 2 +- src/debugger/gui/PromptWidget.cxx | 2 +- src/debugger/gui/PromptWidget.hxx | 2 +- src/debugger/gui/RamWidget.cxx | 2 +- src/debugger/gui/RamWidget.hxx | 2 +- src/debugger/gui/RiotRamWidget.cxx | 2 +- src/debugger/gui/RiotRamWidget.hxx | 2 +- src/debugger/gui/RiotWidget.cxx | 2 +- src/debugger/gui/RiotWidget.hxx | 2 +- src/debugger/gui/RomListSettings.cxx | 2 +- src/debugger/gui/RomListSettings.hxx | 2 +- src/debugger/gui/RomListWidget.cxx | 2 +- src/debugger/gui/RomListWidget.hxx | 2 +- src/debugger/gui/RomWidget.cxx | 2 +- src/debugger/gui/RomWidget.hxx | 2 +- src/debugger/gui/SaveKeyWidget.cxx | 2 +- src/debugger/gui/SaveKeyWidget.hxx | 2 +- src/debugger/gui/TiaInfoWidget.cxx | 2 +- src/debugger/gui/TiaInfoWidget.hxx | 2 +- src/debugger/gui/TiaOutputWidget.cxx | 2 +- src/debugger/gui/TiaOutputWidget.hxx | 2 +- src/debugger/gui/TiaWidget.cxx | 2 +- src/debugger/gui/TiaWidget.hxx | 2 +- src/debugger/gui/TiaZoomWidget.cxx | 2 +- src/debugger/gui/TiaZoomWidget.hxx | 2 +- src/debugger/gui/ToggleBitWidget.cxx | 2 +- src/debugger/gui/ToggleBitWidget.hxx | 2 +- src/debugger/gui/TogglePixelWidget.cxx | 2 +- src/debugger/gui/TogglePixelWidget.hxx | 2 +- src/debugger/gui/ToggleWidget.cxx | 2 +- src/debugger/gui/ToggleWidget.hxx | 2 +- src/debugger/gui/TrakBallWidget.cxx | 2 +- src/debugger/gui/TrakBallWidget.hxx | 2 +- src/emucore/AmigaMouse.hxx | 2 +- src/emucore/AtariMouse.hxx | 2 +- src/emucore/AtariVox.cxx | 2 +- src/emucore/AtariVox.hxx | 2 +- src/emucore/BSType.hxx | 2 +- src/emucore/Booster.cxx | 2 +- src/emucore/Booster.hxx | 2 +- src/emucore/Cart.cxx | 2 +- src/emucore/Cart.hxx | 2 +- src/emucore/Cart0840.cxx | 2 +- src/emucore/Cart0840.hxx | 2 +- src/emucore/Cart2K.cxx | 2 +- src/emucore/Cart2K.hxx | 2 +- src/emucore/Cart3E.cxx | 2 +- src/emucore/Cart3E.hxx | 2 +- src/emucore/Cart3EPlus.cxx | 2 +- src/emucore/Cart3EPlus.hxx | 2 +- src/emucore/Cart3F.cxx | 2 +- src/emucore/Cart3F.hxx | 2 +- src/emucore/Cart4A50.cxx | 2 +- src/emucore/Cart4A50.hxx | 2 +- src/emucore/Cart4K.cxx | 2 +- src/emucore/Cart4K.hxx | 2 +- src/emucore/Cart4KSC.cxx | 2 +- src/emucore/Cart4KSC.hxx | 2 +- src/emucore/CartAR.cxx | 2 +- src/emucore/CartAR.hxx | 2 +- src/emucore/CartBF.cxx | 2 +- src/emucore/CartBF.hxx | 2 +- src/emucore/CartBFSC.cxx | 2 +- src/emucore/CartBFSC.hxx | 2 +- src/emucore/CartBUS.cxx | 2 +- src/emucore/CartBUS.hxx | 2 +- src/emucore/CartCDF.cxx | 2 +- src/emucore/CartCDF.hxx | 2 +- src/emucore/CartCM.cxx | 2 +- src/emucore/CartCM.hxx | 2 +- src/emucore/CartCTY.cxx | 2 +- src/emucore/CartCTY.hxx | 2 +- src/emucore/CartCTYTunes.hxx | 2 +- src/emucore/CartCV.cxx | 2 +- src/emucore/CartCV.hxx | 2 +- src/emucore/CartCVPlus.cxx | 2 +- src/emucore/CartCVPlus.hxx | 2 +- src/emucore/CartDASH.cxx | 2 +- src/emucore/CartDASH.hxx | 2 +- src/emucore/CartDF.cxx | 2 +- src/emucore/CartDF.hxx | 2 +- src/emucore/CartDFSC.cxx | 2 +- src/emucore/CartDFSC.hxx | 2 +- src/emucore/CartDPC.cxx | 2 +- src/emucore/CartDPC.hxx | 2 +- src/emucore/CartDPCPlus.cxx | 2 +- src/emucore/CartDPCPlus.hxx | 2 +- src/emucore/CartDetector.cxx | 2 +- src/emucore/CartDetector.hxx | 2 +- src/emucore/CartE0.cxx | 2 +- src/emucore/CartE0.hxx | 2 +- src/emucore/CartE7.cxx | 2 +- src/emucore/CartE7.hxx | 2 +- src/emucore/CartE78K.cxx | 2 +- src/emucore/CartE78K.hxx | 2 +- src/emucore/CartEF.cxx | 2 +- src/emucore/CartEF.hxx | 2 +- src/emucore/CartEFSC.cxx | 2 +- src/emucore/CartEFSC.hxx | 2 +- src/emucore/CartF0.cxx | 2 +- src/emucore/CartF0.hxx | 2 +- src/emucore/CartF4.cxx | 2 +- src/emucore/CartF4.hxx | 2 +- src/emucore/CartF4SC.cxx | 2 +- src/emucore/CartF4SC.hxx | 2 +- src/emucore/CartF6.cxx | 2 +- src/emucore/CartF6.hxx | 2 +- src/emucore/CartF6SC.cxx | 2 +- src/emucore/CartF6SC.hxx | 2 +- src/emucore/CartF8.cxx | 2 +- src/emucore/CartF8.hxx | 2 +- src/emucore/CartF8SC.cxx | 2 +- src/emucore/CartF8SC.hxx | 2 +- src/emucore/CartFA.cxx | 2 +- src/emucore/CartFA.hxx | 2 +- src/emucore/CartFA2.cxx | 2 +- src/emucore/CartFA2.hxx | 2 +- src/emucore/CartFE.cxx | 2 +- src/emucore/CartFE.hxx | 2 +- src/emucore/CartMDM.cxx | 2 +- src/emucore/CartMDM.hxx | 2 +- src/emucore/CartMNetwork.cxx | 2 +- src/emucore/CartMNetwork.hxx | 2 +- src/emucore/CartSB.cxx | 2 +- src/emucore/CartSB.hxx | 2 +- src/emucore/CartUA.cxx | 2 +- src/emucore/CartUA.hxx | 2 +- src/emucore/CartWD.cxx | 2 +- src/emucore/CartWD.hxx | 2 +- src/emucore/CartX07.cxx | 2 +- src/emucore/CartX07.hxx | 2 +- src/emucore/CompuMate.cxx | 2 +- src/emucore/CompuMate.hxx | 2 +- src/emucore/Console.cxx | 2 +- src/emucore/Console.hxx | 2 +- src/emucore/Control.cxx | 2 +- src/emucore/Control.hxx | 2 +- src/emucore/DefProps.hxx | 2 +- src/emucore/Device.hxx | 2 +- src/emucore/Driving.cxx | 2 +- src/emucore/Driving.hxx | 2 +- src/emucore/Event.hxx | 2 +- src/emucore/EventHandler.cxx | 2 +- src/emucore/EventHandler.hxx | 2 +- src/emucore/EventHandlerConstants.hxx | 2 +- src/emucore/EventJoyHandler.cxx | 2 +- src/emucore/FBSurface.cxx | 2 +- src/emucore/FBSurface.hxx | 2 +- src/emucore/FSNode.cxx | 2 +- src/emucore/FSNode.hxx | 2 +- src/emucore/FrameBuffer.cxx | 2 +- src/emucore/FrameBuffer.hxx | 2 +- src/emucore/FrameBufferConstants.hxx | 2 +- src/emucore/Genesis.cxx | 2 +- src/emucore/Genesis.hxx | 2 +- src/emucore/Joystick.cxx | 2 +- src/emucore/Joystick.hxx | 2 +- src/emucore/Keyboard.cxx | 2 +- src/emucore/Keyboard.hxx | 2 +- src/emucore/KidVid.cxx | 2 +- src/emucore/KidVid.hxx | 2 +- src/emucore/M6502.cxx | 2 +- src/emucore/M6502.hxx | 2 +- src/emucore/M6502.ins | 2 +- src/emucore/M6502.m4 | 2 +- src/emucore/M6532.cxx | 2 +- src/emucore/M6532.hxx | 2 +- src/emucore/MD5.cxx | 2 +- src/emucore/MD5.hxx | 2 +- src/emucore/MT24LC256.cxx | 2 +- src/emucore/MT24LC256.hxx | 2 +- src/emucore/MindLink.cxx | 2 +- src/emucore/MindLink.hxx | 2 +- src/emucore/NullDev.hxx | 2 +- src/emucore/OSystem.cxx | 2 +- src/emucore/OSystem.hxx | 2 +- src/emucore/Paddles.cxx | 2 +- src/emucore/Paddles.hxx | 2 +- src/emucore/PointingDevice.cxx | 2 +- src/emucore/PointingDevice.hxx | 2 +- src/emucore/Props.cxx | 2 +- src/emucore/Props.hxx | 2 +- src/emucore/PropsSet.cxx | 2 +- src/emucore/PropsSet.hxx | 2 +- src/emucore/Random.hxx | 2 +- src/emucore/SaveKey.cxx | 2 +- src/emucore/SaveKey.hxx | 2 +- src/emucore/SerialPort.hxx | 2 +- src/emucore/Serializable.hxx | 2 +- src/emucore/Serializer.cxx | 2 +- src/emucore/Serializer.hxx | 2 +- src/emucore/Settings.cxx | 2 +- src/emucore/Settings.hxx | 2 +- src/emucore/Sound.hxx | 2 +- src/emucore/Switches.cxx | 2 +- src/emucore/Switches.hxx | 2 +- src/emucore/System.cxx | 2 +- src/emucore/System.hxx | 2 +- src/emucore/TIASnd.cxx | 2 +- src/emucore/TIASnd.hxx | 2 +- src/emucore/TIASurface.cxx | 2 +- src/emucore/TIASurface.hxx | 2 +- src/emucore/Thumbulator.cxx | 2 +- src/emucore/Thumbulator.hxx | 2 +- src/emucore/TrakBall.hxx | 2 +- src/emucore/tia/Background.cxx | 2 +- src/emucore/tia/Background.hxx | 2 +- src/emucore/tia/Ball.cxx | 2 +- src/emucore/tia/Ball.hxx | 2 +- src/emucore/tia/DelayQueue.hxx | 2 +- src/emucore/tia/DelayQueueIterator.hxx | 2 +- src/emucore/tia/DelayQueueIteratorImpl.hxx | 2 +- src/emucore/tia/DelayQueueMember.hxx | 2 +- src/emucore/tia/DrawCounterDecodes.cxx | 2 +- src/emucore/tia/DrawCounterDecodes.hxx | 2 +- src/emucore/tia/FrameLayout.hxx | 2 +- src/emucore/tia/LatchedInput.cxx | 2 +- src/emucore/tia/LatchedInput.hxx | 2 +- src/emucore/tia/Missile.cxx | 2 +- src/emucore/tia/Missile.hxx | 2 +- src/emucore/tia/PaddleReader.cxx | 2 +- src/emucore/tia/PaddleReader.hxx | 2 +- src/emucore/tia/Player.cxx | 2 +- src/emucore/tia/Player.hxx | 2 +- src/emucore/tia/Playfield.cxx | 2 +- src/emucore/tia/Playfield.hxx | 2 +- src/emucore/tia/TIA.cxx | 2 +- src/emucore/tia/TIA.hxx | 2 +- src/emucore/tia/TIAConstants.hxx | 2 +- .../frame-manager/AbstractFrameManager.cxx | 2 +- .../frame-manager/AbstractFrameManager.hxx | 2 +- .../tia/frame-manager/FrameLayoutDetector.cxx | 2 +- .../tia/frame-manager/FrameLayoutDetector.hxx | 2 +- .../tia/frame-manager/FrameManager.cxx | 2 +- .../tia/frame-manager/FrameManager.hxx | 2 +- .../tia/frame-manager/JitterEmulation.cxx | 2 +- .../tia/frame-manager/JitterEmulation.hxx | 2 +- .../tia/frame-manager/YStartDetector.cxx | 2 +- .../tia/frame-manager/YStartDetector.hxx | 2 +- src/gui/AboutDialog.cxx | 4 +-- src/gui/AboutDialog.hxx | 2 +- src/gui/AudioDialog.cxx | 2 +- src/gui/AudioDialog.hxx | 2 +- src/gui/BrowserDialog.cxx | 2 +- src/gui/BrowserDialog.hxx | 2 +- src/gui/CheckListWidget.cxx | 2 +- src/gui/CheckListWidget.hxx | 2 +- src/gui/ColorWidget.cxx | 2 +- src/gui/ColorWidget.hxx | 2 +- src/gui/ComboDialog.cxx | 2 +- src/gui/ComboDialog.hxx | 2 +- src/gui/Command.hxx | 2 +- src/gui/CommandDialog.cxx | 2 +- src/gui/CommandDialog.hxx | 2 +- src/gui/CommandMenu.cxx | 2 +- src/gui/CommandMenu.hxx | 2 +- src/gui/ConfigPathDialog.cxx | 2 +- src/gui/ConfigPathDialog.hxx | 2 +- src/gui/ConsoleBFont.hxx | 2 +- src/gui/ConsoleFont.hxx | 2 +- src/gui/ConsoleMediumBFont.hxx | 2 +- src/gui/ConsoleMediumFont.hxx | 2 +- src/gui/ContextMenu.cxx | 2 +- src/gui/ContextMenu.hxx | 2 +- src/gui/DeveloperDialog.cxx | 2 +- src/gui/DeveloperDialog.hxx | 2 +- src/gui/Dialog.cxx | 2 +- src/gui/Dialog.hxx | 2 +- src/gui/DialogContainer.cxx | 2 +- src/gui/DialogContainer.hxx | 2 +- src/gui/EditTextWidget.cxx | 2 +- src/gui/EditTextWidget.hxx | 2 +- src/gui/EditableWidget.cxx | 2 +- src/gui/EditableWidget.hxx | 2 +- src/gui/EventMappingWidget.cxx | 2 +- src/gui/EventMappingWidget.hxx | 2 +- src/gui/FileListWidget.cxx | 2 +- src/gui/FileListWidget.hxx | 2 +- src/gui/Font.cxx | 2 +- src/gui/Font.hxx | 2 +- src/gui/GameInfoDialog.cxx | 2 +- src/gui/GameInfoDialog.hxx | 2 +- src/gui/GameList.cxx | 2 +- src/gui/GameList.hxx | 2 +- src/gui/GlobalPropsDialog.cxx | 2 +- src/gui/GlobalPropsDialog.hxx | 2 +- src/gui/GuiObject.hxx | 2 +- src/gui/HelpDialog.cxx | 2 +- src/gui/HelpDialog.hxx | 2 +- src/gui/InputDialog.cxx | 2 +- src/gui/InputDialog.hxx | 2 +- src/gui/InputTextDialog.cxx | 2 +- src/gui/InputTextDialog.hxx | 2 +- src/gui/JoystickDialog.cxx | 2 +- src/gui/JoystickDialog.hxx | 2 +- src/gui/Launcher.cxx | 2 +- src/gui/Launcher.hxx | 2 +- src/gui/LauncherDialog.cxx | 2 +- src/gui/LauncherDialog.hxx | 2 +- src/gui/LauncherFilterDialog.cxx | 2 +- src/gui/LauncherFilterDialog.hxx | 2 +- src/gui/ListWidget.cxx | 2 +- src/gui/ListWidget.hxx | 2 +- src/gui/LoggerDialog.cxx | 2 +- src/gui/LoggerDialog.hxx | 2 +- src/gui/Menu.cxx | 2 +- src/gui/Menu.hxx | 2 +- src/gui/MessageBox.cxx | 2 +- src/gui/MessageBox.hxx | 2 +- src/gui/OptionsDialog.cxx | 2 +- src/gui/OptionsDialog.hxx | 2 +- src/gui/PopUpWidget.cxx | 2 +- src/gui/PopUpWidget.hxx | 2 +- src/gui/ProgressDialog.cxx | 2 +- src/gui/ProgressDialog.hxx | 2 +- src/gui/RadioButtonWidget.cxx | 2 +- src/gui/RadioButtonWidget.hxx | 2 +- src/gui/Rect.hxx | 2 +- src/gui/RomAuditDialog.cxx | 2 +- src/gui/RomAuditDialog.hxx | 2 +- src/gui/RomInfoWidget.cxx | 2 +- src/gui/RomInfoWidget.hxx | 2 +- src/gui/ScrollBarWidget.cxx | 2 +- src/gui/ScrollBarWidget.hxx | 2 +- src/gui/SnapshotDialog.cxx | 2 +- src/gui/SnapshotDialog.hxx | 2 +- src/gui/StellaFont.hxx | 2 +- src/gui/StellaLargeFont.hxx | 2 +- src/gui/StellaMediumFont.hxx | 2 +- src/gui/StringListWidget.cxx | 2 +- src/gui/StringListWidget.hxx | 2 +- src/gui/TabWidget.cxx | 2 +- src/gui/TabWidget.hxx | 2 +- src/gui/TimeMachine.cxx | 2 +- src/gui/TimeMachine.hxx | 2 +- src/gui/TimeMachineDialog.cxx | 2 +- src/gui/TimeMachineDialog.hxx | 2 +- src/gui/UIDialog.cxx | 2 +- src/gui/UIDialog.hxx | 2 +- src/gui/VideoDialog.cxx | 2 +- src/gui/VideoDialog.hxx | 2 +- src/gui/Widget.cxx | 2 +- src/gui/Widget.hxx | 2 +- src/macosx/AboutBox.h | 2 +- src/macosx/AboutBox.m | 2 +- src/macosx/AboutBoxTextView.h | 2 +- src/macosx/AboutBoxTextView.m | 2 +- src/macosx/Credits.html | 4 +-- src/macosx/OSystemMACOSX.cxx | 2 +- src/macosx/OSystemMACOSX.hxx | 2 +- src/macosx/Preferences.h | 2 +- src/macosx/Preferences.m | 2 +- src/macosx/SerialPortMACOSX.cxx | 2 +- src/macosx/SerialPortMACOSX.hxx | 2 +- src/macosx/SettingsMACOSX.cxx | 2 +- src/macosx/SettingsMACOSX.hxx | 2 +- src/tools/convbdf.c | 2 +- src/tools/create_props.pl | 2 +- src/tools/scrom.asm | 2 +- src/tools/update_stella_date.pl | 30 ------------------- src/unix/FSNodePOSIX.cxx | 2 +- src/unix/FSNodePOSIX.hxx | 2 +- src/unix/OSystemUNIX.cxx | 2 +- src/unix/OSystemUNIX.hxx | 2 +- src/unix/SerialPortUNIX.cxx | 2 +- src/unix/SerialPortUNIX.hxx | 2 +- src/unix/SettingsUNIX.cxx | 2 +- src/unix/SettingsUNIX.hxx | 2 +- src/windows/FSNodeWINDOWS.cxx | 2 +- src/windows/FSNodeWINDOWS.hxx | 2 +- src/windows/HomeFinder.hxx | 2 +- src/windows/OSystemWINDOWS.cxx | 2 +- src/windows/OSystemWINDOWS.hxx | 2 +- src/windows/SerialPortWINDOWS.cxx | 2 +- src/windows/SerialPortWINDOWS.hxx | 2 +- src/windows/SettingsWINDOWS.cxx | 2 +- src/windows/SettingsWINDOWS.hxx | 2 +- src/windows/stella.rc | 2 +- src/yacc/YaccParser.cxx | 2 +- src/yacc/YaccParser.hxx | 2 +- 577 files changed, 578 insertions(+), 608 deletions(-) delete mode 100755 src/tools/update_stella_date.pl diff --git a/Copyright.txt b/Copyright.txt index 26bb24407..aaabb3baa 100644 --- a/Copyright.txt +++ b/Copyright.txt @@ -12,7 +12,7 @@ License Information and Copyright Notice =========================================================================== -Copyright (C) 1995-2017 by Bradford W. Mott, Stephen Anthony and the +Copyright (C) 1995-2018 by Bradford W. Mott, Stephen Anthony and the Stella Team This program is free software; you can redistribute it and/or modify it diff --git a/docs/index.html b/docs/index.html index a7f163ad4..ef7fd6b24 100644 --- a/docs/index.html +++ b/docs/index.html @@ -59,7 +59,7 @@


        -
        February 1999 - December 2017
        +
        February 1999 - January 2018
        The Stella Team
        Stella Homepage
        diff --git a/src/cheat/BankRomCheat.cxx b/src/cheat/BankRomCheat.cxx index 433bc6ddc..ffe310a38 100644 --- a/src/cheat/BankRomCheat.cxx +++ b/src/cheat/BankRomCheat.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/cheat/BankRomCheat.hxx b/src/cheat/BankRomCheat.hxx index 223b6aa3e..dfae16122 100644 --- a/src/cheat/BankRomCheat.hxx +++ b/src/cheat/BankRomCheat.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/cheat/Cheat.hxx b/src/cheat/Cheat.hxx index 6df3c6b54..5b3f46570 100644 --- a/src/cheat/Cheat.hxx +++ b/src/cheat/Cheat.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/cheat/CheatCodeDialog.cxx b/src/cheat/CheatCodeDialog.cxx index f4651597d..4b5495080 100644 --- a/src/cheat/CheatCodeDialog.cxx +++ b/src/cheat/CheatCodeDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/cheat/CheatCodeDialog.hxx b/src/cheat/CheatCodeDialog.hxx index fb1d28711..140eedd01 100644 --- a/src/cheat/CheatCodeDialog.hxx +++ b/src/cheat/CheatCodeDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/cheat/CheatManager.cxx b/src/cheat/CheatManager.cxx index 2b2973546..dcb0fb4dd 100644 --- a/src/cheat/CheatManager.cxx +++ b/src/cheat/CheatManager.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/cheat/CheatManager.hxx b/src/cheat/CheatManager.hxx index a37613ac9..d676aef65 100644 --- a/src/cheat/CheatManager.hxx +++ b/src/cheat/CheatManager.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/cheat/CheetahCheat.cxx b/src/cheat/CheetahCheat.cxx index c522ba609..30f9c9a0a 100644 --- a/src/cheat/CheetahCheat.cxx +++ b/src/cheat/CheetahCheat.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/cheat/CheetahCheat.hxx b/src/cheat/CheetahCheat.hxx index 2ad37f211..a00f139cd 100644 --- a/src/cheat/CheetahCheat.hxx +++ b/src/cheat/CheetahCheat.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/cheat/RamCheat.cxx b/src/cheat/RamCheat.cxx index 1568f959b..13fe00e6e 100644 --- a/src/cheat/RamCheat.cxx +++ b/src/cheat/RamCheat.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/cheat/RamCheat.hxx b/src/cheat/RamCheat.hxx index aeed5a459..fcf04ca38 100644 --- a/src/cheat/RamCheat.hxx +++ b/src/cheat/RamCheat.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/Base.cxx b/src/common/Base.cxx index b788f04eb..5ce8997b9 100644 --- a/src/common/Base.cxx +++ b/src/common/Base.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/Base.hxx b/src/common/Base.hxx index 99ac89153..dd30a8a69 100644 --- a/src/common/Base.hxx +++ b/src/common/Base.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/EventHandlerSDL2.cxx b/src/common/EventHandlerSDL2.cxx index a9b0d74c9..5d821325c 100644 --- a/src/common/EventHandlerSDL2.cxx +++ b/src/common/EventHandlerSDL2.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/EventHandlerSDL2.hxx b/src/common/EventHandlerSDL2.hxx index 130225497..c826c3c4b 100644 --- a/src/common/EventHandlerSDL2.hxx +++ b/src/common/EventHandlerSDL2.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/FBSurfaceSDL2.cxx b/src/common/FBSurfaceSDL2.cxx index e7e79a2b5..86a487f8c 100644 --- a/src/common/FBSurfaceSDL2.cxx +++ b/src/common/FBSurfaceSDL2.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/FBSurfaceSDL2.hxx b/src/common/FBSurfaceSDL2.hxx index 1471d06eb..3bf8ce856 100644 --- a/src/common/FBSurfaceSDL2.hxx +++ b/src/common/FBSurfaceSDL2.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/FSNodeFactory.hxx b/src/common/FSNodeFactory.hxx index 11eb1ff8e..c3b958c2e 100644 --- a/src/common/FSNodeFactory.hxx +++ b/src/common/FSNodeFactory.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/FSNodeZIP.cxx b/src/common/FSNodeZIP.cxx index 87b7178af..0528e9469 100644 --- a/src/common/FSNodeZIP.cxx +++ b/src/common/FSNodeZIP.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/FSNodeZIP.hxx b/src/common/FSNodeZIP.hxx index 15a357ca9..29b51df00 100644 --- a/src/common/FSNodeZIP.hxx +++ b/src/common/FSNodeZIP.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/FrameBufferSDL2.cxx b/src/common/FrameBufferSDL2.cxx index af38e7388..76d6ece46 100644 --- a/src/common/FrameBufferSDL2.cxx +++ b/src/common/FrameBufferSDL2.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/FrameBufferSDL2.hxx b/src/common/FrameBufferSDL2.hxx index cbe248068..cf134e96e 100644 --- a/src/common/FrameBufferSDL2.hxx +++ b/src/common/FrameBufferSDL2.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/LinkedObjectPool.hxx b/src/common/LinkedObjectPool.hxx index 46205c6f1..3bbabfb9f 100644 --- a/src/common/LinkedObjectPool.hxx +++ b/src/common/LinkedObjectPool.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/MediaFactory.hxx b/src/common/MediaFactory.hxx index b9bb86c49..1338b1ccd 100644 --- a/src/common/MediaFactory.hxx +++ b/src/common/MediaFactory.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/MouseControl.cxx b/src/common/MouseControl.cxx index f7dcffa80..195658f13 100644 --- a/src/common/MouseControl.cxx +++ b/src/common/MouseControl.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/MouseControl.hxx b/src/common/MouseControl.hxx index 6e0860bc7..3cc27ffaf 100644 --- a/src/common/MouseControl.hxx +++ b/src/common/MouseControl.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/PNGLibrary.cxx b/src/common/PNGLibrary.cxx index 45fccbddb..476a161b1 100644 --- a/src/common/PNGLibrary.cxx +++ b/src/common/PNGLibrary.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/PNGLibrary.hxx b/src/common/PNGLibrary.hxx index b75ef4e1b..d6950c350 100644 --- a/src/common/PNGLibrary.hxx +++ b/src/common/PNGLibrary.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index 7e58d5ddb..18bf4f83a 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index 8c70feed7..43fbd7806 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/SDL_lib.hxx b/src/common/SDL_lib.hxx index 98f3c8b0a..3f44ae42e 100644 --- a/src/common/SDL_lib.hxx +++ b/src/common/SDL_lib.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/SoundNull.hxx b/src/common/SoundNull.hxx index 0189153f6..198dc26d7 100644 --- a/src/common/SoundNull.hxx +++ b/src/common/SoundNull.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/SoundSDL2.cxx b/src/common/SoundSDL2.cxx index d9515e8ff..40c22a2b8 100644 --- a/src/common/SoundSDL2.cxx +++ b/src/common/SoundSDL2.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/SoundSDL2.hxx b/src/common/SoundSDL2.hxx index faa9a72b9..f8e811032 100644 --- a/src/common/SoundSDL2.hxx +++ b/src/common/SoundSDL2.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/Stack.hxx b/src/common/Stack.hxx index 2f25fd222..f1ae48ae4 100644 --- a/src/common/Stack.hxx +++ b/src/common/Stack.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/StateManager.cxx b/src/common/StateManager.cxx index 1f3aaec00..706f8f019 100644 --- a/src/common/StateManager.cxx +++ b/src/common/StateManager.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/StateManager.hxx b/src/common/StateManager.hxx index 8961fe8ca..0e322f8dd 100644 --- a/src/common/StateManager.hxx +++ b/src/common/StateManager.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/StellaKeys.hxx b/src/common/StellaKeys.hxx index 105ae8352..7088e6cc8 100644 --- a/src/common/StellaKeys.hxx +++ b/src/common/StellaKeys.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/StringParser.hxx b/src/common/StringParser.hxx index 9673667e1..01270a03e 100644 --- a/src/common/StringParser.hxx +++ b/src/common/StringParser.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/Variant.hxx b/src/common/Variant.hxx index c535c3a39..3e213047c 100644 --- a/src/common/Variant.hxx +++ b/src/common/Variant.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/Vec.hxx b/src/common/Vec.hxx index d1295626a..7ab34ab67 100644 --- a/src/common/Vec.hxx +++ b/src/common/Vec.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/Version.hxx b/src/common/Version.hxx index c5cd7070e..44ab97567 100644 --- a/src/common/Version.hxx +++ b/src/common/Version.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/ZipHandler.cxx b/src/common/ZipHandler.cxx index 100beefcf..673e5784e 100644 --- a/src/common/ZipHandler.cxx +++ b/src/common/ZipHandler.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/ZipHandler.hxx b/src/common/ZipHandler.hxx index 3570781fe..e1f669110 100644 --- a/src/common/ZipHandler.hxx +++ b/src/common/ZipHandler.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/bspf.hxx b/src/common/bspf.hxx index 6b5a55be8..84164a087 100644 --- a/src/common/bspf.hxx +++ b/src/common/bspf.hxx @@ -8,7 +8,7 @@ // BB BB SS SS PP FF // BBBBB SSSS PP FF // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/main.cxx b/src/common/main.cxx index b0d1b7cca..fca86956d 100644 --- a/src/common/main.cxx +++ b/src/common/main.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/smartmod.hxx b/src/common/smartmod.hxx index d69efd1c4..378c3204c 100644 --- a/src/common/smartmod.hxx +++ b/src/common/smartmod.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/tv_filters/AtariNTSC.cxx b/src/common/tv_filters/AtariNTSC.cxx index f5c008b69..30782f1e8 100644 --- a/src/common/tv_filters/AtariNTSC.cxx +++ b/src/common/tv_filters/AtariNTSC.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/tv_filters/AtariNTSC.hxx b/src/common/tv_filters/AtariNTSC.hxx index 2b3c3a7fb..ce868948c 100644 --- a/src/common/tv_filters/AtariNTSC.hxx +++ b/src/common/tv_filters/AtariNTSC.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/tv_filters/NTSCFilter.cxx b/src/common/tv_filters/NTSCFilter.cxx index 4e88a374d..519eeddda 100644 --- a/src/common/tv_filters/NTSCFilter.cxx +++ b/src/common/tv_filters/NTSCFilter.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/common/tv_filters/NTSCFilter.hxx b/src/common/tv_filters/NTSCFilter.hxx index 987687fc5..01e431497 100644 --- a/src/common/tv_filters/NTSCFilter.hxx +++ b/src/common/tv_filters/NTSCFilter.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/CartDebug.cxx b/src/debugger/CartDebug.cxx index dbf330af7..552a985a2 100644 --- a/src/debugger/CartDebug.cxx +++ b/src/debugger/CartDebug.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/CartDebug.hxx b/src/debugger/CartDebug.hxx index 3efd9e9d1..e3e4c998a 100644 --- a/src/debugger/CartDebug.hxx +++ b/src/debugger/CartDebug.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/CpuDebug.cxx b/src/debugger/CpuDebug.cxx index d90d22c8d..5c3c945fe 100644 --- a/src/debugger/CpuDebug.cxx +++ b/src/debugger/CpuDebug.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/CpuDebug.hxx b/src/debugger/CpuDebug.hxx index 41a0c7991..e63cdf6d0 100644 --- a/src/debugger/CpuDebug.hxx +++ b/src/debugger/CpuDebug.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index 10342f8da..a8aaecf87 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/Debugger.hxx b/src/debugger/Debugger.hxx index 762ec381b..0324cbdc0 100644 --- a/src/debugger/Debugger.hxx +++ b/src/debugger/Debugger.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/DebuggerExpressions.hxx b/src/debugger/DebuggerExpressions.hxx index 5087f767f..90b62ea82 100644 --- a/src/debugger/DebuggerExpressions.hxx +++ b/src/debugger/DebuggerExpressions.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/DebuggerParser.cxx b/src/debugger/DebuggerParser.cxx index ba772f806..f662132c2 100644 --- a/src/debugger/DebuggerParser.cxx +++ b/src/debugger/DebuggerParser.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/DebuggerParser.hxx b/src/debugger/DebuggerParser.hxx index 30234bcbc..78bb4c05c 100644 --- a/src/debugger/DebuggerParser.hxx +++ b/src/debugger/DebuggerParser.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/DebuggerSystem.hxx b/src/debugger/DebuggerSystem.hxx index e1be397e8..e6ed018f1 100644 --- a/src/debugger/DebuggerSystem.hxx +++ b/src/debugger/DebuggerSystem.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/DiStella.cxx b/src/debugger/DiStella.cxx index f253e9997..142c4e9e8 100644 --- a/src/debugger/DiStella.cxx +++ b/src/debugger/DiStella.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/DiStella.hxx b/src/debugger/DiStella.hxx index 47d168f41..64b8a8205 100644 --- a/src/debugger/DiStella.hxx +++ b/src/debugger/DiStella.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/Expression.hxx b/src/debugger/Expression.hxx index e67d95cc4..0303ba914 100644 --- a/src/debugger/Expression.hxx +++ b/src/debugger/Expression.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/PackedBitArray.hxx b/src/debugger/PackedBitArray.hxx index 35a4cd6d9..74af7c701 100644 --- a/src/debugger/PackedBitArray.hxx +++ b/src/debugger/PackedBitArray.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/RiotDebug.cxx b/src/debugger/RiotDebug.cxx index 03faf859b..bc8a89b99 100644 --- a/src/debugger/RiotDebug.cxx +++ b/src/debugger/RiotDebug.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/RiotDebug.hxx b/src/debugger/RiotDebug.hxx index 2c434a2d2..d6425d8a0 100644 --- a/src/debugger/RiotDebug.hxx +++ b/src/debugger/RiotDebug.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/TIADebug.cxx b/src/debugger/TIADebug.cxx index 33b827923..4d9c19c8c 100644 --- a/src/debugger/TIADebug.cxx +++ b/src/debugger/TIADebug.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/TIADebug.hxx b/src/debugger/TIADebug.hxx index 229d6f1df..1b41af838 100644 --- a/src/debugger/TIADebug.hxx +++ b/src/debugger/TIADebug.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/TrapArray.hxx b/src/debugger/TrapArray.hxx index 4bbd9ca2e..bd12fdd71 100644 --- a/src/debugger/TrapArray.hxx +++ b/src/debugger/TrapArray.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/AmigaMouseWidget.cxx b/src/debugger/gui/AmigaMouseWidget.cxx index 67ad33f64..3b16cf13b 100644 --- a/src/debugger/gui/AmigaMouseWidget.cxx +++ b/src/debugger/gui/AmigaMouseWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/AmigaMouseWidget.hxx b/src/debugger/gui/AmigaMouseWidget.hxx index e11665c4f..b072991b8 100644 --- a/src/debugger/gui/AmigaMouseWidget.hxx +++ b/src/debugger/gui/AmigaMouseWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/AtariMouseWidget.cxx b/src/debugger/gui/AtariMouseWidget.cxx index a53c1e123..420bf82ff 100644 --- a/src/debugger/gui/AtariMouseWidget.cxx +++ b/src/debugger/gui/AtariMouseWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/AtariMouseWidget.hxx b/src/debugger/gui/AtariMouseWidget.hxx index df80c8b2a..70df6af48 100644 --- a/src/debugger/gui/AtariMouseWidget.hxx +++ b/src/debugger/gui/AtariMouseWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/AtariVoxWidget.cxx b/src/debugger/gui/AtariVoxWidget.cxx index 5e35edb1c..831d0e3e5 100644 --- a/src/debugger/gui/AtariVoxWidget.cxx +++ b/src/debugger/gui/AtariVoxWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/AtariVoxWidget.hxx b/src/debugger/gui/AtariVoxWidget.hxx index 9fb0012fc..0e69da631 100644 --- a/src/debugger/gui/AtariVoxWidget.hxx +++ b/src/debugger/gui/AtariVoxWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/AudioWidget.cxx b/src/debugger/gui/AudioWidget.cxx index cc865bdab..3b39023e2 100644 --- a/src/debugger/gui/AudioWidget.cxx +++ b/src/debugger/gui/AudioWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/AudioWidget.hxx b/src/debugger/gui/AudioWidget.hxx index f0cab2635..6907009df 100644 --- a/src/debugger/gui/AudioWidget.hxx +++ b/src/debugger/gui/AudioWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/BoosterWidget.cxx b/src/debugger/gui/BoosterWidget.cxx index 1e19a5cfc..bff2630fe 100644 --- a/src/debugger/gui/BoosterWidget.cxx +++ b/src/debugger/gui/BoosterWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/BoosterWidget.hxx b/src/debugger/gui/BoosterWidget.hxx index e6f28a202..6c9d30d0a 100644 --- a/src/debugger/gui/BoosterWidget.hxx +++ b/src/debugger/gui/BoosterWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/Cart0840Widget.cxx b/src/debugger/gui/Cart0840Widget.cxx index b1db5e2bb..f8469eecb 100644 --- a/src/debugger/gui/Cart0840Widget.cxx +++ b/src/debugger/gui/Cart0840Widget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/Cart0840Widget.hxx b/src/debugger/gui/Cart0840Widget.hxx index 00a44a81f..3f1fe3c9e 100644 --- a/src/debugger/gui/Cart0840Widget.hxx +++ b/src/debugger/gui/Cart0840Widget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/Cart2KWidget.cxx b/src/debugger/gui/Cart2KWidget.cxx index 439c32117..2f176e732 100644 --- a/src/debugger/gui/Cart2KWidget.cxx +++ b/src/debugger/gui/Cart2KWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/Cart2KWidget.hxx b/src/debugger/gui/Cart2KWidget.hxx index 9f7ec17f3..9028b4069 100644 --- a/src/debugger/gui/Cart2KWidget.hxx +++ b/src/debugger/gui/Cart2KWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/Cart3EPlusWidget.cxx b/src/debugger/gui/Cart3EPlusWidget.cxx index 9b78cd470..dc5173552 100644 --- a/src/debugger/gui/Cart3EPlusWidget.cxx +++ b/src/debugger/gui/Cart3EPlusWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/Cart3EPlusWidget.hxx b/src/debugger/gui/Cart3EPlusWidget.hxx index fdc84aee8..536170278 100644 --- a/src/debugger/gui/Cart3EPlusWidget.hxx +++ b/src/debugger/gui/Cart3EPlusWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/Cart3EWidget.cxx b/src/debugger/gui/Cart3EWidget.cxx index 3eb38d01f..86b7c9edd 100644 --- a/src/debugger/gui/Cart3EWidget.cxx +++ b/src/debugger/gui/Cart3EWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/Cart3EWidget.hxx b/src/debugger/gui/Cart3EWidget.hxx index 1432ee3f9..ad2d0951d 100644 --- a/src/debugger/gui/Cart3EWidget.hxx +++ b/src/debugger/gui/Cart3EWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/Cart3FWidget.cxx b/src/debugger/gui/Cart3FWidget.cxx index 5b8e49aa9..d6490a559 100644 --- a/src/debugger/gui/Cart3FWidget.cxx +++ b/src/debugger/gui/Cart3FWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/Cart3FWidget.hxx b/src/debugger/gui/Cart3FWidget.hxx index 8994eb9f5..b57127d05 100644 --- a/src/debugger/gui/Cart3FWidget.hxx +++ b/src/debugger/gui/Cart3FWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/Cart4A50Widget.cxx b/src/debugger/gui/Cart4A50Widget.cxx index c702e9fe7..d0850aa66 100644 --- a/src/debugger/gui/Cart4A50Widget.cxx +++ b/src/debugger/gui/Cart4A50Widget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/Cart4A50Widget.hxx b/src/debugger/gui/Cart4A50Widget.hxx index 66eb23c70..bec41df3d 100644 --- a/src/debugger/gui/Cart4A50Widget.hxx +++ b/src/debugger/gui/Cart4A50Widget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/Cart4KSCWidget.cxx b/src/debugger/gui/Cart4KSCWidget.cxx index bc18a0e32..ec105bdba 100644 --- a/src/debugger/gui/Cart4KSCWidget.cxx +++ b/src/debugger/gui/Cart4KSCWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/Cart4KSCWidget.hxx b/src/debugger/gui/Cart4KSCWidget.hxx index 570a8d514..f486d6ecc 100644 --- a/src/debugger/gui/Cart4KSCWidget.hxx +++ b/src/debugger/gui/Cart4KSCWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/Cart4KWidget.cxx b/src/debugger/gui/Cart4KWidget.cxx index 3a4f47191..3b87fdb1c 100644 --- a/src/debugger/gui/Cart4KWidget.cxx +++ b/src/debugger/gui/Cart4KWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/Cart4KWidget.hxx b/src/debugger/gui/Cart4KWidget.hxx index da0b49d9a..b5d6211a4 100644 --- a/src/debugger/gui/Cart4KWidget.hxx +++ b/src/debugger/gui/Cart4KWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartARWidget.cxx b/src/debugger/gui/CartARWidget.cxx index 653d3b59a..b3d894785 100644 --- a/src/debugger/gui/CartARWidget.cxx +++ b/src/debugger/gui/CartARWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartARWidget.hxx b/src/debugger/gui/CartARWidget.hxx index 747e8aa43..b3d50d5f7 100644 --- a/src/debugger/gui/CartARWidget.hxx +++ b/src/debugger/gui/CartARWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartBFSCWidget.cxx b/src/debugger/gui/CartBFSCWidget.cxx index 8f2c21cd6..cc5fbb32e 100644 --- a/src/debugger/gui/CartBFSCWidget.cxx +++ b/src/debugger/gui/CartBFSCWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartBFSCWidget.hxx b/src/debugger/gui/CartBFSCWidget.hxx index 9c1ccf000..0be5d4f95 100644 --- a/src/debugger/gui/CartBFSCWidget.hxx +++ b/src/debugger/gui/CartBFSCWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartBFWidget.cxx b/src/debugger/gui/CartBFWidget.cxx index 90e76bdd7..3c23f0c9f 100644 --- a/src/debugger/gui/CartBFWidget.cxx +++ b/src/debugger/gui/CartBFWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartBFWidget.hxx b/src/debugger/gui/CartBFWidget.hxx index d386be619..fd495fa69 100644 --- a/src/debugger/gui/CartBFWidget.hxx +++ b/src/debugger/gui/CartBFWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartBUSWidget.cxx b/src/debugger/gui/CartBUSWidget.cxx index be4af9d2d..0f948fcb2 100644 --- a/src/debugger/gui/CartBUSWidget.cxx +++ b/src/debugger/gui/CartBUSWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartBUSWidget.hxx b/src/debugger/gui/CartBUSWidget.hxx index 3fe552b51..9a130c88b 100644 --- a/src/debugger/gui/CartBUSWidget.hxx +++ b/src/debugger/gui/CartBUSWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartCDFWidget.cxx b/src/debugger/gui/CartCDFWidget.cxx index 78703dd21..639d7d7a9 100644 --- a/src/debugger/gui/CartCDFWidget.cxx +++ b/src/debugger/gui/CartCDFWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartCDFWidget.hxx b/src/debugger/gui/CartCDFWidget.hxx index 57f342f80..cdd893f31 100644 --- a/src/debugger/gui/CartCDFWidget.hxx +++ b/src/debugger/gui/CartCDFWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartCMWidget.cxx b/src/debugger/gui/CartCMWidget.cxx index 6db45b47d..c9f2d2819 100644 --- a/src/debugger/gui/CartCMWidget.cxx +++ b/src/debugger/gui/CartCMWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartCMWidget.hxx b/src/debugger/gui/CartCMWidget.hxx index d348cdf9e..e5d81f441 100644 --- a/src/debugger/gui/CartCMWidget.hxx +++ b/src/debugger/gui/CartCMWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartCTYWidget.cxx b/src/debugger/gui/CartCTYWidget.cxx index ad1c94e45..ae5bc5964 100644 --- a/src/debugger/gui/CartCTYWidget.cxx +++ b/src/debugger/gui/CartCTYWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartCTYWidget.hxx b/src/debugger/gui/CartCTYWidget.hxx index ea317d730..255c93fc9 100644 --- a/src/debugger/gui/CartCTYWidget.hxx +++ b/src/debugger/gui/CartCTYWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartCVPlusWidget.cxx b/src/debugger/gui/CartCVPlusWidget.cxx index 97a4d1a14..efa8a3294 100644 --- a/src/debugger/gui/CartCVPlusWidget.cxx +++ b/src/debugger/gui/CartCVPlusWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartCVPlusWidget.hxx b/src/debugger/gui/CartCVPlusWidget.hxx index c691bdb62..8baec27b1 100644 --- a/src/debugger/gui/CartCVPlusWidget.hxx +++ b/src/debugger/gui/CartCVPlusWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartCVWidget.cxx b/src/debugger/gui/CartCVWidget.cxx index 69fe77402..1ef881407 100644 --- a/src/debugger/gui/CartCVWidget.cxx +++ b/src/debugger/gui/CartCVWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartCVWidget.hxx b/src/debugger/gui/CartCVWidget.hxx index be5579c8b..3492d1877 100644 --- a/src/debugger/gui/CartCVWidget.hxx +++ b/src/debugger/gui/CartCVWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartDASHWidget.cxx b/src/debugger/gui/CartDASHWidget.cxx index 5084e017c..6df640521 100644 --- a/src/debugger/gui/CartDASHWidget.cxx +++ b/src/debugger/gui/CartDASHWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartDASHWidget.hxx b/src/debugger/gui/CartDASHWidget.hxx index 14b1695a3..bb62a132e 100644 --- a/src/debugger/gui/CartDASHWidget.hxx +++ b/src/debugger/gui/CartDASHWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartDFSCWidget.cxx b/src/debugger/gui/CartDFSCWidget.cxx index bd66e577a..883524b99 100644 --- a/src/debugger/gui/CartDFSCWidget.cxx +++ b/src/debugger/gui/CartDFSCWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartDFSCWidget.hxx b/src/debugger/gui/CartDFSCWidget.hxx index 44e340354..0223550f6 100644 --- a/src/debugger/gui/CartDFSCWidget.hxx +++ b/src/debugger/gui/CartDFSCWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartDFWidget.cxx b/src/debugger/gui/CartDFWidget.cxx index 911fbe938..9661fe1b0 100644 --- a/src/debugger/gui/CartDFWidget.cxx +++ b/src/debugger/gui/CartDFWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartDFWidget.hxx b/src/debugger/gui/CartDFWidget.hxx index b68a3c47b..d1cacef49 100644 --- a/src/debugger/gui/CartDFWidget.hxx +++ b/src/debugger/gui/CartDFWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartDPCPlusWidget.cxx b/src/debugger/gui/CartDPCPlusWidget.cxx index 9b8d59525..e1e380f41 100644 --- a/src/debugger/gui/CartDPCPlusWidget.cxx +++ b/src/debugger/gui/CartDPCPlusWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartDPCPlusWidget.hxx b/src/debugger/gui/CartDPCPlusWidget.hxx index 668b5f580..7d94d2705 100644 --- a/src/debugger/gui/CartDPCPlusWidget.hxx +++ b/src/debugger/gui/CartDPCPlusWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartDPCWidget.cxx b/src/debugger/gui/CartDPCWidget.cxx index 150edc2b1..5fe4bbd78 100644 --- a/src/debugger/gui/CartDPCWidget.cxx +++ b/src/debugger/gui/CartDPCWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartDPCWidget.hxx b/src/debugger/gui/CartDPCWidget.hxx index 6db4c587b..0cc2012ca 100644 --- a/src/debugger/gui/CartDPCWidget.hxx +++ b/src/debugger/gui/CartDPCWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartDebugWidget.cxx b/src/debugger/gui/CartDebugWidget.cxx index 008a8a142..82cbb6f34 100644 --- a/src/debugger/gui/CartDebugWidget.cxx +++ b/src/debugger/gui/CartDebugWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartDebugWidget.hxx b/src/debugger/gui/CartDebugWidget.hxx index 684e9b7aa..0d8696557 100644 --- a/src/debugger/gui/CartDebugWidget.hxx +++ b/src/debugger/gui/CartDebugWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartE0Widget.cxx b/src/debugger/gui/CartE0Widget.cxx index 13bdde580..67426fc4a 100644 --- a/src/debugger/gui/CartE0Widget.cxx +++ b/src/debugger/gui/CartE0Widget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartE0Widget.hxx b/src/debugger/gui/CartE0Widget.hxx index 57b7b0818..dadaf94ee 100644 --- a/src/debugger/gui/CartE0Widget.hxx +++ b/src/debugger/gui/CartE0Widget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartE78KWidget.cxx b/src/debugger/gui/CartE78KWidget.cxx index 0a692bc9f..142d12cf3 100644 --- a/src/debugger/gui/CartE78KWidget.cxx +++ b/src/debugger/gui/CartE78KWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartE78KWidget.hxx b/src/debugger/gui/CartE78KWidget.hxx index c844bb30f..00ce6bf67 100644 --- a/src/debugger/gui/CartE78KWidget.hxx +++ b/src/debugger/gui/CartE78KWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartE7Widget.cxx b/src/debugger/gui/CartE7Widget.cxx index cf4228f55..c346ee087 100644 --- a/src/debugger/gui/CartE7Widget.cxx +++ b/src/debugger/gui/CartE7Widget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartE7Widget.hxx b/src/debugger/gui/CartE7Widget.hxx index c2d2b8f07..d2d1642ec 100644 --- a/src/debugger/gui/CartE7Widget.hxx +++ b/src/debugger/gui/CartE7Widget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartEFSCWidget.cxx b/src/debugger/gui/CartEFSCWidget.cxx index 75b5d9150..724ea0799 100644 --- a/src/debugger/gui/CartEFSCWidget.cxx +++ b/src/debugger/gui/CartEFSCWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartEFSCWidget.hxx b/src/debugger/gui/CartEFSCWidget.hxx index 24afa6a86..68200bcb6 100644 --- a/src/debugger/gui/CartEFSCWidget.hxx +++ b/src/debugger/gui/CartEFSCWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartEFWidget.cxx b/src/debugger/gui/CartEFWidget.cxx index c9ebd0cbc..3733c3e54 100644 --- a/src/debugger/gui/CartEFWidget.cxx +++ b/src/debugger/gui/CartEFWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartEFWidget.hxx b/src/debugger/gui/CartEFWidget.hxx index 1b883431f..fe9a184df 100644 --- a/src/debugger/gui/CartEFWidget.hxx +++ b/src/debugger/gui/CartEFWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartF0Widget.cxx b/src/debugger/gui/CartF0Widget.cxx index 56cfa2a82..7216d66d1 100644 --- a/src/debugger/gui/CartF0Widget.cxx +++ b/src/debugger/gui/CartF0Widget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartF0Widget.hxx b/src/debugger/gui/CartF0Widget.hxx index e2976f494..2e72ff17a 100644 --- a/src/debugger/gui/CartF0Widget.hxx +++ b/src/debugger/gui/CartF0Widget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartF4SCWidget.cxx b/src/debugger/gui/CartF4SCWidget.cxx index d557c0ab9..248edf9bb 100644 --- a/src/debugger/gui/CartF4SCWidget.cxx +++ b/src/debugger/gui/CartF4SCWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartF4SCWidget.hxx b/src/debugger/gui/CartF4SCWidget.hxx index 1a246bdc1..d34b2e9ce 100644 --- a/src/debugger/gui/CartF4SCWidget.hxx +++ b/src/debugger/gui/CartF4SCWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartF4Widget.cxx b/src/debugger/gui/CartF4Widget.cxx index 85e486870..b22291e61 100644 --- a/src/debugger/gui/CartF4Widget.cxx +++ b/src/debugger/gui/CartF4Widget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartF4Widget.hxx b/src/debugger/gui/CartF4Widget.hxx index f98f813bc..f88296eb1 100644 --- a/src/debugger/gui/CartF4Widget.hxx +++ b/src/debugger/gui/CartF4Widget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartF6SCWidget.cxx b/src/debugger/gui/CartF6SCWidget.cxx index 5f4b79621..d26a9ef2c 100644 --- a/src/debugger/gui/CartF6SCWidget.cxx +++ b/src/debugger/gui/CartF6SCWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartF6SCWidget.hxx b/src/debugger/gui/CartF6SCWidget.hxx index ee0beffd9..a4582e218 100644 --- a/src/debugger/gui/CartF6SCWidget.hxx +++ b/src/debugger/gui/CartF6SCWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartF6Widget.cxx b/src/debugger/gui/CartF6Widget.cxx index 17a96b745..1e43c25a2 100644 --- a/src/debugger/gui/CartF6Widget.cxx +++ b/src/debugger/gui/CartF6Widget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartF6Widget.hxx b/src/debugger/gui/CartF6Widget.hxx index 62ace787f..6d62f2101 100644 --- a/src/debugger/gui/CartF6Widget.hxx +++ b/src/debugger/gui/CartF6Widget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartF8SCWidget.cxx b/src/debugger/gui/CartF8SCWidget.cxx index e8137275c..3ed5f541d 100644 --- a/src/debugger/gui/CartF8SCWidget.cxx +++ b/src/debugger/gui/CartF8SCWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartF8SCWidget.hxx b/src/debugger/gui/CartF8SCWidget.hxx index c4e7cd19e..6b0835977 100644 --- a/src/debugger/gui/CartF8SCWidget.hxx +++ b/src/debugger/gui/CartF8SCWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartF8Widget.cxx b/src/debugger/gui/CartF8Widget.cxx index 226e26d9c..6f738a850 100644 --- a/src/debugger/gui/CartF8Widget.cxx +++ b/src/debugger/gui/CartF8Widget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartF8Widget.hxx b/src/debugger/gui/CartF8Widget.hxx index fb09ba669..3cc98b66d 100644 --- a/src/debugger/gui/CartF8Widget.hxx +++ b/src/debugger/gui/CartF8Widget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartFA2Widget.cxx b/src/debugger/gui/CartFA2Widget.cxx index 89aad9064..806375d25 100644 --- a/src/debugger/gui/CartFA2Widget.cxx +++ b/src/debugger/gui/CartFA2Widget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartFA2Widget.hxx b/src/debugger/gui/CartFA2Widget.hxx index 32627bd13..618aab65c 100644 --- a/src/debugger/gui/CartFA2Widget.hxx +++ b/src/debugger/gui/CartFA2Widget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartFAWidget.cxx b/src/debugger/gui/CartFAWidget.cxx index d7bc41a4c..fe9b37753 100644 --- a/src/debugger/gui/CartFAWidget.cxx +++ b/src/debugger/gui/CartFAWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartFAWidget.hxx b/src/debugger/gui/CartFAWidget.hxx index 9c66266dd..f108fb694 100644 --- a/src/debugger/gui/CartFAWidget.hxx +++ b/src/debugger/gui/CartFAWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartFEWidget.cxx b/src/debugger/gui/CartFEWidget.cxx index 6e414aeb4..ffe3b732a 100644 --- a/src/debugger/gui/CartFEWidget.cxx +++ b/src/debugger/gui/CartFEWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartFEWidget.hxx b/src/debugger/gui/CartFEWidget.hxx index 23a48b0b2..2d26e7665 100644 --- a/src/debugger/gui/CartFEWidget.hxx +++ b/src/debugger/gui/CartFEWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartMDMWidget.cxx b/src/debugger/gui/CartMDMWidget.cxx index a49cb4be7..ab2f723a4 100644 --- a/src/debugger/gui/CartMDMWidget.cxx +++ b/src/debugger/gui/CartMDMWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartMDMWidget.hxx b/src/debugger/gui/CartMDMWidget.hxx index e9a9476a5..2d43f10e5 100644 --- a/src/debugger/gui/CartMDMWidget.hxx +++ b/src/debugger/gui/CartMDMWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartMNetworkWidget.cxx b/src/debugger/gui/CartMNetworkWidget.cxx index 56a2fcb52..d1bebc552 100644 --- a/src/debugger/gui/CartMNetworkWidget.cxx +++ b/src/debugger/gui/CartMNetworkWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartMNetworkWidget.hxx b/src/debugger/gui/CartMNetworkWidget.hxx index 296c9d777..608bf15a7 100644 --- a/src/debugger/gui/CartMNetworkWidget.hxx +++ b/src/debugger/gui/CartMNetworkWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartRamWidget.cxx b/src/debugger/gui/CartRamWidget.cxx index 65b2e4f18..799fe1366 100644 --- a/src/debugger/gui/CartRamWidget.cxx +++ b/src/debugger/gui/CartRamWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartRamWidget.hxx b/src/debugger/gui/CartRamWidget.hxx index ebd68dc62..ef319ce30 100644 --- a/src/debugger/gui/CartRamWidget.hxx +++ b/src/debugger/gui/CartRamWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartSBWidget.cxx b/src/debugger/gui/CartSBWidget.cxx index 31b108df6..9d0b6f44b 100644 --- a/src/debugger/gui/CartSBWidget.cxx +++ b/src/debugger/gui/CartSBWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartSBWidget.hxx b/src/debugger/gui/CartSBWidget.hxx index a25a9ffcd..a5b637776 100644 --- a/src/debugger/gui/CartSBWidget.hxx +++ b/src/debugger/gui/CartSBWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartUAWidget.cxx b/src/debugger/gui/CartUAWidget.cxx index cfe8d015d..450a33e0a 100644 --- a/src/debugger/gui/CartUAWidget.cxx +++ b/src/debugger/gui/CartUAWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartUAWidget.hxx b/src/debugger/gui/CartUAWidget.hxx index 0428fe2fc..41fb23997 100644 --- a/src/debugger/gui/CartUAWidget.hxx +++ b/src/debugger/gui/CartUAWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartWDWidget.cxx b/src/debugger/gui/CartWDWidget.cxx index d245f2c60..ed0363d6d 100644 --- a/src/debugger/gui/CartWDWidget.cxx +++ b/src/debugger/gui/CartWDWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartWDWidget.hxx b/src/debugger/gui/CartWDWidget.hxx index a1071e4e1..daae7b306 100644 --- a/src/debugger/gui/CartWDWidget.hxx +++ b/src/debugger/gui/CartWDWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartX07Widget.cxx b/src/debugger/gui/CartX07Widget.cxx index 189fa878b..6516dd728 100644 --- a/src/debugger/gui/CartX07Widget.cxx +++ b/src/debugger/gui/CartX07Widget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CartX07Widget.hxx b/src/debugger/gui/CartX07Widget.hxx index 06064619c..357042d67 100644 --- a/src/debugger/gui/CartX07Widget.hxx +++ b/src/debugger/gui/CartX07Widget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/ControllerWidget.hxx b/src/debugger/gui/ControllerWidget.hxx index 82f529547..0ae2cd436 100644 --- a/src/debugger/gui/ControllerWidget.hxx +++ b/src/debugger/gui/ControllerWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CpuWidget.cxx b/src/debugger/gui/CpuWidget.cxx index b8284e6ec..14f7c1535 100644 --- a/src/debugger/gui/CpuWidget.cxx +++ b/src/debugger/gui/CpuWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/CpuWidget.hxx b/src/debugger/gui/CpuWidget.hxx index b11e620bd..03dd6c148 100644 --- a/src/debugger/gui/CpuWidget.hxx +++ b/src/debugger/gui/CpuWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/DataGridOpsWidget.cxx b/src/debugger/gui/DataGridOpsWidget.cxx index cde71b509..12865e804 100644 --- a/src/debugger/gui/DataGridOpsWidget.cxx +++ b/src/debugger/gui/DataGridOpsWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/DataGridOpsWidget.hxx b/src/debugger/gui/DataGridOpsWidget.hxx index 2c4608ae5..d42d9b3e8 100644 --- a/src/debugger/gui/DataGridOpsWidget.hxx +++ b/src/debugger/gui/DataGridOpsWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/DataGridWidget.cxx b/src/debugger/gui/DataGridWidget.cxx index 7b838da54..e2b39ecaa 100644 --- a/src/debugger/gui/DataGridWidget.cxx +++ b/src/debugger/gui/DataGridWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/DataGridWidget.hxx b/src/debugger/gui/DataGridWidget.hxx index 02e7b09af..4b931a6d2 100644 --- a/src/debugger/gui/DataGridWidget.hxx +++ b/src/debugger/gui/DataGridWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/DebuggerDialog.cxx b/src/debugger/gui/DebuggerDialog.cxx index f87e122d9..9c81fcfdf 100644 --- a/src/debugger/gui/DebuggerDialog.cxx +++ b/src/debugger/gui/DebuggerDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/DebuggerDialog.hxx b/src/debugger/gui/DebuggerDialog.hxx index 996f198dc..a010203de 100644 --- a/src/debugger/gui/DebuggerDialog.hxx +++ b/src/debugger/gui/DebuggerDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/DelayQueueWidget.cxx b/src/debugger/gui/DelayQueueWidget.cxx index eb842e024..5bf6b0b1b 100644 --- a/src/debugger/gui/DelayQueueWidget.cxx +++ b/src/debugger/gui/DelayQueueWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/DelayQueueWidget.hxx b/src/debugger/gui/DelayQueueWidget.hxx index 423f4db8e..f5be78de3 100644 --- a/src/debugger/gui/DelayQueueWidget.hxx +++ b/src/debugger/gui/DelayQueueWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/DrivingWidget.cxx b/src/debugger/gui/DrivingWidget.cxx index 6564a9f8d..6b924d7e8 100644 --- a/src/debugger/gui/DrivingWidget.cxx +++ b/src/debugger/gui/DrivingWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/DrivingWidget.hxx b/src/debugger/gui/DrivingWidget.hxx index f96a919f6..3fd38a092 100644 --- a/src/debugger/gui/DrivingWidget.hxx +++ b/src/debugger/gui/DrivingWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/FlashWidget.cxx b/src/debugger/gui/FlashWidget.cxx index d6d38cfa9..f2e980f5b 100644 --- a/src/debugger/gui/FlashWidget.cxx +++ b/src/debugger/gui/FlashWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/FlashWidget.hxx b/src/debugger/gui/FlashWidget.hxx index 2ada70854..ecb620ebb 100644 --- a/src/debugger/gui/FlashWidget.hxx +++ b/src/debugger/gui/FlashWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/GenesisWidget.cxx b/src/debugger/gui/GenesisWidget.cxx index cd0ebd8da..e49c360c0 100644 --- a/src/debugger/gui/GenesisWidget.cxx +++ b/src/debugger/gui/GenesisWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/GenesisWidget.hxx b/src/debugger/gui/GenesisWidget.hxx index 936a43404..004b66fbf 100644 --- a/src/debugger/gui/GenesisWidget.hxx +++ b/src/debugger/gui/GenesisWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/JoystickWidget.cxx b/src/debugger/gui/JoystickWidget.cxx index 3658b7386..ed0629eba 100644 --- a/src/debugger/gui/JoystickWidget.cxx +++ b/src/debugger/gui/JoystickWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/JoystickWidget.hxx b/src/debugger/gui/JoystickWidget.hxx index 1f8c5d5ae..357dbfd16 100644 --- a/src/debugger/gui/JoystickWidget.hxx +++ b/src/debugger/gui/JoystickWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/KeyboardWidget.cxx b/src/debugger/gui/KeyboardWidget.cxx index 346d97fae..e0ca3ba05 100644 --- a/src/debugger/gui/KeyboardWidget.cxx +++ b/src/debugger/gui/KeyboardWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/KeyboardWidget.hxx b/src/debugger/gui/KeyboardWidget.hxx index ce7ea2d55..c9dd3710d 100644 --- a/src/debugger/gui/KeyboardWidget.hxx +++ b/src/debugger/gui/KeyboardWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/NullControlWidget.hxx b/src/debugger/gui/NullControlWidget.hxx index e72722c4e..216de5f15 100644 --- a/src/debugger/gui/NullControlWidget.hxx +++ b/src/debugger/gui/NullControlWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/PaddleWidget.cxx b/src/debugger/gui/PaddleWidget.cxx index 745d08f64..81d596bca 100644 --- a/src/debugger/gui/PaddleWidget.cxx +++ b/src/debugger/gui/PaddleWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/PaddleWidget.hxx b/src/debugger/gui/PaddleWidget.hxx index 77090d7e8..3a1521e67 100644 --- a/src/debugger/gui/PaddleWidget.hxx +++ b/src/debugger/gui/PaddleWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/PointingDeviceWidget.cxx b/src/debugger/gui/PointingDeviceWidget.cxx index 04a839c8f..250b0f30e 100644 --- a/src/debugger/gui/PointingDeviceWidget.cxx +++ b/src/debugger/gui/PointingDeviceWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/PointingDeviceWidget.hxx b/src/debugger/gui/PointingDeviceWidget.hxx index 58cee51c7..845aa1732 100644 --- a/src/debugger/gui/PointingDeviceWidget.hxx +++ b/src/debugger/gui/PointingDeviceWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/PromptWidget.cxx b/src/debugger/gui/PromptWidget.cxx index 13b84d948..e723755ae 100644 --- a/src/debugger/gui/PromptWidget.cxx +++ b/src/debugger/gui/PromptWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/PromptWidget.hxx b/src/debugger/gui/PromptWidget.hxx index 2db6df543..ce614a4b5 100644 --- a/src/debugger/gui/PromptWidget.hxx +++ b/src/debugger/gui/PromptWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/RamWidget.cxx b/src/debugger/gui/RamWidget.cxx index 79b3188c6..5b1493471 100644 --- a/src/debugger/gui/RamWidget.cxx +++ b/src/debugger/gui/RamWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/RamWidget.hxx b/src/debugger/gui/RamWidget.hxx index 1be0baddf..3e5cdd50b 100644 --- a/src/debugger/gui/RamWidget.hxx +++ b/src/debugger/gui/RamWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/RiotRamWidget.cxx b/src/debugger/gui/RiotRamWidget.cxx index f6ca03ee7..6ad4174b4 100644 --- a/src/debugger/gui/RiotRamWidget.cxx +++ b/src/debugger/gui/RiotRamWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/RiotRamWidget.hxx b/src/debugger/gui/RiotRamWidget.hxx index dd28fff61..ea0a93e38 100644 --- a/src/debugger/gui/RiotRamWidget.hxx +++ b/src/debugger/gui/RiotRamWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/RiotWidget.cxx b/src/debugger/gui/RiotWidget.cxx index 0316eb78d..091abf935 100644 --- a/src/debugger/gui/RiotWidget.cxx +++ b/src/debugger/gui/RiotWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/RiotWidget.hxx b/src/debugger/gui/RiotWidget.hxx index efaf7f2cf..e5f03ed13 100644 --- a/src/debugger/gui/RiotWidget.hxx +++ b/src/debugger/gui/RiotWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/RomListSettings.cxx b/src/debugger/gui/RomListSettings.cxx index 88e9c06fe..3368be618 100644 --- a/src/debugger/gui/RomListSettings.cxx +++ b/src/debugger/gui/RomListSettings.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/RomListSettings.hxx b/src/debugger/gui/RomListSettings.hxx index 8d987e656..a84a746bd 100644 --- a/src/debugger/gui/RomListSettings.hxx +++ b/src/debugger/gui/RomListSettings.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/RomListWidget.cxx b/src/debugger/gui/RomListWidget.cxx index b3cb008cc..86108950e 100644 --- a/src/debugger/gui/RomListWidget.cxx +++ b/src/debugger/gui/RomListWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/RomListWidget.hxx b/src/debugger/gui/RomListWidget.hxx index f3da4e7d1..312d9dbfc 100644 --- a/src/debugger/gui/RomListWidget.hxx +++ b/src/debugger/gui/RomListWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/RomWidget.cxx b/src/debugger/gui/RomWidget.cxx index a1e3d50d8..8d5ed3195 100644 --- a/src/debugger/gui/RomWidget.cxx +++ b/src/debugger/gui/RomWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/RomWidget.hxx b/src/debugger/gui/RomWidget.hxx index 16d9bfbd1..aa0c46156 100644 --- a/src/debugger/gui/RomWidget.hxx +++ b/src/debugger/gui/RomWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/SaveKeyWidget.cxx b/src/debugger/gui/SaveKeyWidget.cxx index fec9fe87c..bd8131621 100644 --- a/src/debugger/gui/SaveKeyWidget.cxx +++ b/src/debugger/gui/SaveKeyWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/SaveKeyWidget.hxx b/src/debugger/gui/SaveKeyWidget.hxx index 7bdfaf830..1ce8ad2d4 100644 --- a/src/debugger/gui/SaveKeyWidget.hxx +++ b/src/debugger/gui/SaveKeyWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/TiaInfoWidget.cxx b/src/debugger/gui/TiaInfoWidget.cxx index 469b37bea..2614378a5 100644 --- a/src/debugger/gui/TiaInfoWidget.cxx +++ b/src/debugger/gui/TiaInfoWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/TiaInfoWidget.hxx b/src/debugger/gui/TiaInfoWidget.hxx index 30e1128e2..8d43253db 100644 --- a/src/debugger/gui/TiaInfoWidget.hxx +++ b/src/debugger/gui/TiaInfoWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/TiaOutputWidget.cxx b/src/debugger/gui/TiaOutputWidget.cxx index d292879ce..384fa8d04 100644 --- a/src/debugger/gui/TiaOutputWidget.cxx +++ b/src/debugger/gui/TiaOutputWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/TiaOutputWidget.hxx b/src/debugger/gui/TiaOutputWidget.hxx index eb2c5c15a..ee0d5a6d7 100644 --- a/src/debugger/gui/TiaOutputWidget.hxx +++ b/src/debugger/gui/TiaOutputWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/TiaWidget.cxx b/src/debugger/gui/TiaWidget.cxx index 627252bdd..17df7b5b4 100644 --- a/src/debugger/gui/TiaWidget.cxx +++ b/src/debugger/gui/TiaWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/TiaWidget.hxx b/src/debugger/gui/TiaWidget.hxx index 32b965f36..372f5f98f 100644 --- a/src/debugger/gui/TiaWidget.hxx +++ b/src/debugger/gui/TiaWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/TiaZoomWidget.cxx b/src/debugger/gui/TiaZoomWidget.cxx index 61fd8a7d9..a52df7a5d 100644 --- a/src/debugger/gui/TiaZoomWidget.cxx +++ b/src/debugger/gui/TiaZoomWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/TiaZoomWidget.hxx b/src/debugger/gui/TiaZoomWidget.hxx index e5b2af4de..890e4af64 100644 --- a/src/debugger/gui/TiaZoomWidget.hxx +++ b/src/debugger/gui/TiaZoomWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/ToggleBitWidget.cxx b/src/debugger/gui/ToggleBitWidget.cxx index 8a94cad44..05579f9d4 100644 --- a/src/debugger/gui/ToggleBitWidget.cxx +++ b/src/debugger/gui/ToggleBitWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/ToggleBitWidget.hxx b/src/debugger/gui/ToggleBitWidget.hxx index b44ddeffb..0712ff1ea 100644 --- a/src/debugger/gui/ToggleBitWidget.hxx +++ b/src/debugger/gui/ToggleBitWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/TogglePixelWidget.cxx b/src/debugger/gui/TogglePixelWidget.cxx index abd9e7e40..40845c4df 100644 --- a/src/debugger/gui/TogglePixelWidget.cxx +++ b/src/debugger/gui/TogglePixelWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/TogglePixelWidget.hxx b/src/debugger/gui/TogglePixelWidget.hxx index fdcf18c89..f224c560a 100644 --- a/src/debugger/gui/TogglePixelWidget.hxx +++ b/src/debugger/gui/TogglePixelWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/ToggleWidget.cxx b/src/debugger/gui/ToggleWidget.cxx index 6d01edbe9..aa05632b2 100644 --- a/src/debugger/gui/ToggleWidget.cxx +++ b/src/debugger/gui/ToggleWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/ToggleWidget.hxx b/src/debugger/gui/ToggleWidget.hxx index 21a84d632..dbdecb1f1 100644 --- a/src/debugger/gui/ToggleWidget.hxx +++ b/src/debugger/gui/ToggleWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/TrakBallWidget.cxx b/src/debugger/gui/TrakBallWidget.cxx index eb8701c61..aa85a52fa 100644 --- a/src/debugger/gui/TrakBallWidget.cxx +++ b/src/debugger/gui/TrakBallWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/debugger/gui/TrakBallWidget.hxx b/src/debugger/gui/TrakBallWidget.hxx index 2f22dc3fc..cb0847b48 100644 --- a/src/debugger/gui/TrakBallWidget.hxx +++ b/src/debugger/gui/TrakBallWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/AmigaMouse.hxx b/src/emucore/AmigaMouse.hxx index 85d7b1c9b..09615a216 100644 --- a/src/emucore/AmigaMouse.hxx +++ b/src/emucore/AmigaMouse.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/AtariMouse.hxx b/src/emucore/AtariMouse.hxx index 1102bbd8e..0ad879afc 100644 --- a/src/emucore/AtariMouse.hxx +++ b/src/emucore/AtariMouse.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/AtariVox.cxx b/src/emucore/AtariVox.cxx index 2898891f8..5cdf285cb 100644 --- a/src/emucore/AtariVox.cxx +++ b/src/emucore/AtariVox.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/AtariVox.hxx b/src/emucore/AtariVox.hxx index 16bf22cd7..cec2c72aa 100644 --- a/src/emucore/AtariVox.hxx +++ b/src/emucore/AtariVox.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/BSType.hxx b/src/emucore/BSType.hxx index 514485833..8600f92ea 100644 --- a/src/emucore/BSType.hxx +++ b/src/emucore/BSType.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Booster.cxx b/src/emucore/Booster.cxx index a49453651..2bd36d009 100644 --- a/src/emucore/Booster.cxx +++ b/src/emucore/Booster.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Booster.hxx b/src/emucore/Booster.hxx index bb5993720..a89c94fff 100644 --- a/src/emucore/Booster.hxx +++ b/src/emucore/Booster.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart.cxx b/src/emucore/Cart.cxx index 0abfe97ce..c7d8722b1 100644 --- a/src/emucore/Cart.cxx +++ b/src/emucore/Cart.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart.hxx b/src/emucore/Cart.hxx index 0cbce75cc..4d19ccb97 100644 --- a/src/emucore/Cart.hxx +++ b/src/emucore/Cart.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart0840.cxx b/src/emucore/Cart0840.cxx index 71aad05b7..f1b9b67d1 100644 --- a/src/emucore/Cart0840.cxx +++ b/src/emucore/Cart0840.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart0840.hxx b/src/emucore/Cart0840.hxx index e5c5d0cbb..d39939554 100644 --- a/src/emucore/Cart0840.hxx +++ b/src/emucore/Cart0840.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart2K.cxx b/src/emucore/Cart2K.cxx index 262ebfd2b..454e0b29d 100644 --- a/src/emucore/Cart2K.cxx +++ b/src/emucore/Cart2K.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart2K.hxx b/src/emucore/Cart2K.hxx index 61d1246fe..faf19282d 100644 --- a/src/emucore/Cart2K.hxx +++ b/src/emucore/Cart2K.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart3E.cxx b/src/emucore/Cart3E.cxx index 808d25dbf..d8850f699 100644 --- a/src/emucore/Cart3E.cxx +++ b/src/emucore/Cart3E.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart3E.hxx b/src/emucore/Cart3E.hxx index d5ae9e8f1..c7ab1cf24 100644 --- a/src/emucore/Cart3E.hxx +++ b/src/emucore/Cart3E.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart3EPlus.cxx b/src/emucore/Cart3EPlus.cxx index 359c84f84..8fce34ea5 100644 --- a/src/emucore/Cart3EPlus.cxx +++ b/src/emucore/Cart3EPlus.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart3EPlus.hxx b/src/emucore/Cart3EPlus.hxx index 9116f8620..1219e86ad 100644 --- a/src/emucore/Cart3EPlus.hxx +++ b/src/emucore/Cart3EPlus.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart3F.cxx b/src/emucore/Cart3F.cxx index 0c1cb618d..30dc15b22 100644 --- a/src/emucore/Cart3F.cxx +++ b/src/emucore/Cart3F.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart3F.hxx b/src/emucore/Cart3F.hxx index a6f114d8b..425d3ee82 100644 --- a/src/emucore/Cart3F.hxx +++ b/src/emucore/Cart3F.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart4A50.cxx b/src/emucore/Cart4A50.cxx index 0d21ea00e..246d03787 100644 --- a/src/emucore/Cart4A50.cxx +++ b/src/emucore/Cart4A50.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart4A50.hxx b/src/emucore/Cart4A50.hxx index d1e9ea394..5751304c8 100644 --- a/src/emucore/Cart4A50.hxx +++ b/src/emucore/Cart4A50.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart4K.cxx b/src/emucore/Cart4K.cxx index 56c9d4496..3fd758795 100644 --- a/src/emucore/Cart4K.cxx +++ b/src/emucore/Cart4K.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart4K.hxx b/src/emucore/Cart4K.hxx index bc9df42c8..c97f312b3 100644 --- a/src/emucore/Cart4K.hxx +++ b/src/emucore/Cart4K.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart4KSC.cxx b/src/emucore/Cart4KSC.cxx index 70faa0a48..a4cef71b2 100644 --- a/src/emucore/Cart4KSC.cxx +++ b/src/emucore/Cart4KSC.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Cart4KSC.hxx b/src/emucore/Cart4KSC.hxx index 1ad6ab560..d46a6eb78 100644 --- a/src/emucore/Cart4KSC.hxx +++ b/src/emucore/Cart4KSC.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartAR.cxx b/src/emucore/CartAR.cxx index 3b8e798cc..b4b28b525 100644 --- a/src/emucore/CartAR.cxx +++ b/src/emucore/CartAR.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartAR.hxx b/src/emucore/CartAR.hxx index 2e7bd1387..03b1b8975 100644 --- a/src/emucore/CartAR.hxx +++ b/src/emucore/CartAR.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartBF.cxx b/src/emucore/CartBF.cxx index a7e227793..f3d5a6e5a 100644 --- a/src/emucore/CartBF.cxx +++ b/src/emucore/CartBF.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartBF.hxx b/src/emucore/CartBF.hxx index 98a145b53..ffb4ac158 100644 --- a/src/emucore/CartBF.hxx +++ b/src/emucore/CartBF.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartBFSC.cxx b/src/emucore/CartBFSC.cxx index 5075c7461..ccc62f129 100644 --- a/src/emucore/CartBFSC.cxx +++ b/src/emucore/CartBFSC.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartBFSC.hxx b/src/emucore/CartBFSC.hxx index e5becb811..26375236b 100644 --- a/src/emucore/CartBFSC.hxx +++ b/src/emucore/CartBFSC.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartBUS.cxx b/src/emucore/CartBUS.cxx index 355be4da4..622caedcf 100644 --- a/src/emucore/CartBUS.cxx +++ b/src/emucore/CartBUS.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartBUS.hxx b/src/emucore/CartBUS.hxx index b20289534..b6841c994 100644 --- a/src/emucore/CartBUS.hxx +++ b/src/emucore/CartBUS.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartCDF.cxx b/src/emucore/CartCDF.cxx index 611cba081..81029e7af 100644 --- a/src/emucore/CartCDF.cxx +++ b/src/emucore/CartCDF.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartCDF.hxx b/src/emucore/CartCDF.hxx index 29c25cb76..ca37e5bc5 100644 --- a/src/emucore/CartCDF.hxx +++ b/src/emucore/CartCDF.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartCM.cxx b/src/emucore/CartCM.cxx index 0c8570566..605d54b45 100644 --- a/src/emucore/CartCM.cxx +++ b/src/emucore/CartCM.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartCM.hxx b/src/emucore/CartCM.hxx index 94aef6c3a..515741e9e 100644 --- a/src/emucore/CartCM.hxx +++ b/src/emucore/CartCM.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartCTY.cxx b/src/emucore/CartCTY.cxx index aa5d2c627..8ff319518 100644 --- a/src/emucore/CartCTY.cxx +++ b/src/emucore/CartCTY.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartCTY.hxx b/src/emucore/CartCTY.hxx index 67b95ee26..b991f06b5 100644 --- a/src/emucore/CartCTY.hxx +++ b/src/emucore/CartCTY.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartCTYTunes.hxx b/src/emucore/CartCTYTunes.hxx index b45ace9ce..427377026 100644 --- a/src/emucore/CartCTYTunes.hxx +++ b/src/emucore/CartCTYTunes.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartCV.cxx b/src/emucore/CartCV.cxx index 71f75c168..d6dc9ee0f 100644 --- a/src/emucore/CartCV.cxx +++ b/src/emucore/CartCV.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartCV.hxx b/src/emucore/CartCV.hxx index f523ede46..35a02fd59 100644 --- a/src/emucore/CartCV.hxx +++ b/src/emucore/CartCV.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartCVPlus.cxx b/src/emucore/CartCVPlus.cxx index f62467a7a..e96146bd1 100644 --- a/src/emucore/CartCVPlus.cxx +++ b/src/emucore/CartCVPlus.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartCVPlus.hxx b/src/emucore/CartCVPlus.hxx index bd513a862..3a9be8cdc 100644 --- a/src/emucore/CartCVPlus.hxx +++ b/src/emucore/CartCVPlus.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartDASH.cxx b/src/emucore/CartDASH.cxx index 993626ce5..9ea4876c4 100644 --- a/src/emucore/CartDASH.cxx +++ b/src/emucore/CartDASH.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartDASH.hxx b/src/emucore/CartDASH.hxx index 372258ea0..623d8afb9 100644 --- a/src/emucore/CartDASH.hxx +++ b/src/emucore/CartDASH.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartDF.cxx b/src/emucore/CartDF.cxx index 1091c9a02..92bde9087 100644 --- a/src/emucore/CartDF.cxx +++ b/src/emucore/CartDF.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartDF.hxx b/src/emucore/CartDF.hxx index 74a05958b..758c9f455 100644 --- a/src/emucore/CartDF.hxx +++ b/src/emucore/CartDF.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartDFSC.cxx b/src/emucore/CartDFSC.cxx index 36af35928..9a7c7f3ea 100644 --- a/src/emucore/CartDFSC.cxx +++ b/src/emucore/CartDFSC.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartDFSC.hxx b/src/emucore/CartDFSC.hxx index dc41285aa..b0e255aa6 100644 --- a/src/emucore/CartDFSC.hxx +++ b/src/emucore/CartDFSC.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartDPC.cxx b/src/emucore/CartDPC.cxx index 93d550bbf..8a7247170 100644 --- a/src/emucore/CartDPC.cxx +++ b/src/emucore/CartDPC.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartDPC.hxx b/src/emucore/CartDPC.hxx index e05e5544c..ec770ec95 100644 --- a/src/emucore/CartDPC.hxx +++ b/src/emucore/CartDPC.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartDPCPlus.cxx b/src/emucore/CartDPCPlus.cxx index 7825916de..b03b0bf1e 100644 --- a/src/emucore/CartDPCPlus.cxx +++ b/src/emucore/CartDPCPlus.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartDPCPlus.hxx b/src/emucore/CartDPCPlus.hxx index 7b9a9b745..0a9a5aec8 100644 --- a/src/emucore/CartDPCPlus.hxx +++ b/src/emucore/CartDPCPlus.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartDetector.cxx b/src/emucore/CartDetector.cxx index 84ac0e845..7541717a8 100644 --- a/src/emucore/CartDetector.cxx +++ b/src/emucore/CartDetector.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartDetector.hxx b/src/emucore/CartDetector.hxx index 871f70e62..b11097437 100644 --- a/src/emucore/CartDetector.hxx +++ b/src/emucore/CartDetector.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartE0.cxx b/src/emucore/CartE0.cxx index 2ad89901c..3fbb9b446 100644 --- a/src/emucore/CartE0.cxx +++ b/src/emucore/CartE0.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartE0.hxx b/src/emucore/CartE0.hxx index 12063254c..a8bac8f57 100644 --- a/src/emucore/CartE0.hxx +++ b/src/emucore/CartE0.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartE7.cxx b/src/emucore/CartE7.cxx index 5815b3222..7319f63cb 100644 --- a/src/emucore/CartE7.cxx +++ b/src/emucore/CartE7.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartE7.hxx b/src/emucore/CartE7.hxx index 8552076c3..e24c854a8 100644 --- a/src/emucore/CartE7.hxx +++ b/src/emucore/CartE7.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartE78K.cxx b/src/emucore/CartE78K.cxx index 3cfff2bfe..3b1d22cd7 100644 --- a/src/emucore/CartE78K.cxx +++ b/src/emucore/CartE78K.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartE78K.hxx b/src/emucore/CartE78K.hxx index 1a9abfbc3..e21c5df99 100644 --- a/src/emucore/CartE78K.hxx +++ b/src/emucore/CartE78K.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartEF.cxx b/src/emucore/CartEF.cxx index 3de99dab1..1f21efe09 100644 --- a/src/emucore/CartEF.cxx +++ b/src/emucore/CartEF.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartEF.hxx b/src/emucore/CartEF.hxx index 624b1b938..1cbb9ec8d 100644 --- a/src/emucore/CartEF.hxx +++ b/src/emucore/CartEF.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartEFSC.cxx b/src/emucore/CartEFSC.cxx index ed37b1038..f37c4b79f 100644 --- a/src/emucore/CartEFSC.cxx +++ b/src/emucore/CartEFSC.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartEFSC.hxx b/src/emucore/CartEFSC.hxx index 30e328b9e..41969760c 100644 --- a/src/emucore/CartEFSC.hxx +++ b/src/emucore/CartEFSC.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartF0.cxx b/src/emucore/CartF0.cxx index 63bcb099e..44c91216a 100644 --- a/src/emucore/CartF0.cxx +++ b/src/emucore/CartF0.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartF0.hxx b/src/emucore/CartF0.hxx index aa81d68f3..f95789a4f 100644 --- a/src/emucore/CartF0.hxx +++ b/src/emucore/CartF0.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartF4.cxx b/src/emucore/CartF4.cxx index fac297a58..9194363ec 100644 --- a/src/emucore/CartF4.cxx +++ b/src/emucore/CartF4.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartF4.hxx b/src/emucore/CartF4.hxx index 8372a0206..407253d5c 100644 --- a/src/emucore/CartF4.hxx +++ b/src/emucore/CartF4.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartF4SC.cxx b/src/emucore/CartF4SC.cxx index 23996770a..66d0abaf6 100644 --- a/src/emucore/CartF4SC.cxx +++ b/src/emucore/CartF4SC.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartF4SC.hxx b/src/emucore/CartF4SC.hxx index d26ecb49c..069d96df4 100644 --- a/src/emucore/CartF4SC.hxx +++ b/src/emucore/CartF4SC.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartF6.cxx b/src/emucore/CartF6.cxx index 201f7eab9..959870ef5 100644 --- a/src/emucore/CartF6.cxx +++ b/src/emucore/CartF6.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartF6.hxx b/src/emucore/CartF6.hxx index 15d9d1085..d75d94b93 100644 --- a/src/emucore/CartF6.hxx +++ b/src/emucore/CartF6.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartF6SC.cxx b/src/emucore/CartF6SC.cxx index f95208446..2befcc68a 100644 --- a/src/emucore/CartF6SC.cxx +++ b/src/emucore/CartF6SC.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartF6SC.hxx b/src/emucore/CartF6SC.hxx index 401d0ac79..72c36da37 100644 --- a/src/emucore/CartF6SC.hxx +++ b/src/emucore/CartF6SC.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartF8.cxx b/src/emucore/CartF8.cxx index 14ef0b820..b0bf77e9b 100644 --- a/src/emucore/CartF8.cxx +++ b/src/emucore/CartF8.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartF8.hxx b/src/emucore/CartF8.hxx index 8504f67b1..36414452c 100644 --- a/src/emucore/CartF8.hxx +++ b/src/emucore/CartF8.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartF8SC.cxx b/src/emucore/CartF8SC.cxx index 794051814..424b29f31 100644 --- a/src/emucore/CartF8SC.cxx +++ b/src/emucore/CartF8SC.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartF8SC.hxx b/src/emucore/CartF8SC.hxx index f19f22a79..adae00bd2 100644 --- a/src/emucore/CartF8SC.hxx +++ b/src/emucore/CartF8SC.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartFA.cxx b/src/emucore/CartFA.cxx index f1e57329f..3e1d52d1d 100644 --- a/src/emucore/CartFA.cxx +++ b/src/emucore/CartFA.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartFA.hxx b/src/emucore/CartFA.hxx index 0018afd0d..e9e2bd45e 100644 --- a/src/emucore/CartFA.hxx +++ b/src/emucore/CartFA.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartFA2.cxx b/src/emucore/CartFA2.cxx index 39da2de4f..950f04cbb 100644 --- a/src/emucore/CartFA2.cxx +++ b/src/emucore/CartFA2.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartFA2.hxx b/src/emucore/CartFA2.hxx index caf8c0f4c..f9e0fe081 100644 --- a/src/emucore/CartFA2.hxx +++ b/src/emucore/CartFA2.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartFE.cxx b/src/emucore/CartFE.cxx index 9c2069f81..43a82e424 100644 --- a/src/emucore/CartFE.cxx +++ b/src/emucore/CartFE.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartFE.hxx b/src/emucore/CartFE.hxx index d26988dc5..35890fb51 100644 --- a/src/emucore/CartFE.hxx +++ b/src/emucore/CartFE.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartMDM.cxx b/src/emucore/CartMDM.cxx index f911cc5c1..3431b1161 100644 --- a/src/emucore/CartMDM.cxx +++ b/src/emucore/CartMDM.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartMDM.hxx b/src/emucore/CartMDM.hxx index 1be154e60..cc8ee278c 100644 --- a/src/emucore/CartMDM.hxx +++ b/src/emucore/CartMDM.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartMNetwork.cxx b/src/emucore/CartMNetwork.cxx index 21a7c11e5..ffd2d2538 100644 --- a/src/emucore/CartMNetwork.cxx +++ b/src/emucore/CartMNetwork.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartMNetwork.hxx b/src/emucore/CartMNetwork.hxx index f1a5c2b4f..75eb903e0 100644 --- a/src/emucore/CartMNetwork.hxx +++ b/src/emucore/CartMNetwork.hxx @@ -9,7 +9,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartSB.cxx b/src/emucore/CartSB.cxx index 0093033d6..1ee0630a1 100644 --- a/src/emucore/CartSB.cxx +++ b/src/emucore/CartSB.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartSB.hxx b/src/emucore/CartSB.hxx index eb8324702..09cff9cd7 100644 --- a/src/emucore/CartSB.hxx +++ b/src/emucore/CartSB.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartUA.cxx b/src/emucore/CartUA.cxx index e2696ff97..166a65003 100644 --- a/src/emucore/CartUA.cxx +++ b/src/emucore/CartUA.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartUA.hxx b/src/emucore/CartUA.hxx index 64c5321d3..61200e736 100644 --- a/src/emucore/CartUA.hxx +++ b/src/emucore/CartUA.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartWD.cxx b/src/emucore/CartWD.cxx index 32ac33527..e2bfc6ac7 100644 --- a/src/emucore/CartWD.cxx +++ b/src/emucore/CartWD.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartWD.hxx b/src/emucore/CartWD.hxx index b40a9c287..8b70ac72f 100644 --- a/src/emucore/CartWD.hxx +++ b/src/emucore/CartWD.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartX07.cxx b/src/emucore/CartX07.cxx index 3716092e3..d01388dfc 100644 --- a/src/emucore/CartX07.cxx +++ b/src/emucore/CartX07.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CartX07.hxx b/src/emucore/CartX07.hxx index 7d6d63cbc..fe6f024c5 100644 --- a/src/emucore/CartX07.hxx +++ b/src/emucore/CartX07.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CompuMate.cxx b/src/emucore/CompuMate.cxx index 2bfa53044..b24d0556a 100644 --- a/src/emucore/CompuMate.cxx +++ b/src/emucore/CompuMate.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/CompuMate.hxx b/src/emucore/CompuMate.hxx index b65f24d0e..bebe4c38b 100644 --- a/src/emucore/CompuMate.hxx +++ b/src/emucore/CompuMate.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Console.cxx b/src/emucore/Console.cxx index 0f326c468..16f122693 100644 --- a/src/emucore/Console.cxx +++ b/src/emucore/Console.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Console.hxx b/src/emucore/Console.hxx index a40d30baa..8f527828d 100644 --- a/src/emucore/Console.hxx +++ b/src/emucore/Console.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Control.cxx b/src/emucore/Control.cxx index b2be42132..758a0b8ac 100644 --- a/src/emucore/Control.cxx +++ b/src/emucore/Control.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Control.hxx b/src/emucore/Control.hxx index 3436b0e71..c632c92d0 100644 --- a/src/emucore/Control.hxx +++ b/src/emucore/Control.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/DefProps.hxx b/src/emucore/DefProps.hxx index 44ca56070..7d4739700 100644 --- a/src/emucore/DefProps.hxx +++ b/src/emucore/DefProps.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Device.hxx b/src/emucore/Device.hxx index 68c4fe802..a6a717c16 100644 --- a/src/emucore/Device.hxx +++ b/src/emucore/Device.hxx @@ -8,7 +8,7 @@ // MM MM 66 66 55 55 00 00 22 // MM MM 6666 5555 0000 222222 // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Driving.cxx b/src/emucore/Driving.cxx index db9d9f40f..5ea913efa 100644 --- a/src/emucore/Driving.cxx +++ b/src/emucore/Driving.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Driving.hxx b/src/emucore/Driving.hxx index b7ba37d4c..1f905d16e 100644 --- a/src/emucore/Driving.hxx +++ b/src/emucore/Driving.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Event.hxx b/src/emucore/Event.hxx index 111c31220..1d4b20603 100644 --- a/src/emucore/Event.hxx +++ b/src/emucore/Event.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index 8e4d9c9cf..ff3f24bf7 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/EventHandler.hxx b/src/emucore/EventHandler.hxx index df7416a4c..0564c5d2e 100644 --- a/src/emucore/EventHandler.hxx +++ b/src/emucore/EventHandler.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/EventHandlerConstants.hxx b/src/emucore/EventHandlerConstants.hxx index fd0dee9b8..3282726da 100644 --- a/src/emucore/EventHandlerConstants.hxx +++ b/src/emucore/EventHandlerConstants.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/EventJoyHandler.cxx b/src/emucore/EventJoyHandler.cxx index 8f35f1d81..295c72b69 100644 --- a/src/emucore/EventJoyHandler.cxx +++ b/src/emucore/EventJoyHandler.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/FBSurface.cxx b/src/emucore/FBSurface.cxx index eeaf8405b..2b0362857 100644 --- a/src/emucore/FBSurface.cxx +++ b/src/emucore/FBSurface.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/FBSurface.hxx b/src/emucore/FBSurface.hxx index fbb31d6d7..87757078b 100644 --- a/src/emucore/FBSurface.hxx +++ b/src/emucore/FBSurface.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/FSNode.cxx b/src/emucore/FSNode.cxx index bf0cd7525..c118ece2e 100644 --- a/src/emucore/FSNode.cxx +++ b/src/emucore/FSNode.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/FSNode.hxx b/src/emucore/FSNode.hxx index 6c1ec0f2d..4291466ce 100644 --- a/src/emucore/FSNode.hxx +++ b/src/emucore/FSNode.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index 16390f83c..231656b9c 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/FrameBuffer.hxx b/src/emucore/FrameBuffer.hxx index 9dabf2c80..da1f984e4 100644 --- a/src/emucore/FrameBuffer.hxx +++ b/src/emucore/FrameBuffer.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/FrameBufferConstants.hxx b/src/emucore/FrameBufferConstants.hxx index 7f969e3fc..1af98a6ae 100644 --- a/src/emucore/FrameBufferConstants.hxx +++ b/src/emucore/FrameBufferConstants.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Genesis.cxx b/src/emucore/Genesis.cxx index 16547df3c..87201ae3f 100644 --- a/src/emucore/Genesis.cxx +++ b/src/emucore/Genesis.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Genesis.hxx b/src/emucore/Genesis.hxx index 1fe19c827..c94783358 100644 --- a/src/emucore/Genesis.hxx +++ b/src/emucore/Genesis.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Joystick.cxx b/src/emucore/Joystick.cxx index a4c305c04..ccfaa1faf 100644 --- a/src/emucore/Joystick.cxx +++ b/src/emucore/Joystick.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Joystick.hxx b/src/emucore/Joystick.hxx index be2419a7b..228ed9109 100644 --- a/src/emucore/Joystick.hxx +++ b/src/emucore/Joystick.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Keyboard.cxx b/src/emucore/Keyboard.cxx index 9c0108dab..92bc70c20 100644 --- a/src/emucore/Keyboard.cxx +++ b/src/emucore/Keyboard.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Keyboard.hxx b/src/emucore/Keyboard.hxx index dc1829f7c..aa5ca23f7 100644 --- a/src/emucore/Keyboard.hxx +++ b/src/emucore/Keyboard.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/KidVid.cxx b/src/emucore/KidVid.cxx index 80d1a87d4..fc8b152ec 100644 --- a/src/emucore/KidVid.cxx +++ b/src/emucore/KidVid.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/KidVid.hxx b/src/emucore/KidVid.hxx index 5cda891ca..1647c30a3 100644 --- a/src/emucore/KidVid.hxx +++ b/src/emucore/KidVid.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/M6502.cxx b/src/emucore/M6502.cxx index bcdeddde7..43159e15e 100644 --- a/src/emucore/M6502.cxx +++ b/src/emucore/M6502.cxx @@ -8,7 +8,7 @@ // MM MM 66 66 55 55 00 00 22 // MM MM 6666 5555 0000 222222 // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/M6502.hxx b/src/emucore/M6502.hxx index 12fb55357..440265e01 100644 --- a/src/emucore/M6502.hxx +++ b/src/emucore/M6502.hxx @@ -8,7 +8,7 @@ // MM MM 66 66 55 55 00 00 22 // MM MM 6666 5555 0000 222222 // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/M6502.ins b/src/emucore/M6502.ins index 53256c733..c9e99e456 100644 --- a/src/emucore/M6502.ins +++ b/src/emucore/M6502.ins @@ -8,7 +8,7 @@ // MM MM 66 66 55 55 00 00 22 // MM MM 6666 5555 0000 222222 // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/M6502.m4 b/src/emucore/M6502.m4 index 85776530e..8b6f7d98a 100644 --- a/src/emucore/M6502.m4 +++ b/src/emucore/M6502.m4 @@ -8,7 +8,7 @@ // MM MM 66 66 55 55 00 00 22 // MM MM 6666 5555 0000 222222 // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/M6532.cxx b/src/emucore/M6532.cxx index 61167ba5f..f455572cd 100644 --- a/src/emucore/M6532.cxx +++ b/src/emucore/M6532.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/M6532.hxx b/src/emucore/M6532.hxx index e235fb606..1d031150a 100644 --- a/src/emucore/M6532.hxx +++ b/src/emucore/M6532.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/MD5.cxx b/src/emucore/MD5.cxx index e9fc55cfb..600f42ed0 100644 --- a/src/emucore/MD5.cxx +++ b/src/emucore/MD5.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // This file is derived from the RSA Data Security, Inc. MD5 Message-Digest diff --git a/src/emucore/MD5.hxx b/src/emucore/MD5.hxx index 1fece5782..7f05805e6 100644 --- a/src/emucore/MD5.hxx +++ b/src/emucore/MD5.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/MT24LC256.cxx b/src/emucore/MT24LC256.cxx index b25122aab..62d7e4446 100644 --- a/src/emucore/MT24LC256.cxx +++ b/src/emucore/MT24LC256.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/MT24LC256.hxx b/src/emucore/MT24LC256.hxx index e4600bbec..8640bafb0 100644 --- a/src/emucore/MT24LC256.hxx +++ b/src/emucore/MT24LC256.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/MindLink.cxx b/src/emucore/MindLink.cxx index 19352a563..f2b13d9af 100644 --- a/src/emucore/MindLink.cxx +++ b/src/emucore/MindLink.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/MindLink.hxx b/src/emucore/MindLink.hxx index 40578a0e9..f0697ee15 100644 --- a/src/emucore/MindLink.hxx +++ b/src/emucore/MindLink.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/NullDev.hxx b/src/emucore/NullDev.hxx index 358abd3c8..dba178a8b 100644 --- a/src/emucore/NullDev.hxx +++ b/src/emucore/NullDev.hxx @@ -8,7 +8,7 @@ // MM MM 66 66 55 55 00 00 22 // MM MM 6666 5555 0000 222222 // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/OSystem.cxx b/src/emucore/OSystem.cxx index f473dd5af..4c5110a1b 100644 --- a/src/emucore/OSystem.cxx +++ b/src/emucore/OSystem.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/OSystem.hxx b/src/emucore/OSystem.hxx index c42994df1..24d690e59 100644 --- a/src/emucore/OSystem.hxx +++ b/src/emucore/OSystem.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Paddles.cxx b/src/emucore/Paddles.cxx index 74235bdf8..ed90b3a1b 100644 --- a/src/emucore/Paddles.cxx +++ b/src/emucore/Paddles.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Paddles.hxx b/src/emucore/Paddles.hxx index a379875b9..3e198f294 100644 --- a/src/emucore/Paddles.hxx +++ b/src/emucore/Paddles.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/PointingDevice.cxx b/src/emucore/PointingDevice.cxx index b103847b6..9582e220a 100644 --- a/src/emucore/PointingDevice.cxx +++ b/src/emucore/PointingDevice.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/PointingDevice.hxx b/src/emucore/PointingDevice.hxx index bef61baea..8c6b4f16b 100644 --- a/src/emucore/PointingDevice.hxx +++ b/src/emucore/PointingDevice.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Props.cxx b/src/emucore/Props.cxx index a9bba8039..3e412a10d 100644 --- a/src/emucore/Props.cxx +++ b/src/emucore/Props.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Props.hxx b/src/emucore/Props.hxx index a1b1ab108..678e1c7e0 100644 --- a/src/emucore/Props.hxx +++ b/src/emucore/Props.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/PropsSet.cxx b/src/emucore/PropsSet.cxx index 63367e594..1bb239fa4 100644 --- a/src/emucore/PropsSet.cxx +++ b/src/emucore/PropsSet.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/PropsSet.hxx b/src/emucore/PropsSet.hxx index 5d131ddbc..10f7e99ad 100644 --- a/src/emucore/PropsSet.hxx +++ b/src/emucore/PropsSet.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Random.hxx b/src/emucore/Random.hxx index 04c87ebf4..3d7f910b1 100644 --- a/src/emucore/Random.hxx +++ b/src/emucore/Random.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/SaveKey.cxx b/src/emucore/SaveKey.cxx index 35edd828f..0e0acde8e 100644 --- a/src/emucore/SaveKey.cxx +++ b/src/emucore/SaveKey.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/SaveKey.hxx b/src/emucore/SaveKey.hxx index 317bec10f..ab98c8029 100644 --- a/src/emucore/SaveKey.hxx +++ b/src/emucore/SaveKey.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/SerialPort.hxx b/src/emucore/SerialPort.hxx index 8bc489d52..3456f6d65 100644 --- a/src/emucore/SerialPort.hxx +++ b/src/emucore/SerialPort.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Serializable.hxx b/src/emucore/Serializable.hxx index e0a4f1016..702506065 100644 --- a/src/emucore/Serializable.hxx +++ b/src/emucore/Serializable.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Serializer.cxx b/src/emucore/Serializer.cxx index c191b99e4..ea068f32f 100644 --- a/src/emucore/Serializer.cxx +++ b/src/emucore/Serializer.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Serializer.hxx b/src/emucore/Serializer.hxx index 4c3b380fa..c92cdabaf 100644 --- a/src/emucore/Serializer.hxx +++ b/src/emucore/Serializer.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Settings.cxx b/src/emucore/Settings.cxx index 088cfadcf..18d079f42 100644 --- a/src/emucore/Settings.cxx +++ b/src/emucore/Settings.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Settings.hxx b/src/emucore/Settings.hxx index 0020512fc..399d7fa73 100644 --- a/src/emucore/Settings.hxx +++ b/src/emucore/Settings.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Sound.hxx b/src/emucore/Sound.hxx index a46afe114..ef56d642e 100644 --- a/src/emucore/Sound.hxx +++ b/src/emucore/Sound.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Switches.cxx b/src/emucore/Switches.cxx index 349891132..e62663af7 100644 --- a/src/emucore/Switches.cxx +++ b/src/emucore/Switches.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Switches.hxx b/src/emucore/Switches.hxx index 50e77e8b5..92ae391d7 100644 --- a/src/emucore/Switches.hxx +++ b/src/emucore/Switches.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/System.cxx b/src/emucore/System.cxx index 820d28c31..5bd3669a1 100644 --- a/src/emucore/System.cxx +++ b/src/emucore/System.cxx @@ -8,7 +8,7 @@ // MM MM 66 66 55 55 00 00 22 // MM MM 6666 5555 0000 222222 // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/System.hxx b/src/emucore/System.hxx index ddde896b3..b9dd5ee3b 100644 --- a/src/emucore/System.hxx +++ b/src/emucore/System.hxx @@ -8,7 +8,7 @@ // MM MM 66 66 55 55 00 00 22 // MM MM 6666 5555 0000 222222 // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/TIASnd.cxx b/src/emucore/TIASnd.cxx index 3378a31e9..23be53a4c 100644 --- a/src/emucore/TIASnd.cxx +++ b/src/emucore/TIASnd.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/TIASnd.hxx b/src/emucore/TIASnd.hxx index 9a42d5ea2..51bb198d4 100644 --- a/src/emucore/TIASnd.hxx +++ b/src/emucore/TIASnd.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/TIASurface.cxx b/src/emucore/TIASurface.cxx index 4d5de4f24..c16d525b4 100644 --- a/src/emucore/TIASurface.cxx +++ b/src/emucore/TIASurface.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/TIASurface.hxx b/src/emucore/TIASurface.hxx index 8390fc52d..258462508 100644 --- a/src/emucore/TIASurface.hxx +++ b/src/emucore/TIASurface.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Thumbulator.cxx b/src/emucore/Thumbulator.cxx index 3a175f5c9..0e81d6015 100644 --- a/src/emucore/Thumbulator.cxx +++ b/src/emucore/Thumbulator.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/Thumbulator.hxx b/src/emucore/Thumbulator.hxx index 6b9c4173d..939052e92 100644 --- a/src/emucore/Thumbulator.hxx +++ b/src/emucore/Thumbulator.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/TrakBall.hxx b/src/emucore/TrakBall.hxx index bbdba3d2f..038b9f2c3 100644 --- a/src/emucore/TrakBall.hxx +++ b/src/emucore/TrakBall.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/Background.cxx b/src/emucore/tia/Background.cxx index 47f9b3166..b432a2ef6 100644 --- a/src/emucore/tia/Background.cxx +++ b/src/emucore/tia/Background.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/Background.hxx b/src/emucore/tia/Background.hxx index 455e7cd8b..23a6da0a1 100644 --- a/src/emucore/tia/Background.hxx +++ b/src/emucore/tia/Background.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/Ball.cxx b/src/emucore/tia/Ball.cxx index 1552df84a..c44301064 100644 --- a/src/emucore/tia/Ball.cxx +++ b/src/emucore/tia/Ball.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/Ball.hxx b/src/emucore/tia/Ball.hxx index 9602334b4..7ee6bdb24 100644 --- a/src/emucore/tia/Ball.hxx +++ b/src/emucore/tia/Ball.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/DelayQueue.hxx b/src/emucore/tia/DelayQueue.hxx index 2a42812b6..6d3453e70 100644 --- a/src/emucore/tia/DelayQueue.hxx +++ b/src/emucore/tia/DelayQueue.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/DelayQueueIterator.hxx b/src/emucore/tia/DelayQueueIterator.hxx index d1948d362..c44dbeffd 100644 --- a/src/emucore/tia/DelayQueueIterator.hxx +++ b/src/emucore/tia/DelayQueueIterator.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/DelayQueueIteratorImpl.hxx b/src/emucore/tia/DelayQueueIteratorImpl.hxx index 819ffe132..4f4ab163c 100644 --- a/src/emucore/tia/DelayQueueIteratorImpl.hxx +++ b/src/emucore/tia/DelayQueueIteratorImpl.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/DelayQueueMember.hxx b/src/emucore/tia/DelayQueueMember.hxx index ea560f5e1..cc0e9a5fe 100644 --- a/src/emucore/tia/DelayQueueMember.hxx +++ b/src/emucore/tia/DelayQueueMember.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/DrawCounterDecodes.cxx b/src/emucore/tia/DrawCounterDecodes.cxx index e4a473866..40a86b870 100644 --- a/src/emucore/tia/DrawCounterDecodes.cxx +++ b/src/emucore/tia/DrawCounterDecodes.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/DrawCounterDecodes.hxx b/src/emucore/tia/DrawCounterDecodes.hxx index f8d55ea14..9629040b5 100644 --- a/src/emucore/tia/DrawCounterDecodes.hxx +++ b/src/emucore/tia/DrawCounterDecodes.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/FrameLayout.hxx b/src/emucore/tia/FrameLayout.hxx index 49c3cffc6..f4475626e 100644 --- a/src/emucore/tia/FrameLayout.hxx +++ b/src/emucore/tia/FrameLayout.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/LatchedInput.cxx b/src/emucore/tia/LatchedInput.cxx index c66acc764..b423e39c9 100644 --- a/src/emucore/tia/LatchedInput.cxx +++ b/src/emucore/tia/LatchedInput.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/LatchedInput.hxx b/src/emucore/tia/LatchedInput.hxx index 211b68183..3bd8ee01d 100644 --- a/src/emucore/tia/LatchedInput.hxx +++ b/src/emucore/tia/LatchedInput.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/Missile.cxx b/src/emucore/tia/Missile.cxx index b74a441d7..9ad2a49d2 100644 --- a/src/emucore/tia/Missile.cxx +++ b/src/emucore/tia/Missile.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/Missile.hxx b/src/emucore/tia/Missile.hxx index 9d3433659..c89b9f40a 100644 --- a/src/emucore/tia/Missile.hxx +++ b/src/emucore/tia/Missile.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/PaddleReader.cxx b/src/emucore/tia/PaddleReader.cxx index 461bd6f77..cdb6c9437 100644 --- a/src/emucore/tia/PaddleReader.cxx +++ b/src/emucore/tia/PaddleReader.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/PaddleReader.hxx b/src/emucore/tia/PaddleReader.hxx index 1c7a2013d..77ee3bdf3 100644 --- a/src/emucore/tia/PaddleReader.hxx +++ b/src/emucore/tia/PaddleReader.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/Player.cxx b/src/emucore/tia/Player.cxx index c587ef218..480707f1f 100644 --- a/src/emucore/tia/Player.cxx +++ b/src/emucore/tia/Player.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/Player.hxx b/src/emucore/tia/Player.hxx index 033a40dc3..60b025e31 100644 --- a/src/emucore/tia/Player.hxx +++ b/src/emucore/tia/Player.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/Playfield.cxx b/src/emucore/tia/Playfield.cxx index 48c83e7a7..3ec2d730f 100644 --- a/src/emucore/tia/Playfield.cxx +++ b/src/emucore/tia/Playfield.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/Playfield.hxx b/src/emucore/tia/Playfield.hxx index 5c25b79d0..7dde0ad0c 100644 --- a/src/emucore/tia/Playfield.hxx +++ b/src/emucore/tia/Playfield.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/TIA.cxx b/src/emucore/tia/TIA.cxx index 8562949e9..9a07fa4c9 100644 --- a/src/emucore/tia/TIA.cxx +++ b/src/emucore/tia/TIA.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/TIA.hxx b/src/emucore/tia/TIA.hxx index 21f3c5b21..0fb54caee 100644 --- a/src/emucore/tia/TIA.hxx +++ b/src/emucore/tia/TIA.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/TIAConstants.hxx b/src/emucore/tia/TIAConstants.hxx index e65a44af0..fa98c6b54 100644 --- a/src/emucore/tia/TIAConstants.hxx +++ b/src/emucore/tia/TIAConstants.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/frame-manager/AbstractFrameManager.cxx b/src/emucore/tia/frame-manager/AbstractFrameManager.cxx index 5d796f7dc..c17952c7d 100644 --- a/src/emucore/tia/frame-manager/AbstractFrameManager.cxx +++ b/src/emucore/tia/frame-manager/AbstractFrameManager.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/frame-manager/AbstractFrameManager.hxx b/src/emucore/tia/frame-manager/AbstractFrameManager.hxx index 9e3b17232..45aef3e38 100644 --- a/src/emucore/tia/frame-manager/AbstractFrameManager.hxx +++ b/src/emucore/tia/frame-manager/AbstractFrameManager.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/frame-manager/FrameLayoutDetector.cxx b/src/emucore/tia/frame-manager/FrameLayoutDetector.cxx index fc7a92651..8293f179b 100644 --- a/src/emucore/tia/frame-manager/FrameLayoutDetector.cxx +++ b/src/emucore/tia/frame-manager/FrameLayoutDetector.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/frame-manager/FrameLayoutDetector.hxx b/src/emucore/tia/frame-manager/FrameLayoutDetector.hxx index e3117ffd8..42c0ca030 100644 --- a/src/emucore/tia/frame-manager/FrameLayoutDetector.hxx +++ b/src/emucore/tia/frame-manager/FrameLayoutDetector.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/frame-manager/FrameManager.cxx b/src/emucore/tia/frame-manager/FrameManager.cxx index 8c67a2a7a..b74a23a10 100644 --- a/src/emucore/tia/frame-manager/FrameManager.cxx +++ b/src/emucore/tia/frame-manager/FrameManager.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/frame-manager/FrameManager.hxx b/src/emucore/tia/frame-manager/FrameManager.hxx index 7df958460..ee9297824 100644 --- a/src/emucore/tia/frame-manager/FrameManager.hxx +++ b/src/emucore/tia/frame-manager/FrameManager.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/frame-manager/JitterEmulation.cxx b/src/emucore/tia/frame-manager/JitterEmulation.cxx index c815b0701..18b53951e 100644 --- a/src/emucore/tia/frame-manager/JitterEmulation.cxx +++ b/src/emucore/tia/frame-manager/JitterEmulation.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/frame-manager/JitterEmulation.hxx b/src/emucore/tia/frame-manager/JitterEmulation.hxx index 5c0f47ea3..bd357a764 100644 --- a/src/emucore/tia/frame-manager/JitterEmulation.hxx +++ b/src/emucore/tia/frame-manager/JitterEmulation.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/frame-manager/YStartDetector.cxx b/src/emucore/tia/frame-manager/YStartDetector.cxx index cb5d3cce3..577eae9e3 100644 --- a/src/emucore/tia/frame-manager/YStartDetector.cxx +++ b/src/emucore/tia/frame-manager/YStartDetector.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/emucore/tia/frame-manager/YStartDetector.hxx b/src/emucore/tia/frame-manager/YStartDetector.hxx index 1fc5d596c..3d6003814 100644 --- a/src/emucore/tia/frame-manager/YStartDetector.hxx +++ b/src/emucore/tia/frame-manager/YStartDetector.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/AboutDialog.cxx b/src/gui/AboutDialog.cxx index 9bc1c0870..d574b40ef 100644 --- a/src/gui/AboutDialog.cxx +++ b/src/gui/AboutDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of @@ -104,7 +104,7 @@ void AboutDialog::updateStrings(int page, int lines, string& title) ADD_ATEXT(string("\\C\\c2Features: ") + instance().features()); ADD_ATEXT(string("\\C\\c2") + instance().buildInfo()); ADD_ALINE(); - ADD_ATEXT("\\CCopyright (C) 1995-2017 The Stella Team"); + ADD_ATEXT("\\CCopyright (C) 1995-2018 The Stella Team"); ADD_ATEXT("\\C(https://stella-emu.github.io)"); ADD_ALINE(); ADD_ATEXT("\\CStella is now DonationWare!"); diff --git a/src/gui/AboutDialog.hxx b/src/gui/AboutDialog.hxx index 6a464efcd..12f4e98d0 100644 --- a/src/gui/AboutDialog.hxx +++ b/src/gui/AboutDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/AudioDialog.cxx b/src/gui/AudioDialog.cxx index 3480ff041..6873f41eb 100644 --- a/src/gui/AudioDialog.cxx +++ b/src/gui/AudioDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/AudioDialog.hxx b/src/gui/AudioDialog.hxx index a3034b52a..617399123 100644 --- a/src/gui/AudioDialog.hxx +++ b/src/gui/AudioDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/BrowserDialog.cxx b/src/gui/BrowserDialog.cxx index 21b0e78f1..9d31527a8 100644 --- a/src/gui/BrowserDialog.cxx +++ b/src/gui/BrowserDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/BrowserDialog.hxx b/src/gui/BrowserDialog.hxx index a0fee851c..80597c7d3 100644 --- a/src/gui/BrowserDialog.hxx +++ b/src/gui/BrowserDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/CheckListWidget.cxx b/src/gui/CheckListWidget.cxx index 5c18c2b6c..10950a09d 100644 --- a/src/gui/CheckListWidget.cxx +++ b/src/gui/CheckListWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/CheckListWidget.hxx b/src/gui/CheckListWidget.hxx index e1c3121b9..3626a954b 100644 --- a/src/gui/CheckListWidget.hxx +++ b/src/gui/CheckListWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ColorWidget.cxx b/src/gui/ColorWidget.cxx index e36bc6268..27b632b03 100644 --- a/src/gui/ColorWidget.cxx +++ b/src/gui/ColorWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ColorWidget.hxx b/src/gui/ColorWidget.hxx index a91137056..97bffd9a4 100644 --- a/src/gui/ColorWidget.hxx +++ b/src/gui/ColorWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ComboDialog.cxx b/src/gui/ComboDialog.cxx index d8672372c..377bab487 100644 --- a/src/gui/ComboDialog.cxx +++ b/src/gui/ComboDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ComboDialog.hxx b/src/gui/ComboDialog.hxx index 635f2059b..8585e9399 100644 --- a/src/gui/ComboDialog.hxx +++ b/src/gui/ComboDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/Command.hxx b/src/gui/Command.hxx index 9b34117c9..02bf9c34f 100644 --- a/src/gui/Command.hxx +++ b/src/gui/Command.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/CommandDialog.cxx b/src/gui/CommandDialog.cxx index 0df07a596..84e9ee698 100644 --- a/src/gui/CommandDialog.cxx +++ b/src/gui/CommandDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/CommandDialog.hxx b/src/gui/CommandDialog.hxx index 0df283505..7bcba2286 100644 --- a/src/gui/CommandDialog.hxx +++ b/src/gui/CommandDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/CommandMenu.cxx b/src/gui/CommandMenu.cxx index 06c0ef357..edd831e0e 100644 --- a/src/gui/CommandMenu.cxx +++ b/src/gui/CommandMenu.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/CommandMenu.hxx b/src/gui/CommandMenu.hxx index e8baac163..e9ea26b60 100644 --- a/src/gui/CommandMenu.hxx +++ b/src/gui/CommandMenu.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ConfigPathDialog.cxx b/src/gui/ConfigPathDialog.cxx index b53a13b07..6c27a8525 100644 --- a/src/gui/ConfigPathDialog.cxx +++ b/src/gui/ConfigPathDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ConfigPathDialog.hxx b/src/gui/ConfigPathDialog.hxx index 5ec57b17a..def491369 100644 --- a/src/gui/ConfigPathDialog.hxx +++ b/src/gui/ConfigPathDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ConsoleBFont.hxx b/src/gui/ConsoleBFont.hxx index 752341cef..b4ea93caa 100644 --- a/src/gui/ConsoleBFont.hxx +++ b/src/gui/ConsoleBFont.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ConsoleFont.hxx b/src/gui/ConsoleFont.hxx index eb72fb03b..b7c178617 100644 --- a/src/gui/ConsoleFont.hxx +++ b/src/gui/ConsoleFont.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ConsoleMediumBFont.hxx b/src/gui/ConsoleMediumBFont.hxx index 702a97a2d..39f5a73e5 100644 --- a/src/gui/ConsoleMediumBFont.hxx +++ b/src/gui/ConsoleMediumBFont.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ConsoleMediumFont.hxx b/src/gui/ConsoleMediumFont.hxx index a2877e10f..2c8ace9a7 100644 --- a/src/gui/ConsoleMediumFont.hxx +++ b/src/gui/ConsoleMediumFont.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ContextMenu.cxx b/src/gui/ContextMenu.cxx index 98ba39e38..5880db8ba 100644 --- a/src/gui/ContextMenu.cxx +++ b/src/gui/ContextMenu.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ContextMenu.hxx b/src/gui/ContextMenu.hxx index bdf3ba25c..4ce617a34 100644 --- a/src/gui/ContextMenu.hxx +++ b/src/gui/ContextMenu.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index cae1b9f8b..b68010369 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/DeveloperDialog.hxx b/src/gui/DeveloperDialog.hxx index 6cb298b36..113b34b2b 100644 --- a/src/gui/DeveloperDialog.hxx +++ b/src/gui/DeveloperDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/Dialog.cxx b/src/gui/Dialog.cxx index 920d75ac9..938070873 100644 --- a/src/gui/Dialog.cxx +++ b/src/gui/Dialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/Dialog.hxx b/src/gui/Dialog.hxx index ca0638b4f..1a1eb07dd 100644 --- a/src/gui/Dialog.hxx +++ b/src/gui/Dialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/DialogContainer.cxx b/src/gui/DialogContainer.cxx index 0c962b6ce..bbf17865f 100644 --- a/src/gui/DialogContainer.cxx +++ b/src/gui/DialogContainer.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/DialogContainer.hxx b/src/gui/DialogContainer.hxx index e9e4e593c..1e43e5c54 100644 --- a/src/gui/DialogContainer.hxx +++ b/src/gui/DialogContainer.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/EditTextWidget.cxx b/src/gui/EditTextWidget.cxx index bd7e8c7a0..e23f37cbb 100644 --- a/src/gui/EditTextWidget.cxx +++ b/src/gui/EditTextWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/EditTextWidget.hxx b/src/gui/EditTextWidget.hxx index c7edd9b5b..0e2548f3a 100644 --- a/src/gui/EditTextWidget.hxx +++ b/src/gui/EditTextWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/EditableWidget.cxx b/src/gui/EditableWidget.cxx index 612c72144..24790dfef 100644 --- a/src/gui/EditableWidget.cxx +++ b/src/gui/EditableWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/EditableWidget.hxx b/src/gui/EditableWidget.hxx index a25de9bb6..83afd3a65 100644 --- a/src/gui/EditableWidget.hxx +++ b/src/gui/EditableWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/EventMappingWidget.cxx b/src/gui/EventMappingWidget.cxx index 2f5c58f37..1c83a055b 100644 --- a/src/gui/EventMappingWidget.cxx +++ b/src/gui/EventMappingWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/EventMappingWidget.hxx b/src/gui/EventMappingWidget.hxx index 3f53cc6d4..7ab299bf2 100644 --- a/src/gui/EventMappingWidget.hxx +++ b/src/gui/EventMappingWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/FileListWidget.cxx b/src/gui/FileListWidget.cxx index 533e5f054..91ef46b1c 100644 --- a/src/gui/FileListWidget.cxx +++ b/src/gui/FileListWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/FileListWidget.hxx b/src/gui/FileListWidget.hxx index 9f1790924..5d750229a 100644 --- a/src/gui/FileListWidget.hxx +++ b/src/gui/FileListWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/Font.cxx b/src/gui/Font.cxx index a10862cdd..0593ead3e 100644 --- a/src/gui/Font.cxx +++ b/src/gui/Font.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/Font.hxx b/src/gui/Font.hxx index e4ea5c9d2..c253774c0 100644 --- a/src/gui/Font.hxx +++ b/src/gui/Font.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/GameInfoDialog.cxx b/src/gui/GameInfoDialog.cxx index 801de79a7..368eaf0cf 100644 --- a/src/gui/GameInfoDialog.cxx +++ b/src/gui/GameInfoDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/GameInfoDialog.hxx b/src/gui/GameInfoDialog.hxx index 4d7705da0..2ffd7b053 100644 --- a/src/gui/GameInfoDialog.hxx +++ b/src/gui/GameInfoDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/GameList.cxx b/src/gui/GameList.cxx index dc97971af..7e8bcf45f 100644 --- a/src/gui/GameList.cxx +++ b/src/gui/GameList.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/GameList.hxx b/src/gui/GameList.hxx index 63f2f1a60..e9cdb5b4f 100644 --- a/src/gui/GameList.hxx +++ b/src/gui/GameList.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/GlobalPropsDialog.cxx b/src/gui/GlobalPropsDialog.cxx index 3d94f6468..5fe9c7367 100644 --- a/src/gui/GlobalPropsDialog.cxx +++ b/src/gui/GlobalPropsDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/GlobalPropsDialog.hxx b/src/gui/GlobalPropsDialog.hxx index eb00833c4..2fb904b3a 100644 --- a/src/gui/GlobalPropsDialog.hxx +++ b/src/gui/GlobalPropsDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/GuiObject.hxx b/src/gui/GuiObject.hxx index 4df6eb26c..a9967fc62 100644 --- a/src/gui/GuiObject.hxx +++ b/src/gui/GuiObject.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/HelpDialog.cxx b/src/gui/HelpDialog.cxx index e2fcba06c..15bb77497 100644 --- a/src/gui/HelpDialog.cxx +++ b/src/gui/HelpDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/HelpDialog.hxx b/src/gui/HelpDialog.hxx index 131033e04..e138e40d0 100644 --- a/src/gui/HelpDialog.hxx +++ b/src/gui/HelpDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/InputDialog.cxx b/src/gui/InputDialog.cxx index a0dd29cb2..62be23f58 100644 --- a/src/gui/InputDialog.cxx +++ b/src/gui/InputDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/InputDialog.hxx b/src/gui/InputDialog.hxx index 44c5b7053..7cee52005 100644 --- a/src/gui/InputDialog.hxx +++ b/src/gui/InputDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/InputTextDialog.cxx b/src/gui/InputTextDialog.cxx index 6866b34ae..a23a70422 100644 --- a/src/gui/InputTextDialog.cxx +++ b/src/gui/InputTextDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/InputTextDialog.hxx b/src/gui/InputTextDialog.hxx index 891400c2f..5e691556e 100644 --- a/src/gui/InputTextDialog.hxx +++ b/src/gui/InputTextDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/JoystickDialog.cxx b/src/gui/JoystickDialog.cxx index fd127be30..68153c57d 100644 --- a/src/gui/JoystickDialog.cxx +++ b/src/gui/JoystickDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/JoystickDialog.hxx b/src/gui/JoystickDialog.hxx index 490e116c4..2561200bf 100644 --- a/src/gui/JoystickDialog.hxx +++ b/src/gui/JoystickDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/Launcher.cxx b/src/gui/Launcher.cxx index 787b763ce..b0d5e3d3c 100644 --- a/src/gui/Launcher.cxx +++ b/src/gui/Launcher.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/Launcher.hxx b/src/gui/Launcher.hxx index 129477f56..443b5d544 100644 --- a/src/gui/Launcher.hxx +++ b/src/gui/Launcher.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/LauncherDialog.cxx b/src/gui/LauncherDialog.cxx index 311cad15e..941d9ce8e 100644 --- a/src/gui/LauncherDialog.cxx +++ b/src/gui/LauncherDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/LauncherDialog.hxx b/src/gui/LauncherDialog.hxx index 17296adaf..61400f461 100644 --- a/src/gui/LauncherDialog.hxx +++ b/src/gui/LauncherDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/LauncherFilterDialog.cxx b/src/gui/LauncherFilterDialog.cxx index 2e3bf531c..789630ec7 100644 --- a/src/gui/LauncherFilterDialog.cxx +++ b/src/gui/LauncherFilterDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/LauncherFilterDialog.hxx b/src/gui/LauncherFilterDialog.hxx index 76e60f89c..58855bd3c 100644 --- a/src/gui/LauncherFilterDialog.hxx +++ b/src/gui/LauncherFilterDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ListWidget.cxx b/src/gui/ListWidget.cxx index da9c676cd..2093b86e1 100644 --- a/src/gui/ListWidget.cxx +++ b/src/gui/ListWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ListWidget.hxx b/src/gui/ListWidget.hxx index e006b7c00..34382b9ac 100644 --- a/src/gui/ListWidget.hxx +++ b/src/gui/ListWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/LoggerDialog.cxx b/src/gui/LoggerDialog.cxx index cc61f053f..67e0b3a39 100644 --- a/src/gui/LoggerDialog.cxx +++ b/src/gui/LoggerDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/LoggerDialog.hxx b/src/gui/LoggerDialog.hxx index 6980c9e27..5ab8f62a2 100644 --- a/src/gui/LoggerDialog.hxx +++ b/src/gui/LoggerDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/Menu.cxx b/src/gui/Menu.cxx index 5bb188da9..a066639e7 100644 --- a/src/gui/Menu.cxx +++ b/src/gui/Menu.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/Menu.hxx b/src/gui/Menu.hxx index d6ccb7ce3..b6b0c56d9 100644 --- a/src/gui/Menu.hxx +++ b/src/gui/Menu.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/MessageBox.cxx b/src/gui/MessageBox.cxx index 1d25a8b1a..0812831b4 100644 --- a/src/gui/MessageBox.cxx +++ b/src/gui/MessageBox.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/MessageBox.hxx b/src/gui/MessageBox.hxx index edc511456..f80512a52 100644 --- a/src/gui/MessageBox.hxx +++ b/src/gui/MessageBox.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/OptionsDialog.cxx b/src/gui/OptionsDialog.cxx index 86cc6666b..c3c42dfc3 100644 --- a/src/gui/OptionsDialog.cxx +++ b/src/gui/OptionsDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/OptionsDialog.hxx b/src/gui/OptionsDialog.hxx index 0bec78a1e..d239ddfff 100644 --- a/src/gui/OptionsDialog.hxx +++ b/src/gui/OptionsDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/PopUpWidget.cxx b/src/gui/PopUpWidget.cxx index dff4113de..1cedb56fc 100644 --- a/src/gui/PopUpWidget.cxx +++ b/src/gui/PopUpWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/PopUpWidget.hxx b/src/gui/PopUpWidget.hxx index 1a60667b4..a3da6dd36 100644 --- a/src/gui/PopUpWidget.hxx +++ b/src/gui/PopUpWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ProgressDialog.cxx b/src/gui/ProgressDialog.cxx index 29fcde997..c12ef25c6 100644 --- a/src/gui/ProgressDialog.cxx +++ b/src/gui/ProgressDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ProgressDialog.hxx b/src/gui/ProgressDialog.hxx index 2e970b462..0ea035faa 100644 --- a/src/gui/ProgressDialog.hxx +++ b/src/gui/ProgressDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/RadioButtonWidget.cxx b/src/gui/RadioButtonWidget.cxx index 46b16e01f..ddd69d564 100644 --- a/src/gui/RadioButtonWidget.cxx +++ b/src/gui/RadioButtonWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/RadioButtonWidget.hxx b/src/gui/RadioButtonWidget.hxx index 897524ef4..d86b32e80 100644 --- a/src/gui/RadioButtonWidget.hxx +++ b/src/gui/RadioButtonWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/Rect.hxx b/src/gui/Rect.hxx index d4ae35f5a..8336e36ce 100644 --- a/src/gui/Rect.hxx +++ b/src/gui/Rect.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/RomAuditDialog.cxx b/src/gui/RomAuditDialog.cxx index 33dc00489..3b0cc7b07 100644 --- a/src/gui/RomAuditDialog.cxx +++ b/src/gui/RomAuditDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/RomAuditDialog.hxx b/src/gui/RomAuditDialog.hxx index b8f5053c2..c03470879 100644 --- a/src/gui/RomAuditDialog.hxx +++ b/src/gui/RomAuditDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/RomInfoWidget.cxx b/src/gui/RomInfoWidget.cxx index 750e776a0..53f402a24 100644 --- a/src/gui/RomInfoWidget.cxx +++ b/src/gui/RomInfoWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/RomInfoWidget.hxx b/src/gui/RomInfoWidget.hxx index 9c7b188dd..9db4cac32 100644 --- a/src/gui/RomInfoWidget.hxx +++ b/src/gui/RomInfoWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ScrollBarWidget.cxx b/src/gui/ScrollBarWidget.cxx index 962df8363..b74d0e23d 100644 --- a/src/gui/ScrollBarWidget.cxx +++ b/src/gui/ScrollBarWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/ScrollBarWidget.hxx b/src/gui/ScrollBarWidget.hxx index d59a16f7a..3e40a6fc3 100644 --- a/src/gui/ScrollBarWidget.hxx +++ b/src/gui/ScrollBarWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/SnapshotDialog.cxx b/src/gui/SnapshotDialog.cxx index c9ed82d46..d8671a991 100644 --- a/src/gui/SnapshotDialog.cxx +++ b/src/gui/SnapshotDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/SnapshotDialog.hxx b/src/gui/SnapshotDialog.hxx index 2e85f1c74..8d1cbbd88 100644 --- a/src/gui/SnapshotDialog.hxx +++ b/src/gui/SnapshotDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/StellaFont.hxx b/src/gui/StellaFont.hxx index 4e21874ab..96fe715d4 100644 --- a/src/gui/StellaFont.hxx +++ b/src/gui/StellaFont.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/StellaLargeFont.hxx b/src/gui/StellaLargeFont.hxx index 8cb55bce1..25af6e1bf 100644 --- a/src/gui/StellaLargeFont.hxx +++ b/src/gui/StellaLargeFont.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/StellaMediumFont.hxx b/src/gui/StellaMediumFont.hxx index a55dc12d8..c3c892b01 100644 --- a/src/gui/StellaMediumFont.hxx +++ b/src/gui/StellaMediumFont.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/StringListWidget.cxx b/src/gui/StringListWidget.cxx index 44b9e5f4f..544416a13 100644 --- a/src/gui/StringListWidget.cxx +++ b/src/gui/StringListWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/StringListWidget.hxx b/src/gui/StringListWidget.hxx index 82d8ace75..5cd89c3a6 100644 --- a/src/gui/StringListWidget.hxx +++ b/src/gui/StringListWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/TabWidget.cxx b/src/gui/TabWidget.cxx index 11aec8730..d30cb320e 100644 --- a/src/gui/TabWidget.cxx +++ b/src/gui/TabWidget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/TabWidget.hxx b/src/gui/TabWidget.hxx index acbf6a1e8..5adb99f61 100644 --- a/src/gui/TabWidget.hxx +++ b/src/gui/TabWidget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/TimeMachine.cxx b/src/gui/TimeMachine.cxx index b1fdf0f7b..75206039a 100644 --- a/src/gui/TimeMachine.cxx +++ b/src/gui/TimeMachine.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/TimeMachine.hxx b/src/gui/TimeMachine.hxx index 93457bd25..cde7e845c 100644 --- a/src/gui/TimeMachine.hxx +++ b/src/gui/TimeMachine.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/TimeMachineDialog.cxx b/src/gui/TimeMachineDialog.cxx index c3ff5f7aa..264cd3b09 100644 --- a/src/gui/TimeMachineDialog.cxx +++ b/src/gui/TimeMachineDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/TimeMachineDialog.hxx b/src/gui/TimeMachineDialog.hxx index 253e9f3c8..f71944bac 100644 --- a/src/gui/TimeMachineDialog.hxx +++ b/src/gui/TimeMachineDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/UIDialog.cxx b/src/gui/UIDialog.cxx index 1bc979715..8628d25d5 100644 --- a/src/gui/UIDialog.cxx +++ b/src/gui/UIDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/UIDialog.hxx b/src/gui/UIDialog.hxx index 660412545..3efada9a6 100644 --- a/src/gui/UIDialog.hxx +++ b/src/gui/UIDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/VideoDialog.cxx b/src/gui/VideoDialog.cxx index 922d68e6e..6569260d7 100644 --- a/src/gui/VideoDialog.cxx +++ b/src/gui/VideoDialog.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/VideoDialog.hxx b/src/gui/VideoDialog.hxx index 027005542..0029cb6e0 100644 --- a/src/gui/VideoDialog.hxx +++ b/src/gui/VideoDialog.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/Widget.cxx b/src/gui/Widget.cxx index b356636c6..c432c7506 100644 --- a/src/gui/Widget.cxx +++ b/src/gui/Widget.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/gui/Widget.hxx b/src/gui/Widget.hxx index 4e04f6f07..21baeccb3 100644 --- a/src/gui/Widget.hxx +++ b/src/gui/Widget.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/macosx/AboutBox.h b/src/macosx/AboutBox.h index 654d1bbd6..6570f1241 100644 --- a/src/macosx/AboutBox.h +++ b/src/macosx/AboutBox.h @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/macosx/AboutBox.m b/src/macosx/AboutBox.m index 9ad625ecb..5a2395ec2 100644 --- a/src/macosx/AboutBox.m +++ b/src/macosx/AboutBox.m @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/macosx/AboutBoxTextView.h b/src/macosx/AboutBoxTextView.h index 80a9ef626..f38fa36aa 100644 --- a/src/macosx/AboutBoxTextView.h +++ b/src/macosx/AboutBoxTextView.h @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/macosx/AboutBoxTextView.m b/src/macosx/AboutBoxTextView.m index 10ecb34ac..afade8586 100644 --- a/src/macosx/AboutBoxTextView.m +++ b/src/macosx/AboutBoxTextView.m @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/macosx/Credits.html b/src/macosx/Credits.html index 6153489ea..c16a003d1 100644 --- a/src/macosx/Credits.html +++ b/src/macosx/Credits.html @@ -7,14 +7,14 @@

        Stella

        A multi-platform Atari 2600 VCS emulator

        -Copyright © 1995-2017 The Stella Team
        +Copyright © 1995-2018 The Stella Team
        https://stella-emu.github.io

        Stella is now DonationWare!
        https://stella-emu.github.io/donations.html

        Macintosh OS X version:
        -Copyright © 2007-2017 Stephen Anthony
        +Copyright © 2007-2018 Stephen Anthony
        Copyright © 2005-2006 Mark Grebe

        Graphics by Simple DirectMedia Layer library
        diff --git a/src/macosx/OSystemMACOSX.cxx b/src/macosx/OSystemMACOSX.cxx index 286fe7b4a..4f24b69c5 100644 --- a/src/macosx/OSystemMACOSX.cxx +++ b/src/macosx/OSystemMACOSX.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/macosx/OSystemMACOSX.hxx b/src/macosx/OSystemMACOSX.hxx index 76fbe0f7f..2e62ff333 100644 --- a/src/macosx/OSystemMACOSX.hxx +++ b/src/macosx/OSystemMACOSX.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/macosx/Preferences.h b/src/macosx/Preferences.h index b5d68d1f9..7e25d7055 100644 --- a/src/macosx/Preferences.h +++ b/src/macosx/Preferences.h @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/macosx/Preferences.m b/src/macosx/Preferences.m index 9a4185fb3..9b79e84c2 100644 --- a/src/macosx/Preferences.m +++ b/src/macosx/Preferences.m @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/macosx/SerialPortMACOSX.cxx b/src/macosx/SerialPortMACOSX.cxx index 945226b6a..3587bb94b 100644 --- a/src/macosx/SerialPortMACOSX.cxx +++ b/src/macosx/SerialPortMACOSX.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/macosx/SerialPortMACOSX.hxx b/src/macosx/SerialPortMACOSX.hxx index 1fe6eefdf..7e788adf7 100644 --- a/src/macosx/SerialPortMACOSX.hxx +++ b/src/macosx/SerialPortMACOSX.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/macosx/SettingsMACOSX.cxx b/src/macosx/SettingsMACOSX.cxx index b29ba7747..5445a7320 100644 --- a/src/macosx/SettingsMACOSX.cxx +++ b/src/macosx/SettingsMACOSX.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/macosx/SettingsMACOSX.hxx b/src/macosx/SettingsMACOSX.hxx index 8ee99efc7..0f274f869 100644 --- a/src/macosx/SettingsMACOSX.hxx +++ b/src/macosx/SettingsMACOSX.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/tools/convbdf.c b/src/tools/convbdf.c index 6503dd50d..a0fc1eb60 100644 --- a/src/tools/convbdf.c +++ b/src/tools/convbdf.c @@ -767,7 +767,7 @@ int gen_c_source(struct font* pf, char *path) "// SS SS tt ee ll ll aa aa\n" "// SSSS ttt eeeee llll llll aaaaa\n" "//\n" - "// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony\n" + "// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony\n" "// and the Stella Team\n" "//\n" "// See the file \"License.txt\" for information on usage and redistribution of\n" diff --git a/src/tools/create_props.pl b/src/tools/create_props.pl index 14a5fa037..aebc37541 100755 --- a/src/tools/create_props.pl +++ b/src/tools/create_props.pl @@ -42,7 +42,7 @@ print OUTFILE "// SS tt eeeeee ll ll aaaaa -- \"An Atari 2600 VC print OUTFILE "// SS SS tt ee ll ll aa aa\n"; print OUTFILE "// SSSS ttt eeeee llll llll aaaaa\n"; print OUTFILE "//\n"; -print OUTFILE "// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony\n"; +print OUTFILE "// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony\n"; print OUTFILE "// and the Stella Team\n"; print OUTFILE "//\n"; print OUTFILE "// See the file \"License.txt\" for information on usage and redistribution of\n"; diff --git a/src/tools/scrom.asm b/src/tools/scrom.asm index fec162cbd..86792d564 100644 --- a/src/tools/scrom.asm +++ b/src/tools/scrom.asm @@ -8,7 +8,7 @@ ;; SS SS tt ee ll ll aa aa ;; SSSS ttt eeeee llll llll aaaaa ;; -;; Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +;; Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony ;; and the Stella Team ;; ;; See the file "License.txt" for information on usage and redistribution of diff --git a/src/tools/update_stella_date.pl b/src/tools/update_stella_date.pl deleted file mode 100755 index c580038c7..000000000 --- a/src/tools/update_stella_date.pl +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/perl - -die if(@ARGV != 1); - -open( FILES, $ARGV[0]); -@files = ; -close( FILES ); - -foreach $infile (@files) -{ - chomp $infile; - print "Processing file $infile\n"; - $outfile = $infile . "___"; - - open(IN, "$infile"); - open(OUT, ">$outfile"); - - # Update date - foreach $line () - { - $line =~ s/1995-2016/1995-2017/; - print OUT $line; - } - - close(IN); - close(OUT); - - # Put back into original file - system( "mv \"$outfile\" \"$infile\"" ); -} diff --git a/src/unix/FSNodePOSIX.cxx b/src/unix/FSNodePOSIX.cxx index e8e3d163a..c9ae65112 100644 --- a/src/unix/FSNodePOSIX.cxx +++ b/src/unix/FSNodePOSIX.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/unix/FSNodePOSIX.hxx b/src/unix/FSNodePOSIX.hxx index 067b1344a..f05720d65 100644 --- a/src/unix/FSNodePOSIX.hxx +++ b/src/unix/FSNodePOSIX.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/unix/OSystemUNIX.cxx b/src/unix/OSystemUNIX.cxx index cb14ce10a..00a7c0d92 100644 --- a/src/unix/OSystemUNIX.cxx +++ b/src/unix/OSystemUNIX.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/unix/OSystemUNIX.hxx b/src/unix/OSystemUNIX.hxx index a52d14217..f687bb003 100644 --- a/src/unix/OSystemUNIX.hxx +++ b/src/unix/OSystemUNIX.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/unix/SerialPortUNIX.cxx b/src/unix/SerialPortUNIX.cxx index 8cd2339a5..20616b807 100644 --- a/src/unix/SerialPortUNIX.cxx +++ b/src/unix/SerialPortUNIX.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/unix/SerialPortUNIX.hxx b/src/unix/SerialPortUNIX.hxx index 35cec2bc8..71b942c79 100644 --- a/src/unix/SerialPortUNIX.hxx +++ b/src/unix/SerialPortUNIX.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/unix/SettingsUNIX.cxx b/src/unix/SettingsUNIX.cxx index 04e9fd850..6baa91c34 100644 --- a/src/unix/SettingsUNIX.cxx +++ b/src/unix/SettingsUNIX.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/unix/SettingsUNIX.hxx b/src/unix/SettingsUNIX.hxx index d200edccc..3375f561f 100644 --- a/src/unix/SettingsUNIX.hxx +++ b/src/unix/SettingsUNIX.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/windows/FSNodeWINDOWS.cxx b/src/windows/FSNodeWINDOWS.cxx index dfd3e1d2a..acd948b1f 100644 --- a/src/windows/FSNodeWINDOWS.cxx +++ b/src/windows/FSNodeWINDOWS.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/windows/FSNodeWINDOWS.hxx b/src/windows/FSNodeWINDOWS.hxx index 655734cf7..f8b601365 100644 --- a/src/windows/FSNodeWINDOWS.hxx +++ b/src/windows/FSNodeWINDOWS.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/windows/HomeFinder.hxx b/src/windows/HomeFinder.hxx index 8d2409975..42db2a936 100644 --- a/src/windows/HomeFinder.hxx +++ b/src/windows/HomeFinder.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/windows/OSystemWINDOWS.cxx b/src/windows/OSystemWINDOWS.cxx index c1a8674f7..975e87b1e 100644 --- a/src/windows/OSystemWINDOWS.cxx +++ b/src/windows/OSystemWINDOWS.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/windows/OSystemWINDOWS.hxx b/src/windows/OSystemWINDOWS.hxx index fc7bec449..60897b1d0 100644 --- a/src/windows/OSystemWINDOWS.hxx +++ b/src/windows/OSystemWINDOWS.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/windows/SerialPortWINDOWS.cxx b/src/windows/SerialPortWINDOWS.cxx index aae17573b..d1554103d 100644 --- a/src/windows/SerialPortWINDOWS.cxx +++ b/src/windows/SerialPortWINDOWS.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/windows/SerialPortWINDOWS.hxx b/src/windows/SerialPortWINDOWS.hxx index 5d0c2b011..83dd3f12a 100644 --- a/src/windows/SerialPortWINDOWS.hxx +++ b/src/windows/SerialPortWINDOWS.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/windows/SettingsWINDOWS.cxx b/src/windows/SettingsWINDOWS.cxx index e4a882eee..7820b0937 100644 --- a/src/windows/SettingsWINDOWS.cxx +++ b/src/windows/SettingsWINDOWS.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/windows/SettingsWINDOWS.hxx b/src/windows/SettingsWINDOWS.hxx index c80d1c001..f054e3396 100644 --- a/src/windows/SettingsWINDOWS.hxx +++ b/src/windows/SettingsWINDOWS.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/windows/stella.rc b/src/windows/stella.rc index 01bb8af33..3cc0f30ec 100755 --- a/src/windows/stella.rc +++ b/src/windows/stella.rc @@ -57,7 +57,7 @@ BEGIN VALUE "FileDescription", "Stella" VALUE "FileVersion", "5.0.2" VALUE "InternalName", "Stella" - VALUE "LegalCopyright", "Copyright (C) 1995-2017 The Stella Team" + VALUE "LegalCopyright", "Copyright (C) 1995-2018 The Stella Team" VALUE "OriginalFilename", "Stella.exe" VALUE "ProductName", "Stella" VALUE "ProductVersion", "5.0.2" diff --git a/src/yacc/YaccParser.cxx b/src/yacc/YaccParser.cxx index dc3f0f921..f884591c2 100644 --- a/src/yacc/YaccParser.cxx +++ b/src/yacc/YaccParser.cxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of diff --git a/src/yacc/YaccParser.hxx b/src/yacc/YaccParser.hxx index d35d4887e..6f8e425b8 100644 --- a/src/yacc/YaccParser.hxx +++ b/src/yacc/YaccParser.hxx @@ -8,7 +8,7 @@ // SS SS tt ee ll ll aa aa // SSSS ttt eeeee llll llll aaaaa // -// Copyright (c) 1995-2017 by Bradford W. Mott, Stephen Anthony +// Copyright (c) 1995-2018 by Bradford W. Mott, Stephen Anthony // and the Stella Team // // See the file "License.txt" for information on usage and redistribution of From 1213c973dc83739b9e18c329736fab2e1968fcf5 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sat, 30 Dec 2017 00:50:25 +0100 Subject: [PATCH 139/156] fixed #275 --- src/debugger/Debugger.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index a8aaecf87..28bc43409 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -80,8 +80,6 @@ Debugger::Debugger(OSystem& osystem, Console& console) // there will only be ever one instance of debugger in Stella, // I don't care :) myStaticDebugger = this; - - saveOldState(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -110,6 +108,8 @@ void Debugger::initialize() myBaseDialog = myDialog; myCartDebug->setDebugWidget(&(myDialog->cartDebug())); + + saveOldState(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 8fcec0db174ac690789528667ec5ffabc81a0c12 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sat, 30 Dec 2017 12:32:43 +0100 Subject: [PATCH 140/156] updated change log --- Changes.txt | 206 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 138 insertions(+), 68 deletions(-) diff --git a/Changes.txt b/Changes.txt index d024c7a32..c22f1f030 100644 --- a/Changes.txt +++ b/Changes.txt @@ -12,7 +12,7 @@ Release History =========================================================================== -5.0.2 to 5.1: (December xx, 2017) +5.0.2 to 5.1: (January xx, 2018) * Huge improvements to the disassembly view in the debugger and disassembly files created: @@ -68,14 +68,14 @@ * Fixed swapped ports being displayed wrong in System Logs and debugger. - * Added options to erase the AtariVox/Savekey for all ROMs or the current - one. + * Added options to erase the AtariVox/Savekey flash memory, either for + all ROMs or only the current one. * Moved various developer related settings in new Developer Settings dialog. These settings now come in two groups (player/developer) and allow switching all settings at once. - * added new interface palette 'Light' + * Added new interface palette 'Light' * Improved tab auto-complete in debugger @@ -103,6 +103,9 @@ * Extended debugger 'dump' command to take a second argument, indicating the end of the range to dump data. + * Improved change tracking; more values are tracked and change tracking + now works in case of a break too. + * Added widgets for trackball and SaveKey/AtariVox controllers * Improved emulation of 'FE' bankswitch scheme (no user-visible changes, @@ -110,13 +113,16 @@ real thing). Related to this, improved the debugger support for this scheme (you can now switch banks in the debugger view). + * Added emulation of 7800 initial RAM values and Pause key. + * Added ROM properties for 'Scramble' ROMs, and updated info for all "Champ Games" ROMs. * Added ROM properties for 'Zippy the Porcupine' ROMs, and updated info for all "Chris Spry (Sprybug)" ROMs. - * Fix error when building with uClibc-ng for ARM (thanks to Sergio Prado). + * Fixed error when building with uClibc-ng for ARM (thanks to Sergio + Prado). * Updated included PNG library to latest stable version. @@ -2102,11 +2108,14 @@ * Fixed crash which sometimes occurred when viewing snapshots in the ROM Info viewer. - * Allow setting window sizes for the ROM launcher and debugger to be larger - than your desktop resolution. Be careful with this feature, as switching + * Allow setting window sizes for the ROM launcher and debugger to be + larger + than your desktop resolution. Be careful with this feature, as + switching to fullscreen mode may cause problems in such cases. - * Made the ROM launcher filename filtering be case-insensitive. This fixes + * Made the ROM launcher filename filtering be case-insensitive. This + fixes a bug whereby ROMs with uppercase extensions were marked as invalid. * Added a pattern matching textbox to the ROM launcher, used to @@ -2180,7 +2189,8 @@ the current directory and '~/' (or '~\') to mean your home directory (for Windows, home directory will be your 'My Documents' folder). - * Large speedup in loading directories with many files in the ROM launcher. + * Large speedup in loading directories with many files in the ROM + launcher. * Fixed reset issue in 3E, 4A50, AR, CV, E7, F4SC, F6SC, F8SC, FASC and MC ROMs; the internal RAM wasn't being randomized after the initial reset. @@ -2220,7 +2230,8 @@ 'tia_filter' (which can be zoom1x, zoom2x, etc). There is no equivalent for ui_zoom, since the UI can no longer be scaled. - * Added experimental 64-bit version for Vista64 (may also work on WinXP64). + * Added experimental 64-bit version for Vista64 (may also work on + WinXP64). This hasn't been extensively tested, and is probably quite a bit slower than the 32-bit version. @@ -2228,7 +2239,8 @@ but I no longer have access to older systems to compile for 10.2. * Huge updates to the documentation, particularly concerning the debugger. - Many features that have been in Stella for a while are now documented for + Many features that have been in Stella for a while are now documented + for the first time. @@ -2305,7 +2317,8 @@ * Added TIA emulation fixes for graphical glitches in Escape from the Mindmaster, Mission Survive, Solaris, and SWOOPS! - * Fixed bug where fullscreen OpenGL scaling wasn't working on 4:3 monitors. + * Fixed bug where fullscreen OpenGL scaling wasn't working on 4:3 + monitors. * Further improvements to the M6532/RIOT emulation, which unfortunately have broken old state files (again). @@ -2333,9 +2346,11 @@ the ROM to be frozen afterwords. * Removed logic whereby starting a ROM from something other than the - built-in launcher wouldn't allow the user to go back to the ROM launcher. + built-in launcher wouldn't allow the user to go back to the ROM + launcher. - * Fixed bug (hopefully) with the app icon not showing on the Stella window. + * Fixed bug (hopefully) with the app icon not showing on the Stella + window. Further testing is needed, since I can't duplicate the error myself. * Fixed default snapshot folder issues; the folder will now be @@ -2353,16 +2368,19 @@ 2.4.2 to 2.5: (March 28, 2008) * Added RomInfo widget to the ROM launcher, which shows properties - information and a snapshot of the currently selected ROM. Updated the UI + information and a snapshot of the currently selected ROM. Updated the + UI and added '-romviewer' commandline argument to activate this setting. - Note that the ROM launcher will have to be sized at least 640x480 for this + Note that the ROM launcher will have to be sized at least 640x480 for + this to be used. Also note that the snapshots must be in 1x mode with a maximum size of 320x260. This will be expanded on in a future release. * Added ROM audit functionality, whereby ROMs can be physically renamed according to their properties' name. - * Added bankswitching support for 0840, SB, X07 and 4A50. A special thanks + * Added bankswitching support for 0840, SB, X07 and 4A50. A special + thanks to Eckhard Stolberg for much help in this area. * Removed "non-browse" functionality from the ROM launcher; it now always @@ -2383,7 +2401,8 @@ have to start a ROM to do so. * Added support for configurable font to ROM launcher (currently only - 'small' and 'large'). Updated the UI and added -launcherfont' commandline + 'small' and 'large'). Updated the UI and added -launcherfont' + commandline argument to change this setting. * Added SECAM, NTSC50, PAL60 and SECAM60 to the list of formats that can @@ -2406,7 +2425,8 @@ from DASM for proper functionality. * Updated state file format, creating smaller files (and in preparation - for state rewinding in a future release). Old state saves will no longer + for state rewinding in a future release). Old state saves will no + longer work. * Added '-bs' commandline argument, which is an alias for '-type' (which @@ -2461,13 +2481,16 @@ * Re-added non-browser mode to the ROM launcher. - * For the Linux/UNIX port; fixed OpenGL vsync issue with Nvidia video cards. + * For the Linux/UNIX port; fixed OpenGL vsync issue with Nvidia video + cards. 2.3.5 to 2.4: (August 20, 2007) - * Added new video sub-system where fullscreen and windowed modes are treated - differently. Windowed modes now use '-zoom_tia' and '-zoom_ui' arguments, + * Added new video sub-system where fullscreen and windowed modes are + treated + differently. Windowed modes now use '-zoom_tia' and '-zoom_ui' + arguments, while fullscreen modes can be specified by resolution using the new '-fullres' argument. @@ -2504,8 +2527,10 @@ * Removed OpenGL aspect ratio setting favour of the previously mentioned video changes. We'll see how this goes. - * Removed dirty-rect support from software rendering, since it was actually - sub-optimal in Windows and OSX and defaulted to off in previous versions. + * Removed dirty-rect support from software rendering, since it was + actually + sub-optimal in Windows and OSX and defaulted to off in previous + versions. * Added support for gzipped ROMs. @@ -2521,7 +2546,8 @@ * Removed PSP support, since it hasn't been updated in over a year, and someone else is maintaining another port elsewhere. - * For the Unix/Linux port; fixed 'make install' issues, and changed icon to + * For the Unix/Linux port; fixed 'make install' issues, and changed icon + to PNG format. @@ -2554,18 +2580,22 @@ Related to this, added 'colorloss' commandline argument. * Added rudimentary support for configuring the UI palette ('uipalette' - commandline argument) and ability to change the size of the launcher window - ('launchersize' commandline argument). This will be expanded on in future + commandline argument) and ability to change the size of the launcher + window + ('launchersize' commandline argument). This will be expanded on in + future releases. * Reworked options menu so it's now accessible from the ROM launcher as well as while playing a ROM. - * Re-added ability to change the width and height of a Console. Related to + * Re-added ability to change the width and height of a Console. Related + to this, changing XStart/YStart/Width/Height dynamically no longer resets the ROM. - * Removed 'tiadefaults' commandline argument, since Stella will now default + * Removed 'tiadefaults' commandline argument, since Stella will now + default to using accurate positioning, and not use 'tweaks'. * Joystick code now allows all 4 directions; 'Bumper Bash' now works @@ -2576,14 +2606,16 @@ * Reworked GUI code, so that all dialog boxes are automatically centered. - * Added 'rominfo' commandline argument, which prints some detailed info for + * Added 'rominfo' commandline argument, which prints some detailed info + for a ROM. * For the OSX port; fixed crashes in OpenGL mode. * For the GP2X port; some improvements to the sound code. - * For the GP2X port; added vertical centering of the TIA image (when possible). + * For the GP2X port; added vertical centering of the TIA image (when + possible). 2.2 to 2.3: (December 22, 2006) @@ -2598,7 +2630,8 @@ * For UI navigation, changed from using 'joymouse' to the more familiar 'tabbing' functionality, where you move from object to object by use of - some tab key. As a result, completely removed the 'joymouse' commandline + some tab key. As a result, completely removed the 'joymouse' + commandline argument and all associated functionality. * Added event remapping for UI events, separate from events while in @@ -2608,7 +2641,8 @@ but run at NTSC timing (60Hz). Added ROM property for this, and updated the internal properties database for many PAL60 ROMs. - * Added support for user-definable palettes. For now, only one extra palette + * Added support for user-definable palettes. For now, only one extra + palette is supported, but in the future we may have them specified per-ROM. * Fixed bug in PAL colour-loss emulation, which wasn't actually being done @@ -2617,8 +2651,10 @@ * Fixed several TIA-related emulation bugs as reported on AtariAge. More fixes will come with the TIA rewrite, due in the next release. - * Added new scaler infrastructure, replacing the '-zoom' commandline argument - with '-scale_ui' and '-scale_tia'. This means the UI and emulation can now + * Added new scaler infrastructure, replacing the '-zoom' commandline + argument + with '-scale_ui' and '-scale_tia'. This means the UI and emulation can + now be scaled independently. * Added '-gl_vsync' commandline argument and associated UI elements, which @@ -2635,7 +2671,8 @@ succession. * Added a 'Previous directory' entry to the top of each listing while - in ROM Browse mode, which is equivalent to the 'Go Up' button. This makes + in ROM Browse mode, which is equivalent to the 'Go Up' button. This + makes it easier to navigate the filesystem, since you never have to 'tab out' of the ROM listing. @@ -2643,11 +2680,13 @@ longer have to use the commandline to set those options. * Added new property to ROM properties specifying whether to swap paddles - plugged into a virtual port. This eliminates the need to manually set the + plugged into a virtual port. This eliminates the need to manually set + the paddle mode for those ROMs that don't use paddle zero by default. * Added a 'Defaults' button to the Game Properties dialog, which resets - the ROM properties to the internal defaults, deleting that ROMs properties + the ROM properties to the internal defaults, deleting that ROMs + properties from the external properties file. * Fixed bug whereby modified ROM properties weren't being reloaded when @@ -2657,7 +2696,8 @@ set per-ROM. * Added support for relocating the base Stella directory, by setting the - environment variable 'STELLA_BASEDIR'. This must be done each time before + environment variable 'STELLA_BASEDIR'. This must be done each time + before Stella starts. * Added '-fastscbios' commandline argument, which speeds up loading of @@ -2673,7 +2713,8 @@ * Updated configure/build toolchain so patching is no longer required for Debian packages. - * Removed dependency on PNG library (PNG snapshots are still present, but the + * Removed dependency on PNG library (PNG snapshots are still present, but + the actual library is no longer required). * For the OSX port, improved OpenGL performance on Mac Mini using Intel @@ -2755,7 +2796,8 @@ * Added phosphor effect, similar to z26. Useful on ROMs which alternate sprites from one frame to another, resulting in an annoying flicker. - When using phosphor mode, a pixels colour is mixed with its previous value, + When using phosphor mode, a pixels colour is mixed with its previous + value, resulting in a blended image that doesn't flicker, emulating the phosphoresence effect on a real television. @@ -2786,7 +2828,8 @@ * Added mapping of multiple SDL joystick axis to Event Mapping. - * Added joystick hat support, and mapping of multiple hats to Event Mapping. + * Added joystick hat support, and mapping of multiple hats to Event + Mapping. * Added remapping of paddle emulation to the keyboard or joystick axis (the mouse is still used by default for paddles). Related to this, @@ -2822,7 +2865,8 @@ 2.0 to 2.0.1: (October 24, 2005) - * Added 'dirtyrects' support, which speeds up rendering for some Windows users. + * Added 'dirtyrects' support, which speeds up rendering for some Windows + users. * Fixed bug where taking snapshots would fail if the snapshot directory wasn't specified. @@ -2837,12 +2881,14 @@ 'Untitled' in the Stella window or when taking snapshots. The actual ROM name is now used. - * Changed minimum height of debugger to be 27 lines in the prompt, or approx. + * Changed minimum height of debugger to be 27 lines in the prompt, or + approx. 700 pixels high. This should make using the debugger easier for users with lower resolution monitors. Related to this, the RomWidget now uses all possible vertical space when changing the debugger height. - * Fixed bug related to upgrading Stella and event mappings being incorrect. + * Fixed bug related to upgrading Stella and event mappings being + incorrect. Stella now detects this, and uses the default mappings. So upgrading to version 2.0.1 means your event mappings will be reset. @@ -2860,12 +2906,15 @@ 1.4.2 to 2.0: (October 16, 2005) - * Added integrated GUI. Stella is now a fully graphical application, and all - settings can be changed dynamically while the application is running. That + * Added integrated GUI. Stella is now a fully graphical application, and + all + settings can be changed dynamically while the application is running. + That means the commandline is no longer required (but support is still there for those who want to use it). - * Added ROM launcher. You can now exit a game and start playing another one + * Added ROM launcher. You can now exit a game and start playing another + one from directly within Stella (you no longer have to quit Stella and restart it). @@ -2878,7 +2927,8 @@ usable. * Added new sound subsystem, which is much faster and more accurate. - Related to this, added stereo sound output (used by some homebrew games). + Related to this, added stereo sound output (used by some homebrew + games). * Added ZIP support. Stella can now open ROM's compressed in zip format. @@ -2969,21 +3019,25 @@ 1.4.1 to 1.4.2: (February 19, 2005) - * Updated the sound system. All popping and cracking sounds that previously + * Updated the sound system. All popping and cracking sounds that + previously occurred at program start/stop and when entering/exiting menu or pause mode have been eliminated. * Fixed the gl_fsmax argument to mean "switch to desktop resolution on - fullscreen OpenGL", instead of to the maximum possible resolution (the two + fullscreen OpenGL", instead of to the maximum possible resolution (the + two are not always the same). * Added Alt [ and Alt ] keys to dynamically adjust the sound volume during emulation. - * Added Control 0, Control 1, Control 2, Control 3 keys to dynamically change + * Added Control 0, Control 1, Control 2, Control 3 keys to dynamically + change which paddle the mouse should emulate. - * Added video_driver argument. This accepts the different options that can be + * Added video_driver argument. This accepts the different options that can + be specified for SDL_VIDEODRIVER (see SDL homepage for more information). Basically, it eliminates the need to set the SDL_VIDEODRIVER environment variable. @@ -3001,30 +3055,38 @@ 1.4 to 1.4.1: (August 15, 2004) - * Fixed PAL sound issues. PAL games now should sound correct (no distortion - or missing sounds), but some games may still run too fast. This is still + * Fixed PAL sound issues. PAL games now should sound correct (no + distortion + or missing sounds), but some games may still run too fast. This is + still a work-in-progress, and will be fixed in Stella 1.5. * Cleaned up the SDL event gathering loop. This should hopefully fix the problems with "double-pumping events" reported by some Windows users. Event gathering and dispatching is now much faster as well. - * Fixed a bug where the Control or Alt keys could be assigned to some event, - but they could never be used. Control/Alt can now be used for any event. + * Fixed a bug where the Control or Alt keys could be assigned to some + event, + but they could never be used. Control/Alt can now be used for any + event. * Updated stella.pro file to work with the latest Good2600 ROMset release (Thanks go to Voch for helping to maintain the stella.pro file). - * For the Windows port; removed requirement for ROM files to be named *.bin - in the StellaX frontend. The ROM's can now have any name, but ZIP-files are + * For the Windows port; removed requirement for ROM files to be named + *.bin + in the StellaX frontend. The ROM's can now have any name, but ZIP-files + are not yet supported. * For the Windows port; fixed the problems with the included modified SDL library and Windows 98 users. Stella should now run in Windows 98. * For the OSX port; added preference to allow user to select the directory - in which ROM images are stored. This sets the default directory to start - the browsing for a ROM in, and doesn't preclude the user from selecting a + in which ROM images are stored. This sets the default directory to + start + the browsing for a ROM in, and doesn't preclude the user from selecting + a file outside that directory. * For the OSX port; fixed preferences bug where Preferences changed before @@ -3056,7 +3118,8 @@ * Added more refined in-game GUI. - * Added event remapping. Emulation keys can now be remapped to the keyboard + * Added event remapping. Emulation keys can now be remapped to the + keyboard or up to 4 joysticks. * Added native Stelladaptor support. Joysticks, paddles, and driving @@ -3070,7 +3133,8 @@ the current Stella palette, original Stella palette (pre-1.2 versions), and the z26 palette. - * Added support for UA Limited style bankswitching (Funky Fish and Pleiades). + * Added support for UA Limited style bankswitching (Funky Fish and + Pleiades). * Switched to using high compatibility M6502 mode by default. This means old state saves from previous Stella versions will no longer work. @@ -3145,21 +3209,26 @@ * Latest stella.pro file included in distribution * Added some developer options to the core, and the ability to change game - width, height, xstart, ystart, and others while the emulation is running. + width, height, xstart, ystart, and others while the emulation is + running. Added ability to switch between NTSC and PAL at runtime, and the ability - to save the current properties to a file or to merge the changes into the + to save the current properties to a file or to merge the changes into + the stella.pro file; X11 and SDL versions supported for now (compile option) - * External sound server for the X11 and SDL versions no longer required, as + * External sound server for the X11 and SDL versions no longer required, + as all sound code is now integrated into the core - * Changed locations of the user's config files for the X11 and SDL versions; + * Changed locations of the user's config files for the X11 and SDL + versions; the user's stellarc file is now located in $HOME/.stella/stellarc, state files are located in $HOME/.stella/state/ and the stella.pro file is located in $HOME/.stella/stella.pro * Changed the way options are supplied on the commandline for the X11 and - SDL versions. Now all commandline options take exactly the same arguments + SDL versions. Now all commandline options take exactly the same + arguments as in the INI file. * Added "-accurate" command line option to choose between accurate @@ -3453,3 +3522,4 @@ DOS 1.2 to DOS 1.2.1: (April 28, 2002) * Power Macintosh port (Aaron Giles) * Windows 95 & NT port (Jeff Miller) + From 696fc2ab43f7d6372421d8826b8be061772fbff5 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sat, 30 Dec 2017 16:43:27 +0100 Subject: [PATCH 141/156] work on TimeMachine UI started --- src/gui/Dialog.cxx | 13 +- src/gui/Dialog.hxx | 5 + src/gui/TimeMachineDialog.cxx | 256 +++++++++++++++++++++++++++++++++- src/gui/TimeMachineDialog.hxx | 24 ++++ 4 files changed, 288 insertions(+), 10 deletions(-) diff --git a/src/gui/Dialog.cxx b/src/gui/Dialog.cxx index 938070873..8caceff55 100644 --- a/src/gui/Dialog.cxx +++ b/src/gui/Dialog.cxx @@ -49,7 +49,8 @@ Dialog::Dialog(OSystem& instance, DialogContainer& parent, _visible(false), _processCancel(false), _surface(nullptr), - _tabID(0) + _tabID(0), + _flags(WIDGET_ENABLED | WIDGET_BORDER | WIDGET_CLEARBG) { } @@ -269,12 +270,14 @@ void Dialog::drawDialog() if(_dirty) { -// cerr << "Dialog::drawDialog(): w = " << _w << ", h = " << _h << " @ " << &s << endl << endl; - s.fillRect(_x, _y, _w, _h, kDlgColor); + if(_flags & WIDGET_CLEARBG) + // cerr << "Dialog::drawDialog(): w = " << _w << ", h = " << _h << " @ " << &s << endl << endl; + s.fillRect(_x, _y, _w, _h, kDlgColor); + if(_flags & WIDGET_BORDER) #ifndef FLAT_UI - s.box(_x, _y, _w, _h, kColor, kShadowColor); + s.box(_x, _y, _w, _h, kColor, kShadowColor); #else - s.frameRect(_x, _y, _w, _h, kColor); + s.frameRect(_x, _y, _w, _h, kColor); #endif // !FLAT_UI // Make all child widget dirty diff --git a/src/gui/Dialog.hxx b/src/gui/Dialog.hxx index 1a1eb07dd..73804a0c6 100644 --- a/src/gui/Dialog.hxx +++ b/src/gui/Dialog.hxx @@ -79,6 +79,10 @@ class Dialog : public GuiObject */ void addSurface(shared_ptr surface); + void setFlags(int flags) { _flags |= flags; setDirty(); } + void clearFlags(int flags) { _flags &= ~flags; setDirty(); } + int getFlags() const { return _flags; } + protected: virtual void draw() override { } void releaseFocus() override; @@ -165,6 +169,7 @@ class Dialog : public GuiObject shared_ptr _surface; int _tabID; + int _flags; private: // Following constructors and assignment operators not supported diff --git a/src/gui/TimeMachineDialog.cxx b/src/gui/TimeMachineDialog.cxx index 264cd3b09..fce29853d 100644 --- a/src/gui/TimeMachineDialog.cxx +++ b/src/gui/TimeMachineDialog.cxx @@ -22,6 +22,8 @@ #include "FBSurface.hxx" #include "OSystem.hxx" #include "Widget.hxx" +#include "StateManager.hxx" +#include "RewindManager.hxx" #include "TimeMachineDialog.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -29,16 +31,212 @@ TimeMachineDialog::TimeMachineDialog(OSystem& osystem, DialogContainer& parent, int max_w, int max_h) : Dialog(osystem, parent) { + const int BUTTON_W = 16, BUTTON_H = 14; + + /*static uInt32 PAUSE[BUTTON_H] = + { + 0b0001111001111000, + 0b0001111001111000, + 0b0001111001111000, + 0b0001111001111000, + 0b0001111001111000, + 0b0001111001111000, + 0b0001111001111000, + 0b0001111001111000, + 0b0001111001111000, + 0b0001111001111000, + 0b0001111001111000, + 0b0001111001111000, + 0b0001111001111000, + 0b0001111001111000 + };*/ + static uInt32 PLAY[BUTTON_H] = + { + 0b0110000000000000, + 0b0111100000000000, + 0b0111111000000000, + 0b0111111110000000, + 0b0111111111100000, + 0b0111111111111000, + 0b0111111111111110, + 0b0111111111111110, + 0b0111111111111000, + 0b0111111111100000, + 0b0111111110000000, + 0b0111111000000000, + 0b0111100000000000, + 0b0110000000000000 + }; + static uInt32 REWIND_ALL[BUTTON_H] = + { + 0, + 0b0110000110000110, + 0b0110001110001110, + 0b0110011110011110, + 0b0110111110111110, + 0b0111111111111110, + 0b0111111111111110, + 0b0111111111111110, + 0b0111111111111110, + 0b0110111110111110, + 0b0110011110011110, + 0b0110001110001110, + 0b0110000110000110, + 0 + }; + static uInt32 REWIND_10[BUTTON_H] = + { + 0, + 0b0000010000100110, + 0b0000110001100110, + 0b0001110011100110, + 0b0011110111100110, + 0b0111111111100110, + 0b1111111111100110, + 0b1111111111100110, + 0b0111111111100110, + 0b0011110111100110, + 0b0001110011100110, + 0b0000110001100110, + 0b0000010000100110, + 0 + }; + static uInt32 REWIND_1[BUTTON_H] = + { + 0, + 0b0000001100011100, + 0b0000011100011100, + 0b0000111100011100, + 0b0001111100011100, + 0b0011111100011100, + 0b0111111100011100, + 0b0111111100011100, + 0b0011111100011100, + 0b0001111100011100, + 0b0000111100011100, + 0b0000011100011100, + 0b0000001100011100, + 0 + }; + static uInt32 UNWIND_1[BUTTON_H] = + { + 0, + 0b0011100011000000, + 0b0011100011100000, + 0b0011100011110000, + 0b0011100011111000, + 0b0011100011111100, + 0b0011100011111110, + 0b0011100011111110, + 0b0011100011111100, + 0b0011100011111000, + 0b0011100011110000, + 0b0011100011100000, + 0b0011100011000000, + 0 + }; + static uInt32 UNWIND_10[BUTTON_H] = + { + 0, + 0b0110010000100000, + 0b0110011000110000, + 0b0110011100111000, + 0b0110011110111100, + 0b0110011111111110, + 0b0110011111111111, + 0b0110011111111111, + 0b0110011111111110, + 0b0110011110111100, + 0b0110011100111000, + 0b0110011000110000, + 0b0110010000100000, + 0 + }; + static uInt32 UNWIND_ALL[BUTTON_H] = + { + 0, + 0b0110000110000110, + 0b0111000111000110, + 0b0111100111100110, + 0b0111110111110110, + 0b0111111111111110, + 0b0111111111111110, + 0b0111111111111110, + 0b0111111111111110, + 0b0111110111110110, + 0b0111100111100110, + 0b0111000111000110, + 0b0110000110000110, + 0 + }; + const GUI::Font& font = instance().frameBuffer().font(); - const int buttonWidth = font.getStringWidth(" ") + 20, -// buttonHeight = font.getLineHeight() + 6, - rowHeight = font.getLineHeight() + 10; + const int H_BORDER = 8, BUTTON_GAP = 4, V_BORDER = 4, V_GAP = 4; + const int buttonWidth = BUTTON_W + 8, + buttonHeight = BUTTON_H + 10, + rowHeight = font.getLineHeight(); WidgetArray wid; + int xpos, ypos; // Set real dimensions - _w = 10 * (buttonWidth + 5) + 20; - _h = 2 * rowHeight + 15; + _w = 20 * (buttonWidth + BUTTON_GAP) + 20; + _h = V_BORDER * 2 + rowHeight + buttonHeight + 4; + + //this->clearFlags(WIDGET_CLEARBG); // TODO: does NOT work as expected + + xpos = H_BORDER; + ypos = V_BORDER; + + // Add frame info + new StaticTextWidget(this, font, xpos, ypos, "04:32 190"); + + new StaticTextWidget(this, font, _w - H_BORDER - font.getStringWidth("XX:XX XXX"), ypos, "12:25 144"); + + ypos += rowHeight; + + StaticTextWidget* t = new StaticTextWidget(this, font, xpos, ypos + 3, "999"); + new StaticTextWidget(this, font, _w - H_BORDER - font.getStringWidth("8888"), ypos + 3, "1000"); + xpos = t->getRight() + 16; + + myRewindAllWidget = new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight, REWIND_ALL, + BUTTON_W, BUTTON_H, kRewindAll); + wid.push_back(myRewindAllWidget); + xpos += buttonWidth + BUTTON_GAP; + + myRewind10Widget = new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight, REWIND_10, + BUTTON_W, BUTTON_H, kRewind10); + wid.push_back(myRewind10Widget); + xpos += buttonWidth + BUTTON_GAP; + + myRewind1Widget = new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight, REWIND_1, + BUTTON_W, BUTTON_H, kRewind1); + wid.push_back(myRewind1Widget); + xpos += buttonWidth + BUTTON_GAP*2; + + /*myPauseWidget = new ButtonWidget(this, font, xpos, ypos - 2, buttonWidth + 4, buttonHeight + 4, PAUSE, + BUTTON_W, BUTTON_H, kPause); + wid.push_back(myPauseWidget); + myPauseWidget->clearFlags(WIDGET_ENABLED);*/ + myPlayWidget = new ButtonWidget(this, font, xpos, ypos - 2, buttonWidth + 4, buttonHeight + 4, PLAY, + BUTTON_W, BUTTON_H, kPlay); + wid.push_back(myPlayWidget); + xpos += buttonWidth + BUTTON_GAP*2 + 4; + + myUnwind1Widget = new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight, UNWIND_1, + BUTTON_W, BUTTON_H, kUnwind1); + wid.push_back(myUnwind1Widget); + xpos += buttonWidth + BUTTON_GAP; + + myUnwind10Widget = new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight, UNWIND_10, + BUTTON_W, BUTTON_H, kUnwind10); + wid.push_back(myUnwind10Widget); + xpos += buttonWidth + BUTTON_GAP; + + myUnwindAllWidget = new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight, UNWIND_ALL, + BUTTON_W, BUTTON_H, kUnwindAll); + wid.push_back(myUnwindAllWidget); + xpos += buttonWidth + BUTTON_GAP; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -53,6 +251,7 @@ void TimeMachineDialog::center() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void TimeMachineDialog::loadConfig() { + handleWinds(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -62,7 +261,54 @@ void TimeMachineDialog::handleCommand(CommandSender* sender, int cmd, cerr << cmd << endl; switch(cmd) { + case kPlay: + instance().eventHandler().leaveMenuMode(); + break; + + case kRewind1: + handleWinds(-1); + break; + + case kRewind10: + handleWinds(-10); + break; + + case kRewindAll: + handleWinds(-1000); + break; + + case kUnwind1: + handleWinds(1); + break; + + case kUnwind10: + handleWinds(10); + break; + + case kUnwindAll: + handleWinds(1000); + break; + default: Dialog::handleCommand(sender, cmd, data, 0); } } + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TimeMachineDialog::handleWinds(Int32 numWinds) +{ + RewindManager& r = instance().state().rewindManager(); + + if(numWinds < 0) + r.rewindState(-numWinds); + else if(numWinds > 0) + r.unwindState(numWinds); + + myRewindAllWidget->setEnabled(!r.atFirst()); + myRewind10Widget->setEnabled(!r.atFirst()); + myRewind1Widget->setEnabled(!r.atFirst()); + + myUnwindAllWidget->setEnabled(!r.atLast()); + myUnwind10Widget->setEnabled(!r.atLast()); + myUnwind1Widget->setEnabled(!r.atLast()); +} diff --git a/src/gui/TimeMachineDialog.hxx b/src/gui/TimeMachineDialog.hxx index f71944bac..efdf6293e 100644 --- a/src/gui/TimeMachineDialog.hxx +++ b/src/gui/TimeMachineDialog.hxx @@ -37,6 +37,30 @@ class TimeMachineDialog : public Dialog /** This dialog uses its own positioning, so we override Dialog::center() */ void center() override; + void handleWinds(Int32 numWinds = 0); + + private: + enum + { + kPause = 'TMps', + kPlay = 'TMpl', + kRewindAll = 'TMra', + kRewind10 = 'TMr1', + kRewind1 = 'TMre', + kUnwindAll = 'TMua', + kUnwind10 = 'TMu1', + kUnwind1 = 'TMun', + }; + + ButtonWidget* myPauseWidget; + ButtonWidget* myPlayWidget; + ButtonWidget* myRewindAllWidget; + ButtonWidget* myRewind10Widget; + ButtonWidget* myRewind1Widget; + ButtonWidget* myUnwind1Widget; + ButtonWidget* myUnwind10Widget; + ButtonWidget* myUnwindAllWidget; + private: // Following constructors and assignment operators not supported TimeMachineDialog() = delete; From 96fceed89678e89270e796cde4ceb3478b2fbc2d Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sat, 30 Dec 2017 16:46:54 +0100 Subject: [PATCH 142/156] attempt to fix formatting --- Changes.txt | 204 ++++++++++++++++------------------------------------ 1 file changed, 63 insertions(+), 141 deletions(-) diff --git a/Changes.txt b/Changes.txt index c22f1f030..866faee6d 100644 --- a/Changes.txt +++ b/Changes.txt @@ -1,17 +1,3 @@ -=========================================================================== - - SSSS tt lll lll - SS SS tt ll ll - SS tttttt eeee ll ll aaaa - SSSS tt ee ee ll ll aa - SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" - SS SS tt ee ll ll aa aa - SSSS ttt eeeee llll llll aaaaa - -=========================================================================== - Release History -=========================================================================== - 5.0.2 to 5.1: (January xx, 2018) * Huge improvements to the disassembly view in the debugger and @@ -2108,14 +2094,11 @@ * Fixed crash which sometimes occurred when viewing snapshots in the ROM Info viewer. - * Allow setting window sizes for the ROM launcher and debugger to be - larger - than your desktop resolution. Be careful with this feature, as - switching + * Allow setting window sizes for the ROM launcher and debugger to be larger + than your desktop resolution. Be careful with this feature, as switching to fullscreen mode may cause problems in such cases. - * Made the ROM launcher filename filtering be case-insensitive. This - fixes + * Made the ROM launcher filename filtering be case-insensitive. This fixes a bug whereby ROMs with uppercase extensions were marked as invalid. * Added a pattern matching textbox to the ROM launcher, used to @@ -2189,8 +2172,7 @@ the current directory and '~/' (or '~\') to mean your home directory (for Windows, home directory will be your 'My Documents' folder). - * Large speedup in loading directories with many files in the ROM - launcher. + * Large speedup in loading directories with many files in the ROM launcher. * Fixed reset issue in 3E, 4A50, AR, CV, E7, F4SC, F6SC, F8SC, FASC and MC ROMs; the internal RAM wasn't being randomized after the initial reset. @@ -2230,8 +2212,7 @@ 'tia_filter' (which can be zoom1x, zoom2x, etc). There is no equivalent for ui_zoom, since the UI can no longer be scaled. - * Added experimental 64-bit version for Vista64 (may also work on - WinXP64). + * Added experimental 64-bit version for Vista64 (may also work on WinXP64). This hasn't been extensively tested, and is probably quite a bit slower than the 32-bit version. @@ -2239,8 +2220,7 @@ but I no longer have access to older systems to compile for 10.2. * Huge updates to the documentation, particularly concerning the debugger. - Many features that have been in Stella for a while are now documented - for + Many features that have been in Stella for a while are now documented for the first time. @@ -2317,8 +2297,7 @@ * Added TIA emulation fixes for graphical glitches in Escape from the Mindmaster, Mission Survive, Solaris, and SWOOPS! - * Fixed bug where fullscreen OpenGL scaling wasn't working on 4:3 - monitors. + * Fixed bug where fullscreen OpenGL scaling wasn't working on 4:3 monitors. * Further improvements to the M6532/RIOT emulation, which unfortunately have broken old state files (again). @@ -2346,11 +2325,9 @@ the ROM to be frozen afterwords. * Removed logic whereby starting a ROM from something other than the - built-in launcher wouldn't allow the user to go back to the ROM - launcher. + built-in launcher wouldn't allow the user to go back to the ROM launcher. - * Fixed bug (hopefully) with the app icon not showing on the Stella - window. + * Fixed bug (hopefully) with the app icon not showing on the Stella window. Further testing is needed, since I can't duplicate the error myself. * Fixed default snapshot folder issues; the folder will now be @@ -2368,19 +2345,16 @@ 2.4.2 to 2.5: (March 28, 2008) * Added RomInfo widget to the ROM launcher, which shows properties - information and a snapshot of the currently selected ROM. Updated the - UI + information and a snapshot of the currently selected ROM. Updated the UI and added '-romviewer' commandline argument to activate this setting. - Note that the ROM launcher will have to be sized at least 640x480 for - this + Note that the ROM launcher will have to be sized at least 640x480 for this to be used. Also note that the snapshots must be in 1x mode with a maximum size of 320x260. This will be expanded on in a future release. * Added ROM audit functionality, whereby ROMs can be physically renamed according to their properties' name. - * Added bankswitching support for 0840, SB, X07 and 4A50. A special - thanks + * Added bankswitching support for 0840, SB, X07 and 4A50. A special thanks to Eckhard Stolberg for much help in this area. * Removed "non-browse" functionality from the ROM launcher; it now always @@ -2401,8 +2375,7 @@ have to start a ROM to do so. * Added support for configurable font to ROM launcher (currently only - 'small' and 'large'). Updated the UI and added -launcherfont' - commandline + 'small' and 'large'). Updated the UI and added -launcherfont' commandline argument to change this setting. * Added SECAM, NTSC50, PAL60 and SECAM60 to the list of formats that can @@ -2425,8 +2398,7 @@ from DASM for proper functionality. * Updated state file format, creating smaller files (and in preparation - for state rewinding in a future release). Old state saves will no - longer + for state rewinding in a future release). Old state saves will no longer work. * Added '-bs' commandline argument, which is an alias for '-type' (which @@ -2481,16 +2453,13 @@ * Re-added non-browser mode to the ROM launcher. - * For the Linux/UNIX port; fixed OpenGL vsync issue with Nvidia video - cards. + * For the Linux/UNIX port; fixed OpenGL vsync issue with Nvidia video cards. 2.3.5 to 2.4: (August 20, 2007) - * Added new video sub-system where fullscreen and windowed modes are - treated - differently. Windowed modes now use '-zoom_tia' and '-zoom_ui' - arguments, + * Added new video sub-system where fullscreen and windowed modes are treated + differently. Windowed modes now use '-zoom_tia' and '-zoom_ui' arguments, while fullscreen modes can be specified by resolution using the new '-fullres' argument. @@ -2527,10 +2496,8 @@ * Removed OpenGL aspect ratio setting favour of the previously mentioned video changes. We'll see how this goes. - * Removed dirty-rect support from software rendering, since it was - actually - sub-optimal in Windows and OSX and defaulted to off in previous - versions. + * Removed dirty-rect support from software rendering, since it was actually + sub-optimal in Windows and OSX and defaulted to off in previous versions. * Added support for gzipped ROMs. @@ -2546,8 +2513,7 @@ * Removed PSP support, since it hasn't been updated in over a year, and someone else is maintaining another port elsewhere. - * For the Unix/Linux port; fixed 'make install' issues, and changed icon - to + * For the Unix/Linux port; fixed 'make install' issues, and changed icon to PNG format. @@ -2580,22 +2546,18 @@ Related to this, added 'colorloss' commandline argument. * Added rudimentary support for configuring the UI palette ('uipalette' - commandline argument) and ability to change the size of the launcher - window - ('launchersize' commandline argument). This will be expanded on in - future + commandline argument) and ability to change the size of the launcher window + ('launchersize' commandline argument). This will be expanded on in future releases. * Reworked options menu so it's now accessible from the ROM launcher as well as while playing a ROM. - * Re-added ability to change the width and height of a Console. Related - to + * Re-added ability to change the width and height of a Console. Related to this, changing XStart/YStart/Width/Height dynamically no longer resets the ROM. - * Removed 'tiadefaults' commandline argument, since Stella will now - default + * Removed 'tiadefaults' commandline argument, since Stella will now default to using accurate positioning, and not use 'tweaks'. * Joystick code now allows all 4 directions; 'Bumper Bash' now works @@ -2606,16 +2568,14 @@ * Reworked GUI code, so that all dialog boxes are automatically centered. - * Added 'rominfo' commandline argument, which prints some detailed info - for + * Added 'rominfo' commandline argument, which prints some detailed info for a ROM. * For the OSX port; fixed crashes in OpenGL mode. * For the GP2X port; some improvements to the sound code. - * For the GP2X port; added vertical centering of the TIA image (when - possible). + * For the GP2X port; added vertical centering of the TIA image (when possible). 2.2 to 2.3: (December 22, 2006) @@ -2630,8 +2590,7 @@ * For UI navigation, changed from using 'joymouse' to the more familiar 'tabbing' functionality, where you move from object to object by use of - some tab key. As a result, completely removed the 'joymouse' - commandline + some tab key. As a result, completely removed the 'joymouse' commandline argument and all associated functionality. * Added event remapping for UI events, separate from events while in @@ -2641,8 +2600,7 @@ but run at NTSC timing (60Hz). Added ROM property for this, and updated the internal properties database for many PAL60 ROMs. - * Added support for user-definable palettes. For now, only one extra - palette + * Added support for user-definable palettes. For now, only one extra palette is supported, but in the future we may have them specified per-ROM. * Fixed bug in PAL colour-loss emulation, which wasn't actually being done @@ -2651,10 +2609,8 @@ * Fixed several TIA-related emulation bugs as reported on AtariAge. More fixes will come with the TIA rewrite, due in the next release. - * Added new scaler infrastructure, replacing the '-zoom' commandline - argument - with '-scale_ui' and '-scale_tia'. This means the UI and emulation can - now + * Added new scaler infrastructure, replacing the '-zoom' commandline argument + with '-scale_ui' and '-scale_tia'. This means the UI and emulation can now be scaled independently. * Added '-gl_vsync' commandline argument and associated UI elements, which @@ -2671,8 +2627,7 @@ succession. * Added a 'Previous directory' entry to the top of each listing while - in ROM Browse mode, which is equivalent to the 'Go Up' button. This - makes + in ROM Browse mode, which is equivalent to the 'Go Up' button. This makes it easier to navigate the filesystem, since you never have to 'tab out' of the ROM listing. @@ -2680,13 +2635,11 @@ longer have to use the commandline to set those options. * Added new property to ROM properties specifying whether to swap paddles - plugged into a virtual port. This eliminates the need to manually set - the + plugged into a virtual port. This eliminates the need to manually set the paddle mode for those ROMs that don't use paddle zero by default. * Added a 'Defaults' button to the Game Properties dialog, which resets - the ROM properties to the internal defaults, deleting that ROMs - properties + the ROM properties to the internal defaults, deleting that ROMs properties from the external properties file. * Fixed bug whereby modified ROM properties weren't being reloaded when @@ -2696,8 +2649,7 @@ set per-ROM. * Added support for relocating the base Stella directory, by setting the - environment variable 'STELLA_BASEDIR'. This must be done each time - before + environment variable 'STELLA_BASEDIR'. This must be done each time before Stella starts. * Added '-fastscbios' commandline argument, which speeds up loading of @@ -2713,8 +2665,7 @@ * Updated configure/build toolchain so patching is no longer required for Debian packages. - * Removed dependency on PNG library (PNG snapshots are still present, but - the + * Removed dependency on PNG library (PNG snapshots are still present, but the actual library is no longer required). * For the OSX port, improved OpenGL performance on Mac Mini using Intel @@ -2796,8 +2747,7 @@ * Added phosphor effect, similar to z26. Useful on ROMs which alternate sprites from one frame to another, resulting in an annoying flicker. - When using phosphor mode, a pixels colour is mixed with its previous - value, + When using phosphor mode, a pixels colour is mixed with its previous value, resulting in a blended image that doesn't flicker, emulating the phosphoresence effect on a real television. @@ -2828,8 +2778,7 @@ * Added mapping of multiple SDL joystick axis to Event Mapping. - * Added joystick hat support, and mapping of multiple hats to Event - Mapping. + * Added joystick hat support, and mapping of multiple hats to Event Mapping. * Added remapping of paddle emulation to the keyboard or joystick axis (the mouse is still used by default for paddles). Related to this, @@ -2865,8 +2814,7 @@ 2.0 to 2.0.1: (October 24, 2005) - * Added 'dirtyrects' support, which speeds up rendering for some Windows - users. + * Added 'dirtyrects' support, which speeds up rendering for some Windows users. * Fixed bug where taking snapshots would fail if the snapshot directory wasn't specified. @@ -2881,14 +2829,12 @@ 'Untitled' in the Stella window or when taking snapshots. The actual ROM name is now used. - * Changed minimum height of debugger to be 27 lines in the prompt, or - approx. + * Changed minimum height of debugger to be 27 lines in the prompt, or approx. 700 pixels high. This should make using the debugger easier for users with lower resolution monitors. Related to this, the RomWidget now uses all possible vertical space when changing the debugger height. - * Fixed bug related to upgrading Stella and event mappings being - incorrect. + * Fixed bug related to upgrading Stella and event mappings being incorrect. Stella now detects this, and uses the default mappings. So upgrading to version 2.0.1 means your event mappings will be reset. @@ -2906,15 +2852,12 @@ 1.4.2 to 2.0: (October 16, 2005) - * Added integrated GUI. Stella is now a fully graphical application, and - all - settings can be changed dynamically while the application is running. - That + * Added integrated GUI. Stella is now a fully graphical application, and all + settings can be changed dynamically while the application is running. That means the commandline is no longer required (but support is still there for those who want to use it). - * Added ROM launcher. You can now exit a game and start playing another - one + * Added ROM launcher. You can now exit a game and start playing another one from directly within Stella (you no longer have to quit Stella and restart it). @@ -2927,8 +2870,7 @@ usable. * Added new sound subsystem, which is much faster and more accurate. - Related to this, added stereo sound output (used by some homebrew - games). + Related to this, added stereo sound output (used by some homebrew games). * Added ZIP support. Stella can now open ROM's compressed in zip format. @@ -3019,25 +2961,21 @@ 1.4.1 to 1.4.2: (February 19, 2005) - * Updated the sound system. All popping and cracking sounds that - previously + * Updated the sound system. All popping and cracking sounds that previously occurred at program start/stop and when entering/exiting menu or pause mode have been eliminated. * Fixed the gl_fsmax argument to mean "switch to desktop resolution on - fullscreen OpenGL", instead of to the maximum possible resolution (the - two + fullscreen OpenGL", instead of to the maximum possible resolution (the two are not always the same). * Added Alt [ and Alt ] keys to dynamically adjust the sound volume during emulation. - * Added Control 0, Control 1, Control 2, Control 3 keys to dynamically - change + * Added Control 0, Control 1, Control 2, Control 3 keys to dynamically change which paddle the mouse should emulate. - * Added video_driver argument. This accepts the different options that can - be + * Added video_driver argument. This accepts the different options that can be specified for SDL_VIDEODRIVER (see SDL homepage for more information). Basically, it eliminates the need to set the SDL_VIDEODRIVER environment variable. @@ -3055,38 +2993,30 @@ 1.4 to 1.4.1: (August 15, 2004) - * Fixed PAL sound issues. PAL games now should sound correct (no - distortion - or missing sounds), but some games may still run too fast. This is - still + * Fixed PAL sound issues. PAL games now should sound correct (no distortion + or missing sounds), but some games may still run too fast. This is still a work-in-progress, and will be fixed in Stella 1.5. * Cleaned up the SDL event gathering loop. This should hopefully fix the problems with "double-pumping events" reported by some Windows users. Event gathering and dispatching is now much faster as well. - * Fixed a bug where the Control or Alt keys could be assigned to some - event, - but they could never be used. Control/Alt can now be used for any - event. + * Fixed a bug where the Control or Alt keys could be assigned to some event, + but they could never be used. Control/Alt can now be used for any event. * Updated stella.pro file to work with the latest Good2600 ROMset release (Thanks go to Voch for helping to maintain the stella.pro file). - * For the Windows port; removed requirement for ROM files to be named - *.bin - in the StellaX frontend. The ROM's can now have any name, but ZIP-files - are + * For the Windows port; removed requirement for ROM files to be named *.bin + in the StellaX frontend. The ROM's can now have any name, but ZIP-files are not yet supported. * For the Windows port; fixed the problems with the included modified SDL library and Windows 98 users. Stella should now run in Windows 98. * For the OSX port; added preference to allow user to select the directory - in which ROM images are stored. This sets the default directory to - start - the browsing for a ROM in, and doesn't preclude the user from selecting - a + in which ROM images are stored. This sets the default directory to start + the browsing for a ROM in, and doesn't preclude the user from selecting a file outside that directory. * For the OSX port; fixed preferences bug where Preferences changed before @@ -3118,8 +3048,7 @@ * Added more refined in-game GUI. - * Added event remapping. Emulation keys can now be remapped to the - keyboard + * Added event remapping. Emulation keys can now be remapped to the keyboard or up to 4 joysticks. * Added native Stelladaptor support. Joysticks, paddles, and driving @@ -3133,8 +3062,7 @@ the current Stella palette, original Stella palette (pre-1.2 versions), and the z26 palette. - * Added support for UA Limited style bankswitching (Funky Fish and - Pleiades). + * Added support for UA Limited style bankswitching (Funky Fish and Pleiades). * Switched to using high compatibility M6502 mode by default. This means old state saves from previous Stella versions will no longer work. @@ -3209,26 +3137,21 @@ * Latest stella.pro file included in distribution * Added some developer options to the core, and the ability to change game - width, height, xstart, ystart, and others while the emulation is - running. + width, height, xstart, ystart, and others while the emulation is running. Added ability to switch between NTSC and PAL at runtime, and the ability - to save the current properties to a file or to merge the changes into - the + to save the current properties to a file or to merge the changes into the stella.pro file; X11 and SDL versions supported for now (compile option) - * External sound server for the X11 and SDL versions no longer required, - as + * External sound server for the X11 and SDL versions no longer required, as all sound code is now integrated into the core - * Changed locations of the user's config files for the X11 and SDL - versions; + * Changed locations of the user's config files for the X11 and SDL versions; the user's stellarc file is now located in $HOME/.stella/stellarc, state files are located in $HOME/.stella/state/ and the stella.pro file is located in $HOME/.stella/stella.pro * Changed the way options are supplied on the commandline for the X11 and - SDL versions. Now all commandline options take exactly the same - arguments + SDL versions. Now all commandline options take exactly the same arguments as in the INI file. * Added "-accurate" command line option to choose between accurate @@ -3522,4 +3445,3 @@ DOS 1.2 to DOS 1.2.1: (April 28, 2002) * Power Macintosh port (Aaron Giles) * Windows 95 & NT port (Jeff Miller) - From cf926fdf075d57392c5eb3d539b489eabde7bfe0 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sat, 30 Dec 2017 21:19:55 +0100 Subject: [PATCH 143/156] UI partially working now (TODO: timebar) --- src/common/Base.cxx | 4 ++ src/common/Base.hxx | 1 + src/common/RewindManager.cxx | 33 +++++++++++++-- src/common/RewindManager.hxx | 7 ++++ src/gui/TimeMachineDialog.cxx | 75 ++++++++++++++++++++++++++++------- src/gui/TimeMachineDialog.hxx | 10 +++++ 6 files changed, 113 insertions(+), 17 deletions(-) diff --git a/src/common/Base.cxx b/src/common/Base.cxx index 5ce8997b9..f3d668b33 100644 --- a/src/common/Base.cxx +++ b/src/common/Base.cxx @@ -68,6 +68,10 @@ string Base::toString(int value, Common::Base::Format outputBase) std::snprintf(vToS_buf, 6, "%5d", value); break; + case Base::F_10_2: // base 10: 2 digits + std::snprintf(vToS_buf, 3, "%02d", value); + break; + case Base::F_16_1: // base 16: 1 byte wide std::snprintf(vToS_buf, 2, myFmt[0], value); break; diff --git a/src/common/Base.hxx b/src/common/Base.hxx index dd30a8a69..3c4916abe 100644 --- a/src/common/Base.hxx +++ b/src/common/Base.hxx @@ -47,6 +47,7 @@ class Base F_16_4, // base 16: 4 bytes wide F_16_8, // base 16: 8 bytes wide F_10, // base 10: 3 or 5 bytes (depending on value) + F_10_2, // base 10: 2 digits F_2, // base 2: 8 or 16 bits (depending on value) F_2_8, // base 2: 1 byte (8 bits) wide F_2_16, // base 2: 2 bytes (16 bits) wide diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index 18bf4f83a..16468d17b 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -21,6 +21,7 @@ #include "Serializer.hxx" #include "StateManager.hxx" #include "TIA.hxx" +#include "EventHandler.hxx" #include "RewindManager.hxx" @@ -170,7 +171,8 @@ uInt32 RewindManager::rewindState(uInt32 numStates) else message = "Rewind not possible"; - myOSystem.frameBuffer().showMessage(message); + if(myOSystem.eventHandler().state() != EventHandlerState::TIMEMACHINE) + myOSystem.frameBuffer().showMessage(message); return i; } @@ -203,7 +205,8 @@ uInt32 RewindManager::unwindState(uInt32 numStates) else message = "Unwind not possible"; - myOSystem.frameBuffer().showMessage(message); + if(myOSystem.eventHandler().state() != EventHandlerState::TIMEMACHINE) + myOSystem.frameBuffer().showMessage(message); return i; } @@ -276,7 +279,7 @@ string RewindManager::loadState(Int64 startCycles, uInt32 numStates) string RewindManager::getUnitString(Int64 cycles) { const Int32 scanlines = std::max(myOSystem.console().tia().scanlinesLastFrame(), 240u); - const bool isNTSC = scanlines <= 285; // TODO: replace magic number + const bool isNTSC = scanlines <= 287; const Int32 NTSC_FREQ = 1193182; // ~76*262*60 const Int32 PAL_FREQ = 1182298; // ~76*312*50 const Int32 freq = isNTSC ? NTSC_FREQ : PAL_FREQ; // = cycles/second @@ -304,3 +307,27 @@ string RewindManager::getUnitString(Int64 cycles) return result.str(); } + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +uInt32 RewindManager::getFirstCycles() +{ + // TODO: check if valid + return Common::LinkedObjectPool::const_iter(myStateList.first())->cycles; +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +uInt32 RewindManager::getCurrentCycles() +{ + if(myStateList.currentIsValid()) + return myStateList.current().cycles; + else + return 0; +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +uInt32 RewindManager::getLastCycles() +{ + // TODO: check if valid + return Common::LinkedObjectPool::const_iter(myStateList.last())->cycles; +} + diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index 43fbd7806..8749aa109 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -133,6 +133,13 @@ class RewindManager */ string getUnitString(Int64 cycles); + uInt32 getCurrentIdx() { return myStateList.currentIdx(); } + uInt32 getLastIdx() { return myStateList.size(); } + + uInt32 getFirstCycles(); + uInt32 getCurrentCycles(); + uInt32 getLastCycles(); + private: OSystem& myOSystem; StateManager& myStateManager; diff --git a/src/gui/TimeMachineDialog.cxx b/src/gui/TimeMachineDialog.cxx index fce29853d..d73f6ee75 100644 --- a/src/gui/TimeMachineDialog.cxx +++ b/src/gui/TimeMachineDialog.cxx @@ -24,7 +24,17 @@ #include "Widget.hxx" #include "StateManager.hxx" #include "RewindManager.hxx" + + +#include "Console.hxx" +#include "TIA.hxx" +#include "System.hxx" + + #include "TimeMachineDialog.hxx" +#include "Base.hxx" +using Common::Base; + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - TimeMachineDialog::TimeMachineDialog(OSystem& osystem, DialogContainer& parent, @@ -188,17 +198,19 @@ TimeMachineDialog::TimeMachineDialog(OSystem& osystem, DialogContainer& parent, xpos = H_BORDER; ypos = V_BORDER; - // Add frame info - new StaticTextWidget(this, font, xpos, ypos, "04:32 190"); - - new StaticTextWidget(this, font, _w - H_BORDER - font.getStringWidth("XX:XX XXX"), ypos, "12:25 144"); - + // Add index info + myCurrentIdxWidget = new StaticTextWidget(this, font, xpos, ypos, " "); + myLastIdxWidget = new StaticTextWidget(this, font, _w - H_BORDER - font.getStringWidth("8888"), ypos, + " ", TextAlign::Right); ypos += rowHeight; - StaticTextWidget* t = new StaticTextWidget(this, font, xpos, ypos + 3, "999"); - new StaticTextWidget(this, font, _w - H_BORDER - font.getStringWidth("8888"), ypos + 3, "1000"); - xpos = t->getRight() + 16; + // Add time info + myCurrentTimeWidget = new StaticTextWidget(this, font, xpos, ypos + 3, "04:32 59"); + myLastTimeWidget = new StaticTextWidget(this, font, _w - H_BORDER - font.getStringWidth("XX:XX XX"), ypos + 3, + "12:25 59"); + xpos = myCurrentTimeWidget->getRight() + BUTTON_GAP * 4; + // Add buttons myRewindAllWidget = new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight, REWIND_ALL, BUTTON_W, BUTTON_H, kRewindAll); wid.push_back(myRewindAllWidget); @@ -236,7 +248,10 @@ TimeMachineDialog::TimeMachineDialog(OSystem& osystem, DialogContainer& parent, myUnwindAllWidget = new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight, UNWIND_ALL, BUTTON_W, BUTTON_H, kUnwindAll); wid.push_back(myUnwindAllWidget); - xpos += buttonWidth + BUTTON_GAP; + xpos = myUnwindAllWidget->getRight() + BUTTON_GAP * 3; + + // Add message + myMessageWidget = new StaticTextWidget(this, font, xpos, ypos + 3, " "); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -252,6 +267,7 @@ void TimeMachineDialog::center() void TimeMachineDialog::loadConfig() { handleWinds(); + myMessageWidget->setLabel(""); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -294,20 +310,51 @@ cerr << cmd << endl; } } +string TimeMachineDialog::getTimeString(uInt64 cycles) +{ + const Int32 scanlines = std::max(instance().console().tia().scanlinesLastFrame(), 240u); + const bool isNTSC = scanlines <= 287; + const Int32 NTSC_FREQ = 1193182; // ~76*262*60 + const Int32 PAL_FREQ = 1182298; // ~76*312*50 + const Int32 freq = isNTSC ? NTSC_FREQ : PAL_FREQ; // = cycles/second + + uInt32 minutes = cycles / (freq * 60); + cycles -= minutes * (freq * 60); + uInt32 seconds = cycles / freq; + cycles -= seconds * freq; + uInt32 frames = cycles / (scanlines * 76); + + stringstream time; + time << Common::Base::toString(minutes, Common::Base::F_10_2) << ":"; + time << Common::Base::toString(seconds, Common::Base::F_10_2) << "."; + time << Common::Base::toString(frames, Common::Base::F_10_2); + + return time.str(); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void TimeMachineDialog::handleWinds(Int32 numWinds) { RewindManager& r = instance().state().rewindManager(); - if(numWinds < 0) - r.rewindState(-numWinds); - else if(numWinds > 0) - r.unwindState(numWinds); + if(numWinds) + { + uInt64 startCycles = instance().console().tia().cycles(); + uInt32 winds = numWinds < 0 ? r.rewindState(-numWinds) : r.unwindState(numWinds); + string message = r.getUnitString(instance().console().tia().cycles() - startCycles); + myMessageWidget->setLabel((numWinds < 0 ? "(-" : "(+") + message + ")"); + } + // Update time + myCurrentTimeWidget->setLabel(getTimeString(r.getCurrentCycles() - r.getFirstCycles())); + myLastTimeWidget->setLabel(getTimeString(r.getLastCycles() - r.getFirstCycles())); + // Update index + myCurrentIdxWidget->setValue(r.getCurrentIdx()); + myLastIdxWidget->setValue(r.getLastIdx()); + // enable/disable buttons myRewindAllWidget->setEnabled(!r.atFirst()); myRewind10Widget->setEnabled(!r.atFirst()); myRewind1Widget->setEnabled(!r.atFirst()); - myUnwindAllWidget->setEnabled(!r.atLast()); myUnwind10Widget->setEnabled(!r.atLast()); myUnwind1Widget->setEnabled(!r.atLast()); diff --git a/src/gui/TimeMachineDialog.hxx b/src/gui/TimeMachineDialog.hxx index efdf6293e..06a1e36e9 100644 --- a/src/gui/TimeMachineDialog.hxx +++ b/src/gui/TimeMachineDialog.hxx @@ -37,6 +37,9 @@ class TimeMachineDialog : public Dialog /** This dialog uses its own positioning, so we override Dialog::center() */ void center() override; + /** convert cycles into time */ + string getTimeString(uInt64 cycles); + /** re/unwind and update display */ void handleWinds(Int32 numWinds = 0); private: @@ -61,6 +64,13 @@ class TimeMachineDialog : public Dialog ButtonWidget* myUnwind10Widget; ButtonWidget* myUnwindAllWidget; + StaticTextWidget* myCurrentTimeWidget; + StaticTextWidget* myLastTimeWidget; + + StaticTextWidget* myCurrentIdxWidget; + StaticTextWidget* myLastIdxWidget; + StaticTextWidget* myMessageWidget; + private: // Following constructors and assignment operators not supported TimeMachineDialog() = delete; From bb6b460a0c3c6f30fcd450362473ea16d71e7b35 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Sat, 30 Dec 2017 17:41:09 -0330 Subject: [PATCH 144/156] Minor formatting fix (tabs vs. spaces). --- Changes.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Changes.txt b/Changes.txt index 866faee6d..a195da0e4 100644 --- a/Changes.txt +++ b/Changes.txt @@ -34,8 +34,8 @@ information). In the case of 'saveses', the filename is now named based on the date and time of when the command was entered. - * Fixed change tracking bug during rewind; changes were accumulated - instead of being displayed only for the last rewind step. + * Fixed change tracking bug during rewind; changes were accumulated + instead of being displayed only for the last rewind step. * Fixed bug with saving snapshots in 1x mode; there was graphical corruption in some cases. Such snapshots also now include any TV @@ -89,8 +89,8 @@ * Extended debugger 'dump' command to take a second argument, indicating the end of the range to dump data. - * Improved change tracking; more values are tracked and change tracking - now works in case of a break too. + * Improved change tracking; more values are tracked and change tracking + now works in case of a break too. * Added widgets for trackball and SaveKey/AtariVox controllers @@ -99,7 +99,7 @@ real thing). Related to this, improved the debugger support for this scheme (you can now switch banks in the debugger view). - * Added emulation of 7800 initial RAM values and Pause key. + * Added emulation of 7800 initial RAM values and Pause key. * Added ROM properties for 'Scramble' ROMs, and updated info for all "Champ Games" ROMs. From b553a5fa4dd183bdc21a693eb52b02bf8ddb9404 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 3 Jan 2018 20:16:50 +0100 Subject: [PATCH 145/156] experiments with transparency --- src/gui/TimeMachineDialog.cxx | 18 ++++++++++++------ src/windows/Stella.vcxproj | 8 ++++---- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/gui/TimeMachineDialog.cxx b/src/gui/TimeMachineDialog.cxx index d73f6ee75..bd38faf45 100644 --- a/src/gui/TimeMachineDialog.cxx +++ b/src/gui/TimeMachineDialog.cxx @@ -181,7 +181,7 @@ TimeMachineDialog::TimeMachineDialog(OSystem& osystem, DialogContainer& parent, }; const GUI::Font& font = instance().frameBuffer().font(); - const int H_BORDER = 8, BUTTON_GAP = 4, V_BORDER = 4, V_GAP = 4; + const int H_BORDER = 6, BUTTON_GAP = 4, V_BORDER = 4, V_GAP = 4; const int buttonWidth = BUTTON_W + 8, buttonHeight = BUTTON_H + 10, rowHeight = font.getLineHeight(); @@ -191,9 +191,10 @@ TimeMachineDialog::TimeMachineDialog(OSystem& osystem, DialogContainer& parent, // Set real dimensions _w = 20 * (buttonWidth + BUTTON_GAP) + 20; - _h = V_BORDER * 2 + rowHeight + buttonHeight + 4; + _h = V_BORDER * 2 + rowHeight + buttonHeight + 2; - //this->clearFlags(WIDGET_CLEARBG); // TODO: does NOT work as expected + //this->clearFlags(WIDGET_CLEARBG); // does only work combined with blending! + //this->clearFlags(WIDGET_BORDER); xpos = H_BORDER; ypos = V_BORDER; @@ -206,6 +207,7 @@ TimeMachineDialog::TimeMachineDialog(OSystem& osystem, DialogContainer& parent, // Add time info myCurrentTimeWidget = new StaticTextWidget(this, font, xpos, ypos + 3, "04:32 59"); + //myCurrentTimeWidget->setFlags(WIDGET_CLEARBG); myLastTimeWidget = new StaticTextWidget(this, font, _w - H_BORDER - font.getStringWidth("XX:XX XX"), ypos + 3, "12:25 59"); xpos = myCurrentTimeWidget->getRight() + BUTTON_GAP * 4; @@ -230,10 +232,10 @@ TimeMachineDialog::TimeMachineDialog(OSystem& osystem, DialogContainer& parent, BUTTON_W, BUTTON_H, kPause); wid.push_back(myPauseWidget); myPauseWidget->clearFlags(WIDGET_ENABLED);*/ - myPlayWidget = new ButtonWidget(this, font, xpos, ypos - 2, buttonWidth + 4, buttonHeight + 4, PLAY, + myPlayWidget = new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight, PLAY, BUTTON_W, BUTTON_H, kPlay); wid.push_back(myPlayWidget); - xpos += buttonWidth + BUTTON_GAP*2 + 4; + xpos += buttonWidth + BUTTON_GAP*2; myUnwind1Widget = new ButtonWidget(this, font, xpos, ypos, buttonWidth, buttonHeight, UNWIND_1, BUTTON_W, BUTTON_H, kUnwind1); @@ -266,6 +268,10 @@ void TimeMachineDialog::center() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void TimeMachineDialog::loadConfig() { + surface().attributes().blending = true; + surface().attributes().blendalpha = 80; + surface().applyAttributes(); + handleWinds(); myMessageWidget->setLabel(""); } @@ -274,7 +280,7 @@ void TimeMachineDialog::loadConfig() void TimeMachineDialog::handleCommand(CommandSender* sender, int cmd, int data, int id) { -cerr << cmd << endl; +//cerr << cmd << endl; switch(cmd) { case kPlay: diff --git a/src/windows/Stella.vcxproj b/src/windows/Stella.vcxproj index c9225f627..8978f8ca8 100644 --- a/src/windows/Stella.vcxproj +++ b/src/windows/Stella.vcxproj @@ -111,7 +111,7 @@ /MP /std:c++latest %(AdditionalOptions) Disabled ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + FLAT_UI;BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) false EnableFastChecks MultiThreadedDLL @@ -142,7 +142,7 @@ /MP /std:c++latest %(AdditionalOptions) Disabled ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + FLAT_UI;BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) false EnableFastChecks MultiThreadedDLL @@ -171,7 +171,7 @@ true false ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + FLAT_UI;BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) MultiThreadedDLL false @@ -204,7 +204,7 @@ Default true ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + FLAT_UI;BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) MultiThreadedDLL false From d7ab2e6177d3c08777e957e9452e2a412709de28 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 3 Jan 2018 20:17:48 +0100 Subject: [PATCH 146/156] playing with transparency --- src/windows/Stella.vcxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/windows/Stella.vcxproj b/src/windows/Stella.vcxproj index 8978f8ca8..c9225f627 100644 --- a/src/windows/Stella.vcxproj +++ b/src/windows/Stella.vcxproj @@ -111,7 +111,7 @@ /MP /std:c++latest %(AdditionalOptions) Disabled ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - FLAT_UI;BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) false EnableFastChecks MultiThreadedDLL @@ -142,7 +142,7 @@ /MP /std:c++latest %(AdditionalOptions) Disabled ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - FLAT_UI;BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) false EnableFastChecks MultiThreadedDLL @@ -171,7 +171,7 @@ true false ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - FLAT_UI;BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) MultiThreadedDLL false @@ -204,7 +204,7 @@ Default true ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - FLAT_UI;BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) MultiThreadedDLL false From f9d243e503091b49a2f5ebcbf1f2ce543a7e40d3 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Fri, 5 Jan 2018 22:03:42 -0330 Subject: [PATCH 147/156] Fixed incorrect size in memset; this time I'll sizeof. --- src/emucore/TIASurface.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/emucore/TIASurface.cxx b/src/emucore/TIASurface.cxx index c16d525b4..d074bb2f3 100644 --- a/src/emucore/TIASurface.cxx +++ b/src/emucore/TIASurface.cxx @@ -54,7 +54,7 @@ TIASurface::TIASurface(OSystem& system) // Base TIA surface for use in taking snapshots in 1x mode myBaseTiaSurface = myFB.allocateSurface(kTIAW*2, kTIAH); - memset(myRGBFramebuffer, 0, AtariNTSC::outWidth(kTIAW) * kTIAH); + memset(myRGBFramebuffer, 0, sizeof(myRGBFramebuffer)); // Enable/disable threading in the NTSC TV effects renderer myNTSCFilter.enableThreading(myOSystem.settings().getBool("threads")); @@ -229,7 +229,7 @@ void TIASurface::enablePhosphor(bool enable, int blend) myTiaSurface->setDirty(); mySLineSurface->setDirty(); - memset(myRGBFramebuffer, 0, AtariNTSC::outWidth(kTIAW) * kTIAH * 4); + memset(myRGBFramebuffer, 0, sizeof(myRGBFramebuffer)); // Precalculate the average colors for the 'phosphor' effect if(myUsePhosphor) @@ -281,7 +281,7 @@ void TIASurface::enableNTSC(bool enable) myTiaSurface->setDirty(); mySLineSurface->setDirty(); - memset(myRGBFramebuffer, 0, AtariNTSC::outWidth(kTIAW) * kTIAH * 4); + memset(myRGBFramebuffer, 0, sizeof(myRGBFramebuffer)); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From c0edcaf0c909f5d0da4a5671a860bfc012e2c400 Mon Sep 17 00:00:00 2001 From: Christian Speckner Date: Sat, 6 Jan 2018 23:33:25 +0100 Subject: [PATCH 148/156] Sanitize halt and hardware state handling after CPU dispatch. --- .vscode/settings.json | 3 ++- src/debugger/Debugger.cxx | 13 +++++++++++ src/debugger/Debugger.hxx | 5 +++++ src/emucore/M6502.cxx | 45 ++++++++++++++++++++++++++------------- src/emucore/M6502.hxx | 15 +++++++++++++ src/emucore/tia/TIA.cxx | 9 +++----- 6 files changed, 68 insertions(+), 22 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 768dc0b74..b3bbb7fc3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -25,6 +25,7 @@ "string": "cpp", "string_view": "cpp", "system_error": "cpp", - "vector": "cpp" + "vector": "cpp", + "stdexcept": "cpp" } } diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index 28bc43409..266fb0269 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -781,6 +781,19 @@ void Debugger::unlockBankswitchState() myConsole.cartridge().unlockBank(); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void Debugger::update() +{ + if (myDialog) { + myDialog->setDirty(); + + // loadConfig is redeclared static in DebuggerDialog, hence the cast + static_cast(myDialog)->loadConfig(); + + myDialog->drawDialog(); + } +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Debugger::BuiltinFunction Debugger::ourBuiltinFunctions[NUM_BUILTIN_FUNCS] = { // left joystick: diff --git a/src/debugger/Debugger.hxx b/src/debugger/Debugger.hxx index 0324cbdc0..e44b36e6f 100644 --- a/src/debugger/Debugger.hxx +++ b/src/debugger/Debugger.hxx @@ -240,6 +240,11 @@ class Debugger : public DialogContainer void lockBankswitchState(); void unlockBankswitchState(); + /** + Update debugger status. + */ + void update(); + private: /** Save state of each debugger subsystem and, by default, mark all diff --git a/src/emucore/M6502.cxx b/src/emucore/M6502.cxx index 43159e15e..99039578f 100644 --- a/src/emucore/M6502.cxx +++ b/src/emucore/M6502.cxx @@ -215,6 +215,30 @@ void M6502::updateStepStateByInstruction() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool M6502::execute(uInt32 number) +{ + const ExecuteResult result = _execute(number); + + // Debugger hack: this ensures that stepping a "STA WSYNC" will actually end at the + // beginning of the next line (otherwise, the next instruction would be stepped in order for + // the halt to take effect). This is safe because as we know that the next cycle will be a read + // cycle anyway. + handleHalt(); + + // Make sure that the hardware state matches the current system clock. This is necessary + // to ensure that the state is displayed correctly in the debugger. The performance impact + // on emulation is negligible as M6502::execute is called only once per frame. + mySystem->tia().updateEmulation(); + mySystem->m6532().updateEmulation(); + +#ifdef DEBUGGER_SUPPORT + if (result == ExecuteResult::debuggerTrap && myDebugger) myDebugger->update(); +#endif + + return result != ExecuteResult::failure; +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +inline M6502::ExecuteResult M6502::_execute(uInt32 number) { // Clear all of the execution status bits except for the fatal error bit myExecutionStatus &= FatalErrorBit; @@ -236,13 +260,13 @@ bool M6502::execute(uInt32 number) myJustHitReadTrapFlag = myJustHitWriteTrapFlag = false; if(myDebugger && myDebugger->start(myHitTrapInfo.message, myHitTrapInfo.address, read)) { - return true; + return ExecuteResult::debuggerTrap; } } if(myBreakPoints.isInitialized() && myBreakPoints.isSet(PC)) if(myDebugger && myDebugger->start("BP: ", PC)) - return true; + return ExecuteResult::debuggerTrap; int cond = evalCondBreaks(); if(cond > -1) @@ -250,7 +274,7 @@ bool M6502::execute(uInt32 number) stringstream msg; msg << "CBP[" << Common::Base::HEX2 << cond << "]: " << myCondBreakNames[cond]; if(myDebugger && myDebugger->start(msg.str())) - return true; + return ExecuteResult::debuggerTrap; } cond = evalCondSaveStates(); @@ -303,31 +327,22 @@ bool M6502::execute(uInt32 number) // See if execution has been stopped if(myExecutionStatus & StopExecutionBit) { - // Debugger hack: this ensures that stepping a "STA WSYNC" will actually end at the - // beginning of the next line (otherwise, the next instruction would be stepped in order for - // the halt to take effect). This is safe because as we know that the next cycle will be a read - // cycle anyway. - handleHalt(); - // Yes, so answer that everything finished fine - return true; + return ExecuteResult::success; } // See if a fatal error has occured if(myExecutionStatus & FatalErrorBit) { // Yes, so answer that something when wrong - return false; + return ExecuteResult::failure; } // See if we've executed the specified number of instructions if(number == 0) { - // See above - handleHalt(); - // Yes, so answer that everything finished fine - return true; + return ExecuteResult::success; } } } diff --git a/src/emucore/M6502.hxx b/src/emucore/M6502.hxx index 440265e01..16b71d4cc 100644 --- a/src/emucore/M6502.hxx +++ b/src/emucore/M6502.hxx @@ -320,6 +320,21 @@ class M6502 : public Serializable */ void updateStepStateByInstruction(); + /** + The dispatch result. + */ + enum ExecuteResult { + success, + failure, + debuggerTrap + }; + + /** + This is the actual dispatch function that does the grunt work. M6502::execute + wraps it and makes sure that any pending halt is processed before returning. + */ + ExecuteResult _execute(uInt32 number); + private: /** Bit fields used to indicate that certain conditions need to be diff --git a/src/emucore/tia/TIA.cxx b/src/emucore/tia/TIA.cxx index 9a07fa4c9..a2805d9d2 100644 --- a/src/emucore/tia/TIA.cxx +++ b/src/emucore/tia/TIA.cxx @@ -1064,8 +1064,7 @@ TIA& TIA::updateScanline() { // Update frame by one scanline at a time uInt32 line = scanlines(); - while (line == scanlines() && mySystem->m6502().execute(1)) - updateEmulation(); + while (line == scanlines() && mySystem->m6502().execute(1)); return *this; } @@ -1074,8 +1073,7 @@ TIA& TIA::updateScanline() TIA& TIA::updateScanlineByStep() { // Update frame by one CPU instruction/color clock - if (mySystem->m6502().execute(1)) - updateEmulation(); + mySystem->m6502().execute(1); return *this; } @@ -1085,8 +1083,7 @@ TIA& TIA::updateScanlineByTrace(int target) { uInt32 count = 100; // only try up to 100 steps while (mySystem->m6502().getPC() != target && count-- && - mySystem->m6502().execute(1)) - updateEmulation(); + mySystem->m6502().execute(1)); return *this; } From 77158fd845e56fa1f4378c956fab61c7ae6c9ebd Mon Sep 17 00:00:00 2001 From: Christian Speckner Date: Sun, 7 Jan 2018 00:31:24 +0100 Subject: [PATCH 149/156] Always make sure that hardware state is consistent with a full step before dispatching the debugger. * Allows to revert much of the complexity of my previous fix. --- src/debugger/Debugger.cxx | 13 ------------- src/debugger/Debugger.hxx | 5 ----- src/emucore/M6502.cxx | 28 +++++++++++++--------------- src/emucore/M6502.hxx | 11 +---------- 4 files changed, 14 insertions(+), 43 deletions(-) diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index 266fb0269..28bc43409 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -781,19 +781,6 @@ void Debugger::unlockBankswitchState() myConsole.cartridge().unlockBank(); } -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Debugger::update() -{ - if (myDialog) { - myDialog->setDirty(); - - // loadConfig is redeclared static in DebuggerDialog, hence the cast - static_cast(myDialog)->loadConfig(); - - myDialog->drawDialog(); - } -} - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Debugger::BuiltinFunction Debugger::ourBuiltinFunctions[NUM_BUILTIN_FUNCS] = { // left joystick: diff --git a/src/debugger/Debugger.hxx b/src/debugger/Debugger.hxx index e44b36e6f..0324cbdc0 100644 --- a/src/debugger/Debugger.hxx +++ b/src/debugger/Debugger.hxx @@ -240,11 +240,6 @@ class Debugger : public DialogContainer void lockBankswitchState(); void unlockBankswitchState(); - /** - Update debugger status. - */ - void update(); - private: /** Save state of each debugger subsystem and, by default, mark all diff --git a/src/emucore/M6502.cxx b/src/emucore/M6502.cxx index 99039578f..367c80845 100644 --- a/src/emucore/M6502.cxx +++ b/src/emucore/M6502.cxx @@ -216,7 +216,7 @@ void M6502::updateStepStateByInstruction() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool M6502::execute(uInt32 number) { - const ExecuteResult result = _execute(number); + const bool status = _execute(number); // Debugger hack: this ensures that stepping a "STA WSYNC" will actually end at the // beginning of the next line (otherwise, the next instruction would be stepped in order for @@ -225,20 +225,15 @@ bool M6502::execute(uInt32 number) handleHalt(); // Make sure that the hardware state matches the current system clock. This is necessary - // to ensure that the state is displayed correctly in the debugger. The performance impact - // on emulation is negligible as M6502::execute is called only once per frame. + // to maintain a consistent state for the debugger after stepping. mySystem->tia().updateEmulation(); mySystem->m6532().updateEmulation(); -#ifdef DEBUGGER_SUPPORT - if (result == ExecuteResult::debuggerTrap && myDebugger) myDebugger->update(); -#endif - - return result != ExecuteResult::failure; + return status; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -inline M6502::ExecuteResult M6502::_execute(uInt32 number) +inline bool M6502::_execute(uInt32 number) { // Clear all of the execution status bits except for the fatal error bit myExecutionStatus &= FatalErrorBit; @@ -260,13 +255,13 @@ inline M6502::ExecuteResult M6502::_execute(uInt32 number) myJustHitReadTrapFlag = myJustHitWriteTrapFlag = false; if(myDebugger && myDebugger->start(myHitTrapInfo.message, myHitTrapInfo.address, read)) { - return ExecuteResult::debuggerTrap; + return true; } } if(myBreakPoints.isInitialized() && myBreakPoints.isSet(PC)) if(myDebugger && myDebugger->start("BP: ", PC)) - return ExecuteResult::debuggerTrap; + return true; int cond = evalCondBreaks(); if(cond > -1) @@ -274,7 +269,7 @@ inline M6502::ExecuteResult M6502::_execute(uInt32 number) stringstream msg; msg << "CBP[" << Common::Base::HEX2 << cond << "]: " << myCondBreakNames[cond]; if(myDebugger && myDebugger->start(msg.str())) - return ExecuteResult::debuggerTrap; + return true; } cond = evalCondSaveStates(); @@ -310,6 +305,9 @@ inline M6502::ExecuteResult M6502::_execute(uInt32 number) #ifdef DEBUGGER_SUPPORT if (myStepStateByInstruction) { + // Check out M6502::execute for an explanation. + handleHalt(); + tia.updateEmulation(); riot.updateEmulation(); } @@ -328,21 +326,21 @@ inline M6502::ExecuteResult M6502::_execute(uInt32 number) if(myExecutionStatus & StopExecutionBit) { // Yes, so answer that everything finished fine - return ExecuteResult::success; + return true; } // See if a fatal error has occured if(myExecutionStatus & FatalErrorBit) { // Yes, so answer that something when wrong - return ExecuteResult::failure; + return false; } // See if we've executed the specified number of instructions if(number == 0) { // Yes, so answer that everything finished fine - return ExecuteResult::success; + return true; } } } diff --git a/src/emucore/M6502.hxx b/src/emucore/M6502.hxx index 16b71d4cc..c0b114664 100644 --- a/src/emucore/M6502.hxx +++ b/src/emucore/M6502.hxx @@ -320,20 +320,11 @@ class M6502 : public Serializable */ void updateStepStateByInstruction(); - /** - The dispatch result. - */ - enum ExecuteResult { - success, - failure, - debuggerTrap - }; - /** This is the actual dispatch function that does the grunt work. M6502::execute wraps it and makes sure that any pending halt is processed before returning. */ - ExecuteResult _execute(uInt32 number); + bool _execute(uInt32 number); private: /** From ce195d71a1847bac2bdd08cf5c8fe2e1560be0da Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 7 Jan 2018 10:56:30 +0100 Subject: [PATCH 150/156] fixed #276 made sure that the rewind buttons always have correct state when entering debugger --- src/debugger/Debugger.cxx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index 28bc43409..95da6a018 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -619,9 +619,11 @@ void Debugger::setStartState() // Save initial state and add it to the rewind list (except when in currently rewinding) RewindManager& r = myOSystem.state().rewindManager(); - // avoid invalidating future states when entering the debugger during rewind - if (r.atLast()) + // avoid invalidating future states when entering the debugger e.g. during rewind + if(myOSystem.eventHandler().state() == EventHandlerState::EMULATION) addState("enter debugger"); + else + updateRewindbuttons(r); // Set the 're-disassemble' flag, but don't do it until the next scheduled time myDialog->rom().invalidate(false); From d9f135e884606b61410d0ab5d8cb5750ce9576c1 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 7 Jan 2018 17:48:34 +0100 Subject: [PATCH 151/156] preliminary documentation of Time Machine dialog --- docs/index.html | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/docs/index.html b/docs/index.html index ef7fd6b24..dbc1313c9 100644 --- a/docs/index.html +++ b/docs/index.html @@ -29,7 +29,9 @@
      • Locating Game Images (aka, ROMs)
      • Playing a Game
      • Keyboard Layout
      • +
      • Hotkeys
      • Controller Map
      • +
      • Stella's 'Time Machine'
      • Advanced Configuration
        @@ -619,6 +621,7 @@


        +

        Hotkeys

        Console Controls (can be remapped)

      •      @@ -3086,48 +3091,47 @@
        -

        Developer Settings dialog (States) TODO

        +

        Developer Settings dialog (Time Machine)

        - + @@ -3151,8 +3155,8 @@ diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index e9c5a04ec..2c0d86765 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -35,24 +35,24 @@ RewindManager::RewindManager(OSystem& system, StateManager& statemgr) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void RewindManager::setup() { - myLastContinuousAdd = false; + myLastTimeMachineAdd = false; string prefix = myOSystem.settings().getBool("dev.settings") ? "dev." : "plr."; - mySize = myOSystem.settings().getInt(prefix + "rewind.size"); + mySize = myOSystem.settings().getInt(prefix + "tm.size"); if(mySize != myStateList.capacity()) myStateList.resize(mySize); - myUncompressed = myOSystem.settings().getInt(prefix + "rewind.uncompressed"); + myUncompressed = myOSystem.settings().getInt(prefix + "tm.uncompressed"); myInterval = INTERVAL_CYCLES[0]; for(int i = 0; i < NUM_INTERVALS; ++i) - if(INT_SETTINGS[i] == myOSystem.settings().getString(prefix + "rewind.interval")) + if(INT_SETTINGS[i] == myOSystem.settings().getString(prefix + "tm.interval")) myInterval = INTERVAL_CYCLES[i]; myHorizon = HORIZON_CYCLES[NUM_HORIZONS-1]; for(int i = 0; i < NUM_HORIZONS; ++i) - if(HOR_SETTINGS[i] == myOSystem.settings().getString(prefix + "rewind.horizon")) + if(HOR_SETTINGS[i] == myOSystem.settings().getString(prefix + "tm.horizon")) myHorizon = HORIZON_CYCLES[i]; // calc interval growth factor @@ -91,10 +91,10 @@ void RewindManager::setup() } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool RewindManager::addState(const string& message, bool continuous) +bool RewindManager::addState(const string& message, bool timeMachine) { - // only check for continuous rewind states, ignore for debugger - if(continuous && myStateList.currentIsValid()) + // only check for Time Machine states, ignore for debugger + if(timeMachine && myStateList.currentIsValid()) { // check if the current state has the right interval from the last state RewindState& lastState = myStateList.current(); @@ -130,7 +130,7 @@ bool RewindManager::addState(const string& message, bool continuous) { state.message = message; state.cycles = myOSystem.console().tia().cycles(); - myLastContinuousAdd = continuous; + myLastTimeMachineAdd = timeMachine; return true; } return false; @@ -147,14 +147,14 @@ uInt32 RewindManager::rewindState(uInt32 numStates) { if(!atFirst()) { - if(!myLastContinuousAdd) + if(!myLastTimeMachineAdd) // Set internal current iterator to previous state (back in time), // since we will now processed this state myStateList.moveToPrevious(); else // except fif the last state was added automatically, // because that already happened one interval before - myLastContinuousAdd = false; + myLastTimeMachineAdd = false; RewindState& state = myStateList.current(); Serializer& s = state.data; diff --git a/src/common/RewindManager.hxx b/src/common/RewindManager.hxx index e7a17bde6..d07f37f97 100644 --- a/src/common/RewindManager.hxx +++ b/src/common/RewindManager.hxx @@ -103,7 +103,7 @@ class RewindManager @param message Message to display when replaying this state */ - bool addState(const string& message, bool continuous = false); + bool addState(const string& message, bool timeMachine = false); /** Rewind one level of the state list, and display the message associated @@ -142,7 +142,7 @@ class RewindManager uInt32 myInterval; uInt64 myHorizon; double myFactor; - bool myLastContinuousAdd; + bool myLastTimeMachineAdd; struct RewindState { Serializer data; // actual save state diff --git a/src/common/StateManager.cxx b/src/common/StateManager.cxx index 2ffcbbec6..7cfd39248 100644 --- a/src/common/StateManager.cxx +++ b/src/common/StateManager.cxx @@ -129,16 +129,16 @@ void StateManager::toggleRecordMode() #endif // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void StateManager::toggleRewindMode() +void StateManager::toggleTimeMachine() { bool devSettings = myOSystem.settings().getBool("dev.settings"); - myActiveMode = myActiveMode == Mode::Rewind ? Mode::Off : Mode::Rewind; - if(myActiveMode == Mode::Rewind) - myOSystem.frameBuffer().showMessage("Continuous rewind enabled"); + myActiveMode = myActiveMode == Mode::TimeMachine ? Mode::Off : Mode::TimeMachine; + if(myActiveMode == Mode::TimeMachine) + myOSystem.frameBuffer().showMessage("Time Machine enabled"); else - myOSystem.frameBuffer().showMessage("Continuous rewind disabled"); - myOSystem.settings().setValue(devSettings ? "dev.rewind" : "plr.rewind", myActiveMode == Mode::Rewind); + myOSystem.frameBuffer().showMessage("Time Machine disabled"); + myOSystem.settings().setValue(devSettings ? "dev.timemachine" : "plr.timemachine", myActiveMode == Mode::TimeMachine); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -160,8 +160,8 @@ void StateManager::update() { switch(myActiveMode) { - case Mode::Rewind: - myRewindManager->addState("continuous rewind", true); + case Mode::TimeMachine: + myRewindManager->addState("Time Machine", true); break; #if 0 @@ -357,7 +357,7 @@ void StateManager::reset() { myRewindManager->clear(); myActiveMode = myOSystem.settings().getBool( - myOSystem.settings().getBool("dev.settings") ? "dev.rewind" : "plr.rewind") ? Mode::Rewind : Mode::Off; + myOSystem.settings().getBool("dev.settings") ? "dev.timemachine" : "plr.timemachine") ? Mode::TimeMachine : Mode::Off; #if 0 myCurrentSlot = 0; diff --git a/src/common/StateManager.hxx b/src/common/StateManager.hxx index 910b0e7a9..8961fe8ca 100644 --- a/src/common/StateManager.hxx +++ b/src/common/StateManager.hxx @@ -35,7 +35,7 @@ class StateManager public: enum class Mode { Off, - Rewind, + TimeMachine, MovieRecord, MoviePlayback }; @@ -63,7 +63,7 @@ class StateManager Toggle state rewind recording mode; this uses the RewindManager for its functionality. */ - void toggleRewindMode(); + void toggleTimeMachine(); /** Sets state rewind recording mode; this uses the RewindManager diff --git a/src/debugger/CpuDebug.cxx b/src/debugger/CpuDebug.cxx index f580d3398..1d1386b62 100644 --- a/src/debugger/CpuDebug.cxx +++ b/src/debugger/CpuDebug.cxx @@ -142,6 +142,12 @@ int CpuDebug::c() const return mySystem.m6502().C; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +int CpuDebug::cycles() const +{ + return mySystem.m6502().cycles; +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CpuDebug::setPC(int pc) { @@ -220,6 +226,12 @@ void CpuDebug::setC(bool on) my6502.C = on; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void CpuDebug::setCycles(int cycles) +{ + my6502.cycles = cycles; +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CpuDebug::toggleN() { diff --git a/src/debugger/CpuDebug.hxx b/src/debugger/CpuDebug.hxx index 2d346e486..46889c945 100644 --- a/src/debugger/CpuDebug.hxx +++ b/src/debugger/CpuDebug.hxx @@ -61,6 +61,8 @@ class CpuDebug : public DebuggerSystem int z() const; int c() const; + int cycles() const; + void setPC(int pc); void setSP(int sp); void setPS(int ps); @@ -76,6 +78,8 @@ class CpuDebug : public DebuggerSystem void setZ(bool on); void setC(bool on); + void setCycles(int cycles); + void toggleN(); void toggleV(); void toggleB(); diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index b7f953d3d..f2f9c73f7 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -299,25 +299,25 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, bool state) switch(key) { case KBDK_LEFT: // Alt-left(-shift) rewinds 1(10) states - myOSystem.frameBuffer().resetPauseDelay(); + myOSystem.frameBuffer().setPauseDelay(); setEventState(S_PAUSE); myOSystem.state().rewindState((kbdShift(mod) && state) ? 10 : 1); break; case KBDK_RIGHT: // Alt-right(-shift) unwinds 1(10) states - myOSystem.frameBuffer().resetPauseDelay(); + myOSystem.frameBuffer().setPauseDelay(); setEventState(S_PAUSE); myOSystem.state().unwindState((kbdShift(mod) && state) ? 10 : 1); break; case KBDK_DOWN: // Alt-down rewinds to start of list - myOSystem.frameBuffer().resetPauseDelay(); + myOSystem.frameBuffer().setPauseDelay(); setEventState(S_PAUSE); myOSystem.state().rewindState(1000); break; case KBDK_UP: // Alt-up rewinds to end of list - myOSystem.frameBuffer().resetPauseDelay(); + myOSystem.frameBuffer().setPauseDelay(); setEventState(S_PAUSE); myOSystem.state().unwindState(1000); break; @@ -489,8 +489,8 @@ void EventHandler::handleKeyEvent(StellaKey key, StellaMod mod, bool state) myOSystem.frameBuffer().toggleFrameStats(); break; - case KBDK_R: // Alt-r toggles continuous store rewind states - myOSystem.state().toggleRewindMode(); + case KBDK_T: // Alt-t toggles Time Machine + myOSystem.state().toggleTimeMachine(); break; case KBDK_S: diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index 8f526af09..35c54e577 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -301,7 +301,7 @@ void FrameBuffer::update() // Show a pause message immediately and then every 7 seconds if (myPausedCount-- <= 0) { - resetPauseDelay(); + myPausedCount = uInt32(7 * myOSystem.frameRate()); showMessage("Paused", MessagePosition::MiddleCenter); } break; // S_PAUSE @@ -472,9 +472,9 @@ inline void FrameBuffer::drawMessage() } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void FrameBuffer::resetPauseDelay() +void FrameBuffer::setPauseDelay() { - myPausedCount = uInt32(7 * myOSystem.frameRate()); + myPausedCount = uInt32(2 * myOSystem.frameRate()); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/FrameBuffer.hxx b/src/emucore/FrameBuffer.hxx index 0c22d1955..575448d4b 100644 --- a/src/emucore/FrameBuffer.hxx +++ b/src/emucore/FrameBuffer.hxx @@ -147,7 +147,7 @@ class FrameBuffer /** Reset 'Paused' display delay counter */ - void resetPauseDelay(); + void setPauseDelay(); /** Allocate a new surface. The FrameBuffer class takes all responsibility diff --git a/src/emucore/Settings.cxx b/src/emucore/Settings.cxx index 4943d5003..a97208af9 100644 --- a/src/emucore/Settings.cxx +++ b/src/emucore/Settings.cxx @@ -155,11 +155,11 @@ Settings::Settings(OSystem& osystem) setInternal("plr.debugcolors", "false"); setInternal("plr.tiadriven", "false"); setInternal("plr.console", "2600"); // 7800 - setInternal("plr.rewind", false); - setInternal("plr.rewind.size", 100); - setInternal("plr.rewind.uncompressed", 30); - setInternal("plr.rewind.interval", "30f"); // = 0.5 seconds - setInternal("plr.rewind.horizon", "10m"); // = ~10 minutes + setInternal("plr.timemachine", false); + setInternal("plr.tm.size", 100); + setInternal("plr.tm.uncompressed", 30); + setInternal("plr.tm.interval", "30f"); // = 0.5 seconds + setInternal("plr.tm.horizon", "10m"); // = ~10 minutes // Thumb ARM emulation options setInternal("plr.thumb.trapfatal", "false"); @@ -175,11 +175,11 @@ Settings::Settings(OSystem& osystem) setInternal("dev.debugcolors", "false"); setInternal("dev.tiadriven", "true"); setInternal("dev.console", "2600"); // 7800 - setInternal("dev.rewind", true); - setInternal("dev.rewind.size", 100); - setInternal("dev.rewind.uncompressed", 60); - setInternal("dev.rewind.interval", "1f"); // = 1 frame - setInternal("dev.rewind.horizon", "10s"); // = ~10 seconds + setInternal("dev.timemachine", true); + setInternal("dev.tm.size", 100); + setInternal("dev.tm.uncompressed", 60); + setInternal("dev.tm.interval", "1f"); // = 1 frame + setInternal("dev.tm.horizon", "10s"); // = ~10 seconds // Thumb ARM emulation options setInternal("dev.thumb.trapfatal", "true"); } @@ -319,40 +319,40 @@ void Settings::validate() i = getInt("dev.tv.jitter_recovery"); if(i < 1 || i > 20) setInternal("dev.tv.jitter_recovery", "2"); - int size = getInt("dev.rewind.size"); + int size = getInt("dev.tm.size"); if(size < 20 || size > 1000) { - setInternal("dev.rewind.size", 20); + setInternal("dev.tm.size", 20); size = 20; } - i = getInt("dev.rewind.uncompressed"); - if(i < 0 || i > size) setInternal("dev.rewind.uncompressed", size); + i = getInt("dev.tm.uncompressed"); + if(i < 0 || i > size) setInternal("dev.tm.uncompressed", size); - /*i = getInt("dev.rewind.interval"); - if(i < 0 || i > 5) setInternal("dev.rewind.interval", 0); + /*i = getInt("dev.tm.interval"); + if(i < 0 || i > 5) setInternal("dev.tm.interval", 0); - i = getInt("dev.rewind.horizon"); - if(i < 0 || i > 6) setInternal("dev.rewind.horizon", 1);*/ + i = getInt("dev.tm.horizon"); + if(i < 0 || i > 6) setInternal("dev.tm.horizon", 1);*/ i = getInt("plr.tv.jitter_recovery"); if(i < 1 || i > 20) setInternal("plr.tv.jitter_recovery", "10"); - size = getInt("plr.rewind.size"); + size = getInt("plr.tm.size"); if(size < 20 || size > 1000) { - setInternal("plr.rewind.size", 20); + setInternal("plr.tm.size", 20); size = 20; } - i = getInt("plr.rewind.uncompressed"); - if(i < 0 || i > size) setInternal("plr.rewind.uncompressed", size); + i = getInt("plr.tm.uncompressed"); + if(i < 0 || i > size) setInternal("plr.tm.uncompressed", size); - /*i = getInt("plr.rewind.interval"); - if(i < 0 || i > 5) setInternal("plr.rewind.interval", 3); + /*i = getInt("plr.tm.interval"); + if(i < 0 || i > 5) setInternal("plr.tm.interval", 3); - i = getInt("plr.rewind.horizon"); - if(i < 0 || i > 6) setInternal("plr.rewind.horizon", 5);*/ + i = getInt("plr.tm.horizon"); + if(i < 0 || i > 6) setInternal("plr.tm.horizon", 5);*/ #ifdef SOUND_SUPPORT i = getInt("volume"); diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index 02b9e41b9..90d89b1b9 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -63,7 +63,7 @@ DeveloperDialog::DeveloperDialog(OSystem& osystem, DialogContainer& parent, addEmulationTab(font); addVideoTab(font); - addStatesTab(font); + addTimeMachineTab(font); addDebuggerTab(font); addDefaultOKCancelButtons(font); @@ -259,7 +259,7 @@ void DeveloperDialog::addVideoTab(const GUI::Font& font) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void DeveloperDialog::addStatesTab(const GUI::Font& font) +void DeveloperDialog::addTimeMachineTab(const GUI::Font& font) { const string INTERVALS[NUM_INTERVALS] = { " 1 frame", @@ -308,7 +308,7 @@ void DeveloperDialog::addStatesTab(const GUI::Font& font) int fontHeight = font.getFontHeight(); WidgetArray wid; VariantList items; - int tabID = myTab->addTab("States"); + int tabID = myTab->addTab("Time Machine"); // settings set mySettingsGroup2 = new RadioButtonGroup(); @@ -321,9 +321,9 @@ void DeveloperDialog::addStatesTab(const GUI::Font& font) wid.push_back(r); ypos += lineHeight + VGAP * 1; - myContinuousRewindWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT, ypos + 1, - "Continuous rewind", kRewind); - wid.push_back(myContinuousRewindWidget); + myTimeMachineWidget = new CheckboxWidget(myTab, font, HBORDER + INDENT, ypos + 1, + "Time Machine", kTimeMachine); + wid.push_back(myTimeMachineWidget); ypos += lineHeight + VGAP; int sWidth = font.getMaxCharWidth() * 8; @@ -518,11 +518,11 @@ void DeveloperDialog::loadSettings(SettingsSet set) myTVJitterRec[set] = instance().settings().getInt(prefix + "tv.jitter_recovery"); // States - myContinuousRewind[set] = instance().settings().getBool(prefix + "rewind"); - myStateSize[set] = instance().settings().getInt(prefix + "rewind.size"); - myUncompressed[set] = instance().settings().getInt(prefix + "rewind.uncompressed"); - myStateInterval[set] = instance().settings().getString(prefix + "rewind.interval"); - myStateHorizon[set] = instance().settings().getString(prefix + "rewind.horizon"); + myTimeMachine[set] = instance().settings().getBool(prefix + "timemachine"); + myStateSize[set] = instance().settings().getInt(prefix + "tm.size"); + myUncompressed[set] = instance().settings().getInt(prefix + "tm.uncompressed"); + myStateInterval[set] = instance().settings().getString(prefix + "tm.interval"); + myStateHorizon[set] = instance().settings().getString(prefix + "tm.horizon"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -550,11 +550,11 @@ void DeveloperDialog::saveSettings(SettingsSet set) instance().settings().setValue(prefix + "tv.jitter_recovery", myTVJitterRec[set]); // States - instance().settings().setValue(prefix + "rewind", myContinuousRewind[set]); - instance().settings().setValue(prefix + "rewind.size", myStateSize[set]); - instance().settings().setValue(prefix + "rewind.uncompressed", myUncompressed[set]); - instance().settings().setValue(prefix + "rewind.interval", myStateInterval[set]); - instance().settings().setValue(prefix + "rewind.horizon", myStateHorizon[set]); + instance().settings().setValue(prefix + "timemachine", myTimeMachine[set]); + instance().settings().setValue(prefix + "tm.size", myStateSize[set]); + instance().settings().setValue(prefix + "tm.uncompressed", myUncompressed[set]); + instance().settings().setValue(prefix + "tm.interval", myStateInterval[set]); + instance().settings().setValue(prefix + "tm.horizon", myStateHorizon[set]); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -585,7 +585,7 @@ void DeveloperDialog::getWidgetStates(SettingsSet set) myTVJitterRec[set] = myTVJitterRecWidget->getValue(); // States - myContinuousRewind[set] = myContinuousRewindWidget->getState(); + myTimeMachine[set] = myTimeMachineWidget->getState(); myStateSize[set] = myStateSizeWidget->getValue(); myUncompressed[set] = myUncompressedWidget->getValue(); myStateInterval[set] = myStateIntervalWidget->getSelected(); @@ -625,13 +625,13 @@ void DeveloperDialog::setWidgetStates(SettingsSet set) handleEnableDebugColors(); // States - myContinuousRewindWidget->setState(myContinuousRewind[set]); + myTimeMachineWidget->setState(myTimeMachine[set]); myStateSizeWidget->setValue(myStateSize[set]); myUncompressedWidget->setValue(myUncompressed[set]); myStateIntervalWidget->setSelected(myStateInterval[set]); myStateHorizonWidget->setSelected(myStateHorizon[set]); - handleRewind(); + handleTimeMachine(); handleSize(); handleUncompressed(); handleInterval(); @@ -715,8 +715,8 @@ void DeveloperDialog::saveConfig() // update RewindManager instance().state().rewindManager().setup(); - instance().state().setRewindMode(myContinuousRewindWidget->getState() ? - StateManager::Mode::Rewind : StateManager::Mode::Off); + instance().state().setRewindMode(myTimeMachineWidget->getState() ? + StateManager::Mode::TimeMachine : StateManager::Mode::Off); #ifdef DEBUGGER_SUPPORT // Debugger font style @@ -768,7 +768,7 @@ void DeveloperDialog::setDefaults() break; case 2: // States - myContinuousRewind[set] = devSettings ? true : false; + myTimeMachine[set] = devSettings ? true : false; myStateSize[set] = 100; myUncompressed[set] = devSettings ? 60 : 30; myStateInterval[set] = devSettings ? "1f" : "30f"; @@ -827,8 +827,8 @@ void DeveloperDialog::handleCommand(CommandSender* sender, int cmd, int data, in instance().console().tia().driveUnusedPinsRandom(myUndrivenPinsWidget->getState()); break; - case kRewind: - handleRewind(); + case kTimeMachine: + handleTimeMachine(); break; case kSizeChanged: @@ -947,9 +947,9 @@ void DeveloperDialog::handleConsole() } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void DeveloperDialog::handleRewind() +void DeveloperDialog::handleTimeMachine() { - bool enable = myContinuousRewindWidget->getState(); + bool enable = myTimeMachineWidget->getState(); myStateSizeWidget->setEnabled(enable); myStateSizeLabelWidget->setEnabled(enable); diff --git a/src/gui/DeveloperDialog.hxx b/src/gui/DeveloperDialog.hxx index db0388eb4..ca5f399c0 100644 --- a/src/gui/DeveloperDialog.hxx +++ b/src/gui/DeveloperDialog.hxx @@ -63,11 +63,11 @@ class DeveloperDialog : public Dialog kTVJitter = 'DVjt', kTVJitterChanged = 'DVjr', kPPinCmd = 'DVpn', - kRewind = 'DSrw', - kSizeChanged = 'DSsz', - kUncompressedChanged = 'DSuc', - kIntervalChanged = 'DSin', - kHorizonChanged = 'DShz', + kTimeMachine = 'DTtm', + kSizeChanged = 'DTsz', + kUncompressedChanged = 'DTuc', + kIntervalChanged = 'DTin', + kHorizonChanged = 'DThz', kP0ColourChangedCmd = 'GOp0', kM0ColourChangedCmd = 'GOm0', kP1ColourChangedCmd = 'GOp1', @@ -117,7 +117,7 @@ class DeveloperDialog : public Dialog // States widgets RadioButtonGroup* mySettingsGroup2; - CheckboxWidget* myContinuousRewindWidget; + CheckboxWidget* myTimeMachineWidget; SliderWidget* myStateSizeWidget; StaticTextWidget* myStateSizeLabelWidget; SliderWidget* myUncompressedWidget; @@ -149,7 +149,7 @@ class DeveloperDialog : public Dialog bool myUndrivenPins[2]; bool myThumbException[2]; // States sets - bool myContinuousRewind[2]; + bool myTimeMachine[2]; int myStateSize[2]; int myUncompressed[2]; string myStateInterval[2]; @@ -157,7 +157,7 @@ class DeveloperDialog : public Dialog private: void addEmulationTab(const GUI::Font& font); - void addStatesTab(const GUI::Font& font); + void addTimeMachineTab(const GUI::Font& font); void addVideoTab(const GUI::Font& font); void addDebuggerTab(const GUI::Font& font); // Add Defaults, OK and Cancel buttons @@ -176,7 +176,7 @@ class DeveloperDialog : public Dialog void handleDebugColours(int cmd, int color); void handleDebugColours(const string& colors); - void handleRewind(); + void handleTimeMachine(); void handleSize(); void handleUncompressed(); void handleInterval(); diff --git a/src/gui/HelpDialog.cxx b/src/gui/HelpDialog.cxx index 0ccdb01a5..e2fcba06c 100644 --- a/src/gui/HelpDialog.cxx +++ b/src/gui/HelpDialog.cxx @@ -153,9 +153,9 @@ void HelpDialog::updateStrings(uInt8 page, uInt8 lines, string& title) ADD_BIND("Ctrl PgUp", "Increase Display.Height"); ADD_BIND("Ctrl PgDn", "Decrease Display.Height"); ADD_LINE(); - ADD_BIND("Alt L", "Toggle frame stats"); - ADD_BIND("Alt ,", "Toggle 'Debug Colors' mode"); - ADD_BIND("Alt r", "Toggle continuous rewind"); + ADD_BIND(ALT_" L", "Toggle frame stats"); + ADD_BIND(ALT_" ,", "Toggle 'Debug Colors' mode"); + ADD_BIND(ALT_" t", "Toggle 'Time Machine' mode"); break; case 5: From 9f7270a70d6b297360da5a425673d3cf17d64146 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Fri, 15 Dec 2017 18:13:29 +0100 Subject: [PATCH 072/156] '_cycles' pseudo register added (returns cycles of last instruction) --- src/debugger/Debugger.cxx | 1 + src/debugger/Debugger.hxx | 2 +- src/emucore/M6502.cxx | 7 +++++++ src/emucore/M6502.hxx | 2 ++ src/yacc/YaccParser.cxx | 2 ++ 5 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index 08a2c251f..549cd1dcb 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -802,6 +802,7 @@ Debugger::BuiltinFunction Debugger::ourBuiltinFunctions[NUM_BUILTIN_FUNCS] = { Debugger::PseudoRegister Debugger::ourPseudoRegisters[NUM_PSEUDO_REGS] = { { "_bank", "Currently selected bank" }, { "_cclocks", "Color clocks on current scanline" }, + { "_cycles", "Number of cycles of last instruction" }, { "_cycleshi", "Higher 32 bits of number of cycles since emulation started" }, { "_cycleslo", "Lower 32 bits of number of cycles since emulation started" }, { "_fcount", "Number of frames since emulation started" }, diff --git a/src/debugger/Debugger.hxx b/src/debugger/Debugger.hxx index f3fdcd30c..293063b22 100644 --- a/src/debugger/Debugger.hxx +++ b/src/debugger/Debugger.hxx @@ -315,7 +315,7 @@ class Debugger : public DialogContainer string name, help; }; static const uInt32 NUM_BUILTIN_FUNCS = 18; - static const uInt32 NUM_PSEUDO_REGS = 11; + static const uInt32 NUM_PSEUDO_REGS = 12; static BuiltinFunction ourBuiltinFunctions[NUM_BUILTIN_FUNCS]; static PseudoRegister ourPseudoRegisters[NUM_PSEUDO_REGS]; diff --git a/src/emucore/M6502.cxx b/src/emucore/M6502.cxx index 2df1db8eb..ae16b9f64 100644 --- a/src/emucore/M6502.cxx +++ b/src/emucore/M6502.cxx @@ -52,6 +52,7 @@ M6502::M6502(const Settings& settings) mySettings(settings), A(0), X(0), Y(0), SP(0), IR(0), PC(0), N(false), V(false), B(false), D(false), I(false), notZ(false), C(false), + cycles(0), myNumberOfDistinctAccesses(0), myLastAddress(0), myLastPeekAddress(0), @@ -99,6 +100,8 @@ void M6502::reset() PS(BSPF::containsIgnoreCase(cpurandom, "P") ? mySystem->randGenerator().next() : 0x20); + cycles = 0; + // Load PC from the reset vector PC = uInt16(mySystem->peek(0xfffc)) | (uInt16(mySystem->peek(0xfffd)) << 8); @@ -124,6 +127,7 @@ inline uInt8 M6502::peek(uInt16 address, uInt8 flags) } //////////////////////////////////////////////// mySystem->incrementCycles(SYSTEM_CYCLES_PER_CPU); + cycles += SYSTEM_CYCLES_PER_CPU; uInt8 result = mySystem->peek(address, flags); myLastPeekAddress = address; @@ -157,6 +161,7 @@ inline void M6502::poke(uInt16 address, uInt8 value, uInt8 flags) } //////////////////////////////////////////////// mySystem->incrementCycles(SYSTEM_CYCLES_PER_CPU); + cycles += SYSTEM_CYCLES_PER_CPU; mySystem->poke(address, value, flags); myLastPokeAddress = address; @@ -238,6 +243,7 @@ bool M6502::execute(uInt32 number) // Reset the peek/poke address pointers myLastPeekAddress = myLastPokeAddress = myDataAddressForPoke = 0; + cycles = 0; // Fetch instruction at the program counter IR = peek(PC++, DISASM_CODE); // This address represents a code section @@ -251,6 +257,7 @@ bool M6502::execute(uInt32 number) // Oops, illegal instruction executed so set fatal error flag myExecutionStatus |= FatalErrorBit; } + //cycles = mySystem->cycles() - c0; } // See if we need to handle an interrupt diff --git a/src/emucore/M6502.hxx b/src/emucore/M6502.hxx index 96a890b7a..8a5a38dc3 100644 --- a/src/emucore/M6502.hxx +++ b/src/emucore/M6502.hxx @@ -348,6 +348,8 @@ class M6502 : public Serializable bool notZ; // Z flag complement for processor status register bool C; // C flag for processor status register + uInt8 cycles; // cycles of last instruction + /// Indicates the numer of distinct memory accesses uInt32 myNumberOfDistinctAccesses; diff --git a/src/yacc/YaccParser.cxx b/src/yacc/YaccParser.cxx index 80bc01551..891989d87 100644 --- a/src/yacc/YaccParser.cxx +++ b/src/yacc/YaccParser.cxx @@ -219,6 +219,8 @@ CpuMethod getCpuSpecial(char* ch) return &CpuDebug::i; else if(BSPF::equalsIgnoreCase(ch, "b")) return &CpuDebug::b; + else if(BSPF::equalsIgnoreCase(ch, "_cycles")) + return &CpuDebug::cycles; else return nullptr; } From 2f57ccb4636a591587fdbea5b287ed5d3a0a2e62 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Fri, 15 Dec 2017 18:21:27 +0100 Subject: [PATCH 073/156] new rewind classes added to VS project --- src/windows/Stella.vcxproj | 4 ++++ src/windows/Stella.vcxproj.filters | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/windows/Stella.vcxproj b/src/windows/Stella.vcxproj index 7416e1085..37c361957 100644 --- a/src/windows/Stella.vcxproj +++ b/src/windows/Stella.vcxproj @@ -345,6 +345,8 @@ + + @@ -646,6 +648,8 @@ + + diff --git a/src/windows/Stella.vcxproj.filters b/src/windows/Stella.vcxproj.filters index b56548ada..5631a0089 100644 --- a/src/windows/Stella.vcxproj.filters +++ b/src/windows/Stella.vcxproj.filters @@ -885,6 +885,12 @@ Source Files\debugger + + Source Files\gui + + + Source Files\gui + @@ -1808,6 +1814,12 @@ Header Files\debugger + + Header Files\gui + + + Header Files\gui + From 50fc9a6733c26e2b9500aef7f94407da39e85b93 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Fri, 15 Dec 2017 19:06:06 +0100 Subject: [PATCH 074/156] doc updated for _cycles pseudo-register --- Changes.txt | 7 +++++-- docs/debugger.html | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Changes.txt b/Changes.txt index 74c0c0e7e..4981d09d3 100644 --- a/Changes.txt +++ b/Changes.txt @@ -86,12 +86,15 @@ * Added 'Options...' button to debugger which gives access to the options menu during debugging. - * Added debugger pseudo-register '_fcycles', which gives the number of - CPU cycles that have occurred since the frame started. + * Added debugger pseudo-register '_cycles', which gives the number of + CPU cycles of the last instruction. * Added debugger pseudo-register '_cyclesLo' and '_cyclesHi', which give the number of CPU cycles that have occurred since emulation started. + * Added debugger pseudo-register '_fcycles', which gives the number of + CPU cycles that have occurred since the frame started. + * Extended debugger 'dump' command to take a second argument, indicating the end of the range to dump data. diff --git a/docs/debugger.html b/docs/debugger.html index 29d9f5d36..08bb9149f 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -738,6 +738,7 @@ that holds 'number of scanlines' on an actual console).

        + From 0d609f6845b3de6ad0134ec35ef998b72686bc4a Mon Sep 17 00:00:00 2001 From: thrust26 Date: Fri, 15 Dec 2017 19:12:46 +0100 Subject: [PATCH 075/156] renamed '_cycles' into '_icycles' (fits better) --- Changes.txt | 6 +++--- docs/debugger.html | 2 +- src/debugger/CpuDebug.cxx | 6 +++--- src/debugger/CpuDebug.hxx | 2 +- src/debugger/Debugger.cxx | 2 +- src/emucore/M6502.cxx | 10 +++++----- src/emucore/M6502.hxx | 2 +- src/yacc/YaccParser.cxx | 4 ++-- 8 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Changes.txt b/Changes.txt index 4981d09d3..f8f14a0e6 100644 --- a/Changes.txt +++ b/Changes.txt @@ -86,15 +86,15 @@ * Added 'Options...' button to debugger which gives access to the options menu during debugging. - * Added debugger pseudo-register '_cycles', which gives the number of - CPU cycles of the last instruction. - * Added debugger pseudo-register '_cyclesLo' and '_cyclesHi', which give the number of CPU cycles that have occurred since emulation started. * Added debugger pseudo-register '_fcycles', which gives the number of CPU cycles that have occurred since the frame started. + * Added debugger pseudo-register '_icycles', which gives the number of + CPU cycles of the last instruction. + * Extended debugger 'dump' command to take a second argument, indicating the end of the range to dump data. diff --git a/docs/debugger.html b/docs/debugger.html index 08bb9149f..88d3eb3f2 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -738,11 +738,11 @@ that holds 'number of scanlines' on an actual console).

        - + diff --git a/src/debugger/CpuDebug.cxx b/src/debugger/CpuDebug.cxx index 1d1386b62..d90d22c8d 100644 --- a/src/debugger/CpuDebug.cxx +++ b/src/debugger/CpuDebug.cxx @@ -143,9 +143,9 @@ int CpuDebug::c() const } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -int CpuDebug::cycles() const +int CpuDebug::icycles() const { - return mySystem.m6502().cycles; + return mySystem.m6502().icycles; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -229,7 +229,7 @@ void CpuDebug::setC(bool on) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CpuDebug::setCycles(int cycles) { - my6502.cycles = cycles; + my6502.icycles = cycles; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/debugger/CpuDebug.hxx b/src/debugger/CpuDebug.hxx index 46889c945..41a0c7991 100644 --- a/src/debugger/CpuDebug.hxx +++ b/src/debugger/CpuDebug.hxx @@ -61,7 +61,7 @@ class CpuDebug : public DebuggerSystem int z() const; int c() const; - int cycles() const; + int icycles() const; void setPC(int pc); void setSP(int sp); diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index 549cd1dcb..308ec73a0 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -802,11 +802,11 @@ Debugger::BuiltinFunction Debugger::ourBuiltinFunctions[NUM_BUILTIN_FUNCS] = { Debugger::PseudoRegister Debugger::ourPseudoRegisters[NUM_PSEUDO_REGS] = { { "_bank", "Currently selected bank" }, { "_cclocks", "Color clocks on current scanline" }, - { "_cycles", "Number of cycles of last instruction" }, { "_cycleshi", "Higher 32 bits of number of cycles since emulation started" }, { "_cycleslo", "Lower 32 bits of number of cycles since emulation started" }, { "_fcount", "Number of frames since emulation started" }, { "_fcycles", "Number of cycles since frame started" }, + { "_icycles", "Number of cycles of last instruction" }, { "_rwport", "Address at which a read from a write port occurred" }, { "_scan", "Current scanline count" }, { "_scycles", "Number of cycles in current scanline" }, diff --git a/src/emucore/M6502.cxx b/src/emucore/M6502.cxx index ae16b9f64..21b49c3ed 100644 --- a/src/emucore/M6502.cxx +++ b/src/emucore/M6502.cxx @@ -52,7 +52,7 @@ M6502::M6502(const Settings& settings) mySettings(settings), A(0), X(0), Y(0), SP(0), IR(0), PC(0), N(false), V(false), B(false), D(false), I(false), notZ(false), C(false), - cycles(0), + icycles(0), myNumberOfDistinctAccesses(0), myLastAddress(0), myLastPeekAddress(0), @@ -100,7 +100,7 @@ void M6502::reset() PS(BSPF::containsIgnoreCase(cpurandom, "P") ? mySystem->randGenerator().next() : 0x20); - cycles = 0; + icycles = 0; // Load PC from the reset vector PC = uInt16(mySystem->peek(0xfffc)) | (uInt16(mySystem->peek(0xfffd)) << 8); @@ -127,7 +127,7 @@ inline uInt8 M6502::peek(uInt16 address, uInt8 flags) } //////////////////////////////////////////////// mySystem->incrementCycles(SYSTEM_CYCLES_PER_CPU); - cycles += SYSTEM_CYCLES_PER_CPU; + icycles += SYSTEM_CYCLES_PER_CPU; uInt8 result = mySystem->peek(address, flags); myLastPeekAddress = address; @@ -161,7 +161,7 @@ inline void M6502::poke(uInt16 address, uInt8 value, uInt8 flags) } //////////////////////////////////////////////// mySystem->incrementCycles(SYSTEM_CYCLES_PER_CPU); - cycles += SYSTEM_CYCLES_PER_CPU; + icycles += SYSTEM_CYCLES_PER_CPU; mySystem->poke(address, value, flags); myLastPokeAddress = address; @@ -243,7 +243,7 @@ bool M6502::execute(uInt32 number) // Reset the peek/poke address pointers myLastPeekAddress = myLastPokeAddress = myDataAddressForPoke = 0; - cycles = 0; + icycles = 0; // Fetch instruction at the program counter IR = peek(PC++, DISASM_CODE); // This address represents a code section diff --git a/src/emucore/M6502.hxx b/src/emucore/M6502.hxx index 8a5a38dc3..16feb2459 100644 --- a/src/emucore/M6502.hxx +++ b/src/emucore/M6502.hxx @@ -348,7 +348,7 @@ class M6502 : public Serializable bool notZ; // Z flag complement for processor status register bool C; // C flag for processor status register - uInt8 cycles; // cycles of last instruction + uInt8 icycles; // cycles of last instruction /// Indicates the numer of distinct memory accesses uInt32 myNumberOfDistinctAccesses; diff --git a/src/yacc/YaccParser.cxx b/src/yacc/YaccParser.cxx index 891989d87..dc3f0f921 100644 --- a/src/yacc/YaccParser.cxx +++ b/src/yacc/YaccParser.cxx @@ -219,8 +219,8 @@ CpuMethod getCpuSpecial(char* ch) return &CpuDebug::i; else if(BSPF::equalsIgnoreCase(ch, "b")) return &CpuDebug::b; - else if(BSPF::equalsIgnoreCase(ch, "_cycles")) - return &CpuDebug::cycles; + else if(BSPF::equalsIgnoreCase(ch, "_icycles")) + return &CpuDebug::icycles; else return nullptr; } From 8e7d0aa7b3e667a0bcc649c1da53b60385c39315 Mon Sep 17 00:00:00 2001 From: Christian Speckner Date: Fri, 15 Dec 2017 23:53:11 +0100 Subject: [PATCH 076/156] Fix frame manager serialization. Closes #267. --- src/emucore/tia/frame-manager/AbstractFrameManager.cxx | 2 ++ src/emucore/tia/frame-manager/FrameManager.cxx | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/emucore/tia/frame-manager/AbstractFrameManager.cxx b/src/emucore/tia/frame-manager/AbstractFrameManager.cxx index 254473ff0..5d796f7dc 100644 --- a/src/emucore/tia/frame-manager/AbstractFrameManager.cxx +++ b/src/emucore/tia/frame-manager/AbstractFrameManager.cxx @@ -125,6 +125,7 @@ bool AbstractFrameManager::save(Serializer& out) const out.putBool(myIsRendering); out.putBool(myVsync); out.putBool(myVblank); + out.putInt(myCurrentFrameTotalLines); out.putInt(myCurrentFrameFinalLines); out.putInt(myPreviousFrameFinalLines); out.putInt(myTotalFrames); @@ -149,6 +150,7 @@ bool AbstractFrameManager::load(Serializer& in) myIsRendering = in.getBool(); myVsync = in.getBool(); myVblank = in.getBool(); + myCurrentFrameTotalLines = in.getInt(); myCurrentFrameFinalLines = in.getInt(); myPreviousFrameFinalLines = in.getInt(); myTotalFrames = in.getInt(); diff --git a/src/emucore/tia/frame-manager/FrameManager.cxx b/src/emucore/tia/frame-manager/FrameManager.cxx index 02196d06d..8c67a2a7a 100644 --- a/src/emucore/tia/frame-manager/FrameManager.cxx +++ b/src/emucore/tia/frame-manager/FrameManager.cxx @@ -214,6 +214,7 @@ bool FrameManager::onSave(Serializer& out) const out.putInt(myFrameLines); out.putInt(myHeight); out.putInt(myFixedHeight); + out.putInt(myYStart); out.putBool(myJitterEnabled); @@ -240,6 +241,7 @@ bool FrameManager::onLoad(Serializer& in) myFrameLines = in.getInt(); myHeight = in.getInt(); myFixedHeight = in.getInt(); + myYStart = in.getInt(); myJitterEnabled = in.getBool(); From 31b459ac8487b3929627697211d4b862d1a56440 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sat, 16 Dec 2017 09:46:25 +0100 Subject: [PATCH 077/156] fixed #269 --- src/debugger/Debugger.cxx | 40 ++++++++++++++++++++++----------------- src/debugger/Debugger.hxx | 13 ++++++++----- src/emucore/M6502.cxx | 2 +- 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index 308ec73a0..1f4a5c16a 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -270,7 +270,7 @@ void Debugger::loadState(int state) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - int Debugger::step() { - mySystem.clearDirtyPages(); + saveOldState(); uInt64 startCycle = mySystem.cycles(); @@ -278,7 +278,7 @@ int Debugger::step() myOSystem.console().tia().updateScanlineByStep().flushLineCache(); lockBankswitchState(); - saveOldState("step"); + addState("step"); return int(mySystem.cycles() - startCycle); } @@ -297,7 +297,7 @@ int Debugger::trace() // 32 is the 6502 JSR instruction: if(mySystem.peek(myCpuDebug->pc()) == 32) { - mySystem.clearDirtyPages(); + saveOldState(); uInt64 startCycle = mySystem.cycles(); int targetPC = myCpuDebug->pc() + 3; // return address @@ -306,7 +306,7 @@ int Debugger::trace() myOSystem.console().tia().updateScanlineByTrace(targetPC).flushLineCache(); lockBankswitchState(); - saveOldState("trace"); + addState("trace"); return int(mySystem.cycles() - startCycle); } else @@ -485,7 +485,7 @@ void Debugger::nextScanline(int lines) ostringstream buf; buf << "scanline + " << lines; - mySystem.clearDirtyPages(); + saveOldState(); unlockBankswitchState(); while(lines) @@ -495,7 +495,7 @@ void Debugger::nextScanline(int lines) } lockBankswitchState(); - saveOldState(buf.str()); + addState(buf.str()); myOSystem.console().tia().flushLineCache(); } @@ -505,7 +505,7 @@ void Debugger::nextFrame(int frames) ostringstream buf; buf << "frame + " << frames; - mySystem.clearDirtyPages(); + saveOldState(); unlockBankswitchState(); while(frames) @@ -515,7 +515,7 @@ void Debugger::nextFrame(int frames) } lockBankswitchState(); - saveOldState(buf.str()); + addState(buf.str()); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -588,20 +588,24 @@ bool Debugger::patchROM(uInt16 addr, uInt8 value) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Debugger::saveOldState(string rewindMsg) +void Debugger::saveOldState(bool clearDirtyPages) { + if (clearDirtyPages) + mySystem.clearDirtyPages(); + myCartDebug->saveOldState(); myCpuDebug->saveOldState(); myRiotDebug->saveOldState(); myTiaDebug->saveOldState(); +} - // Add another rewind level to the Undo list - if(rewindMsg != "") - { - RewindManager& r = myOSystem.state().rewindManager(); - r.addState(rewindMsg); - updateRewindbuttons(r); - } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void Debugger::addState(string rewindMsg) +{ + // Add another rewind level to the Time Machine buffer + RewindManager& r = myOSystem.state().rewindManager(); + r.addState(rewindMsg); + updateRewindbuttons(r); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -612,7 +616,9 @@ void Debugger::setStartState() // Save initial state and add it to the rewind list (except when in currently rewinding) RewindManager& r = myOSystem.state().rewindManager(); - saveOldState(r.atLast() ? "enter debugger" : ""); + saveOldState(false); + if (r.atLast()) + addState("enter debugger"); // Set the 're-disassemble' flag, but don't do it until the next scheduled time myDialog->rom().invalidate(false); diff --git a/src/debugger/Debugger.hxx b/src/debugger/Debugger.hxx index 293063b22..900f064d8 100644 --- a/src/debugger/Debugger.hxx +++ b/src/debugger/Debugger.hxx @@ -241,12 +241,15 @@ class Debugger : public DialogContainer private: /** - Save state of each debugger subsystem. - - If a message is provided, we assume that a rewind state should - be saved with the given message. + Save state of each debugger subsystem and, by default, mark all + pages as clean (ie, turn off the dirty flag). */ - void saveOldState(string rewindMsg = ""); + void saveOldState(bool clearDirtyPages = true); + + /** + Saves a rewind state with the given message. + */ + void addState(string rewindMsg); /** Set initial state before entering the debugger. diff --git a/src/emucore/M6502.cxx b/src/emucore/M6502.cxx index 21b49c3ed..ba0387944 100644 --- a/src/emucore/M6502.cxx +++ b/src/emucore/M6502.cxx @@ -233,7 +233,7 @@ bool M6502::execute(uInt32 number) cond = evalCondSaveStates(); if(cond > -1) { - myDebugger->saveOldState("conditional savestate"); + myDebugger->addState("conditional savestate"); } #endif // DEBUGGER_SUPPORT From b6080e1701a93bcf224b503873e7133bdc5e8373 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sat, 16 Dec 2017 10:54:45 +0100 Subject: [PATCH 078/156] fixed #270 --- src/debugger/Debugger.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/debugger/Debugger.cxx b/src/debugger/Debugger.cxx index 1f4a5c16a..58efb4265 100644 --- a/src/debugger/Debugger.cxx +++ b/src/debugger/Debugger.cxx @@ -530,7 +530,7 @@ uInt16 Debugger::windStates(uInt16 numStates, bool unwind, string& message) { RewindManager& r = myOSystem.state().rewindManager(); - mySystem.clearDirtyPages(); + saveOldState(); unlockBankswitchState(); @@ -617,6 +617,7 @@ void Debugger::setStartState() // Save initial state and add it to the rewind list (except when in currently rewinding) RewindManager& r = myOSystem.state().rewindManager(); saveOldState(false); + // avoid invalidating future states when entering the debugger during rewind if (r.atLast()) addState("enter debugger"); From 376daae7138265a12de74fb5ad41b858803529bc Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sat, 16 Dec 2017 10:59:35 +0100 Subject: [PATCH 079/156] fix #270 added to change log --- Changes.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Changes.txt b/Changes.txt index f8f14a0e6..08c239241 100644 --- a/Changes.txt +++ b/Changes.txt @@ -48,6 +48,9 @@ information). In the case of 'saveses', the filename is now named based on the date and time of when the command was entered. + * Fixed change tracking bug during rewind; changes were accumulated + instead of being displayed only for the last rewind step. + * Fixed bug with saving snapshots in 1x mode; there was graphical corruption in some cases. Such snapshots also now include any TV effects / phosphor blending currently in use. From e5d7c23412d547f0be18537fec4620def766fd6a Mon Sep 17 00:00:00 2001 From: Christian Speckner Date: Sat, 16 Dec 2017 21:28:44 +0100 Subject: [PATCH 080/156] Update TIA and RIOT state in lockstep with the CPU if any debugger expressions are registered. --- src/emucore/M6502.cxx | 49 ++++++++++++++++++++++++++++++++++++++++- src/emucore/M6502.hxx | 8 +++++++ src/emucore/M6532.hxx | 7 ++++-- src/emucore/tia/TIA.hxx | 10 ++++----- 4 files changed, 66 insertions(+), 8 deletions(-) diff --git a/src/emucore/M6502.cxx b/src/emucore/M6502.cxx index ba0387944..58166c59b 100644 --- a/src/emucore/M6502.cxx +++ b/src/emucore/M6502.cxx @@ -20,6 +20,8 @@ #include "Expression.hxx" #include "CartDebug.hxx" #include "PackedBitArray.hxx" + #include "TIA.hxx" + #include "M6532.hxx" // Flags for disassembly types #define DISASM_CODE CartDebug::CODE @@ -65,7 +67,8 @@ M6502::M6502(const Settings& settings) myLastSrcAddressY(-1), myDataAddressForPoke(0), myOnHaltCallback(nullptr), - myHaltRequested(false) + myHaltRequested(false), + myStepStateByInstruction(false) { #ifdef DEBUGGER_SUPPORT myDebugger = nullptr; @@ -197,12 +200,23 @@ inline void M6502::handleHalt() } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void M6502::updateStepStateByInstruction() +{ + myStepStateByInstruction = myCondBreaks.size() || myCondSaveStates.size() || myTrapConds.size(); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool M6502::execute(uInt32 number) { // Clear all of the execution status bits except for the fatal error bit myExecutionStatus &= FatalErrorBit; +#ifdef DEBUGGER_SUPPORT + TIA& tia = mySystem->tia(); + M6532& riot = mySystem->m6532(); +#endif + // Loop until execution is stopped or a fatal error occurs for(;;) { @@ -258,6 +272,13 @@ bool M6502::execute(uInt32 number) myExecutionStatus |= FatalErrorBit; } //cycles = mySystem->cycles() - c0; + +#ifdef DEBUGGER_SUPPORT + if (myStepStateByInstruction) { + tia.updateEmulation(); + riot.updateEmulation(); + } +#endif } // See if we need to handle an interrupt @@ -367,6 +388,7 @@ bool M6502::save(Serializer& out) const out.putInt(myLastSrcAddressY); out.putBool(myHaltRequested); + out.putBool(myStepStateByInstruction); } catch(...) { @@ -417,6 +439,7 @@ bool M6502::load(Serializer& in) myLastSrcAddressY = in.getInt(); myHaltRequested = in.getBool(); + myStepStateByInstruction = in.getBool(); } catch(...) { @@ -440,6 +463,9 @@ uInt32 M6502::addCondBreak(Expression* e, const string& name) { myCondBreaks.emplace_back(e); myCondBreakNames.push_back(name); + + updateStepStateByInstruction(); + return uInt32(myCondBreaks.size() - 1); } @@ -450,6 +476,9 @@ bool M6502::delCondBreak(uInt32 idx) { Vec::removeAt(myCondBreaks, idx); Vec::removeAt(myCondBreakNames, idx); + + updateStepStateByInstruction(); + return true; } return false; @@ -460,6 +489,8 @@ void M6502::clearCondBreaks() { myCondBreaks.clear(); myCondBreakNames.clear(); + + updateStepStateByInstruction(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -473,6 +504,9 @@ uInt32 M6502::addCondSaveState(Expression* e, const string& name) { myCondSaveStates.emplace_back(e); myCondSaveStateNames.push_back(name); + + updateStepStateByInstruction(); + return uInt32(myCondSaveStates.size() - 1); } @@ -483,6 +517,9 @@ bool M6502::delCondSaveState(uInt32 idx) { Vec::removeAt(myCondSaveStates, idx); Vec::removeAt(myCondSaveStateNames, idx); + + updateStepStateByInstruction(); + return true; } return false; @@ -493,6 +530,8 @@ void M6502::clearCondSaveStates() { myCondSaveStates.clear(); myCondSaveStateNames.clear(); + + updateStepStateByInstruction(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -506,6 +545,9 @@ uInt32 M6502::addCondTrap(Expression* e, const string& name) { myTrapConds.emplace_back(e); myTrapCondNames.push_back(name); + + updateStepStateByInstruction(); + return uInt32(myTrapConds.size() - 1); } @@ -516,6 +558,9 @@ bool M6502::delCondTrap(uInt32 brk) { Vec::removeAt(myTrapConds, brk); Vec::removeAt(myTrapCondNames, brk); + + updateStepStateByInstruction(); + return true; } return false; @@ -526,6 +571,8 @@ void M6502::clearCondTraps() { myTrapConds.clear(); myTrapCondNames.clear(); + + updateStepStateByInstruction(); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/M6502.hxx b/src/emucore/M6502.hxx index 16feb2459..c00d22d85 100644 --- a/src/emucore/M6502.hxx +++ b/src/emucore/M6502.hxx @@ -312,6 +312,12 @@ class M6502 : public Serializable */ void handleHalt(); + /** + Check whether we are required to update hardware (TIA + RIOT) in lockstep + with the CPU and update the flag accordingly. + */ + void updateStepStateByInstruction(); + private: /** Bit fields used to indicate that certain conditions need to be @@ -439,6 +445,8 @@ class M6502 : public Serializable vector> myTrapConds; StringList myTrapCondNames; + bool myStepStateByInstruction; + #endif // DEBUGGER_SUPPORT private: diff --git a/src/emucore/M6532.hxx b/src/emucore/M6532.hxx index ebd298d33..e235fb606 100644 --- a/src/emucore/M6532.hxx +++ b/src/emucore/M6532.hxx @@ -125,13 +125,16 @@ class M6532 : public Device */ bool poke(uInt16 address, uInt8 value) override; + /** + * Update RIOT state to the current timestamp. + */ + void updateEmulation(); + private: void setTimerRegister(uInt8 data, uInt8 interval); void setPinState(bool shcha); - void updateEmulation(); - // The following are used by the debugger to read INTIM/TIMINT // We need separate methods to do this, so the state of the system // isn't changed diff --git a/src/emucore/tia/TIA.hxx b/src/emucore/tia/TIA.hxx index a64b726e6..85fb673c4 100644 --- a/src/emucore/tia/TIA.hxx +++ b/src/emucore/tia/TIA.hxx @@ -443,6 +443,11 @@ class TIA : public Device */ string name() const override { return "TIA"; } + /** + * Run and forward TIA emulation to the current system clock. + */ + void updateEmulation(); + private: /** * During each line, the TIA cycles through these two states. @@ -481,11 +486,6 @@ class TIA : public Device */ void onHalt(); - /** - * Run and forward TIA emulation to the current system clock. - */ - void updateEmulation(); - /** * Execute colorClocks cycles of TIA simulation. */ From 19730fa18398a42e6fdd8269d7026292c3a4f1f1 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 17 Dec 2017 00:48:30 +0100 Subject: [PATCH 081/156] third 'uipalette' scheme 'Light' added modernized UI via 'FLAT_UI' preprocessor define added --- src/debugger/gui/DataGridWidget.cxx | 9 ++- src/emucore/FrameBuffer.cxx | 22 +++++++- src/emucore/FrameBuffer.hxx | 2 +- src/gui/CheckListWidget.cxx | 9 +++ src/gui/ContextMenu.cxx | 4 ++ src/gui/Dialog.cxx | 4 ++ src/gui/PopUpWidget.cxx | 49 +++++++++++++++- src/gui/PopUpWidget.hxx | 4 ++ src/gui/RadioButtonWidget.cxx | 79 ++++++++++++++++++++++++++ src/gui/StringListWidget.cxx | 9 +++ src/gui/TabWidget.cxx | 33 ++++++++++- src/gui/TabWidget.hxx | 6 +- src/gui/UIDialog.cxx | 1 + src/gui/Widget.cxx | 87 +++++++++++++++++++++++++++-- src/gui/Widget.hxx | 4 +- src/windows/Stella.vcxproj | 8 +-- 16 files changed, 312 insertions(+), 18 deletions(-) diff --git a/src/debugger/gui/DataGridWidget.cxx b/src/debugger/gui/DataGridWidget.cxx index ac52903a9..7d6f710b0 100644 --- a/src/debugger/gui/DataGridWidget.cxx +++ b/src/debugger/gui/DataGridWidget.cxx @@ -599,21 +599,26 @@ void DataGridWidget::drawWidget(bool hilite) int x = _x + 4 + (col * _colWidth); int y = _y + 2 + (row * _rowHeight); int pos = row*_cols + col; + uInt32 color = kTextColor; // Draw the selected item inverted, on a highlighted background. if (_currentRow == row && _currentCol == col && _hasFocus && !_editMode) + { s.fillRect(x - 4, y - 2, _colWidth+1, _rowHeight+1, kTextColorHi); +#ifdef FLAT_UI + color = kWidColor; +#endif + } if (_selectedItem == pos && _editMode) { adjustOffset(); - s.drawString(_font, editString(), x, y, _colWidth, kTextColor, + s.drawString(_font, editString(), x, y, _colWidth, color, TextAlign::Left, -_editScrollOffset, false); } else { - uInt32 color = kTextColor; if(_changedList[pos]) { s.fillRect(x - 3, y - 1, _colWidth-1, _rowHeight-1, kDbgChangedColor); diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index 35c54e577..c444fc0e3 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -130,7 +130,11 @@ bool FrameBuffer::initialize() } // Set palette for GUI (upper area of array, doesn't change during execution) - int palID = myOSystem.settings().getString("uipalette") == "classic" ? 1 : 0; + int palID = 0; + if(myOSystem.settings().getString("uipalette") == "classic") + palID = 1; + else if(myOSystem.settings().getString("uipalette") == "light") + palID = 2; for(int i = 0, j = 256; i < kNumColors-256; ++i, ++j) { @@ -937,12 +941,16 @@ void FrameBuffer::VideoModeList::setZoom(uInt32 zoom) kScrollColor Normal scrollbar color kScrollColorHi Highlighted scrollbar color + // Slider colors + kSliderColor, + kSliderColorHi + // Debugger colors kDbgChangedColor Background color for changed cells kDbgChangedTextColor Text color for changed cells kDbgColorHi Highlighted color in debugger data cells */ -uInt32 FrameBuffer::ourGUIColors[2][kNumColors-256] = { +uInt32 FrameBuffer::ourGUIColors[3][kNumColors-256] = { // Standard { 0x686868, 0x000000, 0xa38c61, 0xdccfa5, 0x404040, 0x000000, 0x62a108, 0x9f0000, 0xc9af7c, 0xf0f0cf, 0xc80000, @@ -961,5 +969,15 @@ uInt32 FrameBuffer::ourGUIColors[2][kNumColors-256] = { 0x20a020, 0x00ff00, 0x20a020, 0x00ff00, 0xc80000, 0x00ff00, 0xc8c8ff + }, + // Light + { + 0x686868, 0x000000, 0xc0c0c0, 0xe1e1e1, 0x333333, 0x000000, 0x0078d7, 0x0078d7, // base + 0xf0f0f0, 0xffffff, 0x0f0f0f, // elements + 0xe1e1e1, 0xe5f1fb, 0x202020, 0x000000, // buttons + 0x333333, // checkbox + 0x808080, 0x0078d7, // scrollbar + 0x333333, 0x0078d7, // slider + 0x800000, 0xffff80, 0x00e0e0 // debugger } }; diff --git a/src/emucore/FrameBuffer.hxx b/src/emucore/FrameBuffer.hxx index 575448d4b..0c8758608 100644 --- a/src/emucore/FrameBuffer.hxx +++ b/src/emucore/FrameBuffer.hxx @@ -520,7 +520,7 @@ class FrameBuffer vector> mySurfaceList; // Holds UI palette data (standard and classic colours) - static uInt32 ourGUIColors[2][kNumColors-256]; + static uInt32 ourGUIColors[3][kNumColors-256]; private: // Following constructors and assignment operators not supported diff --git a/src/gui/CheckListWidget.cxx b/src/gui/CheckListWidget.cxx index 5caf3f103..b50ef9699 100644 --- a/src/gui/CheckListWidget.cxx +++ b/src/gui/CheckListWidget.cxx @@ -117,11 +117,20 @@ void CheckListWidget::drawWidget(bool hilite) if (_selectedItem == pos && _editMode) { adjustOffset(); +#ifndef FLAT_UI s.drawString(_font, editString(), _x + r.left, y, r.width(), kTextColor, TextAlign::Left, -_editScrollOffset, false); } else s.drawString(_font, _list[pos], _x + r.left, y, r.width(), kTextColor); +#else + s.drawString(_font, editString(), _x + r.left, y, r.width(), kTextColor, + TextAlign::Left, -_editScrollOffset, false); + } + else + s.drawString(_font, _list[pos], _x + r.left, y, r.width(), + _selectedItem == pos && hilite && _hasFocus && !_editMode ? kWidColor : kTextColor); +#endif } // Only draw the caret while editing, and if it's in the current viewport diff --git a/src/gui/ContextMenu.cxx b/src/gui/ContextMenu.cxx index ea7915503..3e046a21f 100644 --- a/src/gui/ContextMenu.cxx +++ b/src/gui/ContextMenu.cxx @@ -58,7 +58,11 @@ void ContextMenu::addItems(const VariantList& items) maxwidth = std::max(maxwidth, _font.getStringWidth(e.first)); _x = _y = 0; +#ifndef FLAT_UI _w = maxwidth + 10; +#else + _w = maxwidth + 10 + 5; +#endif _h = 1; // recalculate this in ::recalc() _scrollUpColor = _firstEntry > 0 ? kScrollColor : kColor; diff --git a/src/gui/Dialog.cxx b/src/gui/Dialog.cxx index 63c9c3be8..a6ecbef68 100644 --- a/src/gui/Dialog.cxx +++ b/src/gui/Dialog.cxx @@ -271,7 +271,11 @@ void Dialog::drawDialog() { // cerr << "Dialog::drawDialog(): w = " << _w << ", h = " << _h << " @ " << &s << endl << endl; s.fillRect(_x, _y, _w, _h, kDlgColor); +#ifndef FLAT_UI s.box(_x, _y, _w, _h, kColor, kShadowColor); +#else + s.frameRect(_x, _y, _w, _h, kColor); +#endif // !FLAT_UI // Make all child widget dirty Widget* w = _firstWidget; diff --git a/src/gui/PopUpWidget.cxx b/src/gui/PopUpWidget.cxx index 7cd6532ee..f7182f02b 100644 --- a/src/gui/PopUpWidget.cxx +++ b/src/gui/PopUpWidget.cxx @@ -24,6 +24,7 @@ #include "PopUpWidget.hxx" // Little up/down arrow +#ifndef FLAT_UI static uInt32 up_down_arrows[8] = { 0b00000000, 0b00001000, @@ -34,6 +35,18 @@ static uInt32 up_down_arrows[8] = { 0b00011100, 0b00001000, }; +#else +static uInt32 down_arrow[8] = { + 0b100000001, + 0b110000011, + 0b111000111, + 0b011101110, + 0b001111100, + 0b000111000, + 0b000010000, + 0b000000000 +}; +#endif // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PopUpWidget::PopUpWidget(GuiObject* boss, const GUI::Font& font, @@ -53,7 +66,11 @@ PopUpWidget::PopUpWidget(GuiObject* boss, const GUI::Font& font, if(!_label.empty() && _labelWidth == 0) _labelWidth = _font.getStringWidth(_label); +#ifndef FLAT_UI _w = w + _labelWidth + 15; +#else + _w = w + _labelWidth + 23; +#endif // vertically center the arrows and text myTextY = (_h - _font.getFontHeight()) / 2; @@ -137,6 +154,22 @@ void PopUpWidget::handleMouseWheel(int x, int y, int direction) } } +#ifdef FLAT_UI +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void PopUpWidget::handleMouseEntered(int button) +{ + setFlags(WIDGET_HILITED); + setDirty(); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void PopUpWidget::handleMouseLeft(int button) +{ + clearFlags(WIDGET_HILITED); + setDirty(); +} +#endif + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bool PopUpWidget::handleEvent(Event::Type e) { @@ -190,18 +223,32 @@ void PopUpWidget::drawWidget(bool hilite) s.drawString(_font, _label, _x, _y + myTextY, _labelWidth, isEnabled() ? _textcolor : uInt32(kColor), TextAlign::Right); +#ifndef FLAT_UI // Draw a thin frame around us. s.hLine(x, _y, x + w - 1, kColor); s.hLine(x, _y +_h-1, x + w - 1, kShadowColor); s.vLine(x, _y, _y+_h-1, kColor); s.vLine(x + w - 1, _y, _y +_h - 1, kShadowColor); +#else + s.frameRect(x, _y, w - 16, _h, kColor); + s.frameRect(x + w - 17, _y, 17, _h, hilite ? kTextColorHi : kColor); +#endif // !FLAT_UI +#ifndef FLAT_UI // Fill the background s.fillRect(x + 1, _y + 1, w - 2, _h - 2, kWidColor); - // Draw an arrow pointing down at the right end to signal this is a dropdown/popup s.drawBitmap(up_down_arrows, x+w - 10, _y + myArrowsY, !isEnabled() ? kColor : hilite ? kTextColorHi : kTextColor); +#else + // Fill the background + s.fillRect(x + 1, _y + 1, w - 2 - 16, _h - 2, kWidColor); + s.fillRect(x + w - 15 - 1, _y + 1, 15, _h - 2, kBGColorHi); + //s.vLine(x + w - 17, _y, _y + _h - 1, kShadowColor); + // Draw an arrow pointing down at the right end to signal this is a dropdown/popup + s.drawBitmap(down_arrow, x + w - 13, _y + myArrowsY + 1, + !isEnabled() ? kCheckColor : kTextColor, 9u, 8u); +#endif // Draw the selected entry, if any const string& name = myMenu->getSelectedName(); diff --git a/src/gui/PopUpWidget.hxx b/src/gui/PopUpWidget.hxx index df3423bb7..0b2a586c3 100644 --- a/src/gui/PopUpWidget.hxx +++ b/src/gui/PopUpWidget.hxx @@ -63,6 +63,10 @@ class PopUpWidget : public Widget, public CommandSender protected: void handleMouseDown(int x, int y, int button, int clickCount) override; void handleMouseWheel(int x, int y, int direction) override; +#ifdef FLAT_UI + void handleMouseEntered(int button) override; + void handleMouseLeft(int button) override; +#endif bool handleEvent(Event::Type e) override; void handleCommand(CommandSender* sender, int cmd, int data, int id) override; void drawWidget(bool hilite) override; diff --git a/src/gui/RadioButtonWidget.cxx b/src/gui/RadioButtonWidget.cxx index 0e9e58a26..7c981e8c9 100644 --- a/src/gui/RadioButtonWidget.cxx +++ b/src/gui/RadioButtonWidget.cxx @@ -21,6 +21,7 @@ #include "RadioButtonWidget.hxx" /* Radiobutton bitmaps */ +#ifndef FLAT_UI static uInt32 radio_img_outercircle[14] = { 0b00001111110000, @@ -76,6 +77,69 @@ static uInt32 radio_img_inactive[8] = 0b01111110, 0b00111100 }; +#else +static uInt32 radio_img_outercircle[14] = +{ + 0b00001111110000, + 0b00110000001100, + 0b01000000000010, + 0b01000000000010, + 0b10000000000001, + 0b10000000000001, + 0b10000000000001, + 0b10000000000001, + 0b10000000000001, + 0b10000000000001, + 0b01000000000010, + 0b01000000000010, + 0b00110000001100, + 0b00001111110000 +}; + +static uInt32 radio_img_innercircle[12] = +{ + 0b000111111000, + 0b011111111110, + 0b011111111110, + 0b111111111111, + 0b111111111111, + 0b111111111111, + 0b111111111111, + 0b111111111111, + 0b111111111111, + 0b011111111110, + 0b011111111110, + 0b000111111000 +}; + +static uInt32 radio_img_active[10] = +{ + 0b0011111100, + 0b0111111110, + 0b1111111111, + 0b1111111111, + 0b1111111111, + 0b1111111111, + 0b1111111111, + 0b1111111111, + 0b0111111110, + 0b0011111100, +}; + +static uInt32 radio_img_inactive[10] = +{ + 0b0011111100, + 0b0111111110, + 0b1111001111, + 0b1110000111, + 0b1100000011, + 0b1100000011, + 0b1110000111, + 0b1111001111, + 0b0111111110, + 0b0011111100 +}; +#endif // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - RadioButtonWidget::RadioButtonWidget(GuiObject* boss, const GUI::Font& font, @@ -153,6 +217,7 @@ void RadioButtonWidget::drawWidget(bool hilite) { FBSurface& s = _boss->dialog().surface(); +#ifndef FLAT_UI // Draw the outer bounding circle s.drawBitmap(radio_img_outercircle, _x, _y + _boxY, kShadowColor, 14, 14); @@ -162,6 +227,20 @@ void RadioButtonWidget::drawWidget(bool hilite) // draw state if(_state) s.drawBitmap(_img, _x + 3, _y + _boxY + 3, isEnabled() ? kCheckColor : kShadowColor); +#else + // Draw the outer bounding circle + s.drawBitmap(radio_img_outercircle, _x, _y + _boxY, hilite ? kScrollColorHi : kShadowColor, 14, 14); + + // Draw the inner bounding circle with enabled color + s.drawBitmap(radio_img_innercircle, _x + 1, _y + _boxY + 1, isEnabled() + ? _bgcolor : kColor, 12, 12); + + // draw state + if(_state) + s.drawBitmap(_img, _x + 2, _y + _boxY + 2, isEnabled() + ? hilite ? kScrollColorHi : kCheckColor + : kShadowColor, 10); +#endif // Finally draw the label s.drawString(_font, _label, _x + 20, _y + _textY, _w, diff --git a/src/gui/StringListWidget.cxx b/src/gui/StringListWidget.cxx index 3cdc5102b..a2161e101 100644 --- a/src/gui/StringListWidget.cxx +++ b/src/gui/StringListWidget.cxx @@ -68,11 +68,20 @@ void StringListWidget::drawWidget(bool hilite) if (_selectedItem == pos && _editMode) { adjustOffset(); +#ifndef FLAT_UI s.drawString(_font, editString(), _x + r.left, y, r.width(), kTextColor, TextAlign::Left, -_editScrollOffset, false); } else s.drawString(_font, _list[pos], _x + r.left, y, r.width(), kTextColor); +#else + s.drawString(_font, editString(), _x + r.left, y, r.width(), kTextColor, + TextAlign::Left, -_editScrollOffset, false); + } + else + s.drawString(_font, _list[pos], _x + r.left, y, r.width(), + _selectedItem == pos && _hilite && _hasFocus && !_editMode ? kWidColor : kTextColor); +#endif } // Only draw the caret while editing, and if it's in the current viewport diff --git a/src/gui/TabWidget.cxx b/src/gui/TabWidget.cxx index 31756d56b..22bd2ec13 100644 --- a/src/gui/TabWidget.cxx +++ b/src/gui/TabWidget.cxx @@ -193,6 +193,20 @@ void TabWidget::handleMouseDown(int x, int y, int button, int clickCount) } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TabWidget::handleMouseEntered(int button) +{ + setFlags(WIDGET_HILITED); + setDirty(); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void TabWidget::handleMouseLeft(int button) +{ + clearFlags(WIDGET_HILITED); + setDirty(); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void TabWidget::handleCommand(CommandSender* sender, int cmd, int data, int id) { @@ -239,11 +253,12 @@ void TabWidget::loadConfig() updateActiveTab(); } +#ifndef FLAT_UI // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void TabWidget::box(int x, int y, int width, int height, uInt32 colorA, uInt32 colorB, bool omitBottom) { -//cerr << "TabWidget::box\n"; + //cerr << "TabWidget::box\n"; FBSurface& s = _boss->dialog().surface(); s.hLine(x + 1, y, x + width - 2, colorA); @@ -259,6 +274,7 @@ void TabWidget::box(int x, int y, int width, int height, s.vLine(x + width - 1, y + 1, y + height - (omitBottom ? 1 : 2), colorB); s.vLine(x + width - 2, y + 1, y + height - (omitBottom ? 2 : 1), colorB); } +#endif // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void TabWidget::drawWidget(bool hilite) @@ -275,9 +291,11 @@ void TabWidget::drawWidget(bool hilite) const int left2 = right1 + _tabWidth; const int right2 = _x + _w - 2; +#ifndef FLAT_UI // Draw horizontal line s.hLine(left1, _y + _tabHeight - 2, right1, kShadowColor); s.hLine(left2, _y + _tabHeight - 2, right2, kShadowColor); +#endif // Iterate over all tabs and draw them int i, x = _x + kTabLeftOffset; @@ -285,14 +303,24 @@ void TabWidget::drawWidget(bool hilite) { uInt32 fontcolor = _tabs[i].enabled ? kTextColor : kColor; uInt32 boxcolor = (i == _activeTab) ? kColor : kShadowColor; +#ifndef FLAT_UI int yOffset = (i == _activeTab) ? 0 : 2; box(x, _y + yOffset, _tabWidth, _tabHeight - yOffset, boxcolor, boxcolor, (i == _activeTab)); s.drawString(_font, _tabs[i].title, x + kTabPadding, _y + yOffset / 2 + (_tabHeight - _fontHeight - 1), _tabWidth - 2 * kTabPadding, fontcolor, TextAlign::Center); +#else + int yOffset = (i == _activeTab) ? 0 : 1; + s.fillRect(x, _y, _tabWidth, _tabHeight, (i == _activeTab) + ? kDlgColor : kBGColorHi); + s.drawString(_font, _tabs[i].title, x + kTabPadding + yOffset, + _y + yOffset + (_tabHeight - _fontHeight - 1), + _tabWidth - 2 * kTabPadding, (i == _activeTab |true) ? fontcolor : kColor, TextAlign::Center); +#endif x += _tabWidth + kTabSpacing; } +#ifndef FLAT_UI // Draw a frame around the widget area (belows the tabs) s.hLine(left1, _y + _tabHeight - 1, right1, kColor); s.hLine(left2, _y + _tabHeight - 1, right2, kColor); @@ -300,6 +328,9 @@ void TabWidget::drawWidget(bool hilite) s.hLine(_x+1, _y + _h - 1, _x + _w - 2, kColor); s.vLine(_x + _w - 2, _y + _tabHeight - 1, _y + _h - 2, kColor); s.vLine(_x + _w - 1, _y + _tabHeight - 1, _y + _h - 2, kShadowColor); +#else + s.hLine(right1, _y, left2, kScrollColorHi); +#endif } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/TabWidget.hxx b/src/gui/TabWidget.hxx index 4c71d0858..8ca79abce 100644 --- a/src/gui/TabWidget.hxx +++ b/src/gui/TabWidget.hxx @@ -60,6 +60,9 @@ class TabWidget : public Widget, public CommandSender protected: void handleMouseDown(int x, int y, int button, int clickCount) override; + void handleMouseEntered(int button) override; + void handleMouseLeft(int button) override; + void handleCommand(CommandSender* sender, int cmd, int data, int id) override; bool handleEvent(Event::Type event) override; @@ -93,9 +96,10 @@ class TabWidget : public Widget, public CommandSender }; private: +#ifndef FLAT_UI void box(int x, int y, int width, int height, uInt32 colorA, uInt32 colorB, bool omitBottom); - +#endif void updateActiveTab(); private: diff --git a/src/gui/UIDialog.cxx b/src/gui/UIDialog.cxx index d7bedf004..9c7ca195e 100644 --- a/src/gui/UIDialog.cxx +++ b/src/gui/UIDialog.cxx @@ -151,6 +151,7 @@ UIDialog::UIDialog(OSystem& osystem, DialogContainer& parent, items.clear(); VarList::push_back(items, "Standard", "standard"); VarList::push_back(items, "Classic", "classic"); + VarList::push_back(items, "Light", "light"); myPalettePopup = new PopUpWidget(myTab, font, xpos, ypos, pwidth, lineHeight, items, "Interface Palette (*) ", lwidth); wid.push_back(myPalettePopup); diff --git a/src/gui/Widget.cxx b/src/gui/Widget.cxx index 1e008ac4a..82f072404 100644 --- a/src/gui/Widget.cxx +++ b/src/gui/Widget.cxx @@ -90,7 +90,11 @@ void Widget::draw() // Draw border if(hasBorder) { +#ifndef FLAT_UI s.box(_x, _y, _w, _h, kColor, kShadowColor); +#else + s.frameRect(_x, _y, _w, _h, (_flags & WIDGET_HILITED) ? kScrollColorHi : kColor); +#endif // !FLAT_UI _x += 4; _y += 4; _w -= 8; @@ -442,6 +446,7 @@ void ButtonWidget::drawWidget(bool hilite) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /* 8x8 checkbox bitmap */ +#ifndef FLAT_UI static uInt32 checked_img_active[8] = { 0b11111111, @@ -477,7 +482,49 @@ static uInt32 checked_img_circle[8] = 0b01111110, 0b00011000 }; +#else +static uInt32 checked_img_active[10] = +{ + 0b1111111111, + 0b1111111111, + 0b1111111111, + 0b1111111111, + 0b1111111111, + 0b1111111111, + 0b1111111111, + 0b1111111111, + 0b1111111111, + 0b1111111111 +}; +static uInt32 checked_img_inactive[10] = +{ + 0b1111111111, + 0b1111111111, + 0b1111001111, + 0b1110000111, + 0b1100000011, + 0b1100000011, + 0b1110000111, + 0b1111001111, + 0b1111111111, + 0b1111111111 +}; + +static uInt32 checked_img_circle[10] = +{ + 0b0001111000, + 0b0111111110, + 0b0111111110, + 0b1111111111, + 0b1111111111, + 0b1111111111, + 0b1111111111, + 0b0111111110, + 0b0111111110, + 0b0001111000 +}; +#endif // !FLAT_UI // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CheckboxWidget::CheckboxWidget(GuiObject* boss, const GUI::Font& font, int x, int y, const string& label, @@ -512,6 +559,20 @@ CheckboxWidget::CheckboxWidget(GuiObject* boss, const GUI::Font& font, setFill(CheckboxWidget::Normal); } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void CheckboxWidget::handleMouseEntered(int button) +{ + setFlags(WIDGET_HILITED); + setDirty(); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void CheckboxWidget::handleMouseLeft(int button) +{ + clearFlags(WIDGET_HILITED); + setDirty(); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void CheckboxWidget::handleMouseUp(int x, int y, int button, int clickCount) { @@ -574,14 +635,24 @@ void CheckboxWidget::drawWidget(bool hilite) { FBSurface& s = _boss->dialog().surface(); +#ifndef FLAT_UI // Draw the box if(_drawBox) s.box(_x, _y + _boxY, 14, 14, kColor, kShadowColor); - // Do we draw a square or cross? s.fillRect(_x + 2, _y + _boxY + 2, 10, 10, isEnabled() ? _bgcolor : kColor); if(_state) s.drawBitmap(_img, _x + 3, _y + _boxY + 3, isEnabled() ? kCheckColor : kShadowColor); +#else + if(_drawBox) + s.frameRect(_x, _y + _boxY, 14, 14, hilite ? kScrollColorHi : kShadowColor); + // Do we draw a square or cross? + s.fillRect(_x + 1, _y + _boxY + 1, 12, 12, isEnabled() ? _bgcolor : kColor); + if(_state) + s.drawBitmap(_img, _x + 2, _y + _boxY + 2, isEnabled() + ? hilite ? kScrollColorHi : kCheckColor + : kShadowColor, 10); +#endif // Finally draw the label s.drawString(_font, _label, _x + 20, _y + _textY, _w, @@ -725,17 +796,25 @@ void SliderWidget::drawWidget(bool hilite) if(_labelWidth > 0) s.drawString(_font, _label, _x, _y + 2, _labelWidth, isEnabled() ? kTextColor : kColor, TextAlign::Right); - +#ifndef FLAT_UI // Draw the box s.box(_x + _labelWidth, _y, _w - _labelWidth, _h, kColor, kShadowColor); - // Fill the box s.fillRect(_x + _labelWidth + 2, _y + 2, _w - _labelWidth - 4, _h - 4, !isEnabled() ? kBGColorHi : kWidColor); - // Draw the 'bar' s.fillRect(_x + _labelWidth + 2, _y + 2, valueToPos(_value), _h - 4, !isEnabled() ? kColor : hilite ? kSliderColorHi : kSliderColor); +#else + // Draw the box + s.frameRect(_x + _labelWidth, _y, _w - _labelWidth, _h, hilite ? kSliderColorHi : kShadowColor); + // Fill the box + s.fillRect(_x + _labelWidth + 1, _y + 1, _w - _labelWidth - 2, _h - 2, + !isEnabled() ? kBGColorHi : kWidColor); + // Draw the 'bar' + s.fillRect(_x + _labelWidth + 2, _y + 2, valueToPos(_value), _h - 4, + !isEnabled() ? kColor : hilite ? kSliderColorHi : kSliderColor); +#endif } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/Widget.hxx b/src/gui/Widget.hxx index f7b23e042..047cebe01 100644 --- a/src/gui/Widget.hxx +++ b/src/gui/Widget.hxx @@ -268,8 +268,8 @@ class CheckboxWidget : public ButtonWidget bool getState() const { return _state; } void handleMouseUp(int x, int y, int button, int clickCount) override; - void handleMouseEntered(int button) override { } - void handleMouseLeft(int button) override { } + void handleMouseEntered(int button) override; + void handleMouseLeft(int button) override; static int boxSize() { return 14; } // box is square diff --git a/src/windows/Stella.vcxproj b/src/windows/Stella.vcxproj index 37c361957..c63e35bdd 100644 --- a/src/windows/Stella.vcxproj +++ b/src/windows/Stella.vcxproj @@ -111,7 +111,7 @@ /MP /std:c++latest %(AdditionalOptions) Disabled ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + FLAT_UI;BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) false EnableFastChecks MultiThreadedDLL @@ -142,7 +142,7 @@ /MP /std:c++latest %(AdditionalOptions) Disabled ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + FLAT_UI;BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) false EnableFastChecks MultiThreadedDLL @@ -171,7 +171,7 @@ true false ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + FLAT_UI;BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) MultiThreadedDLL false @@ -204,7 +204,7 @@ Default true ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + FLAT_UI;BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) MultiThreadedDLL false From b05d6868911a5a82cc03a1af9f3a7e1a3e09bd3e Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 17 Dec 2017 10:09:59 +0100 Subject: [PATCH 082/156] 'Light' palette polishing --- src/debugger/DebuggerParser.hxx | 2 +- src/debugger/gui/DataGridWidget.cxx | 17 ++++------ src/debugger/gui/RomListWidget.cxx | 11 +++++-- src/debugger/gui/ToggleBitWidget.cxx | 10 ++++-- src/emucore/FrameBuffer.cxx | 48 ++++++++++++++-------------- src/emucore/FrameBufferConstants.hxx | 2 ++ src/gui/CheckListWidget.cxx | 17 ++++------ src/gui/StringListWidget.cxx | 20 +++++------- src/windows/Stella.vcxproj | 8 ++--- 9 files changed, 67 insertions(+), 68 deletions(-) diff --git a/src/debugger/DebuggerParser.hxx b/src/debugger/DebuggerParser.hxx index 69926e544..30234bcbc 100644 --- a/src/debugger/DebuggerParser.hxx +++ b/src/debugger/DebuggerParser.hxx @@ -51,7 +51,7 @@ class DebuggerParser static inline string red(const string& msg = "") { - return char(kDbgChangedColor) + msg; + return char(kDbgColorRed) + msg; } static inline string inverse(const string& msg = "") { diff --git a/src/debugger/gui/DataGridWidget.cxx b/src/debugger/gui/DataGridWidget.cxx index 7d6f710b0..c4bbf0d6d 100644 --- a/src/debugger/gui/DataGridWidget.cxx +++ b/src/debugger/gui/DataGridWidget.cxx @@ -15,7 +15,6 @@ // this file, and for a DISCLAIMER OF ALL WARRANTIES. //============================================================================ -#include "OSystem.hxx" #include "Widget.hxx" #include "Dialog.hxx" #include "Font.hxx" @@ -599,22 +598,20 @@ void DataGridWidget::drawWidget(bool hilite) int x = _x + 4 + (col * _colWidth); int y = _y + 2 + (row * _rowHeight); int pos = row*_cols + col; - uInt32 color = kTextColor; + uInt32 textColor = kTextColor; // Draw the selected item inverted, on a highlighted background. if (_currentRow == row && _currentCol == col && _hasFocus && !_editMode) { s.fillRect(x - 4, y - 2, _colWidth+1, _rowHeight+1, kTextColorHi); -#ifdef FLAT_UI - color = kWidColor; -#endif + textColor = kTextColorInv; } if (_selectedItem == pos && _editMode) { adjustOffset(); - s.drawString(_font, editString(), x, y, _colWidth, color, + s.drawString(_font, editString(), x, y, _colWidth, textColor, TextAlign::Left, -_editScrollOffset, false); } else @@ -624,14 +621,14 @@ void DataGridWidget::drawWidget(bool hilite) s.fillRect(x - 3, y - 1, _colWidth-1, _rowHeight-1, kDbgChangedColor); if(_hiliteList[pos]) - color = kDbgColorHi; + textColor = kDbgColorHi; else - color = kDbgChangedTextColor; + textColor = kDbgChangedTextColor; } else if(_hiliteList[pos]) - color = kDbgColorHi; + textColor = kDbgColorHi; - s.drawString(_font, _valueStringList[pos], x, y, _colWidth, color); + s.drawString(_font, _valueStringList[pos], x, y, _colWidth, textColor); } } } diff --git a/src/debugger/gui/RomListWidget.cxx b/src/debugger/gui/RomListWidget.cxx index a99987f16..e20c28841 100644 --- a/src/debugger/gui/RomListWidget.cxx +++ b/src/debugger/gui/RomListWidget.cxx @@ -474,6 +474,8 @@ void RomListWidget::drawWidget(bool hilite) xpos = _x + CheckboxWidget::boxSize() + 10; ypos = _y + 2; for (i = 0, pos = _currentPos; i < _rows && pos < len; i++, pos++, ypos += _fontHeight) { + uInt32 bytesColor = kTextColor; + // Draw checkboxes for correct lines (takes scrolling into account) myCheckList[i]->setState(myBPState->isSet(dlist[pos].address)); myCheckList[i]->setDirty(); @@ -484,10 +486,13 @@ void RomListWidget::drawWidget(bool hilite) s.frameRect(_x + l.x() - 3, ypos - 1, _w - l.x(), _fontHeight, kTextColorHi); // Draw the selected item inverted, on a highlighted background. - if (_selectedItem == pos && _hasFocus) + if(_selectedItem == pos && _hasFocus) { - if (!_editMode) + if(!_editMode) + { s.fillRect(_x + r.x() - 3, ypos - 1, r.width(), _fontHeight, kTextColorHi); + bytesColor = kTextColorInv; + } else s.frameRect(_x + r.x() - 3, ypos - 1, r.width(), _fontHeight, kTextColorHi); } @@ -535,7 +540,7 @@ void RomListWidget::drawWidget(bool hilite) } else { - s.drawString(_font, dlist[pos].bytes, _x + r.x(), ypos, r.width(), kTextColor); + s.drawString(_font, dlist[pos].bytes, _x + r.x(), ypos, r.width(), bytesColor); } } } diff --git a/src/debugger/gui/ToggleBitWidget.cxx b/src/debugger/gui/ToggleBitWidget.cxx index ef0c5c089..b42d98563 100644 --- a/src/debugger/gui/ToggleBitWidget.cxx +++ b/src/debugger/gui/ToggleBitWidget.cxx @@ -89,13 +89,17 @@ void ToggleBitWidget::drawWidget(bool hilite) { for (col = 0; col < _cols; col++) { + uInt32 textColor = kTextColor; int x = _x + 4 + (col * _colWidth); int y = _y + 2 + (row * _rowHeight); int pos = row*_cols + col; // Draw the selected item inverted, on a highlighted background. - if (_currentRow == row && _currentCol == col && _hasFocus) - s.fillRect(x - 4, y - 2, _colWidth+1, _rowHeight+1, kTextColorHi); + if(_currentRow == row && _currentCol == col && _hasFocus) + { + s.fillRect(x - 4, y - 2, _colWidth + 1, _rowHeight + 1, kTextColorHi); + textColor = kTextColorInv; + } if(_stateList[pos]) buffer = _onList[pos]; @@ -111,7 +115,7 @@ void ToggleBitWidget::drawWidget(bool hilite) s.drawString(_font, buffer, x, y, _colWidth, kDbgChangedTextColor); } else - s.drawString(_font, buffer, x, y, _colWidth, kTextColor); + s.drawString(_font, buffer, x, y, _colWidth, textColor); } else { diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index c444fc0e3..e2fd2afa5 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -913,71 +913,71 @@ void FrameBuffer::VideoModeList::setZoom(uInt32 zoom) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /* Palette is defined as follows: - // Base colors + *** Base colors *** kColor Normal foreground color (non-text) kBGColor Normal background color (non-text) kBGColorLo Disabled background color dark (non-text) kBGColorHi Disabled background color light (non-text) kShadowColor Item is disabled + *** Text colors *** kTextColor Normal text color kTextColorHi Highlighted text color kTextColorEm Emphasized text color - - // UI elements (dialog and widgets) + kTextColorSel Color for selected text + *** UI elements (dialog and widgets) *** kDlgColor Dialog background kWidColor Widget background kWidFrameColor Border for currently selected widget - - // Button colors + *** Button colors *** kBtnColor Normal button background kBtnColorHi Highlighted button background kBtnTextColor Normal button font color kBtnTextColorHi Highlighted button font color - - // Checkbox colors + *** Checkbox colors *** kCheckColor Color of 'X' in checkbox - - // Scrollbar colors + *** Scrollbar colors *** kScrollColor Normal scrollbar color kScrollColorHi Highlighted scrollbar color - - // Slider colors + *** Slider colors *** kSliderColor, kSliderColorHi - - // Debugger colors + *** Debugger colors *** kDbgChangedColor Background color for changed cells kDbgChangedTextColor Text color for changed cells kDbgColorHi Highlighted color in debugger data cells + kDbgColorRed Red color in debugger */ uInt32 FrameBuffer::ourGUIColors[3][kNumColors-256] = { // Standard - { 0x686868, 0x000000, 0xa38c61, 0xdccfa5, 0x404040, 0x000000, 0x62a108, 0x9f0000, + { 0x686868, 0x000000, 0xa38c61, 0xdccfa5, 0x404040, + 0x000000, 0x62a108, 0x9f0000, 0x000000, 0xc9af7c, 0xf0f0cf, 0xc80000, 0xac3410, 0xd55941, 0xffffff, 0xffd652, 0xac3410, 0xac3410, 0xd55941, 0xac3410, 0xd55941, - 0xc80000, 0x00ff00, 0xc8c8ff + 0xc80000, 0x00ff00, 0xc8c8ff, 0xc80000, }, // Classic - { 0x686868, 0x000000, 0x404040, 0x404040, 0x404040, 0x20a020, 0x00ff00, 0xc80000, + { 0x686868, 0x000000, 0x404040, 0x404040, 0x404040, + 0x20a020, 0x00ff00, 0xc80000, 0x20a020, 0x000000, 0x000000, 0xc80000, 0x000000, 0x000000, 0x20a020, 0x00ff00, 0x20a020, 0x20a020, 0x00ff00, 0x20a020, 0x00ff00, - 0xc80000, 0x00ff00, 0xc8c8ff + 0xc80000, 0x00ff00, 0xc8c8ff, 0xc80000 }, // Light { - 0x686868, 0x000000, 0xc0c0c0, 0xe1e1e1, 0x333333, 0x000000, 0x0078d7, 0x0078d7, // base - 0xf0f0f0, 0xffffff, 0x0f0f0f, // elements - 0xe1e1e1, 0xe5f1fb, 0x202020, 0x000000, // buttons - 0x333333, // checkbox - 0x808080, 0x0078d7, // scrollbar - 0x333333, 0x0078d7, // slider - 0x800000, 0xffff80, 0x00e0e0 // debugger + 0x686868, 0x000000, 0xc0c0c0, 0xe1e1e1, 0x333333, // base + 0x000000, 0x0078d7, 0x0078d7, 0xffffff, // text + 0xf0f0f0, 0xffffff, 0x0f0f0f, // elements + 0xe1e1e1, 0xe5f1fb, 0x202020, 0x000000, // buttons + 0x333333, // checkbox + 0x808080, 0x0078d7, // scrollbar + 0x333333, 0x0078d7, // slider + 0xffc0c0, 0x000000, 0xe00000, 0x800000 // debugger } }; diff --git a/src/emucore/FrameBufferConstants.hxx b/src/emucore/FrameBufferConstants.hxx index dee88fdd0..769e25f14 100644 --- a/src/emucore/FrameBufferConstants.hxx +++ b/src/emucore/FrameBufferConstants.hxx @@ -50,6 +50,7 @@ enum { kTextColor, kTextColorHi, kTextColorEm, + kTextColorInv, kDlgColor, kWidColor, kWidFrameColor, @@ -65,6 +66,7 @@ enum { kDbgChangedColor, kDbgChangedTextColor, kDbgColorHi, + kDbgColorRed, kNumColors }; diff --git a/src/gui/CheckListWidget.cxx b/src/gui/CheckListWidget.cxx index b50ef9699..0836b5a1c 100644 --- a/src/gui/CheckListWidget.cxx +++ b/src/gui/CheckListWidget.cxx @@ -100,15 +100,19 @@ void CheckListWidget::drawWidget(bool hilite) _checkList[i]->draw(); const int y = _y + 2 + _fontHeight * i + 2; + uInt32 textColor = kTextColor; GUI::Rect r(getEditRect()); // Draw the selected item inverted, on a highlighted background. if (_selectedItem == pos) { - if (_hasFocus && !_editMode) + if(_hasFocus && !_editMode) + { s.fillRect(_x + r.left - 3, _y + 1 + _fontHeight * i, _w - r.left, _fontHeight, kTextColorHi); + textColor = kTextColorInv; + } else s.frameRect(_x + r.left - 3, _y + 1 + _fontHeight * i, _w - r.left, _fontHeight, kTextColorHi); @@ -117,20 +121,11 @@ void CheckListWidget::drawWidget(bool hilite) if (_selectedItem == pos && _editMode) { adjustOffset(); -#ifndef FLAT_UI s.drawString(_font, editString(), _x + r.left, y, r.width(), kTextColor, TextAlign::Left, -_editScrollOffset, false); } else - s.drawString(_font, _list[pos], _x + r.left, y, r.width(), kTextColor); -#else - s.drawString(_font, editString(), _x + r.left, y, r.width(), kTextColor, - TextAlign::Left, -_editScrollOffset, false); - } - else - s.drawString(_font, _list[pos], _x + r.left, y, r.width(), - _selectedItem == pos && hilite && _hasFocus && !_editMode ? kWidColor : kTextColor); -#endif + s.drawString(_font, _list[pos], _x + r.left, y, r.width(), textColor); } // Only draw the caret while editing, and if it's in the current viewport diff --git a/src/gui/StringListWidget.cxx b/src/gui/StringListWidget.cxx index a2161e101..44b9e5f4f 100644 --- a/src/gui/StringListWidget.cxx +++ b/src/gui/StringListWidget.cxx @@ -54,12 +54,16 @@ void StringListWidget::drawWidget(bool hilite) for (i = 0, pos = _currentPos; i < _rows && pos < len; i++, pos++) { const int y = _y + 2 + _fontHeight * i; + uInt32 textColor = kTextColor; // Draw the selected item inverted, on a highlighted background. if (_selectedItem == pos && _hilite) { - if (_hasFocus && !_editMode) + if(_hasFocus && !_editMode) + { s.fillRect(_x + 1, _y + 1 + _fontHeight * i, _w - 1, _fontHeight, kTextColorHi); + textColor = kTextColorInv; + } else s.frameRect(_x + 1, _y + 1 + _fontHeight * i, _w - 1, _fontHeight, kTextColorHi); } @@ -68,20 +72,12 @@ void StringListWidget::drawWidget(bool hilite) if (_selectedItem == pos && _editMode) { adjustOffset(); -#ifndef FLAT_UI - s.drawString(_font, editString(), _x + r.left, y, r.width(), kTextColor, + + s.drawString(_font, editString(), _x + r.left, y, r.width(), textColor, TextAlign::Left, -_editScrollOffset, false); } else - s.drawString(_font, _list[pos], _x + r.left, y, r.width(), kTextColor); -#else - s.drawString(_font, editString(), _x + r.left, y, r.width(), kTextColor, - TextAlign::Left, -_editScrollOffset, false); - } - else - s.drawString(_font, _list[pos], _x + r.left, y, r.width(), - _selectedItem == pos && _hilite && _hasFocus && !_editMode ? kWidColor : kTextColor); -#endif + s.drawString(_font, _list[pos], _x + r.left, y, r.width(), textColor); } // Only draw the caret while editing, and if it's in the current viewport diff --git a/src/windows/Stella.vcxproj b/src/windows/Stella.vcxproj index c63e35bdd..37c361957 100644 --- a/src/windows/Stella.vcxproj +++ b/src/windows/Stella.vcxproj @@ -111,7 +111,7 @@ /MP /std:c++latest %(AdditionalOptions) Disabled ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - FLAT_UI;BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) false EnableFastChecks MultiThreadedDLL @@ -142,7 +142,7 @@ /MP /std:c++latest %(AdditionalOptions) Disabled ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - FLAT_UI;BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) false EnableFastChecks MultiThreadedDLL @@ -171,7 +171,7 @@ true false ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - FLAT_UI;BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) MultiThreadedDLL false @@ -204,7 +204,7 @@ Default true ..\yacc;..\emucore;..\emucore\tia;..\emucore\tia\frame-manager;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories) - FLAT_UI;BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) + BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions) MultiThreadedDLL false From eeb1491efd575a9fe019977d552bec59c06df264 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 17 Dec 2017 12:16:37 +0100 Subject: [PATCH 083/156] polishing FLAT_UI --- src/debugger/gui/DataGridWidget.cxx | 12 ++++++++++++ src/debugger/gui/ToggleBitWidget.cxx | 10 ++++++++++ src/emucore/FBSurface.cxx | 13 +++++++++++++ src/emucore/FrameBuffer.cxx | 4 ++-- src/gui/EditTextWidget.cxx | 10 +++++++++- 5 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/debugger/gui/DataGridWidget.cxx b/src/debugger/gui/DataGridWidget.cxx index c4bbf0d6d..898282016 100644 --- a/src/debugger/gui/DataGridWidget.cxx +++ b/src/debugger/gui/DataGridWidget.cxx @@ -584,11 +584,23 @@ void DataGridWidget::drawWidget(bool hilite) // Draw the internal grid and labels int linewidth = _cols * _colWidth; +#ifndef FLAT_UI for (row = 0; row <= _rows; row++) s.hLine(_x, _y + (row * _rowHeight), _x + linewidth, kColor); int lineheight = _rows * _rowHeight; for (col = 0; col <= _cols; col++) s.vLine(_x + (col * _colWidth), _y, _y + lineheight, kColor); +#else + s.frameRect(_x, _y, _w, _h, kColor); + for(row = 1; row <= _rows-1; row++) + s.hLine(_x+1, _y + (row * _rowHeight), _x + linewidth-1, kBGColorLo); + + int lineheight = _rows * _rowHeight; + for(col = 1; col <= _cols-1; col++) + s.vLine(_x + (col * _colWidth), _y+1, _y + lineheight-1, kBGColorLo); +#endif + + // Draw the list items for (row = 0; row < _rows; row++) diff --git a/src/debugger/gui/ToggleBitWidget.cxx b/src/debugger/gui/ToggleBitWidget.cxx index b42d98563..8a94cad44 100644 --- a/src/debugger/gui/ToggleBitWidget.cxx +++ b/src/debugger/gui/ToggleBitWidget.cxx @@ -78,11 +78,21 @@ void ToggleBitWidget::drawWidget(bool hilite) // Draw the internal grid and labels int linewidth = _cols * _colWidth; +#ifndef FLAT_UI for (row = 0; row <= _rows; row++) s.hLine(_x, _y + (row * _rowHeight), _x + linewidth, kColor); int lineheight = _rows * _rowHeight; for (col = 0; col <= _cols; col++) s.vLine(_x + (col * _colWidth), _y, _y + lineheight, kColor); +#else + s.frameRect(_x, _y, _w, _h, kColor); + for(row = 1; row <= _rows - 1; row++) + s.hLine(_x + 1, _y + (row * _rowHeight), _x + linewidth - 1, kBGColorLo); + + int lineheight = _rows * _rowHeight; + for(col = 1; col <= _cols - 1; col++) + s.vLine(_x + (col * _colWidth), _y + 1, _y + lineheight - 1, kBGColorLo); +#endif // Draw the list items for (row = 0; row < _rows; row++) diff --git a/src/emucore/FBSurface.cxx b/src/emucore/FBSurface.cxx index 27b048fbf..c5c39b961 100644 --- a/src/emucore/FBSurface.cxx +++ b/src/emucore/FBSurface.cxx @@ -194,6 +194,7 @@ void FBSurface::frameRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h, case FrameStyle::Dashed: uInt32 i, skip, lwidth = 1; +#ifndef FLAT_UI for(i = x, skip = 1; i < x+w-1; i=i+lwidth+1, ++skip) { if(skip % 2) @@ -210,6 +211,18 @@ void FBSurface::frameRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h, vLine(x + w - 1, i, i + lwidth, color); } } +#else + for(i = x; i < x + w; i += 2) + { + hLine(i, y, i, color); + hLine(i, y + h - 1, i, color); + } + for(i = y; i < y + h; i += 2) + { + vLine(x, i, i, color); + vLine(x + w - 1, i, i, color); + } +#endif break; } } diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index e2fd2afa5..b432f646d 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -971,13 +971,13 @@ uInt32 FrameBuffer::ourGUIColors[3][kNumColors-256] = { }, // Light { - 0x686868, 0x000000, 0xc0c0c0, 0xe1e1e1, 0x333333, // base + 0x808080, 0x000000, 0xc0c0c0, 0xe1e1e1, 0x333333, // base 0x000000, 0x0078d7, 0x0078d7, 0xffffff, // text 0xf0f0f0, 0xffffff, 0x0f0f0f, // elements 0xe1e1e1, 0xe5f1fb, 0x202020, 0x000000, // buttons 0x333333, // checkbox 0x808080, 0x0078d7, // scrollbar 0x333333, 0x0078d7, // slider - 0xffc0c0, 0x000000, 0xe00000, 0x800000 // debugger + 0xffc0c0, 0x000000, 0xe00000, 0xc00000 // debugger } }; diff --git a/src/gui/EditTextWidget.cxx b/src/gui/EditTextWidget.cxx index 11802d365..2f330d978 100644 --- a/src/gui/EditTextWidget.cxx +++ b/src/gui/EditTextWidget.cxx @@ -71,13 +71,21 @@ void EditTextWidget::drawWidget(bool hilite) if(_changed) s.fillRect(_x, _y, _w, _h, kDbgChangedColor); else if(!isEditable()) - s.fillRect(_x, _y, _w, _h, kBGColorHi); +#ifndef FLAT_UI + s.fillRect(_x, _y, _w, _h, kBGColorHi); +#else + s.fillRect(_x, _y, _w, _h, kDlgColor); +#endif // Draw a thin frame around us. +#ifndef FLAT_UI s.hLine(_x, _y, _x + _w - 1, kColor); s.hLine(_x, _y + _h - 1, _x +_w - 1, kShadowColor); s.vLine(_x, _y, _y + _h - 1, kColor); s.vLine(_x + _w - 1, _y, _y + _h - 1, kShadowColor); +#else + s.frameRect(_x, _y, _w, _h, kColor); +#endif // Draw the text adjustOffset(); From dfca521bf921406f0ca7b4f0a2268109807dca9d Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 17 Dec 2017 12:24:16 +0100 Subject: [PATCH 084/156] two minor bug fixes --- src/debugger/gui/DebuggerDialog.cxx | 2 +- src/gui/DeveloperDialog.cxx | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/debugger/gui/DebuggerDialog.cxx b/src/debugger/gui/DebuggerDialog.cxx index cfeac07d2..9d0e7a2cb 100644 --- a/src/debugger/gui/DebuggerDialog.cxx +++ b/src/debugger/gui/DebuggerDialog.cxx @@ -63,7 +63,7 @@ DebuggerDialog::DebuggerDialog(OSystem& osystem, DialogContainer& parent, // Inform the TIA output widget about its associated zoom widget myTiaOutput->setZoomWidget(myTiaZoom); - myOptions = make_unique(osystem, parent, this, w, h, true); + myOptions = make_unique(osystem, parent, this, w, h, false); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index 90d89b1b9..eb8b0b18e 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -959,7 +959,10 @@ void DeveloperDialog::handleTimeMachine() myStateIntervalWidget->setEnabled(enable); - myStateHorizonWidget->setEnabled(enable); + uInt32 size = myStateSizeWidget->getValue(); + uInt32 uncompressed = myUncompressedWidget->getValue(); + + myStateHorizonWidget->setEnabled(enable && size > uncompressed); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 7f08d9b74c085d0f61d69837ac8936133ea2be14 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 17 Dec 2017 13:28:23 +0100 Subject: [PATCH 085/156] some more UI polishing --- src/debugger/gui/TiaOutputWidget.cxx | 11 +++++++++-- src/debugger/gui/TiaZoomWidget.cxx | 8 ++++++++ src/emucore/FrameBuffer.cxx | 6 +++++- src/gui/TabWidget.cxx | 2 +- src/gui/TabWidget.hxx | 4 ++++ 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/debugger/gui/TiaOutputWidget.cxx b/src/debugger/gui/TiaOutputWidget.cxx index ddbf48d29..391713ba1 100644 --- a/src/debugger/gui/TiaOutputWidget.cxx +++ b/src/debugger/gui/TiaOutputWidget.cxx @@ -159,6 +159,9 @@ void TiaOutputWidget::drawWidget(bool hilite) height = instance().console().tia().height(); FBSurface& s = dialog().surface(); + s.vLine(_x + _w + 1, _y, height, kColor); + s.hLine(_x, _y + height + 1, _x +_w + 1, kColor); + // Get current scanline position // This determines where the frame greying should start, and where a // scanline 'pointer' should be drawn @@ -176,10 +179,14 @@ void TiaOutputWidget::drawWidget(bool hilite) *line_ptr++ = pixel; *line_ptr++ = pixel; } - s.drawPixels(myLineBuffer, _x, _y+y, width << 1); + s.drawPixels(myLineBuffer, _x + 1, _y + 1 + y, width << 1); } + uInt32 beamColor = kBtnTextColor; + if(instance().settings().getString("uipalette") == "light") + beamColor = kWidColor; + // Show electron beam position if(visible && scanx < width && scany+2u < height) - s.fillRect(_x+(scanx<<1), _y+scany, 3, 3, kBtnTextColor); + s.fillRect(_x + 1 + (scanx<<1), _y + 1 + scany, 3, 3, beamColor); } diff --git a/src/debugger/gui/TiaZoomWidget.cxx b/src/debugger/gui/TiaZoomWidget.cxx index 4c9b93534..2633bb1e1 100644 --- a/src/debugger/gui/TiaZoomWidget.cxx +++ b/src/debugger/gui/TiaZoomWidget.cxx @@ -242,7 +242,11 @@ void TiaZoomWidget::drawWidget(bool hilite) FBSurface& s = dialog().surface(); s.fillRect(_x+1, _y+1, _w-2, _h-2, kBGColor); +#ifndef FLAT_UI s.box(_x, _y, _w, _h, kColor, kShadowColor); +#else + s.frameRect(_x, _y, _w, _h, kColor); +#endif // Draw the zoomed image // This probably isn't as efficient as it can be, but it's a small area @@ -265,7 +269,11 @@ void TiaZoomWidget::drawWidget(bool hilite) { uInt32 idx = y*width + x; uInt32 color = currentFrame[idx] | (idx > scanoffset ? 1 : 0); +#ifndef FLAT_UI s.fillRect(_x + col + 2, _y + row + 2, wzoom, hzoom, color); +#else + s.fillRect(_x + col + 1, _y + row + 1, wzoom, hzoom, color); +#endif } } } diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index b432f646d..a6210a24c 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -460,8 +460,12 @@ inline void FrameBuffer::drawMessage() myMsg.surface->setDstPos(myMsg.x + myImageRect.x(), myMsg.y + myImageRect.y()); myMsg.surface->fillRect(1, 1, myMsg.w-2, myMsg.h-2, kBtnColor); +#ifndef FLAT_UI myMsg.surface->box(0, 0, myMsg.w, myMsg.h, kColor, kShadowColor); - myMsg.surface->drawString(font(), myMsg.text, 4, 4, +#else + myMsg.surface->frameRect(0, 0, myMsg.w, myMsg.h, kColor); +#endif + myMsg.surface->drawString(font(), myMsg.text, 5, 4, myMsg.w, myMsg.color, TextAlign::Left); // Either erase the entire message (when time is reached), diff --git a/src/gui/TabWidget.cxx b/src/gui/TabWidget.cxx index 22bd2ec13..aa9b1ef60 100644 --- a/src/gui/TabWidget.cxx +++ b/src/gui/TabWidget.cxx @@ -329,7 +329,7 @@ void TabWidget::drawWidget(bool hilite) s.vLine(_x + _w - 2, _y + _tabHeight - 1, _y + _h - 2, kColor); s.vLine(_x + _w - 1, _y + _tabHeight - 1, _y + _h - 2, kShadowColor); #else - s.hLine(right1, _y, left2, kScrollColorHi); + s.hLine(right1, _y, left2 - 1, kScrollColorHi); #endif } diff --git a/src/gui/TabWidget.hxx b/src/gui/TabWidget.hxx index 8ca79abce..8cfabf436 100644 --- a/src/gui/TabWidget.hxx +++ b/src/gui/TabWidget.hxx @@ -90,7 +90,11 @@ class TabWidget : public Widget, public CommandSender bool _firstTime; enum { +#ifndef FLAT_UI kTabLeftOffset = 4, +#else + kTabLeftOffset = 0, +#endif kTabSpacing = 2, kTabPadding = 3 }; From 0def7adb61b85d2104711c6909c752e632fe1b40 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 17 Dec 2017 13:52:50 +0100 Subject: [PATCH 086/156] fixed bug when leaving 'Options' in debugger --- src/debugger/gui/DebuggerDialog.cxx | 2 +- src/gui/LauncherDialog.cxx | 2 +- src/gui/Menu.cxx | 2 +- src/gui/OptionsDialog.cxx | 12 ++++++------ src/gui/OptionsDialog.hxx | 12 ++++++++++-- 5 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/debugger/gui/DebuggerDialog.cxx b/src/debugger/gui/DebuggerDialog.cxx index 9d0e7a2cb..68de3cca5 100644 --- a/src/debugger/gui/DebuggerDialog.cxx +++ b/src/debugger/gui/DebuggerDialog.cxx @@ -63,7 +63,7 @@ DebuggerDialog::DebuggerDialog(OSystem& osystem, DialogContainer& parent, // Inform the TIA output widget about its associated zoom widget myTiaOutput->setZoomWidget(myTiaZoom); - myOptions = make_unique(osystem, parent, this, w, h, false); + myOptions = make_unique(osystem, parent, this, w, h, OptionsDialog::debugger); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gui/LauncherDialog.cxx b/src/gui/LauncherDialog.cxx index 371956e8d..c7559a7a7 100644 --- a/src/gui/LauncherDialog.cxx +++ b/src/gui/LauncherDialog.cxx @@ -160,7 +160,7 @@ LauncherDialog::LauncherDialog(OSystem& osystem, DialogContainer& parent, mySelectedItem = 0; // Highlight 'Rom Listing' // Create an options dialog, similar to the in-game one - myOptions = make_unique(osystem, parent, this, w, h, true); + myOptions = make_unique(osystem, parent, this, w, h, OptionsDialog::launcher); // Create a game list, which contains all the information about a ROM that // the launcher needs diff --git a/src/gui/Menu.cxx b/src/gui/Menu.cxx index 444806d2b..5bb188da9 100644 --- a/src/gui/Menu.cxx +++ b/src/gui/Menu.cxx @@ -26,5 +26,5 @@ Menu::Menu(OSystem& osystem) : DialogContainer(osystem) { myBaseDialog = new OptionsDialog(myOSystem, *this, nullptr, - FrameBuffer::kFBMinW, FrameBuffer::kFBMinH, false); + FrameBuffer::kFBMinW, FrameBuffer::kFBMinH, OptionsDialog::emulator); } diff --git a/src/gui/OptionsDialog.cxx b/src/gui/OptionsDialog.cxx index a1000e3db..b0c6c4d3a 100644 --- a/src/gui/OptionsDialog.cxx +++ b/src/gui/OptionsDialog.cxx @@ -45,9 +45,9 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OptionsDialog::OptionsDialog(OSystem& osystem, DialogContainer& parent, - GuiObject* boss, int max_w, int max_h, bool global) + GuiObject* boss, int max_w, int max_h, stellaMode mode) : Dialog(osystem, parent), - myIsGlobal(global) + myMode(mode) { const GUI::Font& font = instance().frameBuffer().font(); const int buttonWidth = font.getStringWidth("Developer Settings" + ELLIPSIS) + 20, @@ -122,7 +122,7 @@ OptionsDialog::OptionsDialog(OSystem& osystem, DialogContainer& parent, addCancelWidget(b); // Now create all the dialogs attached to each menu button - myVideoDialog = make_unique(osystem, parent, font, max_w, max_h, myIsGlobal); + myVideoDialog = make_unique(osystem, parent, font, max_w, max_h, myMode == launcher); myAudioDialog = make_unique(osystem, parent, font); myInputDialog = make_unique(osystem, parent, font, max_w, max_h); myUIDialog = make_unique(osystem, parent, font); @@ -141,7 +141,7 @@ OptionsDialog::OptionsDialog(OSystem& osystem, DialogContainer& parent, addToFocusList(wid); // Certain buttons are disabled depending on mode - if(myIsGlobal) + if(myMode == launcher) { myCheatCodeButton->clearFlags(WIDGET_ENABLED); } @@ -225,7 +225,7 @@ void OptionsDialog::handleCommand(CommandSender* sender, int cmd, case kLoggerCmd: // This dialog is resizable under certain conditions, so we need // to re-create it as necessary - if(!myIsGlobal) + if(myMode != launcher) { uInt32 w = 0, h = 0; bool uselargefont = getResizableBounds(w, h); @@ -249,7 +249,7 @@ void OptionsDialog::handleCommand(CommandSender* sender, int cmd, break; case kExitCmd: - if(myIsGlobal) + if(myMode != emulator) close(); else instance().eventHandler().leaveMenuMode(); diff --git a/src/gui/OptionsDialog.hxx b/src/gui/OptionsDialog.hxx index 7e8c8a9da..0bec78a1e 100644 --- a/src/gui/OptionsDialog.hxx +++ b/src/gui/OptionsDialog.hxx @@ -45,8 +45,16 @@ class DeveloperDialog; class OptionsDialog : public Dialog { public: + // Current Stella mode + enum stellaMode + { + launcher, + emulator, + debugger + }; + OptionsDialog(OSystem& osystem, DialogContainer& parent, GuiObject* boss, - int max_w, int max_h, bool global); + int max_w, int max_h, stellaMode mode); virtual ~OptionsDialog(); private: @@ -75,7 +83,7 @@ class OptionsDialog : public Dialog ButtonWidget* myCheatCodeButton; // Indicates if this dialog is used for global (vs. in-game) settings - bool myIsGlobal; + stellaMode myMode; enum { kVidCmd = 'VIDO', From b76566e864b475bcb92b7603c881d9bec7e5d8a6 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 17 Dec 2017 16:43:05 +0100 Subject: [PATCH 087/156] line drawing method added to FBSurface inactive cells are displayed as crossed out in FLAT_UI --- src/debugger/gui/TogglePixelWidget.cxx | 14 +++++- src/emucore/FBSurface.cxx | 69 ++++++++++++++++++++++++++ src/emucore/FBSurface.hxx | 20 ++++++++ src/gui/ColorWidget.cxx | 11 ++++ 4 files changed, 113 insertions(+), 1 deletion(-) diff --git a/src/debugger/gui/TogglePixelWidget.cxx b/src/debugger/gui/TogglePixelWidget.cxx index 0beda25da..5f310ea91 100644 --- a/src/debugger/gui/TogglePixelWidget.cxx +++ b/src/debugger/gui/TogglePixelWidget.cxx @@ -138,6 +138,18 @@ void TogglePixelWidget::drawWidget(bool hilite) // Cross out the bits? if(_crossBits) + { +#ifndef FLAT_UI for(row = 1; row < 4; ++row) - s.hLine(_x, _y + (row * lineheight/4), _x + linewidth, kColor); + s.hLine(_x, _y + (row * lineheight / 4), _x + linewidth, kColor); +#else + for(col = 0; col < _cols; ++col) + { + int x = _x + col * _colWidth; + + s.line(x + 1, _y + 1, x + _colWidth - 1, _y + lineheight - 1, kColor); + s.line(x + _colWidth - 1, _y + 1, x + 1, _y + lineheight - 1, kColor); + } +#endif + } } diff --git a/src/emucore/FBSurface.cxx b/src/emucore/FBSurface.cxx index c5c39b961..eeaf8405b 100644 --- a/src/emucore/FBSurface.cxx +++ b/src/emucore/FBSurface.cxx @@ -15,6 +15,8 @@ // this file, and for a DISCLAIMER OF ALL WARRANTIES. //============================================================================ +#include + #include "Font.hxx" #include "Rect.hxx" #include "FrameBuffer.hxx" @@ -57,6 +59,73 @@ void FBSurface::readPixels(uInt8* buffer, uInt32 pitch, const GUI::Rect& rect) c } } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void FBSurface::pixel(uInt32 x, uInt32 y, uInt32 color) +{ + uInt32* buffer = myPixels + y * myPitch + x; + + *buffer = uInt32(myPalette[color]); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void FBSurface::line(uInt32 x, uInt32 y, uInt32 x2, uInt32 y2, uInt32 color) +{ + // draw line using Bresenham algorithm + Int32 dx = (x2 - x); + Int32 dy = (y2 - y); + + if(abs(dx) >= abs(dy)) + { + // x is major axis + if(dx < 0) + { + uInt32 tx = x; x = x2; x2 = tx; + uInt32 ty = y; y = y2; y2 = ty; + dx = -dx; + dy = -dy; + } + Int32 yd = dy > 0 ? 1 : -1; + dy = abs(dy); + Int32 err = dx / 2; + // now draw the line + for(; x <= x2; ++x) + { + pixel(x, y, color); + err -= dy; + if(err < 0) + { + err += dx; + y += yd; + } + } + } + else + { + // y is major axis + if(dy < 0) + { + uInt32 tx = x; x = x2; x2 = tx; + uInt32 ty = y; y = y2; y2 = ty; + dx = -dx; + dy = -dy; + } + Int32 xd = dx > 0 ? 1 : -1; + dx = abs(dx); + Int32 err = dy / 2; + // now draw the line + for(; y <= y2; ++y) + { + pixel(x, y, color); + err -= dx; + if(err < 0) + { + err += dy; + x += xd; + } + } + } +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void FBSurface::hLine(uInt32 x, uInt32 y, uInt32 x2, uInt32 color) { diff --git a/src/emucore/FBSurface.hxx b/src/emucore/FBSurface.hxx index 3b9a9ca70..2f97a4bcc 100644 --- a/src/emucore/FBSurface.hxx +++ b/src/emucore/FBSurface.hxx @@ -72,6 +72,26 @@ class FBSurface // implement them more efficiently. ////////////////////////////////////////////////////////////////////////// + /** + This method should be called to draw a single pixel. + + @param x The x coordinate + @param y The y coordinate + @param color The color of the line + */ + virtual void pixel(uInt32 x, uInt32 y, uInt32 color); + + /** + This method should be called to draw a line. + + @param x The first x coordinate + @param y The y coordinate + @param x2 The second x coordinate + @param xy The second y coordinate + @param color The color of the line + */ + virtual void line(uInt32 x, uInt32 y, uInt32 x2, uInt32 y2, uInt32 color); + /** This method should be called to draw a horizontal line. diff --git a/src/gui/ColorWidget.cxx b/src/gui/ColorWidget.cxx index 0c36b131f..e36bc6268 100644 --- a/src/gui/ColorWidget.cxx +++ b/src/gui/ColorWidget.cxx @@ -48,16 +48,27 @@ void ColorWidget::drawWidget(bool hilite) FBSurface& s = dialog().surface(); // Draw a thin frame around us. +#ifndef FLAT_UI s.hLine(_x, _y, _x + _w - 1, kColor); s.hLine(_x, _y +_h, _x + _w - 1, kShadowColor); s.vLine(_x, _y, _y+_h, kColor); s.vLine(_x + _w - 1, _y, _y +_h - 1, kShadowColor); +#else + s.frameRect(_x, _y, _w, _h + 1, kColor); +#endif // Show the currently selected color s.fillRect(_x+1, _y+1, _w-2, _h-1, isEnabled() ? _color : kWidColor); // Cross out the grid? if(_crossGrid) + { +#ifndef FLAT_UI for(uInt32 row = 1; row < 4; ++row) s.hLine(_x, _y + (row * _h/4), _x + _w - 2, kColor); +#else + s.line(_x + 1, _y + 1, _x + _w - 2, _y + _h - 1, kColor); + s.line(_x + _w - 2, _y + 1, _x + 1, _y + _h - 1, kColor); +#endif + } } From 7fcbb8f401160cd297042497d331f9a7e7d417be Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 17 Dec 2017 17:59:25 +0100 Subject: [PATCH 088/156] updated doc for 'dump' command --- docs/debugger.html | 2 +- src/debugger/DebuggerParser.cxx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/debugger.html b/docs/debugger.html index 88d3eb3f2..4f1d506cc 100644 --- a/docs/debugger.html +++ b/docs/debugger.html @@ -915,7 +915,7 @@ clearsavestateifs - Clear all savestate points deltrap - Delete trap <xx> delwatch - Delete watch <xx> disasm - Disassemble address xx [yy lines] (default=PC) - dump - Dump data at address <xx> [to yy] [0 - 7] (dump to file options) + dump - Dump data at address <xx> [to yy] [1: memory; 2: CPU state; 4: input regs] exec - Execute script file <xx> [prefix] exitrom - Exit emulator, return to ROM launcher frame - Advance emulation by <xx> frames (default=1) diff --git a/src/debugger/DebuggerParser.cxx b/src/debugger/DebuggerParser.cxx index 9f90d3570..de621faf3 100644 --- a/src/debugger/DebuggerParser.cxx +++ b/src/debugger/DebuggerParser.cxx @@ -2470,11 +2470,11 @@ DebuggerParser::Command DebuggerParser::commands[kNumCommands] = { { "dump", - "Dump data at address [to yy] [0-7] (dump to file options)", + "Dump data at address [to yy] [1: memory; 2: CPU state; 4: input regs]", "Example:\n" " dump f000 - dumps 128 bytes @ f000\n" " dump f000 f0ff - dumps all bytes from f000 to f0ff\n" - " dump f000 f0ff 7 - dumps all bytes from f000 to f0ff, CPU and input states into a file", + " dump f000 f0ff 7 - dumps all bytes from f000 to f0ff, CPU state and input registers into a file", true, false, { kARG_WORD, kARG_MULTI_BYTE }, From 6629393e659961865f7d06b67b4da34929371209 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 17 Dec 2017 18:00:06 +0100 Subject: [PATCH 089/156] PopupWidget layout improved --- src/gui/ContextMenu.cxx | 18 +++++++++++++----- src/gui/ContextMenu.hxx | 3 ++- src/gui/PopUpWidget.cxx | 16 ++++++++-------- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/gui/ContextMenu.cxx b/src/gui/ContextMenu.cxx index 3e046a21f..aa17c91ed 100644 --- a/src/gui/ContextMenu.cxx +++ b/src/gui/ContextMenu.cxx @@ -26,7 +26,7 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ContextMenu::ContextMenu(GuiObject* boss, const GUI::Font& font, - const VariantList& items, int cmd) + const VariantList& items, int cmd, int width) : Dialog(boss->instance(), boss->parent()), CommandSender(boss), _rowHeight(font.getLineHeight()), @@ -41,7 +41,8 @@ ContextMenu::ContextMenu(GuiObject* boss, const GUI::Font& font, _font(font), _cmd(cmd), _xorig(0), - _yorig(0) + _yorig(0), + _maxWidth(width) { addItems(items); } @@ -53,15 +54,15 @@ void ContextMenu::addItems(const VariantList& items) _entries = items; // Resize to largest string - int maxwidth = 0; + int maxwidth = _maxWidth; for(const auto& e: _entries) maxwidth = std::max(maxwidth, _font.getStringWidth(e.first)); _x = _y = 0; #ifndef FLAT_UI - _w = maxwidth + 10; + _w = maxwidth + 15; #else - _w = maxwidth + 10 + 5; + _w = maxwidth + 23; #endif _h = 1; // recalculate this in ::recalc() @@ -553,10 +554,17 @@ void ContextMenu::drawDialog() { // Draw menu border and background s.fillRect(_x+1, _y+1, _w-2, _h-2, kWidColor); +#ifndef FLAT_UI s.box(_x, _y, _w, _h, kColor, kShadowColor); // Draw the entries, taking scroll buttons into account int x = _x + 2, y = _y + 2, w = _w - 4; +#else + s.frameRect(_x, _y, _w, _h, kTextColor); + + // Draw the entries, taking scroll buttons into account + int x = _x + 1, y = _y + 1, w = _w - 2; +#endif // Show top scroll area int offset = _selectedOffset; diff --git a/src/gui/ContextMenu.hxx b/src/gui/ContextMenu.hxx index bfc2f2147..a8f48072e 100644 --- a/src/gui/ContextMenu.hxx +++ b/src/gui/ContextMenu.hxx @@ -42,7 +42,7 @@ class ContextMenu : public Dialog, public CommandSender public: ContextMenu(GuiObject* boss, const GUI::Font& font, - const VariantList& items, int cmd = 0); + const VariantList& items, int cmd = 0, int width = 0); virtual ~ContextMenu() = default; /** Add the given items to the widget. */ @@ -124,6 +124,7 @@ class ContextMenu : public Dialog, public CommandSender int _cmd; uInt32 _xorig, _yorig; + uInt32 _maxWidth; private: // Following constructors and assignment operators not supported diff --git a/src/gui/PopUpWidget.cxx b/src/gui/PopUpWidget.cxx index f7182f02b..fe516fe28 100644 --- a/src/gui/PopUpWidget.cxx +++ b/src/gui/PopUpWidget.cxx @@ -59,9 +59,9 @@ PopUpWidget::PopUpWidget(GuiObject* boss, const GUI::Font& font, { _flags = WIDGET_ENABLED | WIDGET_CLEARBG | WIDGET_RETAIN_FOCUS; _bgcolor = kDlgColor; - _bgcolorhi = kWidColor; + _bgcolorhi = kDlgColor; // do not highlight the label _textcolor = kTextColor; - _textcolorhi = kTextColor; + _textcolorhi = kTextColor; // do not highlight the label if(!_label.empty() && _labelWidth == 0) _labelWidth = _font.getStringWidth(_label); @@ -76,7 +76,7 @@ PopUpWidget::PopUpWidget(GuiObject* boss, const GUI::Font& font, myTextY = (_h - _font.getFontHeight()) / 2; myArrowsY = (_h - 8) / 2; - myMenu = make_unique(this, font, list, cmd); + myMenu = make_unique(this, font, list, cmd, w); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -230,8 +230,8 @@ void PopUpWidget::drawWidget(bool hilite) s.vLine(x, _y, _y+_h-1, kColor); s.vLine(x + w - 1, _y, _y +_h - 1, kShadowColor); #else - s.frameRect(x, _y, w - 16, _h, kColor); - s.frameRect(x + w - 17, _y, 17, _h, hilite ? kTextColorHi : kColor); + s.frameRect(x, _y, w, _h, kColor); + s.frameRect(x + w - 16, _y + 1, 15, _h - 2, hilite ? kTextColorHi : kBGColorLo); #endif // !FLAT_UI #ifndef FLAT_UI @@ -242,12 +242,12 @@ void PopUpWidget::drawWidget(bool hilite) !isEnabled() ? kColor : hilite ? kTextColorHi : kTextColor); #else // Fill the background - s.fillRect(x + 1, _y + 1, w - 2 - 16, _h - 2, kWidColor); - s.fillRect(x + w - 15 - 1, _y + 1, 15, _h - 2, kBGColorHi); + s.fillRect(x + 1, _y + 1, w - 17, _h - 2, kWidColor); + s.fillRect(x + w - 15, _y + 2, 13, _h - 4, kBGColorHi); //s.vLine(x + w - 17, _y, _y + _h - 1, kShadowColor); // Draw an arrow pointing down at the right end to signal this is a dropdown/popup s.drawBitmap(down_arrow, x + w - 13, _y + myArrowsY + 1, - !isEnabled() ? kCheckColor : kTextColor, 9u, 8u); + !isEnabled() ? kColor : kTextColor, 9u, 8u); #endif // Draw the selected entry, if any From 3943076455bd4d02549e917e73e70f9a120f9b40 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 17 Dec 2017 18:04:27 +0100 Subject: [PATCH 090/156] updated docs for new UI palette 'Light' --- Changes.txt | 2 ++ docs/index.html | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Changes.txt b/Changes.txt index 08c239241..d024c7a32 100644 --- a/Changes.txt +++ b/Changes.txt @@ -75,6 +75,8 @@ dialog. These settings now come in two groups (player/developer) and allow switching all settings at once. + * added new interface palette 'Light' + * Improved tab auto-complete in debugger * Added conditional traps and savestate creation to debugger diff --git a/docs/index.html b/docs/index.html index 069995fe9..9c3f7ae75 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2206,7 +2206,7 @@ - + From c9eaf31181185107ada497a59d8501564c414ab9 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Sun, 17 Dec 2017 21:19:32 +0100 Subject: [PATCH 091/156] Fixed several (invisible) widget transparency issues (WIDGET_CLEARBG) --- src/gui/DeveloperDialog.cxx | 3 --- src/gui/EventMappingWidget.cxx | 1 - src/gui/GameInfoDialog.cxx | 4 ---- src/gui/InputDialog.cxx | 4 ---- src/gui/PopUpWidget.cxx | 2 +- src/gui/TabWidget.cxx | 2 +- src/gui/UIDialog.cxx | 2 -- src/gui/VideoDialog.cxx | 4 ---- src/gui/Widget.cxx | 4 ++-- 9 files changed, 4 insertions(+), 22 deletions(-) diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index eb8b0b18e..469c30a3e 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -202,7 +202,6 @@ void DeveloperDialog::addVideoTab(const GUI::Font& font) myTVJitterRecWidget->getRight() + 4, myTVJitterRecWidget->getTop() + 2, 5 * fontWidth, fontHeight, "", TextAlign::Left); - myTVJitterRecLabelWidget->setFlags(WIDGET_CLEARBG); wid.push_back(myTVJitterRecLabelWidget); ypos += lineHeight + VGAP; @@ -431,7 +430,6 @@ void DeveloperDialog::addDebuggerTab(const GUI::Font& font) new StaticTextWidget(myTab, font, xpos + myDebuggerWidthSlider->getWidth() + 4, ypos + 1, 4 * fontWidth, fontHeight, "", TextAlign::Left); - myDebuggerWidthLabel->setFlags(WIDGET_CLEARBG); ypos += lineHeight + VGAP; myDebuggerHeightSlider = new SliderWidget(myTab, font, xpos, ypos-1, pwidth, @@ -445,7 +443,6 @@ void DeveloperDialog::addDebuggerTab(const GUI::Font& font) new StaticTextWidget(myTab, font, xpos + myDebuggerHeightSlider->getWidth() + 4, ypos + 1, 4 * fontWidth, fontHeight, "", TextAlign::Left); - myDebuggerHeightLabel->setFlags(WIDGET_CLEARBG); // Add message concerning usage const GUI::Font& infofont = instance().frameBuffer().infoFont(); diff --git a/src/gui/EventMappingWidget.cxx b/src/gui/EventMappingWidget.cxx index 319e6c720..2f5c58f37 100644 --- a/src/gui/EventMappingWidget.cxx +++ b/src/gui/EventMappingWidget.cxx @@ -109,7 +109,6 @@ EventMappingWidget::EventMappingWidget(GuiObject* boss, const GUI::Font& font, StaticTextWidget* t; t = new StaticTextWidget(boss, font, xpos, ypos+2, font.getStringWidth("Action"), fontHeight, "Action", TextAlign::Left); - t->setFlags(WIDGET_CLEARBG); myKeyMapping = new EditTextWidget(boss, font, xpos + t->getWidth() + 8, ypos, _w - xpos - t->getWidth() - 15, lineHeight, ""); diff --git a/src/gui/GameInfoDialog.cxx b/src/gui/GameInfoDialog.cxx index 450ea889e..801de79a7 100644 --- a/src/gui/GameInfoDialog.cxx +++ b/src/gui/GameInfoDialog.cxx @@ -282,7 +282,6 @@ GameInfoDialog::GameInfoDialog( myMouseRangeLabel = new StaticTextWidget(myTab, font, myMouseRange->getRight() + 4, myMouseRange->getTop()+1, " ", TextAlign::Left); - myMouseRangeLabel->setFlags(WIDGET_CLEARBG); // Add items for tab 2 addToFocusList(wid, myTab, tabID); @@ -316,7 +315,6 @@ GameInfoDialog::GameInfoDialog( wid.push_back(myYStart); myYStartLabel = new StaticTextWidget(myTab, font, myYStart->getRight() + 4, ypos+1, 5*fontWidth, fontHeight, "", TextAlign::Left); - myYStartLabel->setFlags(WIDGET_CLEARBG); ypos += lineHeight + vGap; t = new StaticTextWidget(myTab, font, hSpace, ypos+1, "Height ", TextAlign::Left); @@ -327,7 +325,6 @@ GameInfoDialog::GameInfoDialog( wid.push_back(myHeight); myHeightLabel = new StaticTextWidget(myTab, font, myHeight->getRight() + 4, ypos+1, 5*fontWidth, fontHeight, "", TextAlign::Left); - myHeightLabel->setFlags(WIDGET_CLEARBG); // Phosphor ypos += lineHeight + vGap*4; @@ -345,7 +342,6 @@ GameInfoDialog::GameInfoDialog( myPPBlendLabel = new StaticTextWidget(myTab, font, myPPBlend->getRight() + 4, myPhosphor->getTop(), 5*fontWidth, fontHeight, "", TextAlign::Left); - myPPBlendLabel->setFlags(WIDGET_CLEARBG); // Add items for tab 3 addToFocusList(wid, myTab, tabID); diff --git a/src/gui/InputDialog.cxx b/src/gui/InputDialog.cxx index 8af17b370..54254ba95 100644 --- a/src/gui/InputDialog.cxx +++ b/src/gui/InputDialog.cxx @@ -163,7 +163,6 @@ void InputDialog::addDevicePortTab(const GUI::Font& font) xpos = hSpace + myDeadzone->getWidth() + 5; myDeadzoneLabel = new StaticTextWidget(myTab, font, xpos, ypos+1, 5*fontWidth, lineHeight, "", TextAlign::Left); - myDeadzoneLabel->setFlags(WIDGET_CLEARBG); wid.push_back(myDeadzone); // Add paddle speed (digital emulation) @@ -175,7 +174,6 @@ void InputDialog::addDevicePortTab(const GUI::Font& font) xpos = hSpace + myDPaddleSpeed->getWidth() + 5; myDPaddleLabel = new StaticTextWidget(myTab, font, xpos, ypos+1, 24, lineHeight, "", TextAlign::Left); - myDPaddleLabel->setFlags(WIDGET_CLEARBG); wid.push_back(myDPaddleSpeed); // Add paddle speed (mouse emulation) @@ -187,7 +185,6 @@ void InputDialog::addDevicePortTab(const GUI::Font& font) xpos = hSpace + myMPaddleSpeed->getWidth() + 5; myMPaddleLabel = new StaticTextWidget(myTab, font, xpos, ypos+1, 24, lineHeight, "", TextAlign::Left); - myMPaddleSpeed->setFlags(WIDGET_CLEARBG); wid.push_back(myMPaddleSpeed); // Add trackball speed @@ -199,7 +196,6 @@ void InputDialog::addDevicePortTab(const GUI::Font& font) xpos = hSpace + myTrackBallSpeed->getWidth() + 5; myTrackBallLabel = new StaticTextWidget(myTab, font, xpos, ypos+1, 24, lineHeight, "", TextAlign::Left); - myTrackBallSpeed->setFlags(WIDGET_CLEARBG); wid.push_back(myTrackBallSpeed); // Add 'allow all 4 directions' for joystick diff --git a/src/gui/PopUpWidget.cxx b/src/gui/PopUpWidget.cxx index fe516fe28..c66d1d319 100644 --- a/src/gui/PopUpWidget.cxx +++ b/src/gui/PopUpWidget.cxx @@ -57,7 +57,7 @@ PopUpWidget::PopUpWidget(GuiObject* boss, const GUI::Font& font, _label(label), _labelWidth(labelWidth) { - _flags = WIDGET_ENABLED | WIDGET_CLEARBG | WIDGET_RETAIN_FOCUS; + _flags = WIDGET_ENABLED | WIDGET_RETAIN_FOCUS; _bgcolor = kDlgColor; _bgcolorhi = kDlgColor; // do not highlight the label _textcolor = kTextColor; diff --git a/src/gui/TabWidget.cxx b/src/gui/TabWidget.cxx index aa9b1ef60..1a51cc1e3 100644 --- a/src/gui/TabWidget.cxx +++ b/src/gui/TabWidget.cxx @@ -312,7 +312,7 @@ void TabWidget::drawWidget(bool hilite) #else int yOffset = (i == _activeTab) ? 0 : 1; s.fillRect(x, _y, _tabWidth, _tabHeight, (i == _activeTab) - ? kDlgColor : kBGColorHi); + ? kDlgColor : kBGColorHi); // ? kWidColor : kDlgColor s.drawString(_font, _tabs[i].title, x + kTabPadding + yOffset, _y + yOffset + (_tabHeight - _fontHeight - 1), _tabWidth - 2 * kTabPadding, (i == _activeTab |true) ? fontcolor : kColor, TextAlign::Center); diff --git a/src/gui/UIDialog.cxx b/src/gui/UIDialog.cxx index 9c7ca195e..1fc603f47 100644 --- a/src/gui/UIDialog.cxx +++ b/src/gui/UIDialog.cxx @@ -77,7 +77,6 @@ UIDialog::UIDialog(OSystem& osystem, DialogContainer& parent, new StaticTextWidget(myTab, font, xpos + myLauncherWidthSlider->getWidth() + 4, ypos + 1, 4*fontWidth, fontHeight, "", TextAlign::Left); - myLauncherWidthLabel->setFlags(WIDGET_CLEARBG); ypos += lineHeight + 4; myLauncherHeightSlider = new SliderWidget(myTab, font, xpos, ypos, pwidth, @@ -91,7 +90,6 @@ UIDialog::UIDialog(OSystem& osystem, DialogContainer& parent, new StaticTextWidget(myTab, font, xpos + myLauncherHeightSlider->getWidth() + 4, ypos + 1, 4*fontWidth, fontHeight, "", TextAlign::Left); - myLauncherHeightLabel->setFlags(WIDGET_CLEARBG); ypos += lineHeight + 4; // Launcher font diff --git a/src/gui/VideoDialog.cxx b/src/gui/VideoDialog.cxx index dc7fff9d1..c51fcfce4 100644 --- a/src/gui/VideoDialog.cxx +++ b/src/gui/VideoDialog.cxx @@ -116,7 +116,6 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent, myNAspectRatioLabel = new StaticTextWidget(myTab, font, xpos + myNAspectRatio->getWidth() + 4, ypos + 1, fontWidth * 3, fontHeight, "", TextAlign::Left); - myNAspectRatioLabel->setFlags(WIDGET_CLEARBG); ypos += lineHeight + VGAP; // Aspect ratio (PAL mode) @@ -128,7 +127,6 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent, myPAspectRatioLabel = new StaticTextWidget(myTab, font, xpos + myPAspectRatio->getWidth() + 4, ypos + 1, fontWidth * 3, fontHeight, "", TextAlign::Left); - myPAspectRatioLabel->setFlags(WIDGET_CLEARBG); ypos += lineHeight + VGAP; // Framerate @@ -141,7 +139,6 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent, myFrameRateLabel = new StaticTextWidget(myTab, font, xpos + myFrameRate->getWidth() + 4, ypos + 1, fontWidth * 4, fontHeight, "", TextAlign::Left); - myFrameRateLabel->setFlags(WIDGET_CLEARBG); // Add message concerning usage const GUI::Font& infofont = instance().frameBuffer().infoFont(); @@ -229,7 +226,6 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent, myTV ## obj ## Label = \ new StaticTextWidget(myTab, font, xpos+myTV ## obj->getWidth()+4, \ ypos+1, fontWidth*3, fontHeight, "", TextAlign::Left);\ - myTV ## obj->setFlags(WIDGET_CLEARBG); \ ypos += lineHeight + VGAP; pwidth = swidth; diff --git a/src/gui/Widget.cxx b/src/gui/Widget.cxx index 82f072404..994a913f8 100644 --- a/src/gui/Widget.cxx +++ b/src/gui/Widget.cxx @@ -297,7 +297,7 @@ StaticTextWidget::StaticTextWidget(GuiObject* boss, const GUI::Font& font, : Widget(boss, font, x, y, w, h), _align(align) { - _flags = WIDGET_ENABLED | WIDGET_CLEARBG; + _flags = WIDGET_ENABLED; _bgcolor = kDlgColor; _bgcolorhi = kDlgColor; _textcolor = kTextColor; @@ -671,7 +671,7 @@ SliderWidget::SliderWidget(GuiObject* boss, const GUI::Font& font, _isDragging(false), _labelWidth(labelWidth) { - _flags = WIDGET_ENABLED | WIDGET_TRACK_MOUSE | WIDGET_CLEARBG; + _flags = WIDGET_ENABLED | WIDGET_TRACK_MOUSE; _bgcolor = kDlgColor; _bgcolorhi = kDlgColor; From 200b5cfe8741c4b6e87ecf8612073e61eb859e31 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Mon, 18 Dec 2017 00:36:25 -0330 Subject: [PATCH 092/156] Updates to ROM properties from RomHunter: - for now, only newly added ROMs and those starting with 'A' are included --- src/emucore/DefProps.hxx | 63 +++++++++------- src/emucore/stella.pro | 154 +++++++++++++++++++++++++++------------ 2 files changed, 143 insertions(+), 74 deletions(-) diff --git a/src/emucore/DefProps.hxx b/src/emucore/DefProps.hxx index ab92029c4..8551b16a2 100644 --- a/src/emucore/DefProps.hxx +++ b/src/emucore/DefProps.hxx @@ -25,7 +25,7 @@ regenerated and the application recompiled. */ -#define DEF_PROPS_SIZE 3305 +#define DEF_PROPS_SIZE 3314 static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "000509d1ed2b8d30a9d94be1b3b5febb", "Greg Zumwalt", "", "Jungle Jane (2003) (Greg Zumwalt) (Hack)", "Hack of Pitfall!", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -135,7 +135,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "083e7cae41a874b2f9b61736c37d2ffe", "Imagic, Rob Fulop, Bob Smith", "720106-2A, IA3600P, EIX-009-04I", "Riddle of the Sphinx (1982) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "085322bae40d904f53bdcc56df0593fc", "Parker Brothers, Dave Engman, Dawn Stockbridge", "PB5340", "Tutankham (1983) (Parker Bros)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0856f202b18cd46e44fd1dc3b42e9bfb", "", "", "Frame Counter 1 (2001) (Jake Patterson) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "0866e22f6f56f92ea1a14c8d8d01d29c", "Western Technologies, Michael Case, Lenny Carlson", "", "AndroMan on the Moon (1984) (Western Tech) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "0866e22f6f56f92ea1a14c8d8d01d29c", "Androbot - Western Technologies, Michael Case, Lenny Carlson", "", "AndroMan on the Moon (1984) (Western Tech) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0890a5b089191f45d0f08dd1e3235687", "", "", "Star Fire - 4K Version (25-10-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "0894aa7be77521f9df562be8d9555fe6", "CBS Electronics, Dan Kitchen, Garry Kitchen", "4L1700, 4L1701, 4L1702, 4L1802, 4L2274", "Donkey Kong (1982) (CBS Electronics) (PAL) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "08989fa4ff537f5dbd611aff4019521a", "Atari, Gary Palmer", "CX26163P", "Fun with Numbers (32 in 1) (1988) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -299,6 +299,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "1428029e762797069ad795ce7c6a1a93", "", "", "Thunderground (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "143918368f4f4dfff90999188c0197c9", "", "", "Unknown Title (bin00016 (200110)) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1442d1b35a6478fba22ae7dd1fcb5634", "", "", "Thrust (V0.2) (2000) (TJ)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "148471144ccebd7f6aa9aa9215896533", "Parker Brothers - JWDA, Todd Marshall", "PB5550", "Q-bert's Qubes (1984) (Parker Bros) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "149b543c917c180a1b02d33c12415206", "CCE", "C-857", "Superman (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "14a56b493a8d9d10e94a3e100362e3a2", "Hozer Video Games", "", "Gunfight 2600 - Early Play-kernel (2001) (MP)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "14b1e30982962c72f426e2e763eb4274", "Atari, Carol Shaw - Ralph Lauren", "", "Polo (1978) (Atari) (Prototype) (4K)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -330,7 +331,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "16ee443c990215f61f7dd1e55a0d2256", "Spectravideo, David Lubar", "SA-218, SA-218C", "Bumper Bash (1983) (Spectravideo) (PAL)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "", "", "54", "", "", "" }, { "16f494f20af5dc803bc35939ef924020", "Mark De Smet", "", "Video Simon (Mark De Smet)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "16fbb36a6124567405a235821e8f69ee", "", "", "Star Fire (28-11-2002) (MP)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "170e7589a48739cfb9cc782cbb0fe25a", "M Network, Hal Finney - INTV", "MT5666", "Astroblast (1982) (M Network) [fixed]", "Can also use left joystick", "Uncommon", "", "", "", "", "", "", "PADDLES", "", "YES", "AUTO 55", "", "", "", "", "" }, + { "170e7589a48739cfb9cc782cbb0fe25a", "M Network - APh Technological Consulting, Hal Finney - INTV", "MT5666", "Astroblast (1982) (M Network) [fixed]", "Can also use left joystick", "Uncommon", "", "", "", "", "", "", "PADDLES", "", "YES", "AUTO 55", "", "", "", "", "" }, { "171cd6b55267573e6a9c2921fb720794", "Kurt Howe", "", "Adventure 34 (Kurt Howe) (Hack)", "Hack of Adventure", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "1733772165d7b886a94e2b4ed0f74ccd", "", "", "Boring Journey Escape (Hack)", "Hack of Journey - Escape", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "230", "", "" }, { "1738b2e3f25ab3eef3cecb95e1d0d957", "", "", "Hangman Monkey Biglist1 (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -356,7 +357,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "18d26111cef66dff0c8af8cf0e117843", "", "", "Tunnel Demo (Cycling Colours 2) (29-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "18dc28bc22402f21e1c9b81344b3b8c5", "Atari - GCC, Mark Ackerman, Glenn Parker", "CX2684, CX2684P", "Galaxian (1983) (Atari) (PAL) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "18ed63e3ce5bc3dd2d8bd188b807f1a2", "", "", "Stell-A-Sketch (Bob Colbert) (PD) [a1]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "18f299edb5ba709a64c80c8c9cec24f2", "Home Vision - Gem International Corp.", "VCS83111", "Asteroid Fire (1983) (Home Vision) (PAL)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "20", "", "", "" }, + { "18f299edb5ba709a64c80c8c9cec24f2", "Home Vision - Gem International Corp. - VDI", "VCS83111", "Asteroid Fire (1983) (Home Vision) (PAL)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "20", "", "", "" }, { "19098c46da0640f2b5763167dea6c716", "Andrew Wallace", "", "Laseresal 2002 (NTSC) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "191449e40b0c56411c70772706f79224", "", "", "Multi-Color Demo 2 (Bob Colbert) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "19162393786098d50587827588198a86", "Jone Yuan Telephonic Enterprise Co", "", "Flag Capture (Jone Yuan) (4K)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -684,6 +685,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "3278158e5c1f7eb5c5d28ccfd7285250", "Dactari - Milmar", "", "Megamania (Dactari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "327fe8cf94f3a45c35a840a453df1235", "", "", "Spice Girls Rule Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "328949872e454181223a80389d03c122", "", "", "Home Run (Unknown) (PAL)", "", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, + { "32ae78abbb5e677e2aabae5cc86cec29", "Atari, Christopher H. Omarzu, Courtney Granner", "CX26112", "Good Luck, Charlie Brown (04-18-1984) (Atari) (Prototype)", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "32d1260ea682e1bb10850fa94c04ec5f", "Atari, Alan Miller", "CX26163P", "Basketball (32 in 1) (1988) (Atari) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "32dcd1b535f564ee38143a70a8146efe", "Xonox - K-Tel Software, Anthony R. Henderson", "99007, 6240", "Tomarc the Barbarian (1983) (Xonox)", "AKA Thundarr the Barbarian", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "32e65d1e4dfcbcd9b57fee72cafe074c", "", "", "Eckhard Stolberg's Scrolling Text Demo 3 (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -789,6 +791,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "3aad0ef62885736a5b8c6ccac0dbe00c", "Dynacom", "", "Atlantis (1983) (Dynacom)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3ab5d138e26d88c8190e7cc629a89493", "", "", "Phased Color Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "3ac6c50a8e62d4ce71595134cbd8035e", "Absolute Entertainment, Dan Kitchen", "AK-046-04", "Tomcat (1988) (Absolute)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "3ad3dc799211ccd424d7c6d454401436", "Probe 2000 - North American Philips Consumer Electronics Corporation", "", "Power Lords (1983) (Probe) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3ad58b53a1e972396890bd86c735e78d", "Arcadia Corporation, Stephen Harland Landrum", "6 AR-4400", "Excalibur Version 36 (Dragonstomper Beta) (1982) (Arcadia) (Prototype)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3b040ed7d1ef8acb4efdeebebdaa2052", "Tigervision", "7-008", "Miner 2049er (1982) (Tigervision) [fixed]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "214", "", "" }, { "3b097a7ed5bd2a84dc3d3ed361e9c31c", "", "", "Interleaved ChronoColour Demo (PAL) (05-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -806,6 +809,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "3b9480bb6fb1e358c9c0a64e86945aee", "", "", "Title Match Pro Wrestling (2002) (Skyworks)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3b966bf3c2ca34ac6ca1de4cf6383582", "", "", "Double-Height 6-Digit Score Display (2001) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3bb9793c60c92911895cf44530846136", "Jone Yuan Telephonic Enterprise Co", "", "Dragster (Jone Yuan) (4K)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "3c21a89bc38d8cd0b010a2916bcff5c2", "", "", "Colony 7 - CX-22 Hack v0.4 (NTSC)", "", "", "", "", "", "", "", "", "TRAKBALL", "", "", "", "", "", "", "YES", "50" }, { "3c3a2bb776dec245c7d6678b5a56ac10", "", "", "Unknown Title (bin00003) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3c4223316c835ceaad619651e25df0f9", "", "", "Defender (Genesis)", "Genesis controller (C is smartbomb)", "Hack of Defender", "", "", "", "", "", "", "GENESIS", "", "", "", "", "", "", "", "" }, { "3c4a6f613ca8ba27ce9e43c6c92a3128", "", "", "Qb (V0.04) (Non-Lax Version) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -854,7 +858,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "3f039981255691d3859d04ef813a1264", "Xonox, John Perkins", "6230, 7210, 06004, 99004", "Artillery Duel (1983) (Xonox) [a]", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "20", "", "", "" }, { "3f251c50aa7237e61a38ab42315ebed4", "Thomas Jentzsch", "", "Ikari Warriors (1990) (Thomas Jentzsch)", "NTSC Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3f3ad2765c874ca13c015ca6a44a40a1", "CCE", "C-862", "Crackpots (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "3f540a30fdee0b20aed7288e4a5ea528", "Atari - GCC", "CX2670", "Atari Video Cube (1982) (Atari)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "3f540a30fdee0b20aed7288e4a5ea528", "Atari - GCC", "CX2670", "Atari Video Cube (1983) (Atari)", "AKA Atari Cube, Video Cube", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3f58f972276d1e4e0e09582521ed7a5b", "Telegames", "6082 A145", "Kung Fu Superkicks (1988) (Telegames)", "AKA Chuck Norris Superkicks", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3f5a43602f960ede330cd2f43a25139e", "Activision, Alan Miller", "AG-003", "Checkers (1980) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "3f6938aa6ce66e6f42e582c1eb19b18c", "Jone Yuan Telephonic Enterprise Co", "", "Laser Blast (Jone Yuan) (4K) (Hack)", "2600 Screen Search Console", "Hack", "", "", "", "", "", "", "", "", "", "", "", "30", "", "", "" }, @@ -1057,7 +1061,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "4edb251f5f287c22efc64b3a2d095504", "Atari", "", "Atari VCS Point-of-Purchase ROM (1982) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4f0071946e80ca68edfdccbac86dcce0", "", "", "Virtual Pet Demo 1 (CRACKERS) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4f2d47792a06da224ba996c489a87939", "HES - Activision", "223", "Super Action Pak - Pitfall, Barnstorming, Grand Prix, Laser Blast (1988) (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "4f32b24869d8c1310fecf039c6424db6", "U.S. Games Corporation, Todd Marshall", "", "3-D Zapper (12-15-82) (U.S. Games) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "4f32b24869d8c1310fecf039c6424db6", "U.S. Games Corporation - JWDA, Todd Marshall", "", "3-D Zapper (12-15-82) (U.S. Games) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4f618c2429138e0280969193ed6c107e", "Activision, Alan Miller", "AZ-028, AG-028-04", "Robot Tank (1983) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "4f634893d54e9cabe106e0ec0b7bdcdf", "Retroactive", "", "Qb (2.14) (Retroactive) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "4f64d6d0694d9b7a1ed7b0cb0b83e759", "20th Century Fox Video Games, John Russell", "11016", "Revenge of the Beefsteak Tomatoes (1982) (20th Century Fox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1078,7 +1082,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "5069fecbe4706371f17737b0357cfa68", "Apollo - Games by Apollo, Steve Stringfellow", "AP-2005", "Shark Attack (1982) (Apollo) (PAL)", "AKA Lochjaw", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5079bfbc7b8f5770f84215ed2e3bdd1b", "Omegamatrix (2012)", "", "Genesis Button Tester", "", "Homebrew", "", "", "", "", "", "", "GENESIS", "GENESIS", "", "", "", "", "", "", "" }, { "50a410a5ded0fc9aa6576be45a04f215", "Activision, Bob Whitehead - Ariola", "EAG-019, EAG-019-04I - 711 019-715", "Sky Jinks (1982) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "50c7edc9f9dc0369abcdab3b4efeb5e9", "U.S. Games Corporation, Todd Marshall", "", "3-D Zapper (U.S. Games) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "50c7edc9f9dc0369abcdab3b4efeb5e9", "U.S. Games Corporation - JWDA, Todd Marshall", "", "3-D Zapper (U.S. Games) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "50ef88f9a5e0e1e6b86e175362a27fdb", "", "", "Multi-Sprite Game V2.4 (Piero Cavina) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "512e874a240731d7378586a05f28aec6", "Tigervision, Rorke Weigandt - Teldec", "7-005", "Marauder (1982) (Tigervision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5131ab3797fe8c127e3e135b18b4d2c8", "Activision, David Crane", "AG-004", "Fishing Derby (1980) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1165,13 +1169,14 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "5864cab0bc21a60be3853b6bcd50c59f", "", "", "Commando Raid (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "58746219d8094edff869f0f5c2aeaad5", "Jone Yuan Telephonic Enterprise Co", "", "Bowling (Jone Yuan) (4K)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5894c9c0c1e7e29f3ab86c6d3f673361", "Activision, Steve 'Jessica' Kitchen", "AZ-033, AZ-033-04", "Space Shuttle (1983) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "589c73bbcd77db798cb92a992b4c06c3", "Xonox - K-Tel Software, John Perkins", "6230, 7210, 06004, 99004", "Artillery Duel (1983) (Xonox) (PAL60)", "", "", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "", "" }, + { "589c73bbcd77db798cb92a992b4c06c3", "Xonox - K-Tel Software - Action Graphics, John Perkins, David Thiel", "6230, 7210, 06004, 99004", "Artillery Duel (1983) (Xonox) (PAL60)", "", "", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "", "" }, { "58a82e1da64a692fd727c25faef2ecc9", "CCE", "C-824", "Jaw Breaker (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "58c396323ea3e85671e34c98eb54e2a4", "Brian Watson", "", "Color Tweaker (B. Watson)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "58d331c23297ed98663d11b869636f16", "", "", "Fu Kung! (V0.09) (26-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "58e313e2b5613b2439b5f12bb41e3eef", "", "", "Cube Conquest (Demo Interlace) (Billy Eno) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "590ac71fa5f71d3eb29c41023b09ade9", "Atari - GCC, Mark Ackerman, Glenn Parker", "CX2684", "Galaxian (01-05-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "59135f13985b84c4f13cc9e55eec869a", "", "", "Multi-Sprite Game V2.0 (Piero Cavina) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "594dbc80b93fa5804e0f1368c037331d", "Telesys, Alex Leavens", "", "Bouncin' Baby Bunnies (1983) (Telesys) (Prototype)", "AKA Bouncing Baby Monkeys", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "5961d259115e99c30b64fe7058256bcf", "Universal Gamex Corporation, Alan Roberts, H.K. Poon", "GX-001", "X-Man (1983) (Universal)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "59734e1cc41822373845a09c51e6ba21", "Activision, John Van Ryzin", "AG-038-04", "Cosmic Commuter (1984) (Activision) (8K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "598a4e6e12f8238b7e7555f5a7777b46", "Tigervision", "7-008", "Miner 2049er (1982) (Tigervision) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "214", "", "" }, @@ -1280,7 +1285,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "6076b187a5d8ea7a2a05111c19b5d5cd", "", "", "Fu Kung! (V0.14) (01-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "60a61da9b2f43dd7e13a5093ec41a53d", "VentureVision, Dan Oliver", "VV2001", "Rescue Terra I (1982) (VentureVision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "60bbd425cb7214ddb9f9a31948e91ecb", "Activision, Bob Whitehead", "AG-005, CAG-005, AG-005-04", "Skiing (1980) (Activision) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "60cd61a2dfccb0e2736434f9792c1672", "Amiga, Frank Ellis, Jerry Lawson", "", "3-D Havoc (1983) (Amiga) (2110) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "60cd61a2dfccb0e2736434f9792c1672", "Amiga - Video Soft, Frank Ellis, Jerry Lawson", "2110", "3-D Havoc (1983) (Amiga) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "60d304582d33e2957b73eb300a7495bb", "", "", "Jam Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "60e0ea3cbe0913d39803477945e9e5ec", "Atari, Joe Decuir - Sears", "CX2621 - 99806, 6-99806, 49-75104", "Video Olympics (1977) (Atari)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES_IAXDR", "", "YES", "AUTO 60", "", "", "", "", "" }, { "613abf596c304ef6dbd8f3351920c37a", "", "", "Boring Pac-Man (Hack)", "Hack of Pac-Man", "Hack", "", "", "", "", "", "", "", "", "", "", "", "33", "", "", "" }, @@ -1299,6 +1304,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "624e0a77f9ec67d628211aaf24d8aea6", "Panda", "108", "Sea Hawk (1983) (Panda)", "AKA Seahawk", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "626d67918f4b5e3f961e4b2af2f41f1d", "Atari", "50008", "Diagnostic Test Cartridge 2.0 (1980) (Atari) (Prototype)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "6272f348a9a7f2d500a4006aa93e0d08", "Atari, Jerome Domurat, Michael Sierchio", "CX2667, CX2667P", "RealSports Soccer (1983) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "62899430338e0538ee93397867d85957", "Gameworld", "133-004", "Airlock (1983) (Gameworld) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "62921652f6634eb1a0940ed5489c7e18", "", "", "SCSIcide (V1.09) (2001) (Joe Grand)", "", "", "", "", "", "", "", "", "PADDLES_IAXDR", "", "", "AUTO 65", "", "", "", "", "" }, { "62992392ea651a16aa724a92e4596ed6", "Eric Mooney", "", "Invaders by Erik Mooney (Beta) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "62f74a2736841191135514422b20382d", "", "", "Pharaoh's Curse (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "PAL60", "20", "225", "YES", "" }, @@ -1552,7 +1558,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "74f623833429d35341b7a84bc09793c0", "Zellers", "", "Radar (Zellers)", "AKA Exocet", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "75028162bfc4cc8e74b04e320f9e6a3f", "Atari, Greg Easter, Mimi Nyden", "CX26107", "Snow White and the Seven Dwarfs (02-09-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "7511c34518a9a124ea773f5b0b5c9a48", "", "", "Donkey Kong (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "75169c08b56e4e6c36681e599c4d8cc5", "M Network, Hal Finney - INTV", "MT5666", "Astroblast (1982) (M Network)", "Can also use left joystick", "Uncommon", "", "", "", "", "", "", "PADDLES", "", "YES", "AUTO 55", "", "", "", "", "" }, + { "75169c08b56e4e6c36681e599c4d8cc5", "M Network - APh Technological Consulting, Hal Finney - INTV", "MT5666", "Astroblast (1982) (M Network)", "Can also use left joystick", "Uncommon", "", "", "", "", "", "", "PADDLES", "", "YES", "AUTO 55", "", "", "", "", "" }, { "753375d183c713cfa0aa7298d1f3067b", "Arcadia Corporation, Steve Hales, Stephen Harland Landrum", "AR-4102", "Suicide Mission (1982) (Arcadia) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "7550b821ee56fb5833dca2be88622d5a", "", "", "Multiple Moving Objects Demo (B. Watson)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "75511bb694662301c9e71df645f4b5a7", "Activision, Bob Whitehead - Ariola", "EAG-011, PAG-011 - 711 011-715", "Stampede (1981) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1828,7 +1834,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "898748d5eaac3164b0391a64ae1e0e32", "", "", "Hangman Man 4letter (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "898b5467551d32af48a604802407b6e8", "Bit Corporation", "PG208", "Snail Against Squirrel (1983) (BitCorp) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "89a65b83203980d5d4d60f52a584a5b8", "", "", "Marble Craze (PAL) (02-02-2003) (Paul Slocum)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "89a68746eff7f266bbf08de2483abe55", "Atari, Jerome Domurat, Steve Woita", "CX2696", "Asterix (1983) (Atari)", "AKA Taz", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "89a68746eff7f266bbf08de2483abe55", "Atari, Jerome Domurat, Steve Woita", "CX2696", "Asterix (1984) (Atari)", "AKA Taz", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "89afff4a10807093c105740c73e9b544", "", "", "Pooyan (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "89eaba47a59cbfd26e74aad32f553cd7", "Apollo - Games by Apollo, Ed Salvo, Bryson Park", "AP-2001", "Spacechase (1981) (Apollo) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8a159ee58b2f0a54805162984b0f07e5", "Atari - Sculptured Software, Inc., Steve Aguirre", "CX26162", "Fatal Run (1989) (Atari) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -1889,7 +1895,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "8ee3f64dc0f349adc893fe93df5245d8", "", "", "Euchre (20-07-2001) (Eric Eid) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8f33bce5ba1053dcf4cea9c1c69981e4", "", "", "Jawbreaker (Unknown) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8f53a3b925f0fd961d9b8c4d46ee6755", "", "", "Astrowar (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "8f5ac5139419c5d49bacc296e342a247", "Atari, Michael Callahan, Preston Stuart", "CX26103", "Alpha Beam with Ernie (12-22-1983) (Atari) (Prototype)", "Uses Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, + { "8f5ac5139419c5d49bacc296e342a247", "Atari - CCW, Michael Callahan, Preston Stuart", "CX26103", "Alpha Beam with Ernie (12-22-1983) (Atari) (Prototype)", "Uses Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "8f60551db6d1535ef0030f155018c738", "", "", "Space War (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8f613ea7c32a587d6741790e32872ddd", "", "", "Troll Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "8f88309afad108936ca70f8b2b084718", "Spectravision, Spectravideo - Quelle", "SA-203 - 413.223 9", "Cross Force (1982) (Spectravision) (PAL)", "AKA Kreuzfeuer (Cross Fire)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2052,7 +2058,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "9d7f04618bb4043f531d087e3aaa7ac8", "Parker Brothers, Larry Gelberg, Gary Goltz", "PB5065", "Star Wars - Ewok Adventure (1983) (Parker Bros) (Prototype) (PAL) (16K)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9de0d45731f90a0a922ab09228510393", "20th Century Fox Video Games - Sirius, Mark Turmell", "11003", "Fast Eddie (1982) (20th Century Fox)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9dec0be14d899e1aac4337acef5ab94a", "CommaVid, John Bronstein", "CM-003", "Cosmic Swarm (1982) (CommaVid) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "9e01f7f95cb8596765e03b9a36e8e33c", "Atari, Michael Callahan, Preston Stuart", "CX26103", "Alpha Beam with Ernie (1983) (Atari)", "Uses Keypad Controllers", "Rare", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, + { "9e01f7f95cb8596765e03b9a36e8e33c", "Atari - CCW, Michael Callahan, Preston Stuart", "CX26103", "Alpha Beam with Ernie (1983) (Atari)", "Uses Keypad Controllers", "Rare", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "9e192601829f5f5c2d3b51f8ae25dbe5", "PlayAround - J.H.M.", "201", "Cathouse Blues (1982) (PlayAround)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "9e2c7299c69b602443d327c7dad51cbf", "Charles Morgan", "", "Xaxyrax Road (Charles Morgan) (Hack)", "Hack of Freeway", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "9e437229136f1c5e6ef4c5f36178ed18", "Funvision - Fund. International Co.", "", "Grand Prize (Funvision)", "AKA Enduro", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2170,7 +2176,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "a7673809068062106db8e9d10b56a5b3", "Atari, Jerome Domurat, Andrew Fuchs, Dave Staugas, Robert Vieira", "CX26118, CX26118P", "Millipede (1984) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a779b9fa02c62d00d7c31ed51268f18a", "Arcadia Corporation, Brian McGhie", "AR-4104", "Rabbit Transit (1983) (Arcadia) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a7a58e9291aefa1064e933071f60d4ef", "Arcadia Corporation, Dennis Caswell", "1 AR-4000, AR-4100", "Phaser Patrol (1982) (Arcadia) (Prototype) [a]", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "a7b584937911d60c120677fe0d47f36f", "M Network, Hal Finney - INTV", "MT5661", "Armor Ambush (1982) (M Network)", "AKA Tank Battle", "Common", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "a7b584937911d60c120677fe0d47f36f", "M Network - APh Technological Consulting, Hal Finney - INTV", "MT5661", "Armor Ambush (1982) (M Network)", "AKA Tank Battle", "Common", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a7b96a8150600b3e800a4689c3ec60a2", "Atari, Mike Lorenzen - Sears", "CX2630 - 49-75122", "Circus Atari (1980) (Atari)", "Uses the Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "", "", "01 55", "", "", "", "", "" }, { "a7cf2b9afdbb3a161bf418dbcf0321dc", "Barry Laws Jr.", "", "Attack Of The Mutant Space Urchins (2002) (Barry Laws Jr.) (Hack)", "Hack of Alien", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "a7ed7dc5cbc901388afa59030fb11d26", "Atari, Warren Robinett", "CX2606, CX2606P", "Slot Racers (1978) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2202,7 +2208,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "a9784c24cddb33bd0d14442b97784f3d", "", "", "Omega Race DC (2003) (TJ) (Omega Race Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a98b649912b6ca19eaf5c2d2faf38562", "", "", "This Planet Sucks (Greg Troutman) (PAL) [!]", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "36", "", "", "" }, { "a995b6cbdb1f0433abc74050808590e6", "Imagic, Rob Fulop, Bob Smith", "720106-1A, IA3600", "Riddle of the Sphinx (1982) (Imagic)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "a9cb638cd2cb2e8e0643d7a67db4281c", "M Network, Larry Zwick - INTV", "MT5861", "Air Raiders (1982) (M Network)", "AKA Air Battle", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "a9cb638cd2cb2e8e0643d7a67db4281c", "M Network - APh Technological Consulting, Larry Zwick - INTV", "MT5861", "Air Raiders (1983) (M Network)", "AKA Air Battle", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "a9d9e19d0c89fb31780b5d63e1f8c6a4", "AtariAge, Chris Spry", "CX26201", "Zippy the Porcupine (2014) (Sprybug) (PAL60)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "", "" }, { "a9e3c23599c0d77151602f8e31daf879", "", "", "Kung Fu Master (Genesis)", "Genesis controller (C is extra kick modes)", "Hack of Kung Fu Master", "", "", "", "", "", "", "GENESIS", "", "", "", "", "", "", "", "" }, { "aa1c41f86ec44c0a44eb64c332ce08af", "Spectravideo, David Lubar", "SA-218", "Bumper Bash (1983) (Spectravideo)", "Uses the Paddle Controllers (left only)", "", "", "", "", "", "", "", "PADDLES", "", "", "", "", "20", "", "", "" }, @@ -2216,6 +2222,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "aaea37b65db9e492798f0105a6915e96", "Arcadia Corporation, Dennis Caswell", "AR-4302", "Party Mix - Tug of War (2 of 3) (1983) (Arcadia)", "Uses Paddle Controllers", "", "", "", "", "", "", "", "PADDLES", "PADDLES", "", "02", "", "", "", "", "" }, { "aafc79ffc32c4c9b2d73c8ada7602cfe", "", "", "Planet Patrol (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ab10f2974dee73dab4579f0cab35fca6", "ITT Family Games", "", "Wilma Wanderer (1983) (ITT Family Games) (PAL)", "AKA Lilly Adventure", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "ab2cfcaad3daaf673b2b14fdbb8dac33", "M Network, David Akers, Joe King, Patricia Lewis Du Long, Jeff Ratcliff - INTV", "MT7045", "Bump 'n' Jump (1983) (M Network)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ab2ea35dcc1098c87455bb8210b018cf", "", "", "Fu Kung! (V0.04 Single Line Resolution) (10-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ab301d3d7f2f4fe3fdd8a3540b7a74f5", "Jone Yuan Telephonic Enterprise Co", "", "IQ 180 (Jone Yuan)", "2600 Screen Search Console", "", "", "", "", "", "", "", "", "", "", "", "", "27", "230", "", "" }, { "ab434f4c942d6472e75d5490cc4dd128", "HES", "773-875", "2 Pak Special - Hoppy, Alien Force (1992) (HES) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2234,7 +2241,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "ac3dd22dd945724be705ddd2785487c2", "Atari - GCC, Mark Ackerman, Noellie Alito", "CX2692", "Moon Patrol (06-15-1983) (Atari) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ac53b83e1b57a601eeae9d3ce1b4a458", "Retroactive", "", "Qb (2.15) (Retroactive) (NTSC)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "ac5f78bae0638cf3f2a0c8d07eb4df69", "", "", "Minesweeper (V.99) (Soren Gust) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "ac7c2260378975614192ca2bc3d20e0b", "Activision, David Crane", "AG-930004, AZ-030", "Decathlon (1983) (Activision)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "ac7c2260378975614192ca2bc3d20e0b", "Activision, David Crane", "AG-930-04, AZ-030", "Decathlon (1983) (Activision)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ac9adbd6de786a242e19d4bec527982b", "Activision, Alan Miller - Ariola", "EAG-012-04I, EAX-012, EAX-012-04B - 711 012-720", "Ice Hockey (1981) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "aca09ffea77174b148b96b205109db4d", "Activision, Alan Miller", "AG-007, CAG-007", "Tennis (1981) (Activision) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "acaa27d214039d89d7031609aafa55c3", "", "", "Sprite Demo 6 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2248,7 +2255,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "ad8072675109d13fdd31a2e0403d5cff", "Funvision - Fund. International Co.", "", "Tank City (Funvision)", "AKA Thunderground", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "adb770ff70e9adf08bbb907a7eccd240", "", "", "Inv Demo 3 (2001) (Erik Mooney) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "adb79f9ac1a633cdd44954e2eac14774", "Digivision", "", "Frostbite (Digivision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "adf1afac3bdd7b36d2eda5949f1a0fa3", "Quelle", "495.463 2 - 746381", "Angriff der Luftflotten (1983) (Quelle) (PAL)", "AKA Paris Attack, M.A.D.", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "adf1afac3bdd7b36d2eda5949f1a0fa3", "Quelle - Otto Versand", "495.463 2 - 746381", "Angriff der Luftflotten (1983) (Quelle) (PAL)", "AKA Paris Attack, M.A.D.", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "adfbd2e8a38f96e03751717f7422851d", "Champ Games", "CG-01-N", "Lady Bug (NTSC)", "", "Homebrew", "", "", "", "A", "", "", "", "", "", "", "", "", "", "YES", "" }, { "ae047e9468bda961d8e9e9d8ff52980f", "", "", "Tunnel Demo (Red Spiral) (30-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ae0d4f3396cb49de0fabdff03cb2756f", "Retroactive", "", "Qb (V2.02) (PAL) (2001) (Retroactive)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, @@ -2547,7 +2554,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "c745487828a1a6a743488ecebc55ad44", "Rainbow Vision - Suntek", "SS-002", "Galactic (Rainbow Vision) (PAL)", "AKA The Challenge of.... Nexar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c74bfd02c7f1877bbe712c1da5c4c194", "Thomas Jentzsch", "", "River Raid Tanks (Thomas Jentzsch) (Hack)", "Hack of River Raid", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c7600d72247c5dfa1ec1a88d23e6c85e", "Arcadia Corporation, Scott Nelson", "13", "Sweat! - The Decathlon Game (1 of 3) (1983) (Arcadia) (Prototype)", "Uses the Paddle Controllers (left only)", "Prototype", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "", "" }, - { "c77c35a6fc3c0f12bf9e8bae48cba54b", "Xonox - K-Tel Software, John Perkins", "6230, 7210, 06004, 99004", "Artillery Duel (1983) (Xonox)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "c77c35a6fc3c0f12bf9e8bae48cba54b", "Xonox - K-Tel Software - Action Graphics, John Perkins, David Thiel", "6230, 7210, 06004, 99004", "Artillery Duel (1983) (Xonox)", "", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c77d3b47f2293e69419b92522c6f6647", "Panda", "101", "Tank Brigade (1983) (Panda)", "AKA Phantom Tank", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c7900a7fe95a47eef3b325072ad2c232", "Larry Petit", "", "Super Congo Bongo (2003) (Larry Petit) (Hack)", "Hack of Bongo", "Hack", "", "", "", "", "", "", "", "", "", "", "", "34", "", "", "" }, { "c7d5819b26b480a49eb26aeb63cc831e", "Bit Corporation", "PGP210", "Ice Hockey (4 Game in One Light Green) (1983) (BitCorp) (PAL)", "AKA Hockey, Hockey", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2568,17 +2575,18 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "c9e721eb29c940c2e743485b044c0a3f", "Arcadia Corporation, Dennis Caswell", "AR-4200", "Escape from the Mindmaster (1982) (Arcadia) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "c9f6e521a49a2d15dac56b6ddb3fb4c7", "Parker Brothers, Rex Bradford", "PB5000", "Star Wars - Jedi Arena (1983) (Parker Bros)", "Uses the Paddle Controllers (swapped)", "", "", "", "", "", "", "", "PADDLES", "", "YES", "10 50", "", "", "", "", "" }, { "ca09fa7406b7d2aea10d969b6fc90195", "Activision, Matthew L. Hubbard, Bob Whitehead", "AX-024", "Dolphin (1983) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "ca4f8c5b4d6fb9d608bb96bc7ebd26c7", "M Network, Hal Finney, Glenn Hightower, Peter Kaminski - INTV", "MT4317", "Adventures of TRON (1982) (M Network)", "", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "ca4f8c5b4d6fb9d608bb96bc7ebd26c7", "M Network - APh Technological Consulting, Hal Finney, Glenn Hightower, Peter Kaminski - INTV", "MT4317", "Adventures of TRON (1983) (M Network)", "AKA Tron Joystick", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ca50cc4b21b0155255e066fcd6396331", "Suntek", "SS-031", "UFO Patrol (Suntek) (PAL)", "AKA X'Mission", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "ca53fc8fd8b3c4a7df89ac86b222eba0", "CCE", "C-812", "Pac Man (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ca54de69f7cdf4d7996e86f347129892", "PlayAround - J.H.M.", "201", "Philly Flasher (1982) (PlayAround)", "Uses the Paddle Controllers, AKA Beat 'Em & Eat 'Em", "", "", "", "", "", "", "", "PADDLES", "", "", "AUTO 45", "", "", "", "", "" }, { "ca7aaebd861a9ef47967d31c5a6c4555", "Atari", "CX26163P", "Homerun (32 in 1) (1988) (Atari) (PAL)", "", "", "", "", "", "", "", "YES", "", "", "", "", "", "", "", "", "" }, { "ca7abc774a2fa95014688bc0849eee47", "Atari, Michael Kosaka, Peter C. Niday, Robert Vieira", "CX26110", "Crystal Castles (1984) (Atari) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "ca7f166a94eed1a349dec6d6a358bcad", "Activision, Alan Miller - Ariola", "EAG-007, EAG-007-04I, PAG-007 - 711 007-720", "Tennis (1981) (Activision) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "cac9928a84e1001817b223f0cecaa3f2", "Amiga, Jerry Lawson, Dan McElroy", "", "3-D Genesis (1983) (Amiga) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "cac9928a84e1001817b223f0cecaa3f2", "Amiga - Video Soft, Jerry Lawson, Dan McElroy", "", "3-D Genesis (1983) (Amiga) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "cad982c9b45bc5eff34e4ea982d5f1ca", "", "", "Song (17-02-2003) (Paul Slocum)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "cade123747426df69570a2bc871d3baf", "Gakken", "011", "Marine Wars (1983) (Gakken) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cae8f83c06831ec7bb6a3c07e98e9342", "Colin Hughes", "", "Tetris 2600 (Colin Hughes) [o1]", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, + { "cb18d8d5fbdcb1cd7bd36c5423348859", "", "", "RAM-Pong (NTSC) v1.0", "", "", "", "", "", "", "", "", "PADDLES", "", "", "", "", "", "", "", "" }, { "cb24210dc86d92df97b38cf2a51782da", "Video Gems", "VG-01", "Missile Control (1983) (Video Gems) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cb4a7b507372c24f8b9390d22d54a918", "ITT Family Games", "554-37 338", "Peter Penguin (1983) (ITT Family Games) (PAL)", "AKA Frisco (Pumuckl-Serie)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "cb8399dc0d409ff1f531ef86b3b34953", "", "", "Demo Image Series #12 - Luigi And Mario (01-03-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2679,7 +2687,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "d0b9df57bfea66378c0418ec68cfe37f", "20th Century Fox Video Games - Sirius, Grady Ward", "11002", "Beany Bopper (1982) (20th Century Fox)", "", "Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d0b9f705aa5f61f47a748a66009ae2d2", "", "", "Synthcart (14-01-2002) (Paul Slocum)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "YES", "" }, { "d0cb28e1b7bd6c7f683a0917b59f707e", "Atari, Gary Palmer", "CX2661P", "Fun with Numbers (1980) (Atari) (PAL) (4K)", "AKA Basic Math", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "d0cdafcb000b9ae04ac465f17788ad11", "Quelle", "732.273 8 - 600273, 781644", "Lilly Adventure (1983) (Quelle) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "d0cdafcb000b9ae04ac465f17788ad11", "Quelle - Otto Versand", "732.273 8 - 600273, 781644", "Lilly Adventure (1983) (Quelle) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d0e15a3ce322c5af60f07343594392af", "Amiga", "3125", "Surf's Up (1983) (Amiga) (Prototype) (4K)", "Uses the Joyboard controller", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d0e9beb2347595c6c7d158e9d83d2da8", "Retroactive", "", "Qb (2.00) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "d100b11be34a1e5b7832b1b53f711497", "", "", "Robotfindskitten2600 (26-04-2003) (Jeremy Penner) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2750,7 +2758,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "d69559f9c9dc6ef528d841bf9d91b275", "Activision, Alan Miller", "AX-016", "StarMaster (1982) (Activision)", "Use Color/BW switch to change between galactic chart and front views", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d6a44277c3eb4f9d039185e0ecf7bfa6", "", "", "Trick (1997) (Eckhard Stolberg)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d6acff6aed0f04690fe4024d58ff4ce3", "Spectravision, Spectravideo - Quelle", "SA-202 - 412.851 8", "Planet Patrol (1982) (Spectravision) (PAL) [different spaceship]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "d6b8beeb05e5b730084d4b8f381bbf8d", "", "", "Game Select (208 in 1) (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "d6b8beeb05e5b730084d4b8f381bbf8d", "", "", "208 in 1 Game Select ROM (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d6d1ddd21e9d17ea5f325fa09305069c", "Funvision - Fund. International Co.", "", "Time Warp (1982) (Funvision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d6d5dd8fd322d3cf874e651e7b6c1657", "", "", "How to Draw a Playfield (1997) (Nick Bensema) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "d6dc9b4508da407e2437bfa4de53d1b2", "Bomb - Onbase", "CA283", "Z-Tack (1983) (Bomb) (PAL)", "AKA Base Attack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2872,7 +2880,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "df6a28a89600affe36d94394ef597214", "Apollo - Games by Apollo, Dan Oliver", "AP-2002", "Space Cavern (1981) (Apollo)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "df6a46714960a3e39b57b3c3983801b5", "Puzzy - Bit Corporation", "PG201", "Sea Monster (1982) (Puzzy) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "df753cb87d3af4d03f694ab848638108", "CBS Electronics, Bob Curtiss", "4L1845, 4L1852, 4L1853, 4L1854", "Solar Fox (1983) (CBS Electronics) (PAL) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "df95e4af466c809619299f49ece92365", "Atari, Michael Callahan, Preston Stuart", "CX26103", "Alpha Beam with Ernie (06-03-1983) (Atari) (Prototype) (PAL)", "Uses Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, + { "df95e4af466c809619299f49ece92365", "Atari - CCW, Michael Callahan, Preston Stuart", "CX26103", "Alpha Beam with Ernie (06-03-1983) (Atari) (Prototype) (PAL)", "Uses Keypad Controllers", "Prototype", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "dfad86dd85a11c80259f3ddb6151f48f", "HES, David Lubar", "535", "My Golf (1990) (HES) (PAL) [fixed]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dfafa3fa58f5cc3f0342cca475df6095", "", "", "Space Treat (V1.1 Beta) (24-12-2002) (Fabrizio Zavagli)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "dfc03ef371cf5163f54c50d8ee73c8cf", "Atari, Gary Palmer", "CX2661", "Fun with Numbers (1980) (Atari) (4K)", "AKA Basic Math", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -2988,7 +2996,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "e723ad8f406cb258b89681ef4cef0eff", "Thomas Jentzsch", "", "Sadoom (TJ) (PAL) (Hack)", "Hack of Kaboom!", "Hack", "", "", "", "", "", "", "PADDLES", "", "", "01 50", "", "", "", "", "" }, { "e72eb8d4410152bdcb69e7fba327b420", "Atari, Douglas Neubauer", "CX26136", "Solaris (1986) (Atari)", "AKA Universe, Star Raiders II, The Last Starfighter", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e72ee2d6e501f07ec5e8a0efbe520bee", "Imagic, Dave Johnson", "720119-2A, 13211, EIX-004-04I", "Quick Step! (1983) (Imagic) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "e73838c43040bcbc83e4204a3e72eef4", "CCE", "", "Apples and Dolls (CCE)", "AKA Open Sesame", "", "", "", "", "", "", "", "", "", "", "", "", "", "215", "YES", "" }, + { "e73838c43040bcbc83e4204a3e72eef4", "CCE", "", "Apples and Dolls (CCE)", "AKA I Want My Mommy", "", "", "", "", "", "", "", "", "", "", "", "", "", "215", "YES", "" }, { "e74022cfe31ec8908844718dfbdedf7a", "", "", "Space Treat (30-12-2002) (Fabrizio Zavagli) [a2]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e77ec259e1387bc308b0534647a89198", "Parker Brothers, David Lamkins, Laura Nikolich", "931503", "Spider-Man (1982) (Parker Bros) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "e77f332b71f13884c84771e7a121182d", "Jone Yuan Telephonic Enterprise Co", "", "Hey! Stop! (Jone Yuan)", "AKA Keystone Kapers", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3141,7 +3149,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f280976d69d6e27a48506bd6bad11dcd", "Atari, Larry Kaplan", "CX2664, CX2664P", "Brain Games (1978) (Atari) (PAL)", "Uses Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "f283cc294ece520c2badf9da20cfc025", "Atari, Christopher H. Omarzu - Children's Computer Workshop", "CX26104", "Big Bird's Egg Catch (1983) (Atari) (PAL)", "Uses Kids/Keypad Controllers", "Rare", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "f28c07767b3e90a2689ade5b5e305874", "Canal 3 - Intellivision", "C 3014", "Keystone Kapers (Canal 3)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, - { "f2d40c70cf3e1d03bc112796315888d9", "Atari, Michael Callahan, Preston Stuart", "CX26103", "Alpha Beam with Ernie (1983) (Atari) (PAL)", "", "Rare", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, + { "f2d40c70cf3e1d03bc112796315888d9", "Atari - CCW, Michael Callahan, Preston Stuart", "CX26103", "Alpha Beam with Ernie (1983) (Atari) (PAL)", "Uses Keypad Controllers", "Rare", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "", "", "", "" }, { "f2d4d6187903cac2d5ea8ed90dad120d", "Digimax", "", "River Raid II (Digimax)", "AKA River Raid", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f2e4fb2d3600c0f76d05864e658cc57b", "", "", "Marble Craze (Kernel) (17-02-2002) (Paul Slocum)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f2f2cb35fdef063c966c1f5481050ea2", "", "", "Ram It (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3172,6 +3180,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "f4b8a47a95b61895e671c3ec86ffd461", "Parker Brothers, Wilfredo 'Willy' Aguilar, Michael Becker, Neil McKenzie, Bob Smith, Brad Stewart", "PB5540", "Star Wars - The Arcade Game (01-03-1984) (Parker Bros) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "f4c2e50b01dff99bddbe037b3489511c", "", "", "Hypnotic (V0.04) (2001) (Inkling) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f4c6621f1a0b4d27081123c08d7d1497", "CCE", "C-838", "Immies & Aggies (1983) (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "f4cf6881b65c424095dc25dc987f151f", "", "", "128 in 1 Game Select ROM (Unknown)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f4dabd5bcc603e8464a478208037d423", "Coleco, Ed Temple", "", "Cabbage Patch Kids (08-21-1984) (Coleco) (Prototype)", "Adventures in the Park", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f526d0c519f5001adb1fc7948bfbb3ce", "Mythicon, Bill Bryner, Bruce de Graaf", "MA1003", "Star Fox (1983) (Mythicon)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "f52f40299fd238c6ffd9e6107050dc76", "Activision, Bob Whitehead - Ariola", "EAG-011, PAG-011 - 711 011-715", "Stampede (1981) (Activision) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3265,7 +3274,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "fac28963307b6e85082ccd77c88325e7", "CCE", "", "Berzerk (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fadb89f9b23beb4d43a7895c532757e2", "Galaga Games", "", "River Raid (1984) (Galaga Games) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fae0b86934a7c5a362281dffebdb43a0", "Retroactive", "", "Qb (2.07) (Retroactive) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "faebcb2ef1f3831b2fc1dbd39d36517c", "Atari, Jerome Domurat, Steve Woita", "CX2696", "Asterix (1983) (Atari) (PAL)", "AKA Taz", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "faebcb2ef1f3831b2fc1dbd39d36517c", "Atari, Jerome Domurat, Steve Woita", "CX2696", "Asterix (1984) (Atari) (PAL)", "AKA Taz", "Extremely Rare", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "faed2ef6b44894f8c83f2b50891c35c6", "CCE", "", "Super Baseball (CCE)", "AKA RealSports Baseball", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "faffd84f3a8eceee2fa5ea5b0a3e6678", "Suntek", "SS-025", "Spectracube Invasion (Suntek) (PAL)", "AKA Immies & Aggies", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fb09ee4ccd47ae74a3c314f0d8a40344", "", "", "Titans (SnailSoft)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, @@ -3295,7 +3304,7 @@ static const char* const DefProps[DEF_PROPS_SIZE][21] = { { "fc9c1652fe3a2cade6188f4d3692481f", "Andrew Davies", "", "Andrew Davies early notBoulderDash demo (NTSC)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "fca4a5be1251927027f2c24774a02160", "Activision, John Van Ryzin", "AZ-036-04", "H.E.R.O. (1984) (Activision)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fcbbd0a407d3ff7bf857b8a399280ea1", "ZiMAG - Emag - Vidco", "GN-070", "Mysterious Thief, A (1983) (ZiMAG) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, - { "fcbdf405f0fc2027b0ea45bb5af94c1a", "Amiga, Michael K. Glass, Jerry Lawson", "", "3-D Ghost Attack (1983) (Amiga) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, + { "fcbdf405f0fc2027b0ea45bb5af94c1a", "Amiga - Video Soft, Michael K. Glass, Jerry Lawson", "", "3-D Ghost Attack (1983) (Amiga) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fcea12625c071ddc49f4e409f4038c60", "Fabrizio Zavagli", "", "Balls! (16-09-2002) (Fabrizio Zavagli)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "" }, { "fcf8e306f6615f74feba5cb25550038c", "", "", "Blue Dot Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, { "fd0e5148162e8ec6719445d559f018a9", "Activision, Steve Cartwright - Ariola", "EAX-022, EAX-022-04I - 711 022-720", "Seaquest (1983) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" }, diff --git a/src/emucore/stella.pro b/src/emucore/stella.pro index 243d58b8c..2e22f275e 100644 --- a/src/emucore/stella.pro +++ b/src/emucore/stella.pro @@ -645,7 +645,7 @@ "" "Cartridge.MD5" "0866e22f6f56f92ea1a14c8d8d01d29c" -"Cartridge.Manufacturer" "Western Technologies, Michael Case, Lenny Carlson" +"Cartridge.Manufacturer" "Androbot - Western Technologies, Michael Case, Lenny Carlson" "Cartridge.Name" "AndroMan on the Moon (1984) (Western Tech) (Prototype)" "Cartridge.Rarity" "Prototype" "" @@ -1646,6 +1646,13 @@ "Cartridge.Rarity" "New Release" "" +"Cartridge.MD5" "148471144ccebd7f6aa9aa9215896533" +"Cartridge.Manufacturer" "Parker Brothers - JWDA, Todd Marshall" +"Cartridge.ModelNo" "PB5550" +"Cartridge.Name" "Q-bert's Qubes (1984) (Parker Bros) (Prototype)" +"Cartridge.Rarity" "Prototype" +"" + "Cartridge.MD5" "149b543c917c180a1b02d33c12415206" "Cartridge.Manufacturer" "CCE" "Cartridge.ModelNo" "C-857" @@ -1832,7 +1839,7 @@ "" "Cartridge.MD5" "170e7589a48739cfb9cc782cbb0fe25a" -"Cartridge.Manufacturer" "M Network, Hal Finney - INTV" +"Cartridge.Manufacturer" "M Network - APh Technological Consulting, Hal Finney - INTV" "Cartridge.ModelNo" "MT5666" "Cartridge.Name" "Astroblast (1982) (M Network) [fixed]" "Cartridge.Note" "Can also use left joystick" @@ -2003,7 +2010,7 @@ "" "Cartridge.MD5" "18f299edb5ba709a64c80c8c9cec24f2" -"Cartridge.Manufacturer" "Home Vision - Gem International Corp." +"Cartridge.Manufacturer" "Home Vision - Gem International Corp. - VDI" "Cartridge.ModelNo" "VCS83111" "Cartridge.Name" "Asteroid Fire (1983) (Home Vision) (PAL)" "Cartridge.Rarity" "Extremely Rare" @@ -4060,6 +4067,13 @@ "Console.SwapPorts" "YES" "" +"Cartridge.MD5" "32ae78abbb5e677e2aabae5cc86cec29" +"Cartridge.Manufacturer" "Atari, Christopher H. Omarzu, Courtney Granner" +"Cartridge.ModelNo" "CX26112" +"Cartridge.Name" "Good Luck, Charlie Brown (04-18-1984) (Atari) (Prototype)" +"Cartridge.Note" "Prototype" +"" + "Cartridge.MD5" "32d1260ea682e1bb10850fa94c04ec5f" "Cartridge.Manufacturer" "Atari, Alan Miller" "Cartridge.ModelNo" "CX26163P" @@ -4704,6 +4718,12 @@ "Cartridge.Name" "Tomcat (1988) (Absolute)" "" +"Cartridge.MD5" "3ad3dc799211ccd424d7c6d454401436" +"Cartridge.Manufacturer" "Probe 2000 - North American Philips Consumer Electronics Corporation" +"Cartridge.Name" "Power Lords (1983) (Probe) (Prototype)" +"Cartridge.Rarity" "Prototype" +"" + "Cartridge.MD5" "3ad58b53a1e972396890bd86c735e78d" "Cartridge.Manufacturer" "Arcadia Corporation, Stephen Harland Landrum" "Cartridge.ModelNo" "6 AR-4400" @@ -4804,6 +4824,13 @@ "Cartridge.Note" "2600 Screen Search Console" "" +"Cartridge.MD5" "3c21a89bc38d8cd0b010a2916bcff5c2" +"Cartridge.Name" "Colony 7 - CX-22 Hack v0.4 (NTSC)" +"Controller.Left" "TRAKBALL" +"Display.Phosphor" "YES" +"Display.PPBlend" "50" +"" + "Cartridge.MD5" "3c3a2bb776dec245c7d6678b5a56ac10" "Cartridge.Name" "Unknown Title (bin00003) (PD)" "" @@ -5111,7 +5138,8 @@ "Cartridge.MD5" "3f540a30fdee0b20aed7288e4a5ea528" "Cartridge.Manufacturer" "Atari - GCC" "Cartridge.ModelNo" "CX2670" -"Cartridge.Name" "Atari Video Cube (1982) (Atari)" +"Cartridge.Name" "Atari Video Cube (1983) (Atari)" +"Cartridge.Note" "AKA Atari Cube, Video Cube" "Cartridge.Rarity" "Rare" "" @@ -6330,7 +6358,7 @@ "" "Cartridge.MD5" "4f32b24869d8c1310fecf039c6424db6" -"Cartridge.Manufacturer" "U.S. Games Corporation, Todd Marshall" +"Cartridge.Manufacturer" "U.S. Games Corporation - JWDA, Todd Marshall" "Cartridge.Name" "3-D Zapper (12-15-82) (U.S. Games) (Prototype)" "Cartridge.Rarity" "Prototype" "" @@ -6462,7 +6490,7 @@ "" "Cartridge.MD5" "50c7edc9f9dc0369abcdab3b4efeb5e9" -"Cartridge.Manufacturer" "U.S. Games Corporation, Todd Marshall" +"Cartridge.Manufacturer" "U.S. Games Corporation - JWDA, Todd Marshall" "Cartridge.Name" "3-D Zapper (U.S. Games) (Prototype)" "Cartridge.Rarity" "Prototype" "" @@ -6990,7 +7018,7 @@ "" "Cartridge.MD5" "589c73bbcd77db798cb92a992b4c06c3" -"Cartridge.Manufacturer" "Xonox - K-Tel Software, John Perkins" +"Cartridge.Manufacturer" "Xonox - K-Tel Software - Action Graphics, John Perkins, David Thiel" "Cartridge.ModelNo" "6230, 7210, 06004, 99004" "Cartridge.Name" "Artillery Duel (1983) (Xonox) (PAL60)" "Display.Format" "PAL60" @@ -7028,6 +7056,13 @@ "Cartridge.Name" "Multi-Sprite Game V2.0 (Piero Cavina) (PD)" "" +"Cartridge.MD5" "594dbc80b93fa5804e0f1368c037331d" +"Cartridge.Manufacturer" "Telesys, Alex Leavens" +"Cartridge.Name" "Bouncin' Baby Bunnies (1983) (Telesys) (Prototype)" +"Cartridge.Note" "AKA Bouncing Baby Monkeys" +"Cartridge.Rarity" "Prototype" +"" + "Cartridge.MD5" "5961d259115e99c30b64fe7058256bcf" "Cartridge.Manufacturer" "Universal Gamex Corporation, Alan Roberts, H.K. Poon" "Cartridge.ModelNo" "GX-001" @@ -7087,6 +7122,16 @@ "Cartridge.Name" "River Raid (1983) (CCE)" "" +"Cartridge.MD5" "5a0ff99ba10bd26d542e1d6f59f56850" +"Cartridge.Manufacturer" "Champ Games" +"Cartridge.ModelNo" "CG-04-P" +"Cartridge.Name" "Super Cobra Arcade (PAL60)" +"Cartridge.Note" "Compatible with Genesis controller" +"Cartridge.Rarity" "Homebrew" +"Display.Format" "PAL60" +"Display.Phosphor" "YES" +"" + "Cartridge.MD5" "5a17e30e6e911e74ccd7b716d02b16c6" "Cartridge.Manufacturer" "Activision, Dan Kitchen" "Cartridge.ModelNo" "AX-029" @@ -7692,8 +7737,9 @@ "" "Cartridge.MD5" "60cd61a2dfccb0e2736434f9792c1672" -"Cartridge.Manufacturer" "Amiga, Frank Ellis, Jerry Lawson" -"Cartridge.Name" "3-D Havoc (1983) (Amiga) (2110) (Prototype)" +"Cartridge.Manufacturer" "Amiga - Video Soft, Frank Ellis, Jerry Lawson" +"Cartridge.ModelNo" "2110" +"Cartridge.Name" "3-D Havoc (1983) (Amiga) (Prototype)" "Cartridge.Rarity" "Prototype" "" @@ -7798,6 +7844,12 @@ "Display.Phosphor" "YES" "" +"Cartridge.MD5" "62899430338e0538ee93397867d85957" +"Cartridge.Manufacturer" "Gameworld" +"Cartridge.ModelNo" "133-004" +"Cartridge.Name" "Airlock (1983) (Gameworld) (PAL)" +"" + "Cartridge.MD5" "62921652f6634eb1a0940ed5489c7e18" "Cartridge.Name" "SCSIcide (V1.09) (2001) (Joe Grand)" "Controller.Left" "PADDLES_IAXDR" @@ -9354,7 +9406,7 @@ "" "Cartridge.MD5" "75169c08b56e4e6c36681e599c4d8cc5" -"Cartridge.Manufacturer" "M Network, Hal Finney - INTV" +"Cartridge.Manufacturer" "M Network - APh Technological Consulting, Hal Finney - INTV" "Cartridge.ModelNo" "MT5666" "Cartridge.Name" "Astroblast (1982) (M Network)" "Cartridge.Note" "Can also use left joystick" @@ -10604,6 +10656,15 @@ "Cartridge.Rarity" "Hack" "" +"Cartridge.MD5" "841057f83ce3731e6bbfda1707cbca58" +"Cartridge.Manufacturer" "Champ Games" +"Cartridge.ModelNo" "CG-04-N" +"Cartridge.Name" "Super Cobra Arcade (NTSC)" +"Cartridge.Note" "Compatible with Genesis controller" +"Cartridge.Rarity" "Homebrew" +"Display.Phosphor" "YES" +"" + "Cartridge.MD5" "841b7bc1cad05f5408302308777d49dc" "Cartridge.Manufacturer" "Activision" "Cartridge.Name" "Unknown Activision Game (10-22-1982) (Activision) (Prototype)" @@ -11050,7 +11111,7 @@ "Cartridge.MD5" "89a68746eff7f266bbf08de2483abe55" "Cartridge.Manufacturer" "Atari, Jerome Domurat, Steve Woita" "Cartridge.ModelNo" "CX2696" -"Cartridge.Name" "Asterix (1983) (Atari)" +"Cartridge.Name" "Asterix (1984) (Atari)" "Cartridge.Note" "AKA Taz" "Cartridge.Rarity" "Extremely Rare" "" @@ -11430,7 +11491,7 @@ "" "Cartridge.MD5" "8f5ac5139419c5d49bacc296e342a247" -"Cartridge.Manufacturer" "Atari, Michael Callahan, Preston Stuart" +"Cartridge.Manufacturer" "Atari - CCW, Michael Callahan, Preston Stuart" "Cartridge.ModelNo" "CX26103" "Cartridge.Name" "Alpha Beam with Ernie (12-22-1983) (Atari) (Prototype)" "Cartridge.Note" "Uses Keypad Controllers" @@ -12400,7 +12461,7 @@ "" "Cartridge.MD5" "9e01f7f95cb8596765e03b9a36e8e33c" -"Cartridge.Manufacturer" "Atari, Michael Callahan, Preston Stuart" +"Cartridge.Manufacturer" "Atari - CCW, Michael Callahan, Preston Stuart" "Cartridge.ModelNo" "CX26103" "Cartridge.Name" "Alpha Beam with Ernie (1983) (Atari)" "Cartridge.Note" "Uses Keypad Controllers" @@ -13119,7 +13180,7 @@ "" "Cartridge.MD5" "a7b584937911d60c120677fe0d47f36f" -"Cartridge.Manufacturer" "M Network, Hal Finney - INTV" +"Cartridge.Manufacturer" "M Network - APh Technological Consulting, Hal Finney - INTV" "Cartridge.ModelNo" "MT5661" "Cartridge.Name" "Armor Ambush (1982) (M Network)" "Cartridge.Note" "AKA Tank Battle" @@ -13315,9 +13376,9 @@ "" "Cartridge.MD5" "a9cb638cd2cb2e8e0643d7a67db4281c" -"Cartridge.Manufacturer" "M Network, Larry Zwick - INTV" +"Cartridge.Manufacturer" "M Network - APh Technological Consulting, Larry Zwick - INTV" "Cartridge.ModelNo" "MT5861" -"Cartridge.Name" "Air Raiders (1982) (M Network)" +"Cartridge.Name" "Air Raiders (1983) (M Network)" "Cartridge.Note" "AKA Air Battle" "" @@ -13408,6 +13469,12 @@ "Cartridge.Note" "AKA Lilly Adventure" "" +"Cartridge.MD5" "ab2cfcaad3daaf673b2b14fdbb8dac33" +"Cartridge.Manufacturer" "M Network, David Akers, Joe King, Patricia Lewis Du Long, Jeff Ratcliff - INTV" +"Cartridge.ModelNo" "MT7045" +"Cartridge.Name" "Bump 'n' Jump (1983) (M Network)" +"" + "Cartridge.MD5" "ab2ea35dcc1098c87455bb8210b018cf" "Cartridge.Name" "Fu Kung! (V0.04 Single Line Resolution) (10-01-2003) (AD)" "" @@ -13518,7 +13585,7 @@ "Cartridge.MD5" "ac7c2260378975614192ca2bc3d20e0b" "Cartridge.Manufacturer" "Activision, David Crane" -"Cartridge.ModelNo" "AG-930004, AZ-030" +"Cartridge.ModelNo" "AG-930-04, AZ-030" "Cartridge.Name" "Decathlon (1983) (Activision)" "Cartridge.Rarity" "Rare" "" @@ -13597,7 +13664,7 @@ "" "Cartridge.MD5" "adf1afac3bdd7b36d2eda5949f1a0fa3" -"Cartridge.Manufacturer" "Quelle" +"Cartridge.Manufacturer" "Quelle - Otto Versand" "Cartridge.ModelNo" "495.463 2 - 746381" "Cartridge.Name" "Angriff der Luftflotten (1983) (Quelle) (PAL)" "Cartridge.Note" "AKA Paris Attack, M.A.D." @@ -15448,7 +15515,7 @@ "" "Cartridge.MD5" "c77c35a6fc3c0f12bf9e8bae48cba54b" -"Cartridge.Manufacturer" "Xonox - K-Tel Software, John Perkins" +"Cartridge.Manufacturer" "Xonox - K-Tel Software - Action Graphics, John Perkins, David Thiel" "Cartridge.ModelNo" "6230, 7210, 06004, 99004" "Cartridge.Name" "Artillery Duel (1983) (Xonox)" "Cartridge.Rarity" "Extremely Rare" @@ -15583,9 +15650,10 @@ "" "Cartridge.MD5" "ca4f8c5b4d6fb9d608bb96bc7ebd26c7" -"Cartridge.Manufacturer" "M Network, Hal Finney, Glenn Hightower, Peter Kaminski - INTV" +"Cartridge.Manufacturer" "M Network - APh Technological Consulting, Hal Finney, Glenn Hightower, Peter Kaminski - INTV" "Cartridge.ModelNo" "MT4317" -"Cartridge.Name" "Adventures of TRON (1982) (M Network)" +"Cartridge.Name" "Adventures of TRON (1983) (M Network)" +"Cartridge.Note" "AKA Tron Joystick" "Cartridge.Rarity" "Uncommon" "" @@ -15632,7 +15700,7 @@ "" "Cartridge.MD5" "cac9928a84e1001817b223f0cecaa3f2" -"Cartridge.Manufacturer" "Amiga, Jerry Lawson, Dan McElroy" +"Cartridge.Manufacturer" "Amiga - Video Soft, Jerry Lawson, Dan McElroy" "Cartridge.Name" "3-D Genesis (1983) (Amiga) (Prototype)" "Cartridge.Rarity" "Prototype" "Display.Phosphor" "YES" @@ -15656,6 +15724,11 @@ "Display.Phosphor" "YES" "" +"Cartridge.MD5" "cb18d8d5fbdcb1cd7bd36c5423348859" +"Cartridge.Name" "RAM-Pong (NTSC) v1.0" +"Controller.Left" "PADDLES" +"" + "Cartridge.MD5" "cb24210dc86d92df97b38cf2a51782da" "Cartridge.Manufacturer" "Video Gems" "Cartridge.ModelNo" "VG-01" @@ -16285,7 +16358,7 @@ "" "Cartridge.MD5" "d0cdafcb000b9ae04ac465f17788ad11" -"Cartridge.Manufacturer" "Quelle" +"Cartridge.Manufacturer" "Quelle - Otto Versand" "Cartridge.ModelNo" "732.273 8 - 600273, 781644" "Cartridge.Name" "Lilly Adventure (1983) (Quelle) (PAL)" "" @@ -16715,7 +16788,7 @@ "" "Cartridge.MD5" "d6b8beeb05e5b730084d4b8f381bbf8d" -"Cartridge.Name" "Game Select (208 in 1) (Unknown) (PAL)" +"Cartridge.Name" "208 in 1 Game Select ROM (Unknown) (PAL)" "" "Cartridge.MD5" "d6d1ddd21e9d17ea5f325fa09305069c" @@ -17449,7 +17522,7 @@ "" "Cartridge.MD5" "df95e4af466c809619299f49ece92365" -"Cartridge.Manufacturer" "Atari, Michael Callahan, Preston Stuart" +"Cartridge.Manufacturer" "Atari - CCW, Michael Callahan, Preston Stuart" "Cartridge.ModelNo" "CX26103" "Cartridge.Name" "Alpha Beam with Ernie (06-03-1983) (Atari) (Prototype) (PAL)" "Cartridge.Note" "Uses Keypad Controllers" @@ -18169,7 +18242,7 @@ "Cartridge.MD5" "e73838c43040bcbc83e4204a3e72eef4" "Cartridge.Manufacturer" "CCE" "Cartridge.Name" "Apples and Dolls (CCE)" -"Cartridge.Note" "AKA Open Sesame" +"Cartridge.Note" "AKA I Want My Mommy" "Display.Height" "215" "Display.Phosphor" "YES" "" @@ -19092,9 +19165,10 @@ "" "Cartridge.MD5" "f2d40c70cf3e1d03bc112796315888d9" -"Cartridge.Manufacturer" "Atari, Michael Callahan, Preston Stuart" +"Cartridge.Manufacturer" "Atari - CCW, Michael Callahan, Preston Stuart" "Cartridge.ModelNo" "CX26103" "Cartridge.Name" "Alpha Beam with Ernie (1983) (Atari) (PAL)" +"Cartridge.Note" "Uses Keypad Controllers" "Cartridge.Rarity" "Rare" "Controller.Left" "KEYBOARD" "Controller.Right" "KEYBOARD" @@ -19286,6 +19360,10 @@ "Cartridge.Name" "Immies & Aggies (1983) (CCE)" "" +"Cartridge.MD5" "f4cf6881b65c424095dc25dc987f151f" +"Cartridge.Name" "128 in 1 Game Select ROM (Unknown)" +"" + "Cartridge.MD5" "f4dabd5bcc603e8464a478208037d423" "Cartridge.Manufacturer" "Coleco, Ed Temple" "Cartridge.Name" "Cabbage Patch Kids (08-21-1984) (Coleco) (Prototype)" @@ -19869,7 +19947,7 @@ "Cartridge.MD5" "faebcb2ef1f3831b2fc1dbd39d36517c" "Cartridge.Manufacturer" "Atari, Jerome Domurat, Steve Woita" "Cartridge.ModelNo" "CX2696" -"Cartridge.Name" "Asterix (1983) (Atari) (PAL)" +"Cartridge.Name" "Asterix (1984) (Atari) (PAL)" "Cartridge.Note" "AKA Taz" "Cartridge.Rarity" "Extremely Rare" "" @@ -20040,7 +20118,7 @@ "" "Cartridge.MD5" "fcbdf405f0fc2027b0ea45bb5af94c1a" -"Cartridge.Manufacturer" "Amiga, Michael K. Glass, Jerry Lawson" +"Cartridge.Manufacturer" "Amiga - Video Soft, Michael K. Glass, Jerry Lawson" "Cartridge.Name" "3-D Ghost Attack (1983) (Amiga) (Prototype)" "Cartridge.Rarity" "Prototype" "" @@ -20276,21 +20354,3 @@ "Cartridge.Name" "Spitfire Attack (1983) (Milton Bradley) [h1]" "" -"Cartridge.MD5" "5a0ff99ba10bd26d542e1d6f59f56850" -"Cartridge.Manufacturer" "Champ Games" -"Cartridge.ModelNo" "CG-04-P" -"Cartridge.Name" "Super Cobra Arcade (PAL60)" -"Cartridge.Note" "Compatible with Genesis controller" -"Cartridge.Rarity" "Homebrew" -"Display.Format" "PAL60" -"Display.Phosphor" "YES" -"" - -"Cartridge.MD5" "841057f83ce3731e6bbfda1707cbca58" -"Cartridge.Manufacturer" "Champ Games" -"Cartridge.ModelNo" "CG-04-N" -"Cartridge.Name" "Super Cobra Arcade (NTSC)" -"Cartridge.Note" "Compatible with Genesis controller" -"Cartridge.Rarity" "Homebrew" -"Display.Phosphor" "YES" -"" From df718813923c947adea4d54aef336f71283b2dd3 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Mon, 18 Dec 2017 09:42:36 +0100 Subject: [PATCH 093/156] FLAT_UI label default alignment fix --- src/debugger/gui/DebuggerDialog.cxx | 6 ++++++ src/gui/PopUpWidget.cxx | 22 +++++++++++++--------- src/gui/TabWidget.cxx | 3 +++ src/gui/TabWidget.hxx | 8 +++++--- src/gui/Widget.cxx | 8 +++++++- 5 files changed, 34 insertions(+), 13 deletions(-) diff --git a/src/debugger/gui/DebuggerDialog.cxx b/src/debugger/gui/DebuggerDialog.cxx index 68de3cca5..d856d1c70 100644 --- a/src/debugger/gui/DebuggerDialog.cxx +++ b/src/debugger/gui/DebuggerDialog.cxx @@ -351,9 +351,15 @@ void DebuggerDialog::addTabArea() int tabID; // The Prompt/console tab +#ifndef FLAT_UI tabID = myTab->addTab(" Prompt "); myPrompt = new PromptWidget(myTab, *myNFont, 2, 2, widWidth, widHeight); +#else + tabID = myTab->addTab("Prompt"); + myPrompt = new PromptWidget(myTab, *myNFont, + 2, 2, widWidth - 4, widHeight); +#endif myTab->setParentWidget(tabID, myPrompt); addToFocusList(myPrompt->getFocusList(), myTab, tabID); diff --git a/src/gui/PopUpWidget.cxx b/src/gui/PopUpWidget.cxx index c66d1d319..c7d18e04f 100644 --- a/src/gui/PopUpWidget.cxx +++ b/src/gui/PopUpWidget.cxx @@ -59,7 +59,7 @@ PopUpWidget::PopUpWidget(GuiObject* boss, const GUI::Font& font, { _flags = WIDGET_ENABLED | WIDGET_RETAIN_FOCUS; _bgcolor = kDlgColor; - _bgcolorhi = kDlgColor; // do not highlight the label + _bgcolorhi = kDlgColor; // do not highlight the background _textcolor = kTextColor; _textcolorhi = kTextColor; // do not highlight the label @@ -218,29 +218,33 @@ void PopUpWidget::drawWidget(bool hilite) int x = _x + _labelWidth; int w = _w - _labelWidth; +#ifndef FLAT_UI // Draw the label, if any - if (_labelWidth > 0) + if(_labelWidth > 0) s.drawString(_font, _label, _x, _y + myTextY, _labelWidth, isEnabled() ? _textcolor : uInt32(kColor), TextAlign::Right); -#ifndef FLAT_UI // Draw a thin frame around us. s.hLine(x, _y, x + w - 1, kColor); s.hLine(x, _y +_h-1, x + w - 1, kShadowColor); s.vLine(x, _y, _y+_h-1, kColor); s.vLine(x + w - 1, _y, _y +_h - 1, kShadowColor); -#else - s.frameRect(x, _y, w, _h, kColor); - s.frameRect(x + w - 16, _y + 1, 15, _h - 2, hilite ? kTextColorHi : kBGColorLo); -#endif // !FLAT_UI -#ifndef FLAT_UI // Fill the background s.fillRect(x + 1, _y + 1, w - 2, _h - 2, kWidColor); // Draw an arrow pointing down at the right end to signal this is a dropdown/popup - s.drawBitmap(up_down_arrows, x+w - 10, _y + myArrowsY, + s.drawBitmap(up_down_arrows, x + w - 10, _y + myArrowsY, !isEnabled() ? kColor : hilite ? kTextColorHi : kTextColor); #else + // Draw the label, if any + if(_labelWidth > 0) + s.drawString(_font, _label, _x, _y + myTextY, _labelWidth, + isEnabled() ? _textcolor : uInt32(kColor), TextAlign::Left); + + // Draw a thin frame around us. + s.frameRect(x, _y, w, _h, kColor); + s.frameRect(x + w - 16, _y + 1, 15, _h - 2, hilite ? kTextColorHi : kBGColorLo); + // Fill the background s.fillRect(x + 1, _y + 1, w - 17, _h - 2, kWidColor); s.fillRect(x + w - 15, _y + 2, 13, _h - 4, kBGColorHi); diff --git a/src/gui/TabWidget.cxx b/src/gui/TabWidget.cxx index 1a51cc1e3..f8c36c333 100644 --- a/src/gui/TabWidget.cxx +++ b/src/gui/TabWidget.cxx @@ -329,6 +329,9 @@ void TabWidget::drawWidget(bool hilite) s.vLine(_x + _w - 2, _y + _tabHeight - 1, _y + _h - 2, kColor); s.vLine(_x + _w - 1, _y + _tabHeight - 1, _y + _h - 2, kShadowColor); #else + /*s.fillRect(x, _y, _w - x, _tabHeight - 1, kDlgColor); // ? kWidColor : kDlgColor + s.hLine(x, _y + _tabHeight, _w - x, kScrollColorHi);*/ + s.hLine(right1, _y, left2 - 1, kScrollColorHi); #endif } diff --git a/src/gui/TabWidget.hxx b/src/gui/TabWidget.hxx index 8cfabf436..72fcb3480 100644 --- a/src/gui/TabWidget.hxx +++ b/src/gui/TabWidget.hxx @@ -92,11 +92,13 @@ class TabWidget : public Widget, public CommandSender enum { #ifndef FLAT_UI kTabLeftOffset = 4, -#else - kTabLeftOffset = 0, -#endif kTabSpacing = 2, kTabPadding = 3 +#else + kTabLeftOffset = 0, + kTabSpacing = 1, + kTabPadding = 4 +#endif }; private: diff --git a/src/gui/Widget.cxx b/src/gui/Widget.cxx index 994a913f8..0b5131af0 100644 --- a/src/gui/Widget.cxx +++ b/src/gui/Widget.cxx @@ -792,11 +792,12 @@ void SliderWidget::drawWidget(bool hilite) { FBSurface& s = _boss->dialog().surface(); +#ifndef FLAT_UI // Draw the label, if any if(_labelWidth > 0) s.drawString(_font, _label, _x, _y + 2, _labelWidth, isEnabled() ? kTextColor : kColor, TextAlign::Right); -#ifndef FLAT_UI + // Draw the box s.box(_x + _labelWidth, _y, _w - _labelWidth, _h, kColor, kShadowColor); // Fill the box @@ -806,6 +807,11 @@ void SliderWidget::drawWidget(bool hilite) s.fillRect(_x + _labelWidth + 2, _y + 2, valueToPos(_value), _h - 4, !isEnabled() ? kColor : hilite ? kSliderColorHi : kSliderColor); #else + // Draw the label, if any + if(_labelWidth > 0) + s.drawString(_font, _label, _x, _y + 2, _labelWidth, + isEnabled() ? kTextColor : kColor, TextAlign::Left); + // Draw the box s.frameRect(_x + _labelWidth, _y, _w - _labelWidth, _h, hilite ? kSliderColorHi : kShadowColor); // Fill the box From 47ef41f09a9295e7361a1ca247d13269a49be543 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Mon, 18 Dec 2017 12:06:55 +0100 Subject: [PATCH 094/156] Fine tuning of FLAT_UI tabs --- src/gui/TabWidget.cxx | 20 +++++++++++++------- src/gui/VideoDialog.cxx | 5 +++-- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/gui/TabWidget.cxx b/src/gui/TabWidget.cxx index f8c36c333..23c556a86 100644 --- a/src/gui/TabWidget.cxx +++ b/src/gui/TabWidget.cxx @@ -302,8 +302,8 @@ void TabWidget::drawWidget(bool hilite) for (i = 0; i < int(_tabs.size()); ++i) { uInt32 fontcolor = _tabs[i].enabled ? kTextColor : kColor; - uInt32 boxcolor = (i == _activeTab) ? kColor : kShadowColor; #ifndef FLAT_UI + uInt32 boxcolor = (i == _activeTab) ? kColor : kShadowColor; int yOffset = (i == _activeTab) ? 0 : 2; box(x, _y + yOffset, _tabWidth, _tabHeight - yOffset, boxcolor, boxcolor, (i == _activeTab)); s.drawString(_font, _tabs[i].title, x + kTabPadding, @@ -311,11 +311,18 @@ void TabWidget::drawWidget(bool hilite) _tabWidth - 2 * kTabPadding, fontcolor, TextAlign::Center); #else int yOffset = (i == _activeTab) ? 0 : 1; - s.fillRect(x, _y, _tabWidth, _tabHeight, (i == _activeTab) + s.fillRect(x, _y + 1, _tabWidth, _tabHeight - 1, (i == _activeTab) ? kDlgColor : kBGColorHi); // ? kWidColor : kDlgColor s.drawString(_font, _tabs[i].title, x + kTabPadding + yOffset, _y + yOffset + (_tabHeight - _fontHeight - 1), - _tabWidth - 2 * kTabPadding, (i == _activeTab |true) ? fontcolor : kColor, TextAlign::Center); + _tabWidth - 2 * kTabPadding, fontcolor, TextAlign::Center); + if(i == _activeTab) + { + s.hLine(x, _y, x + _tabWidth - 1, kWidColor); + s.vLine(x + _tabWidth, _y + 1, _y + _tabHeight - 1, kBGColorHi); + } + else + s.hLine(x, _y + _tabHeight, x + _tabWidth, kWidColor); #endif x += _tabWidth + kTabSpacing; } @@ -329,10 +336,9 @@ void TabWidget::drawWidget(bool hilite) s.vLine(_x + _w - 2, _y + _tabHeight - 1, _y + _h - 2, kColor); s.vLine(_x + _w - 1, _y + _tabHeight - 1, _y + _h - 2, kShadowColor); #else - /*s.fillRect(x, _y, _w - x, _tabHeight - 1, kDlgColor); // ? kWidColor : kDlgColor - s.hLine(x, _y + _tabHeight, _w - x, kScrollColorHi);*/ - - s.hLine(right1, _y, left2 - 1, kScrollColorHi); + // fill empty right space + s.hLine(x - kTabSpacing + 1, _y + _tabHeight, _x + _w - 1, kWidColor); + s.hLine(_x, _y + _h - 1, _x + _w - 1, kBGColorHi); #endif } diff --git a/src/gui/VideoDialog.cxx b/src/gui/VideoDialog.cxx index c51fcfce4..667569f39 100644 --- a/src/gui/VideoDialog.cxx +++ b/src/gui/VideoDialog.cxx @@ -55,13 +55,14 @@ VideoDialog::VideoDialog(OSystem& osystem, DialogContainer& parent, // Set real dimensions _w = std::min(52 * fontWidth + 10, max_w); - _h = std::min(16 * (lineHeight + 4) + 14, max_h); + _h = std::min(16 * (lineHeight + VGAP) + 14, max_h); // The tab widget - xpos = HBORDER; ypos = VBORDER; + xpos = 2; ypos = 4; myTab = new TabWidget(this, font, xpos, ypos, _w - 2*xpos, _h - buttonHeight - 20); addTabWidget(myTab); + xpos = HBORDER; ypos = VBORDER; ////////////////////////////////////////////////////////// // 1) General options tabID = myTab->addTab(" General "); From 7819d076239e23c9f46b402a58f982a8a8e69112 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Mon, 18 Dec 2017 12:33:17 +0100 Subject: [PATCH 095/156] fixed deleting/toggling existing 'breakif' and 'savestateif' --- src/debugger/DebuggerParser.cxx | 2 ++ src/gui/TabWidget.cxx | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/debugger/DebuggerParser.cxx b/src/debugger/DebuggerParser.cxx index de621faf3..ba772f806 100644 --- a/src/debugger/DebuggerParser.cxx +++ b/src/debugger/DebuggerParser.cxx @@ -756,6 +756,7 @@ void DebuggerParser::executeBreakif() { if(condition == debugger.m6502().getCondBreakNames()[i]) { + args[0] = i; executeDelbreakif(); return; } @@ -1830,6 +1831,7 @@ void DebuggerParser::executeSavestateif() { if(condition == debugger.m6502().getCondSaveStateNames()[i]) { + args[0] = i; executeDelsavestateif(); return; } diff --git a/src/gui/TabWidget.cxx b/src/gui/TabWidget.cxx index 23c556a86..fb55d1096 100644 --- a/src/gui/TabWidget.cxx +++ b/src/gui/TabWidget.cxx @@ -319,7 +319,7 @@ void TabWidget::drawWidget(bool hilite) if(i == _activeTab) { s.hLine(x, _y, x + _tabWidth - 1, kWidColor); - s.vLine(x + _tabWidth, _y + 1, _y + _tabHeight - 1, kBGColorHi); + s.vLine(x + _tabWidth, _y + 1, _y + _tabHeight - 1, kBGColorLo); } else s.hLine(x, _y + _tabHeight, x + _tabWidth, kWidColor); @@ -338,7 +338,7 @@ void TabWidget::drawWidget(bool hilite) #else // fill empty right space s.hLine(x - kTabSpacing + 1, _y + _tabHeight, _x + _w - 1, kWidColor); - s.hLine(_x, _y + _h - 1, _x + _w - 1, kBGColorHi); + s.hLine(_x, _y + _h - 1, _x + _w - 1, kBGColorLo); #endif } From 50c8c5c26608fe54c58707ff238cd10108c39413 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Mon, 18 Dec 2017 13:09:03 +0100 Subject: [PATCH 096/156] fixed name resolution for trapread --- src/emucore/M6502.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/emucore/M6502.cxx b/src/emucore/M6502.cxx index 58166c59b..33b0877d8 100644 --- a/src/emucore/M6502.cxx +++ b/src/emucore/M6502.cxx @@ -225,8 +225,9 @@ bool M6502::execute(uInt32 number) #ifdef DEBUGGER_SUPPORT if(myJustHitReadTrapFlag || myJustHitWriteTrapFlag) { + bool read = myJustHitReadTrapFlag; myJustHitReadTrapFlag = myJustHitWriteTrapFlag = false; - if(myDebugger && myDebugger->start(myHitTrapInfo.message, myHitTrapInfo.address, myJustHitReadTrapFlag)) + if(myDebugger && myDebugger->start(myHitTrapInfo.message, myHitTrapInfo.address, read)) { return true; } From e5216d4f90676300ff4d98a254049fefa41cc4c7 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Mon, 18 Dec 2017 13:28:23 +0100 Subject: [PATCH 097/156] added index to conditional trapif/breakif/savestateif display --- src/emucore/M6502.cxx | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/emucore/M6502.cxx b/src/emucore/M6502.cxx index 33b0877d8..8eb73e440 100644 --- a/src/emucore/M6502.cxx +++ b/src/emucore/M6502.cxx @@ -21,6 +21,7 @@ #include "CartDebug.hxx" #include "PackedBitArray.hxx" #include "TIA.hxx" + #include "Base.hxx" #include "M6532.hxx" // Flags for disassembly types @@ -142,8 +143,9 @@ inline uInt8 M6502::peek(uInt16 address, uInt8 flags) if(cond > -1) { myJustHitReadTrapFlag = true; - myHitTrapInfo.message = "RTrap" - + (myTrapCondNames[cond].empty() ? ": " : "If: {" + myTrapCondNames[cond] + "} "); + stringstream msg; + msg << "RTrap[" << Common::Base::HEX2 << cond << "]" << (myTrapCondNames[cond].empty() ? ": " : "If: {" + myTrapCondNames[cond] + "} "); + myHitTrapInfo.message = msg.str(); myHitTrapInfo.address = address; } } @@ -176,8 +178,9 @@ inline void M6502::poke(uInt16 address, uInt8 value, uInt8 flags) if(cond > -1) { myJustHitWriteTrapFlag = true; - myHitTrapInfo.message = "WTrap" - + (myTrapCondNames[cond].empty() ? ": " : "If: {" + myTrapCondNames[cond] + "} "); + stringstream msg; + msg << "WTrap[" << Common::Base::HEX2 << cond << "]" << (myTrapCondNames[cond].empty() ? ": " : "If: {" + myTrapCondNames[cond] + "} "); + myHitTrapInfo.message = msg.str(); myHitTrapInfo.address = address; } } @@ -240,15 +243,18 @@ bool M6502::execute(uInt32 number) int cond = evalCondBreaks(); if(cond > -1) { - string buf = "CBP: " + myCondBreakNames[cond]; - if(myDebugger && myDebugger->start(buf)) + stringstream msg; + msg << "CBP[" << Common::Base::HEX2 << cond << "]: " << myCondBreakNames[cond]; + if(myDebugger && myDebugger->start(msg.str())) return true; } cond = evalCondSaveStates(); if(cond > -1) { - myDebugger->addState("conditional savestate"); + stringstream msg; + msg << "conditional savestate [" << Common::Base::HEX2 << cond << "]"; + myDebugger->addState(msg.str()); } #endif // DEBUGGER_SUPPORT From 01c859d2a03c4683c5d89d5703ed6aab2604f036 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Mon, 18 Dec 2017 17:26:59 +0100 Subject: [PATCH 098/156] removed superfluous '(*)' in UI dialog updated doc and added examples for other palettes --- docs/graphics/options_misc.png | Bin 3829 -> 3776 bytes docs/graphics/options_misc_classic.png | Bin 0 -> 3755 bytes docs/graphics/options_misc_light.png | Bin 0 -> 3741 bytes docs/index.html | 11 ++++++++--- src/gui/UIDialog.cxx | 2 +- 5 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 docs/graphics/options_misc_classic.png create mode 100644 docs/graphics/options_misc_light.png diff --git a/docs/graphics/options_misc.png b/docs/graphics/options_misc.png index f07dfc78fcdb2e53c0713933567b32c5e7bb0e44..6587791346388d059e961622e411478ca7958d5f 100644 GIT binary patch literal 3776 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 BHjDrO diff --git a/docs/graphics/options_misc_classic.png b/docs/graphics/options_misc_classic.png new file mode 100644 index 0000000000000000000000000000000000000000..7a10ccbba8fadf69e96fd9488302f7159f4bc1f0 GIT binary patch literal 3755 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 literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html index 9c3f7ae75..2ae603f1b 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2633,17 +2633,22 @@
             - + - + - + - + - + - + - +
        ItemBrief descriptionFor more information,
        see CommandLine
        Continuous rewindTime Machine - When continuous rewind is enabled, Stella will automatically - create new save states in the interval described below. The user + When the Time Machine is enabled, Stella will automatically + buffer save states in the interval described below. The user can then navigate back and forth within the recorded timeline.
        Note: This buffer is identical with the one described in - Debugger/Global Buttons. - It is independent from the save states manually created - with F9. + Debugger - Global Buttons. + It is independent from the save states manually created with F9.
        -plr.rewind
        -dev.rewind
        -plr.timemachine
        -dev.timemachine
        Buffer size - Defines the rewind buffer size. The larger the buffer, the less + Defines the Time Machine buffer size. The larger the buffer, the less save states have to be compressed to reach the horizon. -plr.rewind.size
        -dev.rewind.size
        -plr.tm.size
        -dev.tm.size
        Uncompressed sizeUncompressed size (*) - Defines the uncompressed rewind buffer size. States within this + Defines the uncompressed Time Machine buffer size. States within this area will not be compressed and keep their initial interval.-plr.rewind.uncompressed
        -dev.rewind.uncompressed
        -plr.tm.uncompressed
        -dev.tm.uncompressed
        Interval Defines the interval between two save states when they are created.-plr.rewind.interval
        -dev.rewind.interval
        -plr.tm.interval
        -dev.tm.interval
        Horizon - Defines the horizon of the rewind buffer. A large horizon allows + Defines the horizon of the Time Machine. A large horizon allows going back further in time. To reach the horizon, save states will be compressed (*). This means that more and more intermediate states will be removed and the interval between save states @@ -3136,7 +3140,7 @@ (*) Compresion only works if 'Uncompressed size' is smaller than 'Buffer size'. -plr.rewind.horizon
        -dev.rewind.horizon
        -plr.tm.horizon
        -dev.tm.horizon
        + -
        ItemBrief descriptionFor more information,
        see CommandLine
        Font sizeSelf-explanatory (requires ROM reload)-dbg.fontsize
        Font styleSelf-explanatory (requires ROM reload)-dbg.fontstyle
        Font sizeSelf-explanatory (requires ROM reload)N/A
        Debugger width/heightSelf-explanatory (requires ROM reload)-dbg.res
        FunctionDescription
        _bank Currently selected bank
        _cclocks Color clocks on a scanline
        _cycles Number of cycles of last instruction
        _cycleshi Higher 32 bits of number of cycles since emulation started
        _cycleslo Lower 32 bits of number of cycles since emulation started
        _fcount Number of frames since emulation started
        FunctionDescription
        _bank Currently selected bank
        _cclocks Color clocks on a scanline
        _cycles Number of cycles of last instruction
        _cycleshi Higher 32 bits of number of cycles since emulation started
        _cycleslo Lower 32 bits of number of cycles since emulation started
        _fcount Number of frames since emulation started
        _fcycles Number of cycles since frame started
        _icycles Number of cycles of last instruction
        _rwport Last address to attempt a read from the cart write port
        _scan Current scanline count
        _scycles Number of cycles in current scanline
        -uipalette <standard|classic>
        -uipalette <standard|classic|light>
        Use the specified palette for UI elements.
        - + + + + + +


             - + - +
        ItemBrief descriptionFor more information,
        see CommandLine
        Interface PalettePalette to use for UI elements-uipalette
        Interface PalettePalette to use for UI elements (see examples)-uipalette
        List quick delayTime to wait between keypresses in list-widgets-listdelay
        Mouse wheel scrollNumber of lines mouse scroll will move in list-widgets-mscroll
        Mouse wheel scrollNumber of lines a mouse scroll will move in list-widgets-mscroll
            

        diff --git a/src/gui/UIDialog.cxx b/src/gui/UIDialog.cxx index 1fc603f47..1bc979715 100644 --- a/src/gui/UIDialog.cxx +++ b/src/gui/UIDialog.cxx @@ -167,7 +167,7 @@ UIDialog::UIDialog(OSystem& osystem, DialogContainer& parent, VarList::push_back(items, "900 ms", "900"); VarList::push_back(items, "1 second", "1000"); myListDelayPopup = new PopUpWidget(myTab, font, xpos, ypos, pwidth, lineHeight, - items, "List quick delay (*) ", lwidth); + items, "List quick delay ", lwidth); wid.push_back(myListDelayPopup); ypos += lineHeight + 4; From 481c85c0c3302022c209ad7d91025d3dc1e480cb Mon Sep 17 00:00:00 2001 From: thrust26 Date: Mon, 18 Dec 2017 19:16:41 +0100 Subject: [PATCH 099/156] added option for 'ghost' read traps update documentation accordingly removed reload requirements for Time Machine --- docs/graphics/options_developer_debugger.png | Bin 4810 -> 5260 bytes .../options_developer_timemachine.png | Bin 5298 -> 4895 bytes docs/index.html | 17 +++++++-- src/emucore/M6502.cxx | 7 +++- src/emucore/M6502.hxx | 4 +++ src/emucore/Settings.cxx | 8 +++-- src/gui/DeveloperDialog.cxx | 33 ++++++++++++------ src/gui/DeveloperDialog.hxx | 2 ++ 8 files changed, 54 insertions(+), 17 deletions(-) diff --git a/docs/graphics/options_developer_debugger.png b/docs/graphics/options_developer_debugger.png index ecaba7dc0499d97929de4c10b589d40ab51ae912..92eed6f35d121b750161deb02b86538bc1a18afd 100644 GIT binary patch literal 5260 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 literal 4810 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 diff --git a/docs/graphics/options_developer_timemachine.png b/docs/graphics/options_developer_timemachine.png index 45e38e8e45e975b5b9518acd6d9685d5af7ac2de..caf3cc63dd633f39af5ce14f541781879c7d2bfd 100644 GIT binary patch delta 3621 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 delta 4043 zcmY+Gc{J4R|HebeV@pC9v?^J{SjG$@%9cW8iBwNxPX^5(6COmCo@|Zbqah?~#*z$U zDN6X*cV?`UeLNTqhM%7A>HNOm`_KEF>s;r&?)QDYuPoVexw0q@tdOY5mCH70=jF_p zz?lojjP8tEtL^W%8WtTsqKF$&_)^=-lX!^7tlDa}d^{h!x5qI7Qe^n49lK0x_&(<& zZUFTXB67SUevgQg{wNN`J*mTUQ&<2Pg4df!|MXzCuZc2 zxfCj{HSH7-;46gP!VEMT@i8K3Nnx~L#$QNj7p~iE`(vmsK0_5iPs>VGWH}YfkV8*@8W`Sr<2nf^0`sy}+#SHQHP?|lE8`@q%`G^lkxgH zP{86Op6~DQo5mYab8oFhKUV7tS6n}nazP;|wZ)Aq_{3863Qliw+r*>>S24j3`X+Z; zar`n8(9HP3wshU#jjU-oaWF-=-!=2r5=k=-a^?yP*PlSxX&+P9=k#;-ERdXY#uJMQgEx zr0i*LU}w?Iz@`6-DnxDQQ5MbpPuT2#yb_&6qDO8{(>B^9Dk!3$l?|!y(OcY-UMRxL~JoE7C^deuXKqwl&=~Bc9EXd8c!G zl!JT{aXeQfJ=7kSQQ8JwXCL_KBA|Ap#F(jfH(;I;Zsf^LOFEIs1GNWZc0}CtYDN}s z(;>P$K?tXR9WOAbKMFlYpym1dGaiKxG05nc13moB0({ihPU< z2ZJ|EW9o42#2{JTNqkPL_L}t~n?+>YYxcVRG{WeF+0A0mn|?2;TM&YcAkeJje;gu( zg&{wfyRpHu3TRe8m4&bDfFJdk_FMTGPadjlD5RTIq}~qm&}xgyLP|8OnZxZmF00EQ z6}&q9Y{HB=LPWIPpBCW}!T;fD9A=xWZ~scPnA?RoPMnxWH`k5*)#Fcwu3AeMNgcM8 za3Qc!%KM3A!W2t`Z2;RUI~A!iK43tHGRk?%A_Rfaa3kAN(F(zo1lauorG*HkB4v-w zlXOK&&|GIa?5;=b4QM-hiQ~!0Pp8{l^{!Le&jUNwWIb(!j#YZ5Keuc4ch7Is@$iRS zqFH#ql$>0Es|2SCa#L z=)f&MWW9x^GWDYXy(zdb+DWE06r}PrpaiJe-1H0%bSE2}_GW80Yajm4Er+ttpNR}X z4#2JfrNeCq=Gu0#p*bRGRkvj;7>DR%&aMkJ$GP;-0 zRlLX%-bTd!;+bX+$Ilt7Q)vD8r^)<35WqK7En2k0XrqCMXv`OpGNm3zo=s^njk1V@ z=IG0tzELoFF*03K*Axwig;$OR_eVg-SI_-S=Jw6vCnVymLMSp4K+^-lpy68w^p))^5($km-U`46OW#Kofx~1 zTSgciwIO*dg>!4@FAoC39q(05v2QE znBvQtmH_Ndz^fa1aipy8I@2-AWqcD!VMm3rckxIT_PDA8d*Zz$B(xnufBMK5A&K~I zd68$UopLXA^-?MJ4F2DY-NrPed2P0nU9FCgLvBlpQqm*APJvP}?kWt=&vbX6zjXs8lN4tzi&mqe@ z)X=csGj|9;9Rjt{SR#^Tk)QeFn{?+3L}7j=X-1N(l%YWRo5Bs>52R`z0_7XlD>wA2 z9rm?F;oS9G?Rsh%V4^xNA13x|7d>4V(38mbb=~!CxinlhlqL;-en&o@iCc*|# zWrdExXm)brI@iLmv3olKc=2#JLB|6Q59fdn@-hkqF0WuM-It8T15D3HnN1^BZ8=ts4$&GVZd@{YJ5nlL)NeIE zb70kg!cy76iv|1a$-i3dPC{g8 z26Ku0`_B)U(;tG{_!^yG*J8o8mO9u*a$%^>KTnUb0$T?g)(^@82c5+JFM4_%axbi# zQxAt9y%(?;ff!9ZC+E9=fr{Z=Um8vEZM-GZfkKq}y+iIRlzdu>&~89s=5yktz5Te~ z(jHr=5>Ov1AX?(KbePyk&H)w36b^rbV9X0$dokiL49U2`^9w092eBxV{Y?X;zTQF| z`RmqhvwXncf<;}NS^uaCaY0Sf6?Au5PEVeX!XqRRqmG}01jnpPqUg{eKPS}gc-6Uir2j4IF_l(15{x;gMaT}w60mL} z0Q2pBeu9bjqG^7PHGz{8LlM^7Fd5`W-rUN&+$y%zdY;V-v$sM2Z6$aN0??x-IHJmE zNRD5lcz$fE#%V<8$2`zs1U$N|zHDU4@SRu^xA`5XjV}<3%5y;HnR=@vDSk<8A{%+X zYO^FlvpZ;y*-cHh)bG`G-VX(0x37)o0{K>ElP9|Ar1lhGexA^+)ubkq^#wIQBW|u~ z?IGG^h|+!edg%S#|nVO>aW4 zrQlD^>ZhA;gs$}U$BJs92e3A+w6Z08h{-EJj${9&xKHZWC0qfgK-HD}g)tK^tX}X* zHw77o*PBI2-zcEDd4SRL^ZyheSInkmtnBso_+~cD3AS&|;R9-#YV^MEh+e}&2Wxkq zUXIE*S>WRE_WBXvPvXGqL<1^Rb>wK&JHZd9@WQ#N7)^SJ zvcG%Un;n*i^OE@C1743peOwL$qg&yn&FplNB)VPfmxE4}}j1qo&?VE6AoR}6}$dz$r ziUKY?CsI?~-xvogI#zOpE0I4dtRe*)U9v((nwehorLc5do4S7kieGnmG9(p|CPbFZ z&7bM5M@yJCdy03^$2R-WT3I6C;aj8;t}G9BVNdp4b(iQAXr!wYYK64L3F1H8{#HUl910RxhVxd$9%#`II^fU=h2a z^@sik(IK$*ppO&GY7dXE+O6LMPZB=}8n9ti7`r)$UcR=MT_Jza0EC<&SZBY?DXsW^ zXz^P@mUdzqc?`Kyrfj*zCkjs+Fno5^d;YHN_4+5PHPe=Ld9~u0DqaS+8;TpPACDjx z$cLG!=2gwWC>v1;-kGIo#4gh2tBU;Vt$hP9&H@$Gj`d(%fE0htp6MK7J-~Cu7W+X} z%&d7h=)Joqr*vd}*n$mjoyLTvX=*Jqh?IR_DbhLo-gNyQtRAEH{pHiNuV14^QtC0D&4EE*E3az9LTw@2TsVtL08{y7BMfz@yC;CO9wCqhgtkRu6YIvu`B z@#Bj@V9i>+_|5x~S}qccQXPb|JJ?njw5nm-uADmT9v$fUv5hcR-xF*xnkOH>$z}9u zZEq`w5peTFN>tFD+b>Q(k*vGx0Dack{PvpnMuW5v^Vr8pgtn|7*<-Ag(?FQv98f_EjK(I8mJjQFnK z?=(0lSN~abDqt>$atnN)W5NP+e!3=;?ROv_EWra+1+ZC27w+O$ePc(8j@ss4Niua)h_B;4jnWI=tML8cV+HU~VBCcZgWC+8rZIc_ZBhqNu zAI9C8?>k;ktVcWJNW7y#4%~ zZ38OokpOfS`XuM|!1`2=++!v;Fn_t>>h_v#L43zroT&N*x)WV;U_65d1uU1O8iRLJ zB;0z2SB4EyA)2>n>VL_x0le5yJM(W46u_f5;p|;z`?HC-k8w?x^Yo;DU;{bHuFG{9 z{sK(W{883!^1;9G0=XL6~ zycfO5GAw-;UDDMMz6mSHEIm)fmDO6|FJ&TiJA+Ku&N{sd3obcY2qba=dW5ZAC_O~_ zcR!)>0JG#09nSG77Q|0j5Fyl!R>~p%*9##cs@Z=vxU
        -dbg.ghostreadstrap <1|0>
        Debugger considers/ignores 'ghost' reads for trap addresses
        -dbg.uhex <0|1>
        Lower-/uppercase HEX display
        -break <address>
        Set a breakpoint at specified address. - - - + + + +
        ItemBrief descriptionFor more information,
        see CommandLine
        Font sizeSelf-explanatory (requires ROM reload)-dbg.fontsize
        Font styleSelf-explanatory (requires ROM reload)-dbg.fontstyle
        Debugger width/heightSelf-explanatory (requires ROM reload)-dbg.res
        Font sizeSelf-explanatory-dbg.fontsize
        Font styleSelf-explanatory-dbg.fontstyle
        Debugger width/heightSelf-explanatory-dbg.res
        Trap on 'ghost' readsDefines whether the debugger should consider CPU 'ghost' reads for trap adresses.-dbg.ghostreadstrap
        @@ -1785,6 +1788,43 @@ + +

        +

        + Stella's 'Time Machine'

        + +

        A special feature of Stella is the 'Time Machine' mode. In this mode, Stella + automatically creates savestates in regular, user-defined intervals. You can then + interrupt the current emulation and navigate back and forth within the timeline. + This can be done either by using the Time Machine hotkeys described in + Hotkeys - Other Keys or by using the Time Machine + dialog. To enter this dialog, either use one of the hotkeys or press 'T'.

        + +

        Time Machine dialog:

        +
        + + + + + +
        TODO: Screenshot     + + + + + + + + + +
        ItemDescription
        ButtonTODO
        Button
        Button
        Button
        Button
        Button
        Button
        +
        +
        + + +

        The 'Time Machine' mode can be configured by the user. For details see + Developer Options - Time Machine dialog.

        +

        From 74009d2545208769c4ee9256689c417d562b6576 Mon Sep 17 00:00:00 2001 From: Christian Speckner Date: Sun, 7 Jan 2018 20:16:21 +0100 Subject: [PATCH 152/156] Changelog. --- Changes.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Changes.txt b/Changes.txt index a195da0e4..4600e6451 100644 --- a/Changes.txt +++ b/Changes.txt @@ -1,5 +1,19 @@ 5.0.2 to 5.1: (January xx, 2018) + * Thumbulator support is not conditional any more. + + * Don't trap write accesses to the datastream pointers in CDF and BUS. + This fixes -dev.thumb.trapfatal 1. + + * Complete rework of TV mode and ystart autodetection. The new + implementation is more robust and reduces startup time. + + * Add two "grace lines" of black to the top of the frame when + autodetecting ystart. + + * Support UNIX style builds (configure / make) on OSX with both + XCode / clang and g++. + * Huge improvements to the disassembly view in the debugger and disassembly files created: - reformatting in debugger for better space utilization From 29499775dc3d823be1ee00b4ee14d1cbbcbece3c Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Tue, 9 Jan 2018 23:16:50 -0330 Subject: [PATCH 153/156] Fixed compilation when '--disable-debugger' is used. --- src/emucore/EventHandler.cxx | 4 ++-- src/emucore/FrameBuffer.cxx | 4 ++-- src/emucore/M6502.cxx | 19 ++++++++++++------- src/emucore/M6502.hxx | 10 +++++----- src/emucore/OSystem.cxx | 4 ++-- src/emucore/tia/TIA.cxx | 4 ---- src/emucore/tia/TIA.hxx | 5 +++-- src/gui/DeveloperDialog.cxx | 8 +++++--- src/gui/DeveloperDialog.hxx | 2 -- 9 files changed, 31 insertions(+), 29 deletions(-) diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx index ff3f24bf7..f55308007 100644 --- a/src/emucore/EventHandler.cxx +++ b/src/emucore/EventHandler.cxx @@ -2187,12 +2187,12 @@ void EventHandler::setEventState(EventHandlerState state) myEvent.clear(); break; -#ifdef DEBUGGER_SUPPORT case EventHandlerState::DEBUGGER: + #ifdef DEBUGGER_SUPPORT myOverlay = &myOSystem.debugger(); enableTextEvents(true); + #endif break; -#endif case EventHandlerState::NONE: myOverlay = nullptr; diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index 231656b9c..ca7b17d04 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -339,13 +339,13 @@ void FrameBuffer::update() break; // EventHandlerState::LAUNCHER } -#ifdef DEBUGGER_SUPPORT case EventHandlerState::DEBUGGER: { + #ifdef DEBUGGER_SUPPORT myOSystem.debugger().draw(true); + #endif break; // EventHandlerState::DEBUGGER } -#endif case EventHandlerState::NONE: return; diff --git a/src/emucore/M6502.cxx b/src/emucore/M6502.cxx index 367c80845..be39a27e6 100644 --- a/src/emucore/M6502.cxx +++ b/src/emucore/M6502.cxx @@ -69,12 +69,12 @@ M6502::M6502(const Settings& settings) myDataAddressForPoke(0), myOnHaltCallback(nullptr), myHaltRequested(false), + myGhostReadsTrap(true), myStepStateByInstruction(false) { #ifdef DEBUGGER_SUPPORT myDebugger = nullptr; myJustHitReadTrapFlag = myJustHitWriteTrapFlag = false; - myGhostReadsTrap = true; #endif } @@ -210,7 +210,10 @@ inline void M6502::handleHalt() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void M6502::updateStepStateByInstruction() { + // Currently only used in debugger mode +#ifdef DEBUGGER_SUPPORT myStepStateByInstruction = myCondBreaks.size() || myCondSaveStates.size() || myTrapConds.size(); +#endif } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -218,6 +221,7 @@ bool M6502::execute(uInt32 number) { const bool status = _execute(number); +#ifdef DEBUGGER_SUPPORT // Debugger hack: this ensures that stepping a "STA WSYNC" will actually end at the // beginning of the next line (otherwise, the next instruction would be stepped in order for // the halt to take effect). This is safe because as we know that the next cycle will be a read @@ -228,6 +232,7 @@ bool M6502::execute(uInt32 number) // to maintain a consistent state for the debugger after stepping. mySystem->tia().updateEmulation(); mySystem->m6532().updateEmulation(); +#endif return status; } @@ -248,7 +253,7 @@ inline bool M6502::_execute(uInt32 number) { for(; !myExecutionStatus && (number != 0); --number) { -#ifdef DEBUGGER_SUPPORT + #ifdef DEBUGGER_SUPPORT if(myJustHitReadTrapFlag || myJustHitWriteTrapFlag) { bool read = myJustHitReadTrapFlag; @@ -279,7 +284,7 @@ inline bool M6502::_execute(uInt32 number) msg << "conditional savestate [" << Common::Base::HEX2 << cond << "]"; myDebugger->addState(msg.str()); } -#endif // DEBUGGER_SUPPORT + #endif // DEBUGGER_SUPPORT uInt16 operandAddress = 0, intermediateAddress = 0; uInt8 operand = 0; @@ -301,17 +306,17 @@ inline bool M6502::_execute(uInt32 number) // Oops, illegal instruction executed so set fatal error flag myExecutionStatus |= FatalErrorBit; } - //cycles = mySystem->cycles() - c0; -#ifdef DEBUGGER_SUPPORT - if (myStepStateByInstruction) { + #ifdef DEBUGGER_SUPPORT + if(myStepStateByInstruction) + { // Check out M6502::execute for an explanation. handleHalt(); tia.updateEmulation(); riot.updateEmulation(); } -#endif + #endif } // See if we need to handle an interrupt diff --git a/src/emucore/M6502.hxx b/src/emucore/M6502.hxx index c0b114664..3c88674ac 100644 --- a/src/emucore/M6502.hxx +++ b/src/emucore/M6502.hxx @@ -445,8 +445,6 @@ class M6502 : public Serializable int address; }; HitTrapInfo myHitTrapInfo; - // trap on ghost reads - bool myGhostReadsTrap; vector> myCondBreaks; StringList myCondBreakNames; @@ -454,11 +452,13 @@ class M6502 : public Serializable StringList myCondSaveStateNames; vector> myTrapConds; StringList myTrapCondNames; - - bool myStepStateByInstruction; - #endif // DEBUGGER_SUPPORT + // These are both used only by the debugger, but since they're included + // in save states, they cannot be conditionally compiled + bool myGhostReadsTrap; // trap on ghost reads + bool myStepStateByInstruction; + private: // Following constructors and assignment operators not supported M6502() = delete; diff --git a/src/emucore/OSystem.cxx b/src/emucore/OSystem.cxx index 4c5110a1b..95175dc67 100644 --- a/src/emucore/OSystem.cxx +++ b/src/emucore/OSystem.cxx @@ -264,12 +264,12 @@ FBInitStatus OSystem::createFrameBuffer() return fbstatus; break; -#ifdef DEBUGGER_SUPPORT case EventHandlerState::DEBUGGER: + #ifdef DEBUGGER_SUPPORT if((fbstatus = myDebugger->initializeVideo()) != FBInitStatus::Success) return fbstatus; + #endif break; -#endif case EventHandlerState::NONE: // Should never happen logMessage("ERROR: Unknown emulation state in createFrameBuffer()", 0); diff --git a/src/emucore/tia/TIA.cxx b/src/emucore/tia/TIA.cxx index a2805d9d2..f7ebf2910 100644 --- a/src/emucore/tia/TIA.cxx +++ b/src/emucore/tia/TIA.cxx @@ -1709,14 +1709,10 @@ void TIA::toggleCollBLPF() // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void TIA::createAccessBase() { -#ifdef DEBUGGER_SUPPORT myAccessBase = make_unique(TIA_SIZE); memset(myAccessBase.get(), CartDebug::NONE, TIA_SIZE); myAccessDelay = make_unique(TIA_SIZE); memset(myAccessDelay.get(), TIA_DELAY, TIA_SIZE); -#else - myAccessBase = nullptr; -#endif } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/tia/TIA.hxx b/src/emucore/tia/TIA.hxx index 0fb54caee..84e2b8a06 100644 --- a/src/emucore/tia/TIA.hxx +++ b/src/emucore/tia/TIA.hxx @@ -776,13 +776,14 @@ class TIA : public Device bool myEnableJitter; uInt8 myJitterFactor; -#ifdef DEBUGGER_SUPPORT + #ifdef DEBUGGER_SUPPORT // The arrays containing information about every byte of TIA // indicating whether and how (RW) it is used. BytePtr myAccessBase; + // The array used to skip the first two TIA access trackings BytePtr myAccessDelay; -#endif // DEBUGGER_SUPPORT + #endif // DEBUGGER_SUPPORT static constexpr uInt16 TIA_SIZE = 0x40, TIA_MASK = TIA_SIZE - 1, TIA_READ_MASK = 0x0f, TIA_BIT = 0x080, TIA_DELAY = 2; diff --git a/src/gui/DeveloperDialog.cxx b/src/gui/DeveloperDialog.cxx index b68010369..b19a7ebcb 100644 --- a/src/gui/DeveloperDialog.cxx +++ b/src/gui/DeveloperDialog.cxx @@ -44,7 +44,7 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DeveloperDialog::DeveloperDialog(OSystem& osystem, DialogContainer& parent, - const GUI::Font& font, int max_w, int max_h) + const GUI::Font& font, int max_w, int max_h) : Dialog(osystem, parent) { const int VGAP = 4; @@ -375,13 +375,13 @@ void DeveloperDialog::addTimeMachineTab(const GUI::Font& font) void DeveloperDialog::addDebuggerTab(const GUI::Font& font) { int tabID = myTab->addTab("Debugger"); + WidgetArray wid; #ifdef DEBUGGER_SUPPORT const int HBORDER = 10; const int VBORDER = 8; const int VGAP = 4; - WidgetArray wid; VariantList items; int fontWidth = font.getMaxCharWidth(), fontHeight = font.getFontHeight(), @@ -473,7 +473,7 @@ void DeveloperDialog::addDebuggerTab(const GUI::Font& font) // Add items for tab 1 addToFocusList(wid, myTab, tabID); #else - new StaticTextWidget(myTab, font, 0, 20, _w - 20, fontHeight, + new StaticTextWidget(myTab, font, 0, 20, _w - 20, font.getFontHeight(), "Debugger support not included", TextAlign::Center); #endif @@ -1199,6 +1199,7 @@ void DeveloperDialog::handleDebugColours(const string& colors) // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void DeveloperDialog::handleFontSize() { +#ifdef DEBUGGER_SUPPORT uInt32 minW, minH; int fontSize = myDebuggerFontSize->getSelected(); @@ -1233,4 +1234,5 @@ void DeveloperDialog::handleFontSize() myDebuggerHeightSlider->setValue(minH); myDebuggerHeightLabel->setValue(minH); } +#endif } diff --git a/src/gui/DeveloperDialog.hxx b/src/gui/DeveloperDialog.hxx index 113b34b2b..27577b89f 100644 --- a/src/gui/DeveloperDialog.hxx +++ b/src/gui/DeveloperDialog.hxx @@ -183,9 +183,7 @@ class DeveloperDialog : public Dialog void handleUncompressed(); void handleInterval(); void handleHorizon(); -#ifdef DEBUGGER_SUPPORT void handleFontSize(); -#endif // Following constructors and assignment operators not supported DeveloperDialog() = delete; From f241dfd7b72a566483219e9dca0b7fdc2675fde5 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Wed, 10 Jan 2018 11:48:06 +0100 Subject: [PATCH 154/156] fixed compressStates(), now, with compression enabled, the first element is always kept and the horizon matches missing "framerate" added, now changes are persisted. --- src/common/RewindManager.cxx | 19 ++++++++----------- src/emucore/Settings.cxx | 1 + 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/common/RewindManager.cxx b/src/common/RewindManager.cxx index 16468d17b..f6d6d0b62 100644 --- a/src/common/RewindManager.cxx +++ b/src/common/RewindManager.cxx @@ -214,9 +214,14 @@ uInt32 RewindManager::unwindState(uInt32 numStates) void RewindManager::compressStates() { double expectedCycles = myInterval * myFactor * (1 + myFactor); - double maxError = 1; + double maxError = 1.5; uInt32 idx = myStateList.size() - 2; + //uInt32 removeIdx = 0; + // in case maxError is <= 1.5 remove first state by default: Common::LinkedObjectPool::const_iter removeIter = myStateList.first(); + if(myUncompressed < mySize) + // if compression is enabled, the first but one state is removed by default: + removeIter++; //cerr << "idx: " << idx << endl; // iterate from last but one to first but one @@ -236,21 +241,13 @@ void RewindManager::compressStates() { maxError = error; removeIter = it; + //removeIdx = idx; } } --idx; } - if (maxError < 1) - { - // the horizon is getting too big (can happen after changing settings) - myStateList.remove(1); // remove oldest but one -//cerr << "remove oldest + 1" << endl; - } - else - { - myStateList.remove(removeIter); // remove + myStateList.remove(removeIter); // remove //cerr << "remove " << removeIdx << endl; - } } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/Settings.cxx b/src/emucore/Settings.cxx index 18d079f42..ac09c2478 100644 --- a/src/emucore/Settings.cxx +++ b/src/emucore/Settings.cxx @@ -34,6 +34,7 @@ Settings::Settings(OSystem& osystem) { // Video-related options setInternal("video", ""); + setInternal("framerate", "0"); setInternal("vsync", "true"); setInternal("fullscreen", "false"); setInternal("center", "false"); From cef50e436836b25bc0d940de2c2d1708fac49915 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Mon, 15 Jan 2018 14:44:09 +0100 Subject: [PATCH 155/156] frame stats overlay made transparent --- src/emucore/FrameBuffer.cxx | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index 231656b9c..2c641154e 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -180,7 +180,7 @@ FBInitStatus FrameBuffer::createDisplay(const string& title, // can be relaxed // Otherwise, we treat the system as if WINDOWED_SUPPORT is not defined if(myDesktopSize.w < kFBMinW && myDesktopSize.h < kFBMinH && - (myDesktopSize.w < width || myDesktopSize.h < height)) + (myDesktopSize.w < width || myDesktopSize.h < height)) return FBInitStatus::FailTooLarge; useFullscreen = myOSystem.settings().getBool("fullscreen"); @@ -233,7 +233,12 @@ FBInitStatus FrameBuffer::createDisplay(const string& title, myStatsMsg.h = (infoFont().getFontHeight() + 2) * 2; if(!myStatsMsg.surface) + { myStatsMsg.surface = allocateSurface(myStatsMsg.w, myStatsMsg.h); + myStatsMsg.surface->attributes().blending = true; + //myStatsMsg.surface->attributes().blendalpha = 80; + myStatsMsg.surface->applyAttributes(); + } if(!myMsg.surface) myMsg.surface = allocateSurface(kFBMinW, font().getFontHeight()+10); @@ -286,11 +291,24 @@ void FrameBuffer::update() std::snprintf(msg, 30, "%3u @ %3.2ffps => %s", myOSystem.console().tia().scanlinesLastFrame(), myOSystem.console().getFramerate(), info.DisplayFormat.c_str()); - myStatsMsg.surface->fillRect(0, 0, myStatsMsg.w, myStatsMsg.h, kBGColor); - myStatsMsg.surface->drawString(infoFont(), - msg, 1, 1, myStatsMsg.w, myStatsMsg.color, TextAlign::Left); - myStatsMsg.surface->drawString(infoFont(), - info.BankSwitch, 1, 15, myStatsMsg.w, myStatsMsg.color, TextAlign::Left); + myStatsMsg.surface->invalidate(); + // draw shadowed text + myStatsMsg.surface->drawString(infoFont(), msg, 1 + 1, 1 + 0, + myStatsMsg.w, kBGColor); + myStatsMsg.surface->drawString(infoFont(), msg, 1 + 0, 1 + 1, + myStatsMsg.w, kBGColor); + myStatsMsg.surface->drawString(infoFont(), msg, 1 + 1, 1 + 1, + myStatsMsg.w, kBGColor); + myStatsMsg.surface->drawString(infoFont(), msg, 1, 1, + myStatsMsg.w, myStatsMsg.color); + myStatsMsg.surface->drawString(infoFont(), info.BankSwitch, 1 + 1, 15 + 0, + myStatsMsg.w, kBGColor); + myStatsMsg.surface->drawString(infoFont(), info.BankSwitch, 1 + 0, 15 + 1, + myStatsMsg.w, kBGColor); + myStatsMsg.surface->drawString(infoFont(), info.BankSwitch, 1 + 1, 15 + 1, + myStatsMsg.w, kBGColor); + myStatsMsg.surface->drawString(infoFont(), info.BankSwitch, 1, 15, + myStatsMsg.w, myStatsMsg.color); myStatsMsg.surface->setDirty(); myStatsMsg.surface->setDstPos(myImageRect.x() + 1, myImageRect.y() + 1); myStatsMsg.surface->render(); From b22c292f3c1f55931d61bae6629f3cad651f48b6 Mon Sep 17 00:00:00 2001 From: thrust26 Date: Mon, 15 Jan 2018 20:25:28 +0100 Subject: [PATCH 156/156] developer/player settings added to frame stats overlay --- src/common/FrameBufferSDL2.cxx | 8 ++++++++ src/common/FrameBufferSDL2.hxx | 8 +++++--- src/emucore/Console.cxx | 3 ++- src/emucore/FrameBuffer.cxx | 10 ++++++---- src/emucore/FrameBuffer.hxx | 14 +++++++++++--- 5 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/common/FrameBufferSDL2.cxx b/src/common/FrameBufferSDL2.cxx index 76d6ece46..d9338eeb9 100644 --- a/src/common/FrameBufferSDL2.cxx +++ b/src/common/FrameBufferSDL2.cxx @@ -235,6 +235,14 @@ bool FrameBufferSDL2::setVideoMode(const string& title, const VideoMode& mode) return true; } +void FrameBufferSDL2::setTitle(const string& title) +{ + myScreenTitle = title; + + if(myWindow) + SDL_SetWindowTitle(myWindow, title.c_str()); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - string FrameBufferSDL2::about() const { diff --git a/src/common/FrameBufferSDL2.hxx b/src/common/FrameBufferSDL2.hxx index cf134e96e..3944849ce 100644 --- a/src/common/FrameBufferSDL2.hxx +++ b/src/common/FrameBufferSDL2.hxx @@ -46,11 +46,13 @@ class FrameBufferSDL2 : public FrameBuffer ////////////////////////////////////////////////////////////////////// // The following are derived from public methods in FrameBuffer.hxx ////////////////////////////////////////////////////////////////////// + /** - Toggles the use of grabmouse (only has effect in emulation mode). - The method changes the 'grabmouse' setting and saves it. + Updates window title + + @param title The title of the application / window */ - void toggleGrabMouse(); + void setTitle(const string& title); /** Shows or hides the cursor based on the given boolean value. diff --git a/src/emucore/Console.cxx b/src/emucore/Console.cxx index 16f122693..d9e6ab65b 100644 --- a/src/emucore/Console.cxx +++ b/src/emucore/Console.cxx @@ -531,6 +531,7 @@ FBInitStatus Console::initializeVideo(bool full) if(full) { + bool devSettings = myOSystem.settings().getBool("dev.settings"); const string& title = string("Stella ") + STELLA_VERSION + ": \"" + myProperties.get(Cartridge_Name) + "\""; fbstatus = myOSystem.frameBuffer().createDisplay(title, @@ -539,7 +540,7 @@ FBInitStatus Console::initializeVideo(bool full) return fbstatus; myOSystem.frameBuffer().showFrameStats( - myOSystem.settings().getBool(myOSystem.settings().getBool("dev.settings") ? "dev.stats" : "plr.stats")); + myOSystem.settings().getBool(devSettings ? "dev.stats" : "plr.stats")); generateColorLossPalette(); } setPalette(myOSystem.settings().getString("palette")); diff --git a/src/emucore/FrameBuffer.cxx b/src/emucore/FrameBuffer.cxx index 4ffa1b2f4..456175997 100644 --- a/src/emucore/FrameBuffer.cxx +++ b/src/emucore/FrameBuffer.cxx @@ -292,6 +292,8 @@ void FrameBuffer::update() myOSystem.console().tia().scanlinesLastFrame(), myOSystem.console().getFramerate(), info.DisplayFormat.c_str()); myStatsMsg.surface->invalidate(); + string bsinfo = info.BankSwitch + + (myOSystem.settings().getBool("dev.settings") ? "| Developer" : "| Player"); // draw shadowed text myStatsMsg.surface->drawString(infoFont(), msg, 1 + 1, 1 + 0, myStatsMsg.w, kBGColor); @@ -301,13 +303,13 @@ void FrameBuffer::update() myStatsMsg.w, kBGColor); myStatsMsg.surface->drawString(infoFont(), msg, 1, 1, myStatsMsg.w, myStatsMsg.color); - myStatsMsg.surface->drawString(infoFont(), info.BankSwitch, 1 + 1, 15 + 0, + myStatsMsg.surface->drawString(infoFont(), bsinfo, 1 + 1, 15 + 0, myStatsMsg.w, kBGColor); - myStatsMsg.surface->drawString(infoFont(), info.BankSwitch, 1 + 0, 15 + 1, + myStatsMsg.surface->drawString(infoFont(), bsinfo, 1 + 0, 15 + 1, myStatsMsg.w, kBGColor); - myStatsMsg.surface->drawString(infoFont(), info.BankSwitch, 1 + 1, 15 + 1, + myStatsMsg.surface->drawString(infoFont(), bsinfo, 1 + 1, 15 + 1, myStatsMsg.w, kBGColor); - myStatsMsg.surface->drawString(infoFont(), info.BankSwitch, 1, 15, + myStatsMsg.surface->drawString(infoFont(), bsinfo, 1, 15, myStatsMsg.w, myStatsMsg.color); myStatsMsg.surface->setDirty(); myStatsMsg.surface->setDstPos(myImageRect.x() + 1, myImageRect.y() + 1); diff --git a/src/emucore/FrameBuffer.hxx b/src/emucore/FrameBuffer.hxx index da1f984e4..975ecbf4e 100644 --- a/src/emucore/FrameBuffer.hxx +++ b/src/emucore/FrameBuffer.hxx @@ -268,6 +268,13 @@ class FrameBuffer // implemented in derived classes. ////////////////////////////////////////////////////////////////////// public: + /** + Updates window title + + @param title The title of the application / window + */ + virtual void setTitle(const string& title) = 0; + /** Shows or hides the cursor based on the given boolean value. */ @@ -446,6 +453,10 @@ class FrameBuffer int myIdx; }; + protected: + // Title of the main window/screen + string myScreenTitle; + private: // Indicates the number of times the framebuffer was initialized uInt32 myInitializedCount; @@ -460,9 +471,6 @@ class FrameBuffer // Dimensions of the main window (not always the same as the image) GUI::Size myScreenSize; - // Title of the main window/screen - string myScreenTitle; - // Maximum dimensions of the desktop area GUI::Size myDesktopSize;