Просмотр полной версии : Орион-2010. Hard & Soft
А не надо обнулять
надо если с момента последнего чтения порта новых сканкодов не приходило к примеру читать 0 или FF
Лучше 00, старший битик можно заюзать как признак что сканкод был с префиксом E0, можно будет о вскаких Fx или нажатиях на доп клаве
Но понадобится еще один регистр где будет текущее состояние клавиш модификаторов ctrl shift итд
если с момента последнего чтения порта новых сканкодов не приходило
ключевое слово "если". Нужно сначала узнать, как это "если" определить. Перелопачивать код на почти незнакомом мне Верилоге несколько затруднительно.
читалка сканкодов из примера для DE1 ?
а определить "если" очь просто если читалка сканкод возвращала ставим флаг
при чтении порта флаг сбрасываем
если флаг сброшен то при чтении из порта возвращаем 0
Error404
16.03.2010, 14:03
Новый порт F766 -
сканкод (PS/2 ПЦ) последней нажатой кнопки.
Теперь думаю, как обнулять значение при отпускании...
Только не говорите про умные вещи типа F0 :)
Какие планы насчет одновременно нажатых кнопок?
Для неигрового применения (для ОС или Монитора) можно в принципе иметь информацию только по последней нажатой, но тогда надо как-то передавать в этот же момент времени, что и для нажатой кнопки, еще и статус спецклавиш (ctrl, shift, alt, win) , влияющих на интерпретацию нажатой кнопки, т.к. с точки зрения функционирования ПО, обычно ctrl+С <> shift+с <> С
сканкодов из примера для DE1
А фик знает.
Победа, как обычно - за нами :)
При отпускании кнопки из порта читаем 00.
Какие планы насчет одновременно нажатых кнопок?
Никаких. Сделал в целях "почему бы и нет".
---------- Post added at 14:14 ---------- Previous post was at 14:08 ----------
Используя сканкоды, добавил "тормозилку" до 2.5Мгц по кнопке F11. Для AVIPL$ исключительно :)
---------- Post added at 14:23 ---------- Previous post was at 14:14 ----------
Состояние кнопок CTRL, SHIFT и CAPSLOCK читаем из порта F402.
---------- Post added at 14:26 ---------- Previous post was at 14:23 ----------
Не нажата никакая - 255
CTRL - 191
SHIFT - 223
CAPS - 127
---------- Post added at 14:55 ---------- Previous post was at 14:26 ----------
В эмуле, однако, из порта читается 240. Переделываю у себя.
---------- Post added at 15:23 ---------- Previous post was at 14:55 ----------
Прошивки и прочие файлы буду теперь хранить у себя на сайтике. На файлообменнике файлы со временем исчезают.
Проект последней версии 0.54.1: http://scorpion-zs.narod.ru/beta_0.55.2.rar
Сорцы схемы в Schemagee: http://scorpion-zs.narod.ru/SchemaGee_source.rar
Схема уже выкладывалась несколькими постами ранее, изменений нет.
Error404
16.03.2010, 17:32
Никаких. Сделал в целях "почему бы и нет".[COLOR="Silver"]
Используя сканкоды, добавил "тормозилку" до 2.5Мгц по кнопке F11. Для AVIPL$ исключительно :)
А что за программа AVIPL$ ?
А что за программа AVIPL$ ?
Ну, совсем не .AVI Player, как можно подумать :)
Простой текстовый редактор под ORDOS, в котором можно писать ассемблерные тексты. просто ничего другого я не нашел :(
Давно забил на этот вопрос, но наверное лучше к нему вернуться.
Есть такая игра - Galaxian. Вначале эпопеи с Орионом-2010 она работала.
Потом, по мере "наворачивания" Ори работать перестала.
Запуск идет как обычно, выбираем уровень, рисуется экран, раздается несколько "треньков". И когда игра должна собственно начаться, висим.
Скрин этого момента прилагаю.
Что интересно, в эмуле она работает.
Понять бы, на чём она вешается, чтобы железо "подрихтовать". Иначе "идеального" Ориона не получится :)
Error404
17.03.2010, 00:10
Если мне не изменяет память, Галаксине - одна из специфических игр. Специфичность в том, что это одна из первых адаптаций игр ZX на Орионе, и адаптирована по упрощенной схеме: процедуры вывода на экран не переделывались (как в более продвинутых играх), вместо этого по прерываниям 50Гц экраны перекодировались из формата ZX на орионовский экран. Из-за этого примитивная, в-общем то, игра в адаптации получилась настолько ресурсоемкой, что даже на 3,5Мгц подтормаживала.
Не знаю, дает ли это какую-то информацию к размышлению. :)
Upd: Сейчас посмотрел немного в эмуляторе - не похоже, чтобы там вообще использовались прерывания и диспетчер 16к.
Upd: Сейчас посмотрел немного в эмуляторе - не похоже, чтобы там вообще использовались прерывания и диспетчер 16к.
Ага, я тоже попытался вести расследование в эмуле. Ничего примечательного не накопал...
Кроме интересного места при инициализации игры:
LD A,FD
IN A,(FE)
В результате в А оказывается FF. В чем суть - непонятно. На Спектрумах так делается опрос клавиатуры...
---------- Post added at 08:54 ---------- Previous post was at 08:15 ----------
Кроме интересного места при инициализации игры
Как раз тут разгадка и скрывалась.
У меня при чтении портов выше F800, если эти порты не были определены в селекторах, читалась не пустая шина, а что-то неизвестное из недр альтеры. :v2_devil:
Проц читал не FF, как положено, а нечто С9.
Переделал.
Галаксиан заработал. :v2_finge:
Проект последней версии 0.54.1: http://scorpion-zs.narod.ru/beta_0.55.2.rarРекомендую не включать в архив папку DB - размер архива уменьшится на порядок.
Рекомендую не включать в архив папку DB - размер архива уменьшится на порядок.
Спасибо, учту.
Новый порт F766 -
сканкод (PS/2 ПЦ) последней нажатой кнопки.
Теперь думаю, как обнулять значение при отпускании...
Только не говорите про умные вещи типа F0
1. Думаю, не следует все порты лепить по адресам друг за другом. Надо как-то делить на функциональные группы и между ними делать запас адресов для будущих расширений.
2. Как и для USART, для KBRD тоже необходимо прерывание, и так же бит для его вкл./выкл.. Если есть прерывание, то порт со скан-кодом можно не обнулять. Там будет код последней нажатой клавиши. И пусть уже программа сама ставит флаги и определяет что там было нажато.
3. Может быть все прерывания свести в один порт, где D7=EI, т.е. разрешает/запрещает все прерывания контроллера? Другие биты этого порта включают всё по отдельности.
4. НЕ совсем понял: Int50 у нас чем-либо отключается (кроме команды EI), или долбит сразу после подачи питания? Хреново, если это прерывание не имеет наружного вывода и подсоединено к кадровой внутри ПЛИС на постоянно. Это не есть хорошо, раз это прерывание не возможно задействовать для других целей! Может быть сделать вывод, а импульс кадровой подключать/отключать через битик в каком-то порту?
1. Думаю, не следует все порты лепить по адресам друг за другом. Надо как-то делить на функциональные группы и между ними делать запас адресов для будущих расширений.
Как скажете. Куда скажете- туда и приколочу.
2. Как и для USART, для KBRD тоже необходимо прерывание, и так же бит для его вкл./выкл.. Порт со скан-кодом можно обнулять по заднему фронту сигнала Чтения этого порта.
А каков глубинный смысл этих сканкодов вообще? Особенно учитывая, что читаются правильно фактически только однобайтные коды, для двух-трехбайтных видим только последний.
Приделаем и прерывание, приоритет вероятно лучше разместить между USART и INT50 (у USART по понятным причинам самый высокий).
3. Может быть все прерывания свести в один порт, где D7=EI, т.е. разрешает/запрещает все прерывания контроллера? Другие биты этого порта включают всё по отдельности.
Ответ в пункте 1.
4. НЕ совсем понял: Int50 у нас чем-либо отключается (кроме команды EI), или долбит сразу после подачи питания? Хреново, если это прерывание не имеет наружного вывода и подсоединено к кадровой внутри ПЛИС напостоянно. Это не есть хорошо, раз это прерывание не возможно задействовать для других целей!
Отключается битом Д6 порта FB. Это стандарт.
По умолчанию (сбросу) отключено.
Error404
17.03.2010, 18:22
читаются правильно фактически только однобайтные коды, для двух-трехбайтных видим только последний.
А какие кнопки (или сочетания) попадают под однобайтные коды?
И какие под двух-трехбайтные?
А какие кнопки (или сочетания) попадают под однобайтные коды?
И какие под двух-трехбайтные?
Тута есть
Error404
17.03.2010, 19:07
Тута есть
Посмотрел по-диагонали. В табличке в документе все однобайтовые коды кроме кнопки F7 - семибитные.
Все двухбайтные коды = <префикс E0>+семибитный код.
Соответственно, просматривается простейшее решение:
- если пришел байт не равный E0 (однобайтный сканкод), передаем его на F766 (или другой порт какой вы с pvlad решите) без изменений.
- если пришел байт E0, то его не передаем, а следующий за ним передаем на F766 с битом D7 установленным в "1" (семибитный код + 80h)
Получим в одном байте покрытие для практически всех сканкодов.
Получим в одном байте покрытие для практически всех сканкодов.
Я другую фичу нашел :)
несмотря на количество байт, последние байты вроде как везде разные. А порт у нас помнит только последний пришедший :) Так что у нас и так вся клава под контролем.
В табличке в документе все однобайтовые коды кроме кнопки F7 - семибитные.
Естесственно семибитные. Установленный старший бит означает отпускание соответствующей клавиши (если конечно это не E0 и не FA).
---------- Post added at 21:32 ---------- Previous post was at 21:30 ----------
Так что у нас и так вся клава под контролем.
Не вся. С таким подходом ты не различишь обычные стрелки и соответствующие клавиши на нумпаде.
последние байты вроде как везде разные
Ну да, кроме ScrollLock, CapsLock, NumLock. У них коды двухбайтные, а последний - всегда FA.
Не вся. С таким подходом ты не различишь обычные стрелки и соответствующие клавиши на нумпаде.
Уже увидел... :(
---------- Post added at 19:36 ---------- Previous post was at 19:34 ----------
Установленный старший бит означает отпускание соответствующей клавиши
Ээээ.... А не F0 + код клавиши означает отпускание? :)
Ээээ.... А не F0 + код клавиши означает отпускание? :)
Да нет, вроде. Может есть какие-то варианты клавиатур, но я не встречал. У меня PS/2 клавиатура, может у обычных клавиатур такой протокол, про который ты говоришь?
---------- Post added at 21:54 ---------- Previous post was at 21:53 ----------
Или это от команд инициализации клавиатуры зависит?
Да нет, вроде. Может есть какие-то варианты клавиатур, но я не встречал. У меня PS/2 клавиатура, может у обычных клавиатур такой протокол, про который ты говоришь?
Нифига подобного. Это стандарт для клавиатур PS/2 по умолчанию. Достаточно в сети порыться...
Нифига подобного. Это стандарт для клавиатур PS/2 по умолчанию. Достаточно в сети порыться...
Нифига подобного. Это стандарт для клавиатур AT по-умолчанию. А вообще есть три стандарта XT, AT и PS/2. Современные клавиатуры могут переключаться между тремя этими стандартами. Командой F0 0x, где x - это 0 - чтобы выдать текущее значение, 1 - XT, 2 - AT и 3 - PS/2.
Современные клавиатуры могут переключаться между тремя этими стандартами.
Дык никто и не спорит. Не отправляй на клаву никаких команд, а просто читай её, получишь то, о чем я говорил. Тем паче, что на ПЛИС менять режимы клавы как-то не принято. Заморачиваться не хотят. Вот на МК - пожалуйста, Камиль меняет режимы в своих контроллерах.
Оба правы :) То, о чём я говорил, это вообще XT стандарт. Но фишка в том, что некоторые клавиатуры (особенно старые) по-умолчанию как раз его и имеют. Для совместимости со старым софтом. Поэтому менять режим надо обязательно.
Оба правы
Согласен на ничью :v2_clap2: :v2_cheer:
Поэтому менять режим надо обязательно
А вот тут - фиг вам всем. Даже альтера не стала морочиться с отправкой команд с ПЛИС на клавиатуру. Я тем более не буду. Желающие сходят в магазин и купят любую из продающихся там клавиатур с PS/2-хвостом.
Вторую машину буду делать в совокупности с AVR Мега, там уже другой "полет мысли" будет.
Как скажете. Куда скажете- туда и приколочу.
Я уже что-то плохо стал соображать каких портов мы наплодили. Может стоит огласить полный список, в том числе и побитовое распределение?
А каков глубинный смысл этих сканкодов вообще? Особенно учитывая, что читаются правильно фактически только однобайтные коды, для двух-трехбайтных видим только последний.
Честно говоря, я думал что порт будет двухбайтовый. Наличие скан-кодов упрощает программу как клавиатуры, так и статуса клавиатуры на порядок! Кроме того, наличие прерывания позволяет принципиально по другому строить алгоритм всей программ. Как один из злободневных примеров: практически исчезнут ситуации, когда программа где-то висит в цикле, и кроме как Ресетом это безобразие не остановить.
Приделаем и прерывание, приоритет вероятно лучше разместить между USART и INT50 (у USART по понятным причинам самый высокий).
Думаю, Int50 должен иметь (в данной ситуации) самый высокий приоритет - это метка времени, так сказать - Timer0. Если брать аналогию с МК (ну, хотя бы AVR. МК51), то USART не имеет высокий приоритет. Поэтому следующим должен быть Timer1. Далее USART и KBRD.
Отключается битом Д6 порта FB. Это стандарт.
По умолчанию (сбросу) отключено.
Спасибо, понял. Некоторые моменты уже по забылись за столько лет.
И последнее. Если проблема VGA решена (инфо я пропустил!?), то меня волнуют, пожалуй, только два вопроса (на данный момент!). Хотелось бы, чтобы Главный конструктор и народ поддержали.
1. Как и в Орион-ПРО отключать порты, положенные на память, а иметь только IN/OUТ. Объяснять не буду что это дает - всем понятно!
2. Сделать двух-байтовый таймер (Timer1) и прерывание к нему. Функциональную сложность определяйте сами. Предел мечты, чтобы был внешний вход. Тогда можно очень просто считать импульсы за единицу времени (частотомер!). В этом случае единицей времени может быть Int50. Понятно, что вход таймера переключается между внешним выводом и внутренней частотой. Кроме того, должен быть двухбайтовый порт для считывания текущего значения таймера.
---------- Post added at 16:43 ---------- Previous post was at 16:38 ----------
Вторую машину буду делать...
Ну, что ж мудрое решение! А эта версия пусть будет на моей совести...
Я уже что-то плохо стал соображать...
М-да! Ну, вот, снова затишье! Похоже, сказывается весенний авитаминоз!
Похоже, сказывается весенний авитаминоз!
Весенний отпуск.
Пока Еррор-404 не выдаст продукт, я ухожу на родной Спектрум. Ибо там дел накопилось пока я с Орионом ковырялся :v2_conf2:. До скорой (надеюсь) встречи! :)
Прошивки и прочие файлы буду теперь хранить у себя на сайтике. На файлообменнике файлы со временем исчезают.
Проект последней версии 0.54.1: http://scorpion-zs.narod.ru/beta_0.55.2.rar
Сорцы схемы в Schemagee: http://scorpion-zs.narod.ru/SchemaGee_source.rar
Схема уже выкладывалась несколькими постами ранее, изменений нет.
Нет ли желания завести проект на GoogleCode? Там и система контроля версий есть, и тусовку из разработчиков-участников наладить можно.
Нет ли желания завести проект на GoogleCode? Там и система контроля версий есть, и тусовку из разработчиков-участников наладить можно.
Нет, спасибо. Пока не нужно ни первое, ни второе.
Мини-страничку по Ориону с фото и видео, документацией и схемами наверное стоит сделать у себя на сайте.
Error404
24.03.2010, 21:36
Весенний отпуск.
Пока Еррор-404 не выдаст продукт, я ухожу на родной Спектрум. Ибо там дел накопилось пока я с Орионом ковырялся :v2_conf2:. До скорой (надеюсь) встречи! :)
Надолго не уходи, заглядывай. :)
Я планирую на этой неделе запустить CPM (если опять на работе не припашут).
Весь код CPM с планировавшимися правками уже написан (переписано порядка 50% BIOS-a, MBR), сейчас самое мутное - отладка.
Также переписан и отлажен драйвер низкоуровневого доступа к носителю - idebdos - в универсальной версии (один и тот же драйвер работает как для IDE, так и для SD-карт). Так что на SD уже автоматически работают fdisk (разметка партиций) и fat (копировщик из/в FAT12/16/32), т.к. они весь нижний уровень доступа к IDE/SD не содержат - он вынесен в idebdos.
Надолго не уходи, заглядывай.
На "свистки" я заглядываю, только не пишу ничего, ибо нечего :)
Сейчас, наткнувшись на opencores.org на новую версию ядра Z80, обновил его в проекте. Чисто на всякий случай :)
Error404
28.03.2010, 12:18
Нет, спасибо. Пока не нужно ни первое, ни второе.
Мини-страничку по Ориону с фото и видео, документацией и схемами наверное стоит сделать у себя на сайте.
Обязательно надо сделать, если еще не сделано.
И пропиарить - в emuverse.ru, wiki страничке Ориона, у меня на странице, да и вообще повсеместно. Чтобы народ знал. Так соберем "группу тестирования".
---------- Post added at 12:18 ---------- Previous post was at 12:15 ----------
Я планирую на этой неделе запустить CPM на SD.
Сделано! :v2_smoke:
http://zx.pk.ru/showpost.php?p=269861&postcount=35
Error404, ты не помнишь навскидку, во время работы теста памяти при старте СР/М, можно "сократить" время нажатием кнопочки Интер. Так вот, там просто читается F401 или как-то мудрёнее сделано? Очень похоже на "автоопределение типа клавиатуры" как в играх.
Суть в том, что "ускорить" тест получется только кнопкой "Esc", на Интер и Пробел реакции нет. Я знаю, что это проблема в железе, ибо она то появляется, то исчезает. Чую, что опять что-то не то читается из F400. Также перестал работать стартовый экран Эксолона, там просят нажать Интер, но реакция есть также только на Esc.
Error404
29.03.2010, 00:38
Error404, ты не помнишь навскидку, во время работы теста памяти при старте СР/М, можно "сократить" время нажатием кнопочки Интер. Так вот, там просто читается F401 или как-то мудрёнее сделано? Очень похоже на "автоопределение типа клавиатуры" как в играх.
Суть в том, что "ускорить" тест получется только кнопкой "Esc", на Интер и Пробел реакции нет. Я знаю, что это проблема в железе, ибо она то появляется, то исчезает. Чую, что опять что-то не то читается из F400. Также перестал работать стартовый экран Эксолона, там просят нажать Интер, но реакция есть также только на Esc.
При загрузке CPM "проматывание" теста памяти делается любой кнопкой. Там опрашивается п\п Монитора статус. Код этой п\п примерно такой:
KBD_ST: XOR A
LD (YF400),A
LD A,(YF401)
INC A
RET Z
OR 0FFH
RET
Соответственно, ПЛИС должна успеть ответить за 12 тактов CPU.
Если она не успевает, эффект будет ровно такой, как описываешь.
Кстати, ДОС-SD в эмуляторе работает в модели Орион-ПРО (из режима 128), но Элита не работает - зависает. Конечно, надо еще и на реале проверять (может быть эмуль не точно эмулирует).
Соответственно, ПЛИС должна успеть ответить за 12 тактов CPU.
Спасибо за фрагмент кода. Разобрался.
В общем, такой подход, как применен в этом фрагменте для ПЦ клавиатуры не прокатит. Опрос одновременно более чем 1 ряда клавиатуры загоняет контроллер в "непонятки". Для разруливания этого применяется принцип, при котором при запросе более 1 ряда контроллер обрабатывает его как запрос одного заранее определенного "аварийного" ряда. У меня после последних ковыряний с клавиатурой стояло по дефолту нулевой ряд матрицы (Esc, F1-F4,Delete...). Для столь любимой кнопки Enter переделаю ряд "по умолчанию" на седьмой.
---------- Post added at 10:07 ---------- Previous post was at 09:53 ----------
Если она не успевает, эффект будет ровно такой, как описываешь.
Успевает. ПЛИС не МК, ей не нужно время для обработки запроса. Достаточно пары тактов клока.
Error404
29.03.2010, 11:23
Спасибо за фрагмент кода. Разобрался.
В общем, такой подход, как применен в этом фрагменте для ПЦ клавиатуры не прокатит. Опрос одновременно более чем 1 ряда клавиатуры загоняет контроллер в "непонятки". Для разруливания этого применяется принцип, при котором при запросе более 1 ряда контроллер обрабатывает его как запрос одного заранее определенного "аварийного" ряда. У меня после последних ковыряний с клавиатурой стояло по дефолту нулевой ряд матрицы (Esc, F1-F4,Delete...). Для столь любимой кнопки Enter переделаю ряд "по умолчанию" на седьмой.
В таком режиме КМК часть игр не будет работать, особенно старых Орионовских - опрос статуса всегда делается опросом всех линий одновременно. Это уже проходили с контроллером Камиля - у него отрабатывается эмуляция одновременно нажатых кнопок, заточка шла как раз на то, чтобы контроллер "успевал". Кстати, я проверял прошивки на отработку этой особенности на игре CrazyCars (crcars#.com - там есть похожий фрагмент кода опроса клавиатуры) и п/п Монитора статус как раз при старте ОС. :)
Позволю влезть с комментарием. Когда делал специалист на FPGA, тоже встала проблема с PS/2 клавой. Причем в спеце клавиатуру можно сканировать как по строкам, так и по столбцам. Решил вот так: http://dmtr.nnov.ru/Specialist.v Работает сканирование и по строкам и по столбцам, а также позволяет групповые нажатия и сканирование сразу нескольких строк/столбцов. Правда на Verilog, но если интересно, могу покамментить.
В таком режиме КМК часть игр не будет работать, особенно старых Орионовских - опрос статуса всегда делается опросом всех линий одновременно.
Не понял, почему не будет. Я перенес "дефолтную" строчку на седьмую. Теперь при сканировании "всех" кнопок откликается Enter и кнопочки в одном с ним ряду.
Крэзи Кар работает нормально.
Работает сканирование и по строкам и по столбцам, а также позволяет групповые нажатия и сканирование сразу нескольких строк/столбцов. Правда на Verilog, но если интересно, могу покамментить.
Это разумеется интересно :)
Хорошие решения грех не использовать.
Будем все очень благодарны.
С клавой в общем все просто. По сканкодам сбрасываем в 0, или устанавливаем если первым пришел F0h, бит в массиве key[0:11]. Значимых бит в каждом байте массива 6, что соответствует раскладке клавы Специалиста(6x12). А далее при чтении из портов A,C ВВ55 туда мапится байт соответсвующий нажатым кнопкам по всем линиям, в которых установлен 0 в порту B. Ну и наоборот, при чтении из B, только те, в которых установлен 0 в портах A,C.
Вот кусок, который собирает байт для порта C, взависимости от состояния порта B (т.е. запрашиваемых линий клавиатуры) и реально нажатых кнопок на PS клаве:
wire [7:0] VV55Cin = {4'b1111, (VV55B[2] ? 1'b1 : KeyMap[11][0]) &
(VV55B[3] ? 1'b1 : KeyMap[11][1]) &
(VV55B[4] ? 1'b1 : KeyMap[11][2]) &
(VV55B[5] ? 1'b1 : KeyMap[11][3]) &
(VV55B[6] ? 1'b1 : KeyMap[11][4]) &
(VV55B[7] ? 1'b1 : KeyMap[11][5]),
(VV55B[2] ? 1'b1 : KeyMap[10][0]) &
(VV55B[3] ? 1'b1 : KeyMap[10][1]) &
(VV55B[4] ? 1'b1 : KeyMap[10][2]) &
(VV55B[5] ? 1'b1 : KeyMap[10][3]) &
(VV55B[6] ? 1'b1 : KeyMap[10][4]) &
(VV55B[7] ? 1'b1 : KeyMap[10][5]),
(VV55B[2] ? 1'b1 : KeyMap[9][0]) &
(VV55B[3] ? 1'b1 : KeyMap[9][1]) &
(VV55B[4] ? 1'b1 : KeyMap[9][2]) &
(VV55B[5] ? 1'b1 : KeyMap[9][3]) &
(VV55B[6] ? 1'b1 : KeyMap[9][4]) &
(VV55B[7] ? 1'b1 : KeyMap[9][5]),
(VV55B[2] ? 1'b1 : KeyMap[8][0]) &
(VV55B[3] ? 1'b1 : KeyMap[8][1]) &
(VV55B[4] ? 1'b1 : KeyMap[8][2]) &
(VV55B[5] ? 1'b1 : KeyMap[8][3]) &
(VV55B[6] ? 1'b1 : KeyMap[8][4]) &
(VV55B[7] ? 1'b1 : KeyMap[8][5])};
Может оно конечно в итоге будет то-же самое, но на мой взгляд так короче:
(VV55B[2] | KeyMap[11][0]) &
(VV55B[3] | KeyMap[11][1]) &
и т. д.
Я подумал, что в твоём случае будет мультиплексор, а в моём - просто логическое ИЛИ. Возможно я неправ.
Это мой первый проект на ПЛИС, поэтому все как в голове прикидывал, так и ложилось в код без оптимизации на емкость. А так да, работать будет и занимать поменьше в ПЛИС будет.
С клавой в общем все просто.
Кой-чего становится понятно. Думаю что из этого можно применить :)
Забавно "вешаются" измерялки скорости компьютера. Это касается и speed.com и speedt.ord. прогрессбары зашкаливают, и проги виснут :)
Процессор скомпилен в режиме fastZ80.
Не знаю, с этим связано или нет...
---------- Post added at 11:31 ---------- Previous post was at 11:29 ----------
Да, прерывания работают исправно, часики в СР/М нормально тикают (без самого чипа RTC).
---------- Post added at 11:45 ---------- Previous post was at 11:31 ----------
Заодно выяснил, что я идиоД. Когда подключал ВГА-конвертер к Ори, совсем из башки вылетело что синхру надо инвертировать... Потому и слетала строчная синхронизация.
---------- Post added at 12:34 ---------- Previous post was at 11:45 ----------
Quazatron, прекрасно работающий из под ORDOS, под СР/М работать не хочет.
Error404
30.03.2010, 13:29
Заодно выяснил, что я идиоД. Когда подключал ВГА-конвертер к Ори, совсем из башки вылетело что синхру надо инвертировать... Потому и слетала строчная синхронизация.
Ну так что, работает? А на 480х256 точек?
Quazatron, прекрасно работающий из под ORDOS, под СР/М работать не хочет.
Перезалил GAMES-sd.zip с работающим Quazatron и мелкими правками в DOS.
http://orion-z.hoter.ru/file/335/5705_GAMES-sd.zip
Ну так что, работает? А на 480х256 точек?
Проверю или вечером, или завтра.
Перезалил GAMES-sd.zip с работающим Quazatron и мелкими правками в DOS.
Очень хорошо.
А нет случаем мануала к асму от Билли Гейтся на образе?
Error404
30.03.2010, 14:04
А нет случаем мануала к асму от Билли Гейтся на образе?
Есть отдельно, тут:
http://orion-z.hoter.ru/file/337/3422_MACRO_TX.lzh
с работающим Quazatron
Да, работает :)
---------- Post added at 14:05 ---------- Previous post was at 14:04 ----------
Есть отдельно, тут:
Вот спасибо. Теперь порядок.
Error404
30.03.2010, 15:45
Вот спасибо. Теперь порядок.
Вообще, проще всего чтобы начать программить под СРМ на асм, нужно просто взять любой небольшой исходник (например из тех что я на форуме размещал) и переделать его. Там чаще всего уже есть и вывод на экран, и ввод с клавиатуры - только свой код добавить нужный.
Как компилировать (какие ключи компилятора) в наиболее общеупотребительном случае - см. в USER_15 коммандники asm.bat, esm.bat (тоже что и asm, только библиотечный файл кладется на электронный диск Е: ). Там же в USER_15 и прочие системные вещи типа текстового редактора SED, компилятор-линковщик M80-L80.
Например, компиляция файла test.mac будет выглядеть как вызов ранее упомянутого командника с параметром:
asm test
нужно просто взять любой небольшой исходник
Я как раз твои исходники и беру за основу.
В ОРДОСЕ разобрался с программированием, нашел удобный для себя пакет программ. Теперь делаю то же в СР/М.
Подключил Ори к ВГА-монику через конвертер.
Конвертер преобразует до кучи 50гц картинку с Ориона в 60гц ВГА.
Фото и отчет тут - http://zx.pk.ru/showpost.php?p=270832&postcount=726
Как видно, пока не фонтан...
Изображение хорошее, но вытянутое. И кто только придумал квадратный экран Ориона... ;)
...И кто только придумал квадратный экран Ориона... ;)
Кто, кто... тот кто разогнал до 2,5 МГц его процик.
выигрыш (?) 25% производительности + мешочег гемороя :v2_cry:
Кто, кто... тот кто разогнал до 2,5 МГц его процик.
Залепить штоль в Ори кварцик на 16Мгц и счетчики переписать под Специалиста...
Частоты проца получим 2, 4, 8Мгц соответственно...
Залепить штоль в Ори кварцик на 16Мгц и счетчики переписать под Специалиста...
Частоты проца получим 2, 4, 8Мгц соответственно...
Отличное решение! Тактовик специалиста в три раза проще и востолько же раз логичней.
Если бы не "доступность" элементной базы в свое время, то Орион надо было сразу делать на Z80 с тактовой 4 МГц.
Отличное решение!
Народ скажет "давай, валяй!" - переделаю.
Error404
31.03.2010, 09:40
Народ скажет "давай, валяй!" - переделаю.
Главное, чтобы 480х256 влезало, и по возможности без артефактов (почему то на картинке оно обрезано по вертикали), так что как бы все равно.
Хотя с точки зрения производительности 10МHz против 8МHz полезнее: +2МHz на наших скоростях - это не мало.
Народ скажет "давай, валяй!" - переделаю.
Может быть проект переименуем в "Специалист 2010"?
---------- Post added at 17:06 ---------- Previous post was at 16:49 ----------
Кто, кто... тот кто разогнал до 2,5 МГц его процик.
выигрыш (?) 25% производительности + мешочег гемороя :v2_cry:
Коллега! Не нужно так категорично, особенно к чужим проектам, созданным во времена, когда Вы, извините, "под стол пешком... вместе с "мешочег гемороя". Терпимей надо относиться к антиквариату!
---------- Post added at 17:12 ---------- Previous post was at 17:06 ----------
Главное, чтобы 480х256 влезало...
Я не против, если это дополнительная функция, а не основной режим. Иначе - какой это Орион-128?
Может быть проект переименуем в "Специалист 2010"?
Это будет наименование второй конфигурации компьютера :v2_laugh:
Я не против, если это дополнительная функция, а не основной режим. Иначе - какой это Орион-128?
Угу, холивар снова. Расширенный режим нужен для СР/М. Его наличие "антиквариат" не портит.
Отчет за сегодня -
добавил функциональную клавишу F10. Теперь в конфиге хранится сразу два монитора - М34 для ORDOS (запускается по умолчанию с флешьПЗУ) и М35 с автозагрузкой из SD-карты. Кнопкой F10 переключаются Мониторы и одновременно делается reset.
Сейчас из функциональных клавиш задействованы следующие:
F9 (выбор страницы ромдиска), F10 (ORDOS - CP/M), F11 (turbo - slow 2.5Mhz), F12 (режим turbo 5/10 Мгц), Scroll Lock (Reset).
Будут пожелания по раскладке?
Error404
31.03.2010, 18:18
Отчет за сегодня -
добавил функциональную клавишу F10. Теперь в конфиге хранится сразу два монитора - М34 для ORDOS (запускается по умолчанию с флешьПЗУ) и М35 с автозагрузкой из SD-карты. Кнопкой F10 переключаются Мониторы и одновременно делается reset.
Давно хотел подобное предложить, но стеснялся. :)
Если стремиться к недостижимому идеалу, то в некоторых случаях нелишним была бы возможность аналогично по кнопке прогнать тест-монитор (их еще называли тест ОЗУ). Конечно, его можно разместить как файл на РОМ-диске, но для этого во-первых надо будет его переписывать (а тесты для ПЗУ F800 уже есть готовые), а во-вторых при сборке-наладке ПК возможна ситуация когда все не понятно почему виснет, и Ордос не запускается (как раз и при неисправности ОЗУ).
Сейчас из функциональных клавиш задействованы следующие:
F9 (выбор страницы ромдиска), F10 (ORDOS - CP/M), F11 (turbo - slow 2.5Mhz), F12 (режим turbo 5/10 Мгц), Scroll Lock (Reset).
Будут пожелания по раскладке?
в некоторых случаях нелишним была бы возможность аналогично по кнопке прогнать тест-монитор (их еще называли тест ОЗУ).
Хорошо, у нас еще есть 3,5 килобайта для внутреннего ПЗУ. У меня были мысли воткнуть Монитор-1, тоже для отладочных целей. Но твое предложение лучше. Сделаем старт теста по нажатию F9+F10, например.
Какой тест лучше засунуть? У меня гдето бегали два, для памяти и для совместимости с СР/М вроде...
---------- Post added at 20:17 ---------- Previous post was at 19:46 ----------
Микроанонс - http://orion-2010-support.narod.ru
Пинки и затрещины приму адекватно :)
...добавил функциональную клавишу... Будут пожелания по раскладке?
Думаю, в настоящий момент не столь важно, какая "F" соответствует какой функции. Потом можно будет утрясти этот вопрос. В настоящий момент важно определиться с функциональной значимостью вводимых функций (простите за тавтологию!).
...У меня были мысли воткнуть Монитор-1, тоже для отладочных целей...
Давно хотел подобное предложить, но стеснялся. :)
Мне представляется, что это очень хорошая мысль! Конечно, нужен тест памяти! А нужен ли он резидентно? Тест памяти был значим, когда применялись динамические "рушки", да еще и совковые с технологическим разбросом до неприличия. Чаще всего, память (исправная!) "хандрила" из-за не стабильных соотношений фронтов, которые порождались технологическими разбросами большого количества рассыпухи. Сейчас стоит надежная статика, да и "рассыпуха" стабильна. Поэтому, если провести тщательный анализ времянок и устранить возможные коллизии, то работать должно сразу и надежно. Понятно, пока Евгений мудрил "сие" - ему, естественно нужен был тест памяти, а может быть и два.
А вот Монитор-1 более функционален по своим возможностям. Может его стоит немного усовершенствовать в этом плане? Как думает Error404?
---------- Post added at 23:43 ---------- Previous post was at 23:25 ----------
Микроанонс - http://orion-2010-support.narod.ru
Пинки и затрещины приму адекватно :)
Лиха беда начало! В будущем можно свой форум завести. И это логично, когда "ребенок вырастает из штанишек" и уходит в самостоятельную жизнь! Я поддерживаю и в будущем (если будем живы!) согласен помогать модерировать этот форум.
в будущем (если будем живы!)
Ну, до 2012 года время еще есть :)
А форум по Ориону есть, на сайте Error_404.
А форум по Ориону есть, на сайте Error_404.
Я что-то не могу сладить с этим сайтом. Дня три назад регистрировался, а сегодня - не признали. Возможно, надо по отдельности регистрироваться на этом сайте и на его файловом сервере mylivepage.ru? Или как? Похоже, у меня кривые ручки.
Error404
01.04.2010, 09:21
Мне представляется, что это очень хорошая мысль! Конечно, нужен тест памяти! А нужен ли он резидентно? Тест памяти был значим, когда применялись динамические "рушки", да еще и совковые с технологическим разбросом до неприличия. Чаще всего, память (исправная!) "хандрила" из-за не стабильных соотношений фронтов, которые порождались технологическими разбросами большого количества рассыпухи. Сейчас стоит надежная статика, да и "рассыпуха" стабильна. Поэтому, если провести тщательный анализ времянок и устранить возможные коллизии, то работать должно сразу и надежно. Понятно, пока Евгений мудрил "сие" - ему, естественно нужен был тест памяти, а может быть и два.
А вот Монитор-1 более функционален по своим возможностям. Может его стоит немного усовершенствовать в этом плане?
Мне кажется, в 3.5кб успешно поместятся и Монитор-1 (тут надо подумать имеет ли смысл его дорабатывать, и если да - то что добавлять) и тест ОЗУ (к примеру авторский тест 1990 года - у меня он в файле TEST128.BIN - занимает всего лишь 656 байт). Тут главным образом тест может быть полезен в плане проверки сборки: ОЗУ паять придется в SOJ-корпусах (а кто-то вообще всё навесным монтажём соберет), можно не пропаять или коротыш не заметить, и потом гадать о каком-то странном глюке. Поскольку тест будет не часто вызываться, его можно положить в наиболее неудобное место ПЗУ (если такое вообще есть :) ) и на неудобное сочетание клавишь.
Как бы там нибыло, поначалу в любом случае придется использовать уже готовые Мониторы/тесты, т.к. на доработку пока не хватает времени.
Про клавиши: в принципе все равно, но если есть возможность, то вместо сочетаний типа "F9+F10" привычнее использовать в сочетании со спецкнопкой Alt или Ctrl. Например: "F9,F10, Alt+F9, Alt+F10" для соответственно Mon-Ordos, Mon-CPM(SD), Mon-1, Test.
---------- Post added at 09:21 ---------- Previous post was at 09:04 ----------
Я что-то не могу сладить с этим сайтом. Дня три назад регистрировался, а сегодня - не признали. Возможно, надо по отдельности регистрироваться на этом сайте и на его файловом сервере mylivepage.ru? Или как? Похоже, у меня кривые ручки.
На самом деле я сам не в восторге от движка mylivepage.ru.
Был период (примерно месяц-два), когда они что-то поменяли, и я тоже не мог качать оттуда. Но потом все как-то само решилось.
Просто чтобы что-то разместить, я искал сервис по критерию бесплатно и с конструктором сайта (чтобы не напрягать себя HTML-ом). И этот сервис попался раньше всех по списку. :)
Подумывал сделать где-нибудь зеркало, но пока не знаю хорошую альтернативу бесплатно и с конструктором сайта (главным образом оттого, что вдумчиво не искал), ну и конечно немного жалко тратить на это время.
...Тут главным образом тест может быть полезен в плане проверки сборки... можно не пропаять или коротыш не заметить, и потом гадать о каком-то странном глюке.
Вполне согласен с наличием проблемы запуска изделия после сборки. Но тест памяти может и не решить всех проблем. Самый лучший вариант - это заливка в Альтеру, сразу после сборки, некоторой тестирующей железо прошивки. Возможно, эта прошивка должна состоять из набора уже готовых блоков (и программ), объединенных несложным текстовым сопровождением. А уже затем заливать основную прошивку. Готовые "кусочки" для работы с интерфейсом (USART, SD-card, KBRD и т.д.) уже есть. Ведь, чтобы проверить работоспособность, достаточно по USART послать "Привет" на терминал; инициализировать+записать байт+прочитать байт с SD и т.д. Думаю, этого достаточно.
Может быть, Евгений "пожертвует" немного времени и подготовит такую прошивку, а первичные наброски для этой прошивки может "накидать" в эмуляторе Error404? Мужики! Только Вы двое, реально, "в теме"! Остальные (в том числе и я!) - пока говоруны!
Самый лучший вариант - это заливка в Альтеру, сразу после сборки, некоторой тестирующей железо прошивки.
Терзают меня смутные сомнения, что в пяти микросхемах сложновато сделать ошибку... И по любому, после сборки НУЖНО проверить пайку тестером. Ленивый заплатит дважды.
Просто как-бы мне казалось, что прошитые конфПЗУ я буду отправлять народным умельцам по почте, чтоб последние мозги себе не сломали "как прошить?". :)
---------- Post added at 11:53 ---------- Previous post was at 10:56 ----------
Ну вот, вопрос с монитором-1 и тестом закрылся. НЕ БУДЕТ.
Ячеек памяти хватает, но interconnect resource the end. Говоря по человечьи, не хватает ресурсов (проводов) для подключения еще одного блока памяти.
Попробовал убрать монитор-1 и оставить только тест - такая же ботва.
Ну и ладно... :(
Error404
01.04.2010, 11:53
Вполне согласен с наличием проблемы запуска изделия после сборки. Но тест памяти может и не решить всех проблем. Самый лучший вариант - это заливка в Альтеру, сразу после сборки, некоторой тестирующей железо прошивки. Возможно, эта прошивка должна состоять из набора уже готовых блоков (и программ), объединенных несложным текстовым сопровождением. А уже затем заливать основную прошивку. Готовые "кусочки" для работы с интерфейсом (USART, SD-card, KBRD и т.д.) уже есть. Ведь, чтобы проверить работоспособность, достаточно по USART послать "Привет" на терминал; инициализировать+записать байт+прочитать байт с SD и т.д. Думаю, этого достаточно.
Терзают меня смутные сомнения, что в пяти микросхемах сложновато сделать ошибку... И по любому, после сборки НУЖНО проверить пайку тестером. Ленивый заплатит дважды.
Просто как-бы мне казалось, что прошитые конфПЗУ я буду отправлять народным умельцам по почте, чтоб последние мозги себе не сломали "как прошить?". :)
Как один из вариантов: раз уж будет режим холодной загрузки c SD по /RESET (ну или там по F10=/RESET, что в сущности одно и то же), можно тест всего оборудования разместить не в ПЗУ, а на SD-карте (просто сделать некий образ диска, который на карту всегда можно залить по необходимости - аналог диагностичского CD, каким, к примеру, на AIX :) я пользуюсь регулярно). И там уже любую логику можно реализовать, и не надо будет загонять себя в рамки 2кб ПЗУ. Но, понятно, чтобы эта программа работала, должно быть исправно ОЗУ и не ошибиться в пяти проводках при подключении карты.
Ну вот, вопрос с монитором-1 и тестом закрылся. НЕ БУДЕТ.
Ячеек памяти хватает, но interconnect resource the end. Говоря по человечьи, не хватает ресурсов (проводов) для подключения еще одного блока памяти.
Попробовал убрать монитор-1 и оставить только тест - такая же ботва.
Ну и ладно...
Кстати, в мониторах 3.х есть режим расширения Монитора. Он заключается в том, что при старте Монитор проверяет код в ОЗУ в области B800...BFFF на соответствие некой контрольной сумме, и если она совпала, то выполняется переход на адрес BFFD. Соответственно, ничто не мешает нам перетранслировать Монитор-1 (или что угодно) на B800, подогнать сумму, и грузить его по холодной загрузке с SD-карты на B800, после чего делаем JMP F800.
Эффект будет такой, как если бы в ПЗУ был этот самый Монитор-1. Причем понятно: если память B800...BFFF в силу каких-то действий "пропилится", то нарушится сумма и по /RESET Монитор-1 (или что там на карте) автоматом подчитается с карты, а до того (пока сумма верна) любое нажатие /RESET или выполнение JMP F800 приведет к передаче управления Монитору-1 (ну или что там у нас в адресах B800...BFFF).
Error404
01.04.2010, 19:43
А я тут задумался как бы покрасивше заэмулировать UART.
Думаю, самое красивое будет создавать в винде виртуальный COM-порт, на котором с одной стороны висит эмулятор - с другой ПО под винду. Тогда для работы с эмулятором можно будет использовать любой терминал под Винду (кому какой нравится). Т.е. на одном и том же компе запускается и эмулятор и терминал (который мне делать в эмуляторе уже не надо будет). И работа с эмулятором никак не будет отличаться от работы с реальным устройством - только разные COM-порты выбираешь и всё.
А еще в перспективе можно будет сделать редирект на удаленный комп по IP (чтобы эмуль и терминал работали на разных PC). Но это уже фантазии. :)
Нагуглил утилиту, при помощи которой (+ конечно дописывать эмулятор) планирую вышепроцитированное реализовать:
http://com0com.sourceforge.net/
А я хочу заменить МАХ232 на FT232, и подключаться не через СОМ1, а через USB, виртуальный компорт. Стоит ли этим заморачиваться?
Error404
01.04.2010, 21:29
А я хочу заменить МАХ232 на FT232, и подключаться не через СОМ1, а через USB, виртуальный компорт. Стоит ли этим заморачиваться?
А как при этом будет выглядеть со стороны Ориона?
И под винду нужен будет драйвер?
Со стороны Ори ничего не изменится, TxD & RxD.
Для винды ставится драйвер. Появляется новый компорт.
В общем, всё хорошо. Только стоимость... рублей 200 за чип.
Error404
02.04.2010, 16:47
Это истинно в текущей конфигурации?
Окончательное, можно эмулировать?
Отправка байта - запись в порт F764.
Прием байта - чтение порта F764.
Контроль состояния передачи - порт F765 на чтение:
D7 - TX_Ready (0 = идет отправка байта, порт не готов. 1 = можно записывать следующий байт для отправки)
D6 - RX_Status (0 = нет нового принятого байта. 1 = принят новый байт. После считывания байта из F764 этот бит сбрасывается в 0).
Управление режимами - порт F765 на запись:
D0, D1 - Скорости UART (9600 (умолчание), 19200, 38400, 57600)
Биты D0, D1 порта F765.
"00" - 38400 (по умолчанию после сброса)
"01" - 19200
"10" - 9600
"11" - 4800 (для мазохистов).
D6 - "1" = разрешает прерывание по приему байта. На ШД ставится 0FDh.
Это истинно в текущей конфигурации?
F764 - всё верно.
F765 - скорость "наоборот" (по просьбе pvlad'a):
"00" - 4800
......
"11" - 38400.
Единственно, "для себя" сделал хинт - после сброса скорость 38400, пока не запишется другое значение. Лень ждать передачи :)
D6 - Receive interrupt enable, как и было.
На чтение F765 -верно.
Пробую разводить одностороннюю печатную платку.
Вот на фотке результат освоения Лазерно-Утюжных Технологий :v2_tong:
Над кусочком текстолита с площадкой TQFP-100x0.5 виден кончик гелевой ручки.
Error404
02.04.2010, 21:42
Пробую разводить одностороннюю печатную платку.
Вот на фотке результат освоения Лазерно-Утюжных Технологий :v2_tong:
Над кусочком текстолита с площадкой TQFP-100x0.5 виден кончик гелевой ручки.
Это самодельная плата?
Площадки с шагом 0,5 получаются нормально?
Да, нормально. Уже развел ПЛИС + ОЗУ. Развожу JTAG
Красиво получается :)
Error404
05.04.2010, 15:50
Со стороны Ори ничего не изменится, TxD & RxD.
Для винды ставится драйвер. Появляется новый компорт.
В общем, всё хорошо. Только стоимость... рублей 200 за чип.
Подумалось: раз со стороны ПО (как Ориона, так и Винды) особенной разницы нет, то может развести оба варианта интерфейса, а при пайке каждый сам себе решит что поставить, исходя от потребностей? Места это наверняка немного займет: доп.чип + USB разъем. Или паять оба, и переключателем выбирать чип-селект RS232/USB.
Сейчас становится все труднее найти PC с RS-232, может кому-то более подойдет USB в качестве последовательного порта.
Еще вопрос: потерял параметры настройки порта. Помню только 8-N-2. А какой режим аппаратного и программного flow control используется?
Еще вопрос: потерял параметры настройки порта. Помню только 8-N-2. А какой режим аппаратного и программного flow control используется?
Можешь 8-N-1, ничего не меняется.
flow control - off.
Пробую разводить одностороннюю печатную платку...
Я тоже начал возиться с платой. Нет библиотек под эти элементы. Приходится создавать элементы с нуля. Муторное дело, тем более что не часто приходится заниматься платами, поэтому кое-что подзабывается.
Я тоже начал возиться с платой. Нет библиотек под эти элементы. Приходится создавать элементы с нуля. Муторное дело, тем более что не часто приходится заниматься платами, поэтому кое-что подзабывается.
Крепись! Я за тебя пожалуй пойду чайку кофе выпью! :)
Error404
07.04.2010, 20:06
Сделал эмуляцию RS-232 в эмуляторе.
Текст шлет в обе стороны.
Как послать файл? Написал утилиту для передачи "сырого" файла (т.е. "байт-в-байт" без каких-либо доп. оберток).
В HyperTerminal предлагает получить файл по Zmodem, Ymodem, Xmodem (и прочим модемам). Какой их них считает "сырой" файл (т.е. "байт-в-байт" без каких-либо доп. оберток)?
Евгений, ты как засылаешь в Ордос файлы, каким протоколом?
Евгений, ты как засылаешь в Ордос файлы, каким протоколом?
Спросил бы чего попроще :)
Вот ТА САМАЯ прога, которую я использую терминалкой (8Мб): http://narod.ru/disk/19489542000/Codevision_AVR_V2.03.4.rar.html
Ниже скрин экрана настройки терминала:
Файл РОМдиска с моими "программами" для отправки и приема 65536 байт диска "С". Называются соответственно TRANS и RECEI.
Более короткие файлы также принимает, просто нужно по окончании приема нажать сброс.
Попробовал через гипертерминал помучить Орион. Ни один протокол не работает.
Да собственно, может они работать и не должны??? У нас ведь нет софта для реализации протоколов :)
Error404
07.04.2010, 21:16
Попробовал через гипертерминал помучить Орион. Ни один протокол не работает.
Да собственно, может они работать и не должны??? У нас ведь нет софта для реализации протоколов :)
В CP/M есть Kermit (дистрибутив где-то у меня был). Надо поискать как оно работает и настраивается.
У нас ведь нет софта для реализации протоколов :)В исходниках ZXMC есть программка TinyTerm, встроенная в прошивку ZXMC.
http://www.zx.pk.ru/attachment.php?attachmentid=6154&d=1191176446
Она позволяет принимать файлы по RS232 с помощью самого простого из протоколов - Xmodem.
PS. Kermit уж больно громоздкий.
Error404
07.04.2010, 21:25
В исходниках ZXMC есть программка TinyTerm, встроенная в прошивку ZXMC.
Она позволяет передавать файлы по RS232 с помощью самого простого из протоколов - Xmodem.
PS. Kermit уж больно громоздкий.
А где можно посмотреть исходники ZXMC?
А где можно посмотреть исходники ZXMC?
Выше дал ссылку.
Кстати. В каких корпуса SOJ или TSOP2 стоит закладывать память. SOJ рублей на 30 дешевле и паять легче. Флешку - DIP-32 или PLCC-32 (на мамках есть и такие и такие)? АП6 (74LS245) - в дипе или планар? Пассивная рассыпуха R,C,VT,VD - SMD или с выводами? Какие соображения? Только без личных пристрастий от того, что уже "ведро" элементов закупил.
Какие соображения? Только без личных пристрастий
:)
ИМХО легче паять как раз SOP, а не SOJ... Второе соображение - SOP проще купить.
Флеши - вероятно будет лучше применить PLCC32. Опять таки, их УЖЕ проще купить чем DIP. Да и места меньше займут.
Остальное - также лучше брать в расчет SMD. Эт моё мнение :)
---------- Post added at 15:10 ---------- Previous post was at 14:37 ----------
Кстати, питание ПЗУ лучше подвести и 5 вольт, и 3.3 вольта. выбирать перемычкой (нулевым резистором). По дефолту флешки 29LC трехвольтовые все-таки более подходят, чем пятивольтовые 29С (29F, 29EE...).
---------- Post added at 15:14 ---------- Previous post was at 15:10 ----------
Насчет панелек для флеши - конечно видней разводящему, но штыревые панельки PLCC ИМХО удобней чем SMD. Легче монтаж, немножко больше возможностей для разводки, сами панельки механически крепче.
---------- Post added at 16:35 ---------- Previous post was at 15:14 ----------
Работая на Ори под СР/М появилась мысля сделать переключение на турбо 10Мгц автоматически, как только включается widescreen в СР/М. И соответственно, при переходе на классический экран "сбавлять обороты" до 5 Мгц. Мелочь, а лишних телодвижений меньше будет. Оставлять быстрое турбо в ОРДОС не резон, очень неудобно работать с клавиатурой.
---------- Post added at 16:42 ---------- Previous post was at 16:35 ----------
pvlad, предусмотри пожалуйста "гребенку" в один ряд с выводов цвета/яркости/синхро альтеры для привинчивания VGA-конвертера или PAL-кодера.
Распиновку лучше поддержать уже стандартную:
1. Gnd
2. +5v
3. Red
4. Green
5. Blue
6. Bright
7 & 8. Synchro
9. Тактовая 20Мгц через свободный инвертор тактового генератора.
По дефолту флешки 29LC трехвольтовые все-таки более подходят, чем пятивольтовые 29С (29F, 29EE...).
Может быть 29LVxxx?
Работая на Ори под СР/М появилась мысля сделать переключение на турбо 10Мгц автоматически...
Я бы сделал через флаг в одном из наших регистров управления. СРМ - не панацея для нового Ориона, а всего-лишь один из вариантов. А ОРДОС надо переделать под новую клавиатуру (и не только!). В будущем (когда заработает свой Орион) собираюсь этим заняться.
... предусмотри пожалуйста "гребенку" в один ряд...
Хотелось бы оный предмет увидеть в натуре (на картинке), а также его типоразмеры.
Может быть 29LVxxx?
Да.
Хотелось бы оный предмет увидеть в натуре (на картинке), а также его типоразмеры.
"золотистые штырьки" шаг 2.54. Есть на любой ПЦ-маме.
"золотистые штырьки" шаг 2.54. Есть на любой ПЦ-маме.
Нет! Извини, я не об этом! Я о платах VGA-конвертера и PAL-кодера. Хотелось бы понять, как их лучше приатачить к основной плате.
---------- Post added at 16:38 ---------- Previous post was at 16:01 ----------
Здесь http://orion-2010-support.narod.ru/ написано:" Видеовыход компьютера расчитан на цветной телевизор, подключаемый по SCART, или на черно-белый телевизор". А что в данный момент нельзя подключить ЖКИ TFT-монитор через аналоговый вход VGA?
Нет! Извини, я не об этом! Я о платах VGA-конвертера и PAL-кодера. Хотелось бы понять, как их лучше приатачить к основной плате.
Понятно. Тогда ты извини бестолкового :)
Вот - http://www.zx.pk.ru/showthread.php?t=10548
Но тут однозначно нужно шлейфик, и платки в два этажа :)
А что в данный момент нельзя подключить ЖКИ TFT-монитор через аналоговый вход VGA?
По расчетам должно быть можно. Для этого я и прошу вывести видеосигналы с альтеры "по дороге" к наплатному видеомиксеру. В результате получим сразу ПЯТЬ видеовыходов -
1. Ч/б полутоновой
2. Цветной SCART
3. VGA
4. S-Video
5. PAL цветной.
Как говорится, фтыкай куда хочешь :)
Вот - http://www.zx.pk.ru/showthread.php?t=10548
Но тут однозначно нужно шлейфик, и платки в два этажа
Шлейфик - это не серьезно. А что, на эту платку не найти габаритные и установочные размеры? Ну, хотя-бы расстояние между крепежными отверстиями. Я уж попробую отмаштабировать картинку, которую нашел по указанному адресу.
По расчетам должно быть можно. Для этого я и прошу вывести видеосигналы с альтеры "по дороге" к наплатному видеомиксеру...
Хреново, батенька! Я предполагал установить разъем VGA на основной плате, с тем, чтобы можно было подключать ЖКИ-монитор без каких-либо прибамбасов. Конструкция должна быть законченной! Все остальные варианты - через разные платки. Тут вопросов нет! Неужели нужно доказывать, что сегодня подключение к телевизору - это экзотика (как время меняется!!!), частный случай, так же, как и к монитору CRT, который и купить-то уже не возможно. На кой же хрен под него делать видеовыход? Может быть следует проверить и изменить схему видеовыхода (возможно и времянки поправить!) под ЖКИ-монитор на основной плате? Это и будет главный и основной девайс отображения, который есть практически у всех, а у кого еще нет - все равно купят. Это веление времени!
Думаю, пока я "изобретаю" элементы, ты мог бы этот вопрос отрегулировать. А?
Error404
11.04.2010, 18:50
А конвертор от zst умеет конвертировать 50Гц кадровой в 60Гц?
Спрашиваю тут, а не в тематическом треде, т.к. там уже сильно много букв.
Ибо если оно 60Гц выдавать на выход не умеет, то процесс подбора работоспособного (т.е. способного отображать 50Гц кадровой) ЖК-монитора один хрен обещает быть таким же полным неожиданностей, как и в случае с ZX-evolution.
А конвертор от zst умеет конвертировать 50Гц кадровой в 60Гц?
Умеет. Для этого использует 512кб набортной памяти :)
---------- Post added at 20:52 ---------- Previous post was at 20:49 ----------
Хреново, батенька!
Не, ну нормально?
Я предупреждал, что сам Орион выдает только ТВ-развертку. Для ВГА нужно переделывать "железо". Ладно, до конца года еще далеко, займусь...
Да, по такому случаю, видеомиксер не разводи. Синхровыводов нужно вывести с альтеры ДВА. Один неиспользуемый на альтере есть.
Для ВГА нужно переделывать "железо".
Понимаю, разделяю, сочувствую! Но в данном случае "мучиться" будешь ты один, а мы будем молиться и надеяться... А представляешь, всем придется лепить эту платку видеомиксера? Будут мучиться все... Только ты один можешь спасти орионовское человечество!
Я тут, не долго думая, переключил свой ПИСИ в режим 640х480. Получилась строчная - 31,5Кгц, а кадровая - 60гц. Но есть режим и 56Гц, при этом строчная 35,1Кгц. Похоже, кадровую в 50Гц ЖКИ-монитор держать будет. А вот на строчную в два раза ниже согласится, или надо пересчитывать синхронизатор?
Синхровыводов нужно вывести с альтеры ДВА. Один неиспользуемый на альтере есть.
Ты хочешь вывести с Альтеры дополнительные выходы синхронизации, сделав отдельную цепочку счетчиков? Может проще внутри переключать "счетчики" (или сигналы синхронизации через бит управления), а видеовыход оставить таким, какой он есть - общим для обоих видео-режимов, и не использовать дополнительные выводы Альтеры?
Ты хочешь вывести с Альтеры дополнительные выходы синхронизации, сделав отдельную цепочку счетчиков?
Нет, для VGA нужны раздельные строчные и кадровые синхроимпульсы.
а видеовыход оставить таким, какой он есть - общим для обоих видео-режимов,
Уровни сигналов разные должны быть.
А вот на строчную в два раза ниже согласится, или надо пересчитывать синхронизатор?
Не согласится, потому и требуется перелопачивание.
Вчера сделал скандаблер, проверял на ТВ (нету у меня отдельного монитора для отладки ВГА-режима). Видеовыхлоп вроде работает (вижу два экрана Ори одновременно), работа процессора с памятью как и ожидалось - умерла. Нужно заново на симуляторе растактовку делать.
Error404
15.04.2010, 17:32
Вчера сделал скандаблер, проверял на ТВ (нету у меня отдельного монитора для отладки ВГА-режима).
Как успехи?
А я тем временем рожаю на базе SD-card_CP/M версию CPM со штатной поддержкой TTY (консоли RS-232). Что получилось, смотрите во вложении этого сообщения: скриншот где я переключаюсь между консолями (это делается классической командой STAT.COM прямо из CPM, не исключено, что заработает и PIP.COM для передачи файлов), образ для заливки на SD-карточку, исходники CPM.
Почитать про STAT и PIP:
http://www.iso.port.ac.uk/~mike/interests/chistory/documents/cpm-22-manual/ch1.html
Опять же, родил по принципу "что выросло - то выросло". Надо тестировать.
Грузить ОС с SD-карт можно при помощи загрузчиков ранее уже опубликованных в этом посте:
http://zx.pk.ru/showpost.php?p=262906&postcount=31
Описание пока только в виде release notes - ниже в этом сообщении.
ewgeny7 , проверить ЭТО на реале пока можешь только ты.
К тому же, наверняка справишься с записью образа на карту и без HOW-TO. Сейчас в образе настроено для работы в режиме POLL (опрос готовности устройства, включается командой "INT_IO 0" в config.sys). Напиши пожалуйста, как оно работает на реале в режиме INT (включается командой "INT_IO 1" в config.sys).
Release Notes:
Altair DOS V3.4t (2010.04.14)
-----------------------------
+ Добавлена нативная (в BIOS, управляемая стандартным для CP/M способом через
IOBYTE) поддержка устройства TTY (RS-232 консоль стандарта Orion-2010 -
порты 0F764, 0F765).
Консольные вызовы для TTY не векторизируются (для ускорения).
Поэтому если необходимо использовать внешний драйвер TTY (обычно внешние
драйвера консоли используют векторизацию CONSTATUS/CONIN/CONOUT на векторах
0F307H, 0F30AH, 0F30DH), то включайте через IOBYTE режим CRT (см. команду
IOBYTE файла config.sys ), в этом режиме консоль векторизирована как это
было и ранее, когда поддерживался только CRT.
+ В файле config.sys добавлена команда "IOBYTE", устанавливающая соответствующую
переменную CP/M (см. описание функции 8 BDOS, описание CP/M IO Byte, описание
тразитных команд STAT.COM, PIP.COM). Параметр команды - 8-битное число
(в config.sys вводится в десятичном виде), которое представляет собой битовую
маску соответствия логических и физических устройств по отношению 4:4.
В V3.4t реализована только возможность выбора CRT/TTY для устройства CONSOLE.
Пример:
IOBYTE 149 ; 149=95H - default console=CRT ; 148=94H - default console=TTY
+ В файле config.sys добавлена команда "TTY", конфигурирующая порт UART (RS-232) -
устанавливающая скорость обмена и режим чтения (Interrupt/Poll). Параметр
команды - скорость обмена (бит/с). Возможные варианты скорости - 4800, 9600,
19200, 38400. Режим Interrupt/Poll устанавливается в зависимости от того, с
каким параметром была ранее применена команда INT_IO (см. ниже).
Пример:
TTY 9600
+- В части реализации TTY расширена функциональность команды "INT_IO"
файла config.sys:
"INT_IO 0" - дисковые операции ввода-вывода не прерываются по int
(обработка прерываний приостанавливаются по DI/EI);
опрос готовности TTY-консоли на прием выполняется в режиме POLL
(опрос готовности в цикле)
"INT_IO 1" - прерывания никогда не выключаются, даже во время дискового IO;
TTY-консоль на прием работает по прерыванию от устройства RS-232.
По умолчанию (если в config.sys не применялась команда IOBYTE), консолью является
устройство CRT (графический экран и штатная клавиатура). TTY по умолчанию (если в
config.sys не применялись команды INT_IO, TTY), работает в режиме POLL на скорости
4800 бод.
Ячейка 0F3FFh содержит текущую конфигурацию порта RS-232 (копия значения,
выводившегося при обработке config.sys в порт 0F765h). Эту ячейку внешние программы,
меняющие настройки RS-232, могут использовать для установки исходных настроек порта
после своего завершения.
Altair DOS V3.4s (2010.03.27)
-----------------------------
+ Добавлена поддержка SD-карт (формат SDC - т.е. емкостью не более 2G) - устройство SDCARD.
Схема N8VEM или MSX (при старте ОС выполняется автодетект схемы).
IDE по-прежнему поддерживается - устройства MASTER и SLAVE.
+ При дисковом вводе-выводе добавлена возможность управлять режимом выключения
прерываний. Это настраивается командой INT_IO файла config.sys.
"INT_IO 0" - дисковые операции ввода-вывода не прерываются по int
(обработка прерываний приостанавливаются по DI/EI).
"INT_IO 1" - прерывания никогда не выключаются.
+- Изменена команда CCP MNT (подключение устройств к символам дисков):
MNT DRIVE:DEVICE[.PARTITION]
- mount device { FDD0 | FDD1 | VDISK | MASTER | SLAVE | SDCARD | NONE }
if device = { MASTER | SLAVE | SDCARD } then also specify PARTITION (0,1,2,3)
"NONE"=unmount
map to drive letter { DRIVE }
MNT DRIVE:
- show device, mounted to this drive letter
MNT
- show all devices, mounted to all drive letters
+- Изменена команда ASSIGN файла config.sys в части IDE и SD устройств.
Примеры нового формата синтаксиса (устройства и нумерация партиций как в команде MNT):
ASSIGN DRIVE C = SDCARD 0 ; mount 1-st partition of SD-card
ASSIGN DRIVE D = SDCARD 1 ; mount 2-nd partition of SD-card
ASSIGN DRIVE D = MASTER 0 ; mount 1-st partition of IDE-Master
ASSIGN DRIVE D = SLAVE 1 ; mount 2-nd partition of IDE-Slave
ASSIGN DRIVE C = SLAVE 3 ; mount last (4-th) partition of IDE-Slave
+- Количество одновременно подключенных партиций с любых комбинаций устройств увеличено
с двух (в версии V3.4i) до трех (в V3.4s). Максимальных суммарный объем подключенных
(смонтированных) партиций не должен превышать 100Mb.
+ Новые сообщения об ошибках, возникающищ при монтировании партиции:
"HDD slot not found" - все 3 имеющихся точки монтирования партиций уже заняты.
Решение: отмонтировать что-то ненужное командой "MNT D:NONE".
"CP/M not found" - попытка монтирования партиции, тип которой отличается от CP/M (52h)
Решение: создать CP/M-партицию можно программой FDISK.COM.
"DPB not found" - попытка монтирования партиции, тип которой CP/M (52h), но при
этом bootsector партиции не содержит DPB (нет корректной ФС).
Решение: создать файловую систему (DPB) можно программой FDISK.COM.
"ALV not found" - Для монтируемой файловой системы требуется буфер ALV, который с
учетом других уже смонтированных партиций не помещается в текущий
буфер CPM. Размер буфера ALV пропорционален размеру файловой системы
(то самое ограничение 100Мб).
Решение: умерить аппетиты при создании файловой системы
программой FDISK.COM.
"Bad command" - попытка отмонтировать текущий диск
Решение: сначала установить текущим (перейти на) другой диск.
+- Драйвер IDEBDOS.COM (требуемый для FDISK.COM, FAT.COM) доработан для поддержки
SD-карт - см. встроенный хелп про параметр "SD". Также добавлен новый параметр
"NOINT" - если он указан, то операции ввода-вывода не прерываются по int.
Выполняется автодетект обеих схем подключения SD-карт (N8VEM и MSX).
+- Утилита FDISK.COM теперь создает файловые системы с размером блока не 8кб, а 16кб
(блок 16к - это максимум для CP/M 2.2), что позволяет вдвое снизить требования к
размеру буферов ALV (и добиться ранее упоминавшегося объема одновременно
монтируемых партиций в 100Mb).
Altair DOS V3.4i (2009.10.10)
-----------------------------
+ Добавлена команда команда CCP MNT (подключение устройств к символам дисков):
MNT DRIVE:DEVICE_SLOT[.PARTITION]
- mount device { FDD0 | FDD1 | IDE0 | IDE1 | VDISK | NONE } // NONE=unmount
if device = { IDE0 | IDE1 } then also specify PARTITION (0,2,4,6=MASTER ; 1,3,5,7=SLAVE)
to drive letter { DRIVE }
MNT DRIVE:
- show device, mounted to this drive letter
MNT
- show all devices, mounted to all drive letters
+ При обращении к IDE на запись/чтение выключаются прерывания
(сделано на всякий случай - на реале и без этого работало, но... были подозрения)
- Исключена команда CCP SAVE (место в CCP не резиновое)
+- Исправлена ошибка с записью сектора на IDE при работе IDE на порту F600.
На порту F500 эта ошибка не проявлялась (все работало нормально).
Altair DOS V3.4h, V3.3 и предыдущие
-----------------------------------
V3.4h - Первая принципиальная возможность работы с IDE-устройствами на i8255
на порту F500/F600.
Более ранние изменения не фиксировались.
UPD 17.04.2010
В образ диска добавлена утилита XGET.COM - копирование с PC на Орион по XMODEM.
UPD 23.05.2010
В образ диска (в USER 1) добавлена утилита KERMIT4.COM - Легендарная терминальная программа Кермит.
UPD 1.06.2010
В образ диска (в USER 1) добавлена утилита XPUT.COM - копирование с Ориона на PC (или другой Орион :) ) по XMODEM.
UPD 24.06.2011
В образ диска (в USER 1) добавлена утилита TELNETD.COM - чисто по приколу :)
... UPD 07.07.2011 и HTTPD.COM
Как успехи?
Времени стало маловато, но трудимся.
Оказалось, что проще с нуля переписать Орион под VGA, чем времянки подогнать. Собственно, этим "с нуля" я и занимаюсь :(
Сделал видеогенератор, привинтил к нему процессор, теперь гоняю в симуляторе. До финиша еще далекооо...
ewgeny7 , проверить ЭТО на реале пока можешь только ты.
Попробую сегодня. Отчет наверное часика через три.
Error404
15.04.2010, 18:34
Времени стало маловато, но трудимся.
Оказалось, что проще с нуля переписать Орион под VGA, чем времянки подогнать. Собственно, этим "с нуля" я и занимаюсь :(
Сделал видеогенератор, привинтил к нему процессор, теперь гоняю в симуляторе. До финиша еще далекооо...
А можно сделать как-то так, чтобы было как с условной компиляцией программ: проект был бы один общий, ставишь логическую переменную условной компиляции в одно значение - компилируется прошивка для VGA; ставишь эту логическую переменную условной компиляции в другое значение - компилируется прошивка для TV?
Это удобно в плане добавления прочей функциональности в один общий проект, а не параллельно в два.
Пока не знаю.
Сделаю (если сделаю) ВГА - от него уже проще будет вернуться к телевизору, там времянки в два раза менее требовательные.
В симе ВГА-версии смотрел тайминги доступа к памяти - выходит 20нс. Сказывается высокий пиксельклок Ориона. В реале конечно лучше иметь память шустрее, на 10нс.
В общем, после запуска TTY на гипертерминале и в Ори на экране Ориона ничего не мяется, просто моргает курсор. При этом из гипертерминала мы можем рулить Орионом?
Вот картинка с глюками:
при наборе команд иногда на экране не все введеные символы видно.
например, команда "ver" может выглядеть и vr, и ve. Но команда при этом отрабатывается.
Искажен вывод ответа из Ориона. Могут пропадать несколько символов подряд.
Скорость терминала на Орионе меняется? По умолчанию, я так понял, стоит 9600.
---------- Post added at 20:09 ---------- Previous post was at 19:58 ----------
а ты прерывания отключаешь при отправке байта на ПЦ?
Поменял в config.sys tty 38400.
В гипертерминале также поставил 38400.
И - о чудо! глюки исчезли!
Остался только "козырный символ" в конце передачи :)
Что бы он значил?
ПС. Движок форума почемуто коверкает гиф, но картинку вроде видно.
Error404
15.04.2010, 21:11
Поменял в config.sys tty 38400.
В гипертерминале также поставил 38400.
И - о чудо! глюки исчезли!
Остался только "козырный символ" в конце передачи :)
Что бы он значил?
ПС. Движок форума почемуто коверкает гиф, но картинку вроде видно.
Такая зависимость от скорости непонятна. В эмуляторе не воспроизводится. Но в эмуляторе я эмулировал из такого расчета: если символ на прием пришел, но не вычитан из порта F764, то USART должен выдать/не выдать прерывание (в зависимости от F765.D6 на запись) и приостанавливать прием следующего символа (управляя сигналом DTR) до того момента, пока не произошло чтение с порта F764. Что и дает синхронизацию при любой скорости передачи. При этом читать статус USART (порт F765 на чтение) можно сколько угодно раз - это на состояние автомата USART не должно влиять.
Символ в конце передачи скорее всего возникает от неправильно выставленного в терминальной программе типа терминала (я ставлю тип терминала VT52).
А что в режиме чтения по прерыванию (надо поставить в конфиге "INT_IO 1")?
Символ в конце передачи скорее всего возникает от неправильно выставленного в терминальной программе типа терминала (я ставлю тип терминала VT52).
Предупреждать надо! :) Я TTY ставил. Действительно, VT52 работает правильно.
Такая зависимость от скорости непонятна. В эмуляторе не воспроизводится. Но в эмуляторе я эмулировал из такого расчета: если символ на прием пришел, но не вычитан из порта F764, то USART должен выдать/не выдать прерывание (в зависимости от F765.D6 на запись) и приостанавливать прием следующего символа (управляя сигналом DTR) до того момента, пока не произошло чтение с порта F764. Что и дает синхронизацию при любой скорости передачи. При этом читать статус USART (порт F765 на чтение) можно сколько угодно раз - это на состояние автомата USART не должно влиять.
Ты, вероятно, не понял. Орион нормально принимает команды с консоли. Но неправильно отсылает на ПЦ. Причем, только на низкой скорости. На высокой всё нормально.
А что в режиме чтения по прерыванию (надо поставить в конфиге "INT_IO 1")?
Сейчас посмотрю.
---------- Post added at 22:13 ---------- Previous post was at 22:07 ----------
Сейчас посмотрю.
Прекрасно работает :)
Что такое PIP и как его едят? По ссылке не понял, как его применить в нашем случае :(
Error404
15.04.2010, 22:48
Ты, вероятно, не понял. Орион нормально принимает команды с консоли. Но неправильно отсылает на ПЦ. Причем, только на низкой скорости. На высокой всё нормально.
Я и сейчас что-то не догоняю... :v2_conf2:
Что такое PIP и как его едят? По ссылке не понял, как его применить в нашем случае :(
Как я предполагаю, команда
PIP TTY:=FILENAME.EXT[OR]
отошлет в RS-232 файл в бинарном виде (т.е. как есть, без протокольной обертки) в терминал (на втором конце его нужно соответственно принять)
Команда
PIP FILENAME.EXT=TTY:[RO]
примет бинарный файл с терминала и запишет на диск. В режиме приема завершение (выход когда весь файл принят) - нажатием любой клавиши.
Вместо FILENAME.EXT подставить реальный файл.
Сам не пробовал - не знаю как послать файл без "протокольной обертки".
ак я предполагаю, команда
PIP TTY:=FILENAME.EXT[OR]
отошлет файл в бинарном виде (т.е. как есть, без протокольной обертки) в терминал (на вторм конце нужно его принять)
Работает. Отправил файлик history.txt, в терминалке сохранил. В Ворде прочитал.
PIP FILENAME.EXT=TTY:[RO]
примет бинарный файл с терминала и запишет на диск. В режиме приема завершение (выход когда весь файл принят) - нажатием любой клавиши.
Здесь нет ошибки? Мне никак не прервать PIP, продолжает принимать, курсор мигает, на Интер не реагирует.
Error404
15.04.2010, 23:25
Здесь нет ошибки? Мне никак не прервать PIP, продолжает принимать, курсор мигает, на Интер не реагирует.
ХЗ. В описании пишут "The copy operation can be aborted at any time by pressing any key on the keyboard. PIP responds with the message ABORTED to indicate that the operation has not been completed."
У меня в эмуляторе и принимать то не начинает - выходит без сообщений. :)
Хотя отправляет нормально (слал текстовый файл - он вывелся в терминал, т.е. отправился).
ХЗ.
пнятна :( Очень жаль, закидывать файлы было бы достаточно удобно.
Что означают [RO] & [OR]?
Error404
15.04.2010, 23:37
пнятна :( Очень жаль, закидывать файлы было бы достаточно удобно.
Что означают [RO] & [OR]?
Флаги (опции копирования)
O - object file - передавать как бинарный файл. Текстовые передаются только до символа 1Ah (^Z)
R - rewrite read-only files - перезаписывать защищенные файлы
Флаги могут применяться в любой последовательности (что я и показал)
Error404
16.04.2010, 11:37
Как бы там ни было, с копированием разберемся.
Я планирую на основе исходников Камиля сделать программки для передачи/приема файла по XModem. Делать ПО самому - это идеологически верно: можно заточить как удобнее.
Главное сейчас, добиться надежности собственно транспортного уровня - чтобы не было глюков при по-байтном передаче/приеме.
Я правильно понял: на медленных скоростях набираешь в терминале, к примеру, dir<enter>, на экране отображается dr, но при этом отрабатывает именно dir - выводится список файлов?
Если это так, то рассуждаем логически:
Известно: система, приняв символ с терминала, сразу выводит его же на консоль (отображает обратно в терминал) - это эхо-режим, нормальный для CP/M и большинства систем. Причем на разных скоростях работает одна и та же процедура (код), соответственно дело не в процедуре.
Соответственно, каждое нажатие кнопки в терминала вырождается для него в "послать байт"+"принять байт". Если команды выполняются правильно, но неправильно отображаются, то получается, что на низких скоростях UART не успевает отправить "эхо-символ", его забивает вновь пришедший (как если бы существовал приоритет на получение над отправкой). Что никак не должно происходить, если грамотно работает отображение (и чтение со второго конца) состояний "занят/свободен" на передачу/чтение - сигналов DTR/DSR (в названии сигналов могу ошибаться). Нет никакой необходимости рвать отправку приемом нового символа - все должно синхронизироваться на сигналах BUSY/READY.
Соответственно, каждое нажатие кнопки в терминала вырождается для него в "послать байт"+"принять байт". Если команды выполняются правильно, но неправильно отображаются, то получается, что на низких скоростях UART не успевает отправить "эхо-символ", его забивает вновь пришедший (как если бы существовал приоритет на получение над отправкой). Что никак не должно происходить, если грамотно работает отображение (и чтение со второго конца) состояний "занят/свободен" на передачу/чтение - сигналов DTR/DSR (в названии сигналов могу ошибаться). Нет никакой необходимости рвать отправку приемом нового символа - все должно синхронизироваться на сигналах BUSY/READY
USART реализован по стандартно-упрощенной технологии RxD+TxD. больше никаких сигналов не используется. Причем, одновременная передача и прием разрешены, "фулл дуплекс". сейчас у меня две версии - или по каким-то причинам порт дает ошибочную информацию о неготовности принять новый байт, в результате пихается два байта подряд (второй при этом теряется), или... на работе я проблем с малыми скоростями не наблюдал. а USART я отлаживал именно там. Следовательно (хоть и маловероятно) странности в железе домашнего ПЦ.
В общем, разбираюсь.
... или вариант три. Модуль USART не сразу выдает сигнал BUSY в регистр F765, на малых скоростях задержка уже может влиять на работу программы. Проверяю.
Кто бы PIP паченил или что-то аналогичное родил? ;)
Error404
17.04.2010, 16:37
Кто бы PIP паченил или что-то аналогичное родил? ;)
Родил (на основе иcходников tinyterm) утилиту копирования с РС в Орион по XMODEM. Называется XGET.COM. В образе диска есть тут:
http://zx.pk.ru/showpost.php?p=275608&postcount=851
либо во вложении этого сообщения.
Пробуйте. Должно работать как в режиме CRT-консоли, так и в TTY...
Обратное копирование пока по PIP, XPUT.COM будет позднее.
Пробуйте.
Попробовали.
Большей частью работает :)
Меньшая часть - это параметр SPEED, который не работает вообще. Что ни поставь - работает спид по умолчанию.
---------- Post added at 19:34 ---------- Previous post was at 19:33 ----------
Или там есть разница между speed= и SPEED= ?
---------- Post added at 19:48 ---------- Previous post was at 19:34 ----------
Или там есть разница между speed= и SPEED= ?
Нету. И так и так не переключается.
Error404
17.04.2010, 20:55
Параметр - цифра (значение скорости). Speed писать не надо.
Оказалось, что проще с нуля переписать Орион под VGA...
Согласен! Но есть самое главное: есть уже готовая концепция нового Ориона. Первый вариант под TV был некоторым схемотехническим нагромождением из-за поиска идей, утряске компромиссов. Теперь можно все сделать с чистого листа и наиболее оптимально.
Согласен! Но есть самое главное: есть уже готовая концепция нового Ориона. Первый вариант под TV был некоторым схемотехническим нагромождением из-за поиска идей, утряске компромиссов. Теперь можно все сделать с чистого листа и наиболее оптимально.
Мы с вами одинаково мыслим :)
Вариант с ТВ-выходом можно считать законченым, делаю "полировку" (находясь дома), на работе занимаюсь ВГА.
Сегодня небольшой апдейт проекта, исправил маленький глючок с видеовыхлопом.
Интересные вещи с Х-модемом. Файлы пересылаются, но смущает количество повторов блоков. Ради эксперимента погонял блоки "голого" BIN без Х-модема, просто отправляя блоки данных с ПЦ на Орион, потом обратно. И сравнивал их в ВинХЕКС. Ошибок нет... Что же мешает Х-модему?
Интересные вещи с Х-модемом. Файлы пересылаются, но смущает количество повторов блоков.
Видимо не совпадает контрольная сумма, поэтому повторы.
Очередной апдейт прошивки до beta_0.56.0. Устранен глюк с ошибками работы USART на малых скоростях. Причина была в связке "высокий клок процессора + низкий клок USART", передатчик просто не успевал фиксировать сигнал WR с процессора, в результате некоторые байты не отправлялись. Поставил костыль-триггер. Для приемника эта проблемка не актуальна.
Error_404, симу... эмулятор пока не хочешь выкладывать? В работе?
Error404
19.04.2010, 22:20
Error_404, симу... эмулятор пока не хочешь выкладывать? В работе?
Пока выкладывать не тороплюсь, т.к. сырое. У меня в эмуляторе в режиме TTY CP/M "чтение на прерываниях" (INT_IO 1) почему-то отображение символа после нажатия отрабатывает "с задержкой в один символ". В образе tty-sd.ohi. Такого не воспроизводится на реале?
Надо разбираться.
У меня в эмуляторе в режиме TTY CP/M "чтение на прерываниях" (INT_IO 1) почему-то отображение символа после нажатия отрабатывает "с задержкой в один символ". В образе tty-sd.ohi. Такого не воспроизводится на реале?
Сейчас перепроверил. Нормально всё... INT_IO 1, 9600, VT52. Всё чётко работает.
---------- Post added at 22:41 ---------- Previous post was at 22:36 ----------
Error404, а можешь как-нибудь, картинкой чтоли, объяснить что за "задержка на один символ"? Приходится для нормальной работы первый символ два раза подряд отправлять?
Error404
19.04.2010, 23:05
Сейчас перепроверил. Нормально всё... INT_IO 1, 9600, VT52. Всё чётко работает.
---------- Post added at 22:41 ---------- Previous post was at 22:36 ----------
Error404, а можешь как-нибудь, картинкой чтоли, объяснить что за "задержка на один символ"? Приходится для нормальной работы первый символ два раза подряд отправлять?
Вывод на экран работает нормально. Но при наборе было такое:
Нажимаю D
- в терминале на экране ничего
Нажимаю I
- в терминале на экране D
Нажимаю R
- в терминале на экране I
Нажимаю Enter
- в терминале на экране R
Нажимаю Enter
- начинает работа команды dir (вывод списка файлов)
Сейчас попробовал это же воспроизвести опять в эмуляторе. Итак: по началу не воспроизводится и все работает верно (нажимал кнопки медленно, одну за одной). Но если понажимать пару десятков клавишь быстро, то в какой-то момент ввод/отображение сбивается и начинается отставание описанное выше.
На самом деле, в CPM еще не совсем идеально с точки зрения обработки прерываний. По-хорошему, делать DI/EI надо только в обработчике TTY. Но для этого надо серьезно переписывать DRIVER.SYS (в нем делается DI/EI, т.к. переставляется стек в некоммутируемые диспетчерами области). И теоретически, возможно "проглатывание" прерывания TTY в тот момент, когда уже работал обработчик прерывания 50Hz.
Зато в режиме без прерываний ("INT_IO 0") driver.sys вообще может отсутствовать, а в конфиге сразу ставим консоль TTY (IOBYTE 148). Эмулируется в этом режиме без ошибок.
Очередной апдейт прошивки....
Может все-таки стоит ввести отключение портов, положенных на память, и сделать их доступность только через IN/OUT, как это сделано в Орион-ПРО? Будет доступна вся область "F". Это позволит совсем по другому размещать резидентную математику, а не только Монитор в 2К!
Error404 меня поддержит?
Но при наборе было такое:
Оригинально... как будто прерывание наступает раньше, чем приход символа.
---------- Post added at 10:56 ---------- Previous post was at 10:53 ----------
Может все-таки стоит ввести отключение портов, положенных на память, и сделать их доступность только через IN/OUT, как это сделано в Орион-ПРО?
Воистину, как скажет Error_404 :)
---------- Post added at 10:59 ---------- Previous post was at 10:56 ----------
Очередной апдейт прошивки до beta_0.56.0.
Забываю упомянуть, что выкладываемые прошивки имеют две недокументированные особенности - после сброса скорость UART равна 38400, и автоматический переход в турбо-10 при входе в СР/М (после перезагрузки в ORDOS скорость становится прежне выставленной). Сделал просто для своего удобства...
Вывод на экран работает нормально. Но при наборе было такое:
В СР/М работа с терминалом (клавиатурой) обычно происходит так: сначала проверяется нажата ли клавиша (это одна процедура биоса), а потом, если вернулось, что нажата, вызывается уже другая процедура биоса, которая возвращает код символа. У тебя налицо рассинхронизация этих двух процедур.
Error404
20.04.2010, 17:30
В СР/М работа с терминалом (клавиатурой) обычно происходит так: сначала проверяется нажата ли клавиша (это одна процедура биоса), а потом, если вернулось, что нажата, вызывается уже другая процедура биоса, которая возвращает код символа. У тебя налицо рассинхронизация этих двух процедур.
Не, там был ньюанс именно в эмуляторе - нужно было эмулировать особенность работы UART по прерыванию (по наступлению нового прерывания выталкивать из буфера поступившим символом старый символ, полученный в регистр UART в предыдущем цикле прерывания от COM-порта, но не прочитанный кодом Z80). Я еще и буферизировал все это по приему от Ком-порта, ну и не предусмотрел сразу.
Обновил эмулятор на сайте, в архиве и утилита com0com - создает виртуальные COM-порты, соединенные попарно виртуальным же нуль-модемным соединением (удобно для работы с эмулятором по RS-232 при помощи стандартных терминалок).
---------- Post added at 17:30 ---------- Previous post was at 17:23 ----------
Может все-таки стоит ввести отключение портов, положенных на память, и сделать их доступность только через IN/OUT, как это сделано в Орион-ПРО? Будет доступна вся область "F". Это позволит совсем по другому размещать резидентную математику, а не только Монитор в 2К!
Error404 меня поддержит?
Я всегда за. :)
Подобие такого режима есть - отключение ПЗУ/ВУ битом порта 0FBh схемы Z80 CARD.
Но при этом большинство устройств работавших в памяти оказываются "в тени", и для их использования приходится этим режимом туда-сюда щелкать, что есть потеря времени. Можно было бы продублировать доступ к этим ВУ и по IN/OUT (совместимо с Орион-ПРО, новые устройства продолжить в адресации).
Еще предложение: можно в режиме "F400..FFFF=ВУ/ПЗУ" открыть ОЗУ в областях F404..F4FF, F504..F5FF, F604..F6FF. Т.к. в 99% случаев обращение к ППА 580ВВ55 идет по адресам F400..F403, F500..F503, F600..F603. Получим малой кровью 756 байт ОЗУ в дефицитной F-области под всякие обработчики, буфера и т.д.
Почему я про это: все же обращение к ВУ как к памяти дает выигрыш по скорости (не менее 20-30%) за счет более короткой (чем по IN/OUT) косвенной адресации.
Оба варианта доработки памяти\ВУ могут быть реализованны одновременно - они практически независимы.
Поехал я в Хабаровск на 10 дней. :) Буду иногда заглядывать к вам!
Поехал я в Хабаровск на 10 дней. Буду иногда заглядывать к вам!
Ну вот, на самом интересном месте... (ворчливо) :)
Забываю упомянуть, что выкладываемые прошивки имеют две недокументированные особенности...
Ну, с первой особенностью - можно так и оставить. А что касается "турбо", то почему не сделать этот "битик" программно доступным в каком-то порте?
то почему не сделать этот "битик" программно доступным в каком-то порте?
FC? FD?
Сергей уехал, а он в этих вопросах компетентен.
У нас три "скорости". Два бита.
Вчера дорвался таки до цветного телевизора со СКАРТом. Сегодня надеюсь закончить с таким подключением. Вероятно, придется добавить к схемам еще один листик с распайкой СКАРТ-шнура.
---------- Post added at 13:27 ---------- Previous post was at 13:13 ----------
Получим малой кровью 756 байт ОЗУ в дефицитной F-области под всякие обработчики, буфера и т.д.
Можно отдать под порты младшие 16 байт в этих блоках из 256 байт, остальное - оставить как ОЗУ. Заморока только в F7хx, тут наверное лучше отдать портам весь сегмент. Ты вроде как именно это и предлагаешь?
Error404
21.04.2010, 13:49
Не знаю как быть с тремя скоростями, а две в орион-про отображались так: порт 0а бит д5 единица, если 2.5 мгц
Подключил Орион к цветному телевизору через СКАРТ.
качество хорошее, все буковки чёткие. Ниже несколько фоток. Извините за качество, фотоаппарат "смазывает" неяркие объекты, коим был телевизор :(
На последней фото - Нортон Коммандер в СР/М, widescreen. Конкретно на этом телевизоре картинка маленько не влезает на экран в этом режиме. Это индивидуальная черта каждой модели телека. У меня некий Хьюндай с выпуклым кинескопом.
Широкоэкранный режим круто смотрится.
Файлы на сайте ОРИОН-2010 обновлены (дорисована схема распайки видеошнурка).
Error404
23.05.2010, 01:10
UPD 17.04.2010
В образ диска добавлена утилита XGET.COM - копирование с PC на Орион по XMODEM.
Сейчас собрал Кермит для CP/M, гоняю в эмуляторе. Вроде передает файлы в обе стороны.
Еще хочется попробовать терминал, но надо на Винде запустить Кермит-сервер. Кто-нибудь знает бесплатный Кермит-сервер для Винды?
balu_dark
23.05.2010, 01:53
попробу запустить putty.
Error404
23.05.2010, 02:06
попробу запустить putty.
Не, Putty такого не умеет.
А Kermit95 с сайта Columbia University - платный.
Плюс надо софтину именно под винду. Досовое не умеет работать с виртуальными COM-портами.
Error404
23.05.2010, 11:49
Не, Putty такого не умеет.
А Kermit95 с сайта Columbia University - платный.
Плюс надо софтину именно под винду. Досовое не умеет работать с виртуальными COM-портами.
Нашел такое: Kermit for Windows Version 0.85
http://kermit.wwarthen.com/Download.htm
Бесплатное, но какое-то тупое (может, оттого что давно написано - 1998 год): работать может только на портах COM1-COM4 (такое я научился обходить при помощи com0com (http://com0com.sourceforge.net/), под который рассчитан эмулятор) и не понимает терминал VT-52 (а вот это плохо, т.к. оно похоже шлет какие-то коды от DEC VT102, расстраивающие KERMIT на стороне CPM). Файло по протоколу Kermit конечно передается (кстати, возможны групповые операции и передача имени файла приемнику - в отличие от XModem не надо вводить на принимающей стороне), но оно и в Гипертерминале нормально передается. А хочется именно "Remote Desktop" :)
Если кому-то захочется поэкспериментировать - во вложении kermit V4.11 для CP/M (также, добавлено в образ диска (http://zx.pk.ru/showpost.php?p=275608&postcount=851)). Рассчитан на работу в CP/M 2.2 Generic (где управление последовательными портами ведется через переменную IOBYTE). На Орионе такое будет работать только в Altair DOS v 3.4t (http://zx.pk.ru/showpost.php?p=275608&postcount=851) и выше. Соответственно, железо - Орион2010 (http://orion-2010-support.narod.ru/) или эмулятор (http://orion-z.hoter.ru/file/335/5746_OrionZEmu.zip) с поддержкой RS-232 по стандарту Орион2010 (порты F764, F765). Коллеги эмуляторщики! Не забываем добавлять свежерожденную платформу в свои эмуляторы. :)
Система должна быть настроена на терминал CRT: (VGA), а kermit работать после запуска - через порт TTY:.
Команды Kermit-а на заметку:
set terminal vt52
set file-mode binary
set port tty
А вообще там даже встроенный help есть. Вызывается командой HELP :)
Error404
01.06.2010, 20:11
Рассчитан на работу в CP/M 2.2 Generic (где управление последовательными портами ведется через переменную IOBYTE). На Орионе такое будет работать только в Altair DOS v 3.4t (http://zx.pk.ru/showpost.php?p=275608&postcount=851). Соответственно, железо - Орион2010 (http://orion-2010-support.narod.ru/) или эмулятор (http://orion-z.hoter.ru/file/335/5746_OrionZEmu.zip) с поддержкой RS-232 по стандарту Орион2010 (порты F764, F764).
Добавил в образ диска утилиты XPUT.COM, XGET.COM (сооветственно отправка файла и прием файла по протоколу XMODEM по RS-232).
Можно было бы сделать версии этих полезных программ для ORDOS, но встает вопрос: в ORDOS нет возможности передать команду с параметрами (как это я делаю в CP/M), а надо как-то указывать имя файла и скорость порта. Графический интерфейс для маленьких программок наворачивать не хочется (нет готовых заготовок, писать графику с нуля - долго и неинтересно). Как сделать? Фиксированное имя и фиксированную скорость?
Как сделать? Фиксированное имя и фиксированную скорость?
Да. Хотя бы так.
Error404
01.06.2010, 21:36
Да. Хотя бы так.
Пожалуй, сделаю так: после старта программы, она выведет промпт и нужно будет ввести с клавиатуры строчку параметров. В сущности, почти тоже самое, что и в CP/M.
Графический интерфейс для маленьких программок наворачивать не хочется (нет готовых заготовок, писать графику с нуля - долго и неинтересно). Как сделать?
Пожалуй, сделаю так:....
Ох, уж эти юниксисты! Хлебом не корми, дай ручками понабирать!
Можно взять исходники от М128(256). Там уже готовое меню и рамочки. Переделать под себя не составит большого труда, если Вы постоянно в орионовской теме.
Error404
02.06.2010, 20:23
Ох, уж эти юниксисты! Хлебом не корми, дай ручками понабирать!
Можно взять исходники от М128(256). Там уже готовое меню и рамочки. Переделать под себя не составит большого труда, если Вы постоянно в орионовской теме.
Не хочется колхозить, а по хорошему - интерфейс по-любому получится сложнее программы. В-общем, вместо рисования напрямую по экрану будет правоверная командная строка. :) По крайней мере для начала.
Позже можно будет как вариант встроить загрузку по XMODEM дополнительной строчкой тех же М128(256).
Во вложении m35zrkr.bin - Монитор-3 для Орион2010 с поддержкой начальной загрузки с RS-232.
По включении питания Монитор в течении некоторого времени
(75 секунд на такте 10МГц, 5 минут на такте 2.5МГц) пытается принять файл
(BOOT-код) с RS-232 по протоколу XMODEM. Длина принимаемого при старте кода
варьируется от 2к до 14к (зависит от того какой файл вы передаете). Код размещается
начиная с адреса 0B800h (и последовательно выше, максимум 0EFFFh). Т.е. можно
загрузить картинку прямо на дефолтный экран (0C000h...0EFFFh). По завершении приема
файла Монитор передает управление по адресу 0BFFDh. Такой алгоритм позволяет
загрузить и запустить без переделок ORDOS или Mon3-Ext (или, понятно, что угодно
самописное, например - программатор FLASH).
Если за время ожидания связь не установлена, то Монитор переходит в
итерактивный=командный режим. Можно выполнить команды (директивы):
R<address> - загрузить по XMODEM файл на указанный адрес (от 0000 до EFFF)
G<address> - передать уравление по указанному адресу
Пример: команды "RB800", "GBFFD" выполнят то же, что и при начальном старте.
Скорость порта всегда 9600 бод.
Файлы менее 2к передавать при автостарте (по включению питания) не рекомендую,
т.к. в таком случае после выполнения JMP 0BFFDh (в неинициализированную память)
результат не предсказуем.
Error404, посцылку то забрал?
Error404
02.06.2010, 21:38
Error404, посцылку то забрал?
Да, все приехало в целости. :v2_cheer: Только я опять на этой неделе в Твери. :) Оттуда телеграфирую.
Запустить пока не успел. Мой штатный 5-вольтовый БП не подошел (вилка тоньше, не лезет), а переделывать его пока не охота. Вернусь с командировки, запитаюсь от USB, уже кабель под распотрошение подобрал. Пожалуй, для начала так проще всего будет. Клаву опять же надо PS2 (у меня USB) - ну, это легко решаемо.
Сергей, может подумаешь насчет М37 с загрузкой бут-блока через RS-232 вместо SD?
Не хочется колхозить....
Мне кажется, приделывание временных решений к новому изделию - это и есть "колхозить". Не в обиду!
Как мне представляется решение этой проблемы?
Во первых, в ПЛИС незачем держать два Монитора - достаточно одного М3. Он грузится в F800 и имеет контрольную сумму. Если при последующих Ресетах контрольная сумма подтверждается, то Монитор повторно не загружается из ПЛИС, а сохраняется неизменным содержимое в F800-FFFF. Это позволит вместо М3 загрузить свой Монитор со своей контрольной суммой. При этом он не будет перезаписываться М3 из ПЛИС при нажатии кнопки Reset. Чтобы восстановить М3, необходимо будет временно выключить питание-получить сбой по контрольной сумме.
Так решим проблему приверженности к "своей" версии Монитора. Да и записанный в ПЛИС Монитор не должен быть панацеей на все случаи, а лишь стартовой ступенькой.
На месте освободившихся 2К в ПЛИСС, необходимо сделать универсальный загрузчик. Такую мысль уже высказывал svofski в 212 топике.
Алгоритм этого загрузчика следующий: после RESET (с Мониторами уже разобрались!) загрузчик проверяет наличие SD-карты. Если она есть - грузится ВООТ (не важно чей он - СРМ или еще что-то) и передается ему управление. Можно в буте иметь адрес его загрузки, и не обязательно грохать его в 0000Н. Мы же зачем-то делали "дырки" в памяти между портами?
Если SD-карты нет, то проверяется наличия РОМ-диска. Критерий следующий: если первый байт "С3" - значит в ПЗУ ОРДОС (грузится по известным правилам), если "FF" - ПЗУ пустое - переход на выполнение далее. Если же любой другой байт, то он расценивается как наличие в ПЗУ новых параметров загрузки, где первые два байта - адрес загрузки, следующие два байта - количество загружаемых байт, и еще два байта - адрес передачи управления. Сама информация в ПЗУ находится с адреса 10Н.
Если в первом байте ПЗУ "FF" (нет ПЗУ-флешки, или она не запрограммирована), то управление передается загрузчику по RS-232. Он в цикле опрашивает готовность RS-232 и статус клавиатуры. Висит до бесконечности, пока не получит байт по RS-232, или не будет нажата клавиша клавиатуры. Загрузка начинается с адреса 0000Н и заканчивается по команде "конец передачи" (?), при этом контролируется переполнение ОЗУ до адреса конца экрана. По окончанию загрузки, управление автоматически передается по адресу 0000Н.
Если же была нажата клавиша клавиатуры, как во время ожидания приема так и в процессе приема (а также при отпускании RESET!), то загрузчик переходит в командный режим, где можно указать любой свой адрес загрузки, а затем передать управление на адрес по своему желанию. Здесь можно иметь еще три дополнительные команды: просмотр дампа памяти, модификация ячейки памяти и программатор флеша.
Вот при таком алгоритме загрузки можно "угодить" всем. ERROR404 будет вставлять свою SD-шку и грузить СРМ, а не вставив ее, ортодоксальные ордошники получат свою ОРДОС или еще что-то по своему усмотрению. А если и флешка пустая (или не нужна!!!) - есть прямая загрузка по RS-232. Хочешь - выполняй загруженную программу, а хочешь - запиши во флешку - программатор под рукой.
Ну, вот и вся постановка задачи - осталось только написать (2-3 вечера!). Это тянет где-то на полкило, так что в ПЛИС еще останется место для будущих задумок. И что главное, Сергей - нет никакой графики, как ты и хотел!
Error404
03.06.2010, 21:27
Мне кажется, приделывание временных решений к новому изделию - это и есть "колхозить". Не в обиду!
Как мне представляется решение этой проблемы?
Во первых, в ПЛИС незачем держать два Монитора - достаточно одного М3. Он грузится в F800 и имеет контрольную сумму. Если при последующих Ресетах контрольная сумма подтверждается, то Монитор повторно не загружается из ПЛИС, а сохраняется неизменным содержимое в F800-FFFF. Это позволит вместо М3 загрузить свой Монитор со своей контрольной суммой. При этом он не будет перезаписываться М3 из ПЛИС при нажатии кнопки Reset. Чтобы восстановить М3, необходимо будет временно выключить питание-получить сбой по контрольной сумме.
Так решим проблему приверженности к "своей" версии Монитора. Да и записанный в ПЛИС Монитор не должен быть панацеей на все случаи, а лишь стартовой ступенькой.
На месте освободившихся 2К в ПЛИСС, необходимо сделать универсальный загрузчик. Такую мысль уже высказывал svofski в 212 топике.
Алгоритм этого загрузчика следующий: после RESET (с Мониторами уже разобрались!) загрузчик проверяет наличие SD-карты. Если она есть - грузится ВООТ (не важно чей он - СРМ или еще что-то) и передается ему управление. Можно в буте иметь адрес его загрузки, и не обязательно грохать его в 0000Н. Мы же зачем-то делали "дырки" в памяти между портами?
Если SD-карты нет, то проверяется наличия РОМ-диска. Критерий следующий: если первый байт "С3" - значит в ПЗУ ОРДОС (грузится по известным правилам), если "FF" - ПЗУ пустое - переход на выполнение далее. Если же любой другой байт, то он расценивается как наличие в ПЗУ новых параметров загрузки, где первые два байта - адрес загрузки, следующие два байта - количество загружаемых байт, и еще два байта - адрес передачи управления. Сама информация в ПЗУ находится с адреса 10Н.
Если в первом байте ПЗУ "FF" (нет ПЗУ-флешки, или она не запрограммирована), то управление передается загрузчику по RS-232. Он в цикле опрашивает готовность RS-232 и статус клавиатуры. Висит до бесконечности, пока не получит байт по RS-232, или не будет нажата клавиша клавиатуры. Загрузка начинается с адреса 0000Н и заканчивается по команде "конец передачи" (?), при этом контролируется переполнение ОЗУ до адреса конца экрана. По окончанию загрузки, управление автоматически передается по адресу 0000Н.
Если же была нажата клавиша клавиатуры, как во время ожидания приема так и в процессе приема (а также при отпускании RESET!), то загрузчик переходит в командный режим, где можно указать любой свой адрес загрузки, а затем передать управление на адрес по своему желанию. Здесь можно иметь еще три дополнительные команды: просмотр дампа памяти, модификация ячейки памяти и программатор флеша.
Вот при таком алгоритме загрузки можно "угодить" всем. ERROR404 будет вставлять свою SD-шку и грузить СРМ, а не вставив ее, ортодоксальные ордошники получат свою ОРДОС или еще что-то по своему усмотрению. А если и флешка пустая (или не нужна!!!) - есть прямая загрузка по RS-232. Хочешь - выполняй загруженную программу, а хочешь - запиши во флешку - программатор под рукой.
Ну, вот и вся постановка задачи - осталось только написать (2-3 вечера!). Это тянет где-то на полкило, так что в ПЛИС еще останется место для будущих задумок. И что главное, Сергей - нет никакой графики, как ты и хотел!
Не то чтобы я против графики. Я против того чтобы прикручивать "графику ради графики" (вводить всего 2 параметра в графике - это этот самый случай), да еще с рисованием напрямую по экрану, как это было в старых орионовских программах. Сделано это было, как я понимаю, главным образом оттого, что во-первых, в КОИ-7 драйвере экрана Монитора-2 по понятным причинам не было псевдографики, а во-вторых даже с пользовательским знакогенератором Монитор-2 не умел рисовать знакоместа без пробельных строчек размером в 2 точки (матрица символа была 6х8). Вместо исправления Монитора (в питерском Мониторе-3 исправили матрицу символа до 6х10), в каждой программе принялись рисовать прямо по экрану только для того, чтобы нарисовать рамочки окна (для которых надо то, казалось бы, полдюжины псевдографических символов да простейшую подпрограмму). Так это и прижилось.
Про универсальный загрузчик надо подумать, но не могу не заметить, что с таким загрузчиком для собственно Монитора в 2к тупо не остается места (нечем даже текст будет вывести [не забываем, что знакогенератор тоже надо хранить] и клавиатуру опросить). Полкило - это только один загрузчик с SD. В-общем, надо очень хорошо подумать.
Также, тогда сначала нужно произвести доработку по доступу к ОЗУ под ПЗУ. В текущем варианте, ЕМНИП, при отключении ПЗУ (этот режим был рассчитан в-основном на адаптацию игр ZX, для которых эта область нужна как ОЗУ) нет доступа к портам клавиатуры, РомДиска, SD, RS232 (ewgeny7, напомни пожалуйста, порты по OUT, как я понимаю, пока еще не реализованы?). Плюс область 0F000h...0FFFFh перестает работать как некоммутируемая - не заработает ни одна орионовская программа, которая для доступа к страницам ОЗУ, отличных от текущей страницы, идет мимо подпрограмм Монитора.
А таких программ было, т.к. соответствующая подпрограмма Монитора-2 всегда возвращала управление в страницу 0 вне зависимости от того из каких страниц была вызвана, и как следствие, была удобна только для программ работавших в 0-странице. Навороченые программы (да хоть та же CP/M, работающая либо в 1, либо во 2 странице), не заработают.
В-общем, усилия проектировщика сначала нужно приложить в другом месте. Тем более, что они как раз и могут быть приложены за вечер-два, в отличии от программистики.
как я понимаю, пока еще не реализованы?
Истину глаголишь. Я делал Орион, а не ПЦ.
Про универсальный загрузчик надо подумать, но не могу не заметить, что с таким загрузчиком для собственно Монитора в 2к тупо не остается места (нечем даже текст будет вывести [не забываем, что знакогенератор тоже надо хранить] и клавиатуру опросить). Полкило - это только один загрузчик с SD. В-общем, надо очень хорошо подумать.
Что-то не въезжаю! Давайте разбираться. Евгений, в одном из постов, сказал, что в ПЛИС (понятно, в конфиг.флеш) есть место для "мониторов" в 4Кбайта. 2Кб. мы отдаем "стандартному" Монитору, который грузится в область F8 самым первым. Далее, за ним грузится универсальный загрузчик в какую-то свою область памяти. Можно грузить "кусочками" в дырки между портами. Значит, в момент начала работы загрузчика, уже доступен Монитор со своими ресурсами, в том числе и знакогенератором. Значит в самом загрузчике не нужно иметь то, о чем Вы говорите (см.цитату).
Тогда мне хочется спросить (я сам ассемблерист!), Вы считаете, что указанный универсальный загрузчик не поместится в оставшиеся 2Кб, даже если, допустим, Ваш загрузчик SD будет занимать 1Кб? Или Вы его будете писать на СИ?
И последнее. Все блоки этого загрузчика уже Вами отработаны на эмуляторе, если судить по Вашим заявлениям на форуме. Осталось собрать все в кучку и обкатать. С Вашим профессионализмом - это, действительно, 2-3 дня между командировками, и десяток бутылок пива. Не прибедняйтесь. Если хотите, я лично буду Вам носить пиво, и буду счастлив от того, что обслуживал такого Мастера!
Error404
04.06.2010, 15:12
Что-то не въезжаю! Давайте разбираться. Евгений, в одном из постов, сказал, что в ПЛИС (понятно, в конфиг.флеш) есть место для "мониторов" в 4Кбайта. 2Кб. мы отдаем "стандартному" Монитору, который грузится в область F8 самым первым. Далее, за ним грузится универсальный загрузчик в какую-то свою область памяти. Можно грузить "кусочками" в дырки между портами. Значит, в момент начала работы загрузчика, уже доступен Монитор со своими ресурсами, в том числе и знакогенератором. Значит в самом загрузчике не нужно иметь то, о чем Вы говорите (см.цитату).
Тогда мне хочется спросить (я сам ассемблерист!), Вы считаете, что указанный универсальный загрузчик не поместится в оставшиеся 2Кб, даже если, допустим, Ваш загрузчик SD будет занимать 1Кб? Или Вы его будете писать на СИ?
Загрузчики то поместятся в оставшиеся 2к. Проблема в другом: на настоящий момент нет никакого механизма чтобы их оттуда программно достать. Поясняю. У нас сейчас как бы две 2к ПЗУ "бутербродом", /CE которых переключается тумблером (в нашем случае с клавиатуры, но сути это не меняет). Программный код такое переключение выполнить не в состоянии.
Поэтому и пихаем всё в единственные одновременнодоступные 2к ПЗУ F800. Если бы такие механизмы были, то и дырки между портами не были бы нужны - какая разница куда положить загрузчик для работы, он по любому адресу отработает (работают же, к примеру, ордосовские загрузчики из 0-страницы). Дырки между портами нужны для другого - для буферов ОС в некоммутируемой области - их всегда не хватает.
И последнее. Все блоки этого загрузчика уже Вами отработаны на эмуляторе, если судить по Вашим заявлениям на форуме. Осталось собрать все в кучку и обкатать. С Вашим профессионализмом - это, действительно, 2-3 дня между командировками, и десяток бутылок пива. Не прибедняйтесь. Если хотите, я лично буду Вам носить пиво, и буду счастлив от того, что обслуживал такого Мастера!
Я не делал таких заявлений. Я говорил только о том, что всё то, что разработаю в процессе работы над CP/M, потом кто угодно сможет применить где угодно, т.к. исходники будут в общем доступе. И пиво носить не надо, достаточно не трепать нервы подобными шуточками. :)
В-общем, по-любому возвращаемся к тому, с чего я начал в предыдущем посте - к доработке текущей аппаратной конфигурации до какой-то более продвинутой. А там уже будем посмотреть.
Или оптимизация желаний. Надо ли заносить всё в общее ПЗУ? Загрузку Ордос я добавлю - оно много места не займет. Получится так: загрузка с RS-232 + загрузка Ordos поместится в первое 2к ПЗУ, загрузка c SD (по спецкнопке) - второе 2к ПЗУ. Тогда останемся в текущей конфигурации.
...тогда сначала нужно произвести доработку по доступу к ОЗУ под ПЗУ. В текущем варианте, ЕМНИП, при отключении ПЗУ (этот режим был рассчитан в-основном на адаптацию игр ZX, для которых эта область нужна как ОЗУ) нет доступа к портам клавиатуры, РомДиска, SD, RS232 (ewgeny7, напомни пожалуйста, порты по OUT, как я понимаю, пока еще не реализованы?). Плюс область 0F000h...0FFFFh перестает работать как не коммутируемая - не заработает ни одна орионовская программа, которая для доступа к страницам ОЗУ, отличных от текущей страницы, идет мимо подпрограмм Монитора.
Я об этом еще когда говорил? http://zx.pk.ru/showpost.php?p=277035&postcount=878
Error404 поддержал! http://zx.pk.ru/showpost.php?p=277168&postcount=881
А что Евгений? http://zx.pk.ru/showpost.php?p=277093&postcount=879. Чудесно!
И что оказывается в итоге? Смотри цитату!
Error404
14.06.2010, 18:26
Надо ли заносить всё в общее ПЗУ? Загрузку Ордос я добавлю - оно много места не займет. Получится так: загрузка с RS-232 + загрузка Ordos поместится в первое 2к ПЗУ, загрузка c SD (по спецкнопке) - второе 2к ПЗУ. Тогда останемся в текущей конфигурации.
Сделал нечто похожее на "Т.З." от pvlad для текущей конфигурации за минусом загрузчика с SD (он сидит в Мониторе во второй половинке ПЗУ, которая включается аппаратно по спецкнопке).
При включении питания с ПЗУ из вложения имеем пошагово:
1. Проверяется нажатие любой кнопки, если нажато - переход в командный режим. В командном режиме действуют диррективы:
R<address> - загрузить по XMODEM файл на указанный адрес (от 0000 до EFFF)
G<address> - передать уравление по указанному адресу
директивы без параметров по умолчанию работают с адресом 0
Прочие директивы реализовывать считаю смысла нет, все они есть в стародавнем ленинградском Мониторе-Ext (см. во вложении, там же описание от Чистякова, датировано 1991 годом :) ). Кому надо - первым подгрузит Монитор-Ext по RS-232 и получит за счет "расширителя" множество "встроенных" директив (и даже лишку :) ).
.
2. Если кнопка не была нажата, то в ROM-диске проверяется наличие ORDOS: если первый байт "0С3h" - значит в ПЗУ ОРДОС V4.x (в ORDOS 2.x, кстати, первый байт - 0CDh, т.е. CALL): запускаем ORDOS. Если первый байт "FF" - ПЗУ пустое: переход на RS232-BOOT.
Если в ПЗУ любой другой байт (не 0С3h и не 0FFh), то он расценивается как наличие в ПЗУ новых параметров загрузки, где:
{0..1} первые два байта - адрес передачи управления после загрузки из ROM
{2..3} следующие два байта - адрес загрузки в ОЗУ
{4..5} следующие еще два байта - количество загружаемых байт
{16..XXXX} собственно исполняемый/загружаемый код (всегда с офсетом 10h от начала ROM-диска)
Тут имею вопрос, а что будет если ПЗУ не вставлено и со входов читается мусор? :v2_conf2:
.
3. Если первый байт ПЗУ "FF" (ПЗУ пустое), то запускается загрузчик по RS-232, который ожидает начало передачи (тут ожидание можно прервать по любой символьной кнопке), затем загружает файл по XMODEM на 0B800 и выше (но не более чем до 0EFFFh) и передает управление на 0BFFD.
Думаю, набрать в командном режиме R затем G (загрузка на 0 и старт на 0) проще, чем ковырять "RB800", "GBFFD" для Монитора-EXT и ORDOS. Том более, что Монитор-EXT и ORDOS уже есть, а ничего прочего под загрузку с RS-232 пока что нет. И, думаю, нет проблемы нечто вновь делаемое странслировать для работы с B800 (раз уж так оно на Орионе повелось и лень переходить в командный режим чтобы нажать 2 кнопки).
О неприятном: несколько подрезался знакогенератор (в части русских букв). Что лично с моей колокольни не видится проблемой, ибо KOI7 все равно малопригоден для чего либо кроме начальной загрузки. Также, можно завести файлик в ОРДОС (в ROM-ДИСКе) с полным знакогенератором. Займет 768 байт, подгружать по необходимости - очень просто, одно нажатие в оболочке Ордос VC$.
Тут имею вопрос, а что будет если ПЗУ не вставлено и со входов читается мусор?
Будет читаться FF по всему дапазону ПЗУ.
Сергей, ты подключил Орион хоть куда-нибудь???
Сделал нечто похожее на "Т.З." от pvlad
Спасибо Сергей, прекрасно! НО!
.....
3. Если первый байт ПЗУ "FF" (ПЗУ пустое), то запускается загрузчик по RS-232, который ожидает начало передачи (тут ожидание можно прервать по любой символьной кнопке), затем загружает файл по XMODEM на 0B800 и выше (но не более чем до 0EFFFh) и передает управление на 0BFFD.
Думаю, набрать в командном режиме R затем G (загрузка на 0 и старт на 0) проще, чем ковырять "RB800", "GBFFD" для Монитора-EXT и ORDOS. Том более, что Монитор-EXT и ORDOS уже есть, а ничего прочего под загрузку с RS-232 пока что нет.
В целом у меня нет возражений по подходу: по умолчанию загрузка для "ордошников", а через "спец.кнопку" для сипиэмщиков. Пусть будет так.
Что касается загрузки с SD, то я не буду вмешиваться ни в структуру, ни в алгоритм. Это всецело твоя вотчина! А вот, что касается ORDOS (я не зря выделил п.3 в качестве цитаты!), то здесь мне хотелось бы, чтобы было сделано так, как я прошу, а не "нечто похожее".
Я объяснюсь!
Мне не понятно пристрастие по загрузке к адресу 0B800, тем более по умолчанию. На кой черт мне грузить Монитор-EXT и ORDOS по XMODEMу. Если я создам РОМ-диск, то и буду оттуда их грузить до посинения. А если уж приспичит один-два раза (к примеру, при отладке), то "наковыряю "RB800", "GBFFD" - рука не отсохнет. Тем более есть (для меня!) "М256", да и кому нужна, вообще, ORDOS без РОМ-диска.
А теперь представим такие варианты:
1. Монитор в F800 уже сидит. Мы ведем разработку (не связанную с ORDOS) кроссредствами на ПС. Проект имеет большой размер, и зачем, спрашивается, мне грузить его в 0B800 (а затем перекачивать?), когда я могу грузить его в 0000 (при этом доступна линейно вся память+экранное ОЗУ, если мало!) и тут же запускать на выполнение? Мне что необходимо десятки раз за вечер "ковырять" команды "R" и "G", обкатывая прект? Пусть даже и без адресов!
2. То же самое и при отладке (и создании) через РОМ-диск. В начале загрузчик (программатор) во флеш РОМ-диска, за ним массив данных (программа, оверлеи, картинки, аудио-файлы и т.д.). Все влетает в память (на одном дыхании до 60 кило!) и автоматом записывается во флеш РОМ-диска! Зачем, при этом, ковыряться с адресами и командами?
Когда я настаивал на введение USART для Ориона-2010, то преследовал именно эти цели - упростить процесс разработки и загрузки кода с помощью кроссредств, а не для загрузки Монитор-EXT и ORDOS по XMODEMу. Это очень мелкие частности.
Error404
15.06.2010, 08:52
Мне не понятно пристрастие по загрузке к адресу 0B800, тем более по умолчанию. На кой черт мне грузить Монитор-EXT и ORDOS по XMODEMу. Если я создам РОМ-диск, то и буду оттуда их грузить до посинения. А если уж приспичит один-два раза (к примеру, при отладке), то "наковыряю "RB800", "GBFFD" - рука не отсохнет.
Как скажете, можно сделать и загрузку на адрес 0, доделаю.
Просто казалось, что 64к (страницу ROM) для прошивки все равно целиком не загрузить в ОЗУ, т.е. сначала должен грузиться программатор, прошивающий ROM-диск "частями" и подкачивающий эти части по мере надобности. Такому программатору все равно где находиться и он вряд ли будет более 2к. Вот и оставил по умолчанию адрес загрузки на B800 чтобы еще и старое ПО работало.
Ну и несколько байт съэкономил в коде. :)
---------- Post added at 08:52 ---------- Previous post was at 08:49 ----------
Сергей, ты подключил Орион хоть куда-нибудь???
Пока некуда.
Думаю варианты (попробую на работе купить БУ предварительно опробовав, но это надо появиться на работе - я пока из командировок не вылезаю) .
У меня только 1 моник дома - Iiyama та что не понимает 51Гц, TV нет вообще (в т.ч. и с VGA).
Надо думать в сторону увеличения кадровой хоть на сколько-то, т.к. проблема будет у народа воспроизводиться как и у меня. 100%.
Error404
15.06.2010, 22:30
Как скажете, можно сделать и загрузку на адрес 0, доделаю.
Поправил. Измененое выделено коричневым.
При включении питания с ПЗУ из вложения (М37ZRKR.BIN) имеем пошагово:
1. Проверяется нажатие любой кнопки, если нажато - переход в командный режим.
В командном режиме действуют диррективы:
R<address> - загрузить по XMODEM файл на указанный адрес (от 0000 до EFFF)
G<address> - передать уравление по указанному адресу
директивы без параметров по умолчанию работают с адресом 0
Прочие директивы реализованы в стародавнем ленинградском Мониторе-Ext (см. во вложении, там же описание от В.Чистякова, раритет, датировано 1991 годом :) ). Кому нужен расширенный режим директив Монитора, тот первым подгрузит Монитор-Ext по RS-232 и получит за счет "расширителя" множество "встроенных" директив (и даже лишку :) ).
.
2. Если кнопка не была нажата, то в ROM-диске проверяется наличие ORDOS или ROM-программы:
2.1. Если первый байт "0С3h" - значит в ПЗУ ОРДОС V4.x : запускаем ORDOS.
2.2. Если первый байт "FF" - ПЗУ пустое: переход на RS232-BOOT.
2.3. Если в ПЗУ любой другой байт (не 0С3h и не 0FFh), то он расценивается как наличие в ПЗУ ROM-диска новых параметров загрузки (8-байтового описателя ROM-программы), где:
{0..1} 2 байта - адрес передачи управления после загрузки ROM-программы в ОЗУ
{2..3} 2 байта - адрес начала ROM-программы в ПЗУ (параметр "откуда копировать")
{4..5} 2 байта - адрес загрузки в ОЗУ (параметр "куда копировать")
{6..7} 2 байта - количество загружаемых байт (параметр "сколько копировать")
{с адреса (2..3) и далее} собственно исполняемый/загружаемый код
.
3. Если первый байт ПЗУ "FF" (ПЗУ пустое, п.2.2), то запускается загрузчик по RS-232 (протокол XMODEM), который ожидает начало передачи (тут ожидание можно прервать по любой символьной кнопке и выйти в командный режим Монитора - п.1), затем загружает файл по XMODEM на адрес 0 и выше (но не более чем до 0EFFFh) и передает управление на 0. Загрузка по нажатию кнопки не прерывается.
.
Если необходимо прогрузить файл или передать управление по отличающимся от 0 адресам, то нужно выйти в командный режим (п.1) и выполнить команды R и G Монитора.
Пример: для загрузки Mонитора-расширителя (EXT-13.BIN во вложении) нужно выполнить команды "RB800", "GBFFD". Они выполнят загрузку файла на адрес 0B800h и передачу управления на адрес 0BFFDh.
.
Скорость порта в Мониторе всегда 9600 бод. Если нужно отличное от этого значение, то надо перекомпилировать Монитор, предварительно соответственно исправив константу UART_SPEED.
.
В Мониторе есть доп. точка входа: 0F834h - загрузка файла по XMODEM, входной параметр - начальный адрес загрузки в регистре HL. Подпрограмма не перепрограммирует порт управления RS-232, т.е. перед ее вызовом можно установить любую скорость порта.
Примечание (может быть неудобством): подпрограмма рисует "прогрессбар" символами #.
.
Монитору присвоен индекс (версия) V3.7 (содержится в ячейках 0F842h..0F845h). Это нужно проверять перед вызовом подпрограммы 0F834h для того, чтобы отличать версии, содержащие по адресу 0F834h другие подпрограммы (например, чтение сектора с IDE/SD в мониторах V3.5, V3.6)
.
О неприятном: при добавлении функционала несколько подрезался знакогенератор (в части русских букв). Что не видится проблемой, ибо KOI7 все равно малопригоден для чего либо кроме начальной загрузки. Также, можно иметь в ОРДОС (например, из ROM-ДИСКа) файлик с полным знакогенератором. Он займет в ROM-ДИСКе всего 784 байт (см. во вложении koi7-fnt.ord), подгружать его по необходимости очень просто - одно нажатие Enter в оболочке Ордос VC$ или через механизм EXT$.
PS. Гранд респект caro за идею использования и куски исходных текстов XMODEM. :v2_cheer:
PPS. Прикольно, загружал в эмуляторе по старту Монитора игрушки от ZX аж по 60к размером, которые с 0 стартуют. Работают... :)
В Мониторе есть доп. точка входа: 0F834h - загрузка файла по XMODEM, входной параметр - начальный адрес загрузки в регистре HL. Подпрограмма не перепрограммирует порт управления RS-232, т.е. перед ее вызовом можно установить любую скорость порта.
Примечание (может быть неудобством): подпрограмма рисует "прогрессбар" символами #.
.
У меня есть вопросы:
1. Нет ли ошибки с точкой входа 0F834? В исходниках есть такая справка:
;f830 - запрос верхней границы озу пользователя. выход hl=ramtop
;f833 - установка верхней границы озу пользователя. вход: hl=адрес верхней границы озу.
;f836 - чтение байта из доп. страниц озу. вход: hl - адрес, a - номер доп. страницы
;f839 - запись байта в доп.страницу озу. вход: hl - адрес, a - номер доп. страницы
2.Может все таки расширить количество входных параметров, где можно указывать (помимо адреса) скорость и устанавливать флаг вывода/отключения прогрессбара? Или уже совсем места нет?
3.
{0..1} 2 байта - адрес передачи управления после загрузки ROM-программы в ОЗУ
{2..3} 2 байта - адрес начала ROM-программы в ПЗУ (параметр "откуда копировать")
{4..5} 2 байта - адрес загрузки в ОЗУ (параметр "куда копировать")
{6..7} 2 байта - количество загружаемых байт (параметр "сколько копировать")
{с адреса (2..3) и далее} собственно исполняемый/загружаемый код
- Нововведение с байтами 2..3? Менять его оперативно во флешке все равно не удастся. Тогда зачем? Есть стандартный адрес: 0010Н
- Последняя строчка. Может быть следует читать: "(16 и далее)-собственно исполняемый/загружаемый код"?
---------- Post added at 14:14 ---------- Previous post was at 14:07 ----------
Я об этом еще когда говорил? http://zx.pk.ru/showpost.php?p=277035&postcount=878
Error404 поддержал! http://zx.pk.ru/showpost.php?p=277168&postcount=881
А что Евгений? http://zx.pk.ru/showpost.php?p=277093&postcount=879. Чудесно!
И что оказывается в итоге?
Так мне никто и не ответил: можем мы загружать в область F800-FFFF что-то другое, или М3.7 припаян будет насмерть! В оригинальном Орионе можно было просто заменить РФ-ку и... "получи партизан гранату"! А здесь как?
можем мы загружать в область F800-FFFF что-то другое
В fullram mode область ПЗУ доступна как обычное ОЗУ, но при этом отключаются все порты, проецируемые на память. Просто отключения ПЗУ не обсуждалось и не предусмотрено.
В fullram mode область ПЗУ доступна как обычное ОЗУ, но при этом отключаются все порты, проецируемые на память. Просто отключения ПЗУ не обсуждалось и не предусмотрено.
Прекрасно! Тогда мы можем реализовать то, что я предлагал в первом абзаце http://zx.pk.ru/showpost.php?p=288642&postcount=900?
Я процитирую себя, дополнительно, здесь:
Он (Монитор) грузится в F800 и имеет контрольную сумму. Если при последующих Ресетах контрольная сумма подтверждается, то Монитор повторно (при Ресетах) не загружается из ПЛИС, а сохраняется неизменным содержимое в F800-FFFF. Это позволит вместо М3 загрузить свой Монитор со своей контрольной суммой. При этом он не будет перезаписываться М3 из ПЛИС при нажатии кнопки Reset. Чтобы восстановить М3, необходимо будет временно выключить питание-получить сбой по контрольной сумме.
Так решим проблему приверженности к "своей" версии Монитора. Да и записанный в ПЛИС Монитор не должен быть панацеей на все случаи, а лишь стартовой ступенькой.
Т.е., если захотеть(?), то мы можем получить следующее, особо не напрягаясь!
1. При холодном старте грузится то, что делает Error404 - M3 V3.7.
2. Включаем (не важно кто!) fullram mode и записываем в область F800-FFFF другой код.
3. Выключаем fullram mode и нажимаем кнопку Reset. Все! Вместо штатного Монитора работает другая программа - сколько бы мы не нажимали кнопку Reset.
Что для этого надо? В холодный загрузчик Монитора из ПЛИС добавить кусочек кода, который проверяет контрольную сумму области памяти F800-FFFD до загрузки туда Монитора-3 и сравнивает ее с КС в ячейках FFFE-FFFF. Не совпадает (при холодном старте) - загрузить из ПЛИС и передать управление, совпадает - просто передать управление и ничего не грузить.
Можно не напрягаться и взять за основу (кусочка кода) функцию F82A (CSM) из Монитора.
Господа Главные конструкторы! Это очень сложно сделать?
Error404
16.06.2010, 18:32
У меня есть вопросы:
1. Нет ли ошибки с точкой входа 0F834? В исходниках есть такая справка:
;f830 - запрос верхней границы озу пользователя. выход hl=ramtop
;f833 - установка верхней границы озу пользователя. вход: hl=адрес
За счет того, что подпрограмма SetRAMTOP (f833) исключена, и RamTop всегда 0BFFFH, сейчас там такой код:
AF830: LD HL,0BFFFH
AF833: RET
XREAD: jr rxfile
AF836: JP AF968
2.Может все таки расширить количество входных параметров, где можно указывать (помимо адреса) скорость и устанавливать флаг вывода/отключения прогрессбара? Или уже совсем места нет?
Места нет, подъедаем знакогенератор, пока русские буквы. Попробую в следующем билде.
3.
{0..1} 2 байта - адрес передачи управления после загрузки ROM-программы в ОЗУ
{2..3} 2 байта - адрес начала ROM-программы в ПЗУ (параметр "откуда копировать")
{4..5} 2 байта - адрес загрузки в ОЗУ (параметр "куда копировать")
{6..7} 2 байта - количество загружаемых байт (параметр "сколько копировать")
{с адреса (2..3) и далее} собственно исполняемый/загружаемый код
- Нововведение с байтами 2..3? Менять его оперативно во флешке все равно не удастся. Тогда зачем? Есть стандартный адрес: 0010Н
- Последняя строчка. Может быть следует читать: "(16 и далее)-собственно исполняемый/загружаемый код"?
Подумалось мне, что иметь возможность настраивать этот параметр не помешает (другие же мы настраиваем). Ничто же не мешает этим вторым параметром указать 0010Н и код размещать по адресу "(16 и далее)".
Так мне никто и не ответил: можем мы загружать в область F800-FFFF что-то другое, или М3.7 припаян будет насмерть! В оригинальном Орионе можно было просто заменить РФ-ку и... "получи партизан гранату"! А здесь как?
Я точно не знаю как оно реализовано в ПЛИС. Запущу Женин Орион - посмотрю.
Так мне никто и не ответил: можем мы загружать в область F800-FFFF что-то другое, или М3.7 припаян будет насмерть! В оригинальном Орионе можно было просто заменить РФ-ку и... "получи партизан гранату"! А здесь как?
Шнур LPT_порт <===>IDC_10_штырьков.
Заливается цельком весь код ПЛИС. Код ПЗУ находится внутри. Для самостоятельной замены нужен Quartus. Или меня попросить заменить код ПЗУ в прошивке, а вы уже зальете новую.
3. Выключаем fullram mode и нажимаем кнопку Reset. Все! Вместо штатного Монитора работает другая программа - сколько бы мы не нажимали кнопку Reset.
Неа. Выключаем фуллрам и альтеровское ПЗУ начинает работать "поверх" области памяти ОЗУ, куда вы записывали свой монитор. Результат "подмены" равен нулю.
Для большей гибкости нужно вводить новый порт, FD. Раскидать биты на системную конфигурацию, типа "отключения ПЗУ only", чегото там еще...
За счет того, что подпрограмма SetRAMTOP (f833) исключена, и RamTop всегда 0BFFFH, сейчас там такой код:
AF830: LD HL,0BFFFH
AF833: RET
XREAD: jr rxfile
AF836: JP AF968
Сергей! При моем исключительном уважении к тебе, как профи - это безконтрольная анархия!
Места нет, подъедаем знакогенератор, пока русские буквы. Попробую в следующем билде.
Пока еще не "обнародован" ни один билд. Все, что ты выкладываешь сейчас - только для ознакомления и обсуждения. Вот когда Евгений прошьет - можно отсчитывать билды. Поэтому надо сделать, как в последний раз! Время еще есть!
Подумалось мне, что иметь возможность настраивать этот параметр не помешает (другие же мы настраиваем). Ничто же не мешает этим вторым параметром указать 0010Н и код размещать по адресу "(16 и далее)".
Все равно не понимаю логики и практичности. Но, если очень хочется, чтобы был фантик....
---------- Post added at 22:45 ---------- Previous post was at 22:12 ----------
Шнур LPT_порт <===>IDC_10_штырьков.
Заливается цельком весь код ПЛИС. Код ПЗУ находится внутри. Для самостоятельной замены нужен Quartus. Или меня попросить заменить код ПЗУ в прошивке, а вы уже зальете новую.
Я это уже знаю. Ты рассказывал раньше.
Неа. Выключаем фуллрам и альтеровское ПЗУ начинает работать "поверх" области памяти ОЗУ, куда вы записывали свой монитор. Результат "подмены" равен нулю.
Фу-ты! Ну, нельзя же так! Я и помереть могу (извините - возраст!) от вскрытия таких тайн. Обидно, когда ты мечтаешь, как дурак, а тут фигак и в остатке... ни-и-и фи-га!
Для большей гибкости нужно вводить новый порт, FD. Раскидать биты на системную конфигурацию, типа "отключения ПЗУ only", чегото там еще...
Разумное решение! Сергей, как тебе видится этот порт?
Евгений, так все таки мы можем ввести порты-дублеры через IN/OUT и решить эту проблему кардинально?
Евгений, так все таки мы можем ввести порты-дублеры через IN/OUT и решить эту проблему кардинально?
Мыслю на эту тему.
Совсем несложно снять ограничение "только память" в дешифрации портов F400..F402, F500..F502, F6xx, F76x.
Порты F800_RAM = xxF8_IO, аналогично F900..FB00. Отключается _RAM -адресация в режиме fullram, остается доступ как IO по упрощенной адресации xxFx.
Порты FE и FF имеют только IO адресацию.
Получается примерно так - включение fullram, загрузка монитора, выключение fullram, установка бита порта FD (FD00 ???) для отключения ПЗУ, установка другого бита FD для запрета записи в F800..FFFF
Error404
17.06.2010, 19:34
Сергей! При моем исключительном уважении к тебе, как профи - это безконтрольная анархия!
Это решение во всех ленинградских Мониторах-3 уже 19 с гаком лет. И ничего, полет нормальный - все работает как в ORDOS, так и в CP/M. Тогда они на этом что-то съэкономили (предельно упростив п/п Монитора GetRamTop/SetRamTop=F830/F833), а я свои доработки делал на основе их Мониторов-3 (получив исходник дизассемблером, что хорошо заметно по стилю исходного кода), т.к. у них в Мониторах-3 есть предельно удобные фишки (расширения функционала), отказаться от которых я не могу - привык.
Пока еще не "обнародован" ни один билд. Все, что ты выкладываешь сейчас - только для ознакомления и обсуждения. Вот когда Евгений прошьет - можно отсчитывать билды. Поэтому надо сделать, как в последний раз! Время еще есть!
П/п чтения файла на предмет прогресбара я поправлю. Точку входа для нее придется оставить как есть 0F834 - просто оттого, что таблицу переходов Монитора более уже некуда расширять. Не получится сделать более красиво или логично.
Все равно не понимаю логики и практичности. Но, если очень хочется, чтобы был фантик....
Очень полезный бантик. Сейчас заранее не известно - достаточно ли будет постоянного оффсета 010h? Не понадобится кому-то разместить код сразу после заголовка (оффсет 08h), или наоборот какой-то информацией расширить заголовок (оффсет более 010h). А то, что изменить ПЗУ F800 сложнее (чтобы исправить этот оффсет 010h в п\п считывания ROM-diska), чем перепрошить FLASH ROM-diska, это мы уже установили.
Разумное решение! Сергей, как тебе видится этот порт?
Евгений, так все таки мы можем ввести порты-дублеры через IN/OUT и решить эту проблему кардинально?
В принципе можно, все равно какие там будут биты - Евгению реализовывать, ему виднее. Но у меня вопрос: если берем порт FD - не будет ли проблем с ПО использующим обращения к портам муз. сопроцессора BFFD и FFFD? Тут надо очень аккуратно делать дешифрацию (полную?) и аккуратно программить.
Евгению реализовывать, ему виднее. Но у меня вопрос: если берем порт FD - не будет ли проблем с ПО использующим обращения к портам муз. сопроцессора BFFD и FFFD? Тут надо очень аккуратно делать дешифрацию (полную?) и аккуратно программить.
Мне это видно как порт FDxx. Тогда конфликтов не будет. Если делать упрощенную xxFD, то косяки пойдут табунами.
Error404
17.06.2010, 23:20
Мне это видно как порт FDxx. Тогда конфликтов не будет. Если делать упрощенную xxFD, то косяки пойдут табунами.
Я не догоняю, что ты имеешь в виду.
FD - это младший байт на ША? Или старший? Если младший, то он дешифрируется одинаково в обоих случаях из команд "OUT 0FBh, a" (формат i8080) и "LD BC, 0xxFDh; OUT (c), reg" (Z80, BC ставится на ША). Причем в первом случае, на ША(8..15) выдается содержимое регистра А. Т.е. комбинации команд
LD BC, 0BFFDh
OUT (C), a
и
LD A, 0BFh
OUT (0FDh), a
дадут одинаковый результат на шине адреса, и приведут к записи в муз. сопроцессор.
Регистр 0FDh надо в этом случае пользовать очень аккуратно (считать какие битики писать, а какие нет - чтобы не попасть в муз. сопроцессор), либо забыть про муз. сопроцессор. А музыкальные игрушки от ZX, кстати, будут этот регистр сбивать.
Если это старшая половинка, то к ней не обратиться короткой командой "OUT (0FDh), a" (имеем 2 команды из 5 байт вместо одной двухбайтовой) и почему тогда именно FD? Я подумал было что этот 0FDh, из неиспользуемых портов Орионовского диапазона F8 и выше (уже задействованы 0F8h, 0F9h, 0FAh, 0FBh, ..., 0FEh, 0FFh).
Error404, да я ляпнул не сильно подумавши...
Может, стоит вообще взять "следующий по списку" порт F767?
А вообще, на какой именно адрес повесить новый "порт конфигурации" безусловно видней именно тебе :)
Ждем твоего вердикта.
Error404
17.06.2010, 23:56
Error404, да я ляпнул не сильно подумавши...
Может, стоит вообще взять "следующий по списку" порт F767?
А вообще, на какой именно адрес повесить новый "порт конфигурации" безусловно видней именно тебе :)
Ждем твоего вердикта.
Предлагаю использовать порты по OUT в 8-битной адресации (дешифрируем младшую половину ША). Адреса:
- 18H..1BH - клавиатура (BB55) = F400...F403 {совместимо с Орион-Про}
- 28H..2BH - ROM-диск (BB55) = F500...F503 {совместимо с Орион-Про}
- 38H..3BH - порт расш. (BB55) = F600...F603 {это вводим дополнительно}
- 48H..4FH - новые доработки (ВИ1,SD,RS232,PS2) = F760...F767 {это вводим дополнительно}
Тут имею вопрос - не попадаем ли этими адресами на какие-то порты Спектрума (не получится ли обращение к ним из ZX-игрушек)?
Error404
18.06.2010, 09:35
Предлагаю использовать порты по OUT в 8-битной адресации (дешифрируем младшую половину ША). Адреса:
- 18H..1BH - клавиатура (BB55) = F400...F403 {совместимо с Орион-Про}
- 28H..2BH - ROM-диск (BB55) = F500...F503 {совместимо с Орион-Про}
- 38H..3BH - порт расш. (BB55) = F600...F603 {это вводим дополнительно}
- 48H..4FH - новые доработки (ВИ1,SD,RS232,PS2) = F760...F767 {это вводим дополнительно}
Тут имею вопрос - не попадаем ли этими адресами на какие-то порты Спектрума (не получится ли обращение к ним из ZX-игрушек)?
Про конфигурационный порт забыл (который вместо 0FDh). :)
Дополнительные конфигурационные порты можно разместить в диапазоне 03Ch..03Fh (для симметрии). Пускай будет 03Dh, что-ли...
А этот порт получается не будет сбрасываться по кнопке при /RESET (сброс только по питанию)? Иначе какой смысл, получится дубль бита "fullram" в порту 0FBh. Или как?
А этот порт получается не будет сбрасываться по кнопке при /RESET (сброс только по питанию)?
Правильно мыслишь :)
Порт конфигурации должен хранить установки в течение всего сеанса работы.
Это решение во всех ленинградских Мониторах-3 уже 19 с гаком лет.
Я сомневаюсь. Дело в том, что я нашел (в своих архивах) оригинальный исходник М3, который мне прислали (Ивинских В.Р.) ленинградци для стандартизации с Монитором для ПРО. Там этого безобразия нет. Думаю, когда автор перестал контролировать свой Монитор, вот и стали появляться всякие версии "а-ля М3".
П/п чтения файла на предмет прогресбара я поправлю. Точку входа для нее придется оставить как есть 0F834 - просто оттого, что таблицу переходов Монитора более уже некуда расширять. Не получится сделать более красиво или логично.
Нет. Мы порождаем уже полную не совместимость со стандартным Монитором-2 для Ориона-128. Дополнять можно, а порождать несовместимость нельзя. Поэтому эту точку входа можно разместить по адресу F846, и все остальное далее, если потребуется. Или заменить п/п чтения/записи на МЛ.
Кроме того. Я не анализировал твои п/п клавиатуры, поэтому вопрос. Они, что оставлены в неизменном виде? А зачем мы тогда делали порт PS/2? Аппаратная эмуляция порта F400 необходима только для тех программ, которые лезли напрямую в порт. Ну и пусть себе лезут. А для корректных программ можно п/п ввода с клавиатуры сделать значительно проще, обращаясь напрямую к PS/2. Это с экономит место.
И еще. Я нашел исходники своего М4, который должен был стандартизировать О-128 с О-ПРО и М3. Будет время - посижу по соображаю.
И совсем последнее. Чем можно просматривать тексты Ориона па ПС?
Очень полезный бантик.
Ладно, убедил! Пусть будет на всякий случай!
Предлагаю использовать порты по OUT в 8-битной адресации (дешифрируем младшую половину ША)....
Я тоже считаю разумным, сделать совместимо с Орион-ПРО.
Error404
18.06.2010, 22:40
Я сомневаюсь. Дело в том, что я нашел (в своих архивах) оригинальный исходник М3, который мне прислали (Ивинских В.Р.) ленинградци для стандартизации с Монитором для ПРО. Там этого безобразия нет. Думаю, когда автор перестал контролировать свой Монитор, вот и стали появляться всякие версии "а-ля М3".
Думаю, вопросам контроля уделяется излишне много внимания. "Автор контролирует", "Автор не контролирует" - это в те времена мало кого интересовало, а уж сейчас (когда все будет Open Source) и подавно.
Сейчас посмотрел, установка RаmTop действительно была в первом М3 от Ивинских (M31 который был для 8080). И ее не было в версиях M3 модификаций для Z80, т.е. во всех последующих (M32, М33, M34, М35, которых было не менее десятка версий разных лет выпуска начиная с 1991г. - комбинаторно для разных клавиатур и с разными загрузчиками ОС). Я пользовался (и пользуюсь) версиями для Z80, не замечал никаких артефактов от упрощения Get/Set RаmTop.
Нет. Мы порождаем уже полную не совместимость со стандартным Монитором-2 для Ориона-128. Дополнять можно, а порождать несовместимость нельзя. Поэтому эту точку входа можно разместить по адресу F846, и все остальное далее, если потребуется. Или заменить п/п чтения/записи на МЛ.
Кому хуже от того, что я воткнул по адресу F834 команду "JR <п\п>", если подпрограммы F830, F833, F836 по-прежнему как были доступны для внешнего кода, так и есть? В Мониторах M32 и выше эти 2 байта (F834/F835) были просто не использованы (0FFFFh).
Кроме того. Я не анализировал твои п/п клавиатуры, поэтому вопрос. Они, что оставлены в неизменном виде? А зачем мы тогда делали порт PS/2? Аппаратная эмуляция порта F400 необходима только для тех программ, которые лезли напрямую в порт. Ну и пусть себе лезут. А для корректных программ можно п/п ввода с клавиатуры сделать значительно проще, обращаясь напрямую к PS/2. Это с экономит место.
Клавиатуру я не трогал. Многое не трогал по принципу "работает - ну и хорошо, пропускаем". И не планирую переделывать, т.к. с точки зрения написания прикладного ПО (а этим я и пытаюсь начать заниматься, но все пока руки не доходят) внутренности драйвера клавиатуры совершенно безразличны. Более того, чем меньше придется переделывать "в никому не видных местах Ориона", тем я считаю - лучше, т.к. это даст использовать бесценный программистский ресурс на "полезный выхлоп".
Чем можно просматривать тексты Ориона па ПС?
Я использую встроенный просмотрщик\редактор в Far Manager (он позволяет подключать любые таблицы кодировок, в т.ч. и КОИ-8R) и преключаться между кодировками в любое время при просмотре/редактировании.
Собрал еще одну версию Орион-2010 :v2_wink2:
На базе платки, на которой я со спектрумом ковырялся. Заработало - и хорошо, можно снова по делу употребить :v2_blush:
512кб, один чип памяти, 5/10Мгц, выход на ТВ, "чистые" системные шины с процессора, ПЛИС на 144 ноги. Допаиваю детальки для RS-232...
Может быть стОит перевести дешифрацию РОМ-диска на I/O only? В мониторе поменять адреса... И освободить область F5xx вообще.
Может быть стОит перевести дешифрацию РОМ-диска на I/O only? В мониторе поменять адреса... И освободить область F5xx вообще.
Если исчезнет доступ по F5xx - появится еще одна несовместимость. Кроме того, адреса придется менять и в самой ОРДОС (еще и в других разных загрузчиках). Значит версии других авторов работать не будут. Мы, вроде бы, нашли решение - сделать выключение портов положенных на память и оставлять только порты по In/Out. Порты In/Out должны не выключать и быть доступными постоянно. Тогда, при желании, можно отключить порты на память, и если ОРДОС переделана под порты In/Out, то она все равно будет работать. Так сделать можно, а просто ликвидировать F5xx, как "класс", - недопустимо.
ORDOS работает с РОМдисками не через Монитор? Сторонних программ, работающих с РОМдиском я вообще не видел...
Error404
21.06.2010, 12:55
ORDOS работает с РОМдисками не через Монитор? Сторонних программ, работающих с РОМдиском я вообще не видел...
Сама работает. В Мониторе нет п\п работы с Ром-диском.
Зато с RAM-диском - через монитор :)
Сама работает. В Мониторе нет п\п работы с Ром-диском.
Не есть гуд. Я сделал то, о чем так долго просили большевики - порты в I/O.
18 - 1A они же F400 - F402
28 - 2A они же F500 - F502
48 - 4F они же F760 - F767.
Хотел порулить РОМдиском заменой адресов в прошивке ПЗУ на новые :(
познакомьтесь с новым портом F767 (#4F I/O) - порт sys_conf.
Два бита:
D0 - fullram_lock, "1"-блокировка fullram, отключаются порты проецируемые на память, также отключается ПЗУ и страницы памяти полностью доступны в диапазоне 0000H - FFFFH.
D1 - ram_bios, "1"-отключение ПЗУ, область памяти F800H - FFFFH проецируется на соответствующую область памяти нулевой страницы.
Значения порта не сбрасываются, только перезапись или выключение питания.
Я отказался от порта 3D в пользу 4F по причине "неусложнения" селектора адресов.
Ибо селектор окна 4х итак был сделан уже.
Не хотел лишние макроячейки тратить... :)
Сама работает. В Мониторе нет п\п работы с Ром-диском.
В Мониторе размещается загрузчик ORDOS.
---------- Post added at 17:45 ---------- Previous post was at 16:55 ----------
Я сделал то, о чем так долго просили большевики...
1. Пожалуйста, заноси всю эту информацию в тот документик, который ты мне высылал в свое время. Будешь высылать готовые платы и приложишь его. Будет очень к месту!
2. Хочу уточнить: порты I/O не отключаются ни при какой ситуации?
3. Может быть порт sys_conf скомпоновать немного по другому. Это даст большие возможности и универсальность.
D0 - ramport_lock, "1"- отключаются только порты проецируемые на память. Остаются только порты I/O. Можно адресное пространство РАМ-портов сделать доступным как ОЗУ. (У Сергея будет больше возможности с размещением буферов, при этом будет его любимый М3!)
D1 - ram_bios, "1"-отключение ПЗУ, область памяти F000H - FFFFH проецируется на соответствующую область памяти нулевой страницы и может переключаться вместе с переключением страниц. Если ramport_lock=0 (ram-порты не отключены), то только F800H - FFFFH. (Во! Теперь я могу загрузить свой М2!)
D2 - rоm_lock,"1" - защита области F800H - FFFFH от записи и блокирование переключения F000H - FFFFH при переключении страниц. Если ram_bios=0, то rоm_lock не актуален.
Хотел порулить РОМдиском заменой адресов в прошивке ПЗУ на новые
Замени адреса в загрузчике, в Мониторе и "порули" загрузкой!
1. Пожалуйста, заноси всю эту информацию в тот документик,
Постараюсь. сам уже периодически галопом ношусь по форуму, разыскивая свою же информацию :)
2. Хочу уточнить: порты I/O не отключаются ни при какой ситуации?
Верно, они есть всегда.
3. Может быть
Может быть и так, этот вопрос лучше продумать получше.
Только я не совсем понял что ты хотел сказать, покурю - может придёт просветление :)
Error404
21.06.2010, 19:16
D2 - rоm_lock,"1" - защита области F800H - FFFFH от записи и блокирование переключения F000H - FFFFH при переключении страниц. Если ram_bios=0, то rоm_lock не актуален.
Может быть, имеет смысл сделать бит D2 "однократнозаписываемым"? Т.е. чтобы программно в этот бит можно было бы записать только значение "1" (защита области F800H - FFFFH от записи). А "0" туда писалось бы при включении питания. Этим мы защитим область загружаемого Монитора от комбинации "сбросили 4F.D2 в 0 и пропилили память".
Работать будет как-то так: включили питание, включили ОЗУ в области 0F800-FFFFH, подменили ПЗУ, затем если бит D2 залочили (уст. в "1"), то до следующего выключения/включения питания сбросить этот бит уже невозможно и запись в это ОЗУ невозможна (запись всегда будет приводить к обращению к портам "над ОЗУ-ПЗУ").
Может быть, имеет смысл сделать бит D2 "однократнозаписываемым"?
Не думаю. Если я загружаю образ ПЗУ в отладочных целях, то вполне логично что мне понадобится чтобы я мог заблокировать запись в ПЗУ от случайного стирания, а также разблокировать его для внесения изменений.
---------- Post added at 20:33 ---------- Previous post was at 20:14 ----------
3. Может быть порт sys_conf скомпоновать немного по другому.
Так, описываю что я тут наваял :)
D0 - блокирует порты F400 - FB00, оставляя только 18....FB как I/O.
D1 - перенапрявляет чтение данных вместо ПЗУ альтеры на соотв. область ОЗУ. Какая страница ОЗУ находится в области чтения - определяется другими факторами.
D2 - блокирует переключение области памяти ТОР (F000-FFFF) на ненулевую страницу, блокирует запись данных в область ROMSEL (F800-FFFF).
Как дополнение, опишу работу сигнала fullram (FA(5)) - блокирует порты, проецируемые на память, отключает ПЗУ из линейки адресов, для записи/чтения доступен весь диапазон адресов ОЗУ. Страницы памяти переключаются портом F9, "непереключающейся" области памяти нет.
Прим. область памяти "под ПЗУ" всегда доступна для записи (кроме непосредственно блокировки записи по 4F(2)).
Теперь говорите мне, что я сделал не так :)
---------- Post added at 20:37 ---------- Previous post was at 20:33 ----------
Хе-хе... Злорадная загадка :)
представьте себе, что вы банально записываете данные в область F800 и выше, не предприняв специальных мер... Что мы получим?
Error404
21.06.2010, 21:01
Не думаю. Если я загружаю образ ПЗУ в отладочных целях, то вполне логично что мне понадобится чтобы я мог заблокировать запись в ПЗУ от случайного стирания, а также разблокировать его для внесения изменений.[COLOR="Silver"]
Отлаживать ПЗУ на некой "отладочной конфигурации" можно и без блокировки записи - тут вероятность того что "некто" несанкционированно переключит бит порта 4F невелика (своё ПО же запускаешь, его поведение в значительной степени ожидаемо). А вот при запуске чужого ПО (последующей эксплуатации отлаженного "теневого" ПЗУ) такая вероятность выноса незащищенного псевдо-ПЗУ (а оно не защищено: битик как ставится программно, так же программно и снимается) значительно отличается от нуля.
Кроме того, отлаживать все равно удобнее в эмуляторе, так что этот пример для реала вероятнее всего редковоспроизводим.
Хе-хе... Злорадная загадка :)
представьте себе, что вы банально записываете данные в область F800 и выше, не предприняв специальных мер... Что мы получим?
Запись в порты?
Запись в порты?
Угу. Сначала на экране возникнет суперпупермегадемо, затем отвалится источник кода и всё улетит в тар-тарары... Попутно повиснув на перемещенных окнах и прерывании, уводящем в бесконечную даль... Красота! :)
Отлаживать ПЗУ на некой
Ладно, уговорил, заблокирую. Как в остальном?
Error404, Конечно, я предполагаю, что тебя и так все достали уже, но не мог бы ты сделать хотя бы на базе TEST2SD простейшую сохранялку 60кб диска С на SD-карте, в "жестко зафиксированной" области до 256 мегабайта? Нажав "W" - просто сохраняем 120 секторов "под потолком" 256мб карточки, нажав "R" - читаем с карты в диск С те же 120 секторов. Ну пжалуйстааа!!! :)
Ладно, уговорил, заблокирую. Как в остальном?
Евгений! Ты все сделал правильно, как написал в 938 посте. Ничего не надо более переделывать! Я не согласен с предложением Сергея! Однократная запись вообще перечеркивает все оперативность. А если я собираюсь оперативно подгружать туда оверлеи? Мне что! Каждый раз компьютер выключать? Что за глупости! Сергей! Почему ты зациклился, что в области F800-FFFF может находится только Монитор, а не еще что-нибудь?
Чужое ПО надо запускать на стандартном ROM-Мониторе, или, как Сергей и предлагает, на его эмуляторе.
Так, как я предлагал разбитовку порта sys_conf (а ты ее и воплотил!), то при включении в этот порт записывается 00. Компьютер стартует стандартным Орионом (с ROM-Монитором). Испытывайте любое чужое ПО! А если "чужое ПО" манипулирует портом sys_conf, значит автор этого ПО знает, что он делает. А если это ПО делает не понятно что, то его следует выбросить и не морочить голову!
Мне только не понятно, зачем вообще теперь нужен fullram (FA(5). Получается он дублирует порт FB и sys_conf? Или я ошибаюсь?
P.S. Не понял с пертурбацией тем! В любом случае они дублируют друг-друга. Было бы логичней тему "ТВ" закрыть и "приколоть", а далее продолжать все в "VGA".
Я не согласен с предложением Сергея!
Я тоже попытался вякнуть, что это "неправильные пчёлы". Но по любому, вам с Сергеем, как писателям-продвигателям и решать этот вопрос. Как решите, так и сделаю.
зачем вообще теперь нужен fullram (FA(5). Получается он дублирует порт FB и sys_conf?
Он действует похоже. Я потому и упомянул его. Но софта, использующего 4F еще нет вообще, а вот использующего fullram - много. Удалять его нельзя.
P.S. Не понял с пертурбацией тем! В любом случае они дублируют друг-друга. Было бы логичней тему "ТВ" закрыть и "приколоть", а далее продолжать все в "VGA".
Можно было поступить и так. Но я просто переименовал тему, раз основное обсуждение по новому Ориону идет именно здесь. Оставим эту тему как есть,"архивом идей", а в "VGA" будем обсуждать уже документацию, сборку и наладку машинки.
П.С. Как бы заставить TASM$.BRU работать... При проектировании машинки он до какого-то этапа работает как трактор, а затем перестает. Висит. Между тем, другого ассемблера под ОРДОС и Z80 я не знаю :(
Error404
22.06.2010, 17:54
Евгений! Ты все сделал правильно, как написал в 938 посте. Ничего не надо более переделывать! Я не согласен с предложением Сергея! Однократная запись вообще перечеркивает все оперативность. А если я собираюсь оперативно подгружать туда оверлеи? Мне что! Каждый раз компьютер выключать? Что за глупости! Сергей! Почему ты зациклился, что в области F800-FFFF может находится только Монитор, а не еще что-нибудь?
Чужое ПО надо запускать на стандартном ROM-Мониторе, или, как Сергей и предлагает, на его эмуляторе.
Так, как я предлагал разбитовку порта sys_conf (а ты ее и воплотил!), то при включении в этот порт записывается 00. Компьютер стартует стандартным Орионом (с ROM-Монитором). Испытывайте любое чужое ПО! А если "чужое ПО" манипулирует портом sys_conf, значит автор этого ПО знает, что он делает. А если это ПО делает не понятно что, то его следует выбросить и не морочить голову!
Я не настаиваю, я вообще этим режимом пользоваться не планирую. Просто написал, что видится мне логичным для варианта с загружаемым псевдоПЗУ. Что бы оно было именно как ПЗУ. Не нужна защита этой области от крэша - да пожалуйста, как хотите. У меня все равно там будет обычное readonly ПЗУ из тела ПЛИС.
Мне только не понятно, зачем вообще теперь нужен fullram (FA(5). Получается он дублирует порт FB и sys_conf? Или я ошибаюсь?
В некоторой степени действительно получается дублирование.
Это нужно для совместимости со старым ПО, главным образом игрушками от ZX (жалко терять это единственное на Орионе действительно высококласное ПО, не считая CP/M-овского, написанное профессиональными забугорными программистами)
---------- Post added at 17:54 ---------- Previous post was at 17:52 ----------
Error404, Конечно, я предполагаю, что тебя и так все достали уже, но не мог бы ты сделать хотя бы на базе TEST2SD простейшую сохранялку 60кб диска С на SD-карте, в "жестко зафиксированной" области до 256 мегабайта? Нажав "W" - просто сохраняем 120 секторов "под потолком" 256мб карточки, нажав "R" - читаем с карты в диск С те же 120 секторов. Ну пжалуйстааа!!! :)
Хорошо, сделаем (не знаю только когда - я опять в командировке).
Но это будет небезопасное (в силу простоты) решение. :) Теоретически, такой утилитой можно что-нить грохнуть на флешке (перезаписать поверх каких-то данных)
П.С. Как бы заставить TASM$.BRU работать...
заставил. Меняем 28Н байт (48Н) на 41Н. всё работает, асм видит 8 страниц памяти.
Error404
23.06.2010, 23:15
заставил. Меняем 28Н байт (48Н) на 41Н. всё работает, асм видит 8 страниц памяти.
Выкладывай. :)
А во вложении поправленный M3.7 c загрузкой с RS-232. Поправлена п\п чтения по XMODEM на предмет прогрессбара (прогрессбар отключается при A=0).
Считаю, с мониторами на этом можно временно закончить, на первое время для достаточно комфортного старта с новой платкой Орион2010 есть все режимы. Остальные концептуальные решения ждем в М4.
заставил...
Думаю, было бы правильно, если бы первая прошивка РОМ-диска содержала необходимый инструментарий для программеров под ОРДОС. Точно так же и на SD-флешке - то же инструментарий для программиста, но под СРМ. Что касается СРМ, то, думаю, варианты прикинет Сергей!
Думаю, было бы правильно, если бы первая прошивка РОМ-диска содержала необходимый инструментарий для программеров под ОРДОС.
У каждого своя правда. Но предложение в целом верное :)
Вот мой РОМдиск с инструментами (М256, Васик Z-80, ТАСМ, дизасм, PENX, утилитки загрузки/выгрузки по RS-232 и прочее), две страницы с игрушками (для тестирования железа).
Вот мой РОМдиск с инструментами... и... две страницы с игрушками (для тестирования железа).
Меня тоже устроил бы этот набор инструментов (на первое время), а "страницы с игрушками" нужны такие, чтобы тестировать М4. Надеюсь, Сергей поможет.
P.S. Пока не могу воспользоваться твоим вложением!!!!!
P.S. Пока не могу воспользоваться твоим вложением!!!!!
Странно. я скачал себе на Рабочий стол и открыл в эмуляторе. Без проблем.
... и открыл в эмуляторе. Без проблем.
Да тоже пробовал! Но понял, что только на реальном железе можна работать без нервов.
Не понятно с симулятором:
1. Почему нет русскоязычного интерфейса (автор - иностранец?), при этом нет и руководства пользователя? Приходится тыркаться методом проб.
2. Убивает, что вводимые символы не соответствуют надписям на клавишах ПС, а подразумевают надписи на клаве Ориона. Неужели так трудно ввести в эмуляторе режим перекодировки?
3. Сколько не мучился, так и не понял: как текстовый файл (в данном случае - ZXFLP.TXT, который написан Перой Путником) запихнуть на диск В?
4. Не нашел, где "успокоить" указатель "Командера". Приходится делать очень короткие нажатия на клавиши курсора.
Таких вопросов можно еще с десяток привести. Поэтому жду железо...
P.S. Что-то не слышно LexaKK! В отпуске что-ли?
1. Почему нет русскоязычного интерфейса (автор - иностранец?), при этом нет и руководства пользователя? Приходится тыркаться методом проб.
Программа интернациональна :) Я комментарии в тестах исходников тоже не по-русски писал.
2. Убивает, что вводимые символы не соответствуют надписям на клавишах ПС, а подразумевают надписи на клаве Ориона. Неужели так трудно ввести в эмуляторе режим перекодировки?
В Орион-2010 точно так же. Пока, надеюсь...
3. Сколько не мучился, так и не понял: как текстовый файл (в данном случае - ZXFLP.TXT, который написан Перой Путником) запихнуть на диск В?
Кнопочка с "папкой"
4. Не нашел, где "успокоить" указатель "Командера". Приходится делать очень короткие нажатия на клавиши курсора.
Кнопка с "молотком". Можно выбрать скорость процессора от 2.5Мгц до 20, файлы Монитора и РОМдиска и прочее.
Кстати, в VC кнопочное управление воистину дурацкое. Как пример нормального ввода - тот же Бейсик. А в VC приходится двигать курсор короткими тычками, ибо программисты там отдохнули.
---------- Post added at 18:57 ---------- Previous post was at 18:32 ----------
Сергей, работа с часами как организована? В смысле, есть кусочек кода чтения/записи 512ВИ1? Глюки странные...
Error404
25.06.2010, 21:37
Не понятно с симулятором:
1. Почему нет русскоязычного интерфейса (автор - иностранец?), при этом нет и руководства пользователя? Приходится тыркаться методом проб.
Автор - IT-специалист. Вообще не понимаю, как можно существовать в IT не зная "собачьей мовы". Я за год прочитываю литературы на английском высотой выше своего роста (если бы все эти книжки собрать и положить одна на одну).
Можно русифицировать ресурсы эмулятора (хотя там только самые общеупотребительные слова), только нафига на это тратить время. Программа распространяется AS IS (это записано в read-me, перевожу - "что выросло, то и выросло"). Я когда еще писал:
http://zx.pk.ru/showpost.php?p=224994&postcount=30
2. Убивает, что вводимые символы не соответствуют надписям на клавишах ПС, а подразумевают надписи на клаве Ориона. Неужели так трудно ввести в эмуляторе режим перекодировки?
В Орион-2010 точно так же. Пока, надеюсь...
Сложно. :) Если вы, pvlad, еще не заметили, некоторые кнопки на клавиатуре РK/MC на разных регистрах только частично соответствуют тому, что подписано на кнопках клавиатуре PC (т.е. если верхний регистр или латинские на этих кнопках совпадают, то нижний регистр или русские на этих же кнопках - не совпадают). Как не раскидывай раскладку, 100% совпадения не получается никогда. И корректировать это программно или в ПЛИС - ИМХО онанизм.
Кнопочка с "папкой"
Кнопка с "молотком". Можно выбрать скорость процессора от 2.5Мгц до 20, файлы Монитора и РОМдиска и прочее.
Еще на закладке "клавиатура" можно установить принудительную задержку отрабатывания нажатий клавиатуры (чтобы работать на высоких частотах CPU).
Сергей, работа с часами как организована? В смысле, есть кусочек кода чтения/записи 512ВИ1? Глюки странные...
Во вложении исходники драйвера CP/M. В нем выполни поиск по подстроке "ADDRVI". К сожалению, других примеров у меня не сохранилось. Комментарии в файлах на русском, но в кодировке KOI-8r.
PS. Глупый вопрос задам: 512ВИ1 выбирается правильно? И по адресу F760 и по F761 (какой-то из портов это регистр адреса, какой-то - данных, не помню точно какой)?
Глупый вопрос задам: 512ВИ1 выбирается правильно? И по адресу F760 и по F761
Вопрос интересный :)
Булево говоря делаю так:
as<=(a0='0' & csf76x='1')
ds<=(a0='1' & csf76x='1')
r/w<=wr_n
что соответствует схеме.
Спасибо за драйвера, сверяю работу.
Error404
25.06.2010, 23:46
Вопрос интересный :)
Булево говоря делаю так:
as<=(a0='0' & csf76x='1')
ds<=(a0='1' & csf76x='1')
r/w<=wr_n
что соответствует схеме.
Спасибо за драйвера, сверяю работу.
Вроде все так. А сигнал csf76x в каком диапазоне адресов активен? Активный уровень - "1"? Что подаешь на /CE?
Программа интернациональна :) Я комментарии в тестах исходников тоже не по-русски писал.
Боюсь, кроме русскоязычных, она больше никому не нужна. А на каком языке писать комментарии - дело хозяйское!
Кнопочка с "папкой"
Это я и сам понял! А как же конвертировать этот файл в "BRU"? Ручками, или это секрет "IT-специалистов"?
В Орион-2010 точно так же. Пока, надеюсь...
А я сожалею, что в Орионе-2010 остается такая пародия на клавиатуру. Тогда уж надо сделать возможным подключение родной клавиатуры!
Я уже в который раз спрашиваю: коллеги, вы для кого делаете свой проект? Для себя двоих любимых IT-специалистов, или для широкой публики? Тогда, что, всем остальным (то, что у вас с Сергеем рука набита до автоматизма к этому извращению - я не сомневаюсь!) клеить бумашки на клавиши ПС, чтобы как-то сообразить где какой символ, и тоже привыкать к этому извращению?
Автор - IT-специалист. Вообще не понимаю, как можно существовать в IT не зная "собачьей мовы".)?
Печально, что IT-специалист кроме "собачьей мовы" к родному языку (в этой конкретной ситуации)относится столь снисходительно. Ну, хотя бы из гордости за язык, на котором говорят его отец и мать... и дети тоже, которые останутся после него.
Я за год прочитываю литературы на английском высотой выше своего роста (если бы все эти книжки собрать и положить одна на одну).".)?
Снимаю шляпу! Это заслуживает уважения. У Вас какой рост?
Можно руссифицировать ресурсы эмулятора (хотя там только самые общеупотребительные слова), только нафига на это тратить время.
Да можно и не руссифицировать, если есть хотя бы описание на "собачьей мове" (только вряд-ли оно им нужно!)! Но, Майкрософт, к примеру, не ленится тратить время на наш язык! А наши "IT-специалисты" на тяп-ляп сварганят что-нибудь (я не отрицаю талант и смекалку!!!) без всяких описаний - результат: "зачирикал" полуфабрикат, ну и все! Интерес пропал! Получается довести до ума свое детище - значит онанизмом заниматься? Чисто русский подход! Даже национальность можно не спрашивать.
Я когда еще писал:http://zx.pk.ru/showpost.php?p=224994&postcount=30
Я не поленился сходить. Там есть такие слова:"Подумаю на этот счет (описание), когда буду в очередной раз ковырять эмулятор - подумываю заэмулировать SD-карточку (чтобы затем ковырять CPM на предмет SD). "
Карточка "заэмулирована", а описание все еще обдумывается?
Если вы, pvlad, еще не заметили... Как не раскидывай раскладку, 100% совпадения не получается никогда. И корректировать это программно или в ПЛИС - ИМХО онанизм.
И что! Вы мне будете рассказывать (извините, тоже программисту) сказки, как сложно через таблицы сделать перекодировку клавиш в эмуляторе? И это заявляет IT-специалист такого уровня? Батенька! Мне просто не хочется ехидничать на счет Вашего "онанизма"!
... закладке "клавиатура" можно установить принудительную задержку отрабатывания нажатий клавиатуры (чтобы работать на высоких частотах CPU).
Совершенно верно, на ввод символов она действует, а на клавиши курсора - очень слабо. И VC тут (to ewgeny7) ни причем - на оригинальном Орионе все работает нормально.
Это я и сам понял! А как же конвертировать этот файл в "BRU"? Ручками, или это секрет "IT-специалистов"?
Ручками, добавляем в начало файла 16 байт...
А я сожалею, что в Орионе-2010 остается такая пародия на клавиатуру.
Возможность расширения раскладки есть. Только мне убивать пару дней на вторую раскладку пока некогда было. Я потому и написал "пока, надеюсь...". Стадия полировки и доводки еще будет впереди.
Тогда уж надо сделать возможным подключение родной клавиатуры!
альтеру 208 ног ставить?
Ну, хотя бы из гордости за язык, на котором говорят его отец и мать...
Есть достаточно интересные проекты 8-биток, написанные на "родных" языках (польский, чешский и т.д.). И нафига оно мне надо, если я там нифига не понимаю??? В "корзину", однозначно.
на оригинальном Орионе все работает нормально.
Не спорю. Когда я понижал частоту процессора до 2 мегагерц, VC работал нормально. С повышением частоты работа становится всё хуже. На частоте 10Мгц работа уже почти невозможна. Впрочем, для правильного обслуживания клавиатуры требуется системный таймер на основе прерывания 50 герц, коего в момент написания VC еще небыло.
---------- Post added at 12:38 ---------- Previous post was at 12:31 ----------
А сигнал csf76x в каком диапазоне адресов активен?
Сигнал действует в диапазоне F760..F761. Более старшие адреса заняты SD и USART, коие работают прекрасно.
Насчет селектора адресов я спокоен, все F76х выбираются в одном блоке полностью аналогично.
Активный уровень - "1"?
Нет, сигнал инверсный. Единицу в формуле я написал только для понимания, реально выбор по нулю.
Что подаешь на /CE?
Банальная "земля".
Ручками, добавляем в начало файла 16 байт...
Выше уже говорил: это и есть типичный русский подход: изобрести уникальный реактор, но уран загружается совковой лопатой!
Возможность расширения раскладки есть.
Раскладка на PS/2 должна быть единая - QWERTY+ЙЦУКЕН. Другую (МТК) уже никто и не знает, ну разве что мы в троем. Другое дело, переключать перекодировочные таблицы (под РК и МС), при загрузке различных версий Мониторов, можно битиком в конфигурационном порту. В то же время Монитор-2010 вообще не должен использовать порт F4xx. Для "правильных" программ это не критично, а для остальных программ можно подгрузить свой Монитор.
альтеру 208 ног ставить?
Думаю будет достаточно того, что сказал в предыдущем абзаце. Кто же сейчас будет лепить кнопочки на фанерку!
Есть достаточно интересные проекты 8-биток, написанные на "родных" языках (польский, чешский и т.д.). И нафига оно мне надо, если я там нифига не понимаю??? В "корзину", однозначно.
Мне пофиг, что поляк или чех не смогут прочитать мой комментарий к программе! Я пишу не для них. А если мне надо прочитать их комментарий, я беру словарик и разбираюсь. И это правильно. Если ваш труд интересный и достойный - разберутся на любом языке, тем более комментарий играет вторичную роль!
... для правильного обслуживания клавиатуры требуется системный таймер на основе прерывания 50 герц, коего в момент написания VC еще небыло.
Совершенно согласен! Поэтому штатный Монитор-2010 необходимо писать заново, учитывая новые реалии. А все былые "стандарты" необходимо подгружать по мере необходимости.
Поэтому штатный Монитор-2010 необходимо писать заново, учитывая новые реалии.
Давайте начнем с малого :)
Когда я только начинал ковыряться с Орионом, для меня было важно собрать машинку черно/белую, с 64 кб памяти и Монитором-1. Во что это выросло со временем - рассказывать не буду :)
Пускай оно будет пока с раскладкой клавиатуры ЯВЕРТЫ, начать жить это новому Ориону не мешает. Впереди долгие осенние вечера, когда можно спокойно добавлять/переделывать функционал.
Только что забрал печатные платы с почты. Понедельник-среда будут заняты разъездами по чип-магазинам. Буду собирать существующий вариант Ориона, с единственной поправкой - 60гц видеовыход. После этого платы будут отправлены адресатам.
С 19 июля я уезжаю в Лазаревское, и продолжать изыскания буду после 2 августа.
У вас будет время собрать себе LPT-кабель для обновления прошивок ПЛИС и освоить этот процесс вообще :)
Мне пофиг, что поляк или чех не смогут прочитать мой комментарий к программе! Я пишу не для них. А если мне надо прочитать их комментарий, я беру словарик и разбираюсь. И это правильно. Если ваш труд интересный и достойный - разберутся на любом языке, тем более комментарий играет вторичную роль!
Я, собственно, имел ввиду не только комментарии, но и интерфейс. Интерфейс ведь первичен? ;)
Выше уже говорил: это и есть типичный русский подход: изобрести уникальный реактор, но уран загружается совковой лопатой!
У нас пока один-единственный программист. Он и так уже рвет себе зад "на британский флаг", но успеть сделать всё - не сможет. Давайте нам еще парочку, и будем соответствовать евронормам.
Давайте начнем с малого...
Я такого же мнения! Поэтому:
1. С конвертацией и BRU-файлами разобрался. За 15 лет много чего забылось...
2. Где найти стабильно работающий WinHEX? Я скачал 3-4 версии и все они неожиданно "падают" при сохранении файла!
3. Где найти раскладку Орионовской (РК или МС) клавиатуры на ПС-клаве? Хочу пописать на ассемблере, но слету методом тыка освоить OrionZEm не удается. Поэтому, часто возникают моменты (а деваться некуда!), когда действительно хочется автору подрать зад "на британский флаг" из-за отсутствия хоть какого-то описания!
4. Сергей советовал текстовые файлы Ориона просматривать (и конвертировать) с помощью FAR. Но я что-то не нашел там более двух кодировок. Может у тебя есть FAR с большим набором плагинов?
5. Как в эмуляторе отлаживать оттранслированную программу? Как перехватить ее начало исполнения? В свое время я предлагал Сергею устроить ликбез - он отмолчался!
2. Где найти стабильно работающий WinHEX? Я скачал 3-4 версии и все они неожиданно "падают" при сохранении файла!
http://narod.ru/disk/22238390000/WinHex153SR_1.rar.html
Глюков не замечал, лечение на дому :) Переделывал кучу файлов.
---------- Post added at 18:45 ---------- Previous post was at 18:43 ----------
3. Где найти раскладку Орионовской (РК или МС) клавиатуры на ПС-клаве?
Метод тыка прост до безобразия.
4. Сергей советовал текстовые файлы Ориона просматривать (и конвертировать) с помощью FAR.
Я обхожусь обычным Вордом для чтения. Насчет Фара не знаю, не люблю я это.
---------- Post added at 18:50 ---------- Previous post was at 18:45 ----------
Вопросы к Алексею:
1. Байтбластер на плате. Где резисторы, подтягивающие на Uпит входные сигналы? Какова "распиновка" разъема LPT?
2. Резисторная сборка RA4. должна содержать три резистора по 10к и один на 1к...
3. Номиналы деталей в блоке индикации SD_LED.
4. Твои почтовые координаты.
Платы - красавцы, конечно :)
Припаиваю Циклоны и конфПЗУ.
Error404
27.06.2010, 00:10
А как же конвертировать этот файл в "BRU"? Ручками, или это секрет "IT-специалистов"?
Как-то странно это слышать от человека, придумавшего формат BRU. :)
Как бы там ни было, в архиве вот этого эмулятора (http://www.nedopc.org/nedopc/orion/emul.shtml) есть утилита BIN2BRU.EXE - преобразователь из BIN (т.е. любого обычного файла Винды) в BRU. Между прочим, я нашел это при помощи google - инструмента "IT-специалистов". ;)
А я сожалею, что в Орионе-2010 остается такая пародия на клавиатуру. Тогда уж надо сделать возможным подключение родной клавиатуры!
Я уже в который раз спрашиваю: коллеги, вы для кого делаете свой проект? Для себя двоих любимых IT-специалистов, или для широкой публики? Тогда, что, всем остальным (то, что у вас с Сергеем рука набита до автоматизма к этому извращению - я не сомневаюсь!) клеить бумашки на клавиши ПС, чтобы как-то сообразить где какой символ, и тоже привыкать к этому извращению?
Делаю для себя. Поскольку я вполне среднестатистический потребитель, то получается вполне годная программа. Что подтверждается обратной связью на страничке эмулятора.
Родных клавиатур в природе уже не найти. Думаю, мало кто из "широкой публики" сейчас способен сам собрать клавиатуру PK на кнопках от телефонных звонков, как в прекрасные 90-е. Так или иначе, придется переходить на то, что есть в магазинах.
Снимаю шляпу! Это заслуживает уважения. У Вас какой рост?
Среднего роста. :)
Печально, что IT-специалист кроме "собачьей мовы" к родному языку (в этой конкретной ситуации)относится столь снисходительно. Ну, хотя бы из гордости за язык, на котором говорят его отец и мать... и дети тоже, которые останутся после него.
Дело не в гордости и родственниках. Вообще, странно, "просрав все полимеры" (http://lurkmore.ru/%D0%9F%D1%80%D0%BE%D1%81%D1%80%D0%B0%D0%BB%D0%B8_% D0%B2%D1%81%D0%B5_%D0%BF%D0%BE%D0%BB%D0%B8%D0%BC%D 0%B5%D1%80%D1%8B), вспоминать о гордости (это было лирическое отступление о состоянии отечественной промышленности вообще и IT в частности).
Просто я действительно не представляю (точнее представляю, получается весьма смешно) как надо переводить четкие интернациональные термины на русский. Ну вот, к примеру, отладчик: как переводить знакомые любому программирующему человеку фразы "Step IN", "Step Over"? Чтобы было лаконично, помещалось на кнопках? "Шаг внутрь", "Шаг поверх"? Тьфу, позориться только. Будет время, при следующей доработке сделаю расположение ресурсов во внешнем текстовом файле - тогда каждый сможет дать волю фантазии и перевести по своему желанию. Но пока остается как есть.
Я не поленился сходить. Там есть такие слова:"Подумаю на этот счет (описание), когда буду в очередной раз ковырять эмулятор - подумываю заэмулировать SD-карточку (чтобы затем ковырять CPM на предмет SD). "
Карточка "заэмулирована", а описание все еще обдумывается?
Я думал на эту тему и пришел к выводу, что не стану писать отдельное описание, по крайней мере пока. Дело в том, что по косвенным я вижу, что даже read-me (которое уже есть) никто не читает. Так к чему мне тратить время? На нормальное описание надо несколько человеко дней (т.е. минимум месяц по часику-два вечерами). При этом большую часть придется писать "всё обо всём", что мало кому надо, а что надо конкретному человеку - не известно. Поэтому, некоторое время назад я предложил формат "вопрос-ответ" тут на форуме. И что же оказалось? А оказалось, что никому кроме Евгения ничего не нужно. Вопросов нет. А у Евгения не было проблем ни с английским, ни с эмулятором, поэтому нет и соответствующих вопросов/ответов.
И что! Вы мне будете рассказывать (извините, тоже программисту) сказки, как сложно через таблицы сделать перекодировку клавиш в эмуляторе? И это заявляет IT-специалист такого уровня? Батенька! Мне просто не хочется ехидничать на счет Вашего "онанизма"!
Чесслово, меня не оставляет ощущение, что меня тут просто тонко троллят. :) Причем тут вообще таблицы? У меня и без того в модуле клавиатуры (если посмотреть в исходник, исходники на сайте есть) перекодируется таблично (те самые таблицы PC->PK, PC->MC). И добавить таблицу не проблема. Проблема в том, повторяю, что различие в разных регистрах одних и тех же кнопок. А установить какой регистр используется в текущий момент времени в Орионе нельзя. Эмулятор, чтобы определиться с таблицей, может получать данные только от железки. Единственный железный регистр хоть как-то отображающий раскладки - это бит светодиода рус/лат, который в большинстве драйверов не устанавливается. Ну и как, помогут в таком случае таблицы? Решения есть, но они настолько не пропроциональны по трудозатратам (а в ПЛИС, думаю, вообще не реализуемы) в сравнении с тем, чтобы запомнить особенности фунциклирования трех кнопок (в эмуляторе, или реале на ПЛИС), что говорить тут просто не о чем. Проверено на себе: запоминается нормально.
1. Байтбластер на плате. Где резисторы, подтягивающие на Uпит входные сигналы? Какова "распиновка" разъема LPT?Косячок-с. Забыл. Лечится припаиванием резисторной сборки к pin-to-pin к RA5. Распиновку сейчас накидаю.
Резисторная сборка RA4. должна содержать три резистора по 10к и один на 1к...Думаешь, не будет работать? Лечится припаиванием резистора 1.2k между ногами 1-2 разъема X7 (JTAG)
Номиналы деталей в блоке индикации SD_LED.
VT3 - любой PNP в корпусе SOT23. Например из серии BC856 - BC860
R16, R17 - 10k
R12, R38 - 1k
4. Твои почтовые координаты.
Я ж тебе в личку скидывал. А ты хочешь мне альтеры отправить?
Дополнительно:
– IC4 - MAX3232 в корпусе SO16. Простая MAX232 работать не будет.
– Если будешь использовать 5В источник, IC13 можно не впаивать, а J1 замкнуть
– IC11 можно использовать и фиксированную, и регулируемую. Если ставишь фиксированную - J2 замкнуть.
– ИМХО, зря началь паять с альтеры. Думаю, начинать надо с питания
– Как паяются корпуса 0603? Нормально? Паяешь паяльником или термовоздушкой?
– Создай файл TODO, куда будем записывать все косячки
– ИМХО, зря началь паять с альтеры. Думаю, начинать надо с питания
Традиция, однако :) Цепи питания я уже проверил тестером.
– Как паяются корпуса 0603? Нормально? Паяешь паяльником или термовоздушкой?
Припаяются, куда они денутся. Только их сначала надо забрать с центра города.
Два резистора пришлось взять 0805 (на стабе 1.5в), мелких нет. Впихну. Резисторных сборок нет вообще в магазинах. Придется с ПЦ-матерей выдирать.
Паяю паяльником, фена нет.
– Если будешь использовать 5В источник, IC13 можно не впаивать, а J1 замкнуть
Да, разобрался, спасибо.
А ты хочешь мне альтеры отправить?
Да, вторник-среда могу отправить тебе комплект альтера+конфПЗУ+ОЗУ. Добраться до ЭФО пока не вышло, отправлю свой комплект. Мне не горит, скоро отпуск на Черном море :)
отправлю свой комплектА сам-то как?
Мне не горит, скоро отпуск на Черном мореХорошо тебе - море Черное увидишь :)
А сам-то как?
закажу/куплю как посвободней стану. Для личного употребления у меня есть Орион на макетке :)
---------- Post added at 13:14 ---------- Previous post was at 13:13 ----------
Хорошо тебе - море Черное увидишь
а то ты его не видишь :)
Как-то странно это слышать от человека, придумавшего формат BRU...
Как бы там ни было, в архиве вот этого эмулятора (http://www.nedopc.org/nedopc/orion/emul.shtml) есть утилита BIN2BRU.EXE - преобразователь из BIN (т.е. любого обычного файла Винды) в BRU.
Что же здесь странного, если этот человек не прикасался к этой области более 15 лет! И только Вы с Евгением реанимировали этого старого Могикана. А что касается ссылочки на утилиту - Вы ее сами проверяли?
Делаю для себя. Поскольку я вполне среднестатистический потребитель, то получается вполне годная программа.
Да нет! Вы не среднестатистический потребитель, а автор, не побоюсь заявить, лучшего на сегодняшний день эмулятора Ориона (не нужно стесняться!). Вы свою работу выложили публично, а значит ее будут обсуждать, критиковать, хвалить. Селяви! Плохо, что у Вас пропало желание (?) довести свою работу до той степени законченности, при которой она может жить самостоятельно, как это делают все авторы. Ваша программа становится стандартом де-факто для Ориона-2010, и это налагает, естественно, определенную ответственность на автора. Конечно, можно всех послать... и будете правы.
Дело не в гордости и родственниках...
Вы не правы. Гордость за свою страну должна начинаться с гордости за свою семью, детей и предков, а не со стыда за то, что "просрала" наша "элита".
Просто я действительно не представляю (точнее представляю, получается весьма смешно) как надо переводить четкие интернациональные термины на русский... Тьфу, позориться только...
Дело не в переводе (локализацию своих продуктов делает и Майкрософт, и не боится позориться), а в структурном построении интерфейса - позволяет он это делать или нет.
Вот пример. Уже несколько лет я пользуюсь системой разработки под MCS-51, автор которой англичанин Michael McCarrick ( http://www.acebus.com/win8051.htm). Простенькая, но очень удобная и с прекрасным описанием на "собачьей мове". Конечно, когда встречается серьезный затык - я подключаю Фитоновский "сундук", чтобы разрулить, а в остальном достаточно для текущей писанины. Я купил у него лицензию и предложил локализовать на русский язык. Что из этого получилось - см. внизу прицеп. Оказывается можно все локализовать, если грамотно построен интерфейс программы. И дело не в том, знаешь/не знаешь "собачью мову" (естественно, я тоже ее знаю!) - должно быть право выбора.
Я думал на эту тему и пришел к выводу, что не стану писать отдельное описание, по крайней мере пока...А оказалось, что никому кроме Евгения ничего не нужно. Вопросов нет...
Так никто же не просит писать монографию - хотя бы сделать так, как в приведенной Вами ссылке (http://www.nedopc.org/nedopc/orion/emul.shtml)! Я уже несколько топиков бомбардирую вопросами по Вашему эмулятору, а что в ответ: один отфутболил ("Метод тыка прост до безобразия!"), а второй молчит как партизан и обижается! Конечно, такое отношение, естественно, вызывает раздражение, но не меняет отношение к Вам, и Евгению.
Чесслово, меня не оставляет ощущение, что меня тут просто тонко троллят. Причем тут вообще таблицы?
Ну, не придумывайте, батенька! Я не буду приводить ссылки (в этом форуме), где Вы критикуете (и не в очень приятной форме) мои работы 15-20 (!) летней давности! Я тоже недовольно ворчал!
Но дело не в этом! Что касается клавиатуры. Мне не понятно (возможно я старый и тупой!), почему не может быть раскладки клавиатуры QWERTY+ЙЦУКЕН? Т.е., если в LAT я набираю A, S, D, то переключив в РУС, нажимая на те же клавиши не могу получить Ф, Ы, В? Это уже привычно, когда столько лет за ПС-клавиатурой. Но это простой пример - есть же клавиши, нажимая которые вообще не знаешь что получишь, при этом! Почему невозможно обнародовать соответствие клавиш, как это сделано в http://www.nedopc.org/nedopc/orion/emul.shtml, а надо методом тыка вычислять, что СТР - это Insert, и т.д.! Почему нельзя рассказать, как запустить отладчик для прикладной программы? Я об этом, в этой теме, спрашиваю уже третий раз! Это тайна? А Вы обижаетесь...
Error404
27.06.2010, 15:56
Что же здесь странного, если этот человек не прикасался к этой области более 15 лет! И только Вы с Евгением реанимировали этого старого Могикана. А что касается ссылочки на утилиту - Вы ее сами проверяли?
Да, проверил. Вроде корректно отрабатывает. Там надо в командной строке 2 параметра передать: имя обрабатываемого файла и смещение. В большинстве случаев смещение (второй параметр) равно 0.
Да нет! Вы не среднестатистический потребитель, а автор, не побоюсь заявить, лучшего на сегодняшний день эмулятора Ориона (не нужно стесняться!). Вы свою работу выложили публично, а значит ее будут обсуждать, критиковать, хвалить. Селяви! Плохо, что у Вас пропало желание (?) довести свою работу до той степени законченности, при которой она может жить самостоятельно, как это делают все авторы. Ваша программа становится стандартом де-факто для Ориона-2010, и это налагает, естественно, определенную ответственность на автора. Конечно, можно всех послать... и будете правы.
А дело было так. Тоже после N-летнего орионовского перерыва, мне попалась в руки статья про IDE-интерфейс, смысл которой был "IDE-это очень просто". Мне стало интересно попробовать IDE своими руками. Проще всего (не изучая дополнительных вещей типа PC-шин) это было сделать на Орионе. Реал был извлечен из сарая, но оказался неудобен для отладки, да и глючен (все же 10 с гаком лет в сарае), поэтому "из того что было под рукой" написался эмулятор с эмуляцией IDE. Отлаженные вещи запустил на реале. Результаты опубликовал на страничке. Т.е. не было основной целью именно эмулирование, это пришло в ходе работы с проектом IDE. Ну и прижилось.
Вы не правы. Гордость за свою страну должна начинаться с гордости за свою семью, детей и предков, а не со стыда за то, что "просрала" наша "элита".
Тут тема очень обширная, население форума с моей позицией в отношении нащих квазиэлит знакома по "флудильне". Я, опять же, не о предках отзывался, а о том, что находясь в положении догоняющего (причем в существенной мере и по собственной вине), приходится в обязательно порядке изучать язык "вероятного противника". Тем более, что в IT это уже фактически основной язык "де факто".
Дело не в переводе (локализацию своих продуктов делает и Майкрософт, и не боится позориться), а в структурном построении интерфейса - позволяет он это делать или нет.
...
И дело не в том, знаешь/не знаешь "собачью мову" (естественно, я тоже ее знаю!) - должно быть право выбора.
Интерфес доделаю, если это не окажется сложно. Локализации в своих программках я ранее не делал, знаю есть готовые компоненты для локализации, но я стараюсь избегать использования компонент, продпочитаю Pure Pascal и WinAPI.
Так никто же не просит писать монографию - хотя бы сделать так, как в приведенной Вами ссылке (http://www.nedopc.org/nedopc/orion/emul.shtml)! Я уже несколько топиков бомбардирую вопросами по Вашему эмулятору, а что в ответ: один отфутболил ("Метод тыка прост до безобразия!"), а второй молчит как партизан и обижается! Конечно, такое отношение, естественно, вызывает раздражение, но не меняет отношение к Вам, и Евгению.
Почти то же самое что по ссылке (кроме, может, картинок), у меня описано в файле _read_me.txt. Разве что соответствие кнопок ПС, СТР, УСТ и прочего РК-специфичного не описано (я сам его не знаю :) ), все эти кнопки где-то на клавишах "Insert", "Home", "PgUp", " PgDown", "Del", ""End" (а больше на клавиатуре PC им примоститься просто негде).
почему не может быть раскладки клавиатуры QWERTY+ЙЦУКЕН? Т.е., если в LAT я набираю A, S, D, то переключив в РУС, нажимая на те же клавиши не могу получить Ф, Ы, В? Это уже привычно, когда столько лет за ПС-клавиатурой. Но это простой пример - есть же клавиши, нажимая которые вообще не знаешь что получишь, при этом! Почему невозможно обнародовать соответствие клавиш, как это сделано в http://www.nedopc.org/nedopc/orion/emul.shtml, а надо методом тыка вычислять, что СТР - это Insert, и т.д.! Почему нельзя рассказать, как запустить отладчик для прикладной программы? Я об этом, в этой теме, спрашиваю уже третий раз! Это тайна? А Вы обижаетесь...
Кстати, то, что интересует именно расположение ПС, СТР, УСТ и подобных, Вы, кажется, раньше не упоминали, по крайней мере у меня в памяти не отложилось (уж искать не буду). Можно было просто задать этот вопрос в теме про "Вопросы и ответы", а не тут в виде "Фе, как некрасиво все устроено в клавиатуре" без пояснения деталей недовольства. И то, что имеется ввиду именно переключение "QWERTY-ЙЦУКЕН" тоже стало понятно только сейчас (я же не телепат). А я думал, что проблема в кнопках пунктуации (на PC знаки "*", ":", "круглые скобки" и что-то еще нарисованы в других сочетаниях, никак не совместимых с кнопками РК/МС). Их всего несколько, таких кнопок - проще запомнить что там где, чем выкручиваться при эмулировании.
С раскладками таблиц эмулятора (QWERTY-ЙЦУКЕН) повторюсь: эмулятор эмулирует только нажатие клавиш (сигналы на ножках BB55 в зависисмости от того что нажато на кнопках РС-клавиатуры). Эмулятор совершенно не в курсе за то, какой в это время регистр у орионовской программы-драйвера, которая из этих сигналов на ножках порта клавиатуры генерирует коды клавишь/символы для прочих орионовских программ. И соответственно в нужный момент (когда у орионовского драйвера сменился регистр), эмулятор подменить таблицы не может - не знает он про этот момент, нет железки в Орионе по которой этот момент можно надежно контролировать. Я могу сделать переключение QWERTY-ЙЦУКЕН в "эмуляторе кнопок" при вводе по нажатию какой-то выделенной спецкнопки, но тогда для каждой смены регистра нужно будет дважды делать переключение - сначала в Орионе (нажав кнопку переключения регистра или рус-lat, от драйвера к драйверу функционирование такой кнопки на Орионе неодинаково), а затем эту упомянутую спецкнопку для "эмулятора клавиатуры". У меня есть сомнения, что будет удобно каждый раз делать это дважды, да еще на разных кнопках (одна орионовская, одна эмуляторская). Но сделать можно. Кстати, через "спецкнопку" сделано переключение таблиц QWERTY-ЙЦУКЕН (http://zx.pk.ru/showpost.php?p=178897&postcount=9) и в адаптере PC-клавиатуры (http://zx.pk.ru/showthread.php?t=9294) от caro.
Почему у меня такой проблемы ранее не возникало: я все разрабатываю под Виндой (редактирование, ассемблирование). На эмуляторе только запускаю результат для проверки. Комменты тоже чаще всего пишу по-английски - это удобно прежде всего тем, что нет проблем с кодировками: прочитать одинаково можно как на Винде (cp1251), так и на Орионе с его KOI8(7).
Тут, кстати, подобные проблемы с Орион2010. Сигнала, однозначно говорящего что выбрана русская раскладка клавиатуры нет.
Можно "привязаться" к кнопке shift, но при переключении на русский по кнопке caps lock мы получим "неправильную" раскладку.
закажу/куплю как посвободней стану. Для личного употребления у меня есть Орион на макеткеНет-нет, я не могу. Мне нужно посоветоваться с шефом(с). Евгний, не стОит себя оставлять без запаса. Я пока закажу себе в Терре. А ты как вернешся - закажи и мне пару-тройку комплектов в ЭФО.
а то ты его не видишьА чего на него смотреть? (тыкая пальцем на радиолокационное изображение на мониторе)
закажи и мне пару-тройку комплектов в ЭФО
Тут есть такая затыка.
Тебе нужно ИМЕННО ЭТИ детали кучкой, или есть смысл чуть глянуть в недалекое (надеюсь) будущее и заказать уже ПЛИСы пожирней, на 144 ноги для внешней шины? А ты пока тихонечко подправишь PCB под новую альтеру, уберешь шинники... ;)
Тут, кстати, подобные проблемы с Орион2010. Сигнала, однозначно говорящего что выбрана русская раскладка клавиатуры нет. Можно "привязаться" к кнопке shift, но при переключении на русский по кнопке caps lock мы получим "неправильную" раскладку.
Ну, вот! Предвидя эту проблему, я еще весной наставал (когда мудрили с прерываниями!) на том, чтобы ввести прерывание для клавы. Никто даже не отреагировал.
Что имеем? В реальном Орионе клавиша Shift тоже не имеет фиксированного значения. Пока держишь нажатой - замкнута. Но в реальном Орионе ее можно держать нажатой параллельно с символьной клавишей, и это позволяет обойтись без всяких флагов, а просто проверить состояние вывода РВ5 порта F401 и принять решение о регистре. Это и пытается мне объяснить Сергей. Конечно с PS/2 так лихо не получится. Нужно делать прерывание по нажатию клавиши. Тогда, если была нажата клавиша Shift или что-то определяющее РУС/LAT, произойдет первое прерывание - будет поднят программный флаг. Не отпуская эту клавишу нажимаем символьную - снова прерывание и... дальше дело техники! Кроме того, наличие прерывания позволит сделать клавиатуру приоритетной, т.е. способной разрулить любую зависшую ситуацию.
Простите, при чем тут прерывание, если софт его не будет отрабатывать?
Error404
27.06.2010, 23:22
Все несколько сложнее. Обрабатывать Shift годится только для KOI7, где по SHIFT меняется рус-lat (и можно подменять таблицы QWERTY-ЙЦУКЕН в эмуляторе или ПЛИС). В драйверах KOI8 или Alt(cp866) в отличие от KOI7 кнопка SHIFT как в Ордос, так и в CP/M переключает CAPS - верхний/нижний регистр в пределах одной и той же таблицы: QWERTY или ЙЦУКЕН. Тут их подменять нельзя. И никак не получится аппаратно определить что за драйвер в текущий момент запущен у пользователя, и какая текущая раскладка (рус или лат).
Причем в CP/M и Ордос в разных драйверах для переключения алфавитов (рус-lat) применяются разные клавиши.
Т.е. в реальности, применим только один подход:
сделать переключение QWERTY-ЙЦУКЕН в "эмуляторе кнопок" при вводе по нажатию какой-то выделенной спецкнопки, но тогда для каждой смены регистра нужно будет дважды делать переключение - сначала в Орионе (нажав кнопку переключения регистра или рус-lat, от драйвера к драйверу функционирование такой кнопки на Орионе неодинаково), а затем эту упомянутую спецкнопку для "эмулятора клавиатуры". У меня есть сомнения, что будет удобно каждый раз делать это дважды, да еще на разных кнопках (одна орионовская, одна эмуляторская). Но сделать можно. Кстати, через "спецкнопку" сделано переключение таблиц QWERTY-ЙЦУКЕН (http://zx.pk.ru/showpost.php?p=178897&postcount=9) и в адаптере PC-клавиатуры (http://zx.pk.ru/showthread.php?t=9294) от caro.
Простите, при чем тут прерывание, если софт его не будет отрабатывать?
Конечно, старые Мониторы не переделать (да и не нужно), они так и останутся для совместимости с некорректными программами. А вот новый Монитор, который я думаю общими усилиями мы сделаем, должен будет уже работать на прерываниях клавиатуры. По другому эту проблему не решить. Иначе так и останутся всевозможные суррогаты раскладок.
to Error404: Сергей, что-то совсем не въеду. Я понимаю, что есть проблемы с PS/2+старые Мониторы на реальном железе. Тут никто не спорит. И нужно будет делать новый Монитор, который будет PS/2 контролировать через прерывания. Но неужели в эмуляторе, где чисто программная среда, не возможно обойти эту проблему, контролируя всё и вся, что нажимается на клаве? Что мешает в эмуляторе сделать на экране программные индикаторы, показывающие что твориться с клавиатурой?
Error404
28.06.2010, 13:08
Конечно, старые Мониторы не переделать (да и не нужно), они так и останутся для совместимости с некорректными программами. А вот новый Монитор, который я думаю общими усилиями мы сделаем, должен будет уже работать на прерываниях клавиатуры. По другому эту проблему не решить. Иначе так и останутся всевозможные суррогаты раскладок.
to Error404: Сергей, что-то совсем не въеду. Я понимаю, что есть проблемы с PS/2+старые Мониторы на реальном железе. Тут никто не спорит. И нужно будет делать новый Монитор, который будет PS/2 контролировать через прерывания. Но неужели в эмуляторе, где чисто программная среда, не возможно обойти эту проблему, контролируя всё и вся, что нажимается на клаве? Что мешает в эмуляторе сделать на экране программные индикаторы, показывающие что твориться с клавиатурой?
В данном случае эмулятору нужно зацепиться за что-то в эмулируемой модели, чтобы в каждый момент времени понимать что от него ожидает ПО, запущенное в Орионе. Нужно знать, включил пользователь в Орионовском ПО русскую раскладку или латинскую - в этом случае на выводах ВВ55 клавиатуры эмулировать одну матрицу или другую (те самые таблицы переключать). В этом случае пользователю достаточно будет только в Орионовской программе переключать регистры. Но это переключение должно аппаратно отображаться. На данный момент я вижу только одну возможность отлавливать переключение пользователем в Орионовском ПО- это считывать светодиод "рус-лат". Но он не каждым драйвером клавиатуры корректно (в нужный момент) зажигается. Фактически, только Монитор зажигает "рус-лат" корректно. Также, если мне не изменяет память, М2 для клавиатуры MC7007 не обслуживает светодиод "рус-лат" (т.к. он просто исключен из схемы). В CP/M, например, драйвера тоже этого не делают (они зачастую отображают раскладку и регистры размером курсора) - их надо дорабатывать.
.
Или же второе решение с "двойным включением регистра и раскладки". В этом случае эмулятор никак не анализирует что там делается в ПО ориона на предмет рус-лат, но для подмены таблиц нужно дополнительно нажимать некую "неорионовскую" кнопку (которая срабатывает только для эмулятора/ компа на ПЛИС) и устанавливает некий внутренний "неорионовский" регистр, указывающий какая из таблиц клавиатуры активна (ЙЦУКЕН или QWERTY). В этом случае пользователь сначала в орионовской программе включает регистр (рус или лат), затем в эмуляторе "неорионовской" кнопкой активирует удобную для этого регистра раскладку. Это я и называю "Двойное включение".
В данном случае эмулятору нужно зацепиться за что-то в эмулируемой модели, чтобы в каждый момент времени понимать что от него ожидает ПО, запущенное в Орионе.
Нужно знать, включил пользователь в Орионовском ПО русскую раскладку или латинскую - в этом случае на выводах ВВ55 клавиатуры эмулировать одну матрицу или другую (те самые таблицы переключать).
Как я понимаю, эмулятор через PS/2 эмулирует всего-лишь "фанерку" с кнопками (а не программу ввода символов - она в Мониторе), которая подключается к мнимому ВВ55 (F4xx)? Это значит, что "фанерка" является ведущей - какие кнопки нажмут (пользователь), так ПО и запляшет! Тогда, спрашивается, зачем "фанерке" знать, что от нее ждут? Что нажмет пользователь, ту комбинацию взаимно замкнутых выводов "фанерка" и выдаст! Если мои рассуждения верны, то утверждение в первом предложении цитаты не верно.
Поэтому, что мешает иметь программные флаги в эмуляторе, регистрирующие была ли нажата Shift или РУС/ЛАТ (не важно какая клавиша на PS/2 определяет переключение регистра - можно сделать Alt+Shift!), в блоке эмуляции клавиатуры эмулятора? Ведь Монитору, драйверу КБ важно единственное: какие сигналы на выводах порта! А это определяет эмулятор по нажатию кнопок на PS/2.
Я не знаю программ, которые сами переключают регистры в Орионе и эмулятору надо бы было отслеживать эти переключения (по светодиоду, к примеру). Эти действия производит только пользователь, нажимая кнопки на "фанерке", тобышь эмуляторе.
Я не понимаю почему "нужно знать, включил пользователь в Орионовском ПО русскую раскладку или латинскую". Это должен помнить эмулятор: производил ли переключение регистра пользователь на PS/2 и в зависимости от этого (флаговая ячейка) при следующем вводе символа сделать взаимные соединения выводов порта согласно соответствующей таблицы.
Вполне возможно, что эмулятор построен по другому алгоритму и мои рассуждения не подходят. Хотя логика работы должна быть такая, потому что такая логика работы в железке.
Это должен помнить эмулятор: производил ли переключение регистра пользователь на PS/2 и в зависимости от этого (флаговая ячейка) при следующем вводе символа сделать взаимные соединения выводов порта согласно соответствующей таблицы.
Если нажать подряд верхний ряд буквенных клавиш, то в зависимости от состояния драйвера клавиатуры, а также раскладки клавиш в эмуляторе, мы получим одну из следующих строк:
1А) QWERTY
1Б) ЯВЕРТЫ
2А) JCUKEN
2Б) ЙЦУКЕН
Причём 1 или 2 определяется флагом в эмуляторе, а А или Б - флагом в драйвере. В идеале хотелось бы иметь только сочетания 1 А и 2 Б, но также как и pvlad не понимает, почему это сложно сделать, я в свою очередь не понимаю, как можно синхронизовать флаги в эмуляторе и в драйвере, чтобы были только сочетания 1 А и 2 Б.
...причём 1 или 2 определяется флагом в эмуляторе, а А или Б - флагом в драйвере.
В идеале хотелось бы иметь только сочетания 1 А и 2 Б, но также как и pvlad не понимает, почему это сложно сделать, я в свою очередь не понимаю, как можно синхронизовать флаги в эмуляторе и в драйвере, чтобы были только сочетания 1 А и 2 Б.
Мне тоже хочется иметь 1А и 2Б! Более того, ТОЛЬКО! Потому что остальное не имеет смысла на PS/2-клавиатуре. Все остальное - онанизм, как выражался Сергей!
Так вот, флаг в драйвере (Монитора, к примеру) появляется Святым Духом? Разве этот флаг появляется не после манипуляций на клавиатуре (читай: эмулятора!)? Тогда что мешает его также запоминать параллельно в флаговой ячейке эмулятора и на основании этой информации принимать решение о кодовой таблице? Этот флаг в драйвере сам по себе не изменяется, а только с клавиатуры при очередном переключении. Тогда что не понял pvlad?
Тогда что мешает его также запоминать параллельно в флаговой ячейке эмулятора и на основании этой информации принимать решение о кодовой таблице?
Допустим мы имеем строго определённое сочетание клавиш для переключения РУС/ЛАТ и эмулятор запоминает нажатие на эти клавиши. А где гарантия, что в момент нажатия на эти клавиши в эмулируемом компьютере выполнялся драйвер клавиатуры и он аналогично обработал это нажатие? То есть, что оба флага переключились синхронно? В какой-то мере это могло было бы быть решено введением прерываний по нажатию/отпусканию клавиш, но и прерывания могут оказаться запрещёнными. В результате, всё равно потребуется "ручное" переключение раскладки в эмуляторе через пользовательский интерфейс, чтобы устранить несинхронность флагов.
Error404
28.06.2010, 18:25
Как я понимаю, эмулятор через PS/2 эмулирует всего-лишь "фанерку" с кнопками (а не программу ввода символов - она в Мониторе), которая подключается к мнимому ВВ55 (F4xx)? Это значит, что "фанерка" является ведущей - какие кнопки нажмут (пользователь), так ПО и запляшет! Тогда, спрашивается, зачем "фанерке" знать, что от нее ждут? Что нажмет пользователь, ту комбинацию взаимно замкнутых выводов "фанерка" и выдаст! Если мои рассуждения верны, то утверждение в первом предложении цитаты не верно.
Поэтому, что мешает иметь программные флаги в эмуляторе, регистрирующие была ли нажата Shift или РУС/ЛАТ (не важно какая клавиша на PS/2 определяет переключение регистра - можно сделать Alt+Shift!), в блоке эмуляции клавиатуры эмулятора? Ведь Монитору, драйверу КБ важно единственное: какие сигналы на выводах порта! А это определяет эмулятор по нажатию кнопок на PS/2.
Я не знаю программ, которые сами переключают регистры в Орионе и эмулятору надо бы было отслеживать эти переключения (по светодиоду, к примеру). Эти действия производит только пользователь, нажимая кнопки на "фанерке", тобышь эмуляторе.
Я не понимаю почему "нужно знать, включил пользователь в Орионовском ПО русскую раскладку или латинскую". Это должен помнить эмулятор: производил ли переключение регистра пользователь на PS/2 и в зависимости от этого (флаговая ячейка) при следующем вводе символа сделать взаимные соединения выводов порта согласно соответствующей таблицы.
Вполне возможно, что эмулятор построен по другому алгоритму и мои рассуждения не подходят. Хотя логика работы должна быть такая, потому что такая логика работы в железке.
Здесь должен быть смайлик: диззик застрелился. :)
Простейшая модель ситуации:
- включили питание, попали в ORDOS. Дефолтный драйвер KOI7, рус-лат переключается одинарным нажатием на кнопку Рус-Лат. Shitf тоже переключает рус-лат. (А еще в Ордос есть 8-битные драйвера cp866 и KOI8 чего и как они переключают и какой кнопкой - Х.З., но явно что-то есть "особое", отличия, ведь сочетаний управления для 8-битного драйвера вдвое больше, чем для 7-битного).
.
- Затем запустили BOOT$ и попали в CP/M. Там драйвер переключает рус-лат ДВОЙНЫМ нажатием на кнопку Рус-Лат (одинарное нажатие - аналог CAPS). А shift НЕ переключает Рус-Лат - он делает то что и должен: строчные/заглавные.
Как должна вести себя фанерка? По косвенным прокачивать, что пользователь в CP/M или в ORDOS? Так и в CP/M драйверов клавиатуры/экрана еще больше чем в Ордос - порядка десятка. Это я описал только тот драйвер, что сам использую, а про другие я без понятия как там рус-лат отработает (но подозреваю, что авторы драйверов сочиняли как попало).
Затем запустили BOOT$ и попали в CP/M.
Точно, а там драйвер плевать хотел, что в эмуляторе у нас сейчас русская раскладка и инициализировал свой флаг "английским" :)
Error404
28.06.2010, 18:32
Допустим мы имеем строго определённое сочетание клавиш для переключения РУС/ЛАТ и эмулятор запоминает нажатие на эти клавиши. А где гарантия, что в момент нажатия на эти клавиши в эмулируемом компьютере выполнялся драйвер клавиатуры и он аналогично обработал это нажатие? То есть, что оба флага переключились синхронно?
Да, примерно это я и имею в виду, но все намного хуже (см. выше - еще наложатся двойные и одинарные нажатия для одинаковых смыслу действий, но в разных средах ПО).
... но все намного хуже...
Сергей! Я понял, в чем ты меня не понимаешь. Это я виноват, что не сообразил сказать главное:
Мне наплевать на те полтора десятка всяких драйверов, которых настрогали на Орион-128! Пусть они обслуживаются так, как ты их обслуживаешь - это нормально!
Я веду разговор об Орионе-2010, об новом Мониторе, о новой клавиатуре и, естественно, абсолютно совместимом Эмуляторе-2010. Считаю, что достаточно будет, если на новом Мониторе будут работать только "правильные" старые программы. Не нужно пытаться воспроизвести все грехи старого Ориона-128. Это глупо! Для "неправильных" - можно подгрузить нужный старый Монитор и утолить любопытство.
Но, чтобы избавиться от старых проблем, необходимо новую клавиатуру делать через прерывания от PS/2. Подробности и выгоды я высказывал ранее.
pvlad, так бы и сказал, что хочешь "родную" PS/2 клавиатуру, а не эмуляцию "фанерки". То есть, на аппаратном уровне нужен некий контроллер клавиатуры, который бы позволял отправлять и принимать данные (аналог i8042). Соответственно в эмуляторе тоже.
Однако для совместимости эмуляция "фанерки" тоже нужна.
Однако для совместимости эмуляция "фанерки" тоже нужна.
Это нужно только для старых, "не правильных" программ! Остальные будут работать на новом Мониторе с PS/2-клавой, т.к. они вызывают п/п Inkey, STATUS и KBRD, а на этом уровне все будет совместимо! При этом будет QWERTY+ЙЦУКЕН, как новый стандарт раскладки клавиатуры "Ориона-2010". Кому не нравиться - загружает старый или какой-то свой Монитор, и тужится сколько хочет! Сделав возможным загрузку Мониторов, мы дали право выбора и никого не ущемляем. А это уже - демократия!
Error404
28.06.2010, 22:36
Но, чтобы избавиться от старых проблем, необходимо новую клавиатуру делать через прерывания от PS/2. Подробности и выгоды я высказывал ранее.
А, это сделаем. Будет работать параллельно: и старая фанерка для порта F400h..F403h (а также In/OUT 18h..1Bh) и клавиатура на прерываниях Ориона-2010 для порта F766 (In/OUT 4Eh) - как это и есть в Орион2010. Кстати, если орионовский драйвер этой схемы все равно писать заново, то удобные раскладки просто напишутся с нуля, ничего подстраивать не надо.
Давайте вспоминать детали. Чтобы это эмулировать, нужно воспроизвести какие коды возвращает релизация новых функций клавиатуры PS/2 на ПЛИС и как отрабатывают прерывания. Где-то раньше это упоминалось, но что вышло в итоге - я не знаю. Евгений, поможешь?
Давайте вспоминать детали.
Это очень важно! Прежде чем что-то писать, необходимо составить ТЗ, где расписать для каждой функции и п/п с чем в неё входят/выходят и что она портит! Это позволит каждому заниматься своим кусочком, но при этом, наперед будет известно, что должно получиться в итоге.
Подумать, какие новые вектора появятся в новом Орионе, что можно изменить в векторной таблице, а что трогать нельзя!
Кроме того, важно подобрать десяток-полтора программ, с помощью которых можно было бы тестировать новый Монитор.
Сергей, важно! Причесывание эмулятора должно идти опережающими темпами, чтобы те, кто не имеет (пока!) железа нового Ориона, тоже могли участвовать в этом проекте.
Где-то раньше это упоминалось, но что вышло в итоге - я не знаю. Евгений, поможешь?
Вектор прерывания добавить можно.
Порт F766 (4E) выдает последний байт сканкода при нажатой клавише, при отпускании - ноль. При нажатии нескольких кнопок получаем последовательно коды нажатых кнопок, при отпускании хоть одной - ноль.
А я тут "лужу-паяю, ЭВМ починяю...". Не хватает разъемов, за ними поеду завтра. Шинники лежат пока просто для "масштабности", заводить плату буду без них.
Разъем SD-карты с помощью напильника и какой-то там матери "подошел". Ну и хорошо :)
Стабилизаторы получились внешне разные, но это на скорость полёта не влияет.
Резисторных сборок в магазинах нет, выдираю со старых материнок, благо их у меня целый мешок.
Паять 0603 конечно весело... Алексея вспоминал периодически, надеюсь ему не икалось :)
Хорошо бы еще схему принципиальную последнюю получить. Алексей, ау?
Порт F766 (4E) выдает последний байт сканкода при нажатой клавише, при отпускании - ноль. При нажатии нескольких кнопок получаем последовательно коды нажатых кнопок, при отпускании хоть одной - ноль.
Ну и чудненько! На каждое изменение кода в порте 4Е - прерывание! Можно понизить частоту синхронизации на клаву, чтобы было больше времени на обработку прерывания.
А я тут "лужу-паяю, ЭВМ починяю...".
Сердце заходится..., глядя на такую красоту!
Сердце заходится..., глядя на такую красоту!
Ага :)
Тем более плата №0001 догадайтесь кому достанется :)
---------- Post added at 23:40 ---------- Previous post was at 23:39 ----------
Можно понизить частоту синхронизации на клаву, чтобы было больше времени на обработку прерывания.
Низзя. Мы и так на нижнем пределе. Номинал тактовой контроллера - 40Мгц, у нас - 20.
Ага! Тем более плата №0001 догадайтесь кому достанется?
Думаю, по праву тебе! Ведь это ты сотворил сие чудо!
Низзя. Мы и так на нижнем пределе.
Ты абсолютно уверен в этом утверждении? Ведь в клаве своего рода SPI-интерфейс. С какой частотой будешь синхронизировать получение данных - с такой их и получишь.
Думаю, по праву тебе!
Не, не угадал. Тебе.
Ведь в клаве своего рода SPI-интерфейс. С какой частотой будешь синхронизировать получение данных - с такой их и получишь.
Точнее, ближе к I2C... Но это мелочи. Важнее другое - и в клавиатуре, и в SD (и в прошивании флешек) есть такая ботва как timeout, когда время ожидания очередного фронта сигнала превышает максимальное. В таком случае система видит ошибку и прерывает сеанс ожидая следующей пачки импульсов.
Error404
29.06.2010, 09:07
Вектор прерывания добавить можно.
Порт F766 (4E) выдает последний байт сканкода при нажатой клавише, при отпускании - ноль. При нажатии нескольких кнопок получаем последовательно коды нажатых кнопок, при отпускании хоть одной - ноль.
Вектор будет, по аналогии (0FFh..0FDh..), 0FBh?
Мне бы надо таблицу этих сканкодов (помнится, чтобы отображать все варианты сканкодов в единой 8-битной таблице с учетом предпоследнего сканкода-префикса, было предложение выставлять бит D7). "Сырые" сканкоды я через WinAPI не получу, мне надо будет то, что у меня прочитывается через WinAPI, "подгонять под железку" по некой табличке перекодировки.
А я тут "лужу-паяю, ЭВМ починяю...". Не хватает разъемов, за ними поеду завтра. Шинники лежат пока просто для "масштабности", заводить плату буду без них.
Красиво. :)
Как ты эти мелкие деталюшки паяешь?
Мне бы надо таблицу этих сканкодов
Во вложении.
При нажатии кнопы читаем из порта ПОСЛЕДНИЙ байт сканкода.
Насчет вектора - как скажете, можно и этот.
Деталюшки паяются намано, только чуть глаза не сломал :v2_wacko:
Error404
29.06.2010, 13:40
Во вложении.
При нажатии кнопы читаем из порта ПОСЛЕДНИЙ байт сканкода.
Последние байты не уникальны, они иногда повторяются для "просто байтов" и для "E0+байт". Причем последние байты всегда 7-битные. Соответственно, когда полгода назад это обсуждалось, я предлагал по флагу "E0" для последнего байта единократно (т.е. только для одного последующего байта) взводить старший бит (D7), и соответственно из регистра тогда будем читать уникальные 8-битные сканкоды. Сделано ли это?
Насчет вектора - как скажете, можно и этот.
Тогда решили - этот.
Как оно будет работать - как и RS-232, в двух режимах (по прерыванию и по опросу)? Какими битами (порта F766 на запись?) включаются эти режимы и маскируется перерывание от клавиатуры?
Мне просто нужны все детали функциклирования, чтобы попробовать заэмулировать. :)
...Насчет вектора - как скажете, можно и этот
Думаю, адрес порта не столь важен - как скажет Сергей. А вот запрет/разрешение прерываний, от все устройств, следовало бы объединить в одном порту (не помню, может быть так и сделано!), где бит D7 мог бы блокировать все прерывания. DI/EI - это отдельная песня.
Не, не угадал.
Мне очень приятно. Спасибо!
Выкладываю документацию по версии 1.07:
- схема в формате PCAD2006
- плата в формате PCAD2006
- схема в PDF
- "сборочный" чертеж платы в формате PDF
- Bill Of Materials (BOM) в формате XLS. Дотошно не проверял, могут быть ошибки!
Да простит меня Владислав, но я нахожу, что BOM по-буржуйски гораздо удобнее, нежели перечень элементов + спецификация по-ГОСТовски.
Евгений, а зачем ты вкорячивал неродной слот SD-карты? В вашей Мегаэлектронике продаются те, которые заложены в проект (смотри BOM). Да, кстати, для таких работ очень бы пригодилась тебе термовоздушная паяльная станция. Стоит недорого, а удобства очень быстро оценишь. Мелочевка типа 0603 паяется - одно удовольствие
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot