Tobonocom's Retro Journal
Tobonocom's Retro Journal
  • 12
  • 4 679
C64 | Praktische Programmierung | Nr.1 - Anfängerfehler mit dem RAM
Eine der wirklich tollen Möglichkeiten bei der Programmierung des C64 ist es mit relativ wenig Aufwand in beinahe jede Speicherstelle des C64- Speicher direkt hineinzuschreiben und/oder sie auszulesen. Aber besonders beim Schreiben ist Vorsicht geboten. Wie man es nicht machen sollte seht ihr in diesem Video.
#commodore64
มุมมอง: 4 526

วีดีโอ

C64 | Basic | Befehle | RND
มุมมอง 15521 ชั่วโมงที่ผ่านมา
Zufall auf einem deterministischen System? Geht das überhaupt? Nun, das kommt darauf an wie man Zufall definiert. Was auf dem C64 mit dem eingebauten Basic-interpreter in Sachen Zufall möglich ist wollen wir in diesem Video ergründen. #commodore64
C64 | Basic | Peek & Poke | Sprites - Teil 1
มุมมอง 246หลายเดือนก่อน
Die Sprites gehören definitiv zu den wichtigsten und interessantesten Grafikobjekten die der C64 zu bieten hat. Kein Spiel das etwas auf sich hält kommt ohne sie aus. Aber was sind Sprites eigentlich? Und wie werden sie benutzt, bzw wie kann man sie (unter Basic) realisieren? Wir gehen dieser Frage in diesem Video nach, erstellen mit Hilfe des bekannten Befehls POKE eigene Sprites und stellen s...
C64 | Basic | Befehle | VAL
มุมมอง 414หลายเดือนก่อน
In dieser Folge nehmen wir den Befehl VAL unter die Lupe. Wie funktioniert dieser Befehl und was passiert wenn wir dem Befehl diverse Zeichen(-ketten) zur Verarbeitung geben. Das von mir verwendete Beispiel-Listing aus der deutschen C64-Wiki findet ihr hier: www.c64-wiki.de/wiki/ON #commodore64
C64 | Basic | Befehle | TI und TI$
มุมมอง 188หลายเดือนก่อน
Eigentlich sind TI und TI$ keine Befehle sondern s.g. Systtemvariablen in denen der C64 Zeitwerte speichert. Wir schauen uns diese Variablen an und finden heraus wofür man diese nutzen kann. Als Code-Beispiel realisieren wir eine Uhr auf dem C64. #commodore64
C64 | Basic | Befehle | RIGHT$ und LEFT$
มุมมอง 164หลายเดือนก่อน
Wie lernen die Funktion zweier wichtiger Befehle zur Zeichenkettenmanipulation kennen und lösen eine Problemstellung mithilfe von RIGHT$, LEFT$, MID$ und LEN. #commodore64
C64 | Basic | Befehle | MID$ und LEN
มุมมอง 264หลายเดือนก่อน
Ihr wollt wissen wie man mit dem C64 Basic-Interpreter Zeichenketten untersucht, teilt und anders manipuliert? In diesem Video schauen wir uns das genauer an. #commodore64
C64 | Basic | Befehle | READ, DATA, RESTORE
มุมมอง 3182 หลายเดือนก่อน
Wir schauen uns die Befehle READ, DATA und RESTORE an und finden heraus wie sie funktionieren und zusammenarbeiten. #commodore64
C64 | Basic | Peek & Poke (55296-56295)
มุมมอง 2942 หลายเดือนก่อน
Video Nr. 3 aus der Reihe "Peek & Poke". Darin schauen wir uns den Adressbereich des Farb-RAMs des C64 genauer an. #commodore64
C64 | Basic | Peek & Poke (1024-2023)
มุมมอง 4742 หลายเดือนก่อน
In dem zweiten Video der Reihe beschäftigen wir uns mit den Speicherbereich 1024-2023, dem s.g. Bildschirmspeicher des C64. #commodore64
C64 | Basic | Peek & Poke (53280/53281)
มุมมอง 1282 หลายเดือนก่อน
Das erste Video der Reihe Peek & Poke in der wir uns mit diesen beiden Basic-Befehlen und deren Verwendung mit den diversen Speicheradressen des C64 beschäftigen. #commodore64
Willkommen beim Retro-Journal
มุมมอง 842 หลายเดือนก่อน
Jetzt geht es endlich los. Ich stelle mich und den Kanal vor.

ความคิดเห็น

  • @edvss
    @edvss 4 ชั่วโมงที่ผ่านมา

    Hallo Thomas, ich finde es großartig, dass du dich entschieden hast, einen Kanal zum Thema Retro Computing zu starten - besonders mit dem Fokus auf BASIC und den C64. Das ist wirklich eine fantastische Idee! Meine erste Begegnung mit dem C64 hatte ich 1989, und wie bei dir hat dieser Computer meinen Lebensweg nachhaltig geprägt. Ich habe mir damals viel zur Programmierung selbst beigebracht. Leider ging das Interesse mit dem Wechsel auf den Amiga und später auf MS-DOS-PCs etwas verloren. Dennoch hat der C64 die Basis für meine Leidenschaft zur IT gelegt, die heute auch mein Beruf ist. Vor ein paar Jahren habe ich mir ein komplettes C64-Set (inklusive Floppy Disk Laufwerk und Datasette) zugelegt. Aktuell schlummert das gute Stück zwar noch gut verpackt im Lager, aber vielleicht inspiriert mich dein Kanal, es wieder auszupacken und meine alte Leidenschaft neu zu entflammen. Vielen Dank für deine Mühe und den Content, den du hier teilst. Ich freue mich schon auf viele spannende Videos! Beste Grüße Jens

  • @denismatt1752
    @denismatt1752 4 ชั่วโมงที่ผ่านมา

    Runden kann man so: Ergenbis=INT(Startwert+0,5). So wird alles was ,5 und höher ist aufgerundet und alles darunter abgerundet. Nicht beim Würfel natürlich.

  • @denismatt1752
    @denismatt1752 4 ชั่วโมงที่ผ่านมา

    15:34 Was ich mir damals immer gewünscht hätte, war ein Zufallsgenerator dem man mithilfe eines Parameters sagen kann wie stark er schwanken darf. Wenn er ganz moderat eingestellt wär, würde er bei Zahlen von 1 bis 100 nach 100 Abfragen jede Zahl genau einmal gebracht haben. Wenn er hingegen "wild" eingestellt ist, bringt er zB eine Zahl sechsmal und andere gar nicht. Das wäre gut um Spiele zu programmieren, zB bei Tetris bringt er ja am Anfang eine gut ausgewogene Auswahl und später dann immer mehr gleiche nacheinander.

    • @Tobonocom
      @Tobonocom ชั่วโมงที่ผ่านมา

      Hm. Mir ist jetzt kein Weg bekannt die Zufälligkeit zu begrenzen, aber was Du machen kannst ist die Zufallswerte einfach neu zu generieren, wenn eine Zufallszahl in der Reihe schon vorkam. Also nehmen wir an wir wollen in der Reihe von 1 bis 100 jede ganze Zahl genau einmal in zufälliger Reihenfolge haben. Ein Weg wäre, dass der Rechner sich einfach merkt, welche Zahl er schon erzeugt hat. Sollte das Ergebnis der Zufallsrechnung eine Zahl sein die schon vorkam, wird sie einfach verworfen und eine neue erstellt. Solange bis alle Zahlen einmal vorgekommen sind. Der Nachteil an dieser Methode ist, dass die Erzeugung von neuen Zufallszahlen immer länger dauert je mehr Zahlen schon generiert wurden. Zumindest auf dem C64 würde sich das unangenehm bemerkbar machen. Auf einem modernen System wahrscheinlich nicht. Ich vermutet aber auf einem modernen System gäbe es für so eine Aufgabenstellung auch bereits verfügbare Algorithmen die man nutzen kann.

  • @aquaman1534
    @aquaman1534 4 ชั่วโมงที่ผ่านมา

    Es würde den Geduldsfaden der Zuschauer bei Weitem weniger strapazieren, wenn Du Deinen Vortrag nicht freihändig gestaltet, sondern stattdessen ein Manuskript ausgearbeitet und dieses dann flüssig und stringent vorgetragen hättest. Es macht mich wirklich sauer, wenn in einem Vortrag mäandert, improvisiert und dann das Ganze noch mit reichlich Ähs, Irrungen und Wirrungen garniert wird. Am Ende würde es das Video um mindestens die Hälfte verkürzen und so eine Menge Lebenszeit einsparen.

    • @Tobonocom
      @Tobonocom 2 ชั่วโมงที่ผ่านมา

      Du wirst es nicht glauben, aber das "freihändige" ist Absicht, denn Videos in denen stinklangweilig und seelenlos vom Prompter abgelesen wird habe ich genug gesehen. Spätestens nach 2 Minuten ist man eingenickt. Hinzu kommt, dass es ja genau um diese Spontanität und das Unerwartete bei der Programmierung geht. Über den Fehler bin ich ja auch nicht per "Manuskript" gestolpert, wenn Du verstehst was ich meine. Wenn trockene "Vorträge" Dein Ding sind bist Du hier falsch. Schau Dich einfach woanders um. Es gibt bei YT genug "Vorträge" von der Art wie Du sie dir wünschst. Auf meinem Kanal wird es das nicht geben. Ich halte keine "Vorlesungen".

  • @dirkcrossi6574
    @dirkcrossi6574 5 ชั่วโมงที่ผ่านมา

    Klasse Idee ,ein Dungeon so zu erstellen ,,WOW

    • @Tobonocom
      @Tobonocom ชั่วโมงที่ผ่านมา

      Danke. Fühl Dich frei alles was Du hier siehst und lernst in deinen eigenen Projekten zu benutzen! Also ohne die Fehler versteht sich! 😊

  • @Devil9797
    @Devil9797 7 ชั่วโมงที่ผ่านมา

    Es ist schon Jahrzehnte her dass ich C64 programmiert hab, aber sofort bei ersten durchlauf hab ich schon gesehen dass die letzte Zeile durchgelaufen ist, und dachte nur was ist wenn er per Zufall da drunter POKE‘t… und schon hast du es bemerkt. War mir gleich klar, dass man den For Befehl so anpassen muss dass er nicht bis in die letzte Zeile geht wenn noch der +40 dazu kommt. Das hätte Ischls aus Geschwindigkeit Effizienz Gründen anders gemacht

  • @testkonto-k5n
    @testkonto-k5n 7 ชั่วโมงที่ผ่านมา

    man sollte das nur bei Spielereien und nicht bei Gefahren tun, aber der 6502 beschwert sich pipelinemäßig auch nicht über selbstmodifizierenden code?!? also könnte man der cpu in den befehlsspeicher bereich schreiben, solange sie nur Spiele steuert, in maschinensprache und kaum noch in Basic?!? hab mal mit zwei flood fills ein labyrinth glaub ich hier am PC von weg bis ziel geleert

  • @Subtractive-et2nm
    @Subtractive-et2nm 8 ชั่วโมงที่ผ่านมา

    Tolle Erinnerung. Du hörst dich selbst gern reden oder? :) Inhalt ist aber super!

    • @Tobonocom
      @Tobonocom 7 ชั่วโมงที่ผ่านมา

      Ich wüsste nicht wie es ohne Reden funktionieren soll. Hm... Vielleicht mache ich - wenn ich Zeit und Lust habe - mal eine Stummfilmfolge für Dich. Mit Pantomime. 😁Bis dahin schalte einfach den Ton aus und schau die Videos mit Untertiteln. 😉 Danke für Dein Lob.

  • @ForstAdjunkt
    @ForstAdjunkt 19 ชั่วโมงที่ผ่านมา

    Stark erklärt und anschaulich gemacht. Ich sehe mich gerade selbst als Kind in den frühen 90igern, wie ich das dicke C64 Buch mit den Erklärungen zu DATA, READ und RESTORE durcharbeite. Oder ellenlangen DATA Blöcke aus diversen Zeitschriften abtippe. Und jetzt mach ich weiter Deinem Video zur "Zeit", alo T und T$. Freu mich drauf.

    • @Tobonocom
      @Tobonocom 17 ชั่วโมงที่ผ่านมา

      Danke für Dein Kommentar. Viel Spaß mit meinen Videos.

  • @wernerviehhauser94
    @wernerviehhauser94 20 ชั่วโมงที่ผ่านมา

    oh je, da kommen Erinnerungen hoch.......

    • @Tobonocom
      @Tobonocom 18 ชั่วโมงที่ผ่านมา

      Das klingt fast so, als ob Du Dich nicht erinnern möchtest. Tut mir leid wenn ich da was ausgelöst habe. 😉😊

    • @wernerviehhauser94
      @wernerviehhauser94 15 ชั่วโมงที่ผ่านมา

      @Tobonocom naja, wider besseres Wissen dumm angestellt. Wer wird daran schon gern erinnert ;-) Löst aber jetzt keine Panikattacke aus

    • @Tobonocom
      @Tobonocom 14 ชั่วโมงที่ผ่านมา

      @@wernerviehhauser94 Mach Dir nichts draus. Wie Du sehen kannst bist Du nicht der Einzige. Irgendwann tappt doch jeder mal in diese Falle. Insbesondere bei Schleifen geht es ganz schnell, dass man die Gefahr übersieht.

  • @frankwaldmann125
    @frankwaldmann125 วันที่ผ่านมา

    Weil der RND(0) nur 256 verschiedene Werte ausgeben kann.

    • @Tobonocom
      @Tobonocom 18 ชั่วโมงที่ผ่านมา

      Ja, das erklärt es. Deshalb "kippt" das Verhalten auch bei 257....Danke.

  • @robertroygaard902
    @robertroygaard902 วันที่ผ่านมา

    ein klassiker, der mir damals beim adventure-programmieren auch passiert ist. viel spass hatte ich auch mit dem autostart, als ich den basic-startbereich vorgezogen hatte.

    • @Tobonocom
      @Tobonocom วันที่ผ่านมา

      Das kann ich mir lebhaft vorstellen.😁 Speicherbereiche zu verschieben kann wirklich lustig werden wenn man dabei nicht exakt navigiert. Danke für Deinen netten Kommentar.

  • @unkreativnet
    @unkreativnet วันที่ผ่านมา

    Unterhaltsam. Aber an deinen Ähm solltest Du arbeiten ;-)

    • @Tobonocom
      @Tobonocom วันที่ผ่านมา

      Ähm... wieso? 😁 (Ich nehme die Kritik aber an. Mich stört es selber auch. )

  • @sengir3937
    @sengir3937 วันที่ผ่านมา

    Der Fehler liegt hier nicht am RND-Befehl an sich sondern an der falschen Nutzung. Mit RND(0) erzeugst du Zufallszahlen mit einem fixen Startwert, in diesem Fall einem Teil des internen Timers, der liefert 256 mögliche Startwerte. Du bekommst also mit RND(0) lediglich 256 verschiedene Ergebnisse. Deshalb sollte man RND(0) wirklich NUR zur Initialisierung des RND-Befehls verwenden, alle weiteren Zahlen mit RND(1).

    • @Tobonocom
      @Tobonocom วันที่ผ่านมา

      @@sengir3937 Aha! Vielen Dank für diesen nützlichen Hinweis. Ich werde darauf in Zukunft achten.

  • @Vobacoach
    @Vobacoach 2 วันที่ผ่านมา

    Jupp, hab es gerade in einer 10.000-Schleife ausprobiert: der höchste Wert ist 0,996096611. Und wenn man diesen max. möglichen Wert mit 300 multipliziert, dann kommt 298,83 (gerundet) raus. Der RND(0)*300 + 1 Befehl generiert also höchstens die Zahl 299. Das wirft aber eine neue Frage auf: warum wird keine Zahl größer als 0,996096611 generiert... 🤔 Was beim Würfel jetzt dazu kommt: je näher man der Grenze kommt, desto weniger RND-Werte gibt es, welche durch den Multiplikator die höchste zu würfelnde Zahl würfelt. Während alle Werte, die durch den INT-Befehl einen Integer darunter liegen, dieselbe Wahrscheinlichkeit haben. Falls Du das hier lesen solltest: wie verhindere ich, dass ich beim Bearbeiten der Programmbefehle die alten Zeichen überschreibe. Die "Einfg."-Taste bringt da (zumindest bei mir) leider nichts. Noch mal danke für das tolle Video! 😀

    • @Tobonocom
      @Tobonocom 2 วันที่ผ่านมา

      Ich weiß nicht welchen Emulator Du verwendest. Im VICE Emulator ist das Semikolon einfach das Semikolon (SHIFT + KOMMA). Zum Einfügen in eine Zeile musst Du SHIFT + EINFÜGEN drücken. Der Editor im C64 ist nicht wirklich komfortabel. 😁 Meiner Ansicht nach ist der RND-Befehl fehlerhaft, bzw der Algorithmus ist nicht sehr ausgefeilt. Man müsste sich mit einem Disassembler mal wirklich den entsprechenden ROM-Inhalt ansehen um rausfinden was dieser Befehl eigentlich macht. Ich habe aber für den Kanal erstmal andere Dinge geplant. Es ist ja auch kein so großes Drama. Wenn man weiß wie der Befehl sich verhält, passt man seinen Code einfach entsprechend an. Trotzdem danke für Deine Überlegungen. Und ja, das Problem ist, dass die Zufallszahl (0-1) einfach nicht richtig erzeugt wird.

  • @Vobacoach
    @Vobacoach 2 วันที่ผ่านมา

    ... und das 3. Video direkt hinterher. Auch hier: Daumen hoch, tolles Video. Eine Bemerkung zu Deiner Frage "warum taucht die 6 auf, aber die 300 nicht?". Ich habe da eine Vermutung --> Der RND(0)-Befehl hält sich an den internen Timer (oder so ähnlich). Könnte es sein, dass der höchste Wert, der dabei rauskommt, kleiner ist als 0,9999999? Also dass z.B. 0,995000 der höchstmögliche Wert für RND(0) ist und niemals ein höherer Wert unter 1 rauskommt. Dann würde das seltsame Verhalten einen Sinn ergeben. Bei der 6 merkt man das nicht, weil der "Fehler" (= Differenz zur 1,0) zu gering ist, um durch den Multiplikator "*6" größer als "1" zu werden. Bei einem Würfel mit 300 Seiten muss der RND(0)-Befehl aber "*300" genommen werden. Der "Fehler" wird also 300 Mal größer. Beispiel: wenn die höchste Zahl, die durch den RND(0)-Befehl generiert wird, die 0,995000 sei (denke ich mir gerade aus), dann wäre 300x 0,995000 = 298,5. Also ist der Fehler größer als 1. In diesem Fall würde der Zusatz "+1" in der Befehlszeile maximal einen Wert von 299 schaffen. Falls meine Vermutung richtig ist, dann würden bei Würfeln mit (z.B.) 1000 Seiten bei dieser Programmierung höchstens Werte bis 995 rauskommen. Da müsste man mal rausfinden, ob es beim RND(0) Befehl wirklich eine Obergrenze gibt, die kleiner ist als 0,9999999.

  • @Vobacoach
    @Vobacoach 2 วันที่ผ่านมา

    Hab mir nach dem "Programm-Speicher-Überschreibungs-Video" direkt ein zweites Video von Dir angeschaut (nämlich dieses hier) und kann nur sagen: wieder megaklasseverständlich erklärt. Das mit dem "Data" habe ich noch nicht verstanden, aber Du meintest, dass das in einem vorigen Video erklärt wurde. Respekt, richtig gut!!!

    • @Tobonocom
      @Tobonocom 2 วันที่ผ่านมา

      Hallo. Vielen Dank für deinen netten Kommentar. Ich freue mich dass es dir gefallen hat. Die Befehle READ, DATA und RESTORE dienen am C64 dazu statische Werte in den Speicher des C64 einzulesen. Das ist z.B. bei der Sprite-Erstellung eine gängige Methode die Sprite-daten dem Grafikchip zur Verfügung zu stellen. Wie das funktioniert erläutere ich etwas detaillierter hier: th-cam.com/video/dbP6hUsS7cY/w-d-xo.html

    • @Vobacoach
      @Vobacoach 2 วันที่ผ่านมา

      @@Tobonocom Klasse, danke dir. Das werde ich mir sehr gerne mal anschauen. 👍

  • @mikedien3609
    @mikedien3609 2 วันที่ผ่านมา

    Meinste nicht der Kurs kommt 45 Jahre zu spät?

    • @Schnuffelwuffel01
      @Schnuffelwuffel01 2 วันที่ผ่านมา

      😆😅🤣

    • @Tobonocom
      @Tobonocom 2 วันที่ผ่านมา

      Wie sagt man so schön? Lieber zu spät als niemals. 😊Aber Scherz beiseite. Schau Dich mal um im Internet (z.B. hier bei YT) und Du wirst staunen wie groß und lebendig die Retro-Computing-Community ist. Es gibt nach wie vor Menschen die sich für diese Computer interessieren, entweder aus nostalgischen Gründen, oder aber auch , weil sich auf diesen Geräten sehr gut die Grundlagen der Programmierung lernen lassen. Oder die Grundlagen der Computer-Hardware. Auch heute noch werden z.B. für diese Geräte Hardwareerweiterungen und -Zusätze mit sehr viel Liebe zu diesen Geräten erdacht und z.B. über Crowdfunding-Projekte in die Realität umgesetzt. Das Interesse an diesen Geräten ist also wieder (oder noch immer) vorhanden. Und so lange das so ist, sind diese Videos hier nicht sinnlos. Und ich selbst erfülle mir damit einen Traum. Nämlich den Traum diese Geräte mit den Mitteln und Möglichkeiten des Internets (das es ja damals noch nicht gab) heute so kennenzulernen wie ich sie damals gerne kennengelernt hätte.

    • @robertroygaard902
      @robertroygaard902 วันที่ผ่านมา

      @@Tobonocom Super Video - macht Spass und ist eine Art Review ... DANKE DAFUER!

    • @madmartigan1498
      @madmartigan1498 8 ชั่วโมงที่ผ่านมา

      definitiv viel zu spät, das hätte ich vor 40 Jahren gut gebrauchen können 😜

    • @Tobonocom
      @Tobonocom 7 ชั่วโมงที่ผ่านมา

      @@madmartigan1498 Ich auch!

  • @Vobacoach
    @Vobacoach 2 วันที่ผ่านมา

    Erst mal: megageniales Video. Es ist suuuuuuuperlange her, dass ich tatsächlich mit meinem damaligen C128-D ein paar Basic 2.0 (und auch Basic 7.0) Anfänger-Schrittchen gemacht habe. Daher kann ich zumindest die Essenz Deines Vids verstehen. Abo ist auf jeden Fall "gebongt". Meine Frage/Anmerkung: könnte man die Begrenzung nicht mit "if... then..." ebenfalls hinbekommen? Denn so ist unten rechts das Kästchen - soweit ich dein Programm verstanden habe - immer frei. Oder sehe ich das falsch? Viele Grüße aus Köln und Daumen hoch!

    • @Tobonocom
      @Tobonocom 2 วันที่ผ่านมา

      Es werden eine ganze Reihe von Feldern niemals gesetzt, was daran liegt wie ich das Dungeon aufbaue. Es werden - ausgehend von den Kästchen die in jeder Zeile alle 2 Spalten gesetzt werden - niemals diagonal Kästchen gesetzt sondern nur oben/rechts/links/unten. Das heißt die Felder die diagonal von den Spaltenkästchen liegen bleiben immer frei. Wollte man das ändern, müsste man Kästchen diagonal setzen, was grundsätzlich natürlich machbar ist, dann aber - so denke ich - dazu führen würde dass das Dungeon schwerer "begehbar" wird. Man muss ja darauf achten, dass man Laufwege (also Gänge) schafft. Aber hey, versuche es doch einmal! Anregung hast Du jetzt. Und wie DEIN Dungeon aussieht bestimmst nur Du! 😊

    • @Vobacoach
      @Vobacoach 11 ชั่วโมงที่ผ่านมา

      @@Tobonocom Ich muss da auch jeden Fall noch mal Deine Programmzeilen anschauen. Find ich megainteressant, aber noch blicke ich nicht so ganz durch. Aber das macht ja (meiner Meinung nach) auch ein Großteil des Spaßes an Basic 2.0 aus. Das Ausprobieren. Danke auf jeden Fall für Deine Antwort. 👍

  • @MsHolgerM
    @MsHolgerM 2 วันที่ผ่านมา

    Sauber wäre, wenn man den Bildschirmbereich über den Divisionsrest des Randoms ermittelt (Stichwort Modulo) und gerät dann nie außerhalb des Bereichs.

    • @Tobonocom
      @Tobonocom 2 วันที่ผ่านมา

      @@MsHolgerM Der im C64 von Werk aus verbaute Basic V2 Interpreter kennt leider keine MOD-Funktion. Das Äquivalent wäre sowas hier: INT(Z)-INT(INT(Z)/INT(N))*INT(N). Ob das nun bei dem einfachen Beispielcode unbedingt nötig ist lasse ich mal offen. Es reicht ja aus den Bereich so klein zu halten dass ein Über- oder Unterschreiten rechnerisch gar nicht möglich ist. Aber danke für den Denkanstoss.

  • @boarschtl
    @boarschtl 3 วันที่ผ่านมา

    Ich weiß ja nicht, ob das von Relevanz ist, aber wenn man 1024 -40 rechnet, wäre man auch nicht mehr im Screen-Bereich. Sollte man da nicht auch einfach auf der 2ten Zeile anfangen und das Programm sauber schreiben? Der Zeilenumbruch in die nächste Zeile ist ja beim setzen des Leerzeichens wahrscheinlich egal, aber das gehen in den Norden auch?

    • @Tobonocom
      @Tobonocom 3 วันที่ผ่านมา

      ​@@boarschtl Sehr gut aufgepasst, und ja... die Schleife bei 1104 zu beginnen wäre besser. Man läuft "im Norden" zwar nicht Gefahr den Programmspeicher zu überschreiben, in sofern fiele das erstmal nicht negativ auf. Aber im Norden liegen die Basic Pointer und die sollte man nur anrühren wenn nan weiß was man tut. Danke für den Hinweis!

    • @boarschtl
      @boarschtl 3 วันที่ผ่านมา

      Ja und um das problem generell zu beheben, macht mans wie folgt: wir fangen nicht in Zeile 0 an, sondern in zeile 1 (zeile 0 ist eh rand, da muss nix passieren). Außerdem gehen wir von spalte 1, nicht 0 bis 38. Die Randspalten müssen nie bearbeitet werden, auch nicht die Randzeilen. Das spart 2 zeilen und 2x die Höhe des Bildschirmes an Zeit. Außerdem ist der code failprove wegen überlauf. Man kann hier immernoch nur jede 2te zeile und/oder spalte bearbeiten, dann spart man nochmal viel. Aber: die wahrscheinlichkeit, das es aus dem Bereich rausläuft, ist enorm reduziert.

    • @Tobonocom
      @Tobonocom 3 วันที่ผ่านมา

      1104 ist ja Zeile 2 (1024-1063 = Zeile 0 Rand, 1064-1103 leere Zeile 1). Unten haben wir das ja schon korrigiert (nicht bis 2023 sondern bis 1943). Bei den Spalten kann man bei 1 beginnen und bei 37 enden. Alles andere regeln die Steps in den FOR-Schleifen (STEP 80 in den Zeilen, STEP 2 in den Spalten). Wenn Du das so machst sparst Du ein wenig Rechenzeit. Sehr viel ist das sicher nicht, aber wenn man es optimieren wollte würde man es sicher so machen. Und ja, auf diese Weise fallen wir dann auch nicht mehr unbeabsichtigt aus dem Bildschirmspeicher raus. 😊

  • @frankb763
    @frankb763 4 วันที่ผ่านมา

    Man kann auch während des Codings "Sicherungen" einbauen, die man, wenn fertig, wieder löscht. ZB: If ziel < min or ziel > max then print"Fehler":end Damit kann man, wenn man UNGERNE Saved, viel Codingarbeit sparen 🙂

  • @frankb763
    @frankb763 4 วันที่ผ่านมา

    10:00 Wir haben früher gesagt, dass man nicht zu weit nach Süden poken soll... Man was kommen da für Erinnerungen hoch....

    • @Tobonocom
      @Tobonocom 4 วันที่ผ่านมา

      Ja, vor allem sollte man beachten, welche Speicherbereiche auf den Speicherbereich folgen den man gerade bearbeitet. Ansonsten passiert nämlich genau sowas. Ich hatte nun glück, weil ich - anständig wie ich bin - das Programm vor der Ausführung gespeichert habe. Hätte ich das nicht getan, wäre der Code verloren. Eine ganz böse Falle ist das. Deshalb: Immer aufpassen was man wo in welche Speicherstelle schreibt. Insbesondere bei Schleifen übersieht man solche Fehler gerne. Grüße an Dich!

  • @frankb763
    @frankb763 4 วันที่ผ่านมา

    4:55 Ganz klar. Du pokest ins Basicram hinein... Habe ich früher auch sehr oft gehabt. 🙂

  • @frankb763
    @frankb763 4 วันที่ผ่านมา

    Ha! Erster :-) Nun schaue ich das Video....

  • @frankb763
    @frankb763 9 วันที่ผ่านมา

    Soweit ich noch weiß, wurde früher der SID zu Erzeugung gebraucht. Weiß abba nicht mehr, wie das noch ging...

    • @Tobonocom
      @Tobonocom 8 วันที่ผ่านมา

      Ja, nach allem was ich herausfinden konnte ist das möglich über das Register $d41b. Macht ja auch Sinn, eine Waveform eignet sich ja wunderbar zur Erstellung von Zufallswerten. Der SID ist allerdings ein einziges schwarzes Loch für mich. Mit diesem Chip habe ich mich bisher noch so gut wie gar nicht beschäftigt. Sobald ich kann werde ich das nachholen. Wie wärs? Mach doch einmal ein Video über die Klangerzeugung auf dem C64! Ich würde mir das mit Freuden ansehen. 😊

    • @frankb763
      @frankb763 8 วันที่ผ่านมา

      @@Tobonocom Ich werde mein Bestes geben und das ist nicht viel. Muss aber noch Gedult haben, denn z.Zt. lümmel ich in Kazachstan rum und komme erst in 2 Wochen wieder. Du wirst Lachen, ich habe vor ca. 4 Wochen angefangen, einen eigenen Soundplayer mit Klavierfunktion zu coden. Darüber werde ich ein Video machen, auch wenn es noch nicht fertig ist. Ziel ist es, eine Eingabe via Tastatur (Klavier), diese speichern zu können und mit einem IRQ getriebenen Player wieder abzuspielen. Also, bis denne... Gruß

    • @Tobonocom
      @Tobonocom 8 วันที่ผ่านมา

      @@frankb763 Viel Erfolg!

  • @frankb763
    @frankb763 9 วันที่ผ่านมา

    Vielleicht schaust du dir das ROM unter dem Befehl RND an. Dort müsste ja der Grund dafür zu finden sein. Ist allerdings eine Sisyphusarbeit....

  • @frankb763
    @frankb763 9 วันที่ผ่านมา

    Sehr gut erklärt. Ich wünschte, ich könnte auch solche Videos machen.

    • @Tobonocom
      @Tobonocom 9 วันที่ผ่านมา

      Danke. Und ich wünschte ich hätte Deine Kenntnisse. Ich arbeite dran. 😊

  • @bigc.2519
    @bigc.2519 14 วันที่ผ่านมา

    Schade... Ich verstehe dich so gut wie gar nicht... Weder auf dem Tablett noch am PC. Da muss ich schon extrem die Lautstärke auf volle Leistung stellen. Hätte gerne mehr über die Zielsetzung des Kanals gewusst.

    • @Tobonocom
      @Tobonocom 9 วันที่ผ่านมา

      Dafür muss ich mich entschuldigen. Als ich das Video erstellt habe, fehlte mir noch das nötige Wissen und die Ausrüstung. Ich überlege tatsächlich ob ich das Video noch einmal neu erstelle. Im Grunde kannst Du auch in die Kanalbeschreibung schauen. Im Groben geht es darum zu lernen und sich auszutauschen rund um das Thema Retro-Computer.

    • @bigc.2519
      @bigc.2519 9 วันที่ผ่านมา

      Hey, danke für die Rückmeldung. Da das dein Einstiegsintro ist, wäre eine Neuauflage bestimmt eine gute Entscheidung. Schade, das du mit Basic anfängst. Da gibt es eigentlich schon genug guten Kontent und wenn ich ganz ehrlich bin: zu meiner Zeit in den 80igern hätte ich das Wissen zum Thema Basic auch gebraucht. Aber mit der heutigen Erfahrung, der weiter bestechenden Community um den C64 finde ich das Basic des C64 zu langsam und zu rudimentär. Von daher hätte ich mich über einen deutschsprachigen Kurs zum Thema Assembler mehr gefreut. Da fehlt mir eigentlich ausreichender Kontent, zu mindestens in deutsch. Mal schauen, vielleicht kommt da ja noch was bei dir. Wünsche dir auf jeden Fall weiterhin viel Freude und Spaß.

    • @Tobonocom
      @Tobonocom 8 วันที่ผ่านมา

      Assembler wird definitiv irgendwann Teil dieses Kanals sein. Fürs Erste beschränke ich mich aber darauf die Grundlagen zu lernen. Das geht mMn in Basic besser, weil Basic leichter zugänglich ist. Du hast hier Niemanden vor Dir, der schon alle Kniffe kennt, sondern Jemand der sich langsam in die Themen einarbeitet. Und so wie man beim Hausbau mit dem Keller anfängt (und nicht mit dem Dach) fange auch ich mit dem Fundament an. Der Zeitpunkt wird aber kommen an dem ich mich mit Problemstellungen konfrontiert sehe, die unter Basic nicht mehr zu lösen sind. Spätestens dann werde ich mich Assembler zuwenden. Bedenke bitte auch, dass ich jetzt zwar vorrangig Content für (und über) den C64 erstelle, dieser Kanal soll aber kein reiner C64-Kanal werden. Mein wahres Steckenpferd ist eigentlich der Amiga. Auch für diesen Computer wird es bald Content geben. Viel zu tun, und das geht nicht alles auf einmal. Bleib einfach dran, es wird hier sicherlich bald auch Content geben der Dich mehr interessiert (hoffe ich!). Bis dahin hab viel Spaß beim Retro-Computing! Und danke für deine Anregungen.

  • @thorstenewald4440
    @thorstenewald4440 หลายเดือนก่อน

    Hallo T(h?)omas, Du hast eine echt angenehme Art diese doch eigentlich sehr trockene Thema vorzutragen. Man könnte meinen Du wärst Informatik Dozent. Mir gefällt an Deiner Art des vortragens, das Du Fragen welche sich mir während der Betrachtung Deines Videos stellen, sofort erläuterst. Ich hatte mir während des Videos die Frage gestellt, ob man auch mehr als acht Sprites in den Speicher POKEN kann (Zahlen 0-9). Zeitnah hast Du dann jedoch zuverlässig die Antwort geliefert. Wenn man aufmerksam Deine Videos verfolgt hat, müsste es nun auch möglich sein, Deine großen Ziffern der Uhr gegen Sprites auszutauschen. Besten Dank und viele Grüße Thorsten

    • @Tobonocom
      @Tobonocom หลายเดือนก่อน

      Hallo Thorsten. Vielen Dank für Dein Lob. In der Tat hatte ich beim Erstellen auch die von dir erwähnten Fragen im Kopf. Ich habe es selbst noch nicht ausprobiert, aber in der Theorie spricht nichts dagegen die Uhr mit Sprites zu realisieren. Mein Name wird mit "h" geschrieben, so wie Deiner. Liebe Grüße und Happy Retro-Computing!

  • @frankb763
    @frankb763 หลายเดือนก่อน

    Freut mich. Sehr gut erklärt....

    • @Tobonocom
      @Tobonocom หลายเดือนก่อน

      Ich danke Dir! 😊

  • @kaptnkirk2740
    @kaptnkirk2740 หลายเดือนก่อน

    Jaaa, Basic! Ganz wichtig für Spaghetticode... "Goto" for Informatikdiplom!

    • @Diotallevi73
      @Diotallevi73 หลายเดือนก่อน

      Dennoch hat BASIC Unzählige ans Programmieren heran geführt, hat also für meine Begriffe viel Gutes bewirkt.

    • @Tobonocom
      @Tobonocom หลายเดือนก่อน

      GOTO und GOSUB sind in heutigen Basic-Dialekten nicht mehr vorhanden. Wozu auch? Man darf ja nicht vergessen, dass das Gerät von dem das Video handelt gute 40 Jahre alt ist. Dennoch: Die Prinzipen der Programmierung gelten damals wie heute. Eine Schleife ist eine Schleife und eine bedingte Verzweigung ist eine bedingte Verzweigung. Ohne die kam man damals nicht aus und heute erst recht nicht.

  • @larsb.6786
    @larsb.6786 หลายเดือนก่อน

    Hi, viel Spaß auf dieser Reise. Ich werde dich begleiten. Ich bin selbst in dieser Situation, das ich nach Jahrzehnten den C64 und auch andere Homecomputer besser verstehen will

    • @Tobonocom
      @Tobonocom หลายเดือนก่อน

      D bist herzlich eingeladen mich auf der Reise zu begleiten. Wenn Du dabei Themen hast die Dich besonders interessieren dann lass es mich wissen. Wenn ich kann werde ich das hier behandeln.

  • @martinthoma2519
    @martinthoma2519 หลายเดือนก่อน

    Zu deinem Problem mit der Namen Trennung. Mache zwei Variablen. $A und $B. Lasse die Schleife von 1 - Len laufen. Bevor ein Leer Zeichen kommt, das Zeichen in A$ und den Rest in B$... Es kann so einfach sein.

    • @Tobonocom
      @Tobonocom หลายเดือนก่อน

      Du meinst so? p=0 for x=1 to len(name$) z$=mid$(name$,x,1) if z$=" " then p=1:next x if p=0 then a$=a$+z$ if p=1 then b$=b$+z$ next x Stimmt. So könnte man das machen. Ist mir in dem Moment aber nicht eingefallen. Danke.

  • @Garybaldi74
    @Garybaldi74 หลายเดือนก่อน

    Wenn dieses Tutorial für Anfänger gedacht ist, wäre es besser die Befehle nicht LEFTS, RIGHTS oder MIDS zu benennen. Im Video wurde ja schon erwähnt, das eine Zeichenkette ein String ist. Das Dollarzeichen steht für einen String. Um sich diese Befehle besser merken zu können wäre RightString, LeftString oder MidString evtl. besser. Diese Beschreibungen erklären auch die Funktionen der Befehle.

    • @Tobonocom
      @Tobonocom หลายเดือนก่อน

      Da hast Du recht, das habe ich mir auch schon überlegt. Vor allem: Wenn man es falsch spricht, schreibt man es auch falsch. Ich habe nicht zum ersten Mal beim Coden LEFTS (mit S anstatt mit $) geschrieben. 😀Entweder man sagt "LEFT-DOLLAR oder eben LEFT-STRING. Also ja, den Kritikpunkt nehme ich gerne an. Danke für Dein Feedback.

    • @Garybaldi74
      @Garybaldi74 หลายเดือนก่อน

      @@Tobonocom Der C-64 war 1989 mein Einstieg in die Programmierung. Ich hatte es mir damals mit dem Begriff String gemerkt, weil ja auch Textvariablen mit einem "$" versehen werden. Das Lernen der Syntax von Basic mit dem beiliegenden Handbuch hat damals wirklich Spaß gemacht. Basic war der Anfang. Es folgen Pascal, Delphi, VB, C++ und Java. Es ist für mich somit schon etwas Nostalgie Basic-Quellcode zu sehen.

    • @Tobonocom
      @Tobonocom หลายเดือนก่อน

      @@Garybaldi74 Das geht nicht nur Dir so. Für mich ist das auch ein komisches (aber schönes) Gefühl mal wieder zu den Anfängen zurückzukehren und auf dem C64 zu coden. Ich finde es total spannend hier Menschen zu treffen die wie ich ihre ersten Programmierschritte auf dem C64 gemacht haben. Ich programmiere auch heute noch in meinem Beruf. Anders als damals, aber gewisse Prinzipien galten ja damals genauso wie sie heute gelten. Ich hoffe Du schaust ab und zu mal rein und scheue Dich nicht mich weiterhin auf Ungenauigkeiten aufmerksam zu machen. Das ist wichtig. Ich will dass das hier gut wird.

    • @Garybaldi74
      @Garybaldi74 หลายเดือนก่อน

      @@Tobonocom Ich habe schon beim Uhr-Video mal reingeschaut. Mein erster Gedanke für die Zahlen waren Sprites. Wenn mir wieder mal etwas auffällt, gebe ich Dir gern wieder Feedback.

    • @Tobonocom
      @Tobonocom หลายเดือนก่อน

      @@Garybaldi74 Das war auch mein erster Gedanke. Ich brauchte ja aber 11 Ziffern (inkls. Trennzeichen). 10 wären auch gegangen. Aber das sind halt zwei zu viel. So weit ich weiß kann der C64 unter normalen Umständen nur 8 Sprites. In Bassic kenne ich keine Möglichkeit für Sprite-Multiplexing. EDIT: Moment. Doch, das müsste möglich sein. Ich kann ja einfach 5 Sprites nehmen (4 Ziffern und den Doppelpunkt) und dann jeweils auf andere Sprite-Blöcke zeigen.... ob das so gehen würde und schnell genug wäre? Ich prüfe das mal später.... Danke.

  • @Tobonocom
    @Tobonocom หลายเดือนก่อน

    Anmerkung: 1 Sekunde sind natürlich 1000 Millisekunden, und nicht wie von mir fälschlich behauptet 60. Wenn ihr den Wert aus TI durch 60 teilt erhaltet ihr aber tatsächlich die Zeit seit dem Starten des C64 (durch Powercycle oder Reset) in Sekunden.

  • @thorstenewald4440
    @thorstenewald4440 หลายเดือนก่อน

    Geilomat, vor der Problematik mit der Darstellung der größeren Ziffern stand ich auch. Mein theoretischer Lösungsansatz der 3 mal 5 Matrix war der gleiche, nur an der Umsetzung habe ich noch rumgegrübelt. Du warst nicht nur schneller, ich war mir nicht sicher ob ich es gelöst bekomme. Lediglich das stellen der Uhr wird bei mir per Input noch komfortabel ermöglicht, ..... naja fast da bastel ich auch noch rum. Aber super und ein gaaaanz großes Danke! 😊

    • @Tobonocom
      @Tobonocom หลายเดือนก่อน

      Ja sicher, man könnte das Ganze natürlich auch noch weiter ausbauen. Meine Überlegung war die Stunden, Minuten und Sekunden der Uhr nicht über einen Input-Befehl sondern per Tasten zu stellen. Also wenn man z.B. die Taste 'H' drückt erhöh sich die Stunde um 1, wenn man die Taste 'M' drückt dann erhöhen sich die Minuten um 1 usw. Also im Prinzip wie bei einer richtigen Digitaluhr (da gibt man ja auch keine Zeit ein, sondern drückt Knöpfe um die Uhrzeit einzustellen). Auch eine Alarmfunktion müsste relativ einfach machbar sein. Da ist sicher noch viel möglich, aber mir ging es jetzt erstmal nur darum herauszufinden wie man das grundsätzlich machen kann. Freut mich wenn ich Dir da helfen oder Denkanstösse geben konnte . Danke dir für die Problemstellung. Das zu lösen hat Spaß gemacht.

  • @thorstenewald4440
    @thorstenewald4440 หลายเดือนก่อน

    Wunderbar, nun kann ich mit der internen Uhr (TI$) die Uhrzeit auf den Bildschirm ausgeben. Nun fehlt mir noch die Möglichkeit die einzelnen Ziffern aus mehreren Zeichen vergrößert darzustellen. Danke Thorsten

    • @Tobonocom
      @Tobonocom หลายเดือนก่อน

      Klingt nach einer machbaren Aufgabenstellung.

  • @kaydues
    @kaydues หลายเดือนก่อน

    Wie hast Du so ein klares Bild hinbekommen?

    • @Tobonocom
      @Tobonocom หลายเดือนก่อน

      Du meinst den C64 Bildschirm? Das ist der Vice C64SC-Emulator. Für die Aufnahme läuft der im Vollbildmodus und das Capturing des Bildschirms macht OBS.

    • @ForstAdjunkt
      @ForstAdjunkt 19 ชั่วโมงที่ผ่านมา

      Der gute alte Brotkasten war damals schon HD ready...🤪😉🙃

  • @germanstacker
    @germanstacker 2 หลายเดือนก่อน

    Super Tutorial, herzlichen Dank!

    • @Tobonocom
      @Tobonocom 2 หลายเดือนก่อน

      Gern geschehen. Ich freue mich dass es nützlich war für Dich.

  • @markus5288
    @markus5288 2 หลายเดือนก่อน

    Sieht aus, als machst Du hier ein paar Gehversuche mit dem Grafikspeicher... nice... Erinnert mich an spannende, NERDige Zeiten in meiner Jugend, vor mehr als 30 Jahren... Hast Du auch schon mal Assemblerprogramme für die CPU des C64 (6510) oder für die Floppy-CPU geschrieben? Das war schön... man kannte noch die zu erwartende Hardware... Da mit dem Grafikspeicher und dem Rasterzeilen-IRQ zu experimentieren war ziemlich launig... 😂

    • @Tobonocom
      @Tobonocom 2 หลายเดือนก่อน

      Ich freue mich sehr darüber wenn Menschen meine Videos schauen und kommentieren die sich deutlich besser mit dem System auskennen als ich. Die von dir angesprochenen Themen habe ich im Laufe der Zeit natürlich auch schon angeschnitten aber ich gebe zu, vieles davon ist noch im Dunklen. Im Laufe meiner Reise hoffe ich mehr Licht reinzubringen. Also ja, auch Assembler wird hier irgendwann Thema sein. Du bist herzlich eingeladen mich auf meiner Reise zu begleiten. 😊

  • @christianmaoro5900
    @christianmaoro5900 2 หลายเดือนก่อน

    Der gute alte C64 - was war das doch noch für eine schöne Zeit. Danke für die Erinnerungen...

    • @Tobonocom
      @Tobonocom 2 หลายเดือนก่อน

      Für mich ist er auch heute noch immer dabei, z.B. in meinem Job. Wenn ich programmiere verwende ich Wissen das ich damals auf dem C64 erworben habe. Danke für dein Kommentar!

  • @popelpotzblitz4360
    @popelpotzblitz4360 2 หลายเดือนก่อน

    Interessant. Videoton ist allerdings sehr leise.

    • @Tobonocom
      @Tobonocom 2 หลายเดือนก่อน

      @@popelpotzblitz4360 Da hast Du recht, das ist mir auch schon aufgefallen und ich bitte das zu entschuldigen. Ich habe die optimalen Einstellungen noch nicht gefunden. Aber ich gelobe Besserung. 🙂 Danke für Dein Feedback! 🥰

    • @romanv.2829
      @romanv.2829 2 หลายเดือนก่อน

      @@Tobonocom Jeder anständige Video-Editor beherrscht Audio-Normalisierung 😉

    • @Tobonocom
      @Tobonocom 2 หลายเดือนก่อน

      @@romanv.2829 Meiner hat diese Funktion auch. Mein dringlichstes Problem mit dem Ton ist aber nicht so sehr, dass die Lautstärke innerhalb des Videos stark variiert, sondern dass der Ton des Videos insgesamt zu leise ist. Ich hoffe das konnte ich im neusten Upload etwas nachsteuern. Hundertprozentig zufrieden bin ich aber damit auch noch nicht. Am Wochenende wird ein neues Mikrofon geliefert. Mal sehen wie es sich dann damit anhört.