CLI

Aus C64-Wiki
Wechseln zu: Navigation, Suche
Mnemonic: CLI
Opcode: $58
Anzahl der Bytes: 1
Befehlsgruppe: Flaggen-Befehl
Adressierung: implizit
Beeinflusste Flags im Statusregister:
Interrupt-Flag
Taktzyklen: 2


Der Assembler-Befehl CLI löscht das Interrupt-Flag und lässt maskierbare Interrupts (IRQ) wieder zu.
Mit dem Assembler-Befehl SEI können Interrupts gesperrt werden (nicht jedoch NMIs).

Funktionsprinzip

Ass befehl 58.gif

Bedeutung der Buchstaben im Befehl

CLI CLear Interrupt flag
Lösche Unterbrechungs-Flagge

Beispiel

; Dieses Programm erweitert die originale Interrupt-Service-Routine.
; Solange der Feuerknopf am Joystick des Control-Port 2 gedrückt wird, flimmert der Bildschirmrahmen.  
; Nach der Rückkehr ins Basic ist die Routine natürlich immer noch aktiv.
; Programmstart mit SYS 49152

*=$c000   ; Startadresse des Programms

	sei		; Interrupts sperren
	lda #<isr 
	sta $0314	; Vektor für neue Interrupt Service-Routine ändern
	lda #>isr
	sta $0315 
	cli		; Interrupts zulassen
	rts

isr	lda #%00010000	; Feuerknopf-Bit des Control-Port 2 maskieren 
	bit $dc00	; Bitweise UND-Verknüpfung dem Inhalt des Registers PRA des CIA 1 
	bne nicht	; wenn Feuerknopf nicht gedrückt --> Sprung in alte IRQ-Routine 
	inc $d020 	; wenn Feuerknopf gedrückt --> VIC-Register Rahmenfarbe um 1 erhöhen
nicht	jmp $ea31	; Sprung in die alte IRQ-Routine		

Speicherauszug:

.c000	 78		sei
.c001	 a9 0d		lda #$0d
.c003	 8d 14 03	sta $0314
.c006	 a9 c0		lda #$c0
.c008	 8d 15 03	sta $0315
.c00b	 58		cli
.c00c	 60		rts
.c00d	 a9 10		lda #$10
.c00f	 2c 00 dc	bit $dc00
.c012	 d0 03		bne $c017
.c014	 ee 20 d0	inc $d020
.c017	 4c 31 ea	jmp $ea31

Vergleich des Beispielprogramms mit Basic

Keine vergleichbare BASIC-Befehlsfolge vorhanden.

Weblinks