Тогда я уже торможу. :) Все пора домой.Цитата:
Сообщение от spensor
Нашел в ПрофПЗУ процедуру теста - разберу до конца потом кину.
Вид для печати
Тогда я уже торможу. :) Все пора домой.Цитата:
Сообщение от spensor
Нашел в ПрофПЗУ процедуру теста - разберу до конца потом кину.
Mick, ты не прав насчёт порта #D9BE. учитывай, что при outi/outd сначала уменьшается b, а потом bc используется в качестве адреса порта
Согласно datasheet на Z80Цитата:
Сообщение от SMT
OUTD (BC) <- (HL)
B = B-1
HL = HL -1
OUTI (BC) <- (HL)
B = B-1
HL = HL +1
А теперь смотрим пример
LAB_1C98: push hl
1c99 0ebe ld c,0beh
1c9b 11f9d9 ld de,0d9f9h ;старшие байты портов
1c9e af xor a
LAB_1C9F: ld b,d
1ca0 23 inc hl
1ca1 edab outd ;запись в порт 0d9beh - сигнал WR_HI
1ca3 43 ld b,e
1ca4 eda3 outi ;запись в порт 0f9beh HDD
1ca6 23 inc hl
1ca7 3d dec a ;повторяем 255 раз
1ca8 20f5 jr nz,LAB_1C9F
1caa e1 pop hl
1cab c9 ret
Ну и кто здесь не прав на счет 0d9beh
Цитата:
Сообщение от SMT
Так кто все-таки прав? Может STS'ом для правильности "обкатать" этот кусок?Цитата:
Сообщение от Mick
даташиты врут. это уже давно известный факт, что в командах outi/otir и outd/otdr сначала декрементируется B, а потом BC выставляется на ША в качестве номера порта.
Что все? Z80,Z180? Да фирма Zilog оказывается большой вруньей.Цитата:
Сообщение от jtn
А я верил :) .
Я хочу услышать тоже, мнение професионального программера. Есть такие?
Ну возмите, да STS'ом протрассируйте, то что оно правильно сработает сомнений не вызывет! Думаю, что профессионализм Stalker'а сомнений не вызывет?Цитата:
Сообщение от Mick
Продолжим разбираться на счет OUTD
Вот выдержка из статьи Ивана Рощина о влиянии флага переноса в процедуре OUTD
"При написании одной программы мне понадобилось наиболее оптимально (по объёму) реализовать запись данных в первые 11 регистров музыкального сопроцессора из области памяти #8000—#800A. Сначала я сделал это так:
LD HL,#800A
M1 LD BC,#FFFD
OUT (C),L
LD B,#BF
OUTD
BIT 7,L
JR Z,M1 "
Теперь обясните мне, в свете ваших утверждений каким образом он записывает в порт #BF.
И еще приведите мне документально всеми известный факт - иначе не поверю в вранье фирмы Zilog.
Alone Coder проверял на Z80 и КР1858ВМ1. так же он сообщал, что некий Т34ВМ1 реализует поведение outd/outi по даташитам (то есть неправильное)
Mick, порты #BFFD и #BEFD - одно и то же, A8 не участвует в дешифрации. не хочешь верить - проверь на живом спектруме, что ld bc,#80FD/OUTI нормально пишет в #7FFD
По твоей просьбе, spensor, вот еще пример из ПрофПЗУ процедуры работы с NRAM (смещение все тоже - 7 страница 1с000h)
Попытлся прокомментировать, что -то сам запутался. Короче там все как на схеме ни чего лишнего.
Еще нашел инициализацию контроллера прерываний. Если надо кину.
Тогда вот кусочек. Прокоментировать не могу - не знаком с работой ВН59. Там в регистре 0ffbah очищается 3 bit.Цитата:
Сообщение от spensor
Ну и в догонку кусок определения конфигурации компьютера - страница 20 (14h).
Оттуда все и вызывается.
Внимание! Всплыл первый bug - в перечне к схеме должно быть следующее:
"DD13 КР1533ИД7
DD14 КР1533ИД14".
2 ewgeny7. Спасибо, за найденную опечатку!
Тут возникли следующие вопросы, может я чего упустил.
1. Определенность с командой OUTD и портом #D9BE/#D8BE (запись старшего байта в ATA-IDE) найдена?
2. Дамп NVRAM уже был найден и разобран?
Пример 4 тому свидетельтсво - мож я что в коментариях напутал, но это точно работа с NVRAM.Цитата:
Сообщение от spensor
И еще один кусочек, мне совсем не понятно, предположительно модем или порт какой то( 78feh, 79feh,7afeh, 7bfeh).
Цитата:
Сообщение от spensor
Я имел в виду дамп Flash - массив чисел в NVRAM.Цитата:
Сообщение от Mick
Может тогда вот это. Там в инициализации NVRAM есть ссылка на подпрограмму. И там есть операция XOR (наверно самая любимая операция автора). :DЦитата:
Сообщение от spensor
1. ох, тяжко... столько реальщиков и НИКОМУ нет дела. давно бы уже записали в память по любому адресу байты 1,253,128,97,54,24,237,163,201 через POKE, сделали PRINT USR этот адрес, если включается 2-й экран, прав я с AlCo и jtn, если нет - то caro со своим мануалом к Z80Цитата:
Сообщение от spensor
2. нет никакой практической необходимости это делать, потому что при неверной контрольной сумме ProfROM инициализирует NVRAM самостоятельно. нафига подписывать ячейки с точностью до байта, если эта информация можнт плавать от версии к версии NVRAM. вряд ли кто-то возьмётся делать эту нудную и кропотливую работу по описанию всех двух килобайт, когда пользы от неё - ноль.
может сам попробуешь? :)
в документации опечатка в псевдокоде инструкции:Цитата:
Сообщение от caro
(С)<-(HL); BC <- B-1;
а надо
B <- B-1; (С)<-(HL);
Кто не грешен :)Цитата:
Сообщение от SMT
Надеюсь теперь все прояснилось?
Кстати по поводу ошибок в документации.
Мне тут попался интересный документ, который называется "The Undocumented Z80 Documented"
последняя редакция которого (у меня) датируется
20 ноября 2003 года.
Этот труд составлен Sean Young в процессе его работы над эмулятором MSX и содержит выявленные им недокументированные особенности процессора Z80.
Думаю этот текст будет полезен нашим программистам.
Весит чуть меньше 300 кб в PDF.
Да, так в этом документе по поводу команд, о которых мы спорим, написано с точностью до наоборот.
2 Mick
А ты случайно не выяснил, при каких условиях система считает, что СМУК установлен?
У меня собраны порты версии, порт виртуальных дисководов, но Скорп не видит контроллера :(
При включении компьютера происходит какое-то "шебуршание" на портах, но на экране это никак не отображается.
Возможна ли такая ситуевина по причине отсутствия NVRAM?
у меня как-то оторвался провод M1/ который участвовал в дешифрации порта тр-дос и если в это т скорп всавить профпзу то оно находило несуществующий смук ver.5 rev 5.Цитата:
Сообщение от ewgeny7
В каком то из примеров была процедура "обнаружения SMUC" и его конфигурации. Контроллер считается найденным если прочитался порт версий. Если же нет, выход по флагу CY - т.e. контроллера нет. Только по этому признаку, больше по моему нет.Цитата:
Сообщение от ewgeny7
Спасибо, для общего образования не повредит.Цитата:
Сообщение от spensor
И еще в примере 8, там где содержимое(наверное) NVRAM я только указал половину дампа. На самом деле я тут обнаружил еще одну половину(судя по логике программы).
Когда определишся, просьба внести изменения.Цитата:
Сообщение от Mick
А как насчет вопроса ewgeny7? Явно ПП для определения факта наличия SMUC нужны дополнительные элементы, кроме портов версии. Нет ли в прошивке дополнительных проверок?
Вот опять пример(надеюсь еще не достал своим мусором ;) ). Полный дамп(около 200h) предположительно содержимое NVRAM.
И еще вопрос к ewgeny7: По подробнее опиши, что происходит на экране, особенно после появления надписи *fast test of computer*. Это хоть даст приблизительное место, где искать (профПЗУ большое). И еще посмотри версию профПЗУ. Если она ниже 3.00 то SMUC не потдерживается.
Нет у меня сейчас реала, уже пару лет как нет:( Есть только рабочие 48-ки, но на них такой фокус не провернешь:(Цитата:
Сообщение от SMT
Большое человеческое спасибо! Очень убидительно.Цитата:
Сообщение от caro
Только не могу понять, почему такое поведение "известное всем и давно", на самом деле оказалось совсем неизвестным многим?
Понятия не имею:( По младшему байту адреса это ISA-устройство, но какое конкретно надо выяснять. В PC оно должно (если я не ошибся в расчетах) находиться по адресам 3F8h-3FBh. По памяти вроде один из COM'ов. И то это только часть регистров, там их, опять же по памяти, штук 6-8.Цитата:
Сообщение от Mick
Потому что эти команды не предполагалось использовать для работы с 16-битным адресом I/O.Цитата:
Сообщение от spensor
Лично я применял их только при работе с 8-разрядным адресом порта.
Здесь их применение действительно оправдано и никак не зависит от того,
перед операцией происходит декремент регистра B или после.
Кем не предполагалось? Ларченко, если не ошибаюсь, он же МОА, применил эту команду в прошивке ПрофПЗУ. И в тоже время в его книге "ZX-Spectrum для пользователей...", правда написаной несколькими годами ранее, команда OUTD (OUTI) описана неверно (в свете последних данных). Подозрительно это как-то:(Цитата:
Сообщение от caro
Я имел ввиду разработчиков Z80 :)Цитата:
Сообщение от spensor
У меня такое впечатление, что в данном месте ее применение не оправдано и служит только для запутывания тех, кто сейчас пытается разобраться в коде ПрофПЗУ :).Цитата:
Сообщение от spensor
Основное назначение этих команд - работа с табличными данными при операциях ввода/вывода.
Да запутывать он мастер. Если все путлялки :D выкинуть глядишь профПЗУ и не понадобится ;). Код там сильно избыточен, либо виной всему макроассемблер, либо намеренные действия.Цитата:
Сообщение от caro
Вопрос к ewgeny7: Что читается из портов версий?
2 all
Заданные мной вопросы уже морально устарели :)
СМУК-2 стоит на самом пороге своего рождения :) , на экране уже присутствуют надписи:
ROM 256k
RAM 256k
SMUC ver.5 rev.7
CMOS not found
NVRAM found
Serial controller not found
Interrupt controller not found
IDE...
По поводу IDE хотелось бы сообщить подробнее уже сегодня, осталось всего один провод, но... я не вижу, куда он идет (IRQ1 c IDE), а Spensor куда-то пропал
Тут я:( IRQ1 в оригинальной схеме заводился параллельно на PIC и Altera. PIC вещь необязательная, а вот как обрабатывается запрос в Altera мне неизвестно:( Пока можно никуда не подключать. Предположительно этот сигнал шел на один из бит порта #FFBA. "Свободные" там биты D7 и D3. Поскольку проверить это я не имею возможности, поэтому либо пока не подключать, либо параллельно завести на выводы 11 и 17 DD10.2. В любом случае, IMHO, оно будет работать - в остальных схемах адаптеров-контроллеров ATA-IDE этот сигнал никуда не заводился.Цитата:
Сообщение от ewgeny7
Когда появиться определенность с этим сигналом схема перейдет из разряда "альфа" в разряд "бета".
В рулении PIC D3 там точно используется, о чем документально было выше подтверждено.Цитата:
Сообщение от spensor
А теперь еще кусок работы с HDD.
В прошивке PIC обрабатывается, но IMHO, если его не будет на плате, то работать и так должно, разве что немного медленнее. Или я в корне неправ? Ведь работал же SMUC без RTC и PIC? Иначе тогда PIC надо было ставить не в панельку, а запаивать намертво!Цитата:
Сообщение от Mick
Кстати нашел подтверждение нелогичности нахождения SMUC. Действительно сначало пытается залесть в NVRAM, а потом в порт версий. И если ответа от первой нет - флаг CY, то и порт версий не опрашивается. Тогда на кой нужна надпись NVRAM not found непонятно - нелогично как то!!! :(Цитата:
Сообщение от spensor
А на счет PIC, я думаю не шибко сильно должен тормозить - я почитал доку на ВН59 - попробую разобраться как она в SMUC работает.
Насчет тормозов это предположение. Может даже наоборот, без него быстрее - не надо будет прерывание обрабатывать, а лишь производить пуллинг устройства.Цитата:
Сообщение от Mick
Небольшое слайдшоу о пресловутом изделии :)
Первое фото - СМУК в "связке" со "Скорпионом"
Второе - что в этот момент происходит на экране
Третье - вид сего устройства сверху
Четвертое - снизу
На данный момент работают порт версий (чтение), порт виртуальных дисководов (чтение и запись), NVRAM (также чтение и запись, ПО находится в ПрофПзу).
To be continued... :)
Полный пример для RTC из профПЗУ.