Вход

Просмотр полной версии : ВГ93



Sayman
27.08.2009, 07:11
Уважаемые, подскажите, где почитать пожно по теме программирования ВГ93. не с точки зрения трдос. у профи при включении 5го бита, доступ к вг93 осуществляется из всего диапазона ОЗУ. вот я и изучаю сей феномен, но нет никакких материалов по вгшке. поделитесь инфой?

lisica
27.08.2009, 08:56
Ларченко и Родионов. TR DOS для пользователей и программистов. Там всё подробно описано о регистрах.

Sayman
27.08.2009, 09:06
к сожалению, во всех книгах про трдос, пишут одно и тоже "к сожалению программировать контроллер напрямую нельзя". а мне то как раз напрямую то и можно...и в общем то нужно. потому алгоритм работы надо знать.

Дмитрий
27.08.2009, 09:14
Sayman, есть книга - кажись дизасм тр-дос, там все должно быть разжевано. Да и кто тебе мешает вместо call #3d2f писать открытые процедуры, которые записаны в той же ПЗУ ТР-ДОС?
Но, имхо, все это не интересно, т.к. такой принцип программирования делает несовместимым работу прог и винта, если, конечно это не для дровеняки к твоей ОС делается.

Sayman
27.08.2009, 09:56
сейчас пока для себя делаю гляделку монохромных бмп. это для того чтобы обкатать работу с вг и для того чтобы обкатать работу с экранами..есть кое какие идеи, но чтобы сделать,надо на чём то потренироваца. а так будет если погрущик бмп тех же, на них смогу откатать финт с экраном(и).
трдос в принцыипе не буду использовать. прога для меня самого не длоя народа (могет патом как нить), потому на совместимость с эмуляторами и с винтами совершенно пофиг. а вот на зизасм трдоса я подумаю.могно посмареть как и чё там делаеца..а то алгоритм пока нескорлько не отработан у мну чтота...путаюсь сильно.

lisica
27.08.2009, 12:27
А чё там путаться? Дал команду ВГшке, и опрашивай регистр состояния, пока не выставит флаг.(не помню только какой) и давай следующую. Вобщем в книге всё подробно описано.

---------- Post added at 11:27 ---------- Previous post was at 11:22 ----------

Только, вот, цикл задержек нужно реализовать на команды шага, чтоб головки успокоились. В тырдосе есть параметры этих задержек.
Да и действительно,- почему бы не использовать готовые процедуры тырдоса - обычным CALL?

Evgeny Muchkin
27.08.2009, 14:49
В нескольких журналах ZX-Format были неплохие статейки.

Barmaley_m
27.08.2009, 17:51
Да элементарно, у ВГшки есть порты 1F, 3F, 5F, 7F. Есть также порт FF, но он реализуется не самой ВГшкой, а другими частями схемы Beta-Disk.

1F - регистр команд/состояния. Запись туда дает новую команду контроллеру, чтение - выясняет состояние контроллера.
3F - регистр дорожки (чтение/запись). Здесь хранится номер дорожки, на которой находится головка. Содержимое этого регистра автоматически обновляется при выполнении команд позиционировании головки.
5F - регистр сектора (чтение/запись). Здесь хранится номер сектора, который следует считать или записать
7F - регистр данных (чтение/запись). Отсюда считываются данные при чтении сектора, и сюда надо подавать данные при его записи.

FF - чтение/запись. При записи осуществляется выбор дисковода и режима ВГшки FM/MFM. При чтении считывается состояние двух сигналов: DRQ и IRQ. Они используются во время чтения и записи данных на диск. Сигнал DRQ активируется, когда пришел следующий байт данных при считывании (или нужно дать ВГшке следующий байт данных для записи). Сигнал IRQ активируется при завершении операции чтения или записи.

Точное расположение бит и наименование команд я уже забыл, но на эту тему полно информации в интернете, есть в свободном доступе датащит на иностранный аналог ВГ93, а также в книгах Ларченко и Родионова есть необходимые описания.

Если по прочтении этих документов будут вопросы - обращайся.

Sayman
28.08.2009, 10:46
пока немного не понятно. вот например. сдвиг головы да? берём из одной статьи гед пишут:

di
ld a,d ;d - логический но-
;мер дорожки
srl a ; вычисляем физич.
; номер (a/2)
ld c,#7f; сюда надо помес-
; тить номер до-
; рожки,на которую
; я хочу отьехать.
call outc
ld a,#3c; выбор стороны
bit 0,d
jr z,l01
ld a,#2c
l01 ld c,#ff
call outc; устанавливаем
; нужные для
; нормальной ра-
;боты биты порта #ff и номер
;стороны регистр #3f устанавли-
;вать не надо, он должен сам по
;себе содержать номер текущей
;дорожки

ld a,#18; код команды пози-
;цион.
call out1
ld ix,#3ef5
call dos; ожидание выполне-
;ния
di ; команды.
jp cont
...

out1 ld c,#1f
outc ld ix,#2a53
dos push ix
jp #3d2f

далее:Что делает ВГ 93: при получении в регистр #1f кода #18, она дает
сигнал на раскрутку диска. Затем сравнивает значения регистров
#3f и #7f, определяет направление и количество шагов головки и
шагает, изменяя значение рег.#3f.
т.е. я так понимаю это: указываем трек на который хочу переместиться, в регистре #7f (Data reg). даём каманду #18
(Поиск, биты 3 и 4 - при этом бит 3 = загрузка головки, бит 4 обсолютный) и ВГ будет перемещать голову, изменяя содержимое регистра #3f (регистр номера река) к соответствию регистра #7f (регистр данных, где мы указали желаемый номер трека). так?
смотрим далее. если допустим при чтении сектора из какого-то трека, голова попрежнему сидит на том же треке. нам надо прочитать ещё оджин сектор из того же трека. как это лучше сделать?
например:


ld a,(ix+PHTRACK) ;текущее значение
out (#3f),a
ld c,a
ld a,(ix+TRACK) ;желаемый рек
ld (ix+phtrack),a
out (#7f),a ;устанавливаемое
cp c ;они равны?
jr nz,str2 ;нет seek track
.....
str2: Ld a,(settrk)
Out (WGCOM),a
res 2,a
ld (settrk),a
Call WAITBEG

т.е. суть такова, проверили трек в буфере и тот на который надо ехать. если совпали, то ничего не делать, т.е. каманду 18 не давать, а продолжать в том же духе. но. надоли при этом (если они совпали), задавать в соответствующие регистры эти номера? т.е. как я писал выше, только что прочитали сектор с трека и надо ещё с того же трека прочитать ещё сектор. сравнили - трек тот же..каковы дальнейшие действия? или мжет быть в любом случае без проверок, сразу указал номер трека , дал каманду 18 и пофигу на сравнения?

Дмитрий
28.08.2009, 11:03
Sayman, а метод следственного эксперимента что дает в первом и втором случае? Ведь у тебя профик с открытыми портами - ты можешь это проверить.

Sayman
28.08.2009, 11:10
проблема в том, что я трассирую все свои действия в СТСе. а при трассировании ВГ, как то не особо получается, особенно когда дело доходит до чтения. голова то нормально ездиет, а вот при чтении всё..постоянно ошибки лезут. потому и не могу понять.

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

Дмитрий
28.08.2009, 11:51
Sayman, ну ВГ ты особо не оттрассируешь - тама надо успевать за ее потоком данных, вроде бы. разве что вывести куски кода в процедуры и трассировать их без входа (не помню как правильно называется способ).

Barmaley_m
28.08.2009, 14:56
Sayman, вот тебе исходник моего драйвера ВГ, работающий как с открытыми, так и с закрытыми портами ВГ напрямую. На его основе можно делать фаст-лоадеры, есть функция форматирования дорожки. Я его использовал в своих программах Rrestore, Rprotect, Monitor, Omniprog, XAS-TXT и др.