mirror of
https://github.com/irmen/prog8.git
synced 2024-10-17 10:24:55 +00:00
removed diskio.f_read_exact() - wasn't worth it over f_read()
This commit is contained in:
parent
db314ed903
commit
9fc0c3f849
@ -51,7 +51,7 @@ io_error:
|
|||||||
c64.CLRCHN() ; restore default i/o devices
|
c64.CLRCHN() ; restore default i/o devices
|
||||||
c64.CLOSE(13)
|
c64.CLOSE(13)
|
||||||
|
|
||||||
if status and status != 64 { ; 64=end of file TODO only check bit 6 instead of value
|
if status and status & $40 == 0 { ; bit 6=end of file
|
||||||
txt.print("\ni/o error, status: ")
|
txt.print("\ni/o error, status: ")
|
||||||
txt.print_ub(status)
|
txt.print_ub(status)
|
||||||
txt.nl()
|
txt.nl()
|
||||||
@ -249,6 +249,7 @@ close_end:
|
|||||||
repeat num_bytes {
|
repeat num_bytes {
|
||||||
%asm {{
|
%asm {{
|
||||||
jsr c64.CHRIN
|
jsr c64.CHRIN
|
||||||
|
sta cx16.r5
|
||||||
_in_buffer sta $ffff
|
_in_buffer sta $ffff
|
||||||
inc _in_buffer+1
|
inc _in_buffer+1
|
||||||
bne +
|
bne +
|
||||||
@ -258,66 +259,18 @@ _in_buffer sta $ffff
|
|||||||
inc list_blocks+1
|
inc list_blocks+1
|
||||||
+
|
+
|
||||||
}}
|
}}
|
||||||
first_byte = c64.READST() ; TODO optimize: only check status when char was read as $0d
|
|
||||||
if first_byte==64 ; TODO only check bit 6 rather than value
|
if cx16.r5==$0d { ; chance on I/o error status?
|
||||||
f_close() ; end of file, close it
|
first_byte = c64.READST()
|
||||||
if first_byte
|
if first_byte & $40
|
||||||
return list_blocks
|
f_close() ; end of file, close it
|
||||||
|
if first_byte
|
||||||
|
return list_blocks
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return list_blocks
|
return list_blocks
|
||||||
}
|
}
|
||||||
|
|
||||||
sub f_read_exact(uword bufferpointer, uword num_bytes) {
|
|
||||||
; -- read from the currently open file, the given number of bytes. File must contain enough data!
|
|
||||||
; doesn't check for error conditions or end of file, to make the read as fast as possible.
|
|
||||||
; TODO get rid of this once f_read has been optimized
|
|
||||||
if not iteration_in_progress or not num_bytes
|
|
||||||
return
|
|
||||||
|
|
||||||
if have_first_byte {
|
|
||||||
have_first_byte=false
|
|
||||||
@(bufferpointer) = first_byte
|
|
||||||
bufferpointer++
|
|
||||||
num_bytes--
|
|
||||||
}
|
|
||||||
|
|
||||||
void c64.CHKIN(11) ; use #11 as input channel again
|
|
||||||
; repeat num_bytes {
|
|
||||||
; @(bufferpointer) = c64.CHRIN()
|
|
||||||
; bufferpointer++
|
|
||||||
; }
|
|
||||||
%asm {{
|
|
||||||
lda bufferpointer
|
|
||||||
sta P8ZP_SCRATCH_W1
|
|
||||||
lda bufferpointer+1
|
|
||||||
sta P8ZP_SCRATCH_W1+1
|
|
||||||
lda #0
|
|
||||||
sta P8ZP_SCRATCH_B1
|
|
||||||
lda num_bytes+1
|
|
||||||
sta P8ZP_SCRATCH_W2
|
|
||||||
beq _no_msb
|
|
||||||
- jsr c64.CHRIN
|
|
||||||
ldy P8ZP_SCRATCH_B1
|
|
||||||
sta (P8ZP_SCRATCH_W1),y
|
|
||||||
inc P8ZP_SCRATCH_B1
|
|
||||||
bne -
|
|
||||||
inc P8ZP_SCRATCH_W1+1
|
|
||||||
dec P8ZP_SCRATCH_W2
|
|
||||||
bne -
|
|
||||||
_no_msb
|
|
||||||
lda num_bytes
|
|
||||||
beq _done
|
|
||||||
- jsr c64.CHRIN
|
|
||||||
ldy P8ZP_SCRATCH_B1
|
|
||||||
sta (P8ZP_SCRATCH_W1),y
|
|
||||||
iny
|
|
||||||
sty P8ZP_SCRATCH_B1
|
|
||||||
cpy num_bytes
|
|
||||||
bne -
|
|
||||||
_done
|
|
||||||
}}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub f_read_all(uword bufferpointer) -> uword {
|
sub f_read_all(uword bufferpointer) -> uword {
|
||||||
; -- read the full contents of the file, returns number of bytes read.
|
; -- read the full contents of the file, returns number of bytes read.
|
||||||
if not iteration_in_progress
|
if not iteration_in_progress
|
||||||
|
@ -41,7 +41,7 @@ iff_module {
|
|||||||
|
|
||||||
while read_chunk_header() {
|
while read_chunk_header() {
|
||||||
if chunk_id == "bmhd" {
|
if chunk_id == "bmhd" {
|
||||||
diskio.f_read_exact(buffer, chunk_size_lo)
|
void diskio.f_read(buffer, chunk_size_lo)
|
||||||
width = mkword(buffer[0], buffer[1])
|
width = mkword(buffer[0], buffer[1])
|
||||||
height = mkword(buffer[2], buffer[3])
|
height = mkword(buffer[2], buffer[3])
|
||||||
num_planes = buffer[8]
|
num_planes = buffer[8]
|
||||||
@ -49,7 +49,7 @@ iff_module {
|
|||||||
compression = buffer[10]
|
compression = buffer[10]
|
||||||
}
|
}
|
||||||
else if chunk_id == "camg" {
|
else if chunk_id == "camg" {
|
||||||
diskio.f_read_exact(buffer, chunk_size_lo)
|
void diskio.f_read(buffer, chunk_size_lo)
|
||||||
camg = mkword(buffer[2], buffer[3])
|
camg = mkword(buffer[2], buffer[3])
|
||||||
if camg & $0800 {
|
if camg & $0800 {
|
||||||
txt.print("ham mode not supported!\n")
|
txt.print("ham mode not supported!\n")
|
||||||
@ -58,13 +58,13 @@ iff_module {
|
|||||||
}
|
}
|
||||||
else if chunk_id == "cmap" {
|
else if chunk_id == "cmap" {
|
||||||
have_cmap = true
|
have_cmap = true
|
||||||
diskio.f_read_exact(cmap, chunk_size_lo)
|
void diskio.f_read(cmap, chunk_size_lo)
|
||||||
}
|
}
|
||||||
else if chunk_id == "crng" {
|
else if chunk_id == "crng" {
|
||||||
; DeluxePaint color cycle range
|
; DeluxePaint color cycle range
|
||||||
if not cycle_ccrt {
|
if not cycle_ccrt {
|
||||||
cycle_crng = true
|
cycle_crng = true
|
||||||
diskio.f_read_exact(buffer, chunk_size_lo)
|
void diskio.f_read(buffer, chunk_size_lo)
|
||||||
ubyte flags = buffer[5]
|
ubyte flags = buffer[5]
|
||||||
if flags & 1 {
|
if flags & 1 {
|
||||||
cycle_rates[num_cycles] = mkword(buffer[2], buffer[3])
|
cycle_rates[num_cycles] = mkword(buffer[2], buffer[3])
|
||||||
@ -81,7 +81,7 @@ iff_module {
|
|||||||
; Graphicraft color cycle range
|
; Graphicraft color cycle range
|
||||||
if not cycle_crng {
|
if not cycle_crng {
|
||||||
cycle_ccrt = true
|
cycle_ccrt = true
|
||||||
diskio.f_read_exact(buffer, chunk_size_lo)
|
void diskio.f_read(buffer, chunk_size_lo)
|
||||||
ubyte direction = buffer[1]
|
ubyte direction = buffer[1]
|
||||||
if direction {
|
if direction {
|
||||||
; delay_sec = buffer[4] * 256 * 256 * 256 + buffer[5] * 256 * 256 + buffer[6] * 256 + buffer[7]
|
; delay_sec = buffer[4] * 256 * 256 * 256 + buffer[5] * 256 * 256 + buffer[6] * 256 + buffer[7]
|
||||||
@ -142,9 +142,9 @@ iff_module {
|
|||||||
|
|
||||||
sub skip_chunk() {
|
sub skip_chunk() {
|
||||||
repeat lsb(chunk_size_hi)*8 + (chunk_size_lo >> 13)
|
repeat lsb(chunk_size_hi)*8 + (chunk_size_lo >> 13)
|
||||||
diskio.f_read_exact(scanline_data_ptr, $2000)
|
void diskio.f_read(scanline_data_ptr, $2000)
|
||||||
|
|
||||||
diskio.f_read_exact(scanline_data_ptr, chunk_size_lo & $1fff)
|
void diskio.f_read(scanline_data_ptr, chunk_size_lo & $1fff)
|
||||||
}
|
}
|
||||||
|
|
||||||
sub make_ehb_palette() {
|
sub make_ehb_palette() {
|
||||||
@ -189,9 +189,9 @@ iff_module {
|
|||||||
ubyte interlaced = (camg & $0004) != 0
|
ubyte interlaced = (camg & $0004) != 0
|
||||||
uword y
|
uword y
|
||||||
for y in 0 to height-1 {
|
for y in 0 to height-1 {
|
||||||
diskio.f_read_exact(scanline_data_ptr, interleave_stride)
|
void diskio.f_read(scanline_data_ptr, interleave_stride)
|
||||||
if interlaced
|
if interlaced
|
||||||
diskio.f_read_exact(scanline_data_ptr, interleave_stride)
|
void diskio.f_read(scanline_data_ptr, interleave_stride)
|
||||||
gfx2.position(offsetx, offsety+y)
|
gfx2.position(offsetx, offsety+y)
|
||||||
planar_to_chunky_scanline()
|
planar_to_chunky_scanline()
|
||||||
}
|
}
|
||||||
|
@ -11,11 +11,12 @@ koala_module {
|
|||||||
if diskio.f_open(8, filenameptr) {
|
if diskio.f_open(8, filenameptr) {
|
||||||
uword size = diskio.f_read(load_location, 2) ; skip the first 2 bytes (load address)
|
uword size = diskio.f_read(load_location, 2) ; skip the first 2 bytes (load address)
|
||||||
if size==2 {
|
if size==2 {
|
||||||
diskio.f_read_exact(load_location, 10001)
|
if diskio.f_read(load_location, 10001)==10001 {
|
||||||
; set a better C64 color palette, the Cx16's default is too saturated
|
; set a better C64 color palette, the Cx16's default is too saturated
|
||||||
palette.set_c64pepto()
|
palette.set_c64pepto()
|
||||||
convert_koalapic()
|
convert_koalapic()
|
||||||
load_ok = true
|
load_ok = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
diskio.f_close()
|
diskio.f_close()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user