Векторовский микродос - это потомок корветовского микродоса, форматы дискет одинаковые. Кстати образы дискет совпадают еще и с орионом, там, насколько помню, тоже от корвета отталкивались.
Вид для печати
Векторовский микродос - это потомок корветовского микродоса, форматы дискет одинаковые. Кстати образы дискет совпадают еще и с орионом, там, насколько помню, тоже от корвета отталкивались.
Контроллер HDD замаял... Реально колдовство... И логером и осциллографом смотрю, тестовые проги написал для тестирования электроники... Всё ожидаемо, вроде есть всё, что должно быть... но загрузчик Вектора не видит HDD...
Собрал контроллер HDD на Альтере - практически сразу заработал... всё видит, всё грузит...
Придётся тупо поменять микросхемы на контроллере... а был ведь рабочий...
PS. Менять микросхемы не пришлось (пока). :)
Вычислил колдуна... выгорел один вход элемента ЛН1, который инвертирует сигнал "АА1". Он с разъёма ВУ инвертируется и идёт только на CF-карту, поэтому вся электроника контроллера нормально тестировалась, а карта не читалась. Перекинул проводки на свободный элемент микросхемы, моя бута каталоги дискет видит, программы запускает.
Загрузчик правда что-то загружает, но это не запускается, нужно разбираться, но это уже другая история...
Скрытый текст
Судя по всему, вместе с контроллером сгорел КвазиДиск и Вектор пострадал. :(
На КД выгорел тот-же разряд ШАВВ, что и на контроллере.
В магазине нет ЛА2/74*30. Погуглил... ла2 ~100руб за штуку, а 74*30 просят 700-900руб 8()
На али вроде адекватные цены, но не в курсе, как сейчас с оплатой/доставкой...
Похоже придётся колхозить аналог из подручных микросхем...
На Векторе с рабочим КД, запускаю тесты КД, все кроме одного работают и не показывают ошибок КД. Один тест http://sensi.org/scalar/ware/619/ запускается, появляется картинка и сразу гаснет... на этом тест заканчивается.
На этом-же Векторе с исправным КД не работает ни один (из проверенных) МикроДос... просто чёрный экран.
Переставляю рабочий КД на 02-ой Вектор, штатно работают без ошибок все тесты КД, включая указанный, и МикроДосы работают.[свернуть]
Пока ремонтировал контроллер HDD, столкнулся с ситуацией, когда нужно проверить контроллер с другой CF-картой. А она другой ёмкости, и не известно что записать в адреса 80 и 81 образа HDD. Если указать не соответствующие карте значения, то кина не будет.
А инициализацию карты можно сделать только утилитами inithdd из под МикроДоса, а его с утилитами нужно иметь на диске или дискете... а подключать контроллер дисковода лень, с образом КД и его загрузкой так-же заморочки...
В результате, дизасмил утилиту inithdd.com, вырезал из неё тест кол-ва секторов и головок. Состряпал программку (получилась 509 байт), которую можно через магнитофонный вход загрузить в чистый Вектор, и она на экране покажет какие значения нужно заносить в образ HDD для CF-карты вставленной в контроллер HDD.
Программка примитивная/минимальная, даже загрузочную сетку не стирает.
Значения выводит на экран монитора, ну и куда без этого... на экран LCD-дисплея ;)
Во вложении исходник и сама программка.
Вдруг кому-то ещё пригодится.
Добрый день всем!
Делаю новый загрузчик для модификации Вектора и столкнулся с такой проблемой - при чтении CF-карт в режиме LBA 28 бит карты размером до 512Мб нормально читаются, но вот на 2Гб и больше зависают при чтении (при чтении сектора карта не заканчивает выдавать данные после 512 байт, хотя размер сектора именно такой), при этом читается совершенно не то, что туда было записано.
Попробовал работать в режиме LBA 48 бит - там вместо данных читаются нули, хотя в режиме 28 бит всё ОК.
Скорее всего нехватает каких-то команд инициализации. Например LBA для старых карт, по-умолчанию, это адрес, а для новых - номер сектора. Размер сектора у старых по-умолчанию 512 байт, у новых нужно запрашивать (какой именно поддерживается, да и поддерживаются ли вообще 512-байтные сектора). Короче нужно шерстить доку.
В том то и дело, что я посматривал образы флешек - там всё правильно прописано (размер сектора 512 байт и вся служебная информация на правильных адресах), а при чтении контроллером Вектора ерунда получается. И перед первым обращением всегда выполняется ресет (порт 5F).
Я думал может у кого есть примеры работы с HDD/CF на низком уровне на каком-нибудь ассемблере.
Есть вот такой asm - это вырезка из начального загрузчика подпрограмм для работы с HDD:
Скрытый текст
Код:;
; Начальный загрузчик Вектор06Ц
; BOOTS
;
.ORG 100H
;--------------------------------------------------
; жесткий диск - проверка наличия HDD
;
MVI A,080H ; 0753
OUT 05FH ; 0755 системный сброс HDD
MVI B,00FH ; 0757
a0759H: DCR B ; 0759
RZ ; 075A
IN 057H ; 075B статус
ANI 0C0H ; 075D
CPI 040H ; 075F готов к работе
JNZ a0759H ; 0761 пока не готов
ORA A ; 0764
RET ; 0765
;
; Загрузка с HDD
;
a0766H:
MVI A,001H ; 076E
CALL a0792H ; 0770 Прочитать сектор
LDA 01404H ; 0773
CPI 0E5H ; 0776
JZ 00000H ; 0778 Перезапуск Загрузчика
CALL a07D5H ; 077B Проверить готовность
LDA 01404H ; 077E
CALL a0792H ; 0781 Прочитать сектор
LHLD 01400H ; 0784
LDA 01404H ; 0787
ADD A ; 078A
ADD A ; 078B
ADD H ; 078C
MOV D,A ; 078D
RET ; 0791
; чтение сектора
a0792H: INR A ; 0792
ADD A ; 0793
MOV C,A ; 0794
LXI D,01000H ; 0795
MVI H,000H ; 0798
a079AH: MVI L,000H ; 079A
a079CH: INR L ; 079C
MOV A,L ; 079D
OUT 053H ; 079E текущий номер сектора
MOV A,H ; 07A0
OUT 056H ; 07A1 устройство и головка
XRA A ; 07A3
OUT 054H ; 07A4 цилиндр ст.
OUT 055H ; 07A6 цилиндр мл.
INR A ; 07A8
OUT 052H ; 07A9 счетчик числа секторов
MVI A,020H ; 07AB команда - чтение
OUT 057H ; 07AD запись команды
PUSH H ; 07AF
MVI H,058H ; 07B0
CALL a07D7H ; 07B2 Ожидание готовности данных
POP H ; 07B5
MVI B,000H ; 07B6
a07B8H: IN 050H ; 07B8 чтение данных
CALL a07EFH ; 07BA сохранить
IN 058H ; 07BD чтение данных
CALL a07EFH ; 07BF сохранить
DCR B ; 07C2
JNZ a07B8H ; 07C3 пока считаны не 512 байт
DCR C ; 07C6
JZ a07D5H ; 07C7 (4 раза)
LDA 01080H ; 07CA
CMP L ; 07CD
JNZ a079CH ; 07CE
INR H ; 07D1
JMP a079AH ; 07D2
;
; Ожидание готовности чтения HDD
a07D5H: MVI H,050H ; 07D5
a07D7H: PUSH B ; 07D7
MVI B,020H ; 07D8
a07DAH: IN 057H ; 07DA чтение статуса
ANI 0D9H ; 07DC
CMP H ; 07DE
JZ a07EDH ; 07DF если готов
DCR L ; 07E2
JNZ a07DAH ; 07E3 пока не готов
DCX B ; 07E6
MOV A,B ; 07E7
ORA C ; 07E8
JNZ a07DAH ; 07E9 цикл ожидания готовности
RST 0 ; 07EC Перезапуск Загрузчика
;
a07EDH: POP B ; 07ED
RET ; 07EE
;
a07EFH: STAX D ; 07EF Сохранение считанных данных
INX D ; 07F0
MOV A,D ; 07F1
CPI 014H ; 07F2
RNZ ; 07F4
MOV A,E ; 07F5
CPI 080H ; 07F6
RNZ ; 07F8
PUSH H ; 07F9
LHLD 01400H ; 07FA
XCHG ; 07FD
POP H ; 07FE
RET ; 07FF
;
.END
[свернуть]
Я плохо сформулировал - имелось в виду пример работы в режиме LBA 48 бит. Но всё равно спасибо за помощь.