STX $hhll
Aus C64-Wiki
Zur Navigation springenZur Suche springenMnemonic: | 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
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