![[Contents]](/images/blue_toc.gif) 
 ![[Commodore]](/images/blue_cbm.gif) 
 ![[New]](/images/blue_new.gif) 
![[Search]](/images/blue_search.gif) 
![[Home]](/images/blue_home.gif) 
Commodore 1571 firmware
    Interrupt routine
        .page  
	.subttl 'irq1541.src'   
irq	pha
	txa
	pha
	tya
	pha
	lda  icr
	and  #8
	beq  1$		; fast serial request
	bit  lock	; locked ?
	bmi  1$
	lda  pota1	; change to 2 Mhz
	ora  #$20
	sta  pota1
        lda  #<jirq
	sta  irqjmp
        lda  #>jirq
	sta  irqjmp+1	; re-vector irq
	lda  #tim2	; 8 ms irq's at 2 Mhz - controller irq's
	sta  t1hl2
	sta  t1hc2	; adjust timers for 2 Mhz 
	lda  #0
	sta  nxtst	; not a vector
	jmp  irq_0
1$	lda  ifr1
        and  #2          
        beq  2$		;  not atn
        jsr  atnirq     ;  handle atn request
2$	lda  ifr2       ;  test if timer
        asl  a   
        bpl  3$		;  not timer
        jsr  lcc        ;  goto controller
3$ 	tsx
	lda  $0104,x	; check processor break flag
	and  #$10
	beq  4$
	jsr  lcc
4$	pla     	; restore .y, .x, .a
        tay      
        pla      
        tax      
        pla      
        rti
 ![[Contents]](/images/blue_toc.gif) 
 ![[Commodore]](/images/blue_cbm.gif) 
 ![[New]](/images/blue_new.gif) 
![[Search]](/images/blue_search.gif) 
![[Home]](/images/blue_home.gif)