Важная информация

User Tag List

Показано с 1 по 10 из 12

Тема: Фукция чтения ТР-ДОС

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Member Аватар для Dr.Potapov
    Регистрация
    31.10.2006
    Адрес
    г. Воронеж
    Сообщений
    75
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Фукция чтения ТР-ДОС

    Очень нужна посильная помощь, приложил исходник драйвера fdd. Код не мой, разобраться не могу почему не работает функция чтения с диска (не читает с диска, даже данные в памяти не меняются). Пишет отлично. Опыта в ТР-ДОС нет совсем, возможно что то не проинициализировано?
    Повторю - запись проходит отлично, по нужным секторам, в нужном объеме, а чтения нет совсем (диск в эмуле мигает синим, видимо что то пытается читать).
    Код:
    ;device fd
    ;external low-level disk driver v1.3
    ;for rawr disk distribution system
    ;by michael borisov (c) 1996
    
    ; 0 - init
    ; 1 - set drive (>a - number drive 0,1,2,3)
    ; 2 - read (>hl - to address, >de - start track/block, >b - blocks to read)
    ; 3 - write (>hl - from address, >de - start track/block, >b - blocks to write)
    
    device_fd_ent
    	
    
    
    	cp #00
    	call z,fd_00 ;init
    	cp #01
    	call z,fd_01 ;set drive
    	cp #02
    	call z,fd_02 ;read
    	cp #03
    	call z,fd_03 ;write
    	ret
    
    
    
    fd_clr_error
    	ld a,#ff
    	ld (fd_err_co),a
    	ret
    
    fd_00	call fd_inifdc ;init
    	call fd_motor_on
    	jr fd_res_head
    
    fd_inifdc
    	di
    	call fd_clr_error
    	ld a,%00011000
    	ld c,#ff
    	call fd_out_c_a
    	ld a,%00011100
    	call fd_out_c_a
    	ld hl,300
    	call fd_pause
    	ld a,#d0
    	ld c,#1f
    	call fd_out_c_a
    	ld hl,1000
    	jp fd_pause
    
    fd_res_head
    	di
    	ld a,8
    	jr fd_posrt
    
    fd_motor_on
    	di
    	call fd_inifdc
    	call fd_get_pos
    	call fd_position
    	ld hl,#2134
    	jp fd_pause
    
    fd_position
    	di
    	srl a
    	call fd_store_pos
    	ld c,#7f
    	call fd_out_c_a
    	ccf
    	sbc a,a
    	and %00010000 ;side
    	ld b,a
    	ld a,(fd_drive_no)
    	or b
    	or %00001100
    	ld c,#ff
    	call fd_out_c_a
    ;	call fd_break_key
    	ld c,#1f
    	ld a,#18 ;position cmd
    fd_posrt
    	call fd_out_c_a
    	call fd_wt_irq
    	ret
    
    fd_01 ;set drive:
    	ld a,c
    	and 3
    	ld (fd_drive_no),a
    	call fd_get_pos
    	ld c,#3f
    	call fd_out_c_a
    	call fd_clr_error
    	ret
    
    fd_02 ;readgr:	
    	ld a,#80
    	ld c,0
    	jr fd_rdwrgr
    
    fd_03 ;writgr
    	ld a,#a0
    	ld c,1
    fd_rdwrgr
    	ld (fd_rwcmd+1),a
    	ld a,c
    	ld (fd_dmatyp+1),a
    	ld a,b
    	ld (fd_sec_remain),a
    	ld (fd_err_sp),sp
    	call fd_clr_error
    fd_rwgpos
    	ld a,d
    	call fd_position
    
    fd_rwgnxt
    	ld (fd_dma_addr),hl
    	ld (fd_rw_loc),de
    
    fd_rwretr
    	ld de,(fd_rw_loc)
    	ld hl,(fd_dma_addr)
    	;call	break_key
    	ld c,#5f
    	ld a,e
    	inc a
    	call fd_out_c_a
    fd_rwcmd
    	ld a,0
    	ld c,#1f
    	call fd_out_c_a
    	ld c,#7f
    fd_dmatyp
    	ld a,0
    	or a
    	jr nz,fd_rwgr0
    	call fd_dma_rd
    	jr fd_rwgr1
    fd_rwgr0
    	call fd_dma_wr
    fd_rwgr1
    	ld a,b
    	or a
    	ld a,1	;no disk
    	jp z,fd_err_ret
    	call fd_in_1f
    	ld c,a
    	and #1f
    	jr z,fd_rwgr2
    	ld a,4	;snf/crc err
    	jp fd_err_ret
    
    fd_rwgr2
    	bit 6,c
    	ld a,2	;wprt
    	jp nz,fd_err_ret
    fd_rwignr	
    	ld de,(fd_rw_loc)
    	inc e
    	bit 4,e	;16 secs/trk
    	jr z,fd_xalal
    	ld e,0
    	inc d
    	scf
    fd_xalal
    	ld a,(fd_sec_remain)
    	dec a
    	ld (fd_sec_remain),a
    	ret z
    	jr nc,fd_rwgnxt
    	jr fd_rwgpos
    
    fd_err_ret
    	ld	(fd_err_co),a
    	ld	a,#d0
    	ld	c,#1f
    	call	fd_out_c_a
    	ld	sp,(fd_err_sp)
    	ret
    
    fd_store_pos
    	push	hl
    	push	af
    	ld	hl,fd_drv_head
    	ld	a,(fd_drive_no)
    	add	a,l
    	ld	l,a
    	adc	a,h
    	sub	l
    	ld	h,a
    	pop	af
    	ld	(hl),a
    	pop	hl
    	ret
    
    fd_get_pos
    	push	hl
    	ld	hl,fd_drv_head
    	ld	a,(fd_drive_no)
    	add	a,l
    	ld	l,a
    	adc	a,h
    	sub	l
    	ld	h,a
    	ld	a,(hl)
    	pop	hl
    	ret
    
    fd_pause
    	push	af
    fd_pau_0
    	dec	hl
    	ld	a,h
    	or	l
    	jr	nz,fd_pau_0
    	pop	af
    	ret
    
    ;'radisk v1.3 (c) 1996, michael borisov'
    ;tr-dos port routines
    
    fd_out_c_a
    	push	hl
    	ld	hl,#2a53
    	ex	(sp),hl
    	jp	#3d30
    
    fd_dma_rd
    	push	hl
    	ld	hl,#3fd5
    	ex	(sp),hl
    	jp	#3d30
    
    fd_dma_wr
    	push	hl
    	ld	hl,#3fba
    	ex	(sp),hl
    	jp	#3d30
    
    fd_wt_irq
    	push	hl
    	ld	hl,#3fe5
    	ex	(sp),hl
    	jp	#3d30
    
    fd_irz
    	ld	hl,#3f33
    	push	hl
    	jp	#3d30
    
    fd_in_1f
    	push	hl
    	push	bc
    	push	de
    	xor	a
    	ld	c,#3f
    	call	fd_out_c_a
    	ld	a,#0a
    	ld	c,#5f
    	call	fd_out_c_a
    	ld	d,#01
    	call	fd_irz
    	call	fd_get_pos
    	ld	c,#3f
    	call	fd_out_c_a
    	ld	a,b
    	pop	de
    	pop	bc
    	pop	hl
    	ret
    
    
    fd_drive_no
    		db	00
    
    fd_drv_head
    		db	00	;a
    		db	00	;b
    		db	00	;c
    		db	00	;d
    
    fd_ttbl_adr
    		dw	0000
    fd_dma_addr
    		dw	0000
    fd_rw_loc	dw	0000
    fd_sec_remain
    		db	00
    fd_err_sp	dw	0000
    fd_err_co	db	#ff
    Вызываю на чтение так (fdc это сам драйвер):
    Код:
    	ld a,0 ;инициализирую
    	call fdc
    
    	ld a,1 ;функция установки дисковода 
    	ld c,0 ; устанавливаю нулевой
    	call fdc
    	
    	ld a,2 ;функция чтения
    	ld hl,#c000 ;по адресу #с000
    	ld d,0 ;нулевая дорожка
    	ld e,0 ;нулевой сектор
    	ld b,1 ;читать один сектор
    	call fdc


    ---------- Post added at 23:37 ---------- Previous post was at 22:22 ----------

    чуть чуть разобрался ))
    читает тоже отлично но до сменной банки (до #с000). там какая то чехарда со страницами начинается...

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Схема чтения с магнитофона на 544СА3
    от roma в разделе Внешние накопители
    Ответов: 20
    Последнее: 02.10.2015, 22:26
  2. Плагин FAR для чтения реальных дисков TR DOS
    от Alexandr Medvedev в разделе Утилиты
    Ответов: 2
    Последнее: 15.09.2010, 06:17
  3. Минимальное время чтения/записи байта
    от spensor в разделе Программирование
    Ответов: 9
    Последнее: 02.03.2009, 20:32
  4. Индикатор чтения\запись FDD. Есть вопрос по схеме
    от luzanov в разделе Внешние накопители
    Ответов: 10
    Последнее: 12.09.2007, 17:58

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •