STX $hhll

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Mnemonic: STX $hhll
Opcode: $8E
Operand(en): $ll $hh
Anzahl der Bytes: 3
Befehlsgruppe: Datentransferbefehl
Adressierung: absolut
Beeinflusste Flags im Statusregister:
keine
Taktzyklen: 4


Der Assembler-Befehl STX $hhll speichert den Wert des X-Registers in die Speicherzelle $hhll.
Der Wert des Registers ist dabei im Bereich von 0 bis 255 ($ff).

Funktionsprinzip

Ass befehl 8e.gif

Bedeutung der Buchstaben im Befehl

STX STore X-Register
Speichere X-Register

Beispiel

; Diese Programm spielt solange einen Ton, bis eine Taste gedrückt wird.
; Programmstart mit SYS 49152

*=$c000   ; Startadresse des Programms
   
GETIN          = $ffe4  
                          ; SID-Register: (Stimme 1)
ST1_FREQ_L     = $d400    ; Frequenz (High- und Low-Byte)
ST1_FREQ_H     = $d401
ST1_WELLENFORM = $d404    ; Wellenform
ST1_ANSCHLAG   = $d405    ; Anschlag ($0. hart   - $f. weich) ; Abschwellen ($.0 hart    - $.f weich)
ST1_HALTEN     = $d406    ; Halten   ($0. stumm  - $f. laut)  ; Ausklingen  ($.0 schnell - $.f langsam)
LAUTST         = $d418    ; Bit 0-3 = Lautstärke ($00 stumm ... $0f laut)

DREIECK        = $11
SAEGEZAHN      = $21
RECHTECK       = $41
RAUSCHEN       = $81

ein      ldx #$0f            ; Tonerzeugung
         stx LAUTST

         ldx #$19
         stx ST1_ANSCHLAG
         ldx #$44
         stx ST1_HALTEN

         ldx #$1d
         stx ST1_FREQ_H
         ldx #$45
         stx ST1_FREQ_L

         ldx #DREIECK
         stx ST1_WELLENFORM

eingabe  jsr GETIN           
         beq eingabe         ; warte auf Tastendruck

aus      ldx #$00            ; Ton abschalten
         stx ST1_WELLENFORM
         stx ST1_ANSCHLAG
         stx ST1_HALTEN
         rts


.c000 a2 0f     ldx #$0f
.c002 8e 18 d4  stx $d418
.c005 a2 19     ldx #$19
.c007 8e 05 d4  stx $d405
.c00a a2 44     ldx #$44
.c00c 8e 06 d4  stx $d406
.c00f a2 1d     ldx #$1d
.c011 8e 01 d4  stx $d401
.c014 a2 45     ldx #$45
.c016 8e 00 d4  stx $d400
.c019 a2 11     ldx #$11
.c01b 8e 04 d4  stx $d404
.c01e 20 e4 ff  jsr $ffe4
.c021 f0 fb     beq $c01e
.c023 a2 00     ldx #$00
.c025 8e 04 d4  stx $d404
.c028 8e 05 d4  stx $d405
.c02b 8e 06 d4  stx $d406
.c02e 60        rts

Vergleich des Beispielprogramms mit BASIC

Für BASIC V2:

10 SI=54272: FL=SI: FH=SI+1: W=SI+4: A=SI+5: H=SI+6: L=SI+24
20 POKE L,15
30 POKE A,16+9
40 POKE H, 4*16+4
50 POKE FH,29: POKE FL,69
60 POKE W,17
70 GET A$: IF A$="" THEN 70
80 POKE W,0: POKE A,0: POKE H,0  

Beispielprogramme