koala.asm

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Ergebnis (Bild aus Pac-Land)
;###############################################################################
;# Programm:      Grafik im Koala-Format anzeigen
;# Dateiname:     koala.asm
;#
;# Assembler:     ACME
;# Assemblierung: acme -f cbm -o koala.prg koala.asm
;#
;# Start mit:     RUN
;#
;# Quelltext:     * Kleinschreibung (bis auf Kommentare)
;#                * nur Leerzeichen, keine Tabulatoren
;#                * Abstand: jeweils 20 Zeichen (Label --> Befehl --> Kommentar)
;#                * Zeilenlänge max. 80 Zeichen
;#
;# Beschreibung:  Einfacher Koala-Viewer
;#
;###############################################################################

; ----- @Basic-Start@ -----

                    *=$0801             ; Basic-Startzeile "10 SYS2061" erzeugen
                    !word +             ; Zeiger auf nächste Basic-Zeile
                    !word 10            ; Basic Zeilennummer
                    !byte $9e           ; Basic-Token für SYS-Befehl
                    !text "2061"        ; Startadresse des Programms: 2061/$080D
                    !byte 0             ; Basic-Zeilenende
+                   !word 0             ; Basic-Programmende

; ----- @Hauptprogramm@ -----

                    lda #0
                    sta $d020           ; Rahmenfarbe schwarz
                    
                    lda hintergrundfarbe
                    sta $d021           ; Hintergrundfarbe

                                        ; Bitmapmodus einschalten
                    
                    lda #%00111011      ; Bit 7:   0= Bit8 von $D012 = 0
                    sta $d011           ; Bit 6:   0= "Extended Color Modus" aus
                                        ; Bit 5:   1= Bitmapmodus ein
                                        ; Bit 4:   1= Bild ein
                                        ; Bit 3:   1= 25 Zeilen
                                        ; Bit 2-0: 011= Y-Pixeloffset (Standard)

                                        ; Multicolormodus einschalten

                    lda #%00011000      ; Bit 5-7: unbenutzt
                    sta $d016           ; Bit 4:   1 = Multicolormodus an  
                                        ; Bit 3:   1 = 40 Spalten
                                        ; Bit 0-2: X-Pixeloffset = 0 

                                        ; Bitmap = $2000, Bildschirm = $0400
                                        
                    lda #%00011000      ; Bit 7-4: Offset Bildschirmspeicher
                    sta $d018           ;          in $0400-Schritten
                                        ; Bit 3:   1= Bitmap-Offset $2000
                                        ; Bit 2-0: unbenutzt im Bitmapmodus


; ----- @Kopierschleife@ -----

                    ldx #0
                    
-                   lda screen,x        ; Daten in Bildschirmspeicher kopieren
                    sta $0400,x
                    lda screen+$0100,x
                    sta $0500,x
                    lda screen+$0200,x
                    sta $0600,x
                    lda screen+$02e8,x
                    sta $06e8,x

                    lda farbram,x       ; Daten in Farbram kopieren
                    sta $d800,x
                    lda farbram+$0100,x
                    sta $d900,x
                    lda farbram+$0200,x
                    sta $da00,x
                    lda farbram+$02e8,x
                    sta $dae8,x

                    inx
                    bne -

                    jmp *               ; Endlosschleife
                    
; ----- @Grafikdaten einbinden@ -----
                    
                    *=$2000             ; externes Koalabild einbinden
                                        ; Dateigröße= 10003 Bytes (mit Ladeadr.)

                                        ; !bin Name, Byteanzahl, Startoffset

bitmap:             !bin "bild.koa",8000,2           
screen:             !bin "bild.koa",1000,2+8000
farbram:            !bin "bild.koa",1000,2+9000
hintergrundfarbe:   !bin "bild.koa",1   ,2+10000