![[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
    Write
        .page  
        .subttl 'lccwrt1.src'
 
;    write out data buffer
jwright cmp  #$10       ;  test if write
        beq  1$
        jmp  jvrfy        
1$	jsr  chkblk     ;  get block checksum
	sta  chksum
        lda  dskcnt	;  test for write protect
        and  #$10
        bne  2$		;  not  protected
        lda  #8         ;  write protect error
        jmp  jerrr        
2$	jsr  bingcr     ;  convert buffer to write image
        jsr  jsrch      ;  find header
        ldy  #gap1-2    ;  wait out header gap
3$	bit  pota1
	bmi  3$
	bit  byt_clr
        dey     	;  test if done yet
        bne  3$
        lda  #$ff       ;  make output $ff
        sta  ddra2       
        lda  pcr2	;  set write mode
        and  #$ff-$e0   ;  0=wr
	ora  #$c0
        sta  pcr2
        lda  #$ff       ;  write 4 gcr sync
        ldy  #numsyn    
        sta  data2       
4$	bit  pota1
	bmi  4$
	bit  byt_clr
        dey      
        bne  4$
; write out overflow buffer
        ldy  #256-topwrt  
5$	lda  ovrbuf,y   ; get a char
6$	bit  pota1
	bmi  6$
        sta  data2      ;  stuff it
        iny      
        bne  5$		;  do next char
			;  write rest of buffer
7$	lda  (bufpnt),y ;  now do buffer
8$	bit  pota1	;  wait until ready
	bmi  8$
        sta  data2      ;  stuff it again
        iny      	;  test if done
        bne  7$		;  do the whole thing
9$	bit  pota1	;  wait for last char to write out
	bmi  9$
        lda  pcr2	;  goto read mode
	ora  #$e0
        sta  pcr2
        lda  #0         ;  make data2 input $00
        sta  ddra2       
        jsr  jwtobin    ;  convert write image to binary
        ldy  jobn       ;  make job a verify
;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
	jmp  ptch62	; *** rom ds 86 ***, chk for verify
;       lda  jobs,y      
        eor  #$30        
        sta  jobs,y      
        jmp  jseak      ;  scan job que
;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
;    * jwtobin
;    convert write image back to
;    binary data
jwtobin lda  #0
	sta  savpnt     
	sta  bufpnt     ;  lsb for overflow area
	sta  nxtpnt  
        lda  bufpnt+1   
        sta  nxtbf      ;  save for next buffer.
        lda  #>ovrbuf	;  overflow first
        sta  bufpnt+1   ;  msb for overflow area
        sta  savpnt+1
        lda  #256-topwrt 
        sta  gcrpnt     ;  offset
        sta  bytcnt     ;  ditto
        jsr  jget4gb    ;  get first four- id and 3 data
        lda  btab       ;  save bid
        sta  bid         
        ldy  bytcnt      
        lda  btab+1      
        sta  (savpnt),y
        iny      
        lda  btab+2      
        sta  (savpnt),y
        iny      
        lda  btab+3      
        sta  (savpnt),y
        iny      
        sty  bytcnt      
; do overflow first and store back into overflow buffer
1$	jsr  jget4gb    ; do rest of overflow buffer
        ldy  bytcnt      
        lda  btab        
        sta  (savpnt),y
        iny      
        lda  btab+1      
        sta  (savpnt),y
        iny      
        beq  2$
        lda  btab+2      
        sta  (savpnt),y
        iny      
        lda  btab+3      
        sta  (savpnt),y
        iny      
        sty  bytcnt      
        bne  1$		;  jmp till end of overflow buffer
2$      lda  btab+2      
        sta  (bufpnt),y          
        iny      
        lda  btab+3      
        sta  (bufpnt),y          
        iny      
        sty  bytcnt      
3$	jsr  jget4gb      
        ldy  bytcnt      
        lda  btab        
        sta  (bufpnt),y          
        iny      
        lda  btab+1      
        sta  (bufpnt),y          
        iny      
        lda  btab+2      
        sta  (bufpnt),y          
        iny      
        lda  btab+3      
        sta  (bufpnt),y          
        iny      
        sty  bytcnt      
        cpy  #187
        bcc  3$
	lda  #69		;  move buffer up
        sta  savpnt      
        lda  bufpnt+1    
        sta  savpnt+1    
        ldy  #256-topwrt-1
4$	lda  (bufpnt),y          
        sta  (savpnt),y          
        dey      
        bne  4$
        lda  (bufpnt),y          
        sta  (savpnt),y          
; load in overflow
        ldx  #256-topwrt
5$	lda  ovrbuf,x    
        sta  (bufpnt),y          
        iny      
        inx      
        bne  5$
        stx  gcrflg     ; clear buffer gcr flag
        rts      
;    * verify data block
;   convert to gcr verify image
;   test against data block
;   convert back to binary
jvrfy   cmp  #$20       ;  test if verify
        beq  1$
        bne  7$		; bra
1$      jsr  chkblk     ; get block checksum
	sta  chksum
        jsr  bingcr     ; convert to verify image
        jsr  jdstrt       
        ldy  #256-topwrt
2$	lda  ovrbuf,y   ;  get char
3$	bit  pota1
	bmi  3$
        eor  data2      ;  test if same
        bne  4$		; verify error
        iny      
        bne  2$		;  next byte
5$	lda  (bufpnt),y ;  now do buffer
6$	bit  pota1
	bmi  6$
        eor  data2      ;  test if same
        bne  4$		;  error
        iny      
        cpy  #$fd       ;  dont test off bytes
        bne  5$
	beq  8$		;  bra
7$	jsr  jsrch      ;  sector seek
8$	lda  #1
	.byte  skip2
4$	lda  #7         ;  verify error
        jmp  jerrr
 ![[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)