read - bug fixes.

This commit is contained in:
Kelvin Sherlock 2015-08-21 22:14:13 -04:00
parent d15f7e3af4
commit 9343fcc1a3
1 changed files with 32 additions and 26 deletions

View File

@ -114,7 +114,7 @@ pre
entry set_zone entry set_zone
init_block proc init_block procname
with my_dp with my_dp
@ -133,7 +133,7 @@ init_block proc
; updates block, zone, etc. ; updates block, zone, etc.
; find the block to read. ; find the block to read.
next_block proc next_block procname
with my_dp, dp, v1 with my_dp, dp, v1
@ -169,6 +169,7 @@ read procname export
jsr init_vcr jsr init_vcr
jsr init_fcr jsr init_fcr
~DebugSetTrace #1
; can only read from regular files or links. ; can only read from regular files or links.
lda disk_inode.mode lda disk_inode.mode
@ -272,7 +273,7 @@ eof
rtl rtl
noteof noteof
; if transferCount is 0, just quit now! ; if requestCount is 0, just quit now!
lda requestCount lda requestCount
ora requestCount+2 ora requestCount+2
bne @rc bne @rc
@ -303,23 +304,23 @@ tc
beq eof beq eof
lda transferCount+2 lda requestCount+2
cmp mtc+2 cmp mtc+2
bcc @ok bcc @ok
beq @lw beq @lw
bra @toobig bra @toobig
@lw ; low word @lw ; low word
lda transferCount lda requestCount
cmp mtc cmp mtc
beq @ok beq @ok
bcc @ok bcc @ok
@toobig @toobig
lda mtc lda mtc
sta transferCount sta requestCount
lda mtc+2 lda mtc+2
sta transferCount+2 sta requestCount+2
@ok @ok
@ -353,17 +354,16 @@ normal_read
bcs exit bcs exit
aligned aligned
; while transferCount >= 1024 { read_direct_block } ; while transferCount >= 1024 { read_direct_block }
lda transferCount+2 lda requestCount+2
bne @read bne @read
lda transferCount lda requestCount
beq done beq done
cmp #1024 cmp #1024
bcc tail bcc tail
@read @read
jsr next_block
bcs exit
jsr read_direct_block jsr read_direct_block
bcs exit bcs exit
@ -372,11 +372,9 @@ aligned
tail tail
; read a partial tail block. ; read a partial tail block.
; set up block... ; set up block...
jsr next_block
bcs exit
jsr read_direct_block
bcs exit
jsr read_partial_block
bcs exit
done done
; read complete! ; read complete!
@ -403,6 +401,8 @@ done
lda transferCount+2 lda transferCount+2
sta [param_blk_ptr],y sta [param_blk_ptr],y
~DebugSetTrace #0
lda tool_error lda tool_error
cmp #1 cmp #1
rtl rtl
@ -417,7 +417,7 @@ tc_table dc.w FileIORec.transferCount, IORecGS.transferCount
endp endp
update_counts proc update_counts procname
with my_dp with my_dp
@ -452,20 +452,25 @@ update_counts proc
lda requestCount+2 lda requestCount+2
sbc #0 sbc #0
sta requestCount+2 sta requestCount+2
ora requestCount
beq done
jmp next_block
done
clc
rts rts
endp endp
; todo -- should read block into fcr, update fcr. ; todo -- should read block into fcr, update fcr.
read_partial_block proc read_partial_block procname
; read a block into io_buffer, then copy the parts we want into dataBuffer. ; read a block into io_buffer, then copy the parts we want into dataBuffer.
; a = block number. ; a = block number.
with my_dp, dp with my_dp, dp
jsr read_data_block
_rts.cs
; count = 1024 - (mark & 0x1023) ; count = 1024 - (mark & 0x1023)
lda mark lda mark
@ -485,6 +490,7 @@ read_partial_block proc
@ok @ok
; assume block, etc are set up. ; assume block, etc are set up.
lda io_buffer lda io_buffer
sta dev_parms.dev_buff sta dev_parms.dev_buff
lda io_buffer+2 lda io_buffer+2
@ -508,17 +514,18 @@ read_partial_block proc
jsr memcpy jsr memcpy
jsr update_counts jmp update_counts
clc
exit exit
rts rts
endp endp
read_direct_block proc read_direct_block procname
with dp, my_dp with dp, my_dp
; set up for direct read!
lda dataBuffer lda dataBuffer
sta dev_parms.dev_buff sta dev_parms.dev_buff
lda dataBuffer+2 lda dataBuffer+2
@ -530,14 +537,13 @@ read_direct_block proc
lda #1024 lda #1024
sta count sta count
jsr update_counts jmp update_counts
clc
exit exit
rts rts
endp endp
memcpy proc memcpy procname
; copy from ptr to dataBuffer ; copy from ptr to dataBuffer
; a = count ; a = count