git-svn-id: http://svn.code.sf.net/p/netboot65/code@186 93682198-c243-4bdb-bd91-e943c89aac3b

This commit is contained in:
jonnosan 2009-08-22 03:23:48 +00:00
parent fbb40c7c98
commit 92530f6b07
3 changed files with 37 additions and 19 deletions

View File

@ -13,6 +13,7 @@
.export io_track_no .export io_track_no
.export io_read_sector .export io_read_sector
.export io_read_catalogue .export io_read_catalogue
.export io_read_catalogue_ex
.export io_read_file_with_callback .export io_read_file_with_callback
.export io_filename .export io_filename
@ -38,17 +39,19 @@ READST = $ffb7
SETNAM = $ffbd SETNAM = $ffbd
SETLFS = $ffba SETLFS = $ffba
.bss .segment "SELF_MODIFIED_CODE"
io_track_no: .res 2 io_track_no: .res 2
io_sector_no: .res 1 io_sector_no: .res 1
io_device_no: .res 1 io_device_no: .byte 0
io_filename: .res 2 io_filename: .res 2
error_buffer = output_buffer + 256 error_buffer = output_buffer + 256
command_buffer = error_buffer+128 command_buffer = error_buffer+128
sector_buffer_address: .res 2 sector_buffer_address: .res 2
buffer_counter: .res 1 buffer_counter: .res 1
.data extended_catalogue_flag: .res 1
drive_id: .byte 08 ;default to drive 8 drive_id: .byte 08 ;default to drive 8
jmp_to_callback: jmp_to_callback:
@ -61,7 +64,7 @@ tmp_buffer_ptr=write_byte_to_buffer+1
sta $ffff sta $ffff
inc tmp_buffer_ptr inc tmp_buffer_ptr
bne :+ bne :+
inc tmp_buffer_ptr inc tmp_buffer_ptr+1
: :
rts rts
@ -176,14 +179,29 @@ parse_filename:
ldy buffer_ptr+1 ldy buffer_ptr+1
rts rts
;routine to catalogue disk ;routine to catalogue disk (with filename, filetype, filesize)
; io_device_number set to specify drive to use ($00 = same as last time, $01 = first disk (i.e. #8), $02 = 2nd disk (drive #9)) ; io_device_number set to specify drive to use ($00 = same as last time, $01 = first disk (i.e. #8), $02 = 2nd disk (drive #9))
; AX - address of buffer to read catalogue into ; AX - address of buffer to read catalogue into
; outputs: ; outputs:
; on errror, carry flag is set. ; on errror, carry flag is set.
; otherwise, buffer will be filled with asciiz filenames,followed by 1 byte filetype, followed by 2 byte file length (in 256 byte sectors)
; there is an extra zero at the end of the last file.
io_read_catalogue_ex:
stax tmp_buffer_ptr
lda #1
bne extended_catalogue_flag_set
;routine to catalogue disk (filenames only)
; io_device_number set to specify drive to use ($00 = same as last time, $01 = first disk (i.e. #8), $02 = 2nd disk (drive #9))
; AX - address of buffer to read catalogue into
; outputs:
; on errror, carry flag is set.
; otherwise, buffer will be filled with asciiz filenames (and an extra zero at the end of the last filename)
io_read_catalogue: io_read_catalogue:
stax tmp_buffer_ptr stax tmp_buffer_ptr
lda #0
extended_catalogue_flag_set:
sta extended_catalogue_flag
;get the BAM ;get the BAM
lda #$12 lda #$12
sta io_track_no sta io_track_no
@ -191,7 +209,7 @@ io_read_catalogue:
sta io_sector_no sta io_sector_no
ldax #output_buffer ldax #output_buffer
jsr io_read_sector jsr io_read_sector
bcs @end_catalogue bcs @end_catalogue
@get_next_catalogue_sector: @get_next_catalogue_sector:
@ -216,9 +234,8 @@ io_read_catalogue:
and #$7f and #$7f
beq @skip_to_next_file beq @skip_to_next_file
; bpl @skip_to_next_file
@get_next_char: @get_next_char:
lda output_buffer+5,y ;file type lda output_buffer+5,y ;file name
beq @end_of_filename beq @end_of_filename
cmp #$a0 cmp #$a0
beq @end_of_filename beq @end_of_filename
@ -232,6 +249,9 @@ io_read_catalogue:
pha pha
tay ;get Y back to start of this file entry tay ;get Y back to start of this file entry
lda extended_catalogue_flag ;do we need to include the 'extended' data?
beq @skip_to_next_file
lda output_buffer+2,y ;file type lda output_buffer+2,y ;file type
jsr write_byte_to_buffer jsr write_byte_to_buffer
lda output_buffer+30,y ;lo byte of file length in sectors lda output_buffer+30,y ;lo byte of file length in sectors
@ -272,6 +292,7 @@ io_read_sector:
sta drive_id sta drive_id
@drive_id_set: @drive_id_set:
jsr make_read_sector_command jsr make_read_sector_command
ldax command_buffer
lda #1 lda #1
ldx #<cname ldx #<cname
ldy #>cname ldy #>cname
@ -296,12 +317,8 @@ io_read_sector:
jsr check_error_channel jsr check_error_channel
lda #$30 lda #$30
cmp error_buffer cmp error_buffer
beq @was_not_an_error bne @error
lda #NB65_ERROR_DEVICE_FAILURE
sta ip65_error
sec
rts
@was_not_an_error:
ldx #$02 ; filenumber 2 ldx #$02 ; filenumber 2
jsr CHKIN ;(file 2 now used as input) jsr CHKIN ;(file 2 now used as input)
@ -327,8 +344,9 @@ io_read_sector:
@error: @error:
lda #NB65_ERROR_DEVICE_FAILURE lda #NB65_ERROR_DEVICE_FAILURE
sta ip65_error sta ip65_error
jmp @close jsr @close
sec
rts
open_error_channel: open_error_channel:
lda #$00 ; no filename lda #$00 ; no filename

View File

@ -17,7 +17,7 @@
.import io_callback .import io_callback
.import get_key .import get_key
.import ip65_error .import ip65_error
.import io_read_catalogue .import io_read_catalogue_ex
.macro cout arg .macro cout arg
lda arg lda arg
@ -67,7 +67,7 @@ init:
sta io_device_no sta io_device_no
ldax #directory_buffer ldax #directory_buffer
jsr io_read_catalogue jsr io_read_catalogue_ex
bcc @no_error_on_catalogue bcc @no_error_on_catalogue
jsr print_error_code jsr print_error_code

Binary file not shown.