Archiv der Kategorie: Uncategorized

Assembler (inklusive Basic, Tutor?) vs moderne strukturierte Programmiersprachen (C, Pascal, C++, Pascal, Brainfuck) [In Bearbeitung]

Wer Assembler programmiert (oder auch Basic mit Goto Zeilennummern/Sprungmarkenmöglichkeiten) stellt schnell fest, hier kann man viel mehr machen als in modernen strukturierten Programmiersprachen (mit derselben Anzahl von Zeichen). Moderne strukturierte Programmiersprachen ähneln mehr einem modernen Rezept, während unstrukturierte eher einem Hypertext ähneln.

Moderne strukturierte Programmiersprachen und ihr Baumkonzept

Moderne (strukturierte) Programmiersprachen und ihre Ablaufdiagramme sind eine Teilemenge (nicht eigentlich) der viel grösseren Menge der Maschinensprachen mit ihren JMP und GOTO Befehlen. Der Code springt in Unterroutinen und kehrt dann wieder zurück in den nächst höheren Prozess.

Dadurch entsteht eine Art Baum und wie bei Treestrukturen üblich, ist es jederzeit klar, wo sich der Programmpointer(‚man‘) befindet. Jeder Punkt ist klar definiert, weil der Rückweg immer klar ist – den Tree up. Je tiefer der Tree ist, umso grösser die Verwaltungsaufgabe, schliesslich muss man sich immer merken, wie man zurückkommt.

Prinzipiell hat C. Böhm ( https://en.wikipedia.org/wiki/Corrado_Böhm ) früh – 1963 – gezeigt, dass sich alle unstrukturierten Programmiersprachen in strukturierte überführen lassen. Er hat dazu eine theoretische Programmiersprache entwickelt mit sehr wenigen Befehlen. Eine wiedererfundene Version dafür kennt man heute Brainfuck von U. Müller, das nur von den Befehlen +-[] etc lebt. Diese Sprache hat natürlich einen Preis, die Source-Codes sind riesig.

Der Vorteil ist sofort klar: Lesbarere Strukturen (Trennung zwischen Fakten und Regeln klar), da es klare Ablaufdiagramme gibt.

An verschiedenen Stellen (raussuchen) wird darauf hingewiesen, dass gerade 8Bitter wegen RAM (auch in Sachen Tools) und kleinem Stack nicht in der Lage sind wirklich höhere strukturierte Programmiersprachen zu bieten. Es fällt auch auf, dass es wenige strukturierte Programmiersprachen gibt auf diesen Systemen und viele erst heute nachträglich entwickelt werden, um zu zeigen, dass es doch funktioniert.


// ToDo: Checken der These, dass es bei 8Bit-Homcomputern wenige Compiler und Hochsprachen gibt, weil das RAM fehlte bzw. die Stacks zu klein waren für gute Compiler.

// Trees sind deswegen bekanntlich sehr beliebt, da sie machttechnisch grösstmögliche Kontrolle erlauben. Natürlich lassen sich damit nur eine beschränkte Datenstruktur oder auch Prozessstruktur abbilden – aber für viele Systeme reicht es (oder eher muss es reichen).

Unstrukturierte Programmiersprachen – willkommen in rhizomatischer Ausführung

Assembler dagegen ist das potentiell offen in der Struktur. Es kann kreuz und quer Daten uns Code verteilt werden (nicht der beste Stil) – letztlich besteht darin auch kein Unterschied – das eine sind ausführbare Daten, das andere interpretierte Daten – aus Sicht des Programs.

Prinzipiell gibt es wenige Befehle. LDA (load A), STA (store A), CMP, JMP. Dadurch entstehen logisch stringente Programme. Ebenso ist das Rechenwerk meist sehr eingeschränkt (etwa beim billigen 6502): Register A,X,Y. All dies macht die Programm lang und oft schwer lesbar.

Als Flaschenhals kommt hinzu, dass viele Operationen nicht im allgemeinen (langsamen) RAM ausgeführt werden können, sondern nur im ‚Rechenwerk‘ und darum dahinein geladen werden müssen bsp. lda #1 (Lade 1 ins A-Register).

Der wichtigste Unterschied zu strukturierten Programmiersprache ist aber sicherlich die Möglichkeit des „Springens“ JMP (oder GOTO) und alle Flag-Abhängigen-Sprünge aus „Compares wie CMP“ wie BEQ (gleich), BNE (ungleich), BCC (kleiner als), BCS (grösser als) etc.

Ein fiktives Beispiel:

        lda #10
ohje:
        clc
        adc #1

        clc // clean the state-register
        cmp #4
        beq it_is_four // same
        bne it_is_notfour // not the same 

it_is_four:

        jmp end_of_all
it_is_notfour:

        jmp oh_je
end_of_all:       

Dies ermöglicht dann alle möglichen Versionen von Ausführungen. Komplizierter wird das Ganze dann auch noch, wenn sich der Source-Code über mehrere Seiten erstreckt. Und selbstverständlich lassen sich Dinge in Unterroutinen verpacken, das Problem allerdings dann da: Handling der Parameter (auf den kleinen Stack oder in eigene Variablen?).

Im konkreten Programmierprozess müssen durch die Sprungmarken auch immer wieder neue Sprungmarken gefunden werden. Dies ist bei weitem aufwändiger als etwa in C. Die Haupbenennungsaufgaben sind quantitativ die Variablen/Members und die Methoden.

Die Variablen sind ähnlich aufwändig in Assembler:

a: .byte 0 
vs
byte a = 0;

Dasselbe gilt für die Funktionen/Methoden:

render_me:
           [...]
           rts

vs

void render_me() {
}

Viel aufwändiger wird es hingegen bei jeder kleine If-Abfrage bzw. in Sachen fornext (was ja eine verkürzte Schreibweise ist C). Hier müssen immer wieder neue Sprungmarkennamen gefunden werden (auch wenn moderne Assembler hier auch lokale relative Namings ermöglichen).

            ldx #10
count_down:
            clc
            cpx #4
            is_not4
      
is_not4:             
            inx
            clc 
            cmp #0
            bne count_down

vs

for (int i=0;i<10;i++) {
    if (i==4) {
    
    }
}

Selbstverständlich klingt, das im ersten Moment nicht nach viel. Das Problem potentiert sich aber dann mit jeder neuen Abfrage und jeder ForNext-Schleife.

Jeff Minter – Mr BulletHell

BulletHell hat sich in den Jahren seit sie technisch machbarer geworden sind zu einem eigentlichen Grossgenre unter den ShootEmUps ausweitet. Was man dabei schnell vergisst, zu den BulletHell-Kerngenres gehören natürlich auch all die Robotron-Versionen und Tempest-Varianten mit dabei hier seit Jahrzehnten Jeff Minter mit seinem unverwechslich westlichen Mukokuseki.

Und man beachte die Parallelen von VampireSurvivors (nicht das Aussehen) und etwa Llamatron. Und ja VampireSurvivor führt in das System die Langzeitmotivation behaltbare Extras ein und ein monitäres System dazu. Wir leben heute ja auch in der Vollökonominiserung und nicht in den widerständigen 80er Jahren, wo das alles vorwärtsgetreiben wurde in England.

Aseprite – auch für Sudoku-C64-Multicolormode geeignet?

Bis anhin nutzte ich das einfach McDraw online. Das funktioniert auch einigermassen gut, einzig die Lupenfunktion und gleichzeitiges Malen funktioniert nicht. Darum die Frage, welches auf allen Platformen erhältliche Malprogramm würde noch funktionieren.

Warum nicht Aseprite wieder nutzen? Und wie arbeitet es sich ohne den Farbencheck (4 bzw. real aus 16 Farben)?

Als Template habe ich mal eine PNG benutzt, das ich McDraw exportiert habe mit allen Farben schon drin.

Das Raster lässt sich in den Einstellungen einfach darüber blenden und das Malen funktioniert wie immer gut.

Nun am Ausprobieren wie es mit den Farben und dem unintuitiven Zählen aussieht.

Commodore 64 Palette

Verwendet man die C64 Palette intern so hilft Aseprite noch zusätzlich wie man hier sieht (mit Verläufen, Dithering etc):

Folgendes Icon hilft:

Suche nach Commodore 64.

Ebenen

Nicht ganz eingängig sind noch die Ebenen. Mit restrikteten Farben ist die erste Farbe immer HIntergrundfarbe. Nur die erste Ebene kann eine intransparente Hintergrundfarbe haben. Die Ebenen findet man unten.

Verschiebbar sind die Ebenen mit einer seltsamen Tastenkombination. Mac: Control oder Option …

Farbencheck und Koala-Export

Dank des Lua-Scripting-Support lässt sich ein Farbenchecker realsisieren, was tatsächlich jemand schon gemacht hat. Das Ergebnis findet sich hier. Am Einfachsten die Script downloaden hier:
https://github.com/Viza74/c64helperscriptsforaseprite

Anschliessend muss man den Ordnerinhalt in den richtigen Scriptornder kopieren:

Anschliessend (Neustart erforderlich?) stehen die Scripts Verfügung. Der Ordner enthält auch ein Demobild.

Nun kann man die Farben checken und anzeigen lassen. Es zeigt sich aber auch, dass das Aufsetzen eines eigenen Templates nicht so einfach ist, so dass es das einfachste ist, das Template zu nehmen und die Ebene mit dem Testbild zu löschen und eine neue zu kreieren.

Sogar als .kla lassen sich die Bilder (automatische entlayert) exportieren.

Danke für die Arbeit an den Entwickler*.

Dithering

Wie man mit Dithering arbeitet sieht man hier:

8Bit-Coding: Wie navigiere ich im Assembler-Code?

Ich suche tatsächlich im Source-Code herum nach markanten Stellen. Ich kenne den Source nach den Stellen und was dort für Variablen, Methoden vorkommen, wobei das letztlich in Assembler ja auch alles dasselbe ist. Ich habe sogar angefangen, Kommentare zur Suche verschieden zu kommentieren quasi zu taggen.

Als Beispiel etwa:
– Anim System
– Animation System
– Sprite Animation system

Alles damit ich es mit verschiedenen Fragen finde.

Anbei die letzten Suchen in der Such-History von Sublime (Texteditor Mac/Win):


Zur Kontextualisierung: Ich entwickele seit einiger Zeit eine kleine GameEngine und wende sie auch gerade im aktuellen C64 Spiel an.

8Bit-Coding: Alles in derselben „RAM-Kloake“

Das hässliche an 8bit Systemen (Zahlenraum 0-255) ist, dass alles im selben RAM rumliegt. Es gibt keine geschützten Bereiche. Das hat Vorteile – die BASIC-Coders* lieben es zu POKEN und zu PEEKEN. Auch die Cheaters* mögen es selbstverständlich. Aber es hat auch Nachteile: ‚entgleiste‘ Routinen treiben ihr Unwesen durch das ganze RAM, Grafiken, Tabellen, Sound, ausgeführter Code. Das Ergebnis – unklar warum genau was passiert. Es ist eine Art Migräne im RAM. Es wandert immer wieder über verschiedene Bereiche.

Und so kommen dann auch entflaufene Sprites nach der 255 Grenze wieder ins Bild.

Schmale Gegner* in ShootEmUp

Ein Teil der ShootEmUp-Szene lebt von den „vielen“ Gegnern und Schüssen bis hin ins Subgenre des Bullet-Hells. So viele Gegner waren zu haben mit: viele monochrome Sprites (Schüsse müssen nicht komplex sein) oder dann mit grossen wenigen Sprites, die man unterteilt (Multiplexer). Diesen Weg ging der C64. Bei dieser Methode ist aber dann auch klar: Die Sprites sind halb so gross und das funktioniert nur so richtig visuell in horizontalen ShootEmUps (Katakis lässt grüssen).

// Analyse der Vertikalshooters etwa auf dem C64

8Bit-IIII: C64 – der 8Bit-Bolide (In Bearbeitung)

Kurzzusammenfassung der wichtigsten Details bezogen auf die Spielgeschichte.

Geschichte

J. Tramiel (1928 vgl. dazu Persönlicher Background von Personen – Jack Tramiel Mr Commodore C64, Atari ST) wurde als jüdischer Pole aus Auschwitz befreit, arbeitet fuer die US-Armee, dann als Contracter und gründete Commodore für Rechner, Büromaschinen (vgl. Sinclair). Dabei ging es immer um die Dinge für alle – Massen- bzw. Volkscomputer. Zuerst Büro- und dann Homecomputer. VC 20 etc. dann C64

Hardware & Entwicklung

Unabhängigkeit durch Kauf von MOS inklusive 6502/x (8bit). Zuerst Idee Console darum auch alles drin (Bilder, Scrolling, Sprites inspiriert bei Intellivision, Atari 400 etc). So billig wie möglich. Und 64KB Speicher, mehr als alle anderen und Spezialchips (Idee Console für Grafik VIC, Sound SID).

Schnittstellen: 2x Joystick, Datasette (1), Diskette – sehr langsam – darum oft Erweiterungen (8), serielle (Drucker) oder Cartdriges.

Produkt

Übername „Brotkasten“ in der Tradition der Homecomputer. Tastatur ist Teil des Computers.

Erste Applikation: Basic und Programmieren wie bei anderen Homecomputern.


Basic hat eine zweite wichtige Funktion: Laden und ausführen von Software.

load "$",8,1
list
load "abc.prg",8,1
run

Emulation

Drag & drop online:
https://c64online.com/c64-online-emulator/

vgl. Vice etc.

Übung:
– Suche ein Spiel (DiskImage)
– Lass es laufen online / Vice
– Versuche ein eigenes PRG hochzuladen.

Programmiermöglichkeiten:

Basic (default), Assembler etc

Basic

Allgemein langsames nicht kompiliertes Basic. Nicht upgedated, weil Commodore eine Version fuer alle Commodore Homecomputer kaufe. Mit : lassen sich Befehle zusammen hängen und damit OneLine-Spiele etc selbst herstellen.

C64 online emulator – c64online.com

Aufgabe: Schreib ein Programm, das auf 100 zählt.

10 print "abc"
20 goto 10
> RUN

Die gute Consolen-Hardware macht es möglich, selbst in Basic Spiele zu programmieren.

Assembler

6502 (Billige Version von 6802)
Anzahl Befehle: /sec > Das heisst
8Bit (Nur Dinge Berechnen von 0-255)
Nur Addition, Substraktion (und /2 *2)
– A,X,Z (Register)
– im Memory
Vergleiche compare (cmp)

Einfaches Tool zum Lernen von 6502-Assembler:
http://skilldrick.github.io/easy6502/

Memory

64 Kilobyte (inklusive Basic)
Problem wenig memory.
> Programmierung > Grafik

Display (Text und/oder Graphics je nach aktueller Zeile)

Verschiedene BildschirmModes im Minimum: Textmode und/oder Grafikmode. Umschaltbar abhängig vom Raster.

Übung:
– Spiele analysieren
– Allgmeine, ManicMansion etc.

Textmode

Gut zum Arbeiten. Monochrom 40*25 Pixel oder Multicolor Sehr schnell. Grafiken werden deswegen tilebasiert konstruiert.

Charset / Graphikblöcke

Schnell, sehr schnell. Einfach ersetzbar. Sprites und Text lassen sich kombinieren.

https://petscii.krissz.hu (SingleColor, MultiColor)

Übung
– Kreiere eine Grafik mit vorhandenen Tilesets/Charset
– Aendere das Charset fuer eine bestimmte Welt

Grafikmode Blöcke

Palette: fest 16 Farben
Verschiedene Grafikmodi: 320*200 2 farbig. 160×200 4 farbig.

Unten ist die Orginalanordnung zu sehen, oben eine eigene mit ‚Farbverwandtschaften/clustern‘, das beim Gestalten hilft.

Die Farbauswahl scheint als Geschmack der Entwickler* entstanden zu sein und nicht etwa mittels Evaluation und Anforderungen.

Multicolor:
40*25 Blöcke. Eine Hintergrundfarbe, eine Borderfarbe und jeweiles 3 eigene Farben pro Block
Pixeling per Joystick! > Viele Grafiken ab 1985 auf dem Amiga/Atari ST kreiert.

Anwendung:
https://mcdraw.xyz

Eigenständiges Pixel-Programm:
Aesprite

Übung:

-Analysiere exisiterende Titelbilder



– Kreiere ein Roboterbild
– Kreiere ein Elefantenbild

Übung Hintergrundbild:
– Kreiere ein Charset fuer ein Panzerspiel
– Kreiere ein Charset fuer ein Adventure

Übung 1987-adäquat:
– Dieselbe Aufgabe mit einer OrginalZeichensoftware wie Koala-Painter (und Orginal Touchpad)
https://www.c64-wiki.de/wiki/Koala_Painter

Display-Console: Sprites & HardwareScrolling

Technik:
– 8 Sprites (x2 Multiplex) 24*21 pixel – 2 Farbe fuer alle und 1 pro Sprite

Tools:
https://beta.spritemate.com

Übung:
Zeichne 3 verschiedene Sprites – Mensch, Roboter, Auto

Orginal Design-Tools

….

Sound

Eigener programmierbarer Prozessor mit Dreiecks- und ViereckSynthesizer, 3 Stimment.
> eigenes Instrument

Spiele

Wichtige Spiele:
– Viele Demakes / Ports von Arcades
– LittleComputerPeople
– …, Manic Masion (SCRUM)
– etc

Schweizer Games

  • Robox
  • zwei drei Andere …
  • Kleinert (Sound)

8Bit-III: LowCost-8bit-Homecomputer – Atari 400/600, ZX81, C64 … (In Bearbeitung)

Die LowCost-8Bit-Homecomputer waren explizit für den Hausgebrauch entwickelt und setzten in einem ersten Verwendungszweck alles ein, was es da so gab im Haushalt: Fernseher etwa oder Kassettengeräte oder sogar eine Schreibmaschine mit RS232 Schnittstelle.

In diesem Set handelt es sich vermutlich um eine Manuelle Digitalisierung: Viele Dinge muss der Mensch machen und die Maschine gibt ihm Befehle wie „Spul das Tape zurück“, „Druecke Play etc“. Nur langsam entstehen „dedizierterte“ Peripheriegeräte wie „Datasette“ oder Drucker. Mit der Einführung des „Diskettenlaufwerk“ kann der Computer „selber“ lesen und „schreiben“. Das Auswerfen der Disk lernt er dann mit den 16/32Bittern.

Die 8Bit-Platzhirsche

Alle nachfolgend vorgestellten Computer sind auch im GameLab der ZHDK vorhanden und dort nutzbar.

Hier können und sollen nicht alle abgebildet werden, denn es gab wirklich eine Menge von 8Bit Computern vor allem vorne mit dabei waren USA (Atari, Commodore, Texas Instrument … [Apple]), England (BBC, Amstrad, ZX, Tandy … ), FR (Nachführen), IT (…[Olivetti]), Japan (MSX div. Hersteller) etc. Was allerdings auffällt ist, dass es in Deutschland es fast keine Eigenentwicklungen gab (Evt. Ausnahme DDR). Der Ostblock war im Allgemeinen ein schwieriges Territorium für Microcomputer – es kam auch zu Klonen (siehe Golem Podcast).

Gameaspekte

Wichtig ist hier zu beachten, dass die Entwicklung der Arcades/Consolen und der Highend-PCs (Apple und IBM) vorwärts ging. Viele Ideen gerade der Consolen flossen ins Design der Computer ein (Bei Atari gab es in Haus alles von Arcades bis Consolenn bis Computer), weil Games ein klares Motivationsdesign hatten. Dadurch wird der Computer zu etwas, was sowohl Freizeit wie auch Bueroarbeit bzw. neue Arbeiten Design, Publishing abbildet. Wie sehr dies gerade die 8Bit-Computer technisch noch herausfordert zeigt der Text bzw. Grafikmode. Sind dies doch gerade die zwei Modes mit zwei völlig anderen Anforderungsprofilen damals. Dies überwindet letztlich erst die GUIs.

Diese Motivationspalette zeigt sich auch in den verschiedenen Arten, wie die Computer technisch ausgelegt sind bzw. wie sich sie am Markt ’schreibhälslerisch‘ positionieren.

Atari 400/600/XE/XL 1979+

Atari ist sehr früh im Feld und avanziert schnell zu einem Platzhirsch, vorallem in den USA. Die Technologie ist zumindest am Anfang up to date.

Game related: 6502, Text/GraphicModes, 384×200?, 16 Farben (+Abstufungen?), Farbpalette 256 Colors, 8 m Sprites

Mehr dazu auf Wikipedia >

„BBC“ Acorn Micro (Acorn) 1981+

Interessanter Computer weil BBC den Computer entwicklen liess und nutze für Ausbildungsformate und damit auch Schulen in UK. Der Computer wurde quasi für die Ansprüche der Fernsehsendung entwickelt.

Game related: 6502/ZX81/ARM, 160×256, 16 definierte Colors, Chars: 8×8

Mehr dazu auf Wikipedia >

ZX 81 1981+

Der unscheinbare Rechner ZX81 passt ins Konzept von ‚lowcost‘ Rechner von Clive Sincliar. Dieser versucht alle möglichen Dinge zu verkleinern vom Taschenrechner bis hin zum Fernseher oder eher umgekehrt. Er versucht also auch die Dinge an die Masse zu bringen und diesen ‚Zugang‘ zu geben. Der ZX81 ist als erweiterbarer „Rechner“ konzipiert (nach hinten mit Drucker etc). Der Sinclair wird auch als das verkauft, als interessanter, neuer Rechner mit Basic. Die ersten Beispiele sind das Rechnen mit Basic.

Obwohl der Computer klein aussieht und mit Folientastatur daherkommt, ist er äusserst effektiv. Das liegt vorallem daran, dass man nicht etwa die Befehle tippt sondern quasi jeder Befehl ein Token ist. Dadurch kommt man schnell vorwärts und der Computer scheint ‚intelligent‘, da man nur mögliche Dinge eingeben kann. Später wurde der ZX81 erweitert zum ZX Spektrum und Spektrum 2+.

Game related: ZX81(Intel kompatibel), 256×192, 15 Farben, fixed Palette, 8×8 mit 2 farben, auch visueller Zeichensatz

Mehr dazu auf Wikipedia >

TI99/TI99/A-Texas Instrument 1981

TI99 ist ebenfalls ein sehr solider und preisweiterer Computer.
Game related: 32 einfarbige Sprites (4 pro linie)
Mehr auf Wikipedia >

Amstrad CPC 1984+

Eher spät am Markt der CPC. Der verschiedenste Namen hatte je nach Land. Beispiele Schneider CPC in den Niederlanden etc.

Game related: ZX80, 640*320, 2 Color / 320*200, 4 Colors / 160*320, 16 Colors

Mehr dazu auf Wikipedia >

MSX (Coming)

Game related: NEC

Trends

Die Szene ist letztlich übersichtlich, da alle mitmachen wollten und alle auch diverse Ansätze hatten, technisch, verkauftechnisch, motivationstechnisch wie auch philosophisch. Wichtig ist sicherlich, dass die meisten Konsolenhersteller auch ins Feld drängen und versuchen ihre Produkte quer ins Feld zu bringen oder/und sogar mit einem Produkt auf beiden Märkten präsent zu sein (Atari, Intellivision bieten letztlich solchen Consolencomputer) oder als andere Strategie den Videogamecrash 1984 zu überleben. Aber auch viele Computer sind offensiv technisch im Gamebereich angesiedelt vom C64 bis hin dann zum Amiga. Dadurch kommen auch immer mehr Specialchips ins Computerdesign – etwa fuer Grafik oder Sound (heutigige Digitalisierung).

Die Matrix der Möglichkeiten (Ermächtigung 80er) / Einschränkungen (Sicht Mainframe/heute)

Die Herausforderungen von Seiten der Hardware und Preis kann etwa wie folgt dargestellt werden:

Die eigentlich zu langsamen CPUs führen dazu, dass man bessere Zusatzhardware braucht (nur circa 1k Instruktionen auf Maschinenspracheebene pro Frame!). Zusätzlich limitierend wird das RAM (es ist teuer), weil es überall benötigt wird vom Screen bis zum BASIC und der Frage, wieviel bleibt am Ende noch übrig für die Anwendung. All dies ist nicht nur theoretisch sondern rein praktisch im Alltag (Textmode). Spiele sind in diesem Sinn noch anfordernder. Es ist auch klar ersichtlich, dass gerade mehr Farben das Ganze auf allen Ebenen einem Stresstest unterziehen.

// ToDo: Schweizer Games einpflegen ..