STX $ll

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Mnemonic: STX $ll
Opcode: $86
Operand(en): $ll
Anzahl der Bytes: 2
Befehlsgruppe: Datentransferbefehl
Adressierung: Zeropage
Beeinflusste Flags im Statusregister:
keine
Taktzyklen: 3


Der Assembler-Befehl STX $ll speichert den Wert des X-Registers in die Speicherstelle mit der Zeropage-Adresse $ll.
Der Wert des Registers ist ein Wert im Bereich von 0 bis 255 ($ff).

Funktionsprinzip

Ass befehl 86.gif

Bedeutung der Buchstaben im Befehl

STX STore X-Register
Speichere X-Register

Beispiel

; 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 "$"


.c000  a9 93     lda #$93
.c002  20 d2 ff  jsr $ffd2
.c005  a2 01     ldx #$01
.c007  86 b8     stx $b8
.c009  a2 08     ldx #$08
.c00b  86 ba     stx $ba
.c00d  a2 00     ldx #$00
.c00f  86 b9     stx $b9
.c011  a2 01     ldx #$01
.c013  86 b7     stx $b7
.c015  a9 5d     lda #$5d
.c017  a2 c0     ldx #$c0
.c019  85 bb     sta $bb
.c01b  86 bc     stx $bc
.c01d  20 c0 ff  jsr $ffc0
.c020  a2 01     ldx #$01
.c022  20 c6 ff  jsr $ffc6
.c025  20 e4 ff  jsr $ffe4
.c028  20 e4 ff  jsr $ffe4
.c02b  20 e4 ff  jsr $ffe4
.c02e  20 e4 ff  jsr $ffe4
.c031  20 e4 ff  jsr $ffe4
.c034  85 02     sta $02
.c036  20 e4 ff  jsr $ffe4
.c039  a6 02     ldx $02		
.c03b  20 cd bd  jsr $bdcd
.c03e  20 e4 ff  jsr $ffe4
.c041  20 d2 ff  jsr $ffd2
.c044  c9 00     cmp #$00
.c046  d0 f6     bne $c03e
.c048  a9 0d     lda #$0d
.c04a  20 d2 ff  jsr $ffd2
.c04d  20 e4 ff  jsr $ffe4
.c050  c9 00     cmp #$00
.c052  d0 da     bne $c02e
.c054  20 cc ff  jsr $ffcc
.c057  a9 01     lda #$01
.c059  20 c3 ff  jsr $ffc3
.c05c  60        rts
>c05d  24

Beispielprogramme