Beiträge von Der Doktor

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    "Das Problem ist, dass es zu oft gespielt wird."? "Das Problem ist, dass es übermäßig oft gespielt wird."? Gibt genug Alternativen.

    Früher haben sich alle über Französische Wörter im Deutschen beschwert, dachten es stirbt aus.
    Jetzt alle über Englisch im Deutschen... Die Sprache wird es überleben

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Nochmal ein kleines Update meinerseits für diejenige die es interessiert...

    Habe die Seite und die VM nochmal geändert und aufgemotzt. Die Run-Funktion läuft jetzt schneller. Außerdem ist lfsh rausgeflogen und wurde um jump on unsigned less or equal jmpule ersetzt. Außerdem habe ich einen Bug beseitigt, bei dem leere Zeilen die Labelauflösung behindern.

    Außerdem ist jetzt möglich Programme zu teilen und fremde Programm über einen Mausklick zu laden.
    Share: http://185.177.21.162/community.php

    Habe zwei Programme schon abgespeichert. Darunter eine Programm, was den ganzen Screen mit allen Farben füllt.

    Der Gott der Animation...

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Das ewige Thema mit der Seriosität von Etablierten Medien. :aldi:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Höhöhö *insert random Diamant Media Bashing here*
    Höhöhö

    Okay ich habe heute wieder rumgebastelt und das Update sollte die Qualität des Codens ziemlich verbessern.

    Neu:
    Zeilennummern:
    Damit das ganze ein bisschen schöner aussieht

    Assemblerwarnungen:
    Wenn ihr Blödsinn macht, sagt euch der Assembler jetzt auf der Webseite, was ihm nicht passt. Zurzeit per alert(blabla).

    Label Offsets:
    Ihr deklariert beispielsweise "var: db 0,5" aber wie kommt man jetzt an die 5? Man kann jetzt statische Offsets deklarieren z.B. "push var+1", das heißt man geht von der Adresse von var (im Beispiel zeigt sie auf 0) zur nächsten. Ohne Limitierung.
    Bald wird man auch mehr als 2 Einträge deklarieren können.

    Neue Instructions:
    Neu hinzugekommen:

    Code
    pushi -> pusht Inhalt des Pointers in der absoluten Adresse auf den Stack
    popi ->pusht den obersten Eintrag auf den Stack in die Adresse, auf die der Pointer zeigt, der an der absoluten Adresse liegt
    ---
    Pseudoinstruktionen:
    [0-9a-zA-Z]+(\+[0-9]+)? : Label (+ Offset in Dezimal)
    dp : Sagt dem Assembler hier soll ein einzelner(!) Pointer abgelegt werden. Zwei Bytepositionen werden beschrieben. Pointersize = 13 Bit

    Bugfixes:
    Ein Label kann jetzt auch am Start stehen, dass macht keine Probleme mehr

    Allgemeine Info:
    Das Instruktionsformat ist wie folgt:
    Opcode 3 Bit | 13 Bit Absolute Adresse/ignoriert
    Alle Instruktionen sind 2 Byte groß. 8KB können mit 13 Bit adressiert werden. Daher sind DB Instruktionen zurzeit auch nur auf 2 Einträge beschränkt.

    Wieder ein kleines Beispielprogramm:


    Was macht das Programm? In einer Endlosschleife wird ein Wert immer um 5 inkrementiert, dann wird das ganze über einen indirekten pop auf den Screen geschrieben. Danach hole ich mir die unteren 8 Bit der Screenadresse und inkrementiere sie um 1. Somit wird im nächsten Durchlauf ein anderes Pixel beschrieben. Naja, bis die unteren 8 Bit überlaufen. Ein Add+Carry muss man sich selber bauen (siehe meine Links weiter oben), was aber einfach ist. Quasi eine Krüppelversion von DosAmps Programm. Aber wir kommen der Sache schon näher :trollface: . Die Lookup Table Version sollte sich jetzt mit ein paar Tricks (Add+Carry) gut implementieren lassen. Ich will aber das richtige Regenbogenprogramm zum Laufen kriegen :P .

    Morgen setze ich mich weiter ran, vielleicht implementiere ich den Debugging Vorschlag von Chrisse. Wahrscheinlich setze ich mich aber morgen erstmal an die Share Funktion, damit man Programme speichern kann. Würde das eigentlich nicht machen, muss aber laut Vorgabe eine Datenbank benutzen -drinkmac- .

    Ich lade wieder alle ein das Ding mal für 5 Minuten auszutesten :) . Freue mich über jedes Programm :fresse: .

    http://185.177.21.162/style.html <-- Hier geht der Spaß los

    Firefox und Chrome approved.



    Zusammengebaute Instruktionen - Bibliothek
    Hier ist eine kleine Liste von Instruktionen, die ich schon synthetisiert habe. Zum Copy-Pasten, damit es bei euch ein bisschen schneller geht. Da der LeftShift wahrscheinlich morgen rausgekickt wird und um eine unsigned jmple Variante ersetzt wird, habe ich ihn auch schon in die Liste aufgenommen. Die Operationen enthalten Beispielzahlen

    Spoiler anzeigen


    SNIP

    Imho ist der beste Weg dafür, sich irgendwo Platz zu reservieren um dann temporär Werte dahin auszulagern. Genau wie bei 32-Bit x86, wo nicht alles in EAX,EBX,ECX und EDX passt.

    Wenn ich heute pushi und popi implementiere kann man das ganze auch kompakter schreiben, indem man sich eine schöne Loop baut, die den Pointer zum Screen inkrementiert. Man muss nur das Carry beachten, bzw. selber berechnen.

    Den LeftShift wollte ich vielleicht rauswerfen, um ihn stattdessen durch ein jmple (unsigned) zu ersetzen. Bin aber noch am überlegen, ob ich das mache oder nicht. Vielleicht kann man mit Tricks signed comparison mit einer unsigned operation machen. Bin da für Vorschläge offen. Man könnte natürlich Add rauswerfen, da man es per NAND synthesieren kann, aber so böse bin dann auch nicht. Ein bisschen Komfort muss sein.

    Als Guide, wie man aus Nand und Add alles zusammenbauen kann übrigens:
    http://bisqwit.iki.fi/story/howto/bitmath/
    https://en.wikipedia.org/wiki/NAND_logic

    Ich kann man mich ja mal an deinem Programm versuchen, ob ich es hinkriege. Wäre ein geiles Beispielprogramm. Denke mit ein bisschen reservierten Speicher kriegt man das hin. Sonst notfalls die Stacktiefe erhöhen :trollface:



    SNIP

    Ja die Regex hab ich gestern Abend hier schnell reingehauen, hab die nicht überprüft, aber kann das editieren.

    Der Assembler sollte sich über nicht vorhandene Labels beschweren, aber das wird in die Konsole geloggt und noch nicht auf der Webseite angezeigt. Außerdem sagt er dir noch nicht, welches Label er nicht findet. Aber das steht auf der TODO Liste.
    Der zweite Vorschlag klingt auch gut, sicherlich realisierbar, da ich die Instruktion ja sowieso dekodiere.

    In etwa genau einem Monat bin ich aus Amerika zurück und werde wieder rumbasteln.

    In der Zwischenzeit wurde ich von meinen Kurs aufgezwungen eine "WebApp" zu schreiben (was hat das eigentlich mit Systemprogramming zu tun, naja hinterfragen wir den Syllabus mal nicht). Da ich zu unkreativ für ein Spiel bin, und keine ToDo Liste oder Memeschrott implementieren will (FuckUp Utilities 9000?) habe ich mich dazu entschieden eine kleine VM zu schreiben für einen kleinen imaginären Prozessor. Wollte euch mal als Feedback rekrutieren :trollface:

    Zurzeit befindet sich Stack8 noch in der "Alpha" Phase. Aber am 4. Dezember ist Deadline und deswegen wird das recht schnell gehen. Die grundlegende VM und Assembler ist implementiert, dazu ein kleiner 4:3 Screen (Wortwörtlich 40 mal 30 Pixel) und ein Speicher und Stack Debugger. Das ganze heißt Stack8, weil der User nur 8KB Speicher bekommt, zudem benutzt die CPU die Stackarchitektur (Interner Stack statt Register) mit Tiefe 8 und besitzt nur 8 Instruktionen. Die Datenbreite ist 8-Bit, obviously. Meiner Meinung nach sollte das ganze auch Turingkomplett sein, heißt mit den Instruktionen kann man alles berechnen was man will.

    Das Instructionset ist noch nicht ausgereift, will aber morgen den finalen Entwurf machen, nachdem ich ein bisschen rumgeforscht habe.
    Zurzeit ist implementiert:

    Der Assembler ist caseinsentiv und parst das ganze sehr freizügig. Viele Leerzeichen oder überflüssige Argumente machen dem Assembler kein Problem. Bei Problemen wird aber zurzeit nur in die Webkonsole geloggt. Safari und Edge wollen noch nicht richtig, aber Firefox und Chrome machen 0 Probleme.

    Bugs sind mir ein paar bekannt, z.B. wenn ein Label ganz am Anfang steht, kommt der Assembler nicht drauf klar stattdessen #0 schreiben. Auch kann mit "db" zurzeit nur 2 Einträge gleichzeitig definiert werden. "db 5,6" schreibt 5 und 6 in zwei aufeinanderfolgende Speicherzellen. "db 5,6,7" ignoriert die 7.

    Ein Beispielprogramm:

    Das Programm addiert immer weiter 5 auf var1 (also 5, 10, 15...) schreibt das ganze dann in Adresse 7000, was dazu führt dass ein Pixel beschrieben wird (RRRGGGBB Format).

    Baustelle ist zurzeit das Design. Bootstrap will nicht so wie ich will, und mobil sieht das ganze leider sehr bescheiden aus. Wenn sich einer Webdesign auskennt, ich nehme Tipps gerne an. Bezüglich Webdesign benutze ich nur Bootstrap internals, also kein externes Style CSS. Die Skripte sind zurzeit in die Webseite integriert, werden aber später ausgelagert. Wahrscheinlich werde ich auch noch den Programm Counter in den Memory Space Mappen, um vielleicht das Springe dynamischer zu machen.

    FAQ:
    Warum?
    ->Wollte schon immer mein eigenes Brainfuck :trollface:

    Die Testseite:
    http://185.177.21.162/style.html

    Wer sich traut damit mal für 2 Minuten rumzuspielen oder wer mir helfen will, dass Webdesign auch auf kleinen Bildschirmen zum laufen zu kriegen, kann ja hier mal seinen Senf reinschreiben.