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

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

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

  1. #1
    Member Аватар для Dr.Potapov
    Регистрация
    31.10.2006
    Адрес
    г. Воронеж
    Сообщений
    42
    Благодарностей: 10
    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
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    CraZZZy CodEr Аватар для SAM style
    Регистрация
    28.02.2005
    Адрес
    Великий Новгород
    Сообщений
    1,576
    Благодарностей: 759
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Dr.Potapov Посмотреть сообщение
    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
    Вот это вот заменить. К проблеме не относится, но это же ужосЪ... Поменяй все call в этом блоке на jp.
    Все любят гипножабу

  4. Этот пользователь поблагодарил SAM style за это полезное сообщение:
    Dr.Potapov (19.10.2015)

  5. #3
    Member Аватар для Dr.Potapov
    Регистрация
    31.10.2006
    Адрес
    г. Воронеж
    Сообщений
    42
    Благодарностей: 10
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SAM style Посмотреть сообщение
    Вот это вот заменить. К проблеме не относится, но это же ужосЪ... Поменяй все call в этом блоке на jp.
    Спасибо ) копипаста зарулила...
    Пишу как то наспех, бамну уже рабочий код. ) но ужас понял, дошло! )))

  6. #4
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    696
    Благодарностей: 514
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SAM style Посмотреть сообщение
    Поменяй все call в этом блоке на jp.
    я бы рекомендовал заменить на это

    Код:
    device_fd_ent
    
    	or a
    	jp z,fd_00 ;init
    	dec a
    	jp z,fd_01 ;set drive
    	dec a
    	jp z,fd_02 ;read
    	dec a
    	jp z,fd_03 ;write
    	ret
    Последний раз редактировалось shurik-ua; 19.10.2015 в 01:06.

  7. Этот пользователь поблагодарил shurik-ua за это полезное сообщение:
    Dr.Potapov (19.10.2015)

  8. #5
    Member Аватар для Dr.Potapov
    Регистрация
    31.10.2006
    Адрес
    г. Воронеж
    Сообщений
    42
    Благодарностей: 10
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    спасибо ребята )

    кстати разобрался, все там отлично читает/пишет, но по умолчанию в нулевую страницу, которая потом подменяется на 7-ю и создается ощущения что ничерта не прочиталось.

    как /dev/mem прикручу полегче пойдет.

    отбой короче, функции хорошие )

    Картинку вот пока еще глупую но для меня уже крайне радостную ))

    Последний раз редактировалось Dr.Potapov; 19.10.2015 в 01:20.

  9. #6
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    696
    Благодарностей: 514
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    FUZIX пилишь ? - тут вроде есть отдельная тема по линуксам на спеке

  10. #7
    Member Аватар для Dr.Potapov
    Регистрация
    31.10.2006
    Адрес
    г. Воронеж
    Сообщений
    42
    Благодарностей: 10
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от shurik-ua Посмотреть сообщение
    FUZIX пилишь ? - тут вроде есть отдельная тема по линуксам на спеке
    Fuzix жаль (( но ls в 16 КБ меня прям убивает.
    Тему про него прочитал, кто его развивает - монстры!! )
    А это я для себя и для души. Особенного там ничего нет: монолитное микро-ядро компилируемое юзерами под разновидности своих клонов, никаких многозадачностей и 64 символьных 6912 экранов и прочего. Хочу попробовать вынести максимум функционала в user apps и сделать универсальную систему с открытым кодом, не более того. Без всяких амбиций. Получится - отлично, не получится - хорошо ))
    Последний раз редактировалось Dr.Potapov; 19.10.2015 в 01:47.

  11. Эти 4 пользователя(ей) поблагодарили Dr.Potapov за это полезное сообщение:
    James DiGreze (19.10.2015), Kakos_nonos (19.10.2015), Sergey (19.10.2015), shurik-ua (19.10.2015)

  12. #8
    Veteran
    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,507
    Благодарностей: 671
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от shurik-ua Посмотреть сообщение
    я бы рекомендовал заменить на это

    Код:
    device_fd_ent

    or a
    jp z,fd_00 ;init
    dec a
    jp z,fd_01 ;set drive
    dec a
    jp z,fd_02 ;read
    dec a
    jp z,fd_03 ;write
    ret
    Такие вещи можно еще оптимизировать, если использовать регистр b и команды djnz.
    Формально всё правильно, а по существу - издевательство (В.И.Ленин)

  13. Эти 2 пользователя(ей) поблагодарили Andrew771 за это полезное сообщение:
    Dr.Potapov (20.10.2015), Sergey (20.10.2015)

  14. #9
    Member Аватар для Dr.Potapov
    Регистрация
    31.10.2006
    Адрес
    г. Воронеж
    Сообщений
    42
    Благодарностей: 10
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    Такие вещи можно еще оптимизировать, если использовать регистр b и команды djnz.
    До оптимизации очень далеко ) В основном сейчас приходится решать вопросы архитектурные, чем действительно код писать. Пару дней на раздумья (листочек и карандаш), пару макетов в freepascal, выбросить, опять пару дней на раздумья )) Пока раздумья - пишу то, что готово по своей архитектуре. Как то так все происходит. На JP переделал, не сложно. Но реально оптимизировать по сути еще нечего - бинарь будущего ядра сейчас 732 байта, уверен можно ужать на треть еще как минимум, а то и вполовину. В нем на сей момент собираются (по выбору юзера) три драйвера:
    * цветной экран 32х24
    * виртуальная консоль (системная обертка драйвера, сама определяет и цепляется к вкомпиленному низкоуровневому видеодрайверу по имени, ничего не умеет кроме определения существующего видеодрайвера и все транзитит в этот драйвер)
    * дисковод (выбор дисковода, чтение и запись секторов)
    Так же содержится таблица имен для вызовов вкомпиленных драйверов и системная функция отдающая user_app адрес вызова нужного драйвера по его имени.

    Программа "hello world" в этом плане выглядит так:
    User_app на старте получает от ядра адрес системной функции, дергает ее на предмет адреса драйвера виртуальной консоли (обращение прямо по имени драйвера "sc"), запоминает полученный адрес и в дальнейшем обращается к нему напрямую что бы напечатать что либо и как либо на экране. Драйвер "sc" работает с видеодрайвером внутри ядра уже сам.
    По идее бинарь этого "hello world" должен работать на любой конфигурации ядра которое уже в свою очередь работает с любым вкомпиленным низкоуровневым видеодрайвером.

    Так же user_app может запросить у ядра любой нужный ему драйвер (реальный или виртуальный) по его имени, если он там есть - приедет его адрес в текущей сборке ядра. К примеру "hello world" может не запрашивать "sc" а запросить сразу низкоуровневый и аппаратно-зависимый "scrn32" и работать с ним напрямую если он есть в ядре.

    Это я зачем все написал. Вдруг это говноархитектура ))
    Последний раз редактировалось Dr.Potapov; 20.10.2015 в 10:30.

  15. #10
    Master
    Регистрация
    17.05.2005
    Адрес
    г. Абакан
    Сообщений
    694
    Благодарностей: 53
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да пока, на словах, вроде бы нормально. Делай пока как сам считаешь нужным, потом посмотрим как оно работет, мож чего дельного подскажем.

  16. Этот пользователь поблагодарил James DiGreze за это полезное сообщение:
    Dr.Potapov (20.10.2015)

Страница 1 из 2 12 ПоследняяПоследняя

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

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

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

Похожие темы

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

Ваши права

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