Assembler-Beispiel 86 - STX $ll.asm

Aus C64-Wiki
Zur Navigation springenZur Suche springen
; Diese Programm gibt das Disketten-Inhaltsverzeichnis verlustfrei aus.
; Ein vorhandenes Basic-Programm wird nicht überschrieben!
; Programmstart mit SYS 49152

*=$c000         ; Startadresse des Programms

BOPEN    = $ffc0
BCLOSE   = $ffc3
INCMD    = $ffc6
CMDOFF   = $ffcc
INCHAR   = $ffe4
OUTCHAR  = $ffd2
OUTADRES = $bdcd

start       lda #$93        ; Bildschirm löschen
            jsr OUTCHAR

            ldx #$01        ; logische Dateinummer
            stx $b8
            ldx #$08        ; Gerätenummer
            stx $ba
            ldx #$00        ; Sekundäradresse
            stx $b9
            ldx #$01        ; Länge des Dateinamens
            stx $b7               
            lda #<dateiname ; Zeiger auf Dateiname
            ldx #>dateiname
            sta $bb
            stx $bc              
            jsr BOPEN       ; Inhaltsverzeichnis als Programmdatei eröffnen

            ldx #$01
            jsr INCMD       ; Eingabegerät setzten
            jsr INCHAR      ; Startadresse LSB lesen und ignorieren
            jsr INCHAR      ; Startadresse MSB lesen und ignorieren
            jsr INCHAR      ; Link-Adresse LSB lesen und ignorieren
zeile       jsr INCHAR      ; Link-Adresse MSB lesen und ignorieren

            jsr INCHAR      ; Blockanzahl LSB lesen und in Zeropage $02 speichern
            sta $02
            jsr INCHAR      ; Blockanzahl MSB lesen (Akku)
            ldx $02         ; Blockanzahl LSB ins X-Register
            jsr OUTADRES    ; Blockanzahl (16 Bit) in Dezimalzahl wandeln und am Bildschirm ausgeben

zeichen     jsr INCHAR      ; Zeichen lesen
            jsr OUTCHAR     ; Zeichen ausgeben
            cmp #$00        ; Zeilenende?
            bne zeichen     ; wiederhole bis Zeilenende erreicht

            lda #$0d        ; Zeilenvorschub ausgeben
            jsr OUTCHAR

            jsr INCHAR      ; Link-Adresse LSB lesen
            cmp #$00        ; immer ungleich 0, solange noch ein Eintrag
            bne zeile       ; wiederhole bis Dateiende erreicht

            jsr CMDOFF      ; Beendet Datenein-/ausgabe der Datei (auf Tastatur setzen)

            lda #$01 
            jsr BCLOSE      ; Datei mit Dateinummer 1 schließen

            rts             ; Rücksprung ins BASIC

dateiname   .byte "$"