![[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
    Idle loop
        .page 
        .subttl 'idlesf.src'       
; idle loop, waiting for something to do
idle             
        cli      
;  release all bus lines
        lda  pb         ; clock and data high
        and  #$e5       ; clock high
        sta  pb         ; data high,atna hi
        lda  cmdwat     ; test for pending command
        beq  idl1       ; no command waiting
        lda  #0          
        sta  cmdwat      
	nop		; *** rom ds -06 ** fill
	nop		; *** rom ds -06 ** fill
;       sta  nmiflg     ; clear debounce
;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
	jmp  ptch19	; *rom ds 85*
;	jsr  parsxq     ; parse and xeq command
rtch19			; return
;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
idl1    cli     	; test for drive running or openfile
        lda  atnpnd      
        beq  idl01       
;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
	jmp  ptch30	; *rom ds 85*
;       jmp  atnsrv     ; service atn irq
;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
idl01            
        cli      
        lda  #14         
        sta  temp+3      
        lda  #0         ; if file open, turn on act led
        sta  temp        
        sta  temp+1      
idl2    ldx  temp+3     ; look thru lintab
        lda  lintab,x   ; for active file
        cmp  #$ff        
        beq  idl3        
        and  #$3f        
        sta  lindx       
	jsr  getact      
        tax      
        lda  lstjob,x   ; determine which drv it is on
        and  #1          
        tax      
        inc  temp,x      
idl3    dec  temp+3     ; set flag indicating drv
        bpl  idl2       ; has file open
        ldy  #bfcnt-1   ; look thru job que for
idl4    lda  jobs,y     ; for jobs still running
        bpl  idl5        
        and  #1          
        tax      
        inc  temp,x     ; set flag indicating drive
idl5    dey     	; is active
        bpl  idl4        
        sei      
; dont allow irq when reading ledprt 
        lda  ledprt      
        and  #$ff-led0   
        pha      
        lda  drvnum      
        sta  r0          
        lda  #0          
        sta  drvnum      
        lda  temp        
        beq  idl7        
        lda  wpsw        
        beq  idl6        
	jsr  cldchn      
idl6             
        pla     	; turn on led if drive flag
        ora  #led0      ;  if not 0
        pha      
idl7             
        inc  drvnum      
        lda  temp+1      
        beq  idl9        
        lda  wpsw+1      
        beq  idl8        
        jsr  cldchn      
idl8             
        pla      
        ora  #led1       
        pha      
idl9             
        lda  r0          
        sta  drvnum      
        pla      
        ldx  erword      
        beq  idl12      ; no error flashing
        lda  ledprt     ; use current leds
        cpx  #$80        
        bne  idl10      ; not ist time
        jmp  idl11       
idl10            
        ldx  timer1      
        bmi  idl12      ; still timing
        ldx  #$a0       ; count 8 msec
        stx  timer1      
idl11            
        dec  erword     ; count units of 8 msec
        bne  idl12      ; keep counting
        eor  erled      ; toggle led
        ldx  #16        ; count 16 units
        stx  erword      
idl12            
        sta  ledprt     ; set leds
        jmp  idl1       ; back to top of lop
 ![[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)