С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Все получилось. Если ориентироваться на руководство,книга 1,то второй разъем соединяем с землей,пятый с правым каналом. (При условии что вход 'маг' это мама)
1. Запись в ОЗУ идет не только при обращении к внешнему ПЗУ, но и при обращении к встроенному ПЗУ. Так что да, запись в память будет независимо от наличия в слоте расширения ПЗУ.
С другой стороны, эта особенность дает возможность быстрого доступа к видеопамяти из интерпретатора бейсика. Сам интерпретатор расположен в ПЗУ, отображаемую на адреса 0x0000-0x3FFF. На эти же адреса настроена видеопамять, без дополнительных манипуляций с регистрами. Плюс ОЗУ не пропадает даром, больше для программ остается![]()
2. Если в порту 80h на адреса 4000-7FFF отображено ОЗУ, то по этим адресам происходят обычные чтение/запись, контроллер никак не вмешивается.
Если в порт на эти адреса прописано внешнее ПЗУ, то в этом случае дешифратор контроллера включает устройства следующим образом:
для адресов 0x4000-0x7FF6 - активирует ПЗУ контроллера; то есть, чтение из ПЗУ, запись в ОЗУ;
для адресов - 0x7FF8-0x7FFB - чтение/запись в ВГ93, разумеется с дублированием записи в ОЗУ;
для адресов - 0x7FFC-0x7FFF - чтение/запись регистров ИР26, разумеется с дублированием записи в ОЗУ; правда чтение возвращает содержимое ячейки памяти регистра, адрес которой определяется линиями INT и DRQ м/с ВГ93.
А вот для адреса 0x7FF7 с чтением действительно непонятки, поскольку в контроллере чтение не предусмотрено, а чтение из ОЗУ выключено (активен сигнал SLOT ENABLE). Скорее всего при чтении будет мусор.
Косвенно на чтение мусора указывает тот факт, что в коде есть "фантом" - отключенный кусок кода обработчика таймера, для выключения мотора дисковода (в нынешней реализации мотор выключается без таймера). Это единственное место, где непосредственно использовалось чтение с этого адреса. Так вот, перед чтением в порту 80h слот отключался и подключалось ОЗУ, из которого и происходило чтение с адреса 0x7FF7. После чтения слот включался снова.
Есть еще пара чтений с этого адреса, но это уже система и по ним выводы сделать трудно, там по определению на момент чтения на эти адреса отображено ОЗУ.
Могу уточнить этот вопрос на реале, в течении недели-двух.
3. Адреса 7FF0-7FF6 принадлежат ПЗУ контроллера и ведут себя соответственно.
Добрался до реала. Все оказалось просто, при обращении к слоту, ОЗУ компа переходит в высокоимпедансное состояние. Соответственно, при попытке прочесть память в таком состоянии всегда возвращается 0xFF. Чтение по адресу 0x7FF7 как раз и является попыткой чтения ОЗУ, соответственно результат всегда один - 0xFF. То же самое происходит и в случае обращения к пустому слоту, всегда возвращается чтение из ОЗУ - 0xFF.
С адресов 0x7FF9-0x7FFB читается то же, что записывалось туда ранее. По адресу 0x7FF8 иногда читается то что записывали, а иногда другие значения - наверное зависит от того, какое значение записали. Что в общем логично, учитывая, что это совмещенный регистр команд и статуса. По адресам 0x7FFC-0x7FFF писал выше, на реале подтвердилось.
Думаю вопрос закрыт.
Может, я очень сильно туплю,
но замечал ли кто нибудь, насколько сильно отличаются прошивки, на начальной стадии настройки портов В/В?
Прошивки 1.0/1.1 против 1.2
Код:;DD32 (84-87) ;rom 1.0/1.1 ROM:2920 3E 84 mvi a, 84h ;rom 1.2 ROM:2920 3E 81 mvi a, 81h ROM:2922 D3 87 out 87hКод:;DD32 (84-87) ;rom 1.0/1.1 ROM:2930 3E 10 mvi a, 10Fh ;rom 1.2 ROM:2930 3E DF mvi a, 0DFh ROM:2932 D3 86 out 86h
wtf
1.0/1.1
Код:RAM:2920 mvi a, 84h ; PB7-PB0 режим 1 RAM:2922 out 87h RAM:2924 mvi a, 0 RAM:2926 out 84h RAM:2928 mvi a, 82h RAM:292A out 83h RAM:292C mvi a, 11111100b RAM:292E out 80h RAM:2930 mvi a, 10h RAM:2932 out 86h[свернуть]
1.2
Код:RAM:2920 mvi a, 81h ; PC3-PC0 ввод RAM:2922 out 87h RAM:2924 mvi a, 0 RAM:2926 out 84h RAM:2928 mvi a, 82h RAM:292A out 83h RAM:292C mvi a, 11111100b RAM:292E out 80h RAM:2930 mvi a, 11011111b RAM:2932 out 86h[свернуть]
Различия касаются принтера.
В 1.0/1.1 порт B в режиме 1, младшая половина C - вывод
В 1.2 порт B в режиме 0, младшая половина C - ввод
cy6(21.02.2023)
Как я понимаю, оба в режиме 1. Порт В и младшая тетрада порта С. Верно?
Все, кроме младшей тетрады С, настраивается на вывод.
Итого, в порт В (85h) записывается байт данных для передачи на принтер.
В порт С1 (86h), по спаду сигнала WR/, автоматически записывается исходящий сигнал STROBE/ для принтера.
На порт C2 (86h), от принтера приходит входящий сигнал BUSY, который сбрасывает сигнал STROBE/
Части порта C0 и C3, для прерываний процессора, не используются.
Это, видимо, в младших версиях прошивки, избавили код от протокола взаимодействия с принтером.
В старшей же (1.2), решили все делать программно.
Документация по порту 86h, конечно не соответствует реальности.
В ней, C0 некое абстрактное "состояние печати", а C1-C3 не используются. А на схеме, С0 болтается в воздухе.
Осталось разобраться с выводом на порт С.
В обоих случаях, наш светодиод ALF на DD32:PORT_C5 равен НУЛЮ.Код:;DD32 (84-87) ;rom 1.0/1.1 ROM:2930 3E 10 mvi a, 10h ; 00(0)10000 DD32:PORT_C5 D1.6 инверсия светодиод ALF ;rom 1.2 ROM:2930 3E DF mvi a, 0DFh ; 11(0)11111 DD32:PORT_C5 D1.6 инверсия светодиод ALF ROM:2932 D3 86 out 86h
Порты С7 и С6 записываются по разному. Хотя поскольку они на схеме висят в воздухе, на это (видимо) просто забили.
Младшая же тетрада С3..С0 в режиме порта 1 выходит тоже просто игнорируется, при попытке ее записать в 0000 ?
wtf
ВВ55 позволяет задавать разные режимы только для портов A (режимы 0-2) и B (режимы 0 или 1), для C можно задать направление обмена, зато раздельно для младшей и старшей половины.
Что касается деталей обмена разных версий ПК8000 с принтером, то я в них не вникал, только запомнил для себя, что в 1.2 изменили вывод на принтер и соответствующие процедуры там другие. b2m разбирался, насколько помню он писал на форуме и в конфигах у него есть соответствующие различия. В частности C7 для 1.2 у него
portC[7]=prn.~strobe
и при печати символа на принтере в пзу 1.2 этим битом щелкают
А в 1.1 всего лишьКод:RAM:22C1 out 85h RAM:22C3 in 86h RAM:22C5 ani 7Fh RAM:22C7 out 86h RAM:22C9 ori 80h RAM:22CB out 86h RAM:22CD ret
- - - Добавлено - - -Код:RAM:229E out 85h RAM:22A0 ret
Если что вывод на принтер в 1.0 по адресу
017С out 85h
cy6(21.02.2023)
Есть одна маленькая проблемка, на схемах от Mick'а порт C7 никуда не запаян, судя по всему.
На родных схемах намного хуже. Порты С1 и С7 закорочены, и обозначены на разъеме принтера как STR(obe).
![]()
wtf
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)