А почему не используешь команды ВВ55, чтобы рулить отдельными битами порта С?
- - - Добавлено - - -
ORI 6 / XRI 6 === ANI 0F9h
- - - Добавлено - - -
XRI 06H; != XRI 04h & ORI 02h
Вид для печати
А почему не используешь команды ВВ55, чтобы рулить отдельными битами порта С?
- - - Добавлено - - -
ORI 6 / XRI 6 === ANI 0F9h
- - - Добавлено - - -
XRI 06H; != XRI 04h & ORI 02h
У нас данность: линия А порта ВВ55 используется для передачи данных. Так придумали авторы Ориона при организации ROM-диска. У меня задача по этой "ША" гонять данные в двух направлениях: при чтении ROM/RAM в одну сторону, а при записи RAM - в другую.
Менять назначение линий порта диска означает переписывание всего ранее созданного ПО, в т.ч. ОС и ПЗУ "Монитора" - эта затея совершенно бесперспективная, имхо.
Смысл в следующем: нужно бит D2 сбросить, а бит D1 установить. Для этого нужно выполнить:
Вместо этого я одной командой убиваю двух зайцев:Код:XRI 04h
ORI 02h
Типа экономия двух байт ;)Код:XRI 06H
- - - Добавлено - - -
Про "ANI 0F9h" не понял... В данном месте была задача сбрость биты D2 и D1 в ноль, не меняя значения остальных битов порта!
Добавил: а, теперь въехал! Спасибо за хинт ;)
При чём тут порт А. Я имею ввиду, чтобы изменить бит порта С (например, чтобы выдать тактовый сигнал через порт клавиатуры), не нужно его читать. Можно просто дать команду ВВ55 для изменения бита порта С.
Если бит D1 был установлен, то ты его этой командой только сбросишь.
А по поводу зайцев - обрати внимание на ORI 6 / XRI 6 === ANI 0F9h
А ANI 0F9h тогда что делает? :)
Есть команда ВВ55 (которую нужно выдавать в порт управления): 0000NNNV, где NNN - номер бита, а V - новое значение
можно сократить доКод:LDA PT_KBD
ORI 04H
STA PT_KBD
XRI 04H
STA PT_KBD
- - - Добавлено - - -Код:MVI A,5
STA PT_KBD+1
DCR A
STA PT_KBD+1
Остальные биты при этом не изменятся.
Прикольно! Не знал. Надо будет попробовать. А она в любом режиме ВВ55 работает?
Только когда порт С (или его половина) на вывод. Порты А и В так менять нельзя.
Есть ещё стробируемый ввод/вывод. При этом часть порта С (или полностью) используется для сигналов управления. Тут лучше даташит или книжку какую почитать.
Используется для вывода на принтер (можно даже в фоне по прерыванию), например. Но тут нужно, чтобы порт С был правильно соединен с сигналами управления принтера.
- - - Добавлено - - -
Ещё по поводу оптимизации:
не использует регистр A и работает быстрее, чемКод:DCR C
JNZ LLL
DCR B
JNZ LLL
Но там есть подводные камни - нужно перед циклом увеличить на 1 регистр B, если он был равен нулю или регистр С был не равен нулю.Код:DCX B
MOV A,C
ORA B
JNZ LLL
В практическом коде у меня сделано много оптимизаций по скорости. Вместо dcx-mov-ora просто INR L, вместо LDA/STA - LDAX/STAX, операции со стеком. Здесь просто пример кода, самый простой и прозрачный вариант для понимания принципов работы с ЭД.
Наконец-то с алибабы приехали СОЗУ:
https://pp.vk.me/c626222/v626222907/...a_SHGovSlQ.jpg
Для ЭД - идеальны!
По мотивам девайса, описанного тут - http://zx-pk.ru/threads/21984-dsdos-...l=1#post880046
собрал облегчённо-урезанную версию SuperROM-диска объёмом 1 Мб.
Схема устройства:
https://forum-img.guitarplayer.ru/2024/09/09/F2ctg.png
Альтернативная ссылка на изображение - http://denn.ru/8bit/orion/128/sromd/..._schematic.jpg
Диск содержит только SRAM-часть, без "страховочного" ПЗУ. Дело в том, что ROM-диск позволяет производить "горячую" замену, а ROM-вариант у меня уже есть. Т.о. для первоначальной прошивки загружаемся с обычного ROM-диска, после чего его отсоединяем, подключаем SROM-диск и записываем его. Далее уже ничего перетыкать не нужно, работаем полностью на SROM. В случае форс-мажора (порчи данных в СОЗУ), также загружаемся с обычного ROM-диска и перезаписываем SROM.
В качестве ЗУ в SROM используются две микросхемы статического ОЗУ - K6T4008C1B-VB70 (даташит), каждая объёмом 512 Кб. Хранение информации при отключении питания ПРК осуществляется за счёт резервного питания СОЗУ от батарейки CR2032.
Запись информации выполняется с помощью утилиты SROM$, подробности описаны там же.
Включение режима записи ручное, поэтому случайная порча информации диска при программных сбоях ПРК исключена.
Использование устройства требует доработки базовой схемы ПРК "Орион-128": проброс двух линий от порта клавиатуры (#F4) на разъём порта ROM-диска (#F5), а также заведения сигнала /RESET на контакт А9. Доработки точно такие же, как для Гибридного ЭД и для SuperROM v2.0.
В результате получаем непрерывное хранилище объёмом 1024 Кб! Из них 2 Кб отнимает загрузчик ОС, т.о. под файлы остаётся 1022 Кб, что в масштабах ПО "Ориона" весьма прилично.
У меня традиционно девайс собран на макетной плате, и заработал сразу. Фото готового варианта:
http://denn.ru/8bit/orion/128/sromd/...24_lite(1).jpg
http://denn.ru/8bit/orion/128/sromd/...24_lite(2).jpg
http://denn.ru/8bit/orion/128/sromd/...24_lite(3).jpg
http://denn.ru/8bit/orion/128/sromd/...24_lite(4).jpg
http://denn.ru/8bit/orion/128/sromd/...24_lite(5).jpg
Denn, а почему не сделать так?
Vladimir_S, это цепь подзарядки?
А не злобно 1 ком будет? Я видел в любительской схеме похожую подзарядку, там было 39 ком...
У меня Орион бывает сутками не выключается, как бы батарейке дно не вышибло от этой подзарядки :)
Denn, 1килоом не я придумал, это из схемы часов на К512ВИ1. У меня комп неделями не выключается и ничего. И еще - схему на 1Мб можно и попроще сотворить. Поставь не ТМ8, а например ИР23. Как раз 1Мб получается если задействовать все ноги ВВ55.
Vladimir_S, не понял, чем ИР23 проще ТМ8-ой?
Тут схема проще некуда: две м/сх ОЗУ и одна ТМ8 (защёлка номера банка). При этом ROM-диск полностью совместим "вниз" с авторским.
Вся схема получится (не считая диодов для питания и батарейки) из ИР23, два транзистора и два резистора. У меня 1Мб разбит на четыре (A-D) диска, 1011 секторов по 256 байт в каждом.
- - - Добавлено - - -
И память у меня - в даташите написано, что разрабатывалась специально для аппаратуры с батарейным питанием и при единице на CS все без исключения ноги переключаются в третье состояние. В общем какая то суперэкономичная. В понедельник напишу какая (у меня все на работе).
- - - Добавлено - - -
Подумал и вспомнил - CY62148. Правда не в дипе.
Vladimir_S, всё равно я ничего не понял. Нарисуй схему, плз.
В моём варианте две СОЗУ впараллель, кроме чипселектов, последними с помощью парафазного выхода Р3 ТМ8-ой осуществляется переключение между младшими и старшими 512к. Весь "метр" памяти доступен линейно, одним диском "А:". ВВ55-я напрямую адресует 64 Кб, следовательно "метр" разбит на 16 банков по 64 Кб. Номер банка защёлкивает ТМ8-я. На транзисторах собрана коммутация чипселектов СОЗУ и имитатор супервайзора.
Denn, http://zx-pk.ru/threads/12137-radio-...l=1#post743383
Только вместо FLASH SRAM, ну и понятно что CS второй SRAM на С7.
Vladimir_S, во-первых, судя по кол-ву адресных ног, тут не "метр", а 512кб. Во-вторых, твоя схема не совместима со стандартом ROM-диска (Монитор с него не запустит загрузчик). В-третьих, при программировании флэш-ПЗУ требуется двухсторонний обмен данными, а ВВ55-я имеет неприятную фишку: при смене режима порта она скидывает в ноль все линии, т.е. трансляция сигналов управления через ВВ55-ю не получится.
- - - Добавлено - - -
При программировании режима ВВ55, на всех "С" установятся "0", в результате будет выборка обоих чипов, т.е. аппаратная коллизия, какая-то ОЗУшка не выдержит и погорит ((
Наконец-то, выбрал время отрисовать финальную схему ЭД:
http://denn.ru/8bit/orion/128/e-disk/e-disk4.jpg
(открыть крупно)
Убрал дорогостоящий супервайзор DS1210, с соответствующим "пересчётом" логики управления чипселектами.
Важный момент, в качестве D5 обязательно использовать КМОП-логику (74HCx00, 74ACx00, КР1594ЛА3, КР5564ЛА3 и т.п.), т.к. в режиме "сна" она питается от батарейки! Остальные микросхемы не принципиально, можно "обычную" серию 1533.
Также добавил светодиод индикации доступа к RAM-диску.
Я сначала разрисовал вариант на транзисторах, но потом решил перевести на микрухи - меньше канители с разводкой, обвязкой, трудностями доставания/пайки. Тут нужно два чипселекта рулить в сон, соответственно три транзюка получаются + всё равно некоторое кол-во ЛЭ. В итоге сделал по минимуму корпусов.
Пипец. Denn. Cнова картина ручкой (интересно сколько черновиков в мусорке):)
- - - Добавлено - - -
Vр питание обернул. Хи-хи.
- - - Добавлено - - -
Я зачем в свою схему кондер поставил? Этот транзистор гад в режим усиления уходил.
И ппц как путает. Отхватывать питание у логики. И на диоды:)
Да это козлику понятно
Наконец-то нашел пару часиков и спаял эл.диск.
ОС запускается (правда пока в варианте 64к), но при попытке обратиться к диску Е - ошибка. Монтаж проверил.
Буду разбираться дальше. Еще смущает то, что диск А определяется в 1 МБ, хотя установлена 512.
Вложение 65263
Вложение 65264
Вложение 65265
64к - это объём ROM-диска ?
Хм, странно. Судя по картинке, форматирование таки проходит успешно, а впоследствии ОС не видит разметку.
Тут всё верно. В 2 Кб загрузчика физически нет места под программную поддержку ПЗУ более 64 Кб и анализ структуры диска, поэтому при загрузке просто детектится наличие диска и выводится его максимальная ёмкость, поддержанная в данной версии ОС. К тому же достоверно определить фактическую ёмкость установленной микросхемы ПЗУ затруднительно, ОС по команде "?А" определяет объём, занятый файлами, а свободное место - как теоретический максимум минус объём файлов.
Да, за неимением пока более емкой ПЗУ зашил ОС в 512кбит.
@mr.Lee
Посмотрел исходник FORMAT'а, оказывается нет проверки успешности форматирования. Сначала выполняется определение наличия RAM-диска, после чего в диск записывается структура каталога (DIR+FAT) и "успешный" выход. Определение делается следующим образом: ЭД переводится в режим "чтение RAM", читается байт по адресу 0000h нулевого банка, если там не 0C3h, значит RAM5 есть. Из чего можно сделать следующий вывод: если м/сх СОЗУ неисправны или вообще отсутствуют, то детект пройдёт успешно, форматилка отработает без ошибок, а ОС разумеется сообщит о неготовности диска - что и видно на скриншоте.
По хорошему, нужно усложнить алгоритм форматирования, дополнив его микро-тестом СОЗУ. Или сделать отдельную утилиту теста RAM-части ЭД.
заработало. пришлось перепаять озу - может феном перегрел.
Вложение 65325
Вложение 65326
Сам девайс, мелочевка (smd) разместилась на обратной стороне.
Вложение 65327
осталось дождаться ПЗУ 4мбит и собрать уже рабочий вариант
mr.Lee, отличная работа!
Вы наверное уже попользовались устройством какое-то время, как обстоят дела с надёжностью хранения данных в СОЗУ ?
Меня интересует работа рассыпного супервайзора по новой схемотехнике. По логике всё должно быть красиво, но реальность обычно бывает сурова :)
Писал одной рукой, во второй еще остывал паяльник:-). Ближайшую неделю буду тестить. Может пару-тройку дней модуль полкжит на батарейном питании, потом проверю
mr.Lee, спасибо за печатную плату, собрал на одном дыхании, всё заработало сразу!
Фотоотчёт:
http://denn.ru/8bit/orion/128/e-disk/edisk_17.jpg
http://denn.ru/8bit/orion/128/e-disk/edisk_18.jpg
http://denn.ru/8bit/orion/128/e-disk/edisk_19.jpg
http://denn.ru/8bit/orion/128/e-disk/edisk_20.jpg
Здорово:).
Я все же подготовлю исправленный вариант - может кому еще будет интересно перевести работу с Орионом на качественно другой уровень.
mr.Lee, пожелания по новому варианту платы.
Я хотел заменить на старом Орионе свой "первый блин" ЭД на неправильных СОЗУ, и меня ждал облом - там у меня двухэтажное ОЗУ ПРК !!!
Соответственно, либо просто укоротить плату (желательно), чтобы она не залезала в область ОЗУ, либо направить в другую сторону.
Момент номер два: хочется видеть в надетом варианте красоту лицевой стороны, а не изнанки.
Можно ещё предусмотреть доп. линию запитки СОЗУ от "дежурки" (кто питает Орион от АТХ-БП), т.е. пробросить линию С9 через диод в точку суммирования источников питаний СОЗУ. У кого "дежурки" нет, тот просто не запаивает этот диод. С "дежуркой" батарейка реально становится вечной, т.к. она работает только в случае пропадания сетевого напряжения.
П.С. мелкологику можно попробовать разместить под брюхом ПЗУ, а ТМ9 тоже взять в SOIC'е.