Просмотр полной версии : Орион-2010. Hard & Soft
Error404
07.12.2009, 09:27
Пытаюсь осмыслить...
Ты имеешь ввиду, при работе с верхней памятью чтобы не мешалась клавиатура (и прочие РОМ-диски)?
Это можно.
Я имел ввиду, что если в примере Спектрума для разработки внешнего адаптера клавиатуры достаточно было "врезаться" в IORQ, то пока в Орионе клавиатура (и многие другие девайсы) сидит в памяти, то "врезаться" надо и в MREQ (в дополнение к IORQ).
Такое расширение для MREQ, если оно будет распространяться на все адресное пространство, можно использовать и для более интересных вещей. Например, для VGA-адаптера: по MREQ дублировать запись в штатное экранное ОЗУ (т.е. анализировать еще и IORQ для портов F8, FA) записью в дополнительное ОЗУ внешнего адаптера. А из этого ОЗУ уже спокойно в фоне с нужной частотой (любой, не обязательно кратной 50Гц) выводить на монитор. Т.е. не надо будет в онлайне сканировать входящий кадр - устройство от zst в такой версии сильно упростится.
Error404, я понял :)
Только БК щас начнет орать что это в концепцию НемоБАСа не укладывается :)
Error404
07.12.2009, 14:40
Только БК щас начнет орать что это в концепцию НемоБАСа не укладывается :)
Ну, жизнь ведь не стоит на месте. :)
Контакт то для MREQ свободный найдется? Накрайняк можно использовать контакт от +12В (там вроде было такое?)
Контакт то для MREQ свободный найдется? Накрайняк можно использовать контакт от +12В (там вроде было такое?)
Можно контакт Турбо на разъеме использовать. Или тот же BUSRQ. Или вообще неиспользуемый ;)
Error404
14.12.2009, 16:53
Ну как? :)
Ну как?
чуть позже... срочная работа.
ИДЕ-интерфейс прикрутил. Отлавливаю глюки. Обычное дело ;)
Винчестер на CF работает. Просто я, идиот, питание 3.3 вместо 5 вольт подал на ВВ55...
Собираю часы. & Запишу образ винта на SD.
Часы подключены, но не видятся.
Правильно ли я рассуждаю:
1. при выборе часов по F76x, оный сигнал выбора переходит в "0".
2. при активном выборе и А0="0" на входе AS 512ви1 - "1". Сигнал DS соответственно "0".
3. при активном выборе и А0="1" на входе AS - "0", DS - "1".
4. если сигнал выбора не активен, и на AS, и на DS - "0".
Error404
20.12.2009, 00:17
Часы подключены, но не видятся.
Правильно ли я рассуждаю:
1. при выборе часов по F76x, оный сигнал выбора переходит в "0".
2. при активном выборе и А0="0" на входе AS 512ви1 - "1". Сигнал DS соответственно "0".
3. при активном выборе и А0="1" на входе AS - "0", DS - "1".
4. если сигнал выбора не активен, и на AS, и на DS - "0".
При обращении к адресу 0F760 сигнал AS=1, DS=0.
При обращении к адресу 0F761 сигнал AS=0, DS=1.
Прочие адреса портов (0F700...0F75F, 0F762...0F7FF): AS=0, DS=0
Сигнал СE всегда равен лог.0 при включенном питании компутера (иначе часы не будут доступны) и всегда равен лог.1 (+U бат.) при выключенном компе (батарейном питании).
На ножку R/W подаем сигнал /WR процессора
Как-то так...
А что с IDE? Воспроизводятся те же глюки, что и ранее были на старой CPLD (когда иногда висло при загрузке ОС после ввода времени)?
Как-то так...
Да, логику вроде как сделал именно такую...
А что с IDE? Воспроизводятся те же глюки, что и ранее были на старой CPLD (когда иногда висло при загрузке ОС после ввода времени)?
Да, один в один. Несмотря на то, что ВВ55 теперь на персональной шине (практически прямо к процу привешена). Х.З.
З.Ы. адаптер SD-карты система не видит ваапсче :( Код ошибки - С3.
Error404
21.12.2009, 11:24
З.Ы. адаптер SD-карты система не видит ваапсче :( Код ошибки - С3.
Ошибка C3 означает, что MBR-сектор (первые 512b диска) прочитался нормально, но этот сектор не содержит байт C3 (jmp) в первом байте или не содержит 55AAh в последних двух байтах.
название устройства после "Select boot partition on" какое-нибудь выводится?
Сектор прочитывается по адресу 1:0000h (во вторую страницу ОЗУ) Если ты грузишься из Ордос (hddf600$.ord), то можно посмотреть что там в этой памяти.
название устройства после "Select boot partition on" какое-нибудь выводится?
Нет.
Ошибка C3 означает, что MBR-сектор (первые 512b диска) прочитался нормально, но этот сектор не содержит байт C3 (jmp) в первом байте или не содержит 55AAh в последних двух байтах.
Сектор прочитывается по адресу 1:0000h (во вторую страницу ОЗУ) Если ты грузишься из Ордос (hddf600$.ord), то можно посмотреть что там в этой памяти.
Посмотрел память.
Первые байты - FF 00 EE 00 00 00 0E 05 11 1E F3 AF 12 0D 28 5D
Где-то далее видны надписи СР/М и NO LABEL, еще дальше SELECT BOOT PARTITION ON.
И уже в самом конце 512б. блока - 00 00 55 AA 55 AA.
Ошибка C3 означает, что MBR-сектор (первые 512b диска) прочитался нормально, но этот сектор не содержит байт C3 (jmp) в первом байте
Ну уж MBR-то не надо трогать! Я понимаю, какая-то партиция будет содержать i8080 код, а в MBR нужно оставить i8086 код, и первый байт будет EB. Особенно для сменных носителей.
Error404
21.12.2009, 14:10
Нет.
Странно. М.б. платка как-то не так Identify отрабатывает? Хотя это было бы странно
Посмотрел память.
Первые байты - FF 00 EE 00 00 00 0E 05 11 1E F3 AF 12 0D 28 5D
По первому байту Ордос прошлась: FF - это она "отформатировала" диск B.
Где-то далее видны надписи СР/М и NO LABEL, еще дальше SELECT BOOT PARTITION ON.
И уже в самом конце 512б. блока - 00 00 55 AA 55 AA.
Этот текст - это куски MBR, т.е. MBR (сектор с LBA=0) считывается нормально. Дальше - выполнение в странице 1. Само меню то выводится? Хоть что-то на экране есть?
---------- Post added at 14:10 ---------- Previous post was at 14:04 ----------
Ну уж MBR-то не надо трогать! Я понимаю, какая-то партиция будет содержать i8080 код, а в MBR нужно оставить i8086 код, и первый байт будет EB. Особенно для сменных носителей.
И зачем это нужно? Не, правда интересно - мож чего-то от этого зависит.
По крайней мере под виндой прекрасно работают флешки с партициями и Z80 кодом в MBR. Лишь бы таблица партиций была и сигнатура 55AA в конце MBR.
Само меню то выводится? Хоть что-то на экране есть?
Нет. Как обычно - ORDOS IDE BOOT.... C3 - ERROR! ... PRESS CTRL+C...
Странно. М.б. платка как-то не так Identify отрабатывает? Хотя это было бы странно
Ну, если есть какая-то проверка на "шаблоны" то может и не так. Строка там длинная, с переносом в ver. & rev. (Смотрел на IDE-контроллере Спектрума).
---------- Post added at 15:06 ---------- Previous post was at 15:05 ----------
Имею ввиду строчку идентификации
Error404
21.12.2009, 22:00
Нет. Как обычно - ORDOS IDE BOOT.... C3 - ERROR! ... PRESS CTRL+C...
А. Ну да, так и будет, если в считанном MBR не выполняется проверка на наличие кодов AA55h (MBR/boot flag) и C3h (JMP) по адресам (от начала бутсектора) 1FEh, 0h соответственно.
Меню (в т.ч. и идентифи устройства) рисует уже код MBR, а ему в этом случае управление не передается.
Тупой вопрос спрошу: ты смотрел что на SD в MBR? можно считать один первый сектор при помощи той же hddutil.exe - c параметром /с=1
Можно это содержимое в качестве информации для размышления "по-диагонали" сравнить с тем, что в памяти после попытки загрузки. Может, сдвинуто, или бит провален, или еще чего-то в глаза бросается...
Ну, если есть какая-то проверка на "шаблоны" то может и не так. Строка там длинная, с переносом в ver. & rev. (Смотрел на IDE-контроллере Спектрума).
Не, никаких шаблонов не использую. Тупо выводится на экран строчка из сектора Identify. Но это уже в МБР, а до него пока еще не доходит, как я понял .
Все это очень странно. На праздниках буду оживлять старый Орион и все проверять. :)
Тупой вопрос спрошу: ты смотрел что на SD в MBR? можно считать один первый сектор при помощи той же hddutil.exe - c параметром /с=1
Можно это содержимое в качестве информации для размышления "по-диагонали" сравнить с тем, что в памяти после попытки загрузки. Может, сдвинуто, или бит провален, или еще чего-то в глаза бросается..
Попробую завтра на работе.
Error404
24.12.2009, 10:29
Попробую завтра на работе.
ну как, что показало вскрытие? :)
Что-то темка затихла. Как там проект?
каникулы закончились. Продолжение начинается :)
Уже есть изменения.
Error404
16.01.2010, 10:29
Да, огласите пожалуйста весь список. :)
Посовещавшись с pvlad, вернулись на 100-ногую ПЛИС. Есть интересные мысли. Монтаж продвигается медленно (погряз в ремонтах). В течении двух дней надеюсь закончить.
Error404
27.01.2010, 19:35
Посовещавшись с pvlad, вернулись на 100-ногую ПЛИС. Есть интересные мысли. Монтаж продвигается медленно (погряз в ремонтах). В течении двух дней надеюсь закончить.
Ну, хотя бы теорию расскажи. :)
Посовещавшись с pvlad....
М-да! Посовещаться то посовещались...
Собрал наконец-то версию 0.13...
ПЛИС на 100 ног, на шину расширения отдаются адреса, данные, IORQ, MREQ, RD, WR, RESET, RES (инверсный RESET для ППА). Добавляю WAIT.
Часы на 512ВИ1 соответственно сняты с платы.
---------- Post added at 12:56 ---------- Previous post was at 12:45 ----------
Курю информацию про SD.
---------- Post added at 14:53 ---------- Previous post was at 12:56 ----------
Error404, как я понял, для реализации SD делаем порт F762, на чтение бит D7 - данные с карты, на запись D0 - данные на карту, D1 - клок, D2 - селект. D3 - питание (обязательно!).
Верно? Можно привинчивать в таком виде?
Error404
29.01.2010, 16:30
Собрал наконец-то версию 0.13...
ПЛИС на 100 ног, на шину расширения отдаются адреса, данные, IORQ, MREQ, RD, WR, RESET, RES (инверсный RESET для ППА). Добавляю WAIT.
Вернулись к системному слоту? Это правильно! А как с нагрузочной способностью и совместимостью с TTL у FPGA? Буферизировать надо?
как я понял, для реализации SD делаем порт F762, на чтение бит D7 - данные с карты, на запись D0 - данные на карту, D1 - клок, D2 - селект. D3 - питание (обязательно!).
Верно? Можно привинчивать в таком виде?
Это вариант от N8VEM (http://zx.pk.ru/showpost.php?p=251765&postcount=1). Он полностью программный и самый медленный.
Я все больше в своих симпатиях склоняюсь к варианту от MSX (http://zx.pk.ru/showpost.php?p=252055&postcount=13), т.к. он более скоростной. При разнице в 3 микросхемы, эти варианты отличаются по быстродействию примерно в пять раз в пользу MSX.
В MSX будет так:
F762.D1 - селект (разнос по селект даст возможность при подключенной карте автодетектить вариант схемы), F762.D3 - питание.
F763./WR (любой) - чтение бита с SD в аппаратный сдвиговый регистр с автоматической выдачей /CLK, запись F763.D7 - бит данных на карту с автоматической выдачей /CLK, чтение с F763 - чтение из сдвигового регистра+SD.D0 ранее сдвинутого из SD байта (т.е. целым байтом, а не побитно).
В эмуляторе (уже сделано) и CPM (в процессе) будут поддерживаться оба варианта подключения SD-карты (как N8VEM, так и МСХ) и CompactFlash/IDE на ВВ55 - однотипно, с master-партициями по схеме FDISK (PC).
Вернулись к системному слоту? Это правильно! А как с нагрузочной способностью и совместимостью с TTL у FPGA? Буферизировать надо?
Буферизация желательна. ПЛИС терпимо относится ко входным сигналам 5в, но сама выдает на шину 3.3в. Большинству микросхем (особенно ТТЛ) это также приемлемо. Но надо прикидывать в каждом конкретном случае.
В эмуляторе (уже сделано) и CPM (в процессе) будут поддерживаться оба варианта подключения SD-карты (как N8VEM, так и МСХ) и CompactFlash/IDE на ВВ55 - однотипно, с master-партициями по схеме FDISK (PC).
Тоесть, на пробу я могу сделать простейший вариант? Это хорошо, "утрамбовывать" прошивку лучше с малого. Заведется - пойдем дальше, к аппаратному сдвиговому регистру. Поддержку в СР/М ты пока еще делаешь?
И объясни пожалуйста, как твой модуль (на Паскале/Дельфи судя по всему) привинтить к основному блоку эмулятора?
Я сейчас отлаживаю работу Ори в измененной конфигурации.
Error404
29.01.2010, 19:33
Тоесть, на пробу я могу сделать простейший вариант? Это хорошо, "утрамбовывать" прошивку лучше с малого. Заведется - пойдем дальше, к аппаратному сдвиговому регистру. Поддержку в СР/М ты пока еще делаешь?
И объясни пожалуйста, как твой модуль (на Паскале/Дельфи судя по всему) привинтить к основному блоку эмулятора?
Я сейчас отлаживаю работу Ори в измененной конфигурации.
Эмулятор выложу на этих выходных (надо пару вещей доделать).
CPM пока только разобрать успел. :) Как обычно, принялся переделывать какую-то логику на "более логичную" и зарылся. Думаю, дело пары недель.
А по мощности? Сколько ножек TTL(Ш) можно нагрузить на один выход ПЛИС?
миллиампер так 15 можно. Сколько это "в ножках" - не знаю :(
Возможно, лучшим выходом будет принять аксиому, что внешние устройства цеплять онли через ёлку (буферизированный расширитель с парой-тройкой слотов расширения).
CPM пока только разобрать успел. Как обычно, принялся переделывать какую-то логику на "более логичную" и зарылся. Думаю, дело пары недель.
Угу, как и я... Залез в книжку посмотреть синтаксис языка С - неделю строчу как машинистка над парой "новообразованных" проектов на микроконтроллерах...
Error404
30.01.2010, 19:30
Курю информацию про SD.
[...]
D3 - питание (обязательно!).
[...]
Можно привинчивать в таком виде?
Нарисуй пожалуйста как будет выглядеть стабилизатор питания 3,3V для карты, управляемый (ON/OFF) от бита D3 (как тебе будет удобнее в плане доставаемости стабилизатора и схемной реализации). Чтобы мне стало понятно как управляем стабилизатором с порта ("1"/"0"=ON/OFF, или наоборот, или еще как-то :) )
Нарисуй пожалуйста как будет выглядеть стабилизатор питания 3,3V для карты,
Не знаю, прям. Пока не нашел ничего...
Мне кажется смысла ставить отключаемый стабилизатор для питания флэшки нет никакого.
Он не гарантирует, что пользователь не выдернет карту во время операций с ней.
Скорее нужен индикатор обращения к карточке, что бы не выдернуть ее в момент чтения/записи.
PS. Что касается схем управляемых стабилизаторов, то использовать можно например LP2985AIM5-3.3.
Корпус SOT23-5. Включается высоким уровнем на входе on/off. Стоит порядка 18 руб.
Error404
01.02.2010, 13:14
Мне кажется смысла ставить отключаемый стабилизатор для питания флэшки нет никакого.
Он не гарантирует, что пользователь не выдернет карту во время операций с ней.
Скорее нужен индикатор обращения к карточке, что бы не выдернуть ее в момент чтения/записи.
Я собственно почему предложил сделать управление питанием. Поскольку после установки карты в слот (фактически включения питания), карте нужно выдать некую инициализирующую последовательность [до того она будет нечитабельная], (и делать это придется некой командой с консоли, типа MOUNT) то, в этот момент легко и питание подать битом порта. Винда это делает сама, но усложнять до такой степени ОС вряд ли стоит.
А раз есть MOUNT с управлением питанием, то можно и UNMOUNT корректный сделать с гашением питания. А там уж как получится, хоть на ходу дергать, хоть как.
Error404
10.02.2010, 22:50
Тоесть, на пробу я могу сделать простейший вариант? Это хорошо, "утрамбовывать" прошивку лучше с малого. Заведется - пойдем дальше, к аппаратному сдвиговому регистру. Поддержку в СР/М ты пока еще делаешь?
И объясни пожалуйста, как твой модуль (на Паскале/Дельфи судя по всему) привинтить к основному блоку эмулятора?
Я сейчас отлаживаю работу Ори в измененной конфигурации.
Эмулятор выложу на этих выходных (надо пару вещей доделать).
CPM пока только разобрать успел. :) Как обычно, принялся переделывать какую-то логику на "более логичную" и зарылся. Думаю, дело пары недель.
Лучше поздно, чем никогда. :)
"Эмулятор на сайте" (с) Ramiros
Там же исходники эмулятора, схемы подключения SD-карт, примеры программирования SD на ассемблере.
На реале ничего не проверялось. :)
Извините за задержку, собирал/отлаживал ZX-Evolution...
Потом на радостях нечаянно спалил альтеру в Орионе... сейчас только закончил менять на новую :)
С нетерпением жду четкой инструкции по опробованию SD-интерфейса :)
Error404
10.02.2010, 23:30
Извините за задержку, собирал/отлаживал ZX-Evolution...
ZX-Evolution - это дело правильное.
Надо туда Орион запихнуть. Плюсом к Пентагону и АТМ. Это было бы православно.
С нетерпением жду четкой инструкции по опробованию SD-интерфейса :)
Четкой инструкции пока нет. Есть эмулятор, схема и программа под CPM пишущая и читающая сектора с SD.
Попробую сделать ORDOS-версию, чтобы можно было без CPM (из ROM-диска) пробовать SD-карту.
Четкой инструкции пока нет. Есть эмулятор, схема и программа под CPM пишущая и читающая сектора с SD.
Попробую сделать ORDOS-версию, чтобы можно было без CPM (из ROM-диска) пробовать SD-карту.
Вот это я и имел ввиду. Укажи, какая именно схема, дабы запихнуть ее в чип.
Error404
11.02.2010, 11:44
Вот это я и имел ввиду. Укажи, какая именно схема, дабы запихнуть ее в чип.
Давай начнем с простого, как ты и хотел, - co схемы N8VEM. Потом ведь можно будет внести изменения (сделать схему MSX)? Снаружи в обоих случаях это будет 5 ног FPGA (CS, CLK, DIN, DOUT, PWR) и одинаковая схема согласования\питания SD-карты. Также, сигналы CS и PWR в обеих схемах абсолютно одинаково реализованы (биты D2, D3 регистра F762).
Обе схемы в архиве SD_sampl.zip вложения в первом посте темы про SD (http://zx.pk.ru/showpost.php?p=251765&postcount=1)
Error404
11.02.2010, 16:17
А вот интересно, где купить держатель для SD-карты?
Чтобы 1-2 штуки, а не минимум на 2000 руб. как в большинстве инет-магазинов. А в розничных магазинах этого добра вообще нет. И хотелось бы не дороже 50р за штуку (за что там платить то?), а не за 400р как в ЧипДипе да еще и под заказ.
Народ, где берете держатели для SD-карт?
Из кокнутых цифровых фотиков :)
Народ, где берете держатели для SD-карт?
Можно купить. А можно поступить "по нашему" - покупаешь микроSD с адаптером. К самому адаптеру подпаиваешся. Карточку вставляешь/вынимаешь :)
Error404
11.02.2010, 18:50
Можно купить. А можно поступить "по нашему" - покупаешь микроSD с адаптером. К самому адаптеру подпаиваешся. Карточку вставляешь/вынимаешь :)
Я думал про такой вариант, только про mini-SD. Но пока не нашел такую карту по приемлимой цене.
Error404, делаю SD-интерфейс. Столкнулся с вопросом - порт F762 откликается на MREQ и IORQ или ТОЛЬКО на IORQ?
Сделал доступ к SD_REG и как к порту, и как к ячейке памяти. В "мониторе" вроде всё работает, данные на выходах защелкиваются, MISO читается. Адрес "жесткий", F762h.
Буду ждать утилиты для работы с SD. И искать слот для карты :)
Error404
12.02.2010, 09:57
Error404, делаю SD-интерфейс. Столкнулся с вопросом - порт F762 откликается на MREQ и IORQ или ТОЛЬКО на IORQ?
Пока программно используется только доступ по MREQ: LD (F762), x
Error404
12.02.2010, 15:08
Буду ждать утилиты для работы с SD.
В первом приближении сделано - см. во вложении в 1 посте темы про SD:
http://zx.pk.ru/showpost.php?p=251765&postcount=1
Для варианта ORDOS файл test2sd.ord из вложения надо добавить в ROM-DISK. Или загрузить с магнитофона. :)
Или загрузить с магнитофона.
Охти, блиииннн... :v2_scare: Пошел искать магнитофон... :v2_devil:
---------- Post added at 22:08 ---------- Previous post was at 20:21 ----------
Error404, Будешь смеяться, наверное. Но... работает!
Записывал/считывал блоки, менял LBA-номера, "погулял" по флешатинке.
Начало хорошее. Чтение блока - доли секунды. Режим Ори - 5Мгц.
Ты молодец! :)
У мну есть просьба :v2_blush:
Размер образа для СР/М у нас составляет 64Мб. Память флешки выше этого не используется. Нельзя ли сделать программку-сохранялку диска В на флешь в любое место выше этих 64Мб? Типо, флешь-диск такой для сохранения рабочих файлов с диска В... Ну и загрузку соответственно...
На крайний случай сделать просто готовый драйвер SD, на входе указать адрес буфера в ОЗУ и текущий номер блока в LBA. Функции инициализации, чтения и записи блока. Вот. :v2_conf2:
Error404
13.02.2010, 17:16
У мну есть просьба :v2_blush:
Размер образа для СР/М у нас составляет 64Мб. Память флешки выше этого не используется. Нельзя ли сделать программку-сохранялку диска В на флешь в любое место выше этих 64Мб? Типо, флешь-диск такой для сохранения рабочих файлов с диска В... Ну и загрузку соответственно...
На крайний случай сделать просто готовый драйвер SD, на входе указать адрес буфера в ОЗУ и текущий номер блока в LBA. Функции инициализации, чтения и записи блока. Вот. :v2_conf2:
В принципе, сделать можно. В работе с HDD (как IDE , так и в ближайшем будущем SDC) принята концепция FDISK-партиций (IBM PC партиций, для совместимости). Соответсвенно, размер партиции может быть и более 64M (CP/M 2.2 позволяет до 512M), и разноразмерных партиций может быть несколько, и не только CPM, но и к примеру, FAT на этом же диске (флешке). Каждая партиция имеет свой тип (CPM=52). Пользователь может просто не знать какая у него партиция в какой части диска, и случайно что-то перетереть.
Тут я вижу 2 пути как по-хорошему надо было бы сделать:
1) Лучше не писать в некой указанный пользователем LBA-адрес, а принять для ORDOS некий номер партиции из зарезервированных, и для "своппинга" RAM_disk-а ORDOS на SD или IDE, пользователь по желанию сможет при помощи, к примеру, fdisk.com в CP/M (или какой-то утилитой из ORDOS), такие партиции (одну из четырех возможных) создавать. И некой утилитой из-под ORDOS туда писать. Этот путь проще.
Плюс, нужна какая-то утиль чтобы переносить файлы из CP/M в эту партицию (в самом деле, изначально, не с магнитофона же их загружать). Или можно записываовать "ROM-disk" на эту партицию на PC при помощи HddUtil.exe
2) Адаптировать программу Atlas до работы с IDE и SD. Эта программа, работающая под Ордос, в оригинале позволяет сохранять и считывать файлы ORDOS на дисковод на диск формата CPM (800к). Она есть в одном из ROM-дисков в архиве эмулятора. Аналогично сделать и работу этой утилитой из ORDOS с партицией с файловой системой CP/M, но на SD-карте или IDE-диске. Этот путь сложнее, т.к. надо разбирать на комплектующие Атлас, а затем собирать его заново но уже для IDE/SD.
---------- Post added at 17:16 ---------- Previous post was at 17:14 ----------
Error404, Будешь смеяться, наверное. Но... работает!
Записывал/считывал блоки, менял LBA-номера, "погулял" по флешатинке.
Начало хорошее. Чтение блока - доли секунды. Режим Ори - 5Мгц.
Ты молодец! :)
Сказать по правде, не ожидал, что сразу заработает. :)
Пока я буду ковыряться с утилитами, может попробуешь реализовать вариант SD от MSX?
может попробуешь реализовать вариант SD от MSX?
Попробую.
А насчет Атласа... Не знаю, честно говоря, что это такое. На Спектрумах признанным образцом для подражания является Fatall, копировщик FAT32<->TR-DOS. У нас, вместо TR-DOS выступают диски ORDOS. Но такой серьезный коммандер потребует немало усилий для реализации. Я же предложил вариант использовать кусочек SD как безымянный блок энергонезависимой памяти. И запихнуть его куда-нибудь подальше, чтоб под ногами не путался.
Проекция же например диска D напрямую на SD будет уже гораздо удобней.
1) Лучше не писать в некой указанный пользователем LBA-адрес, а принять для ORDOS некий номер партиции из зарезервированных, и для "своппинга" RAM_disk-а ORDOS на SD или IDE, пользователь по желанию сможет при помощи, к примеру, fdisk.com в CP/M (или какой-то утилитой из ORDOS), такие партиции (одну из четырех возможных) создавать. И некой утилитой из-под ORDOS туда писать. Этот путь проще.
Плюс, нужна какая-то утиль чтобы переносить файлы из CP/M в эту партицию (в самом деле, изначально, не с магнитофона же их загружать). Или можно записываовать "ROM-disk" на эту партицию на PC при помощи HddUtil.exe
Это, как мне кажется (и насколько я вообще понял) будет оптимально.
Ладно, пойду курить схему SD-MSX :)
---------- Post added at 18:02 ---------- Previous post was at 17:45 ----------
Кстати, у тебя детект интерфейсов каким образом делается? Чтобы в железе не сделать ошибки.
Error404
13.02.2010, 18:09
Кстати, у тебя детект интерфейсов каким образом делается? Чтобы в железе не сделать ошибки.
Детектится так: Сначала пытается работать со схемой MSX (регистр управления F762, регистр данных F763), если карта по такой схеме не отвечает, то переключается на работу с вариантом N9VEM (когда на всё про всё только порт F762). В обеих схемах биты D2 (CS - выбор карты) и D3 (PWR - включение питания) работают одинаково - в порту F762.
Схема MSX работает :v2_cheer:
Проверил запись из памяти в SD, чтение из SD в память. Разночтений не обнаружил :)
Не очень хорошо пришлось реализовать защелку SCK (нерекомендуемым способом), у нее в оригинале должно быть переключение по двум фронтам. На VHDL такие триггеры недопустимы :v2_conf2:
Но выход вроде нашел. По крайней мере, всё работает.
Теперь можно спокойно "полировать" новую прошивку альтеры.
Какие будут дальнейшие распоряжения? :v2_wink2:
Error404
13.02.2010, 21:07
Схема MSX работает :v2_cheer:
Проверил запись из памяти в SD, чтение из SD в память. Разночтений не обнаружил :)
Не очень хорошо пришлось реализовать защелку SCK (нерекомендуемым способом), у нее в оригинале должно быть переключение по двум фронтам. На VHDL такие триггеры недопустимы :v2_conf2:
Но выход вроде нашел. По крайней мере, всё работает.
Теперь можно спокойно "полировать" новую прошивку альтеры.
Какие будут дальнейшие распоряжения? :v2_wink2:
Круто. :v2_cheer:
Какие тут могут быть распоряжения? :)
Сейчас было бы здорово знать что на настоящий момент имеет место быть в проекте - что уже внутри ПЛИС, чего еще нет, но планируется внутри ПЛИС, что будет снаружи, как оно видится в железе и т.п. Документацию бы глянуть :) ну или хотя бы концепцию... вкратце?
Ммм... Почемуто инициализация первая (после включения) через раз работает. Со второго раза всё запускается. Возможно это глючок подключения (ну нет у меня дома нужных резисторов и дросселя). Но на первой (простой) схеме такого вроде небыло... Разбираюсь.
---------- Post added at 22:43 ---------- Previous post was at 22:28 ----------
что уже внутри ПЛИС, чего еще нет, но планируется внутри ПЛИС, что будет снаружи, как оно видится в железе и т.п.
Дык всё то же. Схема в железе вроде как и закончена. Часы будут внешними, на шине расширения. ИДЕ-интерфейс (если кому нужен) тоже внешнее устройство на шине.
Содержимое платы по умолчанию - альтера, два чипа ОЗУ, 74НС04 с кварцем 20Мгц, ПЗУ (РОМ-диск, не обязателен для СР/М). Стабилизаторы EZ1086 и LM317D2.
Баззер для звука. Резисторы, диоды, конденсаторы. Дроссель для SD-карты :)
Пять транзисторов для видеовыхлопа. Свитч для выбора турбо/турбо.
В унутре альтеры сидят:
Z80
видеоконтроллер стандартный + wide screen
контроллер PS/2 клавы
контроллер ROM-диска
контроллер SD-карты
порты всякие (F4xx, F5xx, F76x, F8, F9, FA, FB, FE, FF :) ).
Из текущих недоработок - подглюкивает сброс контроллера PS/2. И пока не отлажено SD-msx инициализация.
Вроде как всё. Рисую схему.
---------- Post added at 23:23 ---------- Previous post was at 22:43 ----------
И пока не отлажено SD-msx инициализация.
Да, были виноваты "шорохи" на шлейфике SD. Три резистора по 610 ом на SCK, MISO и MOSI убрали глюки с инициализацией. Правда, интуиция мне подсказывает что лучше воткнуть резюки ом так по 100-200...
Включение-выключение питания карты я не делал. Ибо нафик оно надо.
Пробовал делать "горячую замену" - при включенном питании вынимал-вставлял карту. Работает великолепно. Естесственно, если провести инициализацию после вставки карты :) Посмотрел на современных схемах - не везде делается контроль питания. На моем МП3-плеере и на ZX-Evolution питание идет на карту постоянно. Значит, не я один такой умный :)
Хочу место, освободившееся от ВВ55 для ИДЕ-интерфейса использовать в конце концов под часы на ВИ1. Надо же работу чудо-шины проверить в реальных условиях. Благо, комплект деталей для часов благодаря donate-вливаниям у меня есть :)
Текущие изменения косвенно видно по изменениям в нижней строчке в моей подписи.
Error404
14.02.2010, 10:02
Схема в железе вроде как и закончена. Часы будут внешними, на шине расширения. ИДЕ-интерфейс (если кому нужен) тоже внешнее устройство на шине.
Содержимое платы по умолчанию - альтера, два чипа ОЗУ, 74НС04 с кварцем 20Мгц, ПЗУ (РОМ-диск, не обязателен для СР/М). Стабилизаторы EZ1086 и LM317D2.
Баззер для звука. Резисторы, диоды, конденсаторы. Дроссель для SD-карты :)
Пять транзисторов для видеовыхлопа. Свитч для выбора турбо/турбо.
В унутре альтеры сидят:
Z80
видеоконтроллер стандартный + wide screen
контроллер PS/2 клавы
контроллер ROM-диска
контроллер SD-карты
порты всякие (F4xx, F5xx, F76x, F8, F9, FA, FB, FE, FF :) ).
Вроде как всё. Рисую схему.
А видеовыхлоп цветной?
VGA планируешь в отдаленном будущем?
А зачем дроссель? :) Я всегда не любил дроссели (ибо всегда их негде было взять, а наматывать - лень, да и не угадаешь с количеством витков).
Если подключать ВИ1, то но нее надо заводить 2 адреса: F760 (регистр шины адреса) и F761 (регистр шины данных), чтобы программно разделить совмешенную шину ША/ШД часов. Этот принцип виден на моих схемах. И какую-то там ногу надо при включении питания переводить в "0", при батарейном питании - в "1" или "не подключено" (там на схеме для этого инвертор на +5), иначе ВИ1 не запустится.
А видеовыхлоп цветной?
VGA планируешь в отдаленном будущем?
Видео цветное, на СКАРТ. Три канала цвета с замешанной яркостью, синхросмесь, черно/белый комплексный 16град. (его ты и видел на фотках).
Мысль с ВГА обдумываю. Интересно повторить простой скандаблер, больших переделок в коде вроде как не потребуется. Минус в том, что упор будет на мониторы 50Гц кадровой. У меня таких три, а у тебя? :)
http://nedopc.com/zxevo/zxevo_supported_monitors.pdf
А зачем дроссель? Я всегда не любил дроссели (ибо всегда их негде было взять, а наматывать - лень, да и не угадаешь с количеством витков).
Убрать "фон" по питанию. Вчера помучил карточку без дросселя, работать то всё работает. Но при подключенной карточке на экране заметем небольшой "матрасик" от высокочастотных наводок. Посмотри на последнюю фотку. Дроссели мотать не надо, они продаются наравне с резисторами/конденсаторами. И размер имеют такой же :)
Касаемо ВИ1 - часы должны быть целиком собраны на макетке. Поддержки с альтеры не будет никакой. Т.е. дешифратор адреса также должен быть на макетке часов.
Хотя, раз мы так активно используем порт F7хх, может вывевти его селект на шину расширения?
Error404
14.02.2010, 14:37
Видео цветное, на СКАРТ. Три канала цвета с замешанной яркостью, синхросмесь, черно/белый комплексный 16град. (его ты и видел на фотках).
Мысль с ВГА обдумываю. Интересно повторить простой скандаблер, больших переделок в коде вроде как не потребуется. Минус в том, что упор будет на мониторы 50Гц кадровой. У меня таких три, а у тебя? :)
http://nedopc.com/zxevo/zxevo_supported_monitors.pdf
У меня во Владимире DELL, в Москве Iiyama. Табличку совместимых посмотрю позже, я сейчас по GPRS хожу. :)
Еще можно сделать как раньше обсуждали: никак не завязываться на штатный видеовыход (пускай гонит на TV как есть), а на системной шине схемой на отдельной небольшой ПЛИС ловить запись видеоконфигурации (OUT FA, OUT F8), переключатель графика/цветовые атрибуты (OUT F9) и собственно запись графики/цвета (LD (экранное озу), значение). Фактически, дублировать запись двух первых страниц Ориона в 128кб буферное ОЗУ (это надо делать, т.к. графика сначала может формироваться в "невидимой плоскости экрана", а уже потом туда переключается активное окно видеогенератора), а оттуда уже с нормальной частотой 60Гц, независимо ни от каких Орионовских кадров, выводить на VGA.
* Такой VGA-адаптер можно будет в перспективе подключить к любому Ориону-128 или с минимальной доработкой прошивки и к Специалисту - лишь бы на системной шине нужные сигналы были (навскидку, к тем что уже есть, добавить только /IORQ)
последнюю фотку. Дроссели мотать не надо, они продаются наравне с резисторами/конденсаторами. И размер имеют такой же :)
Это хорошо, буду знать.
Касаемо ВИ1 - часы должны быть целиком собраны на макетке. Поддержки с альтеры не будет никакой. Т.е. дешифратор адреса также должен быть на макетке часов.
Хотя, раз мы так активно используем порт F7хх, может вывевти его селект на шину расширения?
В стандартном Орионе-128 сигнал выборки портов F7хх был выведен на системный разъем на контакт B30. Большинство периферийных плат не содержали полный дешифратор, а декодировали только младшие 8 разрядов при активном B30 (активный уровень "0", если мне не изменяет память). Соответственно, очень желательно аналогичный сигнал вывести на системную шину. На схеме SD MSX дешифратор (B30+555ЛЛ1+555ИД14) применен так, что его кроме собственно SD (F762, F763) можно еще использовать для выборки ВИ1 (F760, F761), контроллера дисковода (порты F700, F720 - FDC лениградский вариант) и чего-нибудь на порту F740. Можно слепить "мультикарту" со всем этим добром на борту для старых Орион-128. :)
Видео цветное, на СКАРТ. Три канала цвета с замешанной яркостью, синхросмесь, черно/белый комплексный 16град. (его ты и видел на фотках).
Я, так понял, в этом варианте подключается цветной/чернобелый телевизор или монитор 50гц.?
Мысль с ВГА обдумываю.
Что подразумевает этот вариант?
Касаемо ВИ1 - часы должны быть целиком собраны на макетке. Поддержки с альтеры не будет никакой. Т.е. дешифратор адреса также должен быть на макетке часов.
Совершенно согласен с таким подходом, и не только для ВИ1. По такому принципу необходимо подходить для всей периферии. Если системную шину буфферировать (при этом она станет пятивольтовой!), то нет никаких проблем все подключать к системной шине.
Кстати, 512ВИ1 хорошо подключать к мультиплексированной шине (I8085, I8086, Электроника-60 - не помню процессор и т.д.), и совсем плохо для - I8080 и Z80. Собственно, мультиплексированную шину 512ВИ1 за уши притягивают к I8080 и Z80. Я могу понять это в советское время, когда выбора не было. А сегодня что - тоже нет выбора, или в Орионе эта микросхема так же незаменима, как в Синклере ямаховский муз.процессор?
Думаю, было бы практичней, сделать интерфейс SPI в Альтере. Это упростило бы подключение SD и других микросхем с этим интерфейсом, в том числе и современных микросхем часов.
Хотя, раз мы так активно используем порт F7хх, может вывести его селект на шину расширения?
Совершенно верно. Можно подумать какие селекты еще предусмотреть и вывести на шину, чтобы упростить разработку и подключение периферии.
Можно, по примеру Орион-ПРО, сделать конфигурационный порт 00Н, где, кстати, и переключать тип подключенного монитора (50гц или 60гц) и т.д.
Я, так понял, в этом варианте подключается цветной/чернобелый телевизор или монитор 50гц.?
Монитор не подключается. Только телевизоры.
Что подразумевает этот вариант?
Удвоенное количество выводимых строк за единицу времени. Т.н. "скандаблер". Это дает возможность подключения VGA-монитора в режиме 50Гц.
Думаю, было бы практичней, сделать интерфейс SPI в Альтере. Это упростило бы подключение SD и других микросхем с этим интерфейсом, в том числе и современных микросхем часов.
Уже ответил в соседнем треде :)
Можно подумать какие селекты еще предусмотреть и вывести на шину,
Вот здесь - стоп. Один свободный вывод альтеры для F76х я найду. И всё, господа. Ног больше нет. Ну, может найду в личных запасах еще одну-две :)
Error404
14.02.2010, 22:48
Вот здесь - стоп. Один свободный вывод альтеры для F76х я найду. И всё, господа. Ног больше нет. Ну, может найду в личных запасах еще одну-две :)
В принципе, с дополнительными селектами не критично. Если уж все равно ставить дешифратор, то достаточно только общий селект на /F700 вывести (/F7хх), как в стандартном было.
Вот попытка освоить Schemagee :v2_scare:
Продолжу...
Error404
16.02.2010, 13:07
В принципе, сделать можно.
Тут я вижу 2 пути как по-хорошему надо было бы сделать:
1) Лучше не писать в некой указанный пользователем LBA-адрес, а принять для ORDOS некий номер партиции из зарезервированных, и для "своппинга" RAM_disk-а ORDOS на SD или IDE
2) Адаптировать программу Atlas до работы с IDE и SD. Эта программа, работающая под Ордос, в оригинале позволяет сохранять и считывать файлы ORDOS на дисковод на диск формата CPM (800к). Она есть в одном из ROM-дисков в архиве эмулятора. Аналогично сделать и работу этой утилитой из ORDOS с партицией с файловой системой CP/M, но на SD-карте или IDE-диске. Этот путь сложнее, т.к. надо разбирать на комплектующие Атлас, а затем собирать его заново но уже для IDE/SD.
Полез в Атлас, сижу матерюсь. Похоже, не рассчитано оно на работу с форматами, отличными от "800к, 5 секторов по 1024 и 4 системные дорожки". Вобщем, непригодно - надо переписывать всё кроме "рамочек". Не умеет настраиваться по DPB, какой казалось бы за каким-то хреном на каждом диске записан! А программа - 10к, да туда весь BDOS можно было засунуть.
Update: спокуха! смотрим дальше :)
Error404, может и хрен с ней? Может проще рамочки самому с нуля нарисовать? :)
Error404
16.02.2010, 17:19
Error404, может и хрен с ней? Может проще рамочки самому с нуля нарисовать? :)
Поздно. Я уже нафантазировал Атлас с драйверами устройств (чтобы из общего Гуя работать с FDD/HDD/SD). Теперь пытаюсь понять насколько большой кровью это достигаемо. :)
Поздно.
Ясно.
Ну чтож, я выпил рюмочку кофе за твои успехи :)
Error404
17.02.2010, 11:36
В порядке рацпредложения:
http://zx.pk.ru/showthread.php?t=12086
Как думаешь, имеет смысл? Ножек хватит? Концепция стерпит такое? :)
А то чип становится труднодоставаемым... А программки использующие его существуют, и немало.
Как думаешь, имеет смысл? Ножек хватит? Концепция стерпит такое?
да это давно известно и доступно. Ямаховский чип на VHDL я даже пробовал начать прикручивать. Некоторая затыка состоит в том, что выход модуля - 3 регистра по 8 бит. Чтобы перелопатить их в просто 3 выхода, нужен ШИМ. А мне как-то лениво было его расчитывать и ваять. Совсем нечего будет делать - попробую... Да и ножек осталось ВСЕГО ТРИ... Жалко тратить. Ведь еще желательно бы сигнал SEL вывести (индикация для ВУ что на шине - проц или видеогенератор).
Error404
17.02.2010, 16:30
да это давно известно и доступно. Ямаховский чип на VHDL я даже пробовал начать прикручивать. Некоторая затыка состоит в том, что выход модуля - 3 регистра по 8 бит. Чтобы перелопатить их в просто 3 выхода, нужен ШИМ. А мне как-то лениво было его расчитывать и ваять. Совсем нечего будет делать - попробую... Да и ножек осталось ВСЕГО ТРИ... Жалко тратить. Ведь еще желательно бы сигнал SEL вывести (индикация для ВУ что на шине - проц или видеогенератор).
А зачем ВУ это знать (я про SEL)? Ведь они все равно что-либо читают с ША/ШД только когда активны /WR или /RD, т.е. 100% когда на шине процессор. ПДП ведь у нас не планируется?
А лишние ножки, если их так мало, лучше на расширение ОЗУ потратить. 256к "маловато будет" (с)
А лишние ножки, если их так мало, лучше на расширение ОЗУ потратить. 256к "маловато будет" (с)
Можно и так. Выведу еще адрес, будет 512кб :)
Плодотворно поковырял код igor_t, реализующий преобразование кода PS/2 клавиатуры в орионовскую матрицу.
Попутно маленько подучил Verilog :)
Добавил в раскладку отсутствовавшие ранее символы Ю, Ч, +, ;
И исполнил свое давнее желание сделать сброс прямо с клавиатуры. Теперь сброс вызывается по кнопке "scroll lock".
Морально удовлетворённый, пошел спать :)
Error404
18.02.2010, 23:32
Морально удовлетворённый, пошел спать :)
А я только что с работы. :v2_wacko:
Москва, гребаная соковыжималка.
Освободил ногу альтеры "турбо". Ибо теперь турборежим переключается с клавиатуры кнопочкой F12.
Думаю насчет того, чтобы менять страницы РОМдиска также с клавиатуры а не свитчами. Например, кнопки F10 и F11 можно приспособить на выбор А16 ПЗУ РОМдиска, двух страниц вполне хватит чтобы запихнуть в них набор системного софта ОРДОСа.
Error404
20.02.2010, 10:46
Освободил ногу альтеры "турбо". Ибо теперь турборежим переключается с клавиатуры кнопочкой F12.
Думаю насчет того, чтобы менять страницы РОМдиска также с клавиатуры а не свитчами. Например, кнопки F10 и F11 можно приспособить на выбор А16 ПЗУ РОМдиска, двух страниц вполне хватит чтобы запихнуть в них набор системного софта ОРДОСа.
Вот это я понимаю, конструкторская мысль работает! :v2_thumb:
М.б. таки и на AY8910 ножек хватит? :rolleyes:
И на расширение ОЗУ, и на какие-нибудь левые чипселекты...
А ПЗУ Монитора по прежнему в Верхних адресах ROM-диска? Т.е. если переключается A16, то можно иметь 2 разных Монитора (или к примеру Монитор+Тест)?
На крайний случай можно поставить дешифратор для чипселектов, т.е. для 7-ми чипселектов достаточно будет трёх ножек, для 15-ти - всего 4-х!
А ПЗУ Монитора по прежнему в Верхних адресах ROM-диска?
Нет, Монитор уже давно прошит внутри альтеры. Я упоминал про доступные 7 килобайт "встроенного" ПЗУ циклона. Сейчас занято 2кб под M34zrk.
Можно попробовать повесить на F9 например выбор других 2кб с монитором-запускальщиком СР/М. Но тут есть неудобство, стартовать после включения все равно будет ОРДОС. Или уже не париться, а оставить М34 в покое, а запуск СР/М делать прожкой из РОМдиска? Или (самое удобное) занять одну ногу альтеры под переключатель "Монитор-1 / Монитор-2", чтобы стартовало с заранее выбранным?
Попытавшись разогнать проц до 10Мгц, получил толпу глюков. Встроенное ПЗУ альтеры почему-то стало не успевать выдавать данные на процессор. Особенность встроенного ПЗУ в том, что оно тактируется. И при тактировании на 20Мгц (при процессорном клоке 10Мгц) ПЗУ почему-то "срывается"... Чешу репу и курю.
Внешнее ПЗУ (РОМдиск) само по себе тормоз, там я даже не стал заморачиваться а тупо понижаю клок процессора при обращении к F5. Не хотелось бы и на Мониторе также поступать. Пошел искать выход :)
Error404
20.02.2010, 11:36
Внешнее ПЗУ (РОМдиск) само по себе тормоз, там я даже не стал заморачиваться а тупо понижаю клок процессора при обращении к F5. Не хотелось бы и на Мониторе также поступать. Пошел искать выход :)
Это странно. На 10 МГц (не говоря уже о 5МГц) работали даже древние 573РФ2/5
На крайний случай можно поставить дешифратор для чипселектов, т.е. для 7-ми чипселектов достаточно будет трёх ножек, для 15-ти - всего 4-х!
Выведен только один чипселект для ВУ - F7. Используя в селекторе ВУ микруху типа ЛЕ4 можно легко подключать большое количество девайсов.
---------- Post added at 11:41 ---------- Previous post was at 11:39 ----------
Это странно. На 10 МГц (не говоря уже о 5МГц) работали даже древние 573РФ2/5
Здесь дело может быть именно в реализации. Орион собран на "паутине" МГТФа, предельные скорости на нормальной плате могут вырасти в разы.
Нашел осциллограммы работы альтера-пзу. Действительно, тактовые сигналы должны быть раза в два выше чем процессорные. Это если верить картинке. В реале наверное частота должна быть раза в четыре выше.
Error404
20.02.2010, 11:58
Можно попробовать повесить на F9 например выбор других 2кб с монитором-запускальщиком СР/М. Но тут есть неудобство, стартовать после включения все равно будет ОРДОС. Или уже не париться, а оставить М34 в покое, а запуск СР/М делать прожкой из РОМдиска? Или (самое удобное) занять одну ногу альтеры под переключатель "Монитор-1 / Монитор-2", чтобы стартовало с заранее выбранным?
Можно сделать удобно (на мой взгляд), но не используя дополнительных ножек ПЛИС.
Сделать так: по включению питания или сигналу /RESET (как я понимаю - надо уточнить - в этот момент порт F400 устанавливается в 0) аппаратно единократно считывать состояние клавиатуры с порта F401 (ввод с клавиатуры основного поля клавиш) и считанное значение запоминать в 8-битном регистре (аналог порта 0 в Орион-ПРО).
От состояния битов этого регистра и "плясать". При не нажатых клавишах должно считываться 0FFh - это будет твоя конфигурация по-умолчанию. Соответственно, удерживая определенные клавиши при старте/сбросе можно будет выбирать другие конфигурации.
Можно сделать его похожим по битикам на порт 0 Ориона-ПРО и выдавать его значение CPU при чтении порта 0h (по /IORQ - командой IN). Цитирую:
После включения компьютера (или нажатия кнопки "Сброс") режимы'#13#10+
'работы назначаются с учетом состояния DIP-переключателей SW1-SW8:'#13#10#13#10+
' 1 - Наличие дисковода:'#13#10+
' On - есть, Off - нет;'#13#10+
' 2 - Наличие жесткого диска:'#13#10+
' On - есть, Off - нет;'#13#10+
' 3 - Тип клавиатуры:'#13#10+
' On - MC7007 (основная клавиатура), Off - PK-86;'#13#10+
' 4 - Рабочая страница ОЗУ для внутренней CP/M-80 из ROM2:'#13#10+
' On - 2, Off - 1;'#13#10+
' 5 - Наличие контроллера символьного дисплея:'#13#10+
' On - есть, Off - нет;'#13#10+
' 6 - Запуск внутреннего Меню после сброса:'#13#10+
' On - есть, Off - нет;'#13#10+
' 7 - Тип загрузки операционной системы:'#13#10+
' On - внутренняя (ПЗУ), Off - внешняя;'#13#10+
' 8 - Режим работы:'#13#10+
' On - "Pro" (CP/M-80), Off - "Orion-128" (ORDOS)
1=D0, 2=D1, 3=D2, и т.д.
Для переключения "ПЗУ с загрузкой Ордос или ПЗУ с загрузкой CP/M" используем бит D7.
Для переключения "ПЗУ в памяти ПЛИС либо внешняя ПЗУ" (если захочешь сделать такую настройку аппаратно) - D6
Ну, как идея?
UPDATE. По включению питания или /RESET ВВ55 переключит все порты на ввод, что неудобно для этого решения. Т.е. надо подумать как передавать "0" через нажатые клавиши, если порт 0F400, обычно выдающий эти нули при опросе клавиатуры, изначально в состоянии ввода, а не вывода.
UPDATE. По включению питания или /RESET ВВ55 переключит все порты на ввод, что неудобно для этого решения. Т.е. надо подумать как передавать "0" через нажатые клавиши, если порт 0F400, обычно выдающий эти нули при опросе клавиатуры, изначально в состоянии ввода, а не вывода.
Тут фигня такая, что ВВ55 нет ни на F4, ни на F5 :)
Клавиатура ПЦ должна проинициализораваться после включения, только после того сигналы с клавы идут в Орион. Посему удержание клавиши при включении не прокатит.
---------- Post added at 12:15 ---------- Previous post was at 12:13 ----------
Можно сделать сброс в другой Монитор-2 по Fх, но до этого все равно заработает Монитор-1. Или переключатель внешний решит все проблемы.
---------- Post added at 12:21 ---------- Previous post was at 12:15 ----------
Для решения вопроса с пзу альтеры попытаюсь еще раз использовать PLL (аппаратный синтезатор частоты). В первый раз у меня не заработало. Может и получится, тогда подам на ПЗУ клок 40Мгц.
balu_dark
20.02.2010, 16:00
женя пробуй сразу флэш ставить - он намного быстрее чем пзу. насколько помню есть флэш даже в дипе - биосы там всякие разные. или юзай датафлэш.
женя пробуй сразу флэш ставить - он намного быстрее чем пзу. насколько помню есть флэш даже в дипе - биосы там всякие разные. или юзай датафлэш.
Я обычными ПЗУ и не пользуюсь :)
Флеши W29EE011 и AT29C010. Но они тормозные - цифирка 12 (120нс).
balu_dark
20.02.2010, 18:05
Блин - тогда прямая дорога к флэш 28 серии. только по моему они все tsop. надо поискать есть ли они в plcc или что у нас там еще есть относительно паябельное при массовой сборке .
Блин - тогда прямая дорога к флэш 28 серии.
28 серии у меня полно. только флешер эту серию не берёт.
Запустилось PLL с умножением частоты на 2.
Теперь ПЗУ (и клавиатура) работают на 40Мгц.
Турборежим 10Мгц поехал, навожу лоск :)
balu_dark
20.02.2010, 18:35
а какой у тебя флэшер?
РОМдиск так и поехал на 5 (10) Мгц. приходится при обращении к нему "сбрасывать скорость". Ну да и фик с ним, пускай будет так.
Теперь проблема другая - что делать с турборежимами.
Я предлагаю делать переключение между 5 и 10Мгц, режим 2.5Мгц забыть и использовать его только для работы с РОМдиском.
---------- Post added at 18:37 ---------- Previous post was at 18:37 ----------
а какой у тебя флэшер?
Местный, от Skyther'a
Error404
21.02.2010, 13:21
РОМдиск так и поехал на 5 (10) Мгц. приходится при обращении к нему "сбрасывать скорость". Ну да и фик с ним, пускай будет так.
Теперь проблема другая - что делать с турборежимами.
Я предлагаю делать переключение между 5 и 10Мгц, режим 2.5Мгц забыть и использовать его только для работы с РОМдиском.
Меня 5/10 устроит. Но в старые 8080 игрушки играть на 5 Мгц будет трудновато.
Меня 5/10 устроит. Но в старые 8080 игрушки играть на 5 Мгц будет трудновато.
Сделал переключение 5/10 по F12, автоматическое торможение до 2.5 на портах РОМ-диска. ИМХО, бороться за большую скорость работы РОМдиска не надо, итак все открывается - моргнуть не успеешь.
Интерфейс SD на 10Мгц работает нормально.
В меню РОМдиска (VC) работать на 10Мгц просто нереально, курсорная полоска летает как бешеная :)
Но в Бейсике вполне юзабельно, видать там работа с клавиатурой по другому организована.
Да, PLL я снес нафик. Глюкодром с ним выходит нереальный. Вплоть до "плывущего" влево-вправо крана. Не зря написано в даташитах, что для PLL нужно питание спец. образов подводить. Сейчас выловил режим альтера-ПЗУ, когда оно прекрасно работает и на низком клоке (10Мгц).
Error404
21.02.2010, 19:25
В меню РОМдиска (VC) работать на 10Мгц просто нереально, курсорная полоска летает как бешеная :)
В CPM и ZX-игрушках это не проблема - они привязываются к прерываниям 50Гц.
Для Ордос можно сделать Монитор с измененными константами скорости автоповтора, чтобы нормально работало на таких частотах.
Для Ордос можно
Неа. НУЖНО :)
---------- Post added at 22:01 ---------- Previous post was at 22:01 ----------
Как дела с атласом? ;)
Error404
22.02.2010, 10:56
Неа. НУЖНО :)
---------- Post added at 22:01 ---------- Previous post was at 22:01 ----------
Как дела с атласом? ;)
С Атласом пока никак. Он написан в классическом стиле "как не надо делать" -ни на что не настраивается (а параметры системных областей CPM на HDD другие, но стандартно описанные в DPB в boot-секторе), а переделать весь алгоритм имея только дизассемблерный листинг - это долго и уныло. Я вроде начал, но по мере углубления понял - только зароюсь. Наверное позже напишу что-нибудь с нуля.
Первым делом буду делать CPM - там хоть понятно что надо делать. Надо только время выбрать - на работе выкроить время пока не получается, работать заставляют, а дома моё движение в сторону компьютера рождает скандал. :)
Первым делом буду делать CPM - там хоть понятно что надо делать.
Ну и добре :)
А я решил по поводу Праздника совершить подвиг - дорисовать схему Орион-2010. :v2_blink:
http://narod.ru/disk/18182568000/Orion2010.rar.html
Там же найдете и комплектацию.
Все файлы проекта для Квартуса 9.0 sp1 в архиве:
http://narod.ru/disk/18146599000/beta_0.50.1.rar.html
Ну и чтоб народ не думал, что его просто дурят, снял коротенькое видео на ТВ-тюнере. Файлик пришлось сжать DivXEncoder'ом, ибо размер вышел за 30Мб. Качество соответственно пострадало :( :
http://narod.ru/disk/18146839000/lv01_HomeCinema.avi.html
Звук добавлять не стал, ибо лень со шнурками возиться. Но заверяю, что бипер вполне биперит! :v2_walkm:
В "фильмЕ" Ори работает на частоте 5Мгц. Только в "бегущей строке" Sokoban'a я включал 10Мгц, это хорошо заметно на экране :)
Так что, с Наступающим всех Настоящих Мужуков! :v2_cheer:
:v2_cheer:Огромный респект за реализ, тебе, ewgeny7. Ведиколепный девайс!
Всех с праздником!:v2_walkm:
Девайс замечательный получился. Только вот зря ты шину слотовой не сделал, приближенной к Спеку. Глядишь на Ори и NeoGS заработал бы :)
и еще чего нибудь. :) Ну это мое мнение, на которое можно не обращать внимание :)
По поводу Sokobana со строкой - это как раз пример как нельзя скроллы делать :)
Только вот зря ты шину слотовой не сделал, приближенной к Спеку.
Это релиз беты 0.50. Шина находится пока under обсуждением, получится сделать аналог ZX-BUS - значит замечательно.
До релиза 1.0 пока еще дожить надо.
Нужно учитывать, что процессорные сигналы здесь имеют актиный уровень 3.3 вольта. Для фтыкания устройств со спектрума нужно аккуратно прикидывать, пойдет ли оно в принципе по сигналам. Или можно сразу предусмотреть шинные формирователи типа АП6. Но ИМХО - ту "ёлку" лучше подключать уже как самостоятельное внешнее устройство, чтобы не городить огород на маленькой плате Ори.
Нужно учитывать, что процессорные сигналы здесь имеют актиный уровень 3.3 вольта. Для фтыкания устройств со спектрума нужно аккуратно прикидывать, пойдет ли оно в принципе по сигналам. Или можно сразу предусмотреть шинные формирователи типа АП6.
Для согласования между 3,3 и 5 вольтами можно применить вот эту АП6 - sn74lvc4245 Так что на этот вопрос уже есть ответ :)
ewgeny7, ты просто молодец. Очень понравилось видео. Жду с нетерпением выхода реализа. Всех с праздником!
Для согласования между 3,3 и 5 вольтами можно применить вот эту АП6 - sn74lvc4245 Так что на этот вопрос уже есть ответ
Ну вот, уже есть ценные рацпредложения :)
Судя по логике вещей, понадобится четыре корпуса. Три на адреса и сигналы управления, один - двунаправленный на ШД, переключение по сигналу RD. В общем, аналогично Скорпионовской "ёлке".
Погонял на Орионе спектрумовские Ball Breaker, Soldier of fortune и Eagle Nest.
Каким образом бы переделать Exolon из файла для СР/М в файлик для ОРДОС?
Эта игрушка ИМХО самый лучший тестер на безглючность, задействует все навороты Ориона. Поскольку СР/М временно не работает, то... ;)
ewgeny7, я думаю, если она не подгружает во время работы ничего, то можно просто загрузить файл в память (я не знаю, можно ли в СР/М загрузить файл без автозапуска), перейти в ОРДОС и там уже командой S сохранить файл. Только ещё необходимо знать начало и длину файла.
А я решил по поводу Праздника совершить подвиг - дорисовать схему
Это очень хорошо. Схема, хотя и не очень сложная, но плохо читаемая при шинном построении. Поэтому,по окончании (или это конечный вариант?), необходимо сделать список связей. В PCAD это делается, а вот в Квартусе - не знаю, но думаю, что тоже можно. Это упростит чтение схемы и её повторение. Иначе народу придется его делать вручную, чтобы не потерять связи.
Судя по логике вещей, понадобится четыре корпуса. Три на адреса и сигналы управления, один - двунаправленный на ШД, переключение по сигналу RD. В общем, аналогично Скорпионовской "ёлке".
Думаю, необходимо сразу на основной плате закладывать "ёлку", с тем, чтобы системная шина имела стандартные 5-вольтовые сигналы. Кому это не нужно - не будут впаивать в плату шинники, а вставят перемычки.
ewgeny7, я думаю, если она не подгружает во время работы ничего, то можно просто загрузить файл в память (я не знаю, можно ли в СР/М загрузить файл без автозапуска), перейти в ОРДОС
Только для того надо чтобы СР/М работал :)
А этого сейчас нет, ждем подвигов со стороны Error404.
Опробовал спектрумовские Saboteur1 и великий и могучий Quazatron. 3D-графика на Орионе впечатляет :)
Это очень хорошо. Схема, хотя и не очень сложная, но плохо читаемая при шинном построении.
Не совсем понял... Какие списки связей? Точнее, что это??? Извините безграмотного :)
Для разводки платы нужно "собирать в кучку" три основные шины - D0..D7, D8..D15 и A0..А16. Они обеспечат безглючную работу и возможность наращивать скорость.
Всё остальное не требует каких-либо ухищрений.
Елка на плате - ну, это уже вам видней... При наличии елки нужно автоматом и слот ставить, и разводить его по образу и подобию ZX-BUS. Получим автоматом очень неплохие готовые устройства расширения со Спектрума.
А я пока "изобретаю" ВГА-вывод...
---------- Post added at 19:27 ---------- Previous post was at 17:30 ----------
Добавил функцию выбора страниц РОМдиска по F11. Надоело переключатель на плате мучить :)
ewgeny7, есть мулятор с работающей там СР/М. Перенести можно на муляторе, а на реал записать уже совсем не проблема.
... Схема, хотя и не очень сложная, но плохо читаемая при шинном построении... необходимо сделать список связей...
Ничего подобного, все хорошо читается и просматривается. В PCADе сижу лет пятнадцать (такая вот зависимость:v2_yahoo:) и ничего сложного в переносе схему не вижу. Схемы нужно переносить ручками. Всякие export/import схем и связей не переношу.
Господа, прошу прощения, но как и полагается отловил в первой выкладке схемы несколько глюков.
Рисовал я в Schemagee, и каким-то образом "отвалились" несколько наименований цепей.
Исправил это, внес изменения по результатам сегодняшнего ковыряния, нашел одну свою ошибку. Перезалил схему.
Для удобства, на первой странице темы добавил ссылку на своё сообщение с выкладками, дабы не рыться в поисках его.
---------- Post added at 21:23 ---------- Previous post was at 21:19 ----------
Может для удобства выложить и сам редактор с файлом схемы? Там, по крайней мере, можно "подсветить" одноименные цепи.
---------- Post added at 21:30 ---------- Previous post was at 21:23 ----------
http://narod.ru/disk/18183361000/Orion.rar.html
Завтра вечером удалю, ибо варез.
---------- Post added at 21:37 ---------- Previous post was at 21:30 ----------
ewgeny7, есть мулятор с работающей там СР/М. Перенести можно на муляторе, а на реал записать уже совсем не проблема.
не получается...
Я пробовал в отладчике своего эмулятора сохранять файл, но во-первых, он в самом начале пытается определить тип процессора и тип ОС (там есть сообщения "только для z80" и "только для Altair dos" и обращение call 0005h), во-вторых, на обычном Орионе запустить не удалось, даже с процессором z80, т.к. используется страничная адресация Z80-Card-II.
Error404
23.02.2010, 23:55
Я пробовал в отладчике своего эмулятора сохранять файл, но во-первых, он в самом начале пытается определить тип процессора и тип ОС (там есть сообщения "только для z80" и "только для Altair dos" и обращение call 0005h), во-вторых, на обычном Орионе запустить не удалось, даже с процессором z80, т.к. используется страничная адресация Z80-Card-II.
Видимо, игруха использует диспетчер 16к. Многие ленинградские адаптации ZX-игр его используют. В Орион2010 диспетчер 16к реализован, игра работать будет.
Да она работала из под СР/М. Просто ИДЕ-интерфейс сейчас разбомблем за ненадобностью...
Я пробовал в эмуле сохранить образ памяти наугад, но ничего путного из этого не вышло, разумеется.
Я подправил exolon, чтобы он в начале не дёргался к "пятой точке", но без Altair DOS он почему-то всё равно не работает.
В августе 2009 я выкладывал exolon, который не требует лишних телодвижений для запуска из под ORDOS.
ivagor,
"Вложение не существует или не указан идентификатор (номер). Если вы уверены, что использовали правильную ссылку, свяжитесь с администрацией"
Страница 15 этой темы.
Error404
24.02.2010, 14:23
Я подправил exolon, чтобы он в начале не дёргался к "пятой точке", но без Altair DOS он почему-то всё равно не работает. И грузить его нужно во вторую карту памяти.
Все это оттого, что игры на HDD-образе упакованы упаковщиком и перед стартом распаковываются, одновременно перемещаясь из рабочей страницы CPM в страницу "0" (см. во вложении). Упакованные содержат в имени символ "#". Это я сделал такой алгоритм старта и соответственно проверку на Альтаир ДОС :rolleyes: , т.к. другие CPM Ориона не несут информации о номере рабочей страницы ОЗУ (это всё что требуется для загрузчика).
Зато теперь игры занимают на диске меньше по размеру на 25-50%, и состоят из одного файла, а не как раньше из двух - загрузчика (который не проверял номер рабочей страницы и поэтому не работал под Altair DOS, а она пока единственная с поддержкой HDD) и собственно неупакованного кода игры.
То вложение я сам удалил, т.к. IMHO форум не место для постоянного хранения файлов. Насколько я помню, Вы скачали этот файл и проверили его.
Вот дубль exolon для orionz (http://retrocomp.narod.ru/exolon.zip)
Вы скачали этот файл и проверили его.
Было дело, вот только с той поры я уже переустанавливал винду аварийно :(
Теперь заново архивы собираю.
Спасибо за файлы! :)
http://narod.ru/disk/18210883000/lv05_HomeCinema.avi.html
Exolon. Замечательная игрушка :) 3 мегабайта
http://zx.pk.ru/showpost.php?p=260102&postcount=702
Немножко VGA-картинок...
Не совсем понял... Какие списки связей? Точнее, что это??? Извините безграмотного :)
Видимо, несколько вольно применил термин. Ниже Вы поймете, что я имел ввиду.
В PCADе сижу лет пятнадцать.... Схемы нужно переносить ручками...
Так кто же спорит. Можно сидеть и 20 лет, работать по набитой за годы методике и считать, что так наиболее удобно. Но это субъективно.
Я имел ввиду другое. И ewgeny7 это подтвердил в своем посте, который идет за Вашим. Когда есть список соединений, то очень легко проверяется схема от случайных "выпадений". И не только!
Так вот, перенося схему в PCAD "ручками" (а как еще в данном случае?), имея список соединений, Вы легко проверяете сколько соединений имеет данная цепь. При этом не нужно сидеть с карандашом над бумажной простыней, и скрупулезно подсчитывать, на какие микросхемы приходит данный сигнал, и не пропустил ли ты что-то. В этот момент, собственно говоря, и вкрадываются ошибки в будущую печатную плату - ошибки автора + Ваши ошибки при переносе схемы "ручками".
Так схема, то не очень большая, тем более прослеживаются задумки автора по подключению отдельных цепей, группировка шин при назначении пинов в Алтере тоже видна...
прослеживаются задумки автора по подключению отдельных цепей, группировка шин при назначении пинов в Алтере тоже видна
Да, принципиальная схема здесь проста в принципе, простите за каламбур :)
Я потому и не рисовал ее никогда до этого момента, что она (схема) в принципе банальна, легко держится в голове. Шины данных и адреса цепляются к ОЗУ-ПЗУ именно туда, куда они и должны цепляться по определению. На альтере подвод этих шин не принципиален, "распиновку" можно (и нужно) менять для удобства разводки платы. Проще программу скорректировать, чем мучиться прокладывая дорожки.
Поэтому перетасовывайте сигналы на альтере как вам заблагорассудится. Разумеется, имеются ввиду шинные сигналы, видеовыходы, управления памятью.
Для контроля "куда идет этот сигнал" я выкладывал чуть выше файлы редактора схем и саму схему в его формате. Одноименные цепи в редакторе прекрасно видны.
Error404
03.03.2010, 09:27
Интересно, а сколько свободных ножек осталось у ПЛИС? И сколько вентилей (в %)?
Интересно, а сколько свободных ножек осталось у ПЛИС? И сколько вентилей (в %)?
ножки - видно на схеме (штуки четыре).
% - около 12. Это много.
Под что планируешь использовать?
Только что, расширяя ФлешРОМ до 4 страничек, добавил сигнал А17. Ну и чтоб функциональность не пропадала, повесил на этот сигнал и расширение памяти ОЗУ до 512кб :) Что добавить в схеме - вроде и так понятно...
"Верхняя" память ОЗУ доступна через порт F9 (бит D2), разумеется. Фуллрам также ее увидит всю, диспетчер окна памяти (16кб) этой памятью не рулит! Это уже обсуждалось, решили что не стоит этого делать.
Далее, для ВГА конвертера понадобится одна или две ноги. Вот так они и тают...
---------- Post added at 19:56 ---------- Previous post was at 19:54 ----------
Остаётся добавить А18 до мегабайта, и ног не останется :)
Error404
03.03.2010, 21:57
Далее, для ВГА конвертера понадобится одна или две ноги. Вот так они и тают...
Остаётся добавить А18 до мегабайта, и ног не останется :)
Что, 2 ноги для AY8910 никак не остается? :(
Что, 2 ноги для AY8910 никак не остается?
для тех, кто в танке - я уже давно всеми правдами и неправдами пытаюсь отмазаться от этой АУ... Просто потому, что не знаю толком как эту ШИМ смастрячить :) Как нибудь напьюсь для храбрости, и на одном УРА сделаю АУку :)
---------- Post added at 23:33 ---------- Previous post was at 22:36 ----------
на одном УРА сделаю АУку
Не, это будет на втором.
На первом УРА я придумаю где мне взять 6 Мгц для YM2149 или 28 Мгц для AY8910... Пипец...
---------- Post added at 23:40 ---------- Previous post was at 23:33 ----------
Интересно, а если микшировать каналы по правилу (А+В)/2, звук удобоваримый получится? К примеру, на одном канале 127, на другом 11, получим 69...
Интересно, а если микшировать каналы по правилу (А+В)/2, звук удобоваримый получится? К примеру, на одном канале 127, на другом 11, получим 69...
Нормально, только там ведь 3 канала... А,В,С
для стерео можно так: L=A+B/2; R=C+B/2
для моно так: (A+B+C)/4; (делить на 4 просто удобней)
Нормально, только там ведь 3 канала... А,В,С
В реале - да, три.
В VHDL - два всего... Точнее, уже один :) Пошел искать 6 мегагерц...
Выделил одну ногу, обозвал ее ay_sound.
Состряпал порт FDxx, к нему изобрел DAC по принципу ШИМ и вывел на ay_sound.
Вроде работает. Записывая в FDxx числа от 00 до FF плавно меняется напряжение на выходе. Шаг замерил, 0,013 вольт
AY пока не прилеплял, но готовый COVOX мы уже имеем :)
Вопросик такой - а чем выровнять (отфильтровать) напряжение на выходе ШИМ?
Логика подсказывает, что нужно ставить RC фильтр, с нагрузочным резистором параллельно конденсатору, и через электролит выводить "потребителю".
Если верно, то примерно какие номиналы RC-фильтра? Если неверно, то как лучше?
Параметры ШИМ - частота клока 2.5Мгц, 256тактов на вывод одного байта, 3,25 вольт максимум. Напряжение выхода определяется скважностью ("заполнением") выводимого блока из 256 бит.[COLOR="Silver"]
Error404
04.03.2010, 21:45
Нормально, только там ведь 3 канала... А,В,С
для стерео можно так: L=A+B/2; R=C+B/2
для моно так: (A+B+C)/4; (делить на 4 просто удобней)
Думаю, правильнее всего было бы делать стерео по вышеприведенной формуле (к уже имеющейся ножке N 53 "SOUND" надо добавить всего одну - получим SOUNDL и SOUNDR). И туда же замешивать еще и биперный звук (что выдавался на SOUND) по "ИЛИ" со звуком AY одинаково в оба канала (и в левый и правый).
Путано, но думаю идея понятна. :)
Путано, но думаю идея понятна.
Идея то понятна, но имеет свои затыки.
Например, обычный sound имеет два состояния - 0 и 1. В случае с нулем он спокойно смешается с АУ. А если единица? Тут надо курить вдумчиво... Например, прикинуть как оно себя поведет по XOR.
А насчет стерео - а оно надо? В исходнике АУ каналы итак уже смикшированы в один, грех этим не воспользоваться.
Error404
04.03.2010, 22:08
А насчет стерео - а оно надо? В исходнике АУ каналы итак уже смикшированы в один, грех этим не воспользоваться.
Не знаю. Если это сложно (требуется сильно переделывать исходник) - может, и не надо. Не той сложности музЫка, в-основном озвучка игрушек.
Не той сложности музЫка, в-основном озвучка игрушек.
Не в исходниках дело, можно вытащить и два и три канала.
Жалко ноги альтеры тратить, и в самом деле, кто будет цеплять к Ориону стереоколонки??? :)
Идея то понятна, но имеет свои затыки.
Например, обычный sound имеет два состояния - 0 и 1. В случае с нулем он спокойно смешается с АУ. А если единица? Тут надо курить вдумчиво... Например, прикинуть как оно себя поведет по XOR.
А насчет стерео - а оно надо? В исходнике АУ каналы итак уже смикшированы в один, грех этим не воспользоваться.
Нужно максимальные значения всех каналов расчитать так, чтобы сумма их максимальных значений не переваливала за 255, иначе будут трески и искажения ну например, вес канала А(max)=127; В(max)=63; BEEPER(1)=63, тогда L=A+B+BEEPER=127+63+63=253.
Если есть еще каналы для миксования, то максимальный вес каждого канала нужно еще уменьшить.
а BEEPER(1)=63; BEEPER(0)=0
Error404
05.03.2010, 11:49
Не в исходниках дело, можно вытащить и два и три канала.
Жалко ноги альтеры тратить, и в самом деле, кто будет цеплять к Ориону стереоколонки??? :)
А чтобы определиться по ногам, давайте прикинем, чего нам в "базовой конфигурации" не хватает для полного счастья. А точнее для, так скажем, сбалансированности.
Мне не хватает возможности выхода на VGA, пускай и через конвертор (что-то там возможно придется дополнительно выводить). Далее если ноги остались, то в порядке убывания приоритета: +ножка A18 для адресации 1М ОЗУ (т.к. по-любому 2 корпуса ОЗУ это либо 2х128к либо 2х512к. Чипы ОЗУ на 256к не знаю есть ли, и доставаемы ли), +ножка для стерео AY (раз уж звук так или иначе все равно будет в базе в FPGA, и останутся ножки, и реализуемо, то почему бы не сделать?).
Все остальное (RS-232, FDC, IDE, RTC) - при желании собирать на плате расширения.
Порылся по альтере. Нашел одну ногу свободную, одну только на вход, одну возможно освободить (инверсный reset для ВВ55 на ней сидит).
Одна нога понадобится для VGA. Тут два пути - или нее выведем клок 10Мгц для ВГА-конвертера, или (если доделаю онбоард ВГА) второй сигнал синхронизации.
Одну (освобожденную) займем под А18.
На "только вход" вероятно повесить WAIT или IORQGE. В первом случае освободим одну двунаправленную ногу (на которой WAIT сидит сейчас).
И всё...
Error404
05.03.2010, 14:05
Порылся по альтере. Нашел одну ногу свободную, одну только на вход, одну возможно освободить (инверсный reset для ВВ55 на ней сидит).
Одна нога понадобится для VGA. Тут два пути - или нее выведем клок 10Мгц для ВГА-конвертера, или (если доделаю онбоард ВГА) второй сигнал синхронизации.
Одну (освобожденную) займем под А18.
На "только вход" вероятно повесить WAIT или IORQGE. В первом случае освободим одну двунаправленную ногу (на которой WAIT сидит сейчас).
И всё...
Т.е. кроме A18 и VGA можно сделать еще стереозвук? :)
Кстати, если кварц кратен 10 МГц, то на ВГА-конвертер тактирование можно подавать минуя ПЛИС - непосредственно с генератора (или с делителя если кварц на 20/40/... МГц). Освободится нога.
Кстати, если кварц кратен 10 МГц, то на ВГА-конвертер тактирование можно подавать минуя ПЛИС - непосредственно с генератора (или с делителя если кварц на 20/40/... МГц). Освободится нога.
Гениально :)
А где мы возьмем делитель? Еще одну логику на плату ставить? Брррр...
Лучше дождаться от zst полностью рабочей прошивки конвертера и сделать делитель внутри альтеры конвертера.
Т.е. кроме A18 и VGA можно сделать еще стереозвук? :)
Ну, понятно. Error404 уже по третьему или пятому кругу все "лепит" свои мечты, а ewgeny7 их с начала отвергает, а затем благосклонно "изобретает"!
Ребята! У Вас когда-нибудь будет законченная, ну хотя-бы бетта-версия вашего "изделия"? Или все удовольствие только в изысканиях и болтовне на форуме? Вы посмотрите, сколько народа тусовалось в этой ветке, а сейчас только вы двое, да еще кто-нибудь иногда бросит реплику. Этому проекту уже второй год, а нет никакого результата (извините, но картинки не в счет)! Если уже есть базовый вариант (как утверждает автор), то почему нельзя выложить достаточно информации для повторения (или это не предполагалось?). Пусть орионщики лепят. Схема-то не изменяется. Глядишь и печатные платы стали-бы разводить, и прошивки тестировать. Оставалось бы только, исправлять ошибки, выкладывать новые прошивки, в том числе и для Error404 с его мечтой - ""А18 со стереозвуком".
Ребята! А может быть и выкладывать-то, кроме разговоров, нечего?
pvlad, ты бы тоже почаще заходил, чтоли. Мож и организовал бы работу как нибудь. Мне, как нетрудно догадаться, процесс интересней результата.
Схема выложена, исходники выложены. Я, вообщето, почему-то расчитывал что процесс разводки платы уже близится к финалу. Или что-то еще нужно для счастья? Дать больше материала я не могу. Учитывая, что разводка потребует время, логично было продолжить изыскания в любом направлении (полезном), чтобы де-факто внести минимальные изменения в разводку. А при невозможности - откатить назад. Где мои мысли нелогичны?
pvlad, ты бы тоже почаще заходил, что-ли. Мож и организовал бы работу как нибудь.
Ну, это не справедливо. Если, хотя бы изредка посматривать в подвал страницы, где написано:"Здесь присутствуют", то там меня можно увидеть постоянно. Господи! Да кто же еще, кроме автора своего детища будет так внимательно следить за его судьбою, особенно когда он увидел, что его детищу дают вторую жизнь!
Мне, как нетрудно догадаться, процесс интересней результата.
Я это уже понял. К сожалению, я отношусь к тем, кому важен полученный результат. Подключившись к вашей группе, мне хочется всеми силами добиться результата. Реального, повторяемого радиолюбителями. Если у Вас будет добрая воля на это - я постараюсь сдержать свое слово.
Схема выложена, исходники выложены.
Я прошу меня извинить, но это не серьезное утверждение. Выложены какие-то полуфабрикаты, пригодные для общего ознакомления с проектом, т.с чтобы "клиент заглотил крючек". Мне представляется, что на данном этапе, необходимо остановить дальнейшие "изыскания" и подытожить проделанную работу. Свое видение Ориона я уже высказывал на этом форуме. Оно, к сожалению, не совпадает с идеями Error404. Я за классический вариант, пусть и с Z80 (но без прибамбасов изобретателей-одиночек), либо за Орион-контроллер. Последнее, в силу объективных причин в настоящее время, выполнить не возможно. Мы это обговаривали. Значит остается первый вариант. Я уже говорил и еще раз повторю, что Ориону-128 нахрен не нужен А18 и AY со стереозвуком. А вот RS-232 нужен прежде всего для того, чтобы загонять код в память Ориона для выполнения из кроссредств на РС. Я уже говорил, что сегодня у народа нет программаторов, чтобы прошивать РОМ-диск на параллельной флешке или РФ-ке. У Вас есть программатор, чтобы прошить флешку серии "27", а у меня нет, и я не один такой "бедный". Значит нужен интерфейс I2C или SPI для современных флешек. Последний легче аппаратно воплотить, да и сколько ножек альтеры можно сэкономить! Я это доказывал не один уже раз. Осталось только, чтобы Вы меня хотели слышать.
Я, вообщето, почему-то расчитывал что процесс разводки платы уже близится к финалу. Или что-то еще нужно для счастья? Дать больше материала я не могу. Учитывая, что разводка потребует время, логично было продолжить изыскания в любом направлении (полезном), чтобы де-факто внести минимальные изменения в разводку. А при невозможности - откатить назад. Где мои мысли нелогичны?
Евгений! Вы невнимательно читаете мои посты. Я в самом начале заявил, что займусь конструктивом, платой и широким продвижением Ориона-2010 (если Вы позволите) только после того, как на своем рабочем столе увижу работающий Ваш проект. Да! На макетке, тем более, что ее спаять можно за 2-3 часа, растягивая удовольствие. Понятно, что запустив Ваш проект (как обычный лузер!) я уже смогу в доступной и популярной форме рассказывать остальным простым смертным, как все это реально повторить (а Вы, вместе с Error404, можете продолжать разработки дальше!). А печатка - это не сложное дело. В ней простая топология (это вам не Орион-ПРО со 120 корпусами!), и тот кто выложит ее первым, тот и застолбит "стандарт" на распределение ножек. Поэтому, не нужно торопиться. Поверьте мне, как только появится реальная возможность повторить Ваш проект хотя-бы на макетке (а это не сложно, если есть четкая схема, прошивки, методические указания по программированию и настройке) - платы не заставят себя долго ждать. Народ поверит, что это реально работающий проект - Орион-2010, а не экспериментальные изыскания. Поэтому печатная плата - не главное. А первый эксперимент на "кроликах" (по внедрению проекта в массы!) можно проводить на мне.
Реального, повторяемого радиолюбителями.
Извините, не вижу проблем. Собирайте! Тем паче, если на макетке. Всё выложено.
Схема есть, прошивка есть. Байтбластер собирать всё равно придется, радуем что его сборка займет полчаса и 10 рублей денег.
Последний легче аппаратно воплотить, да и сколько ножек альтеры можно сэкономить!
Во первых, сложнее. Во вторых - съэкономим ОДНУ ножку, зато еще две-три потратим на последовательный интерфейс.
если есть четкая схема, прошивки, методические указания по программированию и настройке) - платы не заставят себя долго ждать.
Схема есть. Прошивки есть, и развиваются. Это относится и к железу проекта и к софту. Так берите и паяйте, для кого я всё выкладывал???
Кто сможет собрать комп на макетке, для того не составит труда собрать байтбластер и флешер.
А не имея минимального инструментария, зачем браться за сборку микропроцессорных систем?
Видеоответ для ewgeny7: демонстрационная программа, кадр из которой запечатлен на обложке журнала Радио 10/89. На совсем недавно отлаженном орионе и мониторе 6106!
pvlad, ваша дема!
http://sash-a.nm.ru/MOV0085A.3gp
Сорри за качество, нокла лучше не снимает, но я думаю, что суть понять можно ;).
Завтра выложу подправленную схему и прошивки версии 0.52.2.
Как новую отправную точку. Понравилась что всё работает как часы на "интуитивном уровне" :)
На печатной плате это было бы равнозначно 0.52.2 + 0.5 = release 1.02.2.
Завтра выложу подправленную схему и прошивки версии 0.52.2.
Как новую отправную точку. Понравилась что всё работает как часы на "интуитивном уровне" :)
На печатной плате это было бы равнозначно 0.52.2 + 0.5 = release 1.02.2.
Думаю, в схему можно было бы сразу добавить буферные элементы при выводе сигналов на системную шину. А уж будут их ставить или нет - дело сугубо личное.
Сорри за качество, нокла лучше не снимает, но я думаю, что суть понять можно
Да вполне видно! :)
А что за дема такая? Стало интересно попробовать ее у себя, в турборежимах.
Завтра выложу подправленную схему и прошивки версии 0.52.2.
http://narod.ru/disk/18543926000/ver_0.52.1.rar.html - проект.
http://narod.ru/disk/18543955000/Orion2010_0.52.rar.html - схема.
Добавлен блок сопряжения с ZX-BUS. Сигналов вроде пока не хватает, думаю что еще необходимо добавить.
Дема авторская бейсиковская. Файл назывался REKL.BS. Я брал с диска от CHRV. Там ещё есть файл REK.BS, так там вместо большой надписи *ОРИОН* красуется надпись *ШУЛЬЦ*.
Я брал с диска от CHRV.
Просветите убогого, где такой диск валяется? :)
Нашел, отбой...
Error404
07.03.2010, 22:48
Ну, это не справедливо. Если, хотя бы изредка посматривать в подвал страницы, где написано:"Здесь присутствуют", то там меня можно увидеть постоянно. Господи! Да кто же еще, кроме автора своего детища будет так внимательно следить за его судьбою, особенно когда он увидел, что его детищу дают вторую жизнь!
Я это уже понял. К сожалению, я отношусь к тем, кому важен полученный результат. Подключившись к вашей группе, мне хочется всеми силами добиться результата. Реального, повторяемого радиолюбителями. Если у Вас будет добрая воля на это - я постараюсь сдержать свое слово.
Присутствовать, это недостаточно. :)
Добрая воля безусловно есть, но сильно сдерживает отсутствие времени на хобби. Поэтому что касается меня, то удается выкроить время только на самые интересные (для меня, понятно) куски. Стараюсь выбирать из интересного такие куски, чтобы эти куски были полезны не только мне.
Свое видение Ориона я уже высказывал на этом форуме. Оно, к сожалению, не совпадает с идеями Error404. Я за классический вариант, пусть и с Z80 (но без прибамбасов изобретателей-одиночек), либо за Орион-контроллер. Последнее, в силу объективных причин в настоящее время, выполнить не возможно. Мы это обговаривали. Значит остается первый вариант. Я уже говорил и еще раз повторю, что Ориону-128 нахрен не нужен А18 и AY со стереозвуком. А вот RS-232 нужен прежде всего для того, чтобы загонять код в память Ориона для выполнения из кроссредств на РС.
A18 - только чтобы задействовать ОЗУ из имеющегося (2 чипа по 512к).
Ибо 256к - это предельно мало. Это только CP/M. В 256к никогда не запустить никакую серьезную (сравнимую с CP/M) многозадачную систему с приемлимым быстродействием (т.е. с минимумом свопа на медленный [а он у нас медленный] жесткий диск или SD-карту). Надо иметь в сумме хотя бы 512к, а чипов по 256к все равно нет, надо брать 2х512 (а без A18 терять половину имеющейся емкости - жалко).
Стереозвук в AY мне в принципе тоже не особо нужен. Исключительно если останутся ноги у ПЛИС и желание у Евгения. А моно-AY сделать надо, т.к. место в ПЛИС есть, 1 нога для выхода биперного звука по-любому уже есть - туда же замикшировать и AY. И, что немаловажно, есть сырки AY. И немало софта умеют работать с AY.
А вот RS-232 безусловно нужен в любом виде - в ПЛИС ли, в виде ли отдельных чипов. Но нужны конкретные предложения - схема, подпрограммы. Я с этим пока опыта не имел и наработок соответственно тоже нет. И Евгений без схем тоже врядли чего сделает.
Я уже говорил, что сегодня у народа нет программаторов, чтобы прошивать РОМ-диск на параллельной флешке или РФ-ке. У Вас есть программатор, чтобы прошить флешку серии "27", а у меня нет, и я не один такой "бедный". Значит нужен интерфейс I2C или SPI для современных флешек. Последний легче аппаратно воплотить, да и сколько ножек альтеры можно сэкономить!
Нет никакого смысла в последовательной ПЗУ, т.к. под нее надо переписывать ORDOS. А если надо переписывать ORDOS, то почему не сделать сразу работу с SD-карты? Уж на карту-то в любом кардридере записать можно, это не таракан-микросхема. И меня во всех ноутах есть SD-slot, но нет ничего куда можно подключить программатор (разве что только USB, но таких программаторов у меня нет).
Я сделал Мониторы с загрузчиками с SD (http://zx.pk.ru/showpost.php?p=262906&postcount=31) - они грузят первый сектор а уж что оттуда выполняется - дело хозяйское, чего захотите, то туда и запишете, люой вторичный загрузчик. У меня там будет загрузчик CP/M, но я никому это не навязываю.
В свое время изобретал для 8-разрядных контроллеров страничные менеджеры ОЗУ с защитой и разграничением доступа. А что если такое сделать и для "Ориона" на Z80?
А что если такое сделать и для "Ориона" на Z80?
А что это даст?
А что это даст?
Многозадачность и защиту одной задачи от глюков в другой.
Присутствовать, это недостаточно. :)
Добрая воля безусловно есть, но сильно сдерживает отсутствие времени на хобби. Поэтому что касается меня, то удается выкроить время только на самые интересные (для меня, понятно) куски. Стараюсь выбирать из интересного такие куски, чтобы эти куски были полезны не только мне.
Уважаемый Error404! Я вполне согласен, с Евгением, что Вы у нас ведущий программист этого проекта. Можно сказать, даже, Главный! Я уверен, когда "железо" устаканится, и его запросто можно будет повторить, Вы найдете силы и время, чтобы "спеть" лебединую песню для нового Ориона.
A18 - только чтобы задействовать ОЗУ из имеющегося (2 чипа по 512к). Ибо 256к - это предельно мало. Это только CP/M. В 256к никогда не запустить никакую серьезную (сравнимую с CP/M) многозадачную систему с приемлимым быстродействием (т.е. с минимумом свопа на медленный [а он у нас медленный] жесткий диск или SD-карту). Надо иметь в сумме хотя бы 512к, а чипов по 256к все равно нет, надо брать 2х512 (а без A18 терять половину имеющейся емкости - жалко).
Принципиально я не против. Но такой объем памяти не главное для Ориона. Думаю, вряд-ли стоить делать из Ориона персоналку. Сегодня это не актуально, как в 90-е. Я пытаюсь расставить другие приоритеты. В данный момент есть более важная проблема - отсутствие видеовыхода на ЖКИ-монитор. И не в виде отдельного прибамбаса, а встроенного в Альтеру. А вывод на телевизор - это анахронизм. Из-за этого я не могу повторить этот проект - мне не к чему его подключить.
А вот RS-232 безусловно нужен в любом виде - в ПЛИС ли, в виде ли отдельных чипов. Но нужны конкретные предложения - схема, подпрограммы. Я с этим пока опыта не имел и наработок соответственно тоже нет. И Евгений без схем тоже врядли чего сделает.
Думаю этот вопрос можно решить, если найти готовый код, который эммулирует любой USART. Нет необходимости повторять ВВ51.
Нет никакого смысла в последовательной ПЗУ, т.к. под нее надо переписывать ORDOS. А если надо переписывать ORDOS, то почему не сделать сразу работу с SD-карты? Уж на карту-то в любом кардридере записать можно, это не таракан-микросхема. И меня во всех ноутах есть SD-slot, но нет ничего куда можно подключить программатор (разве что только USB, но таких программаторов у меня нет).
Мы снова возвращаемся, по какому уж кругу, к одному и тому же. Выше, я уже говорил, что не нужно новый Орион акцентировать как персоналку с операционной системой СРМ. Это не серьезно. Под СРМ нет интересного программного обеспечения для нынешнего пользователя. Разве что потешить себя раритетом, но таких немного, а может быть только один и остался.
Этот проект может быть интересен, как управляющий контроллер с фоннеймановской архитектурой. Ну, еще для ностальгирования небольшой кучки орионщиков. Не более. СРМ не та ОС, которая может работать без присмотра в каком-нибудь станке, а собственно для нее Вы и продвигаете SD-карту. Я отстаиваю наличие SPI-интерфейса, который решает проблему и SD-карты, и последовательного ПЗУ. А далее - что кому милей для своих целей.
А что касается ORDOS, то почему бы не переписать. Она хоть и примитивна, но вполне подходит и сегодня для тех целей, которые я пропагандирую.
Я сделал Мониторы с загрузчиками с SD...но я никому это не навязываю.
Очень хорошо! Чем будет больше и разного, тем лучше. Но с Мониторами надо быть очень аккуратным. Плохо, когда дело доходить до абсурда - чуть-ли не для каждой программы нужен свой Монитор. Раньше, некоторые товарищи это делали в пику авторам, и этим гордились, оплевывая авторские стандарты. Почему-то никто не трогает BIOS в РС и при этом успешно решает свои проблемы. На Орионе считалось подвигом застолбить свой Монитор! Когда я вижу кучу Мониторов, для разных целей и случаев - мне смешно и грустно.
Это, извините, не в Ваш адрес.
Конечно, когда таблица векторов находится в ПЗУ, то понятное дело, его не возможно перехватить и подставить свой драйвер. В этом я допустил ошибку, взяв архитектуру Монитора с РК. Нужно было в ПЗУ записать только Монитор-1 для настройки и проверки платы, а далее его отключать и основной Монитор+ORDOS грузить с РОМ-диска. Это я уже потом сделал в ПРО.
Собственно, Мониторы различаются драйвером клавиатуры, ну и еще некоторыми мелочами. Может быть стоить проанализировать все эти Мониторы, начиная с авторского и сделать что-то в PS/2 клавиатуре, чтобы не грузить для каждого случая свой Монитор с своей клавиатурой? Вы не могли бы этим заняться? Затем, мы бы обсудили эту проблему.
---------- Post added at 17:47 ---------- Previous post was at 17:10 ----------
Многозадачность и защиту одной задачи от глюков в другой.
Думаю начинать надо с операционной системы, поддерживающей многозадачность, а затем уж делать аппаратные прибамбасы.
Думаю начинать надо с операционной системы, поддерживающей многозадачность, а затем уж делать аппаратные прибамбасы.
Начинать надо с проектной документации, согласно которой будут разрабатываться и аппаратные прибамбасы, и ОС (и возможно эмулятор, чтобы не ждать аппаратной части). Чтобы написать такую документацию нужно сначала проанализировать аппаратные возможности, т.е. как это всё могло бы работать.
Думаю этот вопрос можно решить, если найти готовый код, который эммулирует любой USART.
Есть у меня проект простого USART. Надеюсь, не будет катастрофы, что скорость у него фиксированная. Для наших объемов информации вполне достаточно будет и 19200. Две ноги требует. Ввод-вывод через регистр. Требуется MAX232 для сопряжения. Ваши комментарии?
Поглядел на новую схему. Ты там АП6 применил в качестве буферов шины. А там с толерантностью ног ПЛИС к 5 вольтам все нормально?
А вот RS-232 безусловно нужен в любом виде - в ПЛИС ли, в виде ли отдельных чипов. Но нужны конкретные предложения - схема, подпрограммы. Я с этим пока опыта не имел и наработок соответственно тоже нет. И Евгений без схем тоже врядли чего сделает.
А вот тут глянь: http://www.fpga4fun.com/SerialInterface.html
А там с толерантностью ног ПЛИС к 5 вольтам все нормально?
Да, у мну ПЗУ дает 5 вольт, ОЗУшки раньше работали также на 5 вольт. Просто стараюсь не напрягать ПЛИС лишний раз.
Думаю начинать надо с операционной системы, поддерживающей многозадачность, а затем уж делать аппаратные прибамбасы.
Дело в том, что если мы хотим реализовать, например, современное ядро RTOS (пусть и 8-ми разрядное), то для обеспечения надежности всей ОС в целом, и необходим этот "прибамбас". Равно как и прерывания аппаратного таймера. Ну и контроллер прерываний, естественно.
и необходим этот "прибамбас". Равно как и прерывания аппаратного таймера. Ну и контроллер прерываний, естественно.
А давайте плюнем на Орион и сбацаем ПиСюк? :)
Равно как и прерывания аппаратного таймера. Ну и контроллер прерываний, естественно.
Можно и без контроллера обойтись, тем более, что команду DI запретить не получится. Единственный шанс переключиться на другую задачу, это будет NMI. Вот на него и повесить таймер.
Единственная проблема, это то, что прерывание возникает в контексте пользовательской задачи, но это можно как раз таки решить аппаратно - при возникновении NMI одновременно подменить и область памяти в нижних адресах, на системную. Непонятно только, что делать, если пользовательская программа тоже работала в этих адресах, или стек там держала. Вообще, переход из режима ядра в пользовательский режим со своими 64Кб тоже требует аппаратной поддержки, поскольку перейти на произвольный адрес без модификации регистров можно только по RET, но желательно при этом не менять стек пользовательской задачи. Т.е. чтение адреса возврата лучше всего реализовать из аппаратных регистров, а не из памяти. Туда же его и сохранять по NMI. Ну или на момент переключения контекста для стековых команд реализовать доступ только к двум байтам по фиксированному адресу, т.е. использовать только младший бит адреса.
Начинать надо с проектной документации, согласно которой будут разрабатываться и аппаратные прибамбасы...
Коллеги! Вот ниже сказано не в бровь, а в глаз! Добавить более нечего! Просто класс!!!!
А давайте плюнем на Орион и сбацаем ПиСюк? :)
Есть у меня проект простого USART. Надеюсь, не будет катастрофы, что скорость у него фиксированная... 19200.
Прекрасно! Но если по ходу реализации удастся скорость увеличить вдвое - будет совсем чудно. Но здесь есть одно маленькое говёнце: у Z80 достаточно примитивная система прерываний. USART без прерываний по получению и отправлению байта - ничего серьёзного. Что придумать, чтобы USART мог сесть на свой вектор прерывания? Какие будут предложения? Нужен какой-то контроллер прерываний, но не для многозадачности (это все баловство!), а для обслуживания девайса. Очень хорошо иметь еще пару векторов на внешних выводах Альтеры, как это сделано в контроллерах. Кроме того, нужен внутренний таймер, имеющий тоже свой вектор прерывания. Не обязательно ВИ53. Можно что-то свое. Регистры управления и загрузки таймера можно посадить на какие-то внутренние порты. Адреса портов придумает Error404! Он у нас главный по этой части! Можно высказывать любые идеи, даже бредовые! Наша задача придумать идею, а ewgeny7 ее проанализирует и сам решит кого послать нахрен! Но это не смертельно!
А вот тут глянь: http://www.fpga4fun.com/SerialInterface.html
А может здесь и SPI найдется?
А может здесь и SPI найдется?
А вы посмотрите :) http://www.fpga4fun.com/SPI.html
А вы посмотрите :) http://www.fpga4fun.com/SPI.html
Я уже смотрел, но этого мало. Будет отлично если ewgeny7 там найдет необходимое!
Error404
08.03.2010, 22:49
Что придумать, чтобы USART мог сесть на свой вектор прерывания? Какие будут предложения? Нужен какой-то контроллер прерываний, но не для многозадачности (это все баловство!), а для обслуживания девайса.
Сейчас я обычно использую режим IM2 Z80. Этот режим допускает иметь в памяти таблицу векторов прерываний, конкретный вектор выбирается считывая значение с шины данных в момент прерывания. В текущей реализации с "пустой" шины всегда читается 0FFh и переход осуществляется по последнему (и пока единственному, кстати) вектору таблицы. Достаточно в момент прерывания выдавать лог."0" на, к примеру, D0 (тогда прочитается 0FEh), и прерываться по предпоследнему вектору таблицы - попадать спецом в обработчик USART.
Этот способ не потребует никаких модификаций в железе текущей конфигурации ПК. Только в софте.
и сам решит кого послать нахрен!
Уже посылаю нахрен. После USART ног свободных нет. Сливайте воду.
---------- Post added at 23:22 ---------- Previous post was at 23:21 ----------
Но если по ходу реализации удастся скорость увеличить вдвое - будет совсем чудно.
Да, поковырял код, можно хоть 115000 с чем-то там делать...
---------- Post added at 23:23 ---------- Previous post was at 23:22 ----------
А может здесь и SPI найдется?
СПИ там найдется. Сувать есть куда, высовывать вот некуда.
---------- Post added at 23:24 ---------- Previous post was at 23:23 ----------
Достаточно в момент прерывания выдавать лог."0" на, к примеру, D0 (тогда прочитается 0FEh), и прерываться по предпоследнему вектору таблицы - попадать спецом в обработчик USART.
Легко.
Error404
08.03.2010, 23:46
Уже посылаю нахрен. После USART ног свободных нет. Сливайте воду.
Как насчет все сделать на одной МСХ ОЗУ? Скажем, одной ИМС емкостью 512к. Как я понимаю, проблема только в реализации видеогенератора? Читать в двух соседних временнЫх "полуфазах" из страниц "0" и "1", одну из "полуфаз" временно хранить в регистре. И в ВГ одновременно выводить точки из ОЗУ (страницы 0), а их цвет из временного регистра (ну, или наоборот).
Помимо уменьшения платы, упрощения разводки и увеличения объема ОЗУ, освободится чертова уйма ножек (порядка семи-восьми). Повторюсь, 256к - это мало. Мне 256к всегда было мало на старом Орионе.
Сделал USART на отправку. Завтра сделаю чтение. Спокойной ночи! :)
---------- Post added at 23:49 ---------- Previous post was at 23:46 ----------
Как насчет все сделать на одной МСХ ОЗУ? Скажем, одной ИМС емкостью 512к.
Уже обдумавал только что, стоя под душем :)
Нужно будет всё перелопачивать. И зачем я с вами связался? :)
Error404
09.03.2010, 09:29
Сделал USART на отправку. Завтра сделаю чтение. Спокойной ночи! :)
С добрым утром! :)
А как будет аппаратно реализовано с точки зрения конечного пользователя? Программа должна будет записывать/считывать туда побитно или уже целым байтом?
Как я понимаю в реализации, должен быть порт делителя частоты тактирования USART и порт собственно записи/чтения данных. Адресное пространство F700..F7FF под порты в Орионе между девайсами делили обычно кусками по 16 байт (реже по 8 байт). Предлагаю для портов USART выбрать адреса из "уже испорченного" диапазона F760..F76F. Адреса F760 и F761 заняты 512ВИ1, F762 и F763 заняты SD-card. F764 и далее сколько там нужно можно использовать под USART. Что скажете?
С добрым утром!
Здоровеньки були! :)
А как будет аппаратно реализовано с точки зрения конечного пользователя? Программа должна будет записывать/считывать туда побитно или уже целым байтом?
Уже сделано, но не проверял в железе (проверю вечером дома).
Отправка/прием побайтово с контролем "ситуации".
Как я понимаю в реализации, должен быть порт делителя частоты тактирования USART и порт собственно записи/чтения данных. Адресное пространство F700..F7FF под порты в Орионе между девайсами делили обычно кусками по 16 байт (реже по 8 байт). Предлагаю для портов USART выбрать адреса из "уже испорченного" диапазона F760..F76F. Адреса F760 и F761 заняты 512ВИ1, F762 и F763 заняты SD-card. F764 и далее сколько там нужно можно использовать под USART. Что скажете?
Отправка байта - запись в порт F764. Прием байта - чтение того же порта.
Контроль состояния передачи - порт F765 на чтение. Бит D7 - "1"-байт отправлен, готов принять новый байт для отправки. Бит D6 - "1"-вспомогательный, байт отправлен. После нескольких тактов обнуляется. Смысла в нем особого не вижу, но раз был в проекте, то я вывел. Возможно пригодится для формирования интервалов в передаче байтов. Бит D5 - "1"-прием байта завершен. После нескольких тактов обнуляется (зачем??? Возможно для вызова прерывания). Небольшой мануальчик (400кб) по этой реализации USART прилагаю.
Скорость работы USART фиксированная. Пока поставил 9600, можете предложить другую.
Да, добавлю.
Память расширил до 1 мегабайта. Оставил два чипа ОЗУ. Музыкальник вынес нафик.
Всё. Обсуждение "чаго ищё дабавить" прошу считать закрытым.
Ноги альтеры закончились, ресурсы на пределе (а мне ещё ВГА пробовать), долгострой меня заколебал.
Error404
09.03.2010, 12:21
Пара ремарок в порядке обсуждения концепции. :)
Выше, я уже говорил, что не нужно новый Орион акцентировать как персоналку с операционной системой СРМ. Это не серьезно. Под СРМ нет интересного программного обеспечения для нынешнего пользователя. Разве что потешить себя раритетом, но таких немного, а может быть только один и остался.
Не то чтобы мне была особенно дорога CP/M сама по себе, главным образом мне нужны средства разработки. На данный момент удобнее использовать имеющееся в CP/M. Даже если надо что-то сделать для Ordos, я все делаю при помощи инструментария CP/M и под CP/M.
Также, многие вещи (обработка прерываний, менеджер расширенной памяти) там уже есть (конечно, не в каждом клоне CP/M, а в конкретной используемой мной реализации) которые достаточно просто использовать. Их, конечно, можно перенести в любое другое окружение, но все это человекочасы, причем немало - пока же надо сделать более важные (и более интересные) вещи. Тот же USART, к примеру, и SD. На конкретно сегодняшнем этапе удобнее всего использовать для отладочной платформы уже имеющуюся CP/M.
Очень хорошо! Чем будет больше и разного, тем лучше. Но с Мониторами надо быть очень аккуратным. Плохо, когда дело доходить до абсурда - чуть-ли не для каждой программы нужен свой Монитор.
Мне неизвестно про такое. Все те мониторы, которые есть у меня (авторские М2, питерские М3), совместимы по подпрограммам, и все программы на них работают одинаково. В M3 есть некоторые расширения
Собственно, Мониторы различаются драйвером клавиатуры, ну и еще некоторыми мелочами. Может быть стоить проанализировать все эти Мониторы, начиная с авторского и сделать что-то в PS/2 клавиатуре, чтобы не грузить для каждого случая свой Монитор с своей клавиатурой? Вы не могли бы этим заняться? Затем, мы бы обсудили эту проблему.
Мониторы, отличающиеся драйвером клавиатуры от стандартного RK-86 я "сопровождаю" [не я же их написал] только в плане добавления загрузчиков с вновьвнедряемых носителей и только для любителей у кого возможно остались старые реалы с нестандартными клавиатурами (у меня такой :) ). Добавляю загрузчики в код мониторов М3, т.к. они уже оптимизированы под Z80 версии (что важно с точки зрения размера кода, т.к. в 2к-шном ПЗУ бороться приходится за каждый байт), и там есть программные прерывания (аналог аппаратного прерывания, но отрабатывающее по ctrl+shift+"кнопка") - по сути единственное отличие от М2, кстати очень удобное.
В Орион2010 клавиатура аппаратно и без вариантов приводится к матрице RK-86 (от этого никуда не деться т.к. много ПО лезет в ВВ55 клавиатуры напрямую мимо Монитора), и там можно использовать любые мониторы - хоть М2, хоть соответствующие М3.
Думаю начинать надо с операционной системы, поддерживающей многозадачность, а затем уж делать аппаратные прибамбасы.
Многозадачность - красивая мечта, как коммунизм. :) Времени заниматься ей не хватает (хотя к примеру на портацию MPM не так уж много надо времени), но совсем отказываться от нее не хочется.
Начинаю кропать мануал по прошиванию альтер.
Попутно сваял байтбластер лазерно-утюжной технологией :)
Мне просто надоело таскать один ББ между работой и домом.
Еще не все детальки припаял...
Сейчас я обычно использую режим IM2 Z80. Этот режим допускает иметь в памяти таблицу векторов прерываний...
Это все хорошо, когда вы с прерыванием балуетесь по мелочам. А когда нужно иметь 10-15 векторов? Понятно, что без дополнительного аппаратного прибамбаса, только программно это не реализовать. Я вспоминаю, как в прошлом (когда мудрили Орион) на прерывания смотрели как на экзотику. Да собственно, тогда Орион использовался как персоналка, и прерывания были не нужны - все успевали делать последовательным опросом. Процессор основное время крутился в подпрограмме клавиатуры.
Но если заниматься управлением, то без прерываний просто нечего делать. Да и для той же многозадачности нужен таймер с прерыванием, у клавиатуры должно быть прерывание и т.д.. Поэтому в любом случае придется на дополнительной плате городить механизм для того чтобы выставлять вектора на шину по соответствующим событиям. А вот с клавиатурой мы момент упустили - ее не перехватить на дополнительную плату, чтобы запустить прерывание по нажатию клавиши! Надо что-то придумать! Может быть по аналогии с USART тоже сделать внутренний вектор, но где-то единичкой разрешать/запрещать это прерывание? Это не потребует внешних выводов Альтеры и много вентилей.
Скорость работы USART фиксированная. Пока поставил 9600, можете предложить другую.
Надо бы иметь две скорости: 9600 по умолчанию после Reset и вторая - 38400, которую можно включить "1" в каком-то регистре. Ну, а если две скорости совсем никак, то - 19200, как компромисс.
Не то чтобы мне была особенно дорога CP/M сама по себе, главным образом мне нужны средства разработки...
Я с должным уважением отношусь к Вашим предпочтениям, но считаю, что на сегодняшний день среда разработки должна находиться на РС, а полученный исполняемый код (после трансляции, компиляции и чего угодно!) через RS-232 загоняться в память Ориона для отладки и выполнения. При этом, тут же рядом, под рукой будет и Ваш эмулятор. Вот уже вырисовывается и комплексная среда разработки. Кроме того, совсем не сложно (если есть RS-232!) организовать работу и через Терминал.
В Орион2010 клавиатура аппаратно и без вариантов приводится к матрице RK-86 (от этого никуда не деться т.к. много ПО лезет в ВВ55 клавиатуры напрямую мимо Монитора)...
Вот здесь хотелось бы чуть-чуть по подробнее! А как работать с программами, которые лезут в ВВ55 и ожидают, что там "7007" по авторской или другой схеме? Может быть я что-то пропустил? Вариант раскладки матрицы кнопок не переключается?
Многозадачность - красивая мечта, как коммунизм. :) Времени заниматься ей не хватает (хотя к примеру на портацию MPM не так уж много надо времени), но совсем отказываться от нее не хочется....
Для многозадачности Орион не только слаб, а просто фигня! Что касается МРМ, то это, если я не ошибаюсь, всего лишь многопользовательская СРМ. Кстати, у Вас ничего нет почитать про МРМ-80 на русском. Помнится в бытность, была книжка (кажется в белой жесткой обложке) по СРМ-80. Там была большая глава и по МРМ-80.
---------- Post added at 00:18 ---------- Previous post was at 00:12 ----------
Начинаю кропать мануал по прошиванию альтер.
...
Прекрасно! Знания тогда имеют ценность, когда становятся достоянием масс!
Error404
10.03.2010, 09:33
Надо бы иметь две скорости: 9600 по умолчанию после Reset и вторая - 38400, которую можно включить "1" в каком-то регистре. Ну, а если две скорости совсем никак, то - 19200, как компромисс.
Или делитель с программируемым коэффициентом деления (управляемый, например, по записи в порт F765) - по сложности лишь чуть сложнее (если все равно уходим от фиксированного делителя), а получить можно будет все множество кратных скоростей.
Я с должным уважением отношусь к Вашим предпочтениям, но считаю, что на сегодняшний день среда разработки должна находиться на РС, а полученный исполняемый код (после трансляции, компиляции и чего угодно!) через RS-232 загоняться в память Ориона для отладки и выполнения. При этом, тут же рядом, под рукой будет и Ваш эмулятор. Вот уже вырисовывается и комплексная среда разработки.
На РС тоже не шибко хорошо в плане средств разработки под Z80. По-прежнему нет нормального ассемблера (один не может макросы, другой не может инклюды, третий - что-то третье и т.д.) я в свое время присматривался, но так и не нашел ничего на замену пакета М80/L80. Нет на PC и нормального компилятора С под Z80 (из бесплатных, конечно).
Кроме того, совсем не сложно (если есть RS-232!) организовать работу и через Терминал.
Это интереснее всего. После SD попробую добавить в CPM консоль по RS-232.
Вот здесь хотелось бы чуть-чуть по подробнее! А как работать с программами, которые лезут в ВВ55 и ожидают, что там "7007" по авторской или другой схеме? Может быть я что-то пропустил? Вариант раскладки матрицы кнопок не переключается?
Как я понимаю (в исходниках прошивки не смотрел, Евгений поправит если что) именно так - одна раскладка (только РК). Расчет на то, что программы либо работают через Монитор, либо умеют работать так или иначе определять тип клавиатуры и содержат оба своих драйвера - для обоих типов клавиатур (соответственно, переключаются в режим РК). Таких программ большинство, по крайней мере я не помню ни одной, лезущей в порт напрямую, но при этом не умеющую переключиться на стандартную клавиатуру РК.
Для многозадачности Орион не только слаб, а просто фигня! Что касается МРМ, то это, если я не ошибаюсь, всего лишь многопользовательская СРМ. Кстати, у Вас ничего нет почитать про МРМ-80 на русском. Помнится в бытность, была книжка (кажется в белой жесткой обложке) по СРМ-80. Там была большая глава и по МРМ-80.
По MPM все что мне попадалось - только на английском.
Запускать она умеет как ПО CP/M (с адреса 100h), так и специализированное под MPM с других, не 100h, адресов - по нескольку задач в общей странице памяти.
На РС тоже не шибко хорошо в плане средств разработки под Z80. По-прежнему нет нормального ассемблера (один не может макросы, другой не может инклюды, третий - что-то третье и т.д.) я в свое время присматривался, но так и не нашел ничего на замену пакета М80/L80.На PC есть полный аналог M80/L80 от Андрея MOA.
Называется MA80/MLINK80.
(c) 1996,1997 MOA
Этот архив включает в себя последнюю (на сегодняшний день)
версию кроссассемблера MA80, позволяющий трансляцию программ
для процессоров I8080, Z80 или HD64180 (последний только
в комерческой версии). Для Z80 допустимо использование всех
недокументированных команд.
Программа полностью переписана. Исправлен ряд ошибок
предыдущих версий.
Формат выходного объектного файла совместим с форматом
фирмы MicroSoft для операционной системы CP/M (файлы
с раширенем REL). Расширения входных файлов -- M80.
В качестве программы-компановщика возможно использовать
L80 в CP/M или MLINK на IBM PC (входит в архив ma80link.arj).
Данная версия ассемблера работоспособна на всех
процесорах Intel 'x86.
Файл tma80.m80 содержит пример исходного текста, включающий
все возможные команды и большинство директив.
Коммерческое использование программ исключено.
По всем вопросам со мной можно связаться по следующим
адресам электронной почты:
FidoNet 2:5030/25.1 (предпочтительнее)
Internet moa@deeds.spb.ru
Andrew MOA
P.S. Существуют комерческие 32-разрядные версии ассемблера под DOS4GW
и OS/2.
По просьбам трудящихся.
Мануал по прошиванию ПЛИС от Альтеры. Применительно к Ориону, разумеется :)
Error404
10.03.2010, 11:46
На PC есть полный аналог M80/L80 от Андрея MOA.
Называется MA80/MLINK80.
(c) 1996,1997 MOA
Этот архив включает в себя последнюю (на сегодняшний день)
версию кроссассемблера MA80, позволяющий трансляцию программ
для процессоров I8080, Z80 или HD64180 (последний только
в комерческой версии). Для Z80 допустимо использование всех
недокументированных команд.
Программа полностью переписана. Исправлен ряд ошибок
предыдущих версий.
Формат выходного объектного файла совместим с форматом
фирмы MicroSoft для операционной системы CP/M (файлы
с раширенем REL). Расширения входных файлов -- M80.
В качестве программы-компановщика возможно использовать
L80 в CP/M или MLINK на IBM PC (входит в архив ma80link.arj).
Данная версия ассемблера работоспособна на всех
процесорах Intel 'x86.
Файл tma80.m80 содержит пример исходного текста, включающий
все возможные команды и большинство директив.
Коммерческое использование программ исключено.
По всем вопросам со мной можно связаться по следующим
адресам электронной почты:
FidoNet 2:5030/25.1 (предпочтительнее)
Internet moa@deeds.spb.ru
Andrew MOA
P.S. Существуют комерческие 32-разрядные версии ассемблера под DOS4GW
и OS/2.
Поделитесь архивом?
Единственный сайт, который гуглится на скачивание "кроссассемблера MA80", заблокирован как вредоносный.
Поделитесь архивом?
Если Камиль не выложит, посмотрю дома на Скорпион-CD, вроде там было.
Error404
10.03.2010, 12:06
По просьбам трудящихся.
Мануал по прошиванию ПЛИС от Альтеры. Применительно к Ориону, разумеется :)
Красиво. :)
На байтбластере по второму варианту (который на фотке) коннектор DEVICE (5х2) совпадает по ножкам с таковым на Орионе (схеме, п\п)?
Поделитесь архивом?Надеюсь Андрей не будет против:
На байтбластере по второму варианту (который на фотке) коннектор DEVICE (5х2) совпадает по ножкам с таковым на Орионе (схеме, п\п)?
Вроде как совпадает со стандартным JTAG разъемом. Я сейчас как раз изготовление этого бластера заканчиваю. На схеме Ориона нумерация ножек относительно разъема не указана.
Error404
10.03.2010, 14:50
Вроде как совпадает со стандартным JTAG разъемом. Я сейчас как раз изготовление этого бластера заканчиваю. На схеме Ориона нумерация ножек относительно разъема не указана.
А на схеме байтбластера номера ножек подписаны, но не подписаны сигналы. :)
А на схеме байтбластера номера ножек подписаны, но не подписаны сигналы.
Здесь решение простое, как три рубля. идем по первой ссылке в моей "инструкции", там, где в адресе altera.ru. Там нарисована полная распиновка и даже внешний вид разъема :)
Сварганил байтбластер. Продолжаю воевать с UART... Не хочет, гад, принимать сигнал.
USART заработал. Проверял замыканием выхода на вход. Байтики передаются/читаются правильно. "Полирую" прошивку...
Пока буду собирать порт на МАХ232, может кто-нибудь подкинуть простую терминалку для ПЦ? Просто я практически не знаю что это такое и с чем его едят. пробовал найти возможность отправить/принять байтик в Гипертерминале, не нашел такой функции :(
И заодно, как называется "по научному" протокол, в котором один стартовый бит, 8 бит данных и один стоповый бит?
Да, большой респект tnt23 за ссылку. Сделал "по мотивам" и "на основе" :)
balu_dark
10.03.2010, 22:01
скорее всего X-modem. Терминалку или писать свою или искать по разным контроллерным форумам ибо разновидностей оных просто мешокю кому что больше нравится. кстати если ты работаеш с AVR то в среде CVAVR если не путаю буковки но программа некоего Павла Гайдука СП Инфотех - Болгария. в их софтине есть неплохой терминал.вверху софтинки в меню висит.
кстати если ты работаеш с AVR то в среде CVAVR если не путаю буковки но программа некоего Павла Гайдука СП Инфотех - Болгария. в их софтине есть неплохой терминал.вверху софтинки в меню висит.
Ага, с ней, родной :)
Спасиб! Поковыряю ее повнимательней.
---------- Post added at 22:54 ---------- Previous post was at 22:52 ----------
Попутно - годится вариант, когда скорость УСАРТа регулируется записью в F765?
Напомню, на чтение сего порта получаем статус передачи/чтения.
Собрал порт на МАХ232С. Работает нормально. Через терминалку всё передается.
Надо схему перерисовывать...
Попутно - годится вариант, когда скорость УСАРТа регулируется записью в F765?
Конечно. Только переключать необходимо уже настроенные стандартные скорости.
Напомню, что чтением сего порта получаем статус передачи/чтения.
Хорошо бы читать и значение текущей скорости. А что с прерыванием для USART? В этом же порту можно сделать флаг включения этого прерывания. Кроме того, необходимо сделать аппаратно сам вектор с четким адресом. Загонять его в "FE" вряд-ли стоит - слишком много места под таблицу. Надо поближе к началу. Что скажет Error404?
Конечно. Только переключать необходимо уже настроенные стандартные скорости.
Можно 56к и ниже. Выбор, разумеется, "готовыми" скоростями. Отведем, к примеру, 2 младших бита (4 скорости).
Смысла в чтении установленной скорости не вижу... Будет одна "по умолчанию" (наверное 9600) и возможность программно переключить ее. Это итак будет делать программа при инициализации.
В этом же порту можно сделать флаг включения этого прерывания.
Это естесственно. Только просветите, на какие прерывания это вешается? INT или NMI? Включение режима повесим на бит D6. По аналогии с портом FB.
Кроме того, необходимо сделать аппаратно сам вектор с четким адресом.
Это, простите, как???
Error404
11.03.2010, 22:38
Конечно. Только переключать необходимо уже настроенные стандартные скорости.
Хорошо бы читать и значение текущей скорости. А что с прерыванием для USART? В этом же порту можно сделать флаг включения этого прерывания. Кроме того, необходимо сделать аппаратно сам вектор с четким адресом. Загонять его в "FE" вряд-ли стоит - слишком много места под таблицу. Надо поближе к началу. Что скажет Error404?
Тут дело такое: если сделать второй вектор с конца таблицы (для этого с шины надо прочитывать 0FDh, занулять бит D1 - насчет FE и D0 я напутал), то мне ничего не придется переписывать в ОС - для предпоследнего вектора уже было зарезервировано место в давние времена. С точки зрения быстродействия никакой разницы нет. Таблицу прерываний и обработчик приходится хранить в непереключаемой области F000-F3FF чтобы прерывания корректно работали из любой страницы памяти. В этой области место приходится расходовать очень экономно, поэтому там у меня не сформирована полная таблица (все 256 байт), а только 2 последние вектора. Место занято подпрограммами.
В принципе, по мере того как будут отлажены подпрограммы ведь можно и исправить в прошивке на какую угодно константу?
Тут дело такое: если сделать второй вектор с конца таблицы...то мне ничего не придется переписывать в ОС - для предпоследнего вектора уже было зарезервировано место в давние времена.
Пусть будет так.
В принципе, по мере того как будут отлажены подпрограммы ведь можно и исправить в прошивке на какую угодно константу?
Вполне резонно. Грешки и неудобства от скороспелых решений естественно будут.
Это, простите, как???
Error404 уже ответил.
Уже посылаю нахрен...
Я сам за это ратовал! Но, если что-то останется из ресурсов после VGA, то необходимо сделать внутренний 16-разрядный таймер. Хотя бы один (но лучше два!). Выводов для этого не надо. Естественно, с прерыванием. Технические моменты определяйте сами. Без таймера говорить о реалке (а уж о многозадачности и подавно!) не придется.
Error404 уже ответил.
Не ответил.
Что должно происходить на шинах при наступлении сигнала прерывания?
Извините за такие вопросы, но я компьютеров до этого еще не изобретал.
Без таймера говорить о реалке (а уж о многозадачности и подавно!) не придется.
А вы не увлеклись? Мы случаем, Windows95 портировать не собираемся? :)
Что у нас осталось от Ориона, одно название?
Error404
12.03.2010, 09:21
Не ответил.
Что должно происходить на шинах при наступлении сигнала прерывания?
Извините за такие вопросы, но я компьютеров до этого еще не изобретал.
Сказать по правде, я тоже к компу подхожу со стороны клавиатуры. Может как-то поможет эта статья?
http://z80.info/1653.htm
Interrupt Mode 2 is the most frequently used interrupt mode with the Z80 and its related peripherals. The interrupting device automatically places a vector address on the DATA bus when it recognises the INTACK. This forms the lower eight-bits of a 16-bit address. The contents of the I register form the upper eight bits of the address.
Как я понял, устройство, сгенерировашее прерывание, должно выставлять 0FDh на шину данных пока на ножке INTACK активный уровень
пока на ножке INTACK активный уровень
Ножки INTACK на Z80 нет.
Судя по докам, можно извратиться так - пока активен сигнал EOC ("принят байт данных с USART"), генерируем INT, и при активных /IORQ и /M1 выставляем на шину данных FD по сигналу /RD.
Может кто-нибудь из спецов подтведить/опровергнуть?
Error404
12.03.2010, 11:52
Ножки INTACK на Z80 нет.
Судя по докам, можно извратиться так - пока активен сигнал EOC ("принят байт данных с USART"), генерируем INT, и при активных /IORQ и /M1 выставляем на шину данных FD по сигналу /RD.
Может кто-нибудь из спецов подтведить/опровергнуть?
Хм. :v2_conf2: Подтверждаю. Как оказалость по просмотру цоколевки, действительно нет такой ножки. :)
Вот тут вроде описано и в теории и с примерами как может быть сформирован INTACK в случае применения Z80:
http://www-clips.imag.fr/projet-systeme/Z85230/chapter6_1.pdf
страница 6-15 + схема 9 + диаграмма 10
Как обычно, в детали я не вникал. :)
Вот неплохая ссылка (http://www.gaby.de/z80/interrup.htm), там есть такие слова:
"acknowledge interrupt" means pin IORQ gets together with M1-pin active/low. Furthermore the CPU adds 2 wait states to the normal machine cycle.
там есть такие слова
Вот и я на них наткнулся. Там как раз упоминается о комбинации IORQ и M1.
В обычном режиме работы проца такая комбинация не имеет смысла, поскольку читать код операции с внешнего устройства проц не будет.
Вот тут вроде описано и в теории и с примерами
Это маленько не то... Тут дается реализация интерфейса с каким-то процессорным комплектом вроде...
Error404
12.03.2010, 13:25
Это маленько не то... Тут дается реализация интерфейса с каким-то процессорным комплектом вроде...
А какая разница? Комплект как раз расчитан на любую восьмибитную шину и применительно к Z80 для подключения к нему этого комплекта с поддержкой прерываний режима IM2 не хватает как раз таки INTACK. На фиге 10 (и 12) нарисована диаграмма сигналов, насколько я понял там разрисовано и описано строго то, что надо в нашем случае - момент когда при прерывании на шину данных помещать данные для формирования вектора таблицы перываний, опираясь на сигнал INTACK, сформированный в случае для Z80 на дискретной логике (фига 9 и фига 11). И сколько выдать WAIT-a. Мне показалось, что это то что нужно.
На фиге 10 (и 12) нарисована диаграмма сигналов,
В том то и дело. что по определению должен учавствовать IORQ, это нарисовано в диаграммах. А на схемах нарисован какойто хитровыверт с MREQ.
Вот, нашел в загашниках: http://narod.ru/disk/18688700000/Z80%20Central%20Processor%20Unit.rar.html
Хорошая дока на рузском езыке про Z80. :)
И там как раз написано, что вектор прерывания выставляется по IORQ='0' and M1='0' and RD='0'. То, что нам и требовалось.
Error404, не наваяешь простенькую прогу для приема байта по прерыванию? В целях отладки железа.
---------- Post added at 15:08 ---------- Previous post was at 14:56 ----------
И сколько выдать WAIT-a.
Вайт два такта проц создает самостоятельно.
Error404
12.03.2010, 19:51
не наваяешь простенькую прогу для приема байта по прерыванию? В целях отладки железа.
Во вложении.
Но проверить это мне, сам понимаешь, негде. Если что, приглядывай в исходник, может какие-то ошибки найдешь...
Во вложении.
Наворочено то...
Я терминалку для приема и вывода на экран соорудил из 30 байт :v2_laugh:
Хорошо, спасибо!
Только тут такой нюанс... версия USART в альтере сейчас выдает короткие импульсы по факту приема или передачи байта. Импульсы настолько невелики, что и в асме их не особо поймаешь. Для формирования прерывания будут самое то... Можно добавить еще какие-нибудь сигналы, например, как я описывал выше (а ы реализовал в тестовой программе). Или есть предложения каксделать удобнее?
Error404
13.03.2010, 11:23
Наворочено то...
Я терминалку для приема и вывода на экран соорудил из 30 байт :v2_laugh:
Хорошо, спасибо!
У меня там отрабатывается еще обращение на неправильный вектор (если на шину при прерывании выдано не FD, а меньшее значение) с соответствующим сообщением, есть индикатор работоспособности прерываний вообще (работает по int 50 Hz), чтение клавиатуры с выводом в порт. Я всегда добавляю много лишнего :) - чтобы если что-то не работает, было от чего оттолкнуться в размышлении.
Только тут такой нюанс... версия USART в альтере сейчас выдает короткие импульсы по факту приема или передачи байта. Импульсы настолько невелики, что и в асме их не особо поймаешь. Для формирования прерывания будут самое то... Можно добавить еще какие-нибудь сигналы, например, как я описывал выше (а ы реализовал в тестовой программе). Или есть предложения каксделать удобнее?
Если мы остановимся на схеме обработки получения байта по прерыванию, то длительность импульсов на прием (и вообще анализ состояния UART при приеме) нас совершенно не интересует: сработало прерывание, считай байт с порта. И все.
С отправкой байта чуть сложнее - если в цикле отправляется большой массив, то надо убедиться что UART уже отправил предыдущий байт, как собственно ты и писал двумя страницами форума ранее:
; Отправка байта - запись в порт F764.
; Прием байта - чтение порта F764.
; Контроль состояния передачи - порт F765 на чтение:
; Бит D7 - "1"-байт отправлен, готов принять новый байт для отправки.
; Бит D6 - "1"-вспомогательный, байт отправлен. После нескольких тактов обнуляется.
Кстати, бит D6 я наверное перед отправкой зря проверяю на равенство "1" (я проверяю на "11000000"), раз он обнуляется ? Зачем он обнуляется, с чем это связано? И что отображает этот бит до обнуления и после обнуления?
то надо убедиться что UART уже отправил предыдущий байт,
Кстати, бит D6 я наверное перед отправкой зря проверяю на равенство "1" (я проверяю на "11000000"), раз он обнуляется ? Зачем он обнуляется, с чем это связано? И что отображает этот бит до обнуления и после обнуления?
Вот тута я и хотел что-нибудь доработать. В принципе, надо сделать чтобы можно было работать и без прерываний .
Насчет сигналов - D7 сейчас нет вообще. Читается всегда "1", но я хочу его снова "создать" :)
D6 - короткий, исчезает после такта. Догадываемся. что этот сигнал нужен просто для генерации прерывания и больше ни для чего. Байт улетел через USART - получаем импульс, можно отправлять следующий. Аналогично и с D5 - генерация прерывания по приему байта. Пришел импульс - забираем байт с F764.
Соответственно, эти два импульса должны вызывать прерывания и выставлять каждый свой байт на вектор прерывания. Вроде так должна выглядеть авторская задумка. Тогда, выходит, на чтении байта ставим FD, на отправке байта - FB.
Многое можно переделать, поэтому и спрашиваю, как удобнее программисту?
Error404
13.03.2010, 12:50
Вот тута я и хотел что-нибудь доработать. В принципе, надо сделать чтобы можно было работать и без прерываний .
Насчет сигналов - D7 сейчас нет вообще. Читается всегда "1", но я хочу его снова "создать" :)
D6 - короткий, исчезает после такта. Догадываемся. что этот сигнал нужен просто для генерации прерывания и больше ни для чего. Байт улетел через USART - получаем импульс, можно отправлять следующий. Аналогично и с D5 - генерация прерывания по приему байта. Пришел импульс - забираем байт с F764.
Соответственно, эти два импульса должны вызывать прерывания и выставлять каждый свой байт на вектор прерывания. Вроде так должна выглядеть авторская задумка. Тогда, выходит, на чтении байта ставим FD, на отправке байта - FB.
Многое можно переделать, поэтому и спрашиваю, как удобнее программисту?
С отправкой не так критично, как с приемом (где в случае без прерывания нужен постоянный опрос устройства). Тут уже нужно считать и решать что выгоднее - опросить готовность устройства перед отправкой и придержать клиента в ожидании до момента готовности (что маловероятно, т.к. пока на наших скоростях отрабатывают прочие куски подпрограммы вывода символа на консоль, USART предыдущий байт по-любому отправит), или обрабатывать прерывание (каждое из которых - это тормозное сохранение/восстановление на стеке + обслуга вектора + нужен буфер для сохранения символов на отправку).
Если мы будем делать многозадачную ОС, то надо смотреть в сторону работы по прерыванию с буферизацией во всех случаях. Для однозадачной с прерываниями на передачу не стоит заморачиваться, делать только на прием. А для простых терминалок вообще можно без прерываний обойтись. :)
А можно сделать эти прерывания маскируемыми какими-то двумя битами порта F765 на запись (и готовность)? И определяться с конкретным методом обслуживания уже при разработке конкретного ПО? А какой разрядности в порту F765 управляемый делитель? Сколько битов в "F765 на запись" сейчас уже распределено и подо что?
Соответственно для случая обработки чтения без прерываний, к уже имеющимся в порту "F765 на чтение" битам
; Бит D7 - "1"-байт отправлен, готов принять новый байт для отправки.
; Бит D6 - "1"-вспомогательный, байт отправлен. После нескольких тактов обнуляется.
; Бит D5 - "1"-прием байта завершен. После нескольких тактов обнуляется (зачем??? Возможно для вызова прерывания).
добавить Бит D4 - "1"- прием байта завершен. Сбрасывается только после чтения с порта данных (F764). И соответственно принимать следующий байт на вход только когда бит D4 сброшен чтением с F764.
Если мы будем делать многозадачную ОС, то надо смотреть в сторону работы по прерыванию с буферизацией во всех случаях. Для однозадачной с прерываниями на передачу не стоит заморачиваться, делать только на прием. А для простых терминалок вообще можно без прерываний обойтись.
:)
Я поступил таким образом - маленько перелопатил порт F765.
Теперь чтение порта выглядит так -
D7 - TX_Ready (0 - идет отправка байта, порт не готов. 1 - можно записывать следующий байт для отправки)
D6 - RX_Status (0 - нет нового принятого байта. 1 - принят новый байт. После считывания байта из F764 этот бит сбрасывается в 0).
Итго, при чтении данных из F765 имеем соответственно:
FF - принят новый байт, передатчик готов принять байт на отправку.
BF - новых данных не принято, передатчик готов принять байт на отправку.
3F - новых данных не принято, идет передача байта "наружу".
7F - догадайтесь сами :)
Скорости UART - биты D0 и D1. Набор скоростей - 9600 (умолчание), 19200, 38400, 57600. Установленная скорость с порта F765 не считывается.
Зарись "1" в D6 порта F765 разрешает прерывание по приему байта. На ШД ставится FD.
Передача байта с прерываниями не связана, и контролируется считыванием с порта F765 сигнала TX_Ready.
Годится? Закрываем на этом моменте этот вопрос? Если да, то Error404, проверь пожалуйста, твой тест на "работоспособность" с такими параметрами порта :)
---------- Post added at 14:51 ---------- Previous post was at 14:46 ----------
"Терминалка" на бейсике Ориона, которой я проверял прием данных, выглядит так:
10 CLS
20 D=PEEK(&F765)
30 IF D=&BF THEN GOTO 20
40 D=PEEK(&F764)
50 PRINT CHR$(D);
60 GOTO 20
Error404
13.03.2010, 16:12
Скорости UART - биты D0 и D1. Набор скоростей - 9600 (умолчание), 19200, 38400, 57600. Установленная скорость с порта F765 не считывается.
Скорости 0=9600, 1=19200, 2=38400, 3=57600 ?
Тест мне пока проверить негде. Я внес правки (во вложении) - может запустишь у себя? Кстати, MA80/MLINK (это который аналог M80 для PC и MSDOS) исходник из вложения не берет - ошибок не выдает, но и код после линковщика выдает бредовый. Я пока не разбирался кто виноват - ассемблер или загрузчик. Или какие-то специфические ключи нужны...
Зарись "1" в D6 порта F765 разрешает прерывание по приему байта. На ШД ставится FD.
Передача байта с прерываниями не связана, и контролируется считыванием с порта F765 сигнала TX_Ready.
Годится? Закрываем на этом моменте этот вопрос? Если да, то Error404, проверь пожалуйста, твой тест на "работоспособность" с такими параметрами порта :)
Годится. :) Тут еще такой моментик: обработчик прерывания делает следующее (схематично):
DI
push all
ld a,(F764)
<do something>
pop all
EI
reti
Что произойдет если следующий байт (и прерывание) будут готовы раньше, чем обработчик сделает EI? Будут проглатываться байты? Как избежать?
А какой "протокол наружу" реализован в USART? Что указываешь в свойствах соединения терминала?
Будут проглатываться байты? Как избежать
Вероятно - да...
Импульс прерывания поступит, но разрешение еще не включено EI. честно говоря - не знаю. Предполагаю, что новый пришедший байт не зачтется.
Или триггеры в Z80 всетаки запомнят запрос на прерывание и оно произойдет сразу же за EI... Это не ко мне вопрос. Наверное стОит почитать мануальчик по Z80, который я выкладывал недавно.
Я сделал включение прерывания по D6 и вектор на шину данных FD. Вроде комп запустился, сейчас буду глюки искать. И твою программу проверю :)
---------- Post added at 18:16 ---------- Previous post was at 16:42 ----------
Забавно вышло.
Твоя программа выдает "wrong im2 vector" :(
Буду искать ошибку.
Зато как я загрузил твою прогу в Орион... Программатор флеши я оставил на работе.
Шить нечем. Дай, думаю, попробую...
В результате залил её через RS232 прямо на диск С. :) Загрузчик сваял на асме, отправил пакетный файл через терминал. На диске появился файлик :v2_finge:
А какой "протокол наружу" реализован в USART? Что указываешь в свойствах соединения терминала?
8 бит, 1-старт, 1-стоп, без контроля четности.
Переключаемую скорость пока сделать не удалось, есть проблемки... оставил 57600 по умолчанию.
---------- Post added at 19:06 ---------- Previous post was at 18:22 ----------
Так, а каким образом программа узнаёт что вектор неправильный. если пересылки байта еще небыло, и соответственно вызова прерывания USART не вызывал??? ;)
Error404
13.03.2010, 19:33
Переключаемую скорость пока сделать не удалось, есть проблемки... оставил 57600 по умолчанию.
---------- Post added at 19:06 ---------- Previous post was at 18:22 ----------
Так, а каким образом программа узнаёт что вектор неправильный. если пересылки байта еще небыло, и соответственно вызова прерывания USART не вызывал??? ;)
Это сообщение может выдаваться только тогда, когда Z80 выполняет прерывание, и на шине данных число, отличное от FD и FF, т.к. все остальные вектора вызывают переход по адресу 1111h - на вывод этого сообщения.
У меня в эмуляторе оно вообще никогда не выдается, т.к. эмулятор при единственно возможном для него прерывании Int 50Hz всегда выдает на шину FF и всегда получаем подпрограмму которая "вращает палочку" :) в правом верхнем углу.
У тебя по приходу байта по RS-232 должна вызываться подпрограмма по вектору FD - я ее тоже в живую не проверял, но она не может выводить то, что ты написал, а только одиночные символы.
Сам можешь посмотреть потом в памяти при помощи М128 - таблица векторов IM2 лежит в адресах 0:2601...0:2700
Надо проверить что выдается на шину данных при прерывании Int 50 Hz. Должно быть 0FFh.
Так, господа, пойдем по второму кругу. Нам очень нужны прерывания на USART? :v2_wacko:
Или ну их нафик... :v2_conf2:
Error404
14.03.2010, 13:20
Так, господа, пойдем по второму кругу. Нам очень нужны прерывания на USART? :v2_wacko:
Или ну их нафик... :v2_conf2:
Ну, конечно хотелось бы.
Судя по постановке вопроса, что-то не заладилось?
Какие симптомы?
А на отправку моя прога работает (надо нажимать на клавиатуре кнопки, отличные от ctrl+C = F4)?
А я тут задумался как бы покрасивше заэмулировать UART.
Думаю, самое красивое будет создавать в винде виртуальный COM-порт, на котором с одной стороны висит эмулятор - с другой ПО под винду. Тогда для работы с эмулятором можно будет использовать любой терминал под Винду (кому какой нравится). Т.е. на одном и том же компе запускается и эмулятор и терминал (который мне делать в эмуляторе уже не надо будет). И работа с эмулятором никак не будет отличаться от работы с реальным устройством - только разные COM-порты выбираешь и всё.
А еще в перспективе можно будет сделать редирект на удаленный комп по IP (чтобы эмуль и терминал работали на разных PC). Но это уже фантазии. :)
Думаю, самое красивое будет создавать в винде виртуальный COM-порт, на котором с одной стороны висит эмулятор - с другой ПО под винду. Тогда для работы с эмулятором можно будет использовать любой терминал под Винду (кому какой нравится). Т.е. на одном и том же компе запускается и эмулятор и терминал (который мне делать в эмуляторе уже не надо будет). И работа с эмулятором никак не будет отличаться от работы с реальным устройством - только разные COM-порты выбираешь и всё.
А еще в перспективе можно будет сделать редирект на удаленный комп по IP (чтобы эмуль и терминал работали на разных PC). Но это уже фантазии.
Тут я согласен :)
Удобства работы с компортом я уже прочувствовал. Загоняю проги в Орион с ПЦ совершенно непринужденно, маленькой терминалкой весом байтов в 20...
Ну, конечно хотелось бы.
Судя по постановке вопроса, что-то не заладилось?
Какие симптомы?
Симптомы такие, что уже мешают помехи по ненагруженной линии шины данных. Издержки монтажа на макетке.
На работе с устройствами это не отражается, на пустой же шине четкого FF пока не добиться. Буду уменьшать номиналы подтягивающих резисторов на шине :(
И пока неясно, что считыват проц при прерывании с ШД. Думаю, как бы это дело программно отследить. Соответственно, аппаратный вектор пока не фунциклирует.
Передача данных работает нормально (из твоей программы, имею ввиду).
---------- Post added at 14:49 ---------- Previous post was at 14:40 ----------
Error404, ты каким ассемблером пользуешься? В смысле, чем можно скомпилить твои исходники .mac?
Я пока хочу "расширить" жесткий вектор FD на весь блок 256 байт.
---------- Post added at 15:07 ---------- Previous post was at 14:49 ----------
Вопрос с шумами решился. Изменил подтяжку на резисторы 4к7, шина стала чистая.
Или ну их нафик...
С прерываниями надо все-таки разобраться. Оно обязательно должно быть для USART'a, иначе придется все время крутиться в подпрограммах опроса статуса клавиатуры и USART. Но это же древняя дикость!
Кстати, было бы правильно сделать порт, где можно было бы прочитать два байта с PS/2. То, что сделано сейчас - это хорошо для совместимости со старыми программами, но совсем дико для новых. Только я прошу оппонентов не ссылаться на совместимость со старым Орионом. В этом случае и здесь надо делать прерывание. А уж вектор подскажет Error404.
А я тут задумался как бы покрасивее за эмулировать UART...
Это очень интересная мысль. И мне очень приятно, что наши мысли совпадают! Правда я смотрю на них с точки зрения создания комплексной среды разработки и отладки программного обеспечения для нового Ориона. Вы уж меня извините за "перекос крыши" в свою сторону! Нужен инструментарий, как воздух!
Но мне хочется обратить внимание на следующий момент: думаю, Вам тоже (Евгений уже это сделал!) необходимо собраться с силами и мыслями и написать свой мануал по выбору SD-карты, ее подготовки для работы с Орионом, как разместить на ней СРМ-80, методы переноса файлов с РС на Орион и т.д. В том числе подготовить какую-то версию СРМ для испытаний (испытает ее Евгений). Что Вы на это скажете?
С прерываниями надо все-таки разобраться.
Разбираюсь.
Пока для начала переделываю их полностью, сейчас мне не нравится как я сделал INT50.
Вторым шагом будет запустить прерывания от USART хотя бы без аппаратного вектора.
Error404
14.03.2010, 17:53
Error404, ты каким ассемблером пользуешься? В смысле, чем можно скомпилить твои исходники .mac?
Я пока хочу "расширить" жесткий вектор FD на весь блок 256 байт.[COLOR="Silver"]
Расширить вектор не так просто как кажется. Таблица ISR может содержать 128 16-разрядных адресов, но Z80 при этом с шины может считать 256 вариантов 16-разрядных половинок адресов.
Соответственно, если с шины при прерывании читается нечто левое, то с вероятностью 50% попадешь не на начало адреса (младший байт), а на середину (старший байт). И сответственно переход будет в никуда.
У меня не случайно вся таблица заполнена так, чтобы для "левых" состояний шины данных, прочитывая 16-разрядное слово хоть с четного хоть с нечетного адреса, всегда читалось одинаковое 1111h. А вот если при прерывании будет выдано FЕ вместо FD, то код опять же "улетит".
Компилирую все под CP/M в своем эмуляторе такой последовательностью команд:
m80n filename,=filename
l80m filename,filename/n/e
Я разобрался с пакетом MA80/MLINK. В этой паре косячит MLINK.EXE. Поэтому не могу этот пакет рекомендовать, хотя было бы удобно компилировать все прямо под Виндой.
MA80.EXE отрабатывает нормально - после него l80m.com под CP/M отрабатывает нормально
Кстати, было бы правильно сделать порт, где можно было бы прочитать два байта с PS/2. То, что сделано сейчас - это хорошо для совместимости со старыми программами, но совсем дико для новых. Только я прошу оппонентов не ссылаться на совместимость со старым Орионом. В этом случае и здесь надо делать прерывание. А уж вектор подскажет Error404.
Вектор брать по порядку следующий - FB. Что-то придется соптимизировать чтобы освободить под него место. Придумаем.
Тут опять все сначала от Евгения зависит - надо править клавиатурное железо в прошивке чтобы работали оба варианта: и классический (который уже реализован) и новый.
Это очень интересная мысль. И мне очень приятно, что наши мысли совпадают! Правда я смотрю на них с точки зрения создания комплексной среды разработки и отладки программного обеспечения для нового Ориона. Вы уж меня извините за "перекос крыши" в свою сторону! Нужен инструментарий, как воздух!
Но мне хочется обратить внимание на следующий момент: думаю, Вам тоже (Евгений уже это сделал!) необходимо собраться с силами и мыслями и написать свой мануал по выбору SD-карты, ее подготовки для работы с Орионом, как разместить на ней СРМ-80, методы переноса файлов с РС на Орион и т.д. В том числе подготовить какую-то версию СРМ для испытаний (испытает ее Евгений). Что Вы на это скажете?
Сделаю как только с CP/M будет что-то готовое на выходе. Пока нечего описывать, что-то туго двигается, хотя вроде и немного сделать осталось (+отладка).
Вектор брать по порядку следующий - FB. Что-то придется соптимизировать чтобы освободить под него место. Придумаем.
Тут опять все сначала от Евгения зависит - надо править клавиатурное железо в прошивке чтобы работали оба варианта: и классический (который уже реализован) и новый.
Тут придется сделать полноценный автомат векторов прерываний, дабы при возникновении прерывания сигнал шел не на проц, а через "контроллер". Ну, собственно, к этому всё и шло. Простое "навешивание на соплях" с прерываниями USART не прокатило.
У меня не случайно вся таблица заполнена так, чтобы для "левых" состояний шины данных, прочитывая 16-разрядное слово хоть с четного хоть с нечетного адреса, всегда читалось одинаковое 1111h. А вот если при прерывании будет выдано FЕ вместо FD, то код опять же "улетит".
Я что-то совсем не понял! Это что, такая надежность механизма прерываний в Z80? Тогда на кой хрен они нужны, если придется гадать куда "улетит" процессор! Нет! Мне кажется мы что-то с железом халтурим. Мне кажется надо не задавливать одну-две линии данных, чтобы получить "FE" (а единицы за счет шины - это чистое радиолюбительство!), а выставлять на шину вектор через какой-то 8-разрядный регистр. Выставлять полностью весь байт (но D0 всегда равен нулю) и не гадать в каком состоянии случайно окажется шина данных. И такой регистр необходимо делать для каждого вектора. Думаю, это то ответственное место в проекте, где радиолюбительствовать не следует - вылезет боком!
Ну вот, пока писал, ewgeny7 тоже высказал эту же мысль!
Error404
14.03.2010, 20:48
Тут придется сделать полноценный автомат векторов прерываний, дабы при возникновении прерывания сигнал шел не на проц, а через "контроллер". Ну, собственно, к этому всё и шло. Простое "навешивание на соплях" с прерываниями USART не прокатило.
Где-то ошибка, всего навсего.
На живых Z80 в режиме IM2 без всяких контроллеров делалось и работало, если верить Интернетам.
Хотя конечно, хозяин-барин, твой проект. :)
Но прерывания по 50hz один черт нужны - весь софт же не перепишешь... И используется там режим IM2 опять же
---------- Post added at 20:48 ---------- Previous post was at 20:42 ----------
Я что-то совсем не понял! Это что, такая надежность механизма прерываний в Z80? Тогда на кой хрен они нужны, если придется гадать куда "улетит" процессор! Нет! Мне кажется мы что-то с железом халтурим. Мне кажется надо не задавливать одну-две линии данных, чтобы получить "FE" (а единицы за счет шины - это чистое радиолюбительство!), а выставлять на шину вектор через какой-то 8-разрядный регистр. Выставлять полностью весь байт (но D0 всегда равен нулю) и не гадать в каком состоянии случайно окажется шина данных. И такой регистр необходимо делать для каждого вектора. Думаю, это то ответственное место в проекте, где радиолюбительствовать не следует - вылезет боком!
Ну вот, пока писал, ewgeny7 тоже высказал эту же мысль!
Это не халтура :) , а штатный режим процессора Z80, используемый наиболее часто в виду того, что наиболее удобен.
Просто нужно заранее (на этапе проектирования устройства/разработки обработчиков прерывания) знать, что выдает устройство на шину в момент прерывания, и в соответствующее место таблицы ISR положить вектор (адрес) обработчика.
Если устройство вдруг выдает при прерывании не то, на что расчитана таблица, то код "улетит", да. Или вызовется обработчик соседнего прерывания. А с чего устройство вдруг начнет выдавать не то, на что спроектировано? Только при аппаратной неисправности (в нашем случае - всего компа, ведь всё в одной ПЛИС), а от этого не застрахована никакая схема.
Где-то ошибка, всего навсего.
На живых Z80 в режиме IM2 без всяких контроллеров делалось и работало, если верить Интернетам.
В ПЛИС это посложнее, тут лишнюю микруху на шину не навесишь пару ног шины не дернешь :)
В общем, контроллер я сделал, работает.
Принцип работы такой - есть в Орионе некий регистр, именуемый "Vector".
При приходе импульса прерывания INT50 в это регистр заносится число FF. Если придет импульс со стороны USART, то запишется соответственно FD. При этом Vector отслеживает комбинацию сигналов INTACK и выдает соответствующий байт на шину данных на время активности этого сигнала.
Количество источников сигналов прерывания можно увеличивать. А если вдруг представить, что у альтеры есть свободная нога... :)
Пока же я занимаюсь удлинением сигнала прерывания с USART, дабы надежней было.
Error404
14.03.2010, 22:02
В ПЛИС это посложнее, тут лишнюю микруху на шину не навесишь пару ног шины не дернешь :)
В общем, контроллер я сделал, работает.
Принцип работы такой - есть в Орионе некий регистр, именуемый "Vector".
При приходе импульса прерывания INT50 в это регистр заносится число FF. Если придет импульс со стороны USART, то запишется соответственно FD. При этом Vector отслеживает комбинацию сигналов INTACK и выдает соответствующий байт на шину данных на время активности этого сигнала.
Количество источников сигналов прерывания можно увеличивать. А если вдруг представить, что у альтеры есть свободная нога... :)
Пока же я занимаюсь удлинением сигнала прерывания с USART, дабы надежней было.
Т.е. я правильно понял - в режиме IM2 переходит по требуемым векторам таблицы ISR средствами самого Z80?
Нет необходимости прочитывать и дополнительно программно обрабатывать регистр "Vector"?
Т.е. я правильно понял - в режиме IM2 переходит по требуемым векторам таблицы ISR средствами самого Z80?
Нет необходимости прочитывать и дополнительно программно обрабатывать регистр "Vector"?
Да, как мы и планировали.
Программа твоя работает, и на чтение и на передачу. Вот длина импульса с USART коротковата, не всегда прерывание срабатывает. Удлиняю извращенно :)
---------- Post added at 23:00 ---------- Previous post was at 22:32 ----------
В общем, на сегодня хватит, ударно поработали :)
Маленькое (1.35Мб) видео на "народе" о работе USART.
http://narod.ru/disk/18756760000/lv03_PC.avi.html
Всем пока!
А если вдруг представить, что у альтеры есть свободная нога... :)
То можно сделать.... Но мы не будем торопиться. У нас есть более важные дела! "Я правильно сказал, товарищ майор?" (из анекдота про вьетнамцев).
Error404
14.03.2010, 23:38
Да, как мы и планировали.
Программа твоя работает, и на чтение и на передачу. Вот длина импульса с USART коротковата, не всегда прерывание срабатывает. Удлиняю извращенно :)
---------- Post added at 23:00 ---------- Previous post was at 22:32 ----------
В общем, на сегодня хватит, ударно поработали :)
Маленькое (1.35Мб) видео на "народе" о работе USART.
http://narod.ru/disk/18756760000/lv03_PC.avi.html
Всем пока!
Посмотрел видео :v2_lol:
Обновление принципиальной схемы.
Изменения:
ноги альтеры - 55, 66, 74, 75, 79:
1. перемещены сигналы RESET, IORQ.
2. добавлены сигналы A18, RXD, TXD.
Добавлен модуль RS-232 (нумерация контактов разъема указана).
Перерисован разъем JTAG до реальной распиновки (вид со стороны деталей).
Файлы Quartus - http://narod.ru/disk/18766227000/beta_0.54.0.rar.html
З.Ы. Забыл указать на схеме, что нарисованы другие чипы памяти - K6R4008 (2х512кб) TSOP44.
Вместо них можно ставить K6R4008 (2х512кб) SOJ36, или K6R1008 (2х128кб) в TSOP32 (если вам хватит и 256кб). Переразводить плату под каждый из этих чипов не нужно, достаточно сделать разводку под TSOP44, а более мелкие по количеству ног чипы паяются посередине контактных площадок.
Добавляю очередную доку, на этот раз - USART и контроллер прерываний Орион2010
Error404
15.03.2010, 14:31
Добавляю очередную доку, на этот раз - USART и контроллер прерываний Орион2010
Похоже, дело близится к релизу. Может, пора формировать первый пост?
Будешь ли делать управляемый делитель (или как его правильно назвать) для программного выбора скорости UART? Мне кажется, что 57600 бод для Ориона в некоторых пограничных случаях это быстровато.
Попробую посчитать: 57600 бод это 7200 байт в секунду. На частоте 5МГц у нас имеется в распоряжении 99840х50 tstates в секунду, т.е. за секунду CPU выполнит порядка 500000 усредненных операций=команд (10 tstates). Как минимум половину надо зарезервировать на накладные расходы, не относящиеся к UART (например в CPM много висит на прерывании Int50, которое должно работать независимо от того пришли данные с UART или нет). Итого в пределе (когда к примеру льем сплошной массив данных) для режима работы по прерыванию на частоте 5МГц имеем размер обработчика прерывания USART 250000/7200=35 команд Z80. Немного, хватит только для обслуги (ei/di/push/pop/reti) и простейшего помещения данных в буфер (откуда некая посторонняя прикладная программа еще должна успеть выгрести между прерываниями - буфер ведь не безразмерный - и переместить в файл).
А вот 10 Мгц процессора похоже уже хватит и на скорости 57600 бод, но точно проверить можно только экспериментально (зависит от того насколько тормозно отработает принимающая прикладная программа, например, при записи принимаемых данных в файл - в тех операциях кода очень много).
Будешь ли делать управляемый делитель (или как его правильно назвать) для программного выбора скорости UART? Мне кажется, что 57600 бод для Ориона в некоторых пограничных случаях это быстровато.
Вообще говоря, я хотел (но это большая тайна) сказать, что будет максимум 38400, и баста. Но, поскольку pvlad замахивался аж на 115200, то я указал в самом деле максимум для нашей схемы :)
С установкой предделителя есть трудности в реализации в самих модулях USART. Там делитель расчитывается на стадии компиляции. Но, попив чайку выход я вроде как нашел. суть проста как три рубля. 115200/2= 57600, далее 28800, далее 14400.
Т.е. я могу скомпоновать USART как для скорости 115200, а далее просто делить клок на его входе.
Итого - получим скорости 57600, 28800, 14400, 7200, 3600, 1800 :v2_lol:
Или, как альтернатива - 2400, 4800, 9600, 19200, 38400, 76800.
Выбирай, какой список тебе больше по душе, такой и сделаю :)
Я может не совсем понял, но такой контролер прерываний будет терять прерывания.
Элементарная ситуация приходит прерывание от UART и через пару тактов процессора приходит кадровое, итог - прозевали прерывание от UART
Я может не совсем понял, но такой контролер прерываний будет терять прерывания.
Будет. 8 прерываний в строке*312 строк = примерно 2500. Шанс, что одно прерывание перебьет другое - примерно 1 к 2500. Вычисления больше от балды, но скорее всего недалеки от истины. Поэтому возможность кадрового прерывания я блокирую на период от поступления сигнала с UART до окончания INTACK. Извиняйте, забыл упомянуть :)
Как это реально будет работать - надо пробовать потоковую загрузку. Пока такой возможности нет.
Error404
15.03.2010, 15:32
Я может не совсем понял, но такой контролер прерываний будет терять прерывания.
Элементарная ситуация приходит прерывание от UART и через пару тактов процессора приходит кадровое, итог - прозевали прерывание от UART
А вот как это может выглядеть со стороны программной реализации чтобы не пропускать данные uart во время обработчиков Int50 (считаем что аппаратно оба прерывания разделены как описано постом выше):
Расчет на то, что в обработчиках прерывания UART первой командой делается DI, а предпоследней (перед reti) делаем EI.
Обработчик INT50Hz DI/EI не делает. Для защиты от повторного вхождения в самого себя он переставляет вектор своего обработчика на фиктивный обработчик, единственная функция которого запомнить было ли еще одно прерывание INT50Гц во время обработчика (и обработать его при выходе, если было). Так в наcтоящее время сделано в CP/M и я планировал это оставить в таком виде, т.к. пока не вижу подводных камней.
Таким образом, прерывание UART во время обработчика INT50Hz спокойно отработает (т.к. идет не на фиктивный обработчик Int50, вектор которого по адресу +FF, а на реальный обработчик UART по адресу +FD), оно ни на какой алгоритм не повлияет, т.к. лишь спуливает принятый байт в буфер, ничего тяжелого (типа переключения страниц, управления SP) тут не делается, в отличие от обработчика INT50Hz.
А вот прерывание INT50Hz во время обработчика UART работать не будет (из-за DI). Что, КМК, правильно.
Насколько все это хорошо наложится одно на другое покажет только будущее. :)
Error404
15.03.2010, 16:01
Итого - получим скорости 57600, 28800, 14400, 7200, 3600, 1800 :v2_lol:
Или, как альтернатива - 2400, 4800, 9600, 19200, 38400, 76800.
Выбирай, какой список тебе больше по душе, такой и сделаю :)
Скорости во второй линейке более близки к тому, что можно настроить для реального компорта под Виндой (см картинку во вложении).
Кстати, даже если брать 9600, то это хорошая скорость - я именно на 9600 (стандартной дефолтной) использую RS-232 терминалы для современных серверов IBM. Для терминальной консоли хватает за глаза.
А что касается 76800 - то чем черт не шутит, может 10МГц такта Ориона и для 76800 будет достаточно. :)
Еще вопрос: я задумался где можно сделать буфер для приема символов с UART. Как насчет области 0F504...0F5FF - там в текущей реализации ОЗУ? Было бы удобно...
Или при обращении, к примеру, к 0F583 или 0F58B в действительности идет обращение к 0F503, т.е. к 580вв55 ромдиска?
Будет. 8 прерываний в строке*312 строк = примерно 2500. Шанс, что одно прерывание перебьет другое - примерно 1 к 2500. Вычисления больше от балды, но скорее всего недалеки от истины. Поэтому возможность кадрового прерывания я блокирую на период от поступления сигнала с UART до окончания INTACK. Извиняйте, забыл упомянуть
Тож полумера, можно сделать все просто и эффективно, есть к примеру 8 латчей
каждое устанавливается своим источником прерывания, и есть приоритетный шифратор (делается табличкой элементарно и займет в том же циклоне пару LUT).
Последней командой в обработчике надо сбрасывать свой латч командой OUT или к примеру слушать шину и смотреть когда приходит RETI и контролер прерываний скажем через 10 тактов если есть еще не обработанные прерывание, повторно выставит INT процу и все по кругу, в общем примерно так работают широко распространенные PIC, вместо приоритетного можно к примеру кольцевую обработку источников. В общем по ресурсам не много
...
Для защиты от повторного вхождения в самого себя он переставляет вектор своего обработчика на фиктивный обработчик, единственная функция которого ...
Будет лучше проверять некую ячейку памяти на предмет равности нулю,
и сразу ее инкрементировать. Если был ноль то мы входим в тело обработчика, обрабатытаем дикреметируем уходим. Если был не ноль то выходим сразу.
Значение этой ячеки будет сообветсвовать количеству пропущенных вызовов, которео всегда можно учесть в теле обработчика.
Error404
15.03.2010, 16:21
Будет лучше проверять некую ячейку памяти на предмет равности нулю,
и сразу ее инкрементировать. Если был ноль то мы входим в тело обработчика, обрабатытаем дикреметируем уходим. Если был не ноль то выходим сразу.
Значение этой ячеки будет сообветсвовать количеству пропущенных вызовов, которео всегда можно учесть в теле обработчика.
Можно и так. Эффект примерно одинаковый.
Надо будет посмотреть какая реализация получится короче, такую и принять (там есть ньюансы на этот счет).
Последней командой в обработчике надо сбрасывать свой латч командой OUT или к примеру слушать шину и смотреть когда приходит RETI и контролер прерываний скажем через 10 тактов если есть еще не обработанные прерывание, повторно выставит INT процу и все по кругу, в общем примерно так работают широко распространенные PIC, вместо приоритетного можно к примеру кольцевую обработку источников. В общем по ресурсам не много
Это уже совсем другая машина получится.
В нашем случае нужно поймать USART (по любому), и по мере возможности обрабатывать INT50. Второе имеет более низкий приоритет, и потеря цикла не будет трагедией.
А наворачивать полнофункцональный PIC - нет ни большого смысла, ни желания. Иначе опять зависнем на полгода...
А за полезную информацию спасибо! :)
Я пытался примерно как-то так и представить себе "взрослый" контроллер.
---------- Post added at 16:59 ---------- Previous post was at 16:54 ----------
Скорости во второй линейке более близки к тому, что можно настроить для реального компорта под Виндой (см картинку во вложении).
У меня в терминалке выбор побогаче... Ну ладно, второй так второй.
Да, опять забыл добавить. Стоповых битов 2, а не один.
... Эффект примерно одинаковый.
Надо будет посмотреть какая реализация получится короче...
оба варианта не реентерабельны - в этом их главный минус.
в моем подходе кода будет однозначно больше (+ использование стека), но мы всегда знаем к-во пропущенных вызовов.
Error404
15.03.2010, 18:00
У меня в терминалке выбор побогаче... Ну ладно, второй так второй.
В моем случае - штатный виндовый HyperTerminal. Я правда не разбирался - этот набор скоростей это свойство терминала или все же драйвера RS-232 Винды.
Да, опять забыл добавить. Стоповых битов 2, а не один.
А отчего это зависит? Просто любопытно, т.к. в наиболее часто распространенных: 8-N-1, т.е. 1 стоповый бит.
Два стоповых бита тоже штатно выбираемо для COM-порта. И даже полтора. :v2_conf2:
А отчего это зависит? Просто любопытно, т.к. в наиболее часто распространенных: 8-N-1, т.е. 1 стоповый бит.
Штатовские терминалы использовали 7 битный код, им не надо KOI-8, KOI-7 для них достаточно.
Вот и получалось 1 бит стартовый 7 бит информации + 1 или 2 стоповых.
С приходом полной 8 битной передачи "установился" стандарт в 10 бит на "пакет" - 1+7+2 или 1+8+1
Не знаю, зачем делалось два стоповых бита, однако в комментариях к модулю англиским по белому написано: "The RS-232 parameters used are fixed: 8-bits data, 2 stop bits, no-parity."
Вообще говоря, я пробовал и один бит в терминалке ставить. разницы никакой.
Господа, есть вопрос.
Для работы Ориона с CP/M достаточно знакогенератора KOI-7 ?
Или может наоборот KOI-8 для CP/M излишество?
Сделал "переключение скоростей".
Биты D0, D1 порта F765.
"00" - 38400 (по умолчанию после сброса)
"01" - 19200
"10" - 9600
"11" - 4800 (для мазохистов).
Т.е. чем больше значение в порту, тем медленнее скорость.
Проверил погонять блоки по 64кб на крайних скоростях. На 4800 можно покурить успеть, пока блок загружается...
---------- Post added at 20:42 ---------- Previous post was at 20:42 ----------
Господа, есть вопрос.
Это к Error_404... only.
Error404
15.03.2010, 21:09
Господа, есть вопрос.
Для работы Ориона с CP/M достаточно знакогенератора KOI-7 ?
Или может наоборот KOI-8 для CP/M излишество?
В классической CP/M был KOI-7 (т.к. пришло с Запада). И даже такое было: некоторые навороченные текстовые редакторы типа WordStar используют символы с кодом более 127 как коды управления.
История развития российских клонов CP/M - история борьбы за 8-битные знакогенераторы. :)
КОИ-8 удобен, все что нужно для его использования в CP/M давно реализовано и не противоречит принципам CP/M. Я за KOI-8. :)
Сделал "переключение скоростей".
...
Т.е. чем больше значение в порту, тем медленнее скорость.
Как-то не по советски - шиворот-на выворот! Да и по умолчанию необходимо устанавливать 9600. Это некий стандарт по умолчанию. Этому я нашел подтверждение в нескольких терминальных программах. А маленькая скорость нужна при работе на длинную линию. 2400 для этого было бы даже лучше, но и 4800 пойдет.
Как-то не по советски - шиворот-на выворот!
Дык мы и не в СССР живем, панимаишь...
По сбросу лучше ставить значение 00. В то же время медленная скорость по умолчанию неудобна. Особенно учитывая, что желаемую скорость все равно будет ставить программа.
Но - дело вкуса. Идеи ваши - бензин наш. Переделаю после общего голосования.
Засим его и объявляю.
Я за KOI-8. :)
Хорошо, поставим вопрос прямо: какую кодировку будете использовать в данной реализации?
Я так понимаю запуск CP/M уже не за горами :v2_thumb:
Error404
16.03.2010, 00:35
Хорошо, поставим вопрос прямо: какую кодировку будете использовать в данной реализации?
Драйвер консоли оставлю как и было - VT52 с KOИ8.
Я так понимаю запуск CP/M уже не за горами :v2_thumb:
Я тоже на это надеюсь. :)
Новый порт F766 -
сканкод (PS/2 ПЦ) последней нажатой кнопки.
Теперь думаю, как обнулять значение при отпускании...
Только не говорите про умные вещи типа F0 :)
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot