User Tag List

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 38

Тема: Перемещение головки дисковода

  1. #21

    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,551
    Спасибо Благодарностей отдано 
    205
    Спасибо Благодарностей получено 
    188
    Поблагодарили
    83 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от John North Посмотреть сообщение
    короче от балды.. на скорую руку так сказать.. если че, поправьте..
    Не работает. Ничего не происходит.

  2. #22

    Регистрация
    22.09.2006
    Адрес
    Ижевск
    Сообщений
    1,706
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    newart, ты какой то странный..
    Я у тебя ссыль попросил на ревю с твоим не рабочим примером.
    Дай!

    ---------- Post added at 09:49 ---------- Previous post was at 08:22 ----------

    --------------------------------------
    вобщем вот.. проверял на реале, вроде работает

    -----------------------------------------------
    ld a,#0c
    ld c,#ff
    ld hl,#2a53
    call dos
    call beep ; настройка на дисковод А

    ld a,#0c
    ld c,#1f
    ld hl,#2a53
    call dos
    call beep ; команда "восстановление"

    ld b,#20 ; количество "шагов"
    M1:
    push bc
    ld a,#5c ; код команды "шаг вперед" (#7c -"назад")
    ld c,#1f
    ld hl,#2a53
    call dos
    call beep
    pop bc
    djnz M1
    ret

    dos:
    push hl
    jp #3d2f

    beep:
    ld hl,1646
    ld de,26
    call 949
    ret
    -----------------------------------------------

    call beep -это пауза. сделал через beep, первое, что в голову пришло)
    -----------------------------------------------
    Последний раз редактировалось John North; 04.02.2012 в 09:55.
    Хороший.. Плохой.. Главное - у кого ружьё !!

  3. #23

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот предлагаю фрагмент моего кода, который считывает с диска сектор. Это кусок прошивки ПЗУ, порты вг93 в ней открыты, поэтому программа обращается к ним напрямую, а если действовать через тр-дос - то надо пользоваться соответствующими точками входа.


    RDBOOT: DI
    LD A,00011000B
    OUT (0FFH),A
    LD A,00111100B
    OUT (0FFH),A
    LD HL,300
    CALL PAUSE
    LD A,0D0H
    OUT (1FH),A
    LD HL,1000
    CALL PAUSE
    LD A,8
    OUT (1FH),A
    CALL WT_IRQ
    LD A,9
    OUT (5FH),A
    LD HL,5D25H
    LD A,80H
    OUT (1FH),A
    LD C,7FH
    CALL DMA_RD
    LD A,B
    OR A
    JP Z,B_ERR
    IN A,(1FH)
    AND 1FH
    JP NZ,B_ERR
    RET

    PAUSE: PUSH AF
    PAU_0: DEC HL
    LD A,H
    OR L
    JR NZ,PAU_0
    POP AF
    RET

    DMA_RD: LD B,3
    DRD1: IN A,(0FFH)
    AND 0C0H
    JR NZ,DRD2
    INC DE
    LD A,E
    OR D
    JR NZ,DRD1
    DJNZ DRD1
    RET
    WT_IRQ: IN A,(0FFH)
    AND 0C0H
    JP Z,WT_IRQ
    RET M
    DRD2: INI
    JP WT_IRQ

    Обращаю внимание, что шаманская последовательность команд на вг93 (сначала вывод в порт FF, потом пауза, потом D0, потом опять пауза, потом 8) является критичной, если ее нарушить - то мотор дисковода не включается и вообще ничего не происходит. Нигде в датащитах я не видел описания того, как надо "пинать" вг93 после сброса, а данная последовательность была найдена в ходе экспериментов и анализа других загрузчиков.

  4. #24

    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,551
    Спасибо Благодарностей отдано 
    205
    Спасибо Благодарностей получено 
    188
    Поблагодарили
    83 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от John North Посмотреть сообщение
    вобщем вот.. проверял на реале, вроде работает
    Вроде... на деле же если ввести 100 шагов, то он делает 10 шагов, а если 255 то 28.
    Если меньше 15 то вообще не двигается.

    И всегда по окончанию программы делает 1 шаг назад.

    ---------- Post added at 02:50 ---------- Previous post was at 02:10 ----------

    Подобрал подходящую паузу. Но двигаться можно только в одну сторону.
    Поскольку если головка стоит на нуле то двигатель не делает шагов, если головку отодвинуть от нуля, то двигатель принудительно пытается отогнать ее на ноль (вращая мотор) и уже потом делает нужное кол-во шагов (от которых проку мало ибо двигатель уже хз сколько раз прокрутился вокруг оси).

    ---------- Post added at 03:00 ---------- Previous post was at 02:50 ----------

    Ну и затея в целом провалилась, движок от дисковода очень слаб. Даже пол килограма усилия не делает.

  5. #25

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ОБЧР не получился

  6. #26

    Регистрация
    24.07.2008
    Адрес
    г. Курган
    Сообщений
    2,062
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Нигде в датащитах я не видел описания того, как надо "пинать" вг93 после сброса, а данная последовательность была найдена в ходе экспериментов и анализа других загрузчиков.
    Процедура инициализации проста. Сначала делаем ресет ВГ93, и потом сразу выполняем команду "немедленное прерывание". После этого ВГ93 выходит в нормальный режим приёма команд. Мотор включается (в бетадиске), когда в команде seek мы ставим бит "проверять положение МГ". Или в команде "восстановление" с аналогичным битом. Это бит означает, что ВГ93 после выполнения команды будет искать идентификатор (область заголовка) первого попавшегося сектора на текущем цилиндре (т.е. там, куда передвинутся головки). Из него она возьмет номер текущего цилиндра. Если номер не совпадает с тем, что было в регистре данных (т.е. куда хотели сдвинуть), то выставляется 4-й бит. После него надо сделать команду восстановление, что бы точно выйти на 0-й цилиндр.

    Скрытый текст

    Profi 5.06 1024K 12Mhz (кварц на 24), палитра, COM-порт, часы, hdd, covox, программатор
    ZX-Spectrum +3, ZX-Spectrum +2B, ZX-Spectrum +2, ZX Spectrum 48, ZX Spectrum 48+
    ZX Evolution Rev B.
    Color 48 + Beta Disk Interface +FDD+YM2149F
    Орель-08БК
    Pentagon-48 (недоссобранный кем-то)
    Pentagon-128 (полуубитый)
    Кворум-128 (в ремонте)
    Магик-05 (в ремонте)
    Robotron 1715
    Корвет ПК8020 и ПК8010
    Amstrad CPC 464
    Amstrad CPC 6128
    [свернуть]

  7. #27

    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,551
    Спасибо Благодарностей отдано 
    205
    Спасибо Благодарностей получено 
    188
    Поблагодарили
    83 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А кто что думает про эти супер-пупер tubro процедуры?

    http://www.zxpress.ru/article.php?id=3398

  8. #28

    Регистрация
    20.04.2011
    Адрес
    г. Челябинск
    Сообщений
    602
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от newart Посмотреть сообщение
    А кто что думает про эти супер-пупер tubro процедуры?

    http://www.zxpress.ru/article.php?id=3398
    Кое что из этого использовал. Так называемый КвикЛоадер.
    На хитрый код и Отладчик с мозгами.

  9. #29

    Регистрация
    24.07.2008
    Адрес
    г. Курган
    Сообщений
    2,062
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я немного неточно написал, как включать мотор, сорри. В общем так, Включает мотор бит h (HLD). V - тоже может включать, если он не был включен до начала выполнения команды битом h, но включится мотор лишь в конце выполнения команды, что нам не на руку. В общем включать мотор надо битом h. В реальности приходится использовать их оба, одновременно, что бы удостовериться, что головки находятся там где надо.
    Теперь про сброс ВГ93. После аппаратного reset, ВГ93 начинает выполнять команду "восстановление", пытаясь выдать до 256 импульсов на перемещение головок дисковода к цилиндру 0. Но биты h & v не выставляются. На бетадиске мотор не включается. И команда висит в (похоже) бесконечном цикле. Ещё году в 1997-м я исследовал этот вопрос, и анализируя описание и делая опыты, пришёл к выводу, что надо делать прерывание команды используя "немедленное прерывание" (биты в описании посмотрите).

    Скрытый текст

    Profi 5.06 1024K 12Mhz (кварц на 24), палитра, COM-порт, часы, hdd, covox, программатор
    ZX-Spectrum +3, ZX-Spectrum +2B, ZX-Spectrum +2, ZX Spectrum 48, ZX Spectrum 48+
    ZX Evolution Rev B.
    Color 48 + Beta Disk Interface +FDD+YM2149F
    Орель-08БК
    Pentagon-48 (недоссобранный кем-то)
    Pentagon-128 (полуубитый)
    Кворум-128 (в ремонте)
    Магик-05 (в ремонте)
    Robotron 1715
    Корвет ПК8020 и ПК8010
    Amstrad CPC 464
    Amstrad CPC 6128
    [свернуть]

  10. #30

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от newart Посмотреть сообщение
    А кто что думает про эти супер-пупер tubro процедуры?
    Про те конкретные процедуры не смотрел, но скажу общий принцип. Код TR-DOS работает с контроллером относительно медленно, поэтому почти любая замена ему, написанная не криво, работает быстрее. Отсюда и "турбо". У меня есть свой драйвер диска "radisk" с процедурами чтения, записи и форматирования, который я изначально разработал для программы восстановления дисков "RAWR Restore", а потом использовал в других своих прогах. Могу выложить исходник, если кому-нибудь интересно.

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Контроллер дисковода
    от andrew76 в разделе Внешние накопители
    Ответов: 55
    Последнее: 12.04.2024, 16:33
  2. Эмулятор дисковода - ?
    от Sonic в разделе Внешние накопители
    Ответов: 32
    Последнее: 17.11.2006, 15:16
  3. Распиновка дисковода
    от Dut_Norshi в разделе Разный софт
    Ответов: 4
    Последнее: 07.06.2006, 03:38

Ваши права

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