[Contents] [Commodore] [New] [Search] [Home]

Commodore 1571 firmware
Drive initialization

        .page  
        .subttl 'dskintsf.src'       

; error display routine
; blinks the (error #)+1 in all three leds

pezro   ldx  #0         ; error #1 for zero page
	.byte skip2     ; skip next two bytes
perr    ldx  temp       ; get error #
        txs     	; use stack as storage reg.
pe20    tsx     	; restore error #
pe30    lda  #led0+led1          
        ora  ledprt      
        jmp  pea7a       

; turn on led !!!!patch so ddrb led is output!!!!

rea7d   tya     	; clear inner ctr !!!!patch return!!!!
pd10    clc      
pd20    adc  #1         ; count inner ctr
        bne  pd20        
        dey     	; done ?
        bne  pd10       ; no

        lda  ledprt      
        and  #$ff-led0-led1      
        sta  ledprt     ; turn off all leds
pe40            	; wait
        tya     	; clear inner ctr
pd11    clc      
pd21    adc  #1         ; count inner ctr
        bne  pd21        
        dey     	; done ?
        bne  pd11       ; no

        dex     	; blinked # ?
        bpl  pe30       ; no - blink again
        cpx  #$fc       ; waited between counts ?
        bne  pe40       ; no
        beq  pe20       ; always - all again

dskint  sei      
        cld      
        ldx  #$66	; *,atnout,clk,*,*,side,fsdir,trk0
        jmp  patch5     ; *** rom ds83 ***
dkit10  inx		; fill		

;*********************************
;
; power up diagnostic
;
;*********************************

        ldy  #0          
        ldx  #0          
pu10    txa     	; fill z-page accend pattern
        sta  $0,x        
        inx      
        bne  pu10        
pu20    txa     	; check pattern by inc...
        cmp  $0,x       ; ...back to orig #
        bne  pezro      ; bad bits
pu30             
	inc  $0,x       ; bump contents
        iny      
        bne  pu30       ; not done

        cmp  $0,x       ; check for good count
        bne  pezro      ; something's wrong

        sty  $0,x       ; leave z-page zeroed
        lda  $0,x       ; check it
        bne  pezro      ; wrong

        inx     	; next!
        bne  pu20       ; not all done


; test 32k byte rom 

; enter x=start page
; exit if ok

rm10    inc  temp       ; next error #
	ldx  #127	; 128 pages
        stx  ip+1       ; save page, start x=0
	inx		; **** rom ds 86 ***
	lda  #0          
        sta  ip         ; zero lo indirect
	ldy  #2		; skip signature bytes
        clc      
rt10    inc  ip+1       ; do it backwards
rt20    adc  (ip),y     ; total checksum in a
        iny      
        bne  rt20        

        dex      
        bne  rt10        

        adc  #255        ; add in last carry
	sta  ip+1
        bne  perr2      ; no - show error number

; **** rom ds 86 ***

	nop		 ; fill
	nop		 ; fill
	nop		 ; fill

;----------------------------------

; test all common ram

cr20    lda  #$01       ; start of 1st block
cr30    sta  ip+1       ; save page #
        inc  temp       ; bump error #

; enter x=# of pages in block
; ip ptr to first page in block
; exit if ok

ramtst  ldx  #7         ; save page count
ra10    tya     	; fill with adr sensitive pattern
        clc      
        adc  ip+1        
        sta  (ip),y      
        iny      
        bne  ra10        
        inc  ip+1        
        dex      
        bne  ra10        
        ldx  #7         ; restore page count
ra30    dec  ip+1       ; check pattern backwards
ra40    dey      
        tya     	; gen pattern again
        clc      
        adc  ip+1        
        cmp  (ip),y     ; ok ?
        bne  perr2      ; no - show error #
        eor  #$ff       ; yes - test inverse pattern
        sta  (ip),y      
        eor  (ip),y     ; ok ?
        sta  (ip),y     ; leave memory zero
        bne  perr2      ; no - show error #
        tya      
        bne  ra40        
        dex      
        bne  ra30        

        beq  diagok      

perr2   jmp  perr        

diagok  
;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>

	jmp  ptch31	; *** rom ds 85 ***
;       ldx  #topwrt     
;       txs      

;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>

rtch31  lda  ledprt     ; clear leds
        and  #$ff-led0-led1      
        sta  ledprt      

        lda  #3         ; neg edge of atn & edge on wp
        sta  pcr1        
        lda  #%10000010 ; set,_t1,_t2,_cb1,_cb2,_sr,ca1,_ca2(wps)
        sta  ifr1        
	sta  ier1        
        lda  pb         ; compute primary addr
        and  #%01100000 ; pb5 and pb6 are unused lines
        asl  a          ; shift to lower
        rol  a   
        rol  a   
        rol  a   
        ora  #$48       ; talk address
        sta  tlkadr      
        eor  #$60       ; listen address
        sta  lsnadr      

; initialize buffer pntr table

inttab  ldx  #0          
        ldy  #0          
intt1   lda  #0          
        sta  buftab,x    
        inx      
        lda  bufind,y    
        sta  buftab,x    
        inx      
        iny      
        cpy  #bfcnt      
        bne  intt1       

        lda  #<cmdbuf   ; set pntr to cmdbuf
        sta  buftab,x    
        inx      
        lda  #>cmdbuf
        sta  buftab,x    
        inx      
        lda  #<errbuf   ; set pntr to errbuf
        sta  buftab,x    
        inx      
        lda  #>errbuf
        sta  buftab,x    

        lda  #$ff        
        ldx  #maxsa      
dskin1  sta  lintab,x    
        dex      
        bpl  dskin1      

        ldx  #mxchns-1   
dskin2           
        sta  buf0,x     ; set buffers as unused
        sta  buf1,x      
        sta  ss,x        
        dex      
        bpl  dskin2      

        lda  #bfcnt     ; set buffer pointers
        sta  buf0+cmdchn         
        lda  #bfcnt+1    
        sta  buf0+errchn         
        lda  #$ff        
        sta  buf0+blindx         
        sta  buf1+blindx         

        lda  #errchn     
        sta  lintab+errsa        
        lda  #cmdchn+$80         
        sta  lintab+cmdsa        
        lda  #lxint     ; lindx 0 to 5 free
        sta  linuse      

        lda  #rdylst     
        sta  chnrdy+cmdchn       
        lda  #rdytlk     
        sta  chnrdy+errchn       
        lda  #$e0        
        sta  bufuse      
        lda  #$ff        
        sta  bufuse+1    

;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>

	jsr  ptch72	; *** rom ds 86 ***
	nop
;       lda  #1          
;       sta  wpsw        

;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>

        sta  wpsw+1      
        jsr  usrint     ; init user jmp
        jsr  lruint      

;**********************************
;
; controller initialization
;
;**********************************

        jsr  ptch10     ; *** rom ds 85 controller init ***
;       jsr  cntint

; set indirect vectors

        lda  #<diagok    
        sta  vnmi        
        lda  #>diagok    
        sta  vnmi+1      

        lda  #6	        ; set up sector offset *** rom ds 85 ***
        sta  secinc      
        lda  #5          
        sta  revcnt     ; set up recovery count

;*
;*******************************
;*
;*    seterr
;*    set up power on error msg
;*
;*******************************
;*
;*
seterr  lda  #$73        
        jsr  errts0      


;must be contiguous to .file idle

;********************************
; init the serial bus
;
;********************************

;-------rom -0583-----------------
        lda  #$00       ;  data hi, clock hi,atna hi
        sta  pb          
        lda  #%00011010 ;  atna,clkout,datout
        sta  ddrb1       
;---------------------------------------
    	jsr  ptch29	; *rom ds 85*
;       jsr  boot


[Contents] [Commodore] [New] [Search] [Home]
This page has been created by Sami Rautiainen.
Read the small print. Last updated March 24, 1998.