Hello, Guest the thread was called154k times and contains 1425 replays

last post from drazil at the

Heute so gecodet...

  • Nach diversen Umbauarbeiten am Code habe ich endlich mal wieder was neues in den Disassembler reinbekommen. :puhh:



    Rechts neben der Disassemblerausgabe ist die Darstellung des Programmes im CPC Zeichensatz zu sehen.

  • Jetzt kann mit mit der Maus über den Bereich fahren und bekommt weitere Infos angezeigt. :)



    Die Maus steht über dem roten Buchstaben G und die angezeigten Werte stimmen mit der Position im Zeichensatz überein.

  • Mal wider zig Sachen repariert, die ich im Alles-Umschreiben-Wahn der letzten 2 Wochen am C64Studio kaputt gemacht hatte.

    Es macht Sinn dies ab und zu durchzuführen. Ich habe dies bezüglich noch einiges vor mir und werde demnächst komplett auf Option Strict On wechseln.

    Normalerweise habe ich beim Option Strict On nicht viele Fehler gehabt. Aber im letzten Jahr als ich ein DSK Image auflesen wollte habe ich wohl so viel

    Mist geschrieben das ich bald dauerhaft auf Option Strict On wechseln werde. Vermutlich klappt dann auch das Auslesen vom DSK sauber. :whistling:


    Was ist Option Strict On?

  • Wohl eher "heute so gemerged", aber ich habe gerade cc1541 V3.3 released, das Disk Images für Krill's 50fach Transwarp Loader schreiben kann. Mein Beitrag war aber eher am Rande, die ganze Arbeit hatte eigentlich Krill ^^.

  • Eine multithreading engine fuer VirtualBoy damit die Raketen auch fliegen 'wenn keiner zusieht' ;-)

    Mit sowas hab ich mich auch mal befasst, ist aber lange her. Ein threadsicheres Flag ist dabei herausgekommen, und die sehr späte Erkenntnis, dass BRK nicht verlässlich ist.

  • die sehr späte Erkenntnis, dass BRK nicht verlässlich ist

    Meinst du, wenn gleichzeitig ein IRQ auftritt?

    Ja, auch, in dem Fall fällt der BRK wohl unter den Tisch.

    Zusätzlich habe ich noch einen Bug gemacht: Es ist ein BRK passiert, wenn weder VIC noch CIA-IRQ anliegen. Aber das ist falsch, die IRQs können ja auch in der Zeit zwischen BRK und dem Check in der IRQ-Routine gekommen sein.


    Der Scheduler war in der IRQ-Routine und hat auch auf Floppy-Status geprüft und einen Thread zum Laden eines Sektors aktiviert. Und wenn ein Thread nichts zu tun hatte, dann hat er sich mit BRK beendet. Es dauerte ein paar Sekunden, aber irgendwann kam die Situation, in der BRK nicht erkannt oder nicht ausgeführt wurde, und dann wurde es übel...


    Ich denke, ein threadsicheres Flag "Scheduler läuft" und ein JSR zum Scheduler sollten das Problem lösen, aber ch kann mich einfach nicht mehr zum Programmieren aufraffen.

  • Ich hatte vor einen knappen Jahr damit begonnen einen modernen Debugger für WinUAE zu schreiben. Als ich überlegt habe wie ich das am Besten angehe, habe ich festgestellt dass ich das schön teilen kann in das Frontend dass der User sieht und den technischen Teil der z.B. im WinUAE enthalten ist. Dadurch bin ich dann auf die Idee gekommen dass man den nicht nur für den WinUAE verwenden kann, sondern für beliebige Targets. Als Ziel habe ich mir vorgestellt auch Vice und GDB zu unterstützen und natürlich würde ich auch gerne den MEGA65 dann ebenfalls einbauen. Ja, sehr ambitioniert, aber da das ganze quasi mit Plugins funktioniert, ist es vergleichsweise einfach ein neues Target dazu zu nehmen.


    Ursprünglich angedacht hatte ich das einfach mit MFC zu implementieren, da bei einem Visual Studio ein Beispielprojekt vorhanden ist dass schon eine komplette IDE erzeugt. Super! Ich dachte natürlich "Geil! Da brauch ich ja nur noch die Komonenten befüllen und das geht dann recht fix." Ja, denkste. So einfach war es dann doch nicht und portierbar ist es auch nicht. Als habe ich ich umgeschaut und bemerkt dass wxWidgets mittlerweile dockable Windows unterstützt. "Super! ENDLICH! Darauf habe ich schon jahrelang gewartet!". Also habe ich begonnen das Grundgerüst der IDE zu entwickleln und die ersten Interfaces zu WinUAE zu immplementieren. Das klappt ja auch schon, zumindest einen Speicherdump kann ich damit schon anzeigen. Bevor ich aber zuviel an den Details arbeite, wollte ich erstmal die grundlegenden GUI Elemente fertig haben. Bei einer modernen IDE heisst das dass der User die Windows frei arrangieren kann (eben docken wo er will) und dass die IDE diesen Zustand auch speichert und wieder herstellt nach einem Neustart. Tja! Und da war es dann zu Ende. Die Tolle docking Funktionalität von wxWidgets hat zwar Funktionen mit denen das geht, aber die sind so fehlerhaft dass man sie nicht so flexibel verwenden kann wie gedacht. Na, gut. wxWidgets ist ja OpenSource, also fixe ich die eben mal. Nachdem ich mich dann wochenlang in den (schlimmen) Code eingearbeitet hatte, musste ich festellen, diese Funktionen haben ein grundsätzliches Designproblem, und können das gar nicht leisten was sie sollen. Sehr ärgerlich, weil ich ja eigentlich nicht an wxWidgets arbeiten wollte, sondern an meinem Debuggerprojekt.

    Auf Grund der Arbeit diesem Code habe ich dann überlegt wie man sowas von Grund auf implementieren könnte und habe festgestellt dass das nicht so schwer ist wie gedacht. Also habe ich damit angefangen meine eigenen docking Library zu schreiben. Irgendwann ging mir dann die Luft aus weil ich mich in ein Problem verrant hatte und keine vernünftige Lösung gefunden habe. Mittlerweile wurde es dann auch Sommer und ich hatte auch keine grosse Lust daran weiter zu arbeiten.


    Jetzt habe ich mir das Teil wieder vorgenommen und auf Grund der langen Pause musste ich mich wieder reindenken. Das Schöne daran ist, dass ich jetzt eine Lösung gefunden habe die sehr elegant funktioniert, weil ich durch die lange Pause den Kopf frei hatte. Manchmal hilft also so eine Pause weil man dann wieder unvoreingenommen an das Problem rangehen kann. :)

    Auf jeden Fall bin ich jetzt zumindest schon in der Lage die Fenster per API in jedes beliebige Layout zu bringen, was ja eben mit wxWidgets nicht so einfach ging und damit ist jetzt endlich diese Hürde genommen. :D

  • Manchmal hilft also so eine Pause weil man dann wieder unvoreingenommen an das Problem rangehen kann.

    Definitiv! Bei meinen Assemblerprojekten bremse ich mich immer, wenn ich mich länger als ein, zwei Stunden an einem Problem festbeiße und schlafe ein, zwei Nächte darüber. Meist fällt mir dann eine völlig andere und viel einfachere Lösung ein.

  • Definitiv! Bei meinen Assemblerprojekten bremse ich mich immer, wenn ich mich länger als ein, zwei Stunden an einem Problem festbeiße und schlafe ein, zwei Nächte darüber. Meist fällt mir dann eine völlig andere und viel einfachere Lösung ein.

    ja, war hier auch wieder so. :) Ich hatte mich in einen Ansatz verbissen der viel zu kompliziert war und sowieso nicht richtig funktioniert hat. Ich habe da tagelangen dran rumgewurschtelt bis ich genug hatte. Jetzt habe ich in Ruhe nochmal nachgedacht was ich eigentlich genau will und was der User an der Stelle als Ergebniss erwarte und plltzlich sind alle Probleme weg gewesen. Mit der jetzigen Lösung erledigen sich diese ganzen Sonderfälle, die ich berücksichtigen wollte, einfach von selbst. :)

  • Neben meinem Retro Debuggerprojekt arbeite ich ja auch parallel dazu noch immer an meinem C128 Projekt. Die Funktionen die ich da schreibe, sollen angeblich ja auch ohne grosse Änderung am MEGA65 laufen, also werde ich das dann auch portieren wenn ich fertig bin. :)

    Vor einigen Tagen hatte ich ja dieses Programm für den C128 geschrieben, mit dem ich die Tasten über die CIA Ports abfragen kann. Das funktioniert ja auch am C64 ohne Änderung. Das Tool hatte ich eigentlich mehr so als Übung geschrieben um endlich mal ein komplettes Programm fertiggestellt zu haben. Als ich das geschrieben habe, ging es mir hauptsächlich darum dass ich wissen wollte wie man die Tastatur ohne Kernel abfragt. Was ich dabei nicht gedacht hätte ist, als wie nützlich sich das herausgestellt hat. :D Wenn ich Tasten abfragen will muss ich mir die mühsam aus irgendwelchen Tabellen in Büchern raussuchen. Jetzt kann ich einfach das Tool schnell mal laden, drücke die Tasten und sehe sofort in welcher Matrixzeile das liegt und welchen Tastencode die gesuchte Taste hat. Und als positiver Nebeneffekt kann ich damit auch ganz leicht die Tastenbelegungen im Emulator ermitteln, wenn ich nicht weiss wo eine bestimmte Taste hingemappt ist. :D


    Das sich das als so nützlich herausstellt hätte ich echt nicht gedacht, denn jetzt verwende ich das eigentlich fast täglich mehrmals. :D

  • Mit meinem Docking komme ich nur in homeopathischen Dosen weiter. Dafür komme ich aber mit meinem C128 Projektrecht gut voran. Ich habe jetzt gestern eine Inputroutine fertiggestellt, auf der Basis des Codes den ich geschrieben habe um Tasten abzufragen. Damit habe ich jetzt ein paar flexible Funktionen mit denen ich alle Usecases abdecken kann. :) Mehrere Tasten abfragen für ein Spiel, einzelne Tasten abfragen, oder auch Tastatur mit Repeatfunktion abfragen wie man sie halt für eine Bildschirmeingabe braucht. Und jetzt auch eine Inputroutine mit der man Texte eingeben kann und bei der man auch flexibel Tasten filtern kann, so dass man z.B. nur Zahlen eingeben kann, oder nur Hex oder was auch immer man genau braucht. :)


    Das Schöne daran ist, dass diese Funktionen alle systemunabhängig sind. Daher funktionieren die genauso auch auf dem C64 oder dann auch auf dem MEGA65. Wenn ich also mit dem C128 Projekt fertig bin kann (und werde) ich das dann auch auf den MEGA65 mit relativ wenig Aufwand portieren. :D Die eigentliche Tastaturabfrage braucht nur minimalste Änderungen die vermutlich nur einen Parameter ändern müssen. Die anderen Funktionen bauen darauf auf und sollten dann auch ohen Änderungen funktioneren.

  • Hab heute an meinem Beitrag zum Weihnachts Basic Heft gearbeitet. Ist jetzt zu 50 Prozent fertig :-)

  • Heute Nachmittag mal schnell was in Basic zusammengezimmert und mit MOSpeed compiliert.


    Das ist ein Test für ein Match3 Game.


    Das Ganze wird später in Assembler geschrieben, aber um erstmal zu sehen, wie es funktionieren könnte, war Basic erstmal ganz hilfreich...

  • Nochmal nen Stündchen zur Entspannung weitergemacht.


    Steuerung wasd, mit Shift-wasd werden Symbole verschoben.


    Schon über 200 Zeilen in Basic... So langsam wirds komplex.


    Da Basic, leider noch langsam, aber wenn es mal soweit wie gedacht kommen sollte, wirds besser. Mit dem Warp Modus im Vice wird’s erträglich :D


    Kurze Erläuterung:

    Drei gleiche in einer Reihe (horizontal/vertikal) verschwinden. Bestimmte Kombinationen ergeben Sondersymbole (die aber momentan noch ohne Funktion sind).