Posts by Kosmas

    Du kannst gerne nochmal ein Diskimage ablegen. Mit dem TSB kenne ich mich nicht aus - das wird sich wohl nicht mit den WIC Routinen vertragen, zumindest nicht ohne Anpassungen? Dann könnte sich Dein Programm erstmal die korrekte Uhrzeit holen.

    Ich hab mir auch mal eine "andere" Uhr einfallen lassen. Ist so ein Mitteldung zwischen Uhr mit Zahlen und Uhr mit gruppierter Anzeige. Hier mal zwei Screenshots:

    Diese Uhr wollte ich gerade mal ausprobieren, aber das Ladeprogramm aus dem Diskimage stürzt mit ?file not found error in 150 ab. Konfiguration ist das U64 mit Jiffydos. Gibt es damit Probleme?


    Edit: Scheint mit dem Original Kernal zu funktionieren. Dauert nur ewig beim Laden. ;-)

    Nabend,


    ich habe eine neue Version der Binäruhr. Der User goloMAK war so nett, mir ein kleines Maschinenprogramm zu schreiben, das einen rechteckigen Bereich einfärbt. Das MP liegt im Kassettenpuffer und verträgt sich so mit den WIC-Routinen. Näheres dazu hier:

    Hilfsroutinen in Assembler / Maschinensprache


    Die Binäruhr kommt jetzt ohne Strings aus und startet auch schön schnell. Natürlich könnte man diese Uhr auch gleich in Assembler schreiben... :-)


    Wenn ihr möchtet, könnt ihr die Uhr (und auch die Berliner) gerne in die Filebase aufnehmen.

    Nein, wenn schon umbenennen, dann in Höhe.


    Die Routine funktioniert jedenfalls, und ob die Farbe jetzt neu geladen wird, im y-Register oder mit Push/Pull gespeichert wird, ist hier eher unerheblich.


    Ich kann nur sagen: wenn ich das in Assembler probiert hätte, wäre es viel komplizierter geworden. Die Multiplikation *40 hätte ich wohl gleich mit 2 Bytes realisiert, braucht man hier aber nicht. Die Doppelschleife mit den x- und y-Registern hätte ich so elegant nicht hinbekommen.


    Wenn man noch optimieren möchte, könnte man im Init-Teil in Zeile 47 das Initialisieren von pokead weglassen (die Zeile 48 ist dagegen notwendig), denn der Wert wird in Zeile 58 mit sta pokead sowieso überschrieben.

    Schade! Aber eines sollte man nicht vergessen: Das Suchen nach Fertiglösungen, die gerade zufällig genau zu dem passen, was man haben will, kann ebenfalls sehr zeitraubend sein. Und wirklich lernen tut man nichts dabei.

    Das ist mir klar, ich bin keine 15 mehr. Selbst wenn Du die Ziffern umdrehst, kommt das nicht mehr hin. ;-) Der Zeit- und Nutzenfaktor spielt die große Rolle (s.o.).

    Habe jetzt aber mal eine kleine Routine für dein farbiges Rechteck geschrieben.

    Vielen Dank! Ich werde es testen, aber es wird etwas dauern, bis ich es testen kann. Da ich das C64Studio ebenfalls nutze, habe ich jetzt mal ein gutes Beispiel, um damit weiter einzusteigen. Dann lerne ich doch noch etwas.

    Danke, das ist eine gute Idee!

    Da hilft nur eins: Ran an den Speck!

    Danke für die Hinweise, aber das Können oder Wollen ist nicht das Problem. Im Prinzip wüsste ich schon, wie man das machen müsste. Auch das Programmieren einer Multiplikation über Shift und Addieren ist mir geläufig. Aber das Programmieren in Assembler ist für mich ganz einfach eine Frage von Aufwand und Nutzen. Bis ich weiß, welche Befehle es in Assembler gibt, und wie man die benutzt, da vergeht sehr viel Zeit. Und die habe ich gerade nicht. Wenn ich ab heute wüsste, dass ich die nächsten Jahre ganz viel Assembler programmiern würde, dann würde es sich lohnen, sich damit weiter zu vertiefen.


    Trotzdem Danke für Deinen Code, immer wieder faszinierend zu sehen, wie das manche aus dem Ärmel schütteln. :-)

    Hallo zusammen,


    da ich über die Suche nichts gefunden habe: gibt es vielleicht eine Stelle, wo man Hilfsroutinen in Assembler findet, die man in eigene Basic-Programme einbinden kann?


    Hintergrund: Leider übersteigt das Programmieren in 6502-Assembler meine Fähigkeiten, bzw. ich würde viel zu lange brauchen, um mich da reinzuarbeiten. Daher suche ich immer wieder mal Codebeispiele, die ich weiterverwenden kann.


    Im konkreten Fall brauche ich eine Routine, die auf dem C64 im Textbildschirm ein Rechteck einfärbt, und die man z.B. mit sys adr,x,y,width,depth,col aufrufen kann. Es muss nur ins Farbram geschrieben werden. So etwas in der Art gibt es bestimmt schon, aber gefunden habe ich bisher nichts.

    Vielleicht mal durch einen der vielen Basic-Compiler jagen?

    Allerdings kenne ich mich mit Basic-Compilern auf dem 64er auch nicht gut aus.

    Ich habs mal mit MOSpeed ausprobiert. Der optimiert aber so viel heraus, dass das Maschinenprogramm von Yps nicht richtig geladen wird, und das Programm stürzt ab. Die reine Uhr läuft damit vernünftig schnell, man müsste nur das MP in alt hergebrachte Data-Zeilen packen.

    Mit POKE ist das echt zu langsam?

    Habe ich ehrlich gesagt gar nicht probiert, weil pro "Lampe" 4x4-Felder umgefärbt werden müssen, und das bei 6 Stück in einer Zeile entsprechend dauert. Könnte ich aber machen, und vielleicht kann man ein einfaches MP schreiben, was an einer beliebigen Bildschirmstelle ein 4x4 Feld in einer Farbe ändert. Aufrufbar am besten mit sys adr,x,y,width,depth,col oder so.

    Die Binär-Uhr gefällt mir persönlich viel besser als die Berlin-Uhr. Ist einfach viel logischer.

    Ja, aber viel schwerer ablesbar, oder hast Du die Binärmuster alle im Kopf? Bei der Berliner Uhr sieht man immerhin sehr schnell, wo sich die Zeit innerhalb einer Stunde befindet, weil der Balken mit den 11 Leuchten das einem ganz schnell sagt.

    Oder PRINTest du alles immer neu? -> Dann mal das GePOKE probieren.

    Werde ich probieren - leider ist ab heute die Zeit wieder so knapp, dass ich erstmal nicht dazu komme. :-(

    Das mit der Binäruhr in Basic ist gar nicht so einfach. Eine erste Version habe ich mal zusammengebaut, aber zufrieden bin ich damit nicht. Es muss jede Sekunde einiges auf dem Bildschirm aktualisiert werden. Die Felder einzeln ein- und auszuschalten dauert viel zu lange. Das einzige, was mir einfiel, ist, die einzelnen Zustände der Zeiten in Strings abzulegen, damit die Zahlen von 0 bis 59 schnell in Zeilen als Binärmuster ausgegeben werden können. Dummerweise dauert das Zusammenbauen dieser Strings eine gefühlte Ewigkeit, was schonmal das erste Problem ist. Das zweite Problem: Jede Zeile hat eine andere Farbe, also müssen 3x 60 Strings aufgebaut werden. Das dauert nicht nur lange, auch die Garbage Collection schlägt immer wieder mal zu. Dann bleibt die Uhr mal für ein paar Sekunden stehen.


    Das ganze geht in Assembler bestimmt sehr flott, übersteigt aber meine Fähigkeiten. Vielleicht hat jemand noch eine Idee, wie man das in Basic schneller umsetzen kann, dann freue ich mich über eine Rückmeldung.


    Dies ist also erstmal eine Art Machbarkeitsstudie. Beim Starten dauert es eine Minute, bis die Strings erstellt sind.


    Ach ja, oben sind die Stunden, in der Mitte die Minuten und unten natürlich die Sekunden. Wie bei Binärzahlen ist das niederwertigste Bit rechts. Der Aufbau ist also nicht so wie im Mathematikum, nur das Farbschema habe ich übernommen. Die Stunden würden das ganz linke Bit für 32 natürlich nicht benötigen, mir gefällt aber der Aufbau so besser.


    wic64-bin-v0.prg


    Auf dem Bild war es gerade 21:26:10.

    Da die Uhr in Basic geschrieben ist, spricht nichts dagegen, einen SID Player im Hintergrund laufen zu lassen. Man müsste nur gucken, dass sich die WIC-Routinen und das Abspielprogramm nicht den gleichen Speicherplatz streitig machen.


    Als Bildschirmschoner würde es bestimmt auch gehen, aber die Uhr würde nicht sanft über den Bildschirm schweben, sie könnte nur an einer anderen Stelle gezeichnet werden. Da sie sehr groß ist, hat man aber nicht viel Bewegungsspielraum. Bei der Berliner Uhr habe ich das schon maximal auf den Bildschirm ausgedehnt, da könnte ich die Anzeige nur nach links oder rechts wandern lassen. Das ist vielleicht nicht so sinnvoll.

    Du kannst Dir aber damit behelfen, dass du das ESP mit einem externen USB Netzteil betreibst.

    Ist das dieser Micro-USB-Anschluss auf dem ESP-Modul?

    Genau. Bitte auch den Post von GMP beachten! Die meisten Module scheinen mit 0 Ohm statt der Diode bestückt zu sein.

    Die schlechte Nachricht ist: es funktioniert nicht an meinem U64 (nur die rote Lampe leuchtet). Ich vermute, ich habe die Charge Userportstecker, wo der 9V-Anschluss fehlt. War ja ursprünglich nur für den 4-Player-Adapter geplant...wozu bräuchte ich da denn jemals 9V, hab ich mir wohl gedacht... ;( Kann man die beiden Versionen (mit & ohne 9V) optisch voneinander unterscheiden?

    Bei meinem Adapter steht unten "9V AC OK" drauf. Die neuen haben meines Wissens immer 9V. Du kannst Dir aber damit behelfen, dass du das ESP mit einem externen USB Netzteil betreibst. Sobald das Ding Strom bekommt, zeigt es dann auch die IP-Adresse (bzw. 0.0.0.0 beim ersten Mal) an.


    P.S.: Mist, deins ist ja verschraubt, da kommst Du nicht so einfach dran!

    Und das Schlimmste: Meine Kinder haben meine Gummibärchen weggefressen! :cry:

    Kenn ich. Das nächste Mal schneller sein. :-)

    Danke für die Erklärung. Trotzdem bleiben bei mir Fragen offen, denn mir ist nicht klar, warum die Zeile

    Code
    1. B$=A$

    was anderes macht als

    Code
    1. B$=A$+""

    denn es erfolgt eine Zuweisung an den String B$. Warum ist die Behandlung in Basic anders, das Ergebnis ist doch vom Inhalt des Strings gesehen das gleiche? Dass sich die Zeilen unterschiedlich verhalten, sieht man, wenn man das Basic Programm stark kürzt und mit fre(0) den freien Speicher abfragt. Der ist dann in der zweiten Variante kleiner.


    Was ist der Grund dafür im Basic-Interpreter? Und vor allem: wie bist Du darauf gekommen, diesen Effekt auszunutzen? Und woher weiß eigentlich Dein Maschinenprogramm, wo denn der richtige Speicher für den zusammengesetzten String anfängt?

    So tief gehen meine Basic-Kenntnisse nicht. Über die Stelle bin ich gestolpert, v.a. habe ich mich gefragt, warum denn noch ein Leerstring angehängt wird.


    Über eine Auflösung bin ich jedenfalls gespannt.

    Diese Zeile habe ich auch nicht verstanden. Da werden alle Zeilen übersprungen, bis das XX kommt. Danach werden nochmal 2 Strings gelesen, die offenbar das Maschinenprogramm enthalten, das die ersten Data-Zeilen von 10 -21 einliest und umsetzt, oder?


    Egal, ich habe die Zeilen bis 190 einfach in meiner Berliner Uhr übernommen und alles funktioniert. :-)


    Gerade muss ein Mod einige Einträge verschoben haben. Ich bezog mich hierauf:

    Der Kniff liegt in Zeile 50


    Vielleicht kommt ja jetzt jemand drauf...