Kategorie: Kloß und Spinne

  • Kloß und Spinne – Folge 30: Norbert hat einen Plan!

    Kloß und Spinne – Folge 30: Norbert hat einen Plan!

    Norbert ist Pleite, Spinne will keine Brause und Kloß hat bald einen neuen Job. Kurz gesagt: Das Ende der Welt ist nah!

     

  • Kloß und Spinne, Episode 30 – Der Trailer ist da!

    Kloß und Spinne, Episode 30 – Der Trailer ist da!

    Der schockierendste und fetzigste Kloß-und-Spinne-Trailer aller Zeiten! Kloß und Spinne, Episode 30, „Norbert hat einen Plan“ kommt demnächst!

  • Kloß und Spinne – Teil 29: Neuseeland vs. Bitterfeld!

    Kloß und Spinne – Teil 29: Neuseeland vs. Bitterfeld!

    Ich war in Neuseeland. Kloß und Spinne auch. Norbert war in Bitterfeld. Stellt sich die Frage, was der bessere Urlaubsort ist. Außerdem wird die Frage erörtert, was besser ist: moderne Kunst oder ein paar auf’s Maul …

  • 16 shades of grey

    16 shades of grey

    Tertiäre Bezugsperson

    Es ist ja nicht so, dass ich nichts zu tun hätte.
    Ich bin frischgebackene „primäre Bezugsperson“ für einen frischgebackenen Erdenbürger, na gut, sekundäre, na gut, tertiäre, denn manchmal habe ich das Gefühl, dass unsere Tochter „den Rommelsbacher“ lieber hat als mich („der Rommelsbacher“ ist die Wärmelampe über dem Wickeltisch, welche bei jedem Wickeln für extatische Begeisterung bei ihr sorgt und brennende Eifersucht in mir auslöst).

    P1140243

    (Teile dieses Blog-Posts wurden unter erschwerten Bedingungen geschrieben. Es gab Bulette.)

    Ich konnte seit Mitte Dezember insgesamt fünf oder sechs Nächte durchschlafen, interessiere mich plötzlich für Dinge wie Staubsaugerroboter, habe seit Wochen den Boden der Dreckwäschekiste nicht mehr gesehen und verliere langsam aber sicher meine Sprache und sämtliche mühsam erlernten Bewegungsmuster und sozialen Normen – wenn euch jemand erzählt, Babys würden ihre Eltern nachahmen, glaubt ihm nicht. Es verhält sich genau andersrum, bläh, bläh, göbbel glob! Nebenher versuche ich trotzdem zu schreiben, der eine oder andere Auftritt ist ebenfalls zu absolvieren und ab und zu muss man auch ein Bier trinken gehen, bevor einen die anderen Menschen komplett abschreiben.

    kloss und spinne c64 01

    (Kloß und Spinne Demo (Beta))

    Und da dachte ich mir, Mensch, Volker, in dem bisschen Freizeit, dass dir bleibt, meist zwischen 22 und null Uhr, lernst du Assemblerprogrammierung. Und setzt Kloß und Spinne für den C64 um,  einen 8bit-Computer, der 1982 auf den Markt kam und 16 Farben  bei einer Auflösung von maximal 0,065 Megapixeln darstellen konnte. (Die Überschrift des Artikels rührt daher, dass es auf dem Schwarzweißfernseher in meinem Jugendzimmer 16 Grautöne waren, lustig, oder?!)

    titel

    (Das Geflacker enthält alle 16 Farben, und es sind die schönsten Farben der Welt: ekelgrün, schmutzigrot, braunrosa etc.)

    Hogwarts ohne Hermine

    1985 hatte ich meinen (ersten) C64 und er war das Coolste, was ich jemals hatte. Ein Tor in ein neues Universum mit unendlichen Möglichkeiten, eine Maschine, auf der man schreiben, mit der man Musik machen und bunte, bewegte Bilder auf einen Fernsehschirm bringen konnte. Wie besonders das damals war, können sich die Jüngeren vielleicht nicht vorstellen – aber damals war der Normalbürger rein passiver Medienkonsument. Er sah, las und hörte, was ihm vorgesetzt wurde. Die Möglichkeit, selbst zum Sender zu werden, war wahnsinnig aufregend.  Da war eine ganze Welt, die man erobern und gestalten konnte, und zu der außer uns Eingeweihten niemand Zutritt hatte. Und zu welcher Mädchen zu unserem Leidwesen überhaupt keinen Zutritt begehrten.

     

    P1140137

    (Größenvergleich verschiedener Peripheriegeräte: unten: 1541-Diskettenlaufwerk (C64), oben links: SD2IEC-Laufwerk (C64), oben rechts: Nuckel (Baby). Siehe weiter unten im Text.)

     

    Es waren die Zeiten, als man sich noch zwischen Computer und Freundin entscheiden musste – ein Umstand, dem die Firma Commodore später Rechnung zollte, in dem sie ihre neue Heimcomputergeneration „Amiga“ – Freundin – taufte …

    Oh ja, wir haben Opfer gebracht für den Fortschritt! Eines Tages werde ich einen langen, langen Text darüber schreiben.

    Ich hab keine Ahnung, was aus meinem alten C64 wurde. Letztes Jahr habe ich bei Ebay einen ersteigert. Anlass war ein Doku-Projekt über die Heimcomputerszene in der DDR, das leider vom Sender gecancelt wurde. Schade, wär schön geworden. Den C64 habe ich trotzdem nicht mehr hergegeben. Wenn ich ihn heute anschalte und der blaue Bildschirm erscheint, kann ich mich manchmal wieder in den Jugendlichen hineinversetzen, für den dieser Startbildschirm ungefähr dasselbe war wie das aufblasbare Raumschiff aus „Adolars phantastische Abenteuer“.  Das Ticket nach Hogwarts. Ein bisschen vom alten Zauber ist noch da.

    P1140265

    (Fragt nicht!)

    Nachdem ich neulich für einen Blogartikel einen Kloß-und-Spinne-Screenshot in eine C64-Grafik konvertiert hatte, setzte sich plötzlich die Idee fest, eine Kloß-und-Spinne-Umsetzung für den C64 zu schreiben. Schnell war klar, dass ich mit BASIC nicht weit kommen würde und nur Assembler, wenn man so will die menschenlesbare Form der Maschinensprache, in Frage käme. Und dass ich diese von Grund auf lernen müsste. In den 80ern hatte ich mich ein bisschen damit beschäftigt, bin aber nie weit gekommen. Ich habe mich damals vor allem auf’s Spielen und Musikmachen und von-niemals-realisierten-Projekten-Träumen konzentriert. (Und auf Biertrinken, Rauchen und Punkkonzerte, wir waren zwar Nerds, aber trotzdem Menschen und junge Männer.)

    Jetzt habe ich in drei Monaten eine lauffähige Demo-Version von „Kloß und Spinne – Reload,8,1“ geschrieben.

    Und wenn demnächst wieder händeringend C64-Programmierer gesucht werden, weiß ich wofür ich das alles gemacht habe (ich glaube, die Bundeswehr sucht gerade mit großen Werbeplakaten welche 😉fail01

    (Nicht alles hat auf Anhieb geklappt.)

    Mit Flash etc. hätte sich das alles super einfach machen lassen, aber auf dem C64 ist das schon ein ziemlich umfangreiches und nicht ganz triviales Unterfangen. Es gibt Text-Bitmap-Splitscreens, Sprite-Multiplexer, zufallsgesteuerte gescripetete Sequenzen, für die ich sozusagen eine eigene Scriptsprache implementiert habe (ein zugegebenermaßen sehr großes Wort für das, was ich da mache, aber nicht komplett falsch), es gibt Bitmap-Animationen und ein ziemlich umfangreiches Hantieren mit Variablen, Statusbytes und allen möglichen Daten. (Nicht alles ist in dem Gif oben zu sehen.) Ein Profi kann darüber nur lachen, und wenn er sieht, wie ich das alles krumm und schief und mit Klebeband, Spucke und Bolognesesauce zusammengecoded habe, wird er sich die Haare ausraufen, aber hey, es läuft, mein erstes ernstzunehmendes Assembler-Programm!

    murx

    (Wow, ein Spritemultiplexer (alpha-Version))

    Das Ganze macht mir gerade irrsinnig viel Spaß. Obwohl oder weil ich mich dabei so konzentrieren muss. Ich verwende Gehirnteile, die ansonsten derzeit brach liegen, deshalb ist es gleichzeitig sehr entspannend. Wahrscheinlich hat es einen ähnlichen Effekt, als würde ich in meiner Freizeit Sudokus oder komplizierte Mordfälle lösen. Die Lernkurve am Anfang ist ziemlich steil, das fetzt, man merkt, wie man besser wird. Wie stolz ich war, als die Grafik und die Sprites endlich korrekt dargestellt wurden und an der richtigen Stelle im Speicher lagen! Und als ich Kloß und Spinne und die anderen zum Blinzeln brachte, mannomann, das war was! Und als Horsts Kopf das erste Mal explodiert ist, da lief ich los, riss meine gerade gestilltwerdende Tochter aus den Armen ihrer Mutter, um ihr zu zeigen, was ihr Papa da tolles programmiert hat! Als sie schrie, wusste ich, dass der Effekt genauso schaurig und schockierend war, wie ich es geplant hatte! Das alles verblasst allerdings vor dem Stolz, den ich empfand, als die Sache mit den Dialogsequenzen schließlich funktionierte.

    Irgendwann gibt es ein Update und irgendwann schreibe ich auch nochmal einen längeren Text über die ganze Sache mit den Computern in der DDR in den 80er Jahren. Und vielleicht ist irgendwann nirgendwann, weil ich momentan nicht dazu komme, weiterzumachen, aber egal, schon jetzt kann ich sagen: Es hat sich gelohnt!

    Wer jetzt neugierig geworden ist, für den kommen hier einige Links und Downloads und ein Auszug aus dem Quelltext. Alle anderen verabschiede ich mit einem freundlichen SYS64738.

    www.retro-programming.de

    Ein wirklich tolles, umfangreiches, verständliches C64-Programmier-Tutorial. Wahnsinn. In diesen Seiten steck soviel Mühe und Liebe und ich hätte nicht eine Zeile gecoded ohne diese Seite (tatsächlich finden sich in meinem Quellcode noch einige VICII-Registerdefinitionen und eine Routine zur Anzeige eines Koala-Painter-Bildes, die ich direkt aus den Programmierbeispielen von retro-programming übernommen habe). Link:  www.retro-programming.de

    CBM Program Studio

    Wenn ich sage, dass ich den C64 programmiert habe, ist das ein bisschen geflunkert. Der C64 kam nur zum Testen zum Einsatz. Und meistens nicht einmal dann. CBM Program Studio ist eine Entwicklungsumgebung für Windows, mit der man mit dem heute üblichen Komfort C64-Software entwickeln und diese dann ebenfalls unter Windows in einem Emulator testen und debuggen kann. Ein geniales Tool, inklusive Sprite- und Charset-Editor. Hier geht’s zum Download: http://www.ajordison.co.uk/

    Das bringt uns zu:

    C64-Emulatoren

    Davon gibt es eine Menge, ich verwende CCS64 und VICE64 und finde mal den einen, mal den anderen besser. Welcher originaler ist, kann ich nicht sagen. Die Grafik scheint mir bei beiden hundertprozentig umgesetzt, der Sound ist ein bisschen anders als bei meinem echten C64 aber nur ein bisschen und außerdem klang auch jeder C64 ein bisschen anders (zumindest die Exemplare mit dem alten 6581-Soundschip). Der größte Vorteil eines echten „Brotkastens“ ist … naja, eben der Brotkasten, das Gerät selbst, das Aussehen, das Klackern der Tasten, das Gewicht der Peripheriegeräte (nehmt mal so ein Netzgerät oder Diskettenlaufwerk in die Hand!), das ist ja doch ein Teil des Zaubers.

    Wer im Keller noch einen C64 hat, jetzt Lust hat ihn hervorzuholen, der sollte trotzdem ein paar Euro inverstieren und sich ein

    SD2IEC-Laufwerk

    anschaffen – ein SD-Karten-Leser als Ersatz für ein Diskettenlaufwerk. Siehe Bild oben. Ein Bruchteil der Größe und des Gewichts und auf eine 4GB-SD-Karte passen soviele Daten wie auf ungefähr 28.000 5,25 Zoll-Disketten – genug, um das Saarland zweimal komplett zu bedecken!

    Hier ist ein Link zum Händler mit dem schönen Namen „The future was 8bit“, der die niedliche mini-1541-Version verkauft:

    https://www.thefuturewas8bit.com/shop/commodore/sd2iec-rc64.html

    Falls jemand richtig neugierig ist:

    Hier ist das „Kloß und Spinne“-Demo (bzw. die aktuelle Beta-Version) als CBM-Programstudio-Projekt für CBM-Prorgam Studio 3.10:

    http://schnipselfriedhof.de/wp-content/uploads/2017/04/cbm-project-kloss-und-spinne.zip

    Hier gibt’s das dazugehörige .prg-File, das man direkt im Emulator oder auf einem richtigen C64 laufen lassen kann:

    http://schnipselfriedhof.de/wp-content/uploads/2017/04/demo-beta.zip

    (TFM: „Q“ startet eine Dialogsequenz, „N“ startet den Norbert-erklärt-die-Welt-Screen, „H“ lässt Horsts Kopf explodieren.)

    Todo-Liste:  Fertigstellung des „Norbert erklärt die Welt“-Effekts, Kloß soll den Kopf schütteln können,  verschiedene Arm-Animationen für Spinne,  flexible Pupillenanimationen für Kloß und Sprinne,  Augenbrauen-Animation, die Katze soll atmen,  verschiedene Animationen für den Fernseher,  Soundimplementierung,  Erweiterung „Scriptsprache“,  Titelscreen inklusive Kloß-und-Spinne-Titelsong (SID edition),  noch irgendwas urst fetziges, was mir zwischendrin noch einfällt

    Falls das hier übrigens jemand liest, der gut löten kann und Lust auf einen Bastelnachmittag bei Kaffee und Kuchen hat: Ich möchte einen zweiten Soundchip in meinen C64 einbauen. Habe alle Bauteile da, aber keinerlei Löterfahrung …

    PS: Weil vielleicht nicht jeder direkt vor Augen hat, wie so ein C64-Programm aussieht ist hier der Quellcode des „Rumpfprogramms“ (ohne Variablendefinitionen, Subroutinen, Interruptroutinen etc., die ich getrennt editiert und mittels der Assembleranweisung „incasm“ eingebunden habe). Das ganze Programm mit allen Unterprogrammen hat ungefähr die 5-8fache Länge. Alles, was hinter einem Semikolon steht, ist ein Kommentar und kein Programmcode.

    incasm "Variablen.asm"
    
    *=$0801
    ;-----------------------------------------
    ;  ;  BASCIZEILE  SYS   2062
    ;------------------------------------------
    
     BYTE           $0B,$08,$DE,$07,$9E," 2062",$00,$00,$00 
    
    ;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
    ;OO                                                                     OO
    ;OO                          INIT                                       OO
    ;OO                                                                     OO
    ;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
    
            lda $0001
            sta $d020
            and #%11111110
            sta $0001                       ; BASIC AUSSCHALTEN - RAM BEI A000 FREIGEBEN
    
    incasm "init bitmap.asm"
    incasm "init animations.asm"            
    
            jsr SR:SHOW_STANDARD_SPRITES         
            jsr SR:INIT_STANDARD_IRQS
    
    ;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
    ;OO                                                                     OO
    ;OO                         TASTATURABFRAGE                             OO
    ;OO                                                                     OO
    ;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
    
    R:TASTATURABFRAGE
     
            lda  F_SPRECHER
            bne R:TASTATURABFRAGE           ; solange noch jemand spricht keine   Tastaturabfrage
            lda $CB                         ;Tastatur-Matrixkoordinate lesen
            cmp M_Tastaturspeicher          ; hat sich etwas verändert?
            beq R:TASTATURABFRAGE           ; nö? weiter warten!
            sta M_Tastaturspeicher
            cmp #$40                        ;besteht die änderung darin, dass jetzt keine Taste mehr gedrückt ist?
            beq R:ANIMATION_SELECT  ; ja? Alles läuft weiter wie bisher    
            sta M_Tastaturspeicher          ; nein? D.h. es wurde gedrückt-> Speicher aktualisieren
    
    R:ANIMATION_SELECT 
       
            lda M_Tastaturspeicher
            cmp #$1D                        ; H gedrückt?
            beq R:EXPLODIER
            cmp #$27                        ; N gedrückt?
            beq R:NORBERT_EDW
            cmp #$3E                        ; Q gedückt?
            beq R:_TEXT_PLUS_ANIMATION
            jmp R:TASTATURABFRAGE           ; etwas anderes gedrückt? zurück auf  start!
    ;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
    ;OO                                                                     OO
    ;OO                          Texte und Animationen                      OO
    ;OO                                                                     OO
    ;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
    
    R:_TEXT_PLUS_ANIMATION
    ;-----------------------------------------
    ;  Initialisierung / Textblockstart festlegen
    ;------------------------------------------
    	jsr SR:GET_RND          		; Zufallszahl zur Anmationsauswahl
           and #%00001111          		;16 verschiedene Adressen
           tax                     		; Akku nach x
                                    		;da wir mit der  Zufallszahl x-indizieren 
           lda $9ff0,x             		;x. Wert aus Animationsblock-
                                   		;Einsprungtabelle laden
          sta MZ_Lesezeichen_Zero+1       	; als höherwertiges Lesezeichenbyte
                                       	;speichern
      	lda #$00                        	    
         	sta MZ_Lesezeichen_Zero         	; Lo-Byte auf 0
    
    ;-----------------------------------------
    ;  Initialisierung aktuelle Sprechblase
    ;------------------------------------------
    
    R:NAECHSTE_SPRECHBLASE
            
            jsr SR:CLEARTEXT 
            ldy #$00;  Index Y auf 0 -> anfang der Sprechblase
            clc
    ;........... Befehlsbyte lesen, 9800 + x (erster durchlauf: +0)
            lda (MZ_Lesezeichen_Zero),y
            sta F_Sprecher                 ;in Sprecher-Flag speichern
    
    ;-----------------------------------------
    ; SPRECHER-ABFRAGE
    ;------------------------------------------
    
    ; ABFRAGE_OB_NORBERT_SPRICHT
          
            ;lda F_Sprecher                 ; ist eh noch im Akku
            cmp #$01                        ; 1 heißt: Norbert spricht
            bne R:ABFRAGE_OB_KLOSS_SPRICHT  ; nein? als nächstes Kloß abfragen!
                    
    ; NORBERT SPRICHT
    
            lda SPRITE1OFFSET_BLICK_ZU_NORBERT ; (Kloßens Blickrichtung ändern)
            sta SPRITE1DATA
            lda #$05
            sta M_Standard_Farbe_Texthintergrund ; Text-BG=grün
            jmp R:ABFRAGE_SPRECHDAUER 
    
    R:ABFRAGE_OB_KLOSS_SPRICHT
    
            lda F_Sprecher
            cmp #$02                        ; 
            bne R:ABFRAGE_OB_SPINNE_SPRICHT  ; nein? als nächstes Spinne abfragen!
                                              
    ; KLOSS SPRICHT
    
            lda SPRITE1OFFSET_BLICK_STANDARD ; KLoß Blick nach unten 
            sta SPRITE1DATA
            lda #$0e
            sta M_Standard_Farbe_Texthintergrund ; Text-BG=blau
            jmp R:ABFRAGE_SPRECHDAUER              
    
    ; ABFRAGE_OB_SPINNE_SPRICHT
    R:ABFRAGE_OB_SPINNE_SPRICHT
            
            lda F_Sprecher        
            cmp #$03 
            bne R:ABFRAGE_OB_NIEMAND_SPRICHT  ; auch nicht? weiter abfragen!
    
    ; SPINNE SPRICHT
           
            lda SPRITE1OFFSET_BLICK_ZU_SPINNE ; KLoß Blick zu Spinne
            sta SPRITE1DATA
            lda #$02
            sta M_Standard_Farbe_Texthintergrund ; Text-BG=rot
            jmp R:ABFRAGE_SPRECHDAUER 
    
    R:ABFRAGE_OB_NIEMAND_SPRICHT
            
            lda F_Sprecher        
            cmp #$00 
            bne R:ABFRAGE_SPRECHDAUER   ; auch nicht? weiter zur näxten abt.!
    
    ; NIEMAND SPRICHT
           
            lda SPRITE1OFFSET_BLICK_STANDARD ; KLoß Blick nach unten 
            sta SPRITE1DATA
            lda #$0f
            sta M_Standard_Farbe_Texthintergrund
            jmp R:ABFRAGE_SPRECHDAUER 
    
    ;-----------------------------------------
    ; SPRECHDAUER
    ;------------------------------------------           
    R:ABFRAGE_SPRECHDAUER                   
            
            ldy #$01
            lda (MZ_Lesezeichen_Zero),y   ;Befehlsbyte 2 lesen,  9800 + y (+1)
            sta C_countdown_sprachdauer 
            lda F_Sprecher        
    ;........... Eine 0 heißt:NIEMAND spricht -> weiter zur Warteschleife
            cmp            #$00 
            bne R:INIT_OUTPUT_TEXT  ; nicht 0? Text ausgeben
    ;-----------doch 0? Kein Sprecher? Kein Text?
            jmp R:NAECHSTE_ANIMATION_STARTEN               
          
    ;-----------------------------------------
    ; TEXTAUSGABE INITIALISIEREN
    ;------------------------------------------  
    
    R:INIT_OUTPUT_TEXT
    
            clc
            ;........... X wird der Zähler für die Schreibschleife  
            ldy #$00
    
    ;-----------------------------------------
    ; TEXTAUSGABE LOOP
    ;------------------------------------------  
    
    R:OUTPUT_TEXT
           
            lda   (MZ_Lesezeichen_Zero),y  
    
    
    ; ABFRAGE DER END-BEFEHLE
    ;---------------------------------
            
            cmp #$fe
            beq R:NAECHSTE_ANIMATION_STARTEN
            cmp #$ff
            beq R:NEUE_TASTATUR_ABFRAGE
            ;.......Nichts davon? Zeichen ausgeben!
            sta $43fe,y
            iny 
            jmp R:OUTPUT_TEXT
            
    R:NAECHSTE_ANIMATION_STARTEN
             ;.......warten bis Dauer abgelaufen (in interrupt S2) 
            lda C_countdown_sprachdauer
            bne R:NAECHSTE_ANIMATION_STARTEN
            
            lda SPRITE6OFFSET           ; Münder auf Anfangswert
            sta SPRITE6DATA 
            lda SPRITE7OFFSET
            sta SPRITE7DATA
            lda SPRITE4OFFSET
            sta SPRITE4DATA
            lda SPRITE5OFFSET
            sta SPRITE5DATA
            
            ;.......y zu Lesezeichen Zero Lobyte dazuadieren
            
            tya    ; y in den Akku
            adc MZ_Lesezeichen_Zero ; aktuelles Lobyte Lesezeichen dazuaddieren
            sta MZ_Lesezeichen_Zero ; und wieder dort speichern
            bcs R:NEXT_256er_PAGE   ; wenn Lobyte-Überlauf
            jmp R:NAECHSTE_SPRECHBLASE
    
    R:NEXT_256er_PAGE
            inc MZ_Lesezeichen_Zero+1 ; HiByte erhöhen, umblättern
            clc
            jmp R:NAECHSTE_SPRECHBLASE
    
    R:NEUE_TASTATUR_ABFRAGE
            jmp R:TASTATURABFRAGE
    
    ;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
    ;OO                                                                     OO
    ;OO                      FINISH                                         OO
    ;OO                                                                     OO
    ;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
    
    ;-----------------------------------------
    ; Andere Programmteile inkludieren
    ;------------------------------------------
    
    incasm "init irq.asm"
    incasm "NorbertWelt.asm"
    incasm  "Explosion.asm"
    incasm "show sprites.asm"
    incasm "interrupt S1 - Textfenster.asm"
    incasm "interrupt S2 - Screen Split.asm"
    incasm "interrupt S3 - Animationen.asm"
    incasm "interrupt N1 - Splitscreen.asm" 
    incasm "interrupt N2 - Top Sprites.asm"
    incasm "interrupt N3 - bottom Sprites.asm"
    incasm "subroutines.asm"
    
    ;-----------------------------------------
    ; Charset / Sprites / Bitmap
    ;------------------------------------------
    
    *=$4800           ;charset DATEN ab 4800
    incbin    "c64_lower.64c",2
    
    *=$5000           ;SPRITE DATEN ab 5000
    incbin    "Sprites05.bin"
    
    *=$6000                      
    incbin    "spin07.koa",2        ;Bild einbinden
    
    *=$a000                       
    incbin    "shapestest3.koa",2   ; Bitmap Animationsdaten
    
    ;-----------------------------------------
    ; TEXTDATEN
    ;------------------------------------------
    
    *=$9800 ; Block 1
    
    
            byte            $ff         ; Ende des Animationsblocks 
         
    *=$9a00 ; Block 2
            byte            03, 70      ; Figur 3 (Spinne)
            text            'Norbert, machste mir ne Brause?'
            byte            $fe
            
            byte            00, 20      ; Pause
            byte            $fe
    
    
            byte            01, $cc      ; Figur 1 (Norbert)
            text            'Brause ham wer nich. Schnaps kannste    '
            text            'haben.'
            byte            $fe
    
            
            byte            03, $b0      ; Figur 3 (Spinne) 
            text            'Och, nee, lass mal. n andermal gerne.   '
            text            'Und Kloss, wie gehts?            '
            byte            $fe
    
            byte            02, $cc      ; Figur 1 (Norbert)
            text            'Scheisse gehts. Manchmal denk ich, wir  '
            text            'leben in der Matrix ... '
            byte            $fe
    
            byte            00, 30      ; Pause
            byte            $fe
    
            byte            02, $a0      ; Figur 2 (Kloß) 
            text            '... und die Matrix ist ein C64!          '
            byte            $ff
          
    *=$9c00 ; Block 3
    
            byte            01, $40      
            text            'Test 1'
            byte            $ff
    
    *=$9d00 ; Block 4
    
            byte            02, $40      
            text            'Test 2'
            byte            $ff
    
    *=$9e00 ;  Block 5
    
            byte            03, $40      
            text            'Test 3'
            byte            $ff
         
    ;Einsprungtabelle für Animationsblöcke     
    *=$9ff0
            byte $9a, $9c, $9d, $9e
            byte $9a, $9c, $9d, $9e
            byte $9a, $9c, $9d, $9e
            byte $9a, $9c, $9d, $9e
    
    
    
  • Kloß und Spinne – Das Buch

    Kloß und Spinne – Das Buch

    Das Buch ist da! Sonnabend, über einen Monat vor der offiziellen Premiere am 30.10. im Café Butter, kam das Paket an! Ab sofort ist es im Buchhandel oder beim Verlag bestellbar oder bei Auftritten mit Unterschrift und allem Drum und Dran direkt bei mir zu erwerben. Kost‘ 10 Euro!

    Damit man weiß, worum es geht, folgt: Das Vorwort!

    Tach allerseits!

    Das Leben ist wie ein Glas Bier. Für die einen halbvoll, für die anderen halb leer. Und manchmal eben auch einfach ganz leer oder ganz voll. Oder vielleicht gar kein Glas Bier, sondern ein Glas Brause.
    Wenn das Leben wie ein Glas Bier ist, dann ist eine Kneipe wie das Universum, und wir können alle Geheimnisse des Lebens ergründen, indem wir uns an die Bar setzen und beobachten. Stephen Hawking hat einen Bestseller mit dem Titel „Das Universum in der Nussschale“ geschrieben. Hier nun also: „Das Universum in der Eckkneipe“.

    Die Kneipe, von der wir hier erzählen, befindet sich irgendwo in Ostberlin. Gegenüber ihren Paralleluniversen in Westberlin, München oder Eisenhüttenstadt hat sie einen entscheidenden Vorteil: Sie ist gleich bei mir um die Ecke.

    klein P1080242

    (www.quasimodo.de)

    Den Namen der Kneipe möchte ich nicht verraten, nennen wir sie „Schrödingers“, denn solange man nicht hineinschaut, weiß man nie, ob die Katze auf der Fensterbank noch lebt oder schon tot ist. Man könnte also sagen, dass die Kneipenkatze gleichzeitig lebendig und tot ist und würde damit eindrucksvoll beweisen, dass man keine Ahnung von Quantenmechanik hat. Wenn man sich die Mühe macht, hineinzuschauen wird man jedenfalls erleichtert feststellen, dass die Katze noch lebt.
    Außer der Katze haben es sich noch ein paar Stammgäste bequem gemacht: An seinem Platz direkt am Zapfhahn, dort, wo das nächste Bier nie weit entfernt ist, sitzt Kloß. Kloß würde das Leben niemals mit so erfreulichen Analogien wie Biergläsern oder Pralinenkästen beschreiben, denn Kloß hat schlechte Laune. Immer. Kloß ist die Mutter aller Miesepeter und das uneheliche Kind von Bernd dem Brot und Marvin dem Roboter. So wie Licht für jeden Beobachter stets die selbe Geschwindigkeit hat, hat Kloß für jeden Beobachter unabhängig von dessen eigener Stimmung konstant die schlechteste Laune im ganzen Universum, sprich der ganzen Kneipe.
    Sein Kumpel Spinne ist das genaue Gegenteil: Nichts tut seiner Lebensfreude Abbruch, kein Thema ist so deprimierend, dass er ihm nicht auch etwas Positives abgewinnen könnte, und selbst wenn all seine Versuche, in seiner Stammkneipe ein schönes Glas Brause zu bekommen, am archaischen Kneiperstolz des Wirtes scheitern, kann das nichts an seiner guten Laune ändern. Man kann auch ohne Brause glücklich sein!

    klein P1080257

    (www.raubtiernummer.de)

    Auf dem Platz an der Wand hockt manchmal Wird-man-ja-wohl-noch-sagen-dürfen-Dirk und sagt unvermittelt »Hitler«. Ganz selten verirrt sich sogar ein gänzlich Fremder in die Kneipe; meist ein junger Mann mit Bart, der aber in der Regel nur mal schnell aufs Klo will, weil er woanders so viel Kaffee oder Beck’s to go getrunken hat.

    Und schließlich ist da noch Horst: ein rosa bepulloverter Geist, ein bebrillter blinder Fleck, eine kleine verschüchterte Bewegung im Augenwinkel. Man muss schon sehr genau hinschauen, um ihn überhaupt zu bemerken. So genau schaut aber niemand hin. Horst ist tatsächlich wie Schrödingers Katze, nur eben leider keine Katze, sondern ein derart langweiliger und eigenschaftsloser Mensch, dass sich auf Teufel komm raus niemand findet, der sich die Mühe machen würde, seinen zwischen Existenz und Nichtexistenz oszillierenden Zustand durch Beobachtung festzulegen.

    Germanistikstudenten späterer Generationen werden kluge Arbeiten schreiben, in denen sie Horst mit dem Autor dieser Zeilen gleichzusetzen versuchen. Totaler Quatsch, aber immer noch besser, als wenn sie Marketing studieren würden.

    klein P1080282

    (Ich hätte vielleicht Marketing studieren sollen. Dann dürfte ich für andere Werbung machen und nicht immer nur für mich selbst.)

    In jeder Galaxie und jeder Kneipe dreht sich alles um das Zentrum beziehungsweise den Wirt. Im Falle der Milchstraße handelt es sich um ein gigantisches Schwarzes Loch von 4,3 Millionen Sonnenmassen, im Falle der Kneipe handelt es sich um Norbert, der auch ein bisschen Übergewicht hat. Ein ärmelloses Unterhemd bringt seinen Bierbauch bestens zur Geltung. Wenn ihn nicht gerade ein Gast stört, verbringt Norbert seinen Arbeitstag in stummer Meditation, wobei er oft zu Einsichten von erhabener Weisheit gelangt, an denen Sie, liebe Leserinnen und Leser, auf den folgenden Seiten teilhaben können.

    Viel Spaß beim Lesen! Um mit den Helden dieses Buches zu sprechen: “Hihi, das ist lustig!” — “Isses nich.”