PDA

Просмотр полной версии : Специалист_МХ_FPGA на u10ep3c



Страницы : [1] 2

fifan
09.10.2010, 17:53
Решил начать тему про реализацию ПК "Специалист" на DevBoard "Reverse" (http://zx.pk.ru/showthread.php?t=8993).

И так первый этап. Реализации Специалиста базовой конфигурации (Волкова) со следующими характеристиками:
1. ОЗУ (48 кБайт) - во внешней ОЗУ;
2. Видео ОЗУ цвета (12 кБайт х 3) - во внешней ОЗУ;
3. ПЗУ (6 кБайт - "Монитор-2", 2 кБайт - "Тест-М") - во внутренней памяти ПЛИС;
4. Процессор К580ВМ80 - внутри ПЛИС (пакет T80);
5. Клавиатура 84 клавиши - эмулляция нажатия с PS/2 клавиатуры.

Основная информация располагается на сайте (http://www.spetsialist-mx.ru/index9.html).

Рабочая версия rev44 (http://www.spetsialist-mx.ru/for_out/u10_spets_fpga_rev44.rar). Прошивка (http://www.spetsialist-mx.ru/for_out/spets_fpga_rev44.rar).
Клавиатура работает, не совсем правильно в "Тесте - М", изменена раскладка спецклавиш. Неудачные эксперименты по переводу (дополнению) до "Специалиста_МХ". В память записано ПЗУ "Монитор - 2" и игра "Canball" с адреса D800H.

fifan
09.10.2010, 18:03
Начал эмуллировать работу в Квартусе. Ewgeny7 предупредил о начальном переходе, зашитом в ядре T80 - http://zx.pk.ru/showpost.php?p=321898&postcount=113.
У меня с начальными значениями

PC <= "0000000000000001"; -- Program Counter
A <= "0000000000000001";
все адреса в ПЗУ нормально перебираются. В атаче - сами исходники.

Главная проблема - вывода на экран нет. Темный квадрат.

Ewgeny7
09.10.2010, 20:00
У меня с начальными значениями
А я про что предупреждал??? Обнули полностью строчку с цифрами. Иначе у тебя проц с адреса C001 стартовать будет.

fifan
09.10.2010, 20:31
Я ж написал, что у меня всё нормально со стартовым адресом. Причём именно со значением 1?! Я пробовал адрес С000 и 0. Никатят. Потому что у меня начальный пуск реализован в селекторе адресов. Вот в атаче картинка с симулятора. Там начало симуляции. Сверху вниз: выборка ПЗУ, адрес, данные.

fifan
09.10.2010, 20:38
Проблема, как ты уже заметил, Ewgeny7, с не выводом информации с видео ОЗУ на экран.

fifan
10.10.2010, 10:48
Благодаря огромной помощи Евгения, вывод на экран работает в полном объёме. Перед тем как оформить цвет нужно добиться от драйвера клавиатуры ввода символов (пока при нажатии любой клавиши, кроме Esc, ничего не вводится). Процедура опроса клавиатуры осложняется тем что существует два (в МХ ещё один) метода опроса клавиатуры. Но был удачный приём описания ввода - http://forum.easyelectronics.ru/viewtopic.php?f=16&t=40. Если не получится мой, то применю рабочий от dmtr.

sergey2b
10.10.2010, 13:24
fifan если у вас есть altera de1 могли бы вы пожалуйста перенести Специалист на нее

Ewgeny7
10.10.2010, 13:58
fifan, потенциальная ошибка здесь, нужно тактирование от клока а не от WR (чтобы успело перезаписать portx). Вот исправленный вариант:


---------------------------------------------Keyboard----------------------------------------------------
process(clock,keybsel,mreq_n,wr_n,dataO,a_buff)
begin
if (clock'event and clock='1') then
if (keybsel='1' and mreq_n='0' and wr_n='0') then

fifan
10.10.2010, 14:03
fifan, потенциальная ошибка здесь, нужно тактирование от клока а не от WR (чтобы успело перезаписать portx). Вот исправленный вариант:
И что работает?

b2m
10.10.2010, 14:43
И что работает?
От глобального клока работает всегда.

fifan
10.10.2010, 16:13
могли бы вы пожалуйста перенести Специалист на altera de1
altera de1 нет. Вообще-то перенос заключается в определении пинов и перекомпиляции проекта. Что сложного?

sergey2b
10.10.2010, 16:54
altera de1 нет. Вообще-то перенос заключается в определении пинов и перекомпиляции проекта. Что сложного?


я в этом дуб дерево могучее

ZEK
10.10.2010, 17:30
Что сложного?
В EP2C20 только 26КБ Внутренней памяти

fifan
10.10.2010, 18:04
В EP2C20 только 26КБ Внутренней памяти
Пока у меня задействовано 10 кБайт - загрузчик, Монитор-2 и Бейсик. 26 кБайт хватит даже для RAMFOS без ROM-диска (16 кБайт) для будущего Специалиста_МХ.

---------- Post added at 20:04 ---------- Previous post was at 19:52 ----------


я в этом дуб дерево могучее
Ну можно и тебе перенести. От тебя нужно: номера пинов для клавы, внешней памяти (кстати какой её объём), входная частота (значение), выходы на VGA разъём. Название сигналов приходящие/уходящие можно посмотреть на схеме Reverse - http://zx.pk.ru/attachment.php?attachmentid=20744&stc=1&d=1285011269.

Ewgeny7
10.10.2010, 18:41
Клава заработала, но с ошибками. Нужно копать правильность подключения матриц.

fifan
10.10.2010, 19:08
Клава заработала, но с ошибками. Нужно копать правильность подключения матриц.
Ну это ерунда, каждую клавишу легко вычислить. Что поменял?

Ewgeny7
10.10.2010, 20:17
Пока читаю только один ряд клавы. Разбираюсь что мешает читать другие. Такое очучение, что в scan_in поступает число не из единиц с одним нулём, а чтото другое...

---------- Post added at 20:17 ---------- Previous post was at 20:14 ----------

Пока логичней кажется такое:


process(clock,keybsel,mreq_n,wr_n,dataO,a_buff)
begin
if (clock'event and clock='1') then
if (keybsel='1' and mreq_n='0' and wr_n='0') then
case a_buff (1 downto 0) is
when "00" =>
porta <= dataO;
metod <= '0';
when "01" =>
portb <= dataO;
metod <= '1';
when "10" =>
portc <= dataO;
metod <= '0';
when "11" =>
portr <= dataO;
end case;
end if;
end if;
end process;

scan_in<=(portc(3 downto 0) & porta) when (metod='0') else ("111111" & portb (7 downto 2));

fifan
10.10.2010, 20:21
Ну да. Только porta и portc назначаются при разных адресах (00 и 10). Одновременно они разве могут принимать значения? Тогда нужна инициализация портов (porta, portb и portc) - присваивание единиц в каждом разряде.

Ewgeny7
10.10.2010, 20:34
Ну да. Только porta и portc назначаются при разных адресах (00 и 10). Одновременно они разве могут принимать значения?
Ну дык они и присваиваются при разных. Поочередно, как в реальной машине. А в последней строке в скан_ин идёт суммированное значение. Вроде правильно?

fifan
10.10.2010, 20:40
Да. При metod=0 переменная scan_in побитно такова С3 С2 С1 С0 A7 A6 A5 A4 A3 A2 A1 A0.
При metod=1 переменная scan_in побитно такова 1 1 1 1 1 1 B7 B6 B5 B4 B3 B2.

Ответ с драйвера клавы должен быть таков:
При metod=0 переменная scan_out побитно такова 1 1 1 1 1 1 B7 B6 B5 B4 B3 B2.
При metod=1 переменная scan_out побитно такова С3 С2 С1 С0 A7 A6 A5 A4 A3 A2 A1 A0.

Соответственно An, Bn, Cn - соответствующие биты считанные/записанные из/в порты ВВ55.

Ewgeny7
10.10.2010, 20:46
Трабла в том, что почему-то scan_in не получается "кошерным", в col всегда значение default.

fifan
10.10.2010, 21:35
Трабла в том, что почему-то scan_in не получается "кошерным", в col всегда значение default.
Печально... Как бы не используется третий метод опроса: "...Порты A, младшая половина C и B программируются на ввод. Нажатая клавиша определяется по положению нулей в обоих портах. Нажатая клавиша располагается на пересечении положения нулей..." Полный бред незнамо как реализуемый.:v2_dizzy_beatup: А какое там значение записывается в scan_in? Нельзя посмотреть?

---------- Post added at 23:35 ---------- Previous post was at 23:28 ----------

Вот из описания стандартных точек входа Загрузчика:


C254H - программирование порта клавиатуры
(А,С - вывод, В - ввод, режим 0).

C257H - программирование порта клавиатуры
(А,С0..С3 - ввод, В,С4..С7 - вывод, режим 0).

Ewgeny7
10.10.2010, 21:38
fifan, пипец подкрался незаметно...
Я сейчас залил в ПЗУ test-m.hex. В нем клавиатура работает, по крайней мере метод-0.
Я сейчас скину тебе с почтовый ящег проект. Там режим-0 судя по всему отлажен, в режиме-1 нужно будет переназначить матрицу аналогично режиму-0. Изменения сам увидишь, в keymatrix[][].
Но в чем проверять работу - я уже не знаю. В последний раз я использовал файл загрузчик+монитор из эмулятора EMU80. Как бы он там не патченный оказался...

fifan
10.10.2010, 22:05
test-m.hex. В нем клавиатура работает, по крайней мере метод-0.
Я тебе сразу говорил, что нужно было начинать с Теста-М. Ещё там писк по тесту в разных местах идёт - нужно ставить пищалку, на какой GPIO прикручиваем?

В последний раз я использовал файл загрузчик+монитор из эмулятора EMU80. Как бы он там не патченный оказался...
Всё может быть. Я тоже сталкивался с его неправильной работай. Например, курсор после надписи МОНИТОР не маргает. Нужно было ставить журнальный из "МК" Монитор-2 с моего сайта.

---------- Post added 11.10.2010 at 00:05 ---------- Previous post was 10.10.2010 at 23:55 ----------

Ладно, завтра залью. У меня полночь. Пока.

Ewgeny7
10.10.2010, 22:16
нужно ставить пищалку, на какой GPIO прикручиваем?
Давай по аналогии с прочими поделками на u10 - GPIO_2.

Нужно было ставить журнальный из "МК" Монитор-2 с моего сайта.
Попробуем.

---------- Post added at 22:16 ---------- Previous post was at 22:06 ----------


Ладно, завтра залью.
Можешь не заливать, не работает.

Error404
10.10.2010, 22:31
Давай по аналогии с прочими поделками на u10 - GPIO_2.


Может, "лишние сигналы" (т.е. которые не нужны для формирования системной шины на и без того тощем GPIO) выводить на "лишние ножки"? Например, ножки, отданные под USB явно лишние и могут использоваться. Там и звуковой разъем 3,5мм есть где пришпандорить - на месте разъема USB.

А то первая ресет, вторая - звук. Так от GPIO ничего не останется. :rolleyes: А туда еще вв55 прикручивать. :)

fifan
10.10.2010, 22:40
Давай по аналогии с прочими поделками на u10 - GPIO_2.
Хорошо.


Можешь не заливать, не работает.
Монитор-2? А знаешь в тесте-м то автор свои процедуры опроса клавы писал, может поэтому и работает в нём.

А туда еще вв55 прикручивать.
Я то же хотел порт "программатора" на ВВ55 к GPIO подключить.

Ewgeny7
10.10.2010, 22:57
Монитор-2? А знаешь в тесте-м то автор свои процедуры опроса клавы писал, может поэтому и работает в нём.
Не буду мудрить, напишу свою процедурку-тестилку обоих режимов. Так лучше будет.


А туда еще вв55 прикручивать.
Ы? Кто здесь???

fifan
10.10.2010, 22:58
Поправил файл spetskeyboard.v, подключил звук, инициализирую Тест-м (давайте его называть Рюмиком, потом поймёте почему). Прошивать плисину?

Ewgeny7
10.10.2010, 23:22
Прошивать плисину?
А в чем проблема? У тебя перезаписей >1000000.

---------- Post added at 23:22 ---------- Previous post was at 23:19 ----------

fifan, расскажи пжалуста о цветном режиме. Схему я видел, такого дурдома схемотехнического более нигде не видел. Даже INTE с процессора приплели, изверги.
Я хочу понять так сказать "процедурно", как программно окрашивается точка/байт на экране? При чем тут подтверждение прерывания? Куда лепить ОЗУ? Как к нему организован доступ? И т.д.

fifan
11.10.2010, 07:30
...расскажи пжалуста о цветном режиме. Схему я видел, такого дурдома схемотехнического более нигде не видел...
Схема для режима "Стандарт" следующая - http://www.spetsialist-mx.ru/index3.html . Ту что ты видел это для "МХ". Её можно существенно облегчить. В первой необходимо записывать три бита в отдельное видео ОЗУ цвета организацией 12 к х 3 праллельно основному ОЗУ. Т.е. когда идёт обращение к основному ОЗУ по адресам 9000-BFFF три бита цвета снимаемые с порта С клавиатуры запиываются в ОЗУ. Считываемые биты с этого ОЗУ и несут информацию о цвете. В "МХ" записывается уже 8 битов вместо 3. Но, информация о цвете считывается не с порта С, а с шины данных по сигналу U1.
Контроллер цвета в зависимости от режима (Стандарт/МХ) я использовал следующий (см. схему - http://www.spetsialist-mx.ru/schemes/color1.gif).
Пояснения:
1. RS/GS/BS - соответствующие выводы с порта С ВВ55;
2. /RAMOE - соответствующая выборка с управления ОЗУ;
3. U1 - сигнал управления регистром цвета в режиме МХ;
4. ACK - синхронизация регистра атрибутов;
5. BLANK - бланкирование чёрным цветом;
6. VIDEO - чёрно-белый видео выход, в нём информация о погашеных/засвеченных точках.
В режиме Стандарт не используемые биты (5 из 8) обнуляются - закарачиваются на массу на входах АП6. В нашем случае стоит поискать сигналы ACK и BLANK.

Ewgeny7
11.10.2010, 08:14
А запись в "цветное ОЗУ" как осуществляется?
В "Орионе", к примеру, ОЗУ цвета также лежит поверх основного видео-ОЗУ, адресация у них полностью совпадает, для записи цвета мы должны записать "1" в порт F900. Если записать туда "0", то мы вернемся к основной странице "черно/белого" ОЗУ.

LD a,01
LD (F900),a
LD addr,cvet
XOR a
LD (F900),a

Как это делается в Специалисте?

---------- Post added at 08:14 ---------- Previous post was at 07:51 ----------


Схема для режима "Стандарт" следующая - http://www.spetsialist-mx.ru/index3.html .
Могу предположить, что здесь делается так:

LD a,cvet
LD (FF02),a
LD a,video
LD (videoRAM),a

При этом по последней команде идет запись сразу и в видеоОЗУ, и в цветное ОЗУ. Верна догадка?

fifan
11.10.2010, 08:31
А запись в "цветное ОЗУ" как осуществляется?
Как это делается в Специалисте?
Собрать "Селектор адресов" -
http://www.spetsialist-mx.ru/index8.html. Ну это в "МХ", а в "Стандарте" достаточно поставить АП6, регистр атрибутов и мультиплексор (на первых порах и он не нужен). Т.е. в стандартном Спеце просто считывались данные с порта С применимо для vhdl в момент записи в адреса 9000-BFFF. И все. В момент считывания с этих адресов считывать данные и с видео ОЗУ.

P.S. для "селектора адресов" действует следующая таблица распределения памяти и адресов - http://www.spetsialist-mx.ru/index18.html

Вот из моей программы. Вроде должно работать. Правда нужно ещё добавить wr_n.

------------ Работа с видео ОЗУ цвета --------------------------
process(clk,mode,portc,u1,do_buff)
begin
if (clk'event and clk = '1') then
if mode = '1' then -- режим "Стандарт"
cd_in <= "00000" & not portc (4) & not portc (7) & not portc (6);
elsif u1 = '0' -- режим "МХ"
cd_in <= do_buff;
end if;
end if;
end process;

Верна догадка?
Да. выходы порта С для входных сигналов цвета на видео ОЗУ цвета вроде таково:
R - PC6,
G - PC7,
B - PC4.
Если ошибся потом поправим. В тесте-м (Рюмике) после прорисовки вида клавиатуры начинается тест клавиатуры и по 2 можно перейти в тест цвета. Рисуются четыре полосы: красная, зелёная, синяя, белая и чёрная.
Я намерено обхожу режим МХ. Он немного отличается от стандарта и лучше цвет запустить в стандарте, а потом собирать селектор адресов для перехода в МХ.

Error404
11.10.2010, 09:24
Ы? Кто здесь???


И Ay! AY! :v2_dizzy_bye:

fifan
11.10.2010, 09:36
И Ay! AY! :v2_dizzy_bye:
Не предусмотрено. В МХ использовался К580ВИ53 для генерации звука.

fifan
11.10.2010, 11:52
Ну что, не прекрасные, но хорошие результаты. Залил прошивку. Тест-М запускается сразу. Скорость правда в 2 раза наверное быстрее, чем было в железке. Клавиши все перепутаны. Сейчас составляю соответствия нажатия, чтоб потом поменять в прошивке. Фотки опубликую позже.

Ewgeny7
11.10.2010, 11:56
Скорость правда в 2 раза наверное быстрее, чем было в железке.
4Mhz. Чтоб не уснуть.

IanPo
11.10.2010, 13:49
fifan


process(clk,mode,portc,u1,do_buff)
begin
if (clk'event and clk = '1') then
if mode = '1' then -- режим "Стандарт"
cd_in <= "00000" & not portc (4) & not portc (7) & not portc (6);
elsif u1 = '0' -- режим "МХ"
cd_in <= do_buff;
end if;
end if;
end process;

А зачем в списке чувствительности столько сигналов ? Разве недостаточно только clk ?

Error404
11.10.2010, 14:26
Не предусмотрено. В МХ использовался К580ВИ53 для генерации звука.

Это я типо по аналогии со своими выступлениями в топиках про Орион (народ развлекаю). :)
Ну и раз уж ударился в оффтопик, не могу не заметить - AY в советских копутерах это была единственная действительно рулезная доработка (ну, может кроме замены 8080 на Z80). Т.к. при минимуме аппаратных доработок давала просто таки прорывное количество уже готового музыкального материала (в играх, в трекерах). То, что было на ВИ53 или, стесняюсь сказать, бипере - было уныло чуть более чем полностью.

Кстати, раз уж мы все тут собрались, подскажите пожалуйста: купил сегодня в Ашане за, страшно сказать, 49 рублей вот такой БП (см. вложение). Как считаете, не страшно к такому подключить reverse или Orion2010? По токам вроде с запасом... Корпус объемом примерно с два спичечных коробка. Написано БП для КПК Fujitsu (ну, они там все только типом разъема отличаются) :)

fifan
11.10.2010, 15:07
А зачем в списке чувствительности столько сигналов ? Разве недостаточно только clk ?
А я так привык. В список чувствительности добавлять все переменные, которые находятся в присвоениях справа. Компилятор потом лишних вопросов не задаёт.

По проекту. Изменил файл spetskeyboard.v. Звук ещё не подключал. Как надо? Последовательно с электролитом. Второй конец на землю. Плюс электролита к GPIO2?
Ewgeny7, всё ж наверное нужно на проц подать 2 МГц, для полного стандарта? Привожу как обещал фотки работы проекта с тестом-м.
Экран с "Рюмиком" показывает результат теста ОЗУ. Стилизованное изображение клавиатуры.

Ewgeny7
11.10.2010, 18:03
всё ж наверное нужно на проц подать 2 МГц, для полного стандарта?
Это будет более чем унылое зрелище. СтОит железо отладить в более комфортных скоростях, переключиться на 2мега дело трёх минут. У меня даже была мысль на 8Мгц процессор "зарядить". Потом решил что глюкодрома нам и так хватит :)


А зачем в списке чувствительности столько сигналов ? Разве недостаточно только clk ?
Часто компилятор ругается. Происходит это если во вложенных в процесс IF-ELSIF есть сигналы, не описанные в списке чувствительности. Дабы не напрягать лишнее внимание, лучше все сигналы "справа" сразу заносить в список. Хуже не будет.

---------- Post added at 16:14 ---------- Previous post was at 16:12 ----------


Второй конец на землю. Плюс электролита к GPIO2?
Ага. Или, как настаивает общественность, на выход USB плисины. Там как раз дорожки "прерываются", можно удобно прикошачить конденсатор.

---------- Post added at 16:16 ---------- Previous post was at 16:14 ----------

На работе тестик клавиатуры сделал, на эмуле проверял. Сейчас дома такой же накатаю. Проверим клаву в обоих режимах, и на этом вопрос закроем.

---------- Post added at 18:03 ---------- Previous post was at 16:16 ----------


купил сегодня в Ашане за, страшно сказать, 49 рублей вот такой БП
Прекрасный выбор начинающего плисовода :)
Проводочки только навевают сомнения что они аж ампер тянут, ну да ладно.

vlad
11.10.2010, 22:26
Ага. Или, как настаивает общественность, на выход USB плисины. Там как раз дорожки "прерываются", можно удобно прикошачить конденсатор.
Полностью поддерживаю такое решение

fifan
13.10.2010, 13:26
Что-то цвет не идёт. Где правильнее присваивать входные данные для видео ОЗУ цвета - при опросе порта С (переменная cd_in)? См. ниже.

u7 <= '1' when a_buff (15 downto 11) = "11111" else '0'; -- выборка порта клавиатуры
u7wr <= u7 and not (mreq_n or wr_n); -- доступ процессору на запись в порт клавиатуры

------------------------ Опрос клавиатуры -----------------------------
process(clock,u7wr,res_n,dataO,a_buff (1 downto 0))
begin
if (clock'event and clock = '1') then
if (u7wr = '1') then -- запись в порты клавиатуры
case a_buff (1 downto 0) is
when "00" => -- порт А клавиатуры
porta <= dataO;
metod <= '0'; -- порты А,С - на вывод; порт В - на ввод
when "01" => -- порт В клавиатуры
portb <= dataO;
metod <= '1'; -- порт В - на вывод; порты А,С - на ввод
when "10" => -- порт С клавиатуры
portc <= dataO;
cd_in <= not dataO (4) & not dataO (7) & not dataO (6);
snd <= not dataO (5); -- выход звука
when "11" => -- порт РУС клавиатуры
portr <= dataO;
end case;
end if;
end if;
end process;
...
colorram:lpm_ram0 -- видео ОЗУ цвета 12 кБита х 3
port map(
address=> a_buff (13 downto 0), -- адресная шина
clock => not clock, -- синронизация
data => cd_in, -- входная шина данных - данные о цвете
wren => not wr_n, -- разрешение записи
q=> cd_out --выходная шина данных
);
...
process(blank1,vid,res_k,cd_out) --VideoMUX--
begin
if blank1 = '1' then
if vid = '1' then
r <= cd_out (0); -- сигнал красного цвета
g <= cd_out (1); -- сигнал зелёного цвета
b <= cd_out (2); -- сигнал синего цвета
i <= '1'; -- сигнал яркости
else
r <= '0';
g <= '0';
...

Это наверное правильное место присваивания. Я присваивал прям в блоке описания видео ОЗУ цвета (lpm_ram0) - и не работало.:eek:
Кстати звука тоже нет... :v2_confu:

fifan
21.10.2010, 17:05
Получилась не большая затырка с цветом. Полное ощущение что вообще не функционирует видео ОЗУ цвета сделанное внутри плисины:

colorram:lpm_ram0
port map(
address=> ram (13 downto 0),
clken =>'1',
clock => not clock,
data => cd_in,
wren => not ram_we1,
q => cd_out
);

process(blank1,vid,res_k,cd_out)
begin
if blank1 = '1' then
if vid = '1' then
if cd_out (0) <= '1' then
r <= '1';
else
r <= '0';
end if;
if cd_out (1) <= '1' then
g <= '1';
else
g <= '0';
end if;
if cd_out (2) <= '1' then
b <= '1';
else
b <= '0';
end if;
i <= '1';
else
r <= '0';
g <= '0';
b <= '0';
i <= '0';
end if;
else
r <= '0';
g <= '0';
b <= '0';
i <= '0';
end if;
end process;
Полный проект здесь - http://www.spetsialist-mx.ru/for_out/u10_specialist_rev7.rar.

Keeper
21.10.2010, 18:03
fifan, а где на вашем сайте схема с видео-ОЗУ?

fifan
21.10.2010, 20:08
fifan, а где на вашем сайте схема с видео-ОЗУ?
Журнальная вот - http://www.spetsialist-mx.ru/schemes/ColorController1.png, а вот по этой у меня работал предыдущий компьютер "Специалист_МХ_PLM" - http://www.spetsialist-mx.ru/for_out/ColorContr.png.
Пояснения:
1. Сигналы RAMWE, RAMOE и MAn берутся с аналогичных основного ОЗУ;
2. U1 - сигнал с селектора адресов схемы МХ, складывается по ИЛИ/НЕ с WR;
3. Dn - шина данных процессора;
4. VIDEO - ч/б видео сигнал, со сдвигового регистра пикселей;
5. RED, GREEN, BLUE и BRIGHT - выходы цвета и яркости.

Keeper
21.10.2010, 22:07
На сколько я понял запись в ОЗУ цвета производится параллельно записи в ОЗУ экрана, а данные идут с порта C

fifan
22.10.2010, 18:04
Keeper, твою версию скомпилировал. Результат - пустой чёрный экран. Так что с выводом изображения что-то не то.

Keeper
23.10.2010, 01:30
Результат - пустой чёрный экран. Так что с выводом изображения что-то не то.

1. Изменить строку:

ActivePixel <= blank1 and vid; -- 1 = when pixel on screen
на

ActivePixel <= not blank1 and vid; -- 1 = when pixel on screen
Вопрос в том что означает лог. 1 для blank1.

2. Смотреть процесс:

process(clock,vcnt,hcnt) -- бланкирование
begin
if (clock'event and clock = '1') then
if (hcnt = 128 and vcnt (9) = '0') then
blank <='1';
elsif (hcnt = 511) then
blank <= '0';
end if;
end if;
end process;

На предмет правильности работы, гашение должно быть строчное и кадровое.

3. Зачем "обновлять" blank1 каждые 8мь пикселей?


process(hcnt,clock,vid0,blank) -- подготовка видеоданных для мультиплексирования
begin
if hcnt (2 downto 0) = "111" then
if clock'event and clock = '1' then
vid2 <= vid0;
blank1 <= blank;
end if;
end if;
end process;

Далее так же касается и Ewgeny7 :v2_dizzy_pirate:

4. Давать сигналам внятные имена: vid0,vid2,blank1 - непонятно что это и зачем, нужно лезть в код глубже и соображать что происходит...

5. Разбивать проект на функциональные блоки, пример можно глянуть в исходниках пентевы, например :)

Ewgeny7
23.10.2010, 13:08
Далее так же касается и Ewgeny7
Ответ КОЕ помнишь? ;)

---------- Post added at 12:53 ---------- Previous post was at 12:52 ----------


Разбивать проект на функциональные блоки
Мне не нравится подобный способ.

---------- Post added at 13:03 ---------- Previous post was at 12:53 ----------


Давать сигналам внятные имена: vid0,vid2,blank1


На предмет правильности работы, гашение должно быть строчное и кадровое.
Это не гашение, это screen. В "специалисте" бордюра нет, поэтому неактивный screen - фактически и есть гашение. В этом месте всё в порядке.

---------- Post added at 13:08 ---------- Previous post was at 13:03 ----------


Зачем "обновлять" blank1 каждые 8мь пикселей?
Упрощение логики. Можно конечно отслеживать границы экрана, но зачем городить.
Тем более что экран у спеца сделан по дудацки - не с 8000H а с 9000H. Видеоконтроллер "подхватывает" область начиная с 8000, но вплоть до 9000 изображение "гасится".
Поэтому обратите внимание, для цветного ОЗУ нужно использовать не 12, а 16кб ОЗУ.

fifan
23.10.2010, 16:21
Тем более что экран у спеца сделан по дудацки - не с 8000H а с 9000H. Видеоконтроллер "подхватывает" область начиная с 8000, но вплоть до 9000 изображение "гасится".
Поэтому обратите внимание, для цветного ОЗУ нужно использовать не 12, а 16кб ОЗУ.
А я использовал 12 кБ, нужно переписать блок видео ОЗУ цвета.

Ewgeny7
23.10.2010, 16:35
А я использовал 12 кБ, нужно переписать блок видео ОЗУ цвета.
В версии, которую я тебе отправлял последний раз - 16кб.

Keeper
23.10.2010, 18:19
Ответ КОЕ помнишь?
А как же внутренняя красота и гармония ;)

Это не гашение, это screen. В "специалисте" бордюра нет, поэтому неактивный screen - фактически и есть гашение. В этом месте всё в порядке.
Честно говоря я не вникал как устроен экран специалиста но гашение к бордюру никакого отношения не имеет. Гашение "обеспечивает" черный цвет на время 1. обратного хода по строкам 2. обратного хода по кадрам, иначе будет сбой синхронизации.

Таким образом сигнал гашения формируется двумя диапазонами по значениям hcnt, vcnt. Например, в строке 320 точек, из них на экране видно 256, тогда в диапазоне hcnt от 0 до 255 - экран, 256 - 319 - гашение строчное. Всего строк на экране 312, из них видимых 192, тогда для vcnt 0 - 191 - экран, 192-311 - гашение кадровое.

Ewgeny7
23.10.2010, 18:43
Таким образом сигнал гашения формируется двумя диапазонами по значениям hcnt, vcnt. Например, в строке 320 точек, из них на экране видно 256, тогда в диапазоне hcnt от 0 до 255 - экран, 256 - 319 - гашение строчное. Всего строк на экране 312, из них видимых 192, тогда для vcnt 0 - 191 - экран, 192-311 - гашение кадровое.
Здесь параметры такие - 0..127 - гашение, 128..511 - экран. Синхра внутри промежутка 0..127.
Кадровое - 0..511 - экран, 512...623 - гашение, внутри кадровая синхра.

---------- Post added at 18:43 ---------- Previous post was at 18:40 ----------


А как же внутренняя красота и гармония
Извиняйте, когда творишь в состоянии "пар из ушей" то за красотой следить времени нет. Конечно, fifan'у стоит "прибраться" в сигналах, ведь я ему передавал голимый полуфабрикат, слепленный не для красоты а чтоб работало.
Поэтому попрошу Вас гнать волну на технического директора - fifan'а :)
Всё, я отмазался!

Keeper
23.10.2010, 18:52
Здесь параметры такие

Тогда, если условится что blank = "1" - гашение, то:


-- бланкирование
sblank <= not (hcnt(8) or hcnt(7));
kblank <= vcnt(9);

process(clock)
begin
if (clock'event and clock = '1') then
blank <= sblank or kblank;
end if;
end process;

Ewgeny7
23.10.2010, 18:57
Тогда, если условится что blank = "1" - гашение, то:
Неа. hcnt(7) не годится, смотри внимательно. Нужно кроме него еще hcnt(8) подключать.

---------- Post added at 18:57 ---------- Previous post was at 18:56 ----------

... и blank означает экран, а не отсутствие экрана. Инвертируй.
... и вообще, реальный экран - это не blank, а blank1 (задержанный на 8 пикселов) :)

Keeper
23.10.2010, 19:03
Неа. hcnt(7) не годится, смотри внимательно.
Точно. Поправил.

... и blank означает экран
Опять возвращаемся к именам переменных :) Для мну blank - гашение, без особых примет - "1" - гашение, "0" - экран, а если бы n_blank - тогда наоборот :) Еще комментарии помогают в таких делах, хотя сам не часто их пишу :(

Ewgeny7
23.10.2010, 19:06
считай blank = screen

Keeper
23.10.2010, 19:06
Ewgeny7, ты не знаешь случайно, тот монитор что в циклоне использует цвето-ОЗУ?

Ewgeny7
23.10.2010, 19:08
кзтате, что такое бумажный бланк все знают? это лист, "экран". ;)

---------- Post added at 19:08 ---------- Previous post was at 19:07 ----------


ты не знаешь случайно, тот монитор что в циклоне использует цвето-ОЗУ?
нет. Тест во втором ПЗУ вмещает цветной тест видеовывода.

fifan
23.10.2010, 19:09
стоит "прибраться" в сигналах, ведь я ему передавал голимый полуфабрикат, слепленный не для красоты а чтоб работало.
Действительно, пока чтоб работало, да и с нормальным наименованием сигналов стоит подумать. А факты таковые, что приходится откатываться к более ранним пакетам, потому что новые ни то что цвет, но чб сигнал отказываются показывать. Ну так получилось с двумя последними проектами.
Завтра попробую два проекта, один от Ewgeny, но там экран не рабочий. Зато сделано переключение прошивок Тест-м/Монитор-2, переключение скорости 2/4 МГц. Второй - с контроллером цвета от Keeper'а (всё ли правильно?):

nBlackColor <= cd_out (2) or cd_out (1) or cd_out (0); -- 0 = when black
ActivePixel <= not blank1 and vid; -- 1 = when pixel on screen
ActiveNotBlackPixel <= ActivePixel and nBlackColor; -- 1 = when not black pixel on screen

red <= r;
green <= g;
blue <= b;
rb <= i;
gb <= i;
bb <= i;

process(clock)
begin
if clock'event and clock = '1' then
r <= cd_out (0) and ActiveNotBlackPixel;
g <= cd_out (1) and ActiveNotBlackPixel;
b <= cd_out (2) and ActiveNotBlackPixel;
i <= ActiveNotBlackPixel;
end if;
end process;

Ewgeny7
23.10.2010, 19:14
sblank <= not (hcnt(8) or hcnt(7));
словишь глючок при таком подходе. Потому что фронты сигналов имеют "зазор", на экране будет вертикальная полоса.

---------- Post added at 19:14 ---------- Previous post was at 19:12 ----------


Ну так получилось с двумя последними проектами.
эээ... мой проект показывает ч/б нормально. А если инвертировать клок на цветное ОЗУ - то даже проблески цвета есть.

fifan
23.10.2010, 19:24
мой проект показывает ч/б нормально. А если инвертировать клок на цветное ОЗУ - то даже проблески цвета есть.
Тогда дай его копию ещё раз, а то я наверное сам запарился...:confused:
Не то компилировал...

Ewgeny7
23.10.2010, 19:27
http://narod.ru/disk/26377342000/fifan_spec.rar.html

fifan
23.10.2010, 19:41
Из этого проекта. И что вот эта конструкция не гасит экран:

process(blank1,vid,res_k,cd_out) -- видеомультиплексирование
begin
if blank1 = '1' then
if vid = '1' then -- бланкирование сигнала
r <= '1';
g <= '1';
b <= '1';
i <= '1';
else
r <= cd_out (0); -- сигнал красного цвета
g <= cd_out (1); -- сигнал зелёного цвета
b <= cd_out (2); -- сигнал синего цвета
i <= '0'; -- сигнал яркости
end if;
else
r <= '0';
g <= '0';
b <= '0';
i <= '0';
end if;
end process;

Ewgeny7
23.10.2010, 19:46
Из этого проекта.
Этот кусок из проекта, который как раз ты мне прислал :)
Судя по нему, при наличии включенного пикселя на экране - будет белый цвет, при погашенном пикселе - цветной "фон". Я не стал разбираться в этом.

fifan
23.10.2010, 19:54
Вот именно и я не посмотрел этот кусок и на экране после компиляции ничего не увидел.

Ewgeny7
23.10.2010, 19:57
Вот именно и я не посмотрел этот кусок и на экране после компиляции ничего не увидел.
вообще-то должно быть видно. Для ч/б вывода там препятствий нет. У меня показывает и монитор, и тест.

fifan
23.10.2010, 20:07
Так. А ведь цветная точка - это INK, а PAPER в Специалисте всегда чёрный (он устанавливается для всего экрана). Значит меняю код на if vid = '0' then и должно всё устаканиться?

Вот цитата из описания работы контроллера цвета: "...Светлые элементы изображения окрашиваются в один из семи цветов. Вместе с чёрным получаем восемь цветов...".

Короче, будет наверное так:

if vid = '1' then -- если пиксель включен, то на экране - цветная точка
r <= cd_out (0); -- сигнал красного цвета
g <= cd_out (1); -- сигнал зелёного цвета
b <= cd_out (2); -- сигнал синего цвета
i <= '1'; -- сигнал яркости
else -- если пиксель выключен, то на экране - тёмный фон
r <= '0';
g <= '0';
b <= '0';
i <= '0';
end if;

Ewgeny7
23.10.2010, 21:54
Короче, будет наверное так:
Вроде как. Но если ничего не писать в порт С, то экран останется просто черным? Или по умолчанию из порта С читается FF? Тогда черно/белые приложения типа Монитора будут отображать текст на экране.

---------- Post added at 21:54 ---------- Previous post was at 21:30 ----------

Нашел стайку косяков в чтении цветного ОЗУ :) Пробую.

Ewgeny7
23.10.2010, 23:19
Цвета пока "технологически" изменены для отладки режима. Удаление синего "по умолчанию" и обмен местами красного и зеленого изменит картинку на "как положено". :) fifan, проверь пжалста биты цвета. У тебя кажись R и G перепутаны.

fifan
24.10.2010, 11:46
Цвета пока "технологически" изменены для отладки режима. Удаление синего "по умолчанию" и обмен местами красного и зеленого изменит картинку на "как положено". :) fifan, проверь пжалста биты цвета. У тебя кажись R и G перепутаны.
Возможно R и G изменены местами. А что значит "цвета технологически изменены" и "синий по умолчанию"?

---------- Post added at 13:46 ---------- Previous post was at 13:41 ----------

Скоро буду прошивать. Есть что для примера?

Ewgeny7
24.10.2010, 13:38
Скоро буду прошивать. Есть что для примера?
У тебя прошивания по расписанию? :v2_rolley Ну, каждому своё. Я раз пятьдесят в день прошиваю.

Очередная версия. Изменений много. Изменены имена некоторых сигналов. В общем, предлагаю сделать из нее очередную базовую (старые забыть).
Насчет цвета в тесте - я не знаю, запись/чтение ОЗУ работает исправно, знать бы точно какие цвета должны выводиться в тесте. Или там не те биты данных подключены??? В общем, это уже мелочи.

fifan
24.10.2010, 13:50
У тебя прошивания по расписанию?
Да ты прав. У меня дома под виндой 7 байтбластер не работает - прошиваю на работе. Скоро соберу усббластер.:redface:

знать бы точно какие цвета должны выводиться в тесте. Или там не те биты данных подключены??? В общем, это уже мелочи.
Порядок цветов нужно перебирать и ещё инвертировать при выходе с порта С. Цвета я подрихтую. Приложенный Тест-м уже с подобранными кодами цветов. Работал на предыдущем компе и на эмулляторе Пыхотина.

Ewgeny7
24.10.2010, 14:00
Меня смущает, что поля R и G имеют соответственно пурпурный и голубой цвета. Т.е. в них присутствует кроме основного еще и синий цвет. Т.е. или dataO(4) для синего неверно, или в тесте именно такие цвета и должны отображаться. ОЗУ цвета работает нормально. Вместо dataO(4) я ставил в cd_in нулевой бит. В тесте цвета исправлялись. Получается, что просто не те данные поступают на "синий бит" cd_in.

---------- Post added at 14:00 ---------- Previous post was at 13:58 ----------


У меня дома под виндой 7 байтбластер не работает - прошиваю на работе.
Вторую операционку поставь (ХР) на отдельный раздел винта. И работать будет шустрее, и... :)

fifan
24.10.2010, 14:16
Возможно что-то не так с присвоением переменной portc. Т.к. старшие биты порта С используются не только как данные для записи в видео ОЗУ цвета, но и для вывода звука. А вот звука то нет. Я и инвертировал бит 5 - звука нет. Правда это было на скорости процессора 4 МГц (Специалист изначально работал на 2 МГц).

Ewgeny7
24.10.2010, 18:42
А где на схеме делается инверсия цвета? На http://www.spetsialist-mx.ru/schemes/ColorController1.png инверторов я не нашел.

Ewgeny7
24.10.2010, 19:29
Разобрался.
С цветом - порядок.
Звук - также работает. По крайней мере должен работать, состояние выхода sound меняется.
Обновил вложение с проектом в посту #73 (http://www.zx.pk.ru/showpost.php?p=325097&postcount=73).

fifan
24.10.2010, 21:04
У меня ни того ни другого нет. Обидно. :o И Монитор не работает. Преславутое PROGRAM ? и все... нет курсора, не реагирует на клаву.:v2_confu: Может у меня часть данных при перепрошивке не затирается или не инициализируется память из ПЗУ?:mad:
Изменил в проге только: сделал переключение турбо/норма и поменял вывод на это:

r <= vid_c(0);
g <= vid_c(1);
Что такое? Глюки?

fifan
24.10.2010, 21:15
Здесь может нужно убрать u7 и заменить rd_n на u7rd?

process(clock,romd_d,romsel,mreq_n,md,rd_n,scan_ou t,shift,a_buff,portr,u7)
А здесь убрать res_k?

process(screen,vid_pix,res_k,cd_out,vid_c)

Ewgeny7
24.10.2010, 21:27
У меня ни того ни другого нет.
Ты тест-то запускал Scroll Lock'ом + ESC ?
У меня Монитор тоже не реагирует на клаву, но это вопрос отдельный. Надо третий режим опроса клавы делать.

---------- Post added at 21:23 ---------- Previous post was at 21:18 ----------

Здесь dmtr периодически ошивается :) Рассказал бы чтоли о своем контроллере клавиатуры? ;)

---------- Post added at 21:25 ---------- Previous post was at 21:23 ----------


Здесь может нужно убрать u7 и заменить rd_n на u7rd?
Пока ничего менять не надо. Монитор реально загоняет ВВ55 в чёрти-какие режимы.

---------- Post added at 21:27 ---------- Previous post was at 21:25 ----------


С цветом - порядок.
Кстати, пришлось копать код в тесте. Там кто-то хитрый изменил константы цвета выводимые в цветной порт. Я их изменил на "расчетные" и не прогадал, цвета получились какие и должны были быть.

fifan
24.10.2010, 21:42
У меня Монитор тоже не реагирует на клаву.
А курсор показывает? Должна быть надпись. (см. атач).

Пока ничего менять не надо. Монитор реально загоняет ВВ55 в чёрти-какие режимы.
Я поменял и все - цвета нет. Наверное из-за этого. ХОТЯ НЕТ! ТАМ ЖЕ ИДЁТ УСЛОВИЕ: elsif (u7rd = '1') then!


Кстати, пришлось копать код в тесте. Там кто-то хитрый изменил константы цвета выводимые в цветной порт. Я их изменил на "расчетные" и не прогадал, цвета получились какие и должны были быть.
А там были константы для 4-х цветного контроллера цвета (был такой когда-то). Вернее Рюмик делал свой тест задолго до изобретения 8-ми цветного контроллера цвета. И похоже эмуллятор Специалиста от Пыхотина тоже расчитан на 4 цвета.

Надо третий режим опроса клавы делать.
Да, наверное прийдётся. И Пыхотин об этом упоминал: "Порты A, младшая половина C и B программируются на ввод. Нажатая клавиша определяется по положению нулей в обоих портах. Нажатая клавиша располагается на пересечении положения нулей."

Ewgeny7
24.10.2010, 21:48
А курсор показывает? Должна быть надпись. (см. в атача).
Ё-маё, кто из нас "специалистник"? ;)
Не должно быть никакого курсора, просто PROGRAM ? и всё. Мы же F7+ВК нажать не можем.
Вывалиться в твою картинку можно, если из под монитора перескочить в тест, а затем обратно в монитор. Тогда будет и надпись МОНИТОР и курсор мигающий. На кнопки не реагирующий.

ТЫ ТЕСТ ЗАПУСТИЛ? (SCROLL LOCK, потом ESC)

fifan
24.10.2010, 22:16
Здесь тоже cd_out лишний:

process(clock,sel,md,cd_out)
Тест запускал и вываливался в Монитор и не разу не было ничего похожего. Кстати при подачи напряжения у меня нет синхронизации. Только после появления результата проверки ОЗУ в тесте идет нормальная картинка. Потом по сбросу тоже все нормально.

---------- Post added 25.10.2010 at 00:16 ---------- Previous post was 24.10.2010 at 23:53 ----------

Ewgeny7, если не затруднит тебя не мог ты проверить этот проект с изменениями прям сейчас - http://www.spetsialist-mx.ru/for_out/fifan_spec_my.rar.

Ewgeny7
24.10.2010, 22:17
Я так и не понял, тест работает? Цветное поле есть?

Здесь тоже cd_out лишний
Хрен с ним, больше - не меньше.

---------- Post added at 22:17 ---------- Previous post was at 22:17 ----------


если не затруднит тебя не мог ты проверить этот проект с изменениями прям сейчас
уже нет, всё отключено. :(

fifan
24.10.2010, 22:22
Жаль... Да цвета нет в тесте. Все чб. С этими файлами - http://www.zx.pk.ru/showpost.php?p=325231&postcount=79.

Ewgeny7
24.10.2010, 22:28
С этими файлами
Я не могу сравнивать каждую букву, времени нет. Тебе нужно было просто прошить готовыми файлами из моего архива (даже не надо компилировать). Убедиться что работает так же как и у меня.

---------- Post added at 22:28 ---------- Previous post was at 22:27 ----------

Всё, до завтра.

b2m
24.10.2010, 23:20
А курсор показывает? Должна быть надпись. (см. атач).
Это если взять биос из эмулятора Пыхонина. Он там "пропатчил" три байта (занулил вызов процедуры чтения с магнитофона).

Не должно быть никакого курсора, просто PROGRAM ? и всё. Мы же F7+ВК нажать не можем.
Вывалиться в твою картинку можно, если из под монитора перескочить в тест, а затем обратно в монитор.
Вывалиться можно нажав на любую клавишу из F1-F11, появится мигающий курсор, затем Enter, тогда появится вышеуказанная картинка, иначе процедура чтения файла начнётся заново. Но у вас же клава пока не работает...

fifan
25.10.2010, 05:31
Он там "пропатчил" три байта.
Вононо что, Михалыч!:v2_thumb: Только мы с Ewgeny7 брали готовые коды мониторов с журналов МК, вряд ли там пропатченно.
Я составлял из трёх файлов: (со страницы http://www.spetsialist-mx.ru/index6.html) col_monitor2.rar, m2_rom-disk.rar и monitor2_3.rar - загрузчик с поддержкой цвета, монитор с кодом обслуживания ROM-диска и знакогенератором-2.

Вывалиться можно нажав на любую клавишу из F1-F11, появится мигающий курсор, затем Enter, тогда появится вышеуказанная картинка, иначе процедура чтения файла начнётся заново. Но у вас же клава пока не работает...
Не знал что так можно выйти. Клава работает в первых двух режимах, когда на одни выводы ВВ55 подается "бегущий ноль", а с других снимается. Всё это работает в Тесте-М. А для монитора придётся сооружать третий режим работы клавиатуры, когда все выводы от клавиатуры ждут двух нулей, соответствующей нажатой клавише. Сегодня этим займусь.

fifan
25.10.2010, 16:17
ВАУ! ПОЛНЫЙ ГЛЮК! Применил две прошивки, и твою Ewgeny7, с поста 73 - http://www.zx.pk.ru/showpost.php?p=325097&postcount=73, файл output_file.jic и свою - нет изменений касающихся цвета и звука (т.е. их вообще нет). Что плисина глючит?
Ну там мои добавки по переключению турбо/нормал работают. Что делать? Ещё. При включении мелкие отрезки полосок на экране (при тесте) и расинхронизация с надписю (при Мониторе).

Ewgeny7
25.10.2010, 16:52
ВАУ! ПОЛНЫЙ ГЛЮК!
Ошибка в синхронизации цветного ОЗУ. Исправляю.

fifan
25.10.2010, 17:28
А в чём она заключается, а то я подумал грешить на плисину...

---------- Post added at 19:16 ---------- Previous post was at 18:58 ----------

Мысли по вводу режима №3 по опросу клавиатуры:
переменную metod расширить до трёх значений:
1. =0 - метод №0 (вновь вводимый). инициализируется плисина в это значение. При считывании портов ВВ55, если ранее не был режим 1 или 2 (см. ниже), значения битов всех портов А,В и С присваиваиваются в зависимости от нажатой клавиши (spetskeyboard.v). Конкретнее в этом коде должны быть два нуля, соответствующие нажатой клавише. Этот ответный код записывается сразу в porta, portb и portc.
2. =1 - метод №1 (ранее был =0). порты а и с выводят бегущий ноль, порт в вводит ответный код.
3. =2 - метод №2 (ранее был =1). порт в выводит бегущий ноль, порты а и с вводят ответный код.

Реализацию кода планирую в драйвере клавиатуры (spetskeyboard.v) - основная часть и в основной программе. Пока обдумываю конкретнее как вставить в программу хотелки.

---------- Post added at 19:28 ---------- Previous post was at 19:16 ----------

Вот реализация переключения скорости работы процессора - Turbo/Normal - 4 и 2 МГц соответственно (клавиши Page Up и Page Down):

signal turbo_key: std_logic; -- клавиша "Турбо"
signal turbo: std_logic:= '0'; -- скорость: 4 МГц / 2 МГц
...
component spetskeyboard is -- контроллер клавиатуры
port(
...
turbo_k : out std_logic -- нажата клавиша "Турбо" );
end component;
...
turbo <= '1' when turbo_key = '1' else '0'; -- скорость: 4 МГц / 2 МГц
...
process(clock,del,turbo)
begin
if (clock'event and clock = '1') then
if turbo = '1' then
clk_cpu <= del (0); -- Turbo режим 4 МГц
else
clk_cpu <= not del (1); -- Normal режим 2 МГц
end if;
end if;
end process;
Измененный файл spetskeyboard.v представлю позже.

Ewgeny7
25.10.2010, 17:47
А в чём она заключается, а то я подумал грешить на плисину...
Системный клок у нас - 16Мгц.
А на ОЗУ я подвел частоту с генератора - 50Мгц.
Пятьдесят на 16 не делится, поэтому фазы сигналов плывут друг относительно друга.

fifan
25.10.2010, 17:57
Понятно. Просто заменить на: clock=> not clock,

Ewgeny7
25.10.2010, 18:01
Просто заменить на: clock=> not clock
И не получим ничего, кроме черного экрана. Адреса не успеют обновиться, строб записи не зафиксируется.
Для ОЗУ в ПЛИС нужна частота в разы большая чем пиксельклок.

В общем, переделал я. Для подстраховки хочу еще сделать и второй вариант, с размещением цветного ОЗУ в основной (внешней) памяти. Проверишь на работе оба варианта.

fifan
25.10.2010, 20:05
Ну что, готово?

Ewgeny7
25.10.2010, 20:24
Ну что, готово?
Первый вариант (с внутренней ОЗУ) давно готов. Домучиваю вариант с внешней ОЗУ.

---------- Post added at 20:10 ---------- Previous post was at 20:07 ----------

10 минут и будет готово.

---------- Post added at 20:10 ---------- Previous post was at 20:10 ----------

10 минут и будет готово.

---------- Post added at 20:20 ---------- Previous post was at 20:10 ----------

Оба варианта.
Прошивки уже скомпилены, залей их без компиляции. :v2_dizzy_wassup: :v2_dizzy_doctor:

http://narod.ru/disk/26546676000/external_RAM_spec.rar.html
http://narod.ru/disk/26546698000/internal_RAM_spec.rar.html

---------- Post added at 20:23 ---------- Previous post was at 20:20 ----------

Турбопереключалки внедрены.

---------- Post added at 20:23 ---------- Previous post was at 20:23 ----------

Турбопереключалки внедрены.

---------- Post added at 20:24 ---------- Previous post was at 20:23 ----------

Форум глючит

fifan
25.10.2010, 20:34
Да форум глючит.Тут во нашёл ошибку в драйвере клавиатуры. Во втором методе при опросе порта В возвращается код с портов А и С. Подчёркиваю и. Значит код ответа должен состоять из 8 + 4 битов. А у тебя стоит scan_out (7 downto 0) и scan_out (3 downto 0) соответственно записываются в порты А и С. Должно быть во втором случае быть такое:

dataI <= "0000" & scan_out (11 downto 8);
Т.е. порту а присваиваются младшие 8 бит, порту с - старшие 4 бита переменной scan_out. По крайней мере в драйвере клавиатуры вырабатываются 12 бит кода ответа.

Ewgeny7
25.10.2010, 20:36
Тут во нашёл ошибку в драйвере клавиатуры.
Хорошо, покурю на эту тему :)

fifan
25.10.2010, 20:48
Ты наверное так сделал в драйвере клавиатуры для отладки (твоё закомментировал):

case (sp_kb_scan)
12'b111111111110: col <= 4'b0101;
12'b111111111101: col <= 4'b0100;
12'b111111111011: col <= 4'b0011;
12'b111111110111: col <= 4'b0010;
12'b111111101111: col <= 4'b0001;
12'b111111011111: col <= 4'b0000;
default: col <= 4'b1111;
endcase
// sp_kb_out_ <= { 6'b111111 & ~keymatrixb[col]};
sp_kb_out_ <= ~keymatrixb[col];
end
// if (col == 4'b1111) sp_kb_out_ <= 12'b111111111111;
end
Ладно пошел спать (твоё московское время +2 будет моё). Завтра прошью две прошивки.

Ewgeny7
25.10.2010, 20:51
Хорошо, покурю на эту тему
Поправил, но не помогло.

---------- Post added at 20:51 ---------- Previous post was at 20:49 ----------


Ты наверное так сделал в драйвере клавиатуры для отладки
я фиг его знает. Там уже понамешано и твоего, и моего... :)

fifan
25.10.2010, 20:52
ram_clk какой частоты? Понял 64 МГц.

Ewgeny7
25.10.2010, 20:57
64. 32 и 48 не хватало :)

fifan
26.10.2010, 11:35
Всё прекрасно заработало! Спасибо, Ewgeny7! Сейчас буду вводить 0-й метод опроса клавиатуры, чтоб добиться работы Монитора. Вечером представлю наброски по этому поводу.

Error404
26.10.2010, 12:11
А можно очень пионерский вопрос не в тему? :v2_dizzy_wassup:

Конфигурация ПЛИС на U10 где хранится? Если это какое-то конфигурационное ПЗУ, то можно ли сделать так: завесить параллельно несколько конфигурационных ПЗУ и тумблер на выборку, чтобы был режим старта с прошивки_1 или с прошивки_2 и т.д.

Ewgeny7
26.10.2010, 12:15
то можно ли сделать так
Можно. 3$/конфПЗУ :v2_dizzy_vampire:
Выходы ASDO через тумблер на ПЛИС.


---------- Post added at 12:15 ---------- Previous post was at 12:15 ----------


Всё прекрасно заработало!
Обе версии?

Error404
26.10.2010, 12:21
Можно. 3$/конфПЗУ :v2_dizzy_vampire:
Выходы ASDO через тумблер на ПЛИС.


Ну, 3$ за счастье - это терпимо. Вон, в соседнем топике 100тыр потратить не могут, а тут 3$.

Зато можно будет не перешивая (ведь не всегда под рукой есть байтбластер) иметь одновременно Спец и Орион, или Орион и ZX и т.д.
Это очень круто. :v2_dizzy_gamer:

fifan
26.10.2010, 15:59
Обе версии?
Да. Я думаю далее юзать версию с видео ОЗУ цвета во внешней CY7C1049DV33 512K. В ней же планирую размести RAM-диск на 256 кБайт (4 страницы конфигурации Специалист_МХ). Сейчас дописываю драйвер клавиатуры с 0-методом опроса клавиатуры. Затем возьмусь за Специалист_МХ.

Ewgeny7
26.10.2010, 16:24
Да. Я думаю далее юзать версию с видео ОЗУ цвета во внешней CY7C1049DV33 512K
Тож правильно. Внутреннюю память лучше отдать под ПЗУ.
Меня сейчас зверски заинтересовало два вопроса. "Выдирание" модуля ФАТ-ТРДОС из Спекки-2007 и подключение реальной ВГ93 к u10.

fifan
26.10.2010, 16:32
Обновил первую (http://www.zx.pk.ru/showpost.php?p=321936&postcount=1) страницу темы. Там буду выкладывать рабочие исходники под Quartus II и прошивки КонфигПЗУ.

Error404
26.10.2010, 16:45
Тож правильно. Внутреннюю память лучше отдать под ПЗУ.
Меня сейчас зверски заинтересовало два вопроса. "Выдирание" модуля ФАТ-ТРДОС из Спекки-2007 и подключение реальной ВГ93 к u10.

А там обслуга ФАТ не на микроконтроллерах ли сделана?
На микроконтроллерах это просто: полно С-шных исходников обслуги ФАТ в открытом доступе - "наливай да пей". А какой смысл в реальной ВГ-93?

Ewgeny7
26.10.2010, 17:20
А там обслуга ФАТ не на микроконтроллерах ли сделана?
Да, на Мега32


На микроконтроллерах это просто: полно С-шных исходников обслуги ФАТ в открытом доступе - "наливай да пей".
Голый ФАТ ничего недаст. В Спекки помимо ФАТа отработана эмуляция ВГ93 и пропатчены прошивки ПЗУ для удобной работы с SD. Весь этот комплекс огого какая вещь :)


А какой смысл в реальной ВГ-93?
Предполагаю, для подключения реального дисковода :) Благо, NedoPC неимоверно круты и уже давно сделали это.

---------- Post added at 17:20 ---------- Previous post was at 17:08 ----------

реальная ВГ93 отпадает, выходов GPIO не хватит :(

molodcov_alex
26.10.2010, 17:49
пропатчены прошивки ПЗУ
Пропатчены прошивки там, потому что единственный (?) порт для общения с контроллером - 1Fh.
А остальное - просто доп програмка (снапшот с флешки грузящийся).

Ну а фат сделан на этом:
http://elm-chan.org/fsw/ff/00index_e.html

Error404
26.10.2010, 19:13
Ну а фат сделан на этом:
http://elm-chan.org/fsw/ff/00index_e.html

Отличная либа, кстати. Я на ней в CPM делал читалку/писалку FAT.

fifan
27.10.2010, 15:57
Что-то не как опрос клавиатуры не работает в мониторе. Напоминаю что наверное используется не реализованный опрос, когда все выводы ВВ55 предназначенные для клавиатуры программируются на ввод. Пересечение клавиши - два нуля, соответствующие строке и столбцу нажатой клавиши. Вот выдержки кода:

...
if res_n = '0' then
metod <= "00";
...
elsif (u7rd = '1') then -- запись в порты клавиатуры
if a_buff (1 downto 0) = "00" then -- порт А клавиатуры
if metod = "00" then
dataI <= scan_out0 (7 downto 0); -- код ответа
else
dataI <= scan_out (7 downto 0); -- код ответа
end if;
end if;
if a_buff (1 downto 0) = "01" then -- порт В клавиатуры
if metod = "00" then
dataI <= scan_out0 (13 downto 8) & not shift & '0'; -- код ответа
else
dataI <= scan_out (5 downto 0) & not shift & '0'; -- код ответа
end if;
end if;
if a_buff (1 downto 0) = "10" then -- порт С клавиатуры
if metod = "00" then
dataI <= "0000" & scan_out0 (17 downto 14); -- код ответа
else
dataI <= "0000" & scan_out (11 downto 8);-- код ответа
end if;
end if;
...
spetskey:spetskeyboard
port map(
...
metod => metod,-- метод опроса
sp_kb_out0 => scan_out0, -- код ответа для метода №0
...
Драйвер клавиатуры:

always @(posedge clk)
begin
if (reset)
case (metod)
0:
begin
sp_kb_out0_ <= 18'h00;
end
...
else
begin
if (strobe)
case (metod)
0:
begin
case (sp_kb[7:0])
9'h005: sp_kb_out0_ <= 18'b011101111111111111; //F1
9'h006: sp_kb_out0_ <= 18'b101101111111111111; //F2
9'h004: sp_kb_out0_ <= 18'b110101111111111111; //F3
9'h00c: sp_kb_out0_ <= 18'b111001111111111111; //F4
9'h003: sp_kb_out0_ <= 18'b111101111101111111; //F5
9'h00b: sp_kb_out0_ <= 18'b111101111110111111; //F6
9'h083: sp_kb_out0_ <= 18'b111101111111011111; //F7
9'h00a: sp_kb_out0_ <= 18'b111101111111101111; //F8
9'h001: sp_kb_out0_ <= 18'b111101111111110111; //F9
9'h009: sp_kb_out0_ <= 18'b111101111111111011; //ЧФ
9'h078: sp_kb_out0_ <= 18'b111101111111111101; //БФ
9'h007: sp_kb_out0_ <= 18'b111101111111111110; //СТР
... и так далее на все 12х6 клавиш
Принцип прост: при считывании с одного из портов ВВ55 считывается код с двумя нулями, соответствующий скан-коду PS/2 клавиатуры.

b2m
27.10.2010, 16:42
Напоминаю что наверное используется не реализованный опрос, когда все выводы ВВ55 предназначенные для клавиатуры программируются на ввод.
Нет такого метода опроса. Выводы ВВ55 подтянуты к +5В, и если все они программируются на ввод, то нажимай-ненажимай - получишь одни еденицы.

fifan
27.10.2010, 16:46
Читаем здесь (http://emu80.org/dev/dev_s.html). Есть такой метод. Однако мысль понятна. Реальный ВВ55 нам преподнесёт ещё много сюрпризов. Один уже был: почему то инвертируются сигналы цвета, снимаемые со старшей тетрады порта С.

b2m
27.10.2010, 17:04
Там нет доказательств. Написать и я могу.
А если интересует метод ввода, который используется во время чтения с магнитофона, то это - А и С на вывод, В на ввод. Как задали в начале монитора, так он и не меняется (в начале монитора стоит запись 82h в РУС).

fifan
27.10.2010, 17:16
Там нет доказательств. Написать и я могу.

Может быть дело вот в чём. RAMFOS (ОС Специалиста_МХ) использует такой алгоритм: сначала 12 выводов программируются на вывод и засылаются все нули, а потом анализируется порт В. Если хоть один ноль появится, но включается 2-ой метод опроса клавиатуры, а именно - порт В на вывод, порты А и С на ввод. Пыхотин (ссылка на сайт выше) может действительно написал, не полностью, не подумав.

А если интересует метод ввода, который используется во время чтения с магнитофона, то это - А и С на вывод, В на ввод. Как задали в начале монитора, так он и не меняется (в начале монитора стоит запись 82h в РУС).
Вот за это спасибо. Хотел уже начало Монитора-2 дизасемблировать. Приму к сведению эту информацию.

b2m
27.10.2010, 17:19
В драйвере клавиатуры действительно используются оба метода, а при чтении с магнитофона по другому нельзя (если не переключать постоянно, как в драйвере клавиатуры), т.к. ввод с магнитофона тоже через порт В идёт.

fifan
27.10.2010, 17:37
Значит при сбросе (будет рассматривать Монитор-2) на порты А и С посылаются нули. С порта В считывается ответ с клавиатуры и если есть хоть один нулевой бит, то начинается опрос клавиатуры методом "бегущий ноль". Вот почему у меня не идёт... Хотя эта процедура может и не имеет место быть...

---------- Post added at 19:37 ---------- Previous post was at 19:36 ----------

Оставляю два метода опроса, а об начальной процедуре опроса нужно подумать...

Ewgeny7
27.10.2010, 18:19
Пишу тестилку обоих режимов.
Тест нулевого режима (А,С - выход, В - вход) уже работает.
По нему пока вопросов не возникло.

b2m
27.10.2010, 18:28
Значит при сбросе (будет рассматривать Монитор-2) на порты А и С посылаются нули. С порта В считывается ответ с клавиатуры и если есть хоть один нулевой бит, то начинается опрос клавиатуры методом "бегущий ноль".
Драйвер клавиатуры лишь переключает режимы и читает из портов. Так что никакого метода "бегущий ноль" тоже нет. Включил один режим, прочитал А и С, нашёл по нолику одну координату, включил другой режим, прочитал В, нашёл по нолику вторую координату.

Ewgeny7
27.10.2010, 18:32
Включил один режим, прочитал А и С, нашёл по нолику одну координату, включил другой режим, прочитал В, нашёл по нолику вторую координату.
Вот это архиценно :)
Спасибо, буду копать отсюда. И до обеда...

b2m
27.10.2010, 18:37
Вот в играх, там могло быть по-другому, там нужно лишь проверить, нажата ли определённая клавиша. Поэтому скорее всего выставлялся ноль на одной линии, и читался с перпендикулярных линий.

---------- Post added at 19:37 ---------- Previous post was at 19:32 ----------


Включил один режим, прочитал А и С, нашёл по нолику одну координату, включил другой режим, прочитал В, нашёл по нолику вторую координату.
Кстати, именно поэтому, скорее всего, Пыхонин и написал про третий способ, в котором "все порты устанавливаются в режим чтения" :)

fifan
27.10.2010, 19:29
Включил один режим ... включил другой режим.
Что это значит? Подаются одни нули во все биты порта?
На счёт не бегущего нуля я сомневаюсь. Почему тогда все наработки по сканированию клавы в Тесте-м работают? Я написал выше что есть начальный способ опроса клавы. Когда просто тупо посылаются все нули на порт (два порта), потом считывается код с других портов. Только потом решается опрашивать клаву еще раз или не надо , если ничего не нажато.

b2m
27.10.2010, 20:00
Что это значит? Подаются одни нули во все биты порта?
При записи РУС происходит следующее: если порт программируется на вывод, то его значение обнуляется, а если на ввод, то его значение берётся в выводов микросхемы.

При сбросе все порты программируются на ввод, и если выводы подтянуты к +5В, то на них будет еденица. Это относится и к тем выводам, которые по схеме используются только на вывод.

Например в Башкирии-2М один из портов используется для задания номера карты памяти. Так вот после сброса устанавливается карта, в номере которой все еденицы (в данном случае 7).

fifan
27.10.2010, 20:08
если порт программируется на вывод, то его значение обнуляется
Теперь понятно, почему на старших битах порта С сидят нули.

b2m, ты не ответил, при опросе клавиатуры с порта подаются все нули в разрядах?

b2m
27.10.2010, 20:18
При опросе клавиатуры устанавливается РУС, и затем сразу идёт чтение из порта. Это значит, что во всех разрядах на вывод будут нули. При чтении из порта ноль будет там, где нажата клавиша. Таким образом, в одном режиме получаем координату по горизонтали, во втором - по вертикали.

Ewgeny7
27.10.2010, 21:53
У меня клава в Мониторе уже фунциклирует. С глюками и косяками, но работает.

Блин, на форум не войти. Два часа между делом пытался сообщение написать и отправить...

b2m
27.10.2010, 22:04
Поздравляю.

fifan
27.10.2010, 22:09
вот я тоже сварганил, посмотри как также?

Ewgeny7
27.10.2010, 23:35
Поигрался в Мониторах...
Запустил Бейсик. Такого разочарования я давно не испытывал... Там реально "пробел" сделан на "ТАБ"е???? В Мониторе все кнопы работают прекрасно.



вот я тоже сварганил, посмотри как также?
Щаз посмотрим.

---------- Post added at 23:30 ---------- Previous post was at 23:07 ----------


Щаз посмотрим.
Полторы кнопки :( Не прокатило.

---------- Post added at 23:35 ---------- Previous post was at 23:30 ----------

http://narod.ru/disk/26650274000/internal_RAM_spec.rar.html
Промежуточный вариант. Клава нормально работает в мониторах/бейсиках. В тесте - глючит.

b2m
27.10.2010, 23:51
Там реально "пробел" сделан на "ТАБ"е????
Там просто у разных Специалистов раскладка немного разная. Касается как раз клавиш tab и esc. Если сравнишь файлы layout.kbd и layoutmx.kbd из моего эмулятора, то поймёшь, о чём я говорю. Просто в одной из версий пробел занимал три кнопки, а потом сделали одну, а на место неиспользованных бит засунули tab и esc. Там ещё фукциональные клавиши смещены, потому что после перемещения tab и esc на их место добавили пару новых функциональных.

Вобщем, сравни схемы клавиатуры Специалиста и Специалиста-М. У тебя, похоже, реализована клавиатура Специалист-М, а монитор от Специалиста.

У меня в эмуляторе монитор Специалиста-М и Специалиста-МХ.

Ewgeny7
28.10.2010, 07:57
У меня в эмуляторе монитор Специалиста-М и Специалиста-МХ
Я сейчас вообще засунул в систему Монитор и прочий софт от "ЛИК". Кстати, это не "Ленин И Крупская" случаем??? :)
Бейсики подвисают, но это было ожидаемо. Они родом от бейсик-микро, а там активно используется команда DAA процессора. Но в Z80 и ВМ80 она работает по разному, в результате бейсики улетают в космос. :( Это мы проходили еще на "Орионе".
Не хотелось бы, но придется менять проц на 8080...

---------- Post added at 07:57 ---------- Previous post was at 07:55 ----------


У тебя, похоже, реализована клавиатура Специалист-М, а монитор от Специалиста.
Вот по раскладке клавиатуры - это пожалуйста к fifan'у. Я по "Специалисту" пока полный профан. Что он мне дал, с тем и живу :)

fifan
28.10.2010, 10:56
Вот по раскладке клавиатуры - это пожалуйста к fifan'у.
Раскладка не совпадает у Специалиста-М, у Волкова и МХ изменены назначения нескольких клавиш. Особняком стоят клавиши "Сброс" и "НР".
Это - "Специалист" Волкова:
http://www.spetsialist-mx.ru/images/keyboard1.png
Это - "Специалист-М":
http://www.spetsialist-mx.ru/images/Keyboard2.png
Это - "Специалист_МХ":
http://www.spetsialist-mx.ru/images/Keyboard3.png

Error404
28.10.2010, 11:04
Фигассе, зоопарк. :)

b2m
28.10.2010, 11:08
Т.е. у Волкова не было клавиши Ctrl?
А в Специалист-М есть клавиши "НР" (нижний регистр) и "Shift". Мне казалось, это одна и та же клавиша.

---------- Post added at 12:08 ---------- Previous post was at 12:06 ----------


Фигассе, зоопарк. :)
Вот что значит отсутствие строго определённого стандарта и непродуманная первая публикация материала.

Ewgeny7
28.10.2010, 11:41
Стандартами там и пахнет...
Есть хоть какой-то "стандарт" на расширение памяти (доп. страницы)?

Ewgeny7
28.10.2010, 13:19
Переделал версию с ОЗУ цвета во внешней RAM. Теперь вся память уместилась в линейке 64кб. Цветная память находится в области под ПЗУ и портами. Экономия, однако! :)
Долго я мучал Бейсик, пока допёр что нужно перед началом работы CLS 0 делать, иначе PRINT глючит :v2_scare:

fifan
28.10.2010, 16:14
Есть хоть какой-то "стандарт" на расширение памяти (доп. страницы)?
Понятие "расширенные страницы" есть в Специалисте_МХ (http://www.spetsialist-mx.ru/index18.html). Там на рисунке показаны четыре страницы. Их может быть до 8.
Ewgeny7, выложи версию под 64 к непрерывной памяти во внешнем ОЗУ. Нашёл ошибки в драйвере клавиатуры в режиме теста, все неправильные нажатия вычислил.

Ewgeny7
28.10.2010, 16:33
выложи версию под 64 к непрерывной памяти во внешнем ОЗУ.
Эээ... на работе оставил :(


Нашёл ошибки в драйвере клавиатуры в режиме теста, все неправильные нажатия вычислил.
ага, значения col надо наоборот поставить. Я уже исправил.

Да, заменил процессор на Т8080 из Вектора-06. Васики сразу заработали.

fifan
28.10.2010, 16:48
Эээ... на работе оставил :(
Жаль.

значения col надо наоборот поставить. Я уже исправил.
Да, точно так.

---------- Post added at 18:48 ---------- Previous post was at 18:40 ----------

Кстати, забыл сказать, звука то нет! В начале устанавливается в 1 и в конце теста обнуляется сигнал на GPIO2. Проверял осциллографом.

Ещё. Не понял какие значения col надо наоборот поставить? В массиве keymatrixa[0][5] индексы наоборот или в case присваениях - 12'b111111111110: col <= 4'b1011 ? А то не так понял.

Ewgeny7
28.10.2010, 22:15
Разбирался с мышкой. Универсальный модуль готов. Можно на любой комп прицеплять.


Не понял какие значения col надо наоборот поставить?
Завтра, завтра....

fifan
29.10.2010, 05:11
Разбирался с мышкой. Универсальный модуль готов. Можно на любой комп прицеплять.
Интересно посмотреть.

fifan
29.10.2010, 10:57
Ewgeny7, файл готов?

Ewgeny7
29.10.2010, 11:43
Вот

fifan
29.10.2010, 16:18
Какие в нём изменения?

Ewgeny7
29.10.2010, 19:05
Какие в нём изменения?
То, что я описывал - менеджер памяти на 64кб и клавиатура по нулям. Прошивки - тест обычный и ПЗУ "ЛИК" с дизасмом и бейсиком. Оно мне больше остальных понравилось :)

fifan
29.10.2010, 20:01
Попробовал, работает. Но звука нет. Сужу по молчанию в тесте. Перехожу к селектору адресов к Специалисту_МХ.

Ewgeny7
29.10.2010, 20:51
Попробовал, работает. Но звука нет.
Ага, я тоже заметил.

fifan
29.10.2010, 23:02
Разбираюсь с драйвером клавиатуры. Заметил в мониторе вместо пробела ноль печатается. Глюк?

Ewgeny7
30.10.2010, 11:09
Заметил в мониторе вместо пробела ноль печатается. Глюк?
Нет. Я сравнивал с эмулятором, там так же.

fifan
30.10.2010, 16:06
Результаты компиляции я хотел переместить на Циклон 1. Но столкнулся с трудностями по недостатку памяти. В Циклоне 1 всего 7 кБайт памяти против 51 кБайт в Циклоне 3. Зато в схеме (http://www.spetsialist-mx.ru/for_out/NewSpets.gif) используются внешние ОЗУ и ПЗУ. Просто хочу использовать свою схему по назначению, не пропадать же EP1C3T144C8.

Ewgeny7
30.10.2010, 18:38
fifan, дык лишнее из ПЗУ выкини, там 12кб только ЛИКовского бейсика.

fifan
30.10.2010, 18:58
fifan, дык лишнее из ПЗУ выкини, там 12кб только ЛИКовского бейсика.
Уже выкинул.
Пока в проекте u10_spetsialist пытаюсь вставить SD. Не могу разрулить шину данных процессора по входам/выходам. Автор лоадера с SD карты ставит условие чтобы по сбросу ПЗУ находилось в младших адресах (0000..7FFF), а старшие адреса (8000..FFFF) были бы доступны как обычно (ОЗУ, экран, порты). После настройки ПЗУ отключается и нижние адреса занимаются ОЗУ. Тогда, алгоритм будет таким: в ПЗУ загрузчик, который считывает файл с карты и помещает его в C000, затем прыгает туда, а тот (например, стандартный Монитор) отключает ПЗУ.
Возможно ли такое сделать? Меня смущает фиксированный начальный адрес, который присваивается в комлекте T80.

Ewgeny7
30.10.2010, 22:21
Меня смущает фиксированный начальный адрес, который присваивается в комлекте T80.
переменную подключи вместо фиксированного адреса.

fifan
01.11.2010, 16:04
Перед тем как дальше двигаться решил "добить" клавиатуру. Никак не удаётся заставить её работать во всех режимах. Даже в играх не пашет.

fifan
27.11.2010, 19:26
Небольшой отчёт о работе. Очень долго бился над кодом реализации "Специалиста_МХ". Скорее всего проблема в том что я пытаюсь с одним и тем же ОЗУ работать как с основным, видео ОЗУ цвета и RAM-диском. Первое и второе, спасибо Ewgeny7, работает благодаря разнесению по времени. Так как RAM-диск желательно перенести в другое ОЗУ, то благодаря рамкам девайса u10, реализовать Специалист_МХ на данной плате по-моему не удастся. Пока я не забросил u10 и дошлифовываю код. Хочу добиться следующего:
1. чётко эмулировать клавиатуру,
2. подключить к GPIO ROM-диск и заставить его заработать,
3. подключить считыватель с SD карт.

Ewgeny7
27.11.2010, 20:03
Так как RAM-диск желательно перенести в другое ОЗУ
Почему же не сделать в одном ОЗУ всё? Проц не может одновременно обращаться к разной памяти, поэтому проблем вроде не видится.
Когда допилишь клавиатуру, займемся и РАМдиском с SD... :)

fifan
15.01.2011, 14:11
Сделал логику работы схемы начального пуска. Раньше адрес C000H был забит в драйвер процессора.:

romaddr <= a_buff (15) and a_buff (14) and not (a_buff (13) and a_buff (12));
rom <= '1' when (res_n = '0' or romaddr <= '1') else '0';
Сейчас на разъём выведены сигналы для работы ВВ55 №2 (порт программатора) - хочу испытать работу внешнего ROM-диска. До сих пор никак не разберусь с драйвером клавы - глычит!:v2_dizzy_facepalm:
Последнии новости проекта - на сайте (http://www.spetsialist-mx.ru/index9.html).

Ewgeny7
15.01.2011, 16:50
Я сделал интересный вариант модуля клавиатуры с произвольным опросом рядов. Используется на u9_speccy. Надо в Спеца внедрить эту технологию, в теории всё должно заработать.

fifan
15.01.2011, 20:33
Я сделал интересный вариант модуля клавиатуры с произвольным опросом рядов. Используется на u9_speccy. Надо в Спеца внедрить эту технологию, в теории всё должно заработать.
Неплохо бы, если получится...:|
Я взялся за SPI интерфейс SD считывателя. Может скоро запущу.:v2_dizzy_mutant:

Ewgeny7
16.01.2011, 01:13
Неплохо бы, если получится..
С работы в понедельник притащу u10, попробую.


Я взялся за SPI интерфейс SD считывателя. Может скоро запущу
Там какая-то конкретная схема, или можно любую подходящую? Есть готовые в VHDL схемы N8, MSX, ZC. Фтыкай любую.

fifan
16.01.2011, 12:35
Там какая-то конкретная схема, или можно любую подходящую?
Будет эта (http://www.nedopc.org/forum/viewtopic.php?t=8154&start=570). Вот мои наметки по описанию этой схемы на vhdl. Пока не проверял синтаксис. Сегодня-завтра займусь. Автор схемы уже написал лоадер с загрузкой одного файла для проверки.

Ewgeny7
17.01.2011, 14:36
Версия 0.14.
Переработан клавиатурный модуль.
Появился звук.
С работой клавиатуры в режиме "0" еще есть заморочки, но куда копать вроде как видно.
Выкладываю здесь главным образом для переноса проекта на свой домашний комп :)
А кто догадается каким раком появился звук - тому конфетка. Я от этого открытия уже :v2_conf2::v2_crazy:

fifan
17.01.2011, 14:56
Огромное спасибо!:v2_dizzy_rastoman: Щас прошью.:v2_dizzy_coder:
Насчёт звука вообще не понял такую конструкцию:

snd <= (portr(0) xor cd_in(3));

Ewgeny7
17.01.2011, 16:52
Насчёт звука вообще не понял такую конструкцию:
Значит, ты остаешся без конфетки :)
Фишка здесь в том, что звук на спеце формируется не записью бита 5 в порт С (хотя такая возможность и есть, но в реальных ПЗУ сделано по другому), а переключением режима работы ВВ55. переключая порт С на вход/выход, меняется уровень напряжения на всех выходах порта, т.е. уровни гуляют с "0" на "Z". Это позволяет генерировать звук не влияя на биты клавиатуры и цвета. Для прямой записи бита 5 нужно знать состояние прочих битов порта, дабы не сбить цвет, к примеру. Вот такая блин ботва. Пришлось код в ПЗУ изучать в п/п генерации звука.
Заодно выяснил, что этот фокус применяется не только для звука, но вроде как и клавиатуры... Вот это и есть та зацепка, буду дизасмить драйвер клавы.

---------- Post added at 15:25 ---------- Previous post was at 15:16 ----------


не понял такую конструкцию
XOR - исключающее или, однобитный микшер сигналов.
Т.е. сигнал SND меняет свой уровень на противоположный при любом изменении состояния бита 0 системного регистра ВВ55 или 5 бита данных в порту С.

---------- Post added at 16:52 ---------- Previous post was at 15:25 ----------

Пооже, клава побеждена :)
Полирую и тестирую.

Ewgeny7
17.01.2011, 17:20
Ну вот, типа альфа инкоминг...
Клавиатура работает во всех режимах вроде. проверялось тестом Рюмика, Монитором, Бейсиком.
Звук присутствует.
Цвет наличествует.
Что там далее у нас по списку? SD или маппер?

fifan
17.01.2011, 21:29
Попробую твою последнюю версию, а то 14-я с монитором-2 и тестом-м не пошла.
SPI подождёт. Нужно попробовать МХ с его 16-ю цветами и большим ОЗУ. Основная информация у меня на сайте, но для лучшего понимания работы "Селектора адресов", основного "сердца" МХ можно воспользоваться вот этой схемкой. Но это лучше вводить параллельно с основным режимом, назовём его "Стандарт", который сейчас более-менее работает.
Ещё. Так-как в u10 всего 512 кБайт и уже занято 48+16 кБайт, то все 8 страниц (8 по 64 кБайт) вводить пока не нужно. Тем более известные тесты оперируют только с 256 кБайт ОЗУ.
По схеме. U0 - не на прямую к дешифратору адресов а через ИЛИ/НЕ с сигналом wr_n.
IOP - выборка дешифратора адресов. Входа у которого A2/A3/A4 - адресные входы дешифратора, выходы - c U7 по U0 начиная с младшего соответственно.
RAMD - выборка ОЗУ до 512 кБайт (RAM-диск), RAM - выборка основного ОЗУ (48 кБайт),
ROM - выборка ПЗУ до 48 кБайт (ROM-диск).

Ewgeny7
17.01.2011, 21:59
По схеме.
Покрупнее есть?

SPI подождёт.
SPI даст возможность пользоваться ПЗУ более 32кб (загружаемым).

Попробую твою последнюю версию
И как?

fifan
17.01.2011, 22:08
И как?
Никак, ничего особого не получилось. Схема (http://www.spetsialist-mx.ru/for_out/MXAddrSelector.png).

Ewgeny7
17.01.2011, 22:14
Никак, ничего особого не получилось.
По-русски это как? Работает?

fifan
17.01.2011, 22:24
Да у меня наверное ПЗУ касячное. Твоё заработало.
Наверное при переносе программы что-то упустил. Кроме прогресса с эмуляцией Z-состояния входов 8255 и присвоений scan_in и metod что поменялось?

Ewgeny7
17.01.2011, 23:08
модуль клавы новый. в 014 версии обновился. Больше ничего не поменялось.

---------- Post added at 22:32 ---------- Previous post was at 22:26 ----------

Если у тебя инет шустрый безлимит, поставь себе этот квартус - http://rutracker.org/forum/viewtopic.php?t=2365015
Дабы компиляция проходила у всех участников в одинаковых условиях. Квартусы могут немного по разному компилить.

---------- Post added at 23:08 ---------- Previous post was at 22:32 ----------

Оказалось, бейсик вполне может работать с цветным изображением. команда POKE -2,цвет устанавливает новый текущий цвет :)

fifan
17.01.2011, 23:09
Вот косячок. При mreq_n всегда равном 0, ram_oe1 тоже всегда ноль.

ram_oe1 <= '0' when (sel = '1' or (rd_n = '0' and mreq_n = '0')) else '1';
Я б сделал так: ram_oe1 <= not ram_we1; - на реале так прокатывало.

Ewgeny7
17.01.2011, 23:12
Какую игрушку можете порекомендовать для испытаний цвета/звука при текущей конфигурации?

---------- Post added at 23:12 ---------- Previous post was at 23:10 ----------


Вот косячок
Нет косячка. Смотри внимательно на SEL и RD_N

fifan
17.01.2011, 23:29
Новые игры в цвете. (http://www.spetsialist-mx.ru/Games/games_new.rar) А вот здесь (http://www.pk-info.ru/aboutindex.html) только что считанные с кассет в том числе и на Бейсике и для ЛИКа.

fifan
18.01.2011, 05:42
Кстати в моём Мониторе-2 с адреса D800 находится новая игра. Клавиши там не работают. Вот прошивка. Для переноса и запуска игры нужно ввести:
TD800,EB8A,4000
G4000

Ewgeny7
18.01.2011, 09:17
Кстати в моём Мониторе-2 с адреса D800 находится новая игра. Клавиши там не работают.
В Мониторе - да, косяки стадами. Но набрать команды можно.
В самой игре все кнопы нормально работают. Поиграл :)
Монитор похоже кривопатченный.

fifan
18.01.2011, 11:52
Попробую этот монитор в эмуле запустить, если не пойдёт, буду нормальный искать.

Ewgeny7
18.01.2011, 12:25
Монитор похоже кривопатченный.
Не, не монитор.
Вот прошивка, которая работает правильно с этими мониторами. Заодно и кнопка РУС/ЛАТ начала фунциклировать.

Ewgeny7
18.01.2011, 12:28
Насчет игры - при исправленном опросе клавы она перестала работать :)
В эмуле EMU кстате та же ботва, CannonBall не хочет жить. Аффтара сюда! Пущай расскажет...

fifan
18.01.2011, 12:51
А что изменилось в программе?

Ewgeny7
18.01.2011, 14:44
Исправил еще один баг. Взглюкивало в тесте Рюмика, в рядах порта С.
Выложу позже, когда потестирую получше.

b2m
18.01.2011, 14:50
В эмуле EMU кстате та же ботва, CannonBall не хочет жить. Аффтара сюда! Пущай расскажет...
Аффтара игры, или аффтара эмулятора? :)
Сейчас запускал, всё работает. Если чё, надо нумпадом пользоваться.

fifan
18.01.2011, 15:27
Исправил еще один баг. Взглюкивало в тесте Рюмика, в рядах порта С.
Выложу позже, когда потестирую получше.
Хорошо. Так как работает кнопка РУС/LAT (Caps Lock), то можно реализовать давную мечту - индикацию режима. Например повесив данный переключатель на Num Lock. У меня по её нажатию включается сетодиод PS/2 клавы. В МХ вообще есть отдельный выход под светодиод. Знаю что на Орионе это не получилось сделать?

Ewgeny7
18.01.2011, 15:41
Знаю что на Орионе это не получилось сделать?
Даже не пытался, ибо алгоритм работы с клавой совершенно односторонний.


Если чё, надо нумпадом пользоваться.
Если чо, предупреждать надо что курсор на нумпаде сидит :)

Ewgeny7
18.01.2011, 17:10
Дело было не в бобине, просто дурак сидел в кабине :v2_dizzy_messed:
Мониторы все работают, тест работает, игрушка работает, я работаю... :v2_dizzy_coder:
Изменения в модуле клавиатуры, в части 82С55 и в процессе чтения данных процессором.

Ewgeny7
18.01.2011, 20:05
fifan, как узбеки? (успехи)

fifan
18.01.2011, 22:07
Никак. Полный пипец. Стоит сделать небольшие изменения (я уверен что в лучшую сторону) сказывается на правильной работоспособности. Например заголовок:
process(clock,romd_d,romsel,mreq_n,md,rd_n,scan_ou t,shift,a_buff,portr,u7)
поменял на:
process(clock,romd_d,romsel,mreq_n,u7rd,md,scan_ou t,shift,a_buff,portr)
даёт непредсказуемые результаты. А может ещё какие-нибудь "улучшения" так влияют.

Потом вот ещё:
process(screen,vid_pix,res_k,vid_c)
Зачем res_k нужен?

Ewgeny7
18.01.2011, 22:59
О как! ;)
А как насчет подправить код, если он дружить не хочет?
И мне надоело тебя выспрашивать о резльтатах. Самому не черкнуть краткий отчет после заливки?
А разница в работе будет, хотя бы потому что у нас с тобой разные камни альтеровские и разные Квартусы.

В аттаче "закрепленная от рассыпучести" vga_test.vhd

fifan
19.01.2011, 06:14
В упор скопировал последний файл. Всё работает. Поместил исходники и прошивку на сайт (http://www.spetsialist-mx.ru/index9.html). Туда я складываю вполне рабочие копии. Впереди SPI! Сегодня, надеюсь дело сдвинется. Ещё раз большое спасибо, Ewgeny7!

Ewgeny7
19.01.2011, 08:20
Насчет раскладки клавы замечание на сайте справедливое :v2_conf2:
Надо заняться маппером нумпада и некоторых "знаковых" кнопочек.

fifan
19.01.2011, 11:22
Вот такая раскладка (http://www.spetsialist-mx.ru/images/PS_2_keyboard1.png). Сейчас я на соответствующий файлу в атаче переделал. Вполне нормально.

Ewgeny7
19.01.2011, 11:43
Вот такая
Упс... А я уже тоже переделал :)
Посмотри что да как, я пока перенесу твои изменения в свой файл.
Изменено - расширен опрос сканкодов, в результате стали полноценно доступны кнопки с префиксами Е0. Работает нумпад, но есть подглюки с кнопами + и *. Они используют shift для одновременного нажатия, но драйвер спеца не хочет правильно отрабатывать два нажатия одномоментно. Думаю.

Ewgeny7
19.01.2011, 12:09
9'h073: keymatrixa[1][0] <= press_release; //LF-KP5-ПС
Это уже не укладывается, ведь цифровая клава нумпада уже занята под цифры. Но - сам смотри.

Ewgeny7
19.01.2011, 12:16
Воть...

fifan
19.01.2011, 12:38
в результате стали полноценно доступны кнопки с префиксами Е0.
Раньше тоже работали кнопки с E0: стрелки, Alt, Ctrl, Home, Page Up, Page Down, Enter. И сейчас не задйствованные: Ins, Del, End. Пока стоит в драйвера такая раскладка:

F1 F2 F3 F4 F5 F6 F7 F8 F9 ЧФ БФ СТР
; 1 2 3 4 5 6 7 8 9 0 =
J C U K E N G [ ] Z H *
F Y W A P R O L D V \ .
Q ^ S M I T X B @ , / Backspace
Р/L Home Up Down Tab АР2 Space Left ПВ Right ПС Enter

Ewgeny7
19.01.2011, 12:44
Раньше тоже работали кнопки с E0:
Но по другому. Они "дублировали" кнопки без префикса. Сейчас они самостоятельны. Вот новый файлик, переделывай как хочешь. Не забудь мне скинуть, дабы не плодить разночтения :)

fifan
19.01.2011, 13:43
Понятно. Новые функции кнопок:
//Соответствие клавиш:
//Shift - НР
//Caps Lock - РУС / LAT
//Esc - Сброс
//Scroll Lock - Тест включён
//Home - Тест выключен
//Page Up - Турбо
//Page Down - Норма
//Num - МХ / Стандарт. В последнем случае необходимо сделать триггер и в зависимости от его состояния присваивать значение переменной, например mx. Файл поправил, но только комментарии. Как сделать триггер режима Стандарт/МХ не знаю. Лучше обойтись одной кнопкой Num Lock - светодиод по ней загорается/тухнит.

Error404
19.01.2011, 14:01
Поместил исходники и прошивку на сайт (http://www.spetsialist-mx.ru/index9.html).


Сходил по ссылке. Имею вопрос/предложение к авторам.
А что, у Спеца кнопка "АР2" не являлась функциональным аналогом "Escape" на РС? На Орионе являлась. Да практически на любой CP/M машине. Соответственно, маппинг кнопки "Сброс" Спеца на "Escape" РС выглядит как-то непривычно.

fifan
19.01.2011, 14:16
А что, у Спеца кнопка "АР2" не являлась функциональным аналогом "Escape" на РС? ...маппинг кнопки "Сброс" Спеца на "Escape" РС выглядит как-то непривычно.
Вроде да. ESC - сейчас сброс. Только на Специалисте-М (http://www.spetsialist-mx.ru/images/Keyboard2.png) были задействованы все 72 (12*6) кнопки. В остальных клонах Специалиста (http://www.spetsialist-mx.ru/images/keyboard1.png), в том числе и на Специалисте_МХ (http://www.spetsialist-mx.ru/images/Keyboard3.png) отсутствовала и ESC и TAB (6 и 5 слева в последней строке). Так что из-за одного клона, вернее его "оконного монитора" не стоит остальные клоны косить под одну гребёнку. Так что лучше их не ставить или потом определить.

Error404
19.01.2011, 14:21
Вроде да. ESC - сейчас сброс. Только на Специалисте-М (http://www.spetsialist-mx.ru/images/Keyboard2.png) были задействованы все 72 (12*6) кнопки. В остальных клонах Специалиста (http://www.spetsialist-mx.ru/images/keyboard1.png), в том числе и на Специалисте_МХ (http://www.spetsialist-mx.ru/images/Keyboard3.png) отсутствовала и ESC и TAB (6 и 5 слева в последней строке). Так что из-за одного клона, вернее его "оконного монитора" не стоит остальные клоны косить под одну гребёнку. Так что лучше их не ставить или потом определить.

На Спеце была же CP/M, ЕМНИП. Какой кнопкой там пользовались вместо отсутствующей AP2? Она вроде довольно часто используется в разных приложениях.

fifan
19.01.2011, 14:36
CP/M был на Специалисте_МХ. Там клавиша АР2 - это F1 (у нас самая верхняя кнопка левая). Что приведённые мною ссылки на виды клавиатуры не смотрели?

fifan
19.01.2011, 14:45
Специально для Error404 ввёл две кнопки: Insert теперь будет Home (в Специалисте-М, в остальных - клавиша вверх под углом), а Delete - ESC. TAB уже была определена на одноименной.

Ewgeny7
19.01.2011, 14:49
Как сделать триггер режима Стандарт/МХ не знаю.
Это легко.
Ты собираешься выводить этот "тригеренный" сигнал в головной модуль?

fifan
19.01.2011, 15:16
Это легко.
Ты собираешься выводить этот "тригеренный" сигнал в головной модуль?
Да. Там уже есть определение:
mx_k => mx_st_key.

Error404
19.01.2011, 15:27
Специально для Error404 ввёл две кнопки: Insert теперь будет Home (в Специалисте-М, в остальных - клавиша вверх под углом), а Delete - ESC. TAB уже была определена на одноименной.

Специально для Error404 предлагаю делать Esc на Esc, пробел на пробеле, ентер на ентере и т.д. А сброс там, куда случайно по привычке не нажимают.

fifan, у меня иногда складывается впечатление, что ты как закончишь разработку, включать комп, или не дай б-г чего то там нажимать под ОС, не собираешься в принципе. Ну нельзя закладывать под себя такие мины как сброс на искейпе, это ж просто... ну у меня слов нет, краше только кнопка Power на пробеле. Лучше пусть на esc вообще ничего не будет (если он не одинаков для разных клонов), чем ляпнув на Esc по привычке для отмены текущего запроса (закрытия диалогового окна и т.п.), получить нажатие на Сброс.

fifan
19.01.2011, 15:34
Ну куда тогда сброс повесить?

Alex_B
19.01.2011, 15:38
я конечно извиняюсь, что влезаю :) Но здесь есть неточности про АР2 и проч.
Исторически АР2 - это Esc, в микроне даже АР2 применяется как функциональная кнопка. На специалисте был ещё ряд кнопок F1 - F4 (лениво подсматривать картинку, пишу по памяти), которые использовались по разным назначениям и не фиксировались в мониторе, к примеру в бейсике по ним были LIST RUN и т.п.

Ни только на Специалист-М использовалась полная раскладка клавиатуры, тоже самое было на Лик и на рядя ещё других "клонов".

fifan
19.01.2011, 16:01
А зря не смотрите раскладки клавиатуры. Я не говорю что не было АР2, а то что она в другом месте (в верхней строке и не называется ESC). Мы здесь рассматриваем клоны Специалиста (Микрон вроде таковым не был). F клавиш было побольше, штук 8 (в том числе и на ЛИКе, где они по другому назывались). Всё же посмотрите все раскладки клонов упомянутые во вкладке (http://www.zx.pk.ru/showpost.php?p=351491&postcount=203), а потом поспорим.

Error404
19.01.2011, 16:40
Я не зависимо от раскладок в любой ситуации когда нужно действие по отмене чего-либо, давлю Esc (на Орионе ли, на РС ли), которая на 8-битках обычно соответствует АР2. Это уже где-то в подсознании. И думаю так у многих, кто лет двадцать провел за клавиатурой раскладки IBM-alike.

Поэтому, думаю, правильно было бы либо назначать на Esc АР2, либо не назначать ничего (если нет кнопки явно соответствующей Esc PC). Тогда когда надо что-то отменить, и ничего на Esc не назначено, я нажму первый раз Esc и ничего не произойдет, я подумаю "кнопка чтоли не контачит?" и нажму второй раз - и снова ничего не произойдет, я проверю разъем и нажму еще раз - ничего не произойдет, и только тогда я вспомню про особенности клонов и нажму что-то по другому месту. А иначе я трижды перезагружу комп, наверняка потеряв набранные данные (к примеру, мой любимый текстовый редактор в CP/M переходит в омандный режим по ESC, и таких я знаю более чем один), и вообще перестану что-либо понимать. :)


Сброс можно было бы повесить туда, куда реже всего при работе попадает рука. Например Pause или PrintScreen.

Я не спорю, в конечном итоге вам решать, но у меня как у юзера будет случаться именно такой баттхерд.

fifan
19.01.2011, 18:46
Я не зависимо от раскладок в любой ситуации когда нужно действие по отмене чего-либо, давлю Esc
Ну я повторяю что в полном понимании ESC была только на Специалисте-М с его "оконным монитором". АР2 - почти на всех Специалистах.

Сброс можно было бы повесить... Например Pause или PrintScreen.Ни одна ни другая, скан-код сложный. Вот такой: E11477E1F014F077 и E012E07C соответственно.

А можно нарисовать себе любые кнопки и наклеить. http://img690.imageshack_.us/img690/8941/spetsialistmxklava.th.png (http://img690.imageshack_.us/i/spetsialistmxklava.png/)

Error404
19.01.2011, 21:35
Ну я повторяю что в полном понимании ESC была только на Специалисте-М с его "оконным монитором". АР2 - почти на всех Специалистах.


Блиииннн... АР2 (АльтернативныйРегистр2 c кодом 1Bh=27d ) это и есть Esc! :mad: Точнее, кнопку AР2 стали называть Esc на PC, т.к. ее значение стало шире - не просто дополнительной кнопкой переключения режима терминала. Какой уж там на Специалисте-М мог быть еще один Esc, не совпадающий с AP2 - это уже конечно мне не понять... :v2_dizzy_facepalm:
Через этот АР2 испокон веку вызываются модификаторы кодов управления режимами терминала в большинстве эмуляций терминалов, он не может иметь другой сканкод чтобы еще и Esc отдельный был. Либо Esc тогда будет с нестандартным сканкодом - т.е. вообще левая кнопка.

fifan
20.01.2011, 16:16
Значит так. Верхний ряд кнопок реального Специалиста просто эмулируется кнопками F1...F12 на PS/2 клаве. В него может и входит кнопка АР2 может и нет. Наклейте себе поверх бумажки на кнопки и всё. А для вывода сброса пока нет свободной кнопки кроме Esc. Найдём - заменим.

Ewgeny7
21.01.2011, 12:47
Модуль клавы с триггером mx/st. Руль - нумлок.
По ресету режим не меняется, что есть правильно.
У себя я вывел этот сигнал на GPIO1 и помыргал светодиодиком :v2_tong2:

fifan
22.01.2011, 12:33
Версия 24. Работоспособная. Отличия:
1. Введён сигнал np - начального пуска, полностью повторяет сигнал оригинального Специалиста. Раньше его не было - стартовый адрес C000 был зашит в эмулятор процессора.
2. Раскладка устаканилась. Пока в него изменения не будут вноситься. Введена Ewgeny7, но пока не используется клавиша Num Lock - переключение режима Стандарт/МХ.

Идут первые эксперименты с SPI интерфейсом SD карты. Автором драйвера предъявлены требования по адресам:
При включении и по сбросу -
0000 - 7FFF - ПЗУ 32 кБайта
8000 - EFFF - ОЗУ (в том числе и видео) 28 кБайт
F000 - F7FF - SPI 2 кБайта (вместо порта программатора, реально используется только два первых байта)
F800 - FFFF - ВВ55 (порт клавиатуры) 2 кБайта
После инициализации и смены сигнала НП -
0000 - EFFF - ОЗУ (в том числе и видео) 60 кБайт
F000 - F7FF - SPI 2 кБайта (вместо порта программатора, реально используется только два первых байта)
F800 - FFFF - ВВ55 (порт клавиатуры) 2 кБайта

Работа такова:
При сбросе загрузчик (>5 кБайт) грузит монитор с SD карты с адреса С000 и запускает его. Монитор посредством НП отключает ПЗУ. Получившиеся ОЗУ 0000 - EFFF доступно для чтения и записи. Соответственно с адреса C000 лежит Монитор и другие программы.

Ewgeny7
22.01.2011, 13:14
При сбросе загрузчик (>5 кБайт) грузит монитор с SD карты
Загрузчик работает с FAT (поиск файла ПЗУ в файловой системе) или просто грузит блок данных с карты с заранее заданных секторов?

fifan
22.01.2011, 13:21
Пока только второе.

Ewgeny7
22.01.2011, 13:24
Пока только второе.
Дык это можно было еще давно прикрутить... С Ориона тупо портировать. Ну, ждемс :)

---------- Post added at 13:24 ---------- Previous post was at 13:22 ----------

Кзтате, "автор драйвера" учел, что у нас процессор не Z-80, а ВМ80? ;)

Error404
22.01.2011, 14:51
Пока только второе.

Тогда чему там 5к? Это всё помещается в 500 байт (тем более у вас более простая низовая схема SPI с точки зрения программиста - не надо никаких сдвигов делать средствами ЦПУ).

ЕМНИП, Hardwareman как раз обещал, что в этих 5к кода будет нормальный драйвер FAT, и что будет сделано так, что грузиться всё будет с ФАТ-а, при этом не надо будет насиловать себя на предмет того, чтобы файлик с ROM лежал самым первым (как это сделано в большинстве прочих упрощенных решений).

Т.е. можно будет взять любую SD-карточку - даже уже хоть с файлами, хоть с партициями, тупо докинуть туда образ ПЗУ и втыркнуть ее в Спец.

Кстати, а исходники загрузчика есть? По ним все это можно уточнить.

fifan
22.01.2011, 17:45
Hardwareman как раз обещал, что в этих 5к кода будет нормальный драйвер FAT, и что будет сделано так, что грузиться всё будет с ФАТ-а...Кстати, а исходники загрузчика есть?
Он же драйвер и написал. Исходника нет. Пока разбираюсь с "железом". Хотел на vhdl сам написать, ну что-то не получилось. Повторю его схемный ввод (http://www.nedopc.org/nedopc/upload/SPI_SPEZ.jpg). Сейчас начальная заставка драйвера выходит. Это значит, что описанное адресное пространство мною ранее мне удалось сделать. Так же я в памяти плисины оставил Тест-М на всякий случай.

---------- Post added at 19:45 ---------- Previous post was at 19:40 ----------


Тогда чему там 5к? Это всё помещается в 500 байт. Там находится некоторая операционка с отдельным знакогенератором с ускоренным выводом на экран символов, как сделано в Commander'е - был когда-то такой созданный неизвестным автором из Омска и расчитаный на МХ.

fifan
22.01.2011, 21:24
"автор драйвера" учел, что у нас процессор не Z-80, а ВМ80? ;)
Да

fifan
25.01.2011, 18:12
Ewgeny7, попробуй вот эту версию с SD интерфейсом. Что-то не очень то работает. На SD карту нужно записать Монитор 4 кБайта (файл BIOS.bin). Может глаз не замыленный найдёт ошибки. Повторяю что в начале при np=1 ПЗУ сидит 0000-7FFF, потом ОЗУ 8000-EFFF, SPI F000-F7FF (вернее первые два адреса всего юзаются), и наконец порты клавиатуры F800-FFFF. Затем после инициализации порта РУС (np=0) ОЗУ становится 0000-EFFF и BIOS.bin грузится с адреса С000. Управление передается в С000.

Ewgeny7
27.01.2011, 11:21
Не получается. Слишком много "неизвестных". Аффтар может немножко "подрихтовать" свой код под уже используемый на "Орионе" модуль? Судя по схематику, разница там невелика. Зато он стопудово работает и есть исходник драйвера как пример работы.
И сам модуль, и исходник на асме есть в паке Ориона. Исход называется "loader.asm".
Картинко модуля прилагается.

fifan
27.01.2011, 16:43
Мне это известно. Пытаюсь сам загрузчик написать. Из упомянутого loader.asm взял исходники. Не могу решить как переписать область из ОЗУ (12 кБ) в теневое ПЗУ, которое должно появится после инита ВВ55 и опрокидывания флага начального пуска из 1 в 0. Придётся дизассемблировать начало монитора на предмет рассмотрения кода инита ВВ55.

---------- Post added at 18:43 ---------- Previous post was at 18:25 ----------

Нашёл! Вот. Тупо установка границы ОЗУ и запись в РУС:

.org 0000h
ModStart: jp LC003
L0003: ld SP, 07FFFh
ei
ld A, 082h
ld (LFF03), A
jp LC444

fifan
31.01.2011, 16:40
Лоадер в действии (http://www.spetsialist-mx.ru/for_out/Boot.avi). Правда это не у меня а на реальном железе. :v2_dizzy_coder:На видео заснят процесс загрузки ПСПЗУ с адреса C000. Потом запуск. При записи видео было использовано 2 карты: первая ММС на 16 МБайт с FAT12, а вторая SD 512 МБайт с FAT16. На первой был записано стандартное специалистовское ПСПЗУ а на второй монитор MAGIC_WL для МХа. Обратите внимание, что на второй карте был MBR, который был корректно распознан.;)
Проблемы в проекте у меня такие. Главная - я юзаю Web версию Квартуса, а она постоянно глючит, сейчас качаю по ссылке данной Ewgeny7. Еще вроде самый начальный процесс у меня проходит, а именно грузится лоадер, выдает ошибку если карта не вставлена. Дальше хуже я немогу разделить время перехода от ПЗУ к теневому ПЗУ. Т.е. в начале (0000-7FFF) с ПЗУ грузится лоадер и он должен ложить данные в теневое ПЗУ + ОЗУ (0000-EFFF) с адреса С000. С адреса С000 должен записываться стандартный набор ПЗУ (Монитор, Загрузчик и др.) с файла на SD карте. :o

Ewgeny7
31.01.2011, 17:00
fifan, схема самого модуля, на основе которой лепили загрузчик - ткни носом пожалуйста.
Команда перехода - примерно так:
if (a_buff(15 downto 0)=X"C000" and rd_n='0') then .....
Т.е. попытка процессора прочитать содержимое кода команды из С000. В этот момент можно перещелкнуть триггер загрузки.

---------- Post added at 17:00 ---------- Previous post was at 16:58 ----------

Да, самое главное. Исходник лоадера? Сложно искать черную кошку в темной комнате... А с исходником можно хотябы ловушек понаставить и пошагово отладить модуль.

fifan
31.01.2011, 17:32
Схема - в схемном вводе, в проекте. Бинарник тоже там же в одном файле (нет у меня исходника). На SD карту нужно записать какой-нибудь монитор с набором ПЗУ до 12 кБайт с именем BIOS.BIN. Правильно грузится ли в память файл можно судить по квадратам возникающим в правой части экрана, т.к. используется несколько ячеек в видео ОЗУ. Ещё раз привожу маппер памяти:
1. ПЗУ 0000-7FFF (только чтение)
ОЗУ 8000- EFFF (чтение/запись)
SPI F000-F7FF, вернее юзаются две первые ячейки
ВВ55 F800-FFFF
np=1
2. ПЗУ 0000 - EFFF (чтение/запись) с С000 - загружаемый файл образа ПЗУ
SPI F000-F7FF, вернее юзаются две первые ячейки
ВВ55 F800-FFFF
np=1
3. ОЗУ 0000-EFFF (чтение/запись)
SPI F000-F7FF, вернее юзаются две первые ячейки
ВВ55 F800-FFFF
np=0

Действия:
1. Лоадер грузится с ПЗУ, инициализация SD карты, поиск образа ПЗУ
2. Загрузка образа ПЗУ с SD карты в ОЗУ
3. Запуск монитора с адреса С000, работа ПК вштатном режиме

Ewgeny7
31.01.2011, 18:18
fifan, сигнал записи WR на модуль SD какой полярности должен быть? И он точно должен быть WR_N процессора, или все-таки SPI_WR?

---------- Post added at 18:18 ---------- Previous post was at 18:09 ----------

...и поменяй в проекте i/o standart с 2.5 на 3.3LVTTL на всех пинах альтеры :) Авось, глюки-то и пропадут...

fifan
31.01.2011, 18:35
fifan, сигнал записи WR на модуль SD какой полярности должен быть? И он точно должен быть WR_N процессора, или все-таки SPI_WR?
Сигналы wr_n и rd_n - инверсные. Я использовал вычисляемые, вообще-то кто так сказал... Блин действительно, наверное должны быть не SPI_WR и SPI_RD, а wr_n и rd_n! Блин может из-за этого...:mad:

...и поменяй в проекте i/o standart с 2.5 на 3.3LVTTL на всех пинах альтеры :) Авось, глюки-то и пропадут...
Где это делается, а то сам долго буду искать...

Ewgeny7
31.01.2011, 20:20
Где это делается, а то сам долго буду искать...
В "assigned"->"pins".

---------- Post added at 18:47 ---------- Previous post was at 18:45 ----------

elsif (clock'event and clock = '0' and spi_wr = '1') then
sd_i <= dataO;
это место сомнительно. Зачем делать лишнюю защелку на сигналы данных, если в блоке SPI они и так защелкиваются по сигналу записи?
Может просто dataO подать на вход модуля, без процесса?

---------- Post added at 20:20 ---------- Previous post was at 18:47 ----------


2. ПЗУ 0000 - EFFF (чтение/запись) с С000 - загружаемый файл образа ПЗУ
Не совсем понял...

Работа загрузчика сейчас заканчивается на надписи "Загрузка системы". Т.е. вроде как карту читает, но работать с прочитанным содержимым в ОЗУ не может.

fifan
31.01.2011, 20:59
После инициализации карты образ ПЗУ пишется с адреса C000 по EFFF (максимум) - 12 кБайт. Всё пространство 0000-EFFF становится ОЗУ, т.е. доступно для записи и чтения. После инициализации ППА (записи РУС) монитор сам отключит ПЗУ настроив системный ППА, на котором висит схема начального пуска (np=0) и передается ему управление. В мониторе стоит первая команда jp С000.
Загрузчик использует несколько ячеек ОЗУ для себя, они располагаются там же, где обычные системные ячейки. Загрузчик использует 512 байт экрана (BE00h-BFFFh) в качестве буфера считываемого сектора (чтобы не портить остальное ОЗУ), для загрузки служебной информации. Сам файл BIOS.BIN ложится сразу по месту посадки с адреса С000. Т.е. для реализации всего этого нужно наверное сделать так: при чтении с области С000-EFFF нужно подключить ПЗУ файлом lpm_dos1.vhd, а при записи в эту область подключить ОЗУ, которое станет 60 кБайт (0000-EFFF). Вот это мне и не удалось реализовать.

Ewgeny7
31.01.2011, 21:10
Тут еще дело такое - для чтения служебных секторов карты, для поиска файла ПЗУ, для чтения MBR и прочих начальных операций нужно также куда-то сливать информацию с карты в ОЗУ. Может быть загрузчик использует другую часть ОЗУ для этого? Или обходится теми 512 байт на экране?

---------- Post added at 21:07 ---------- Previous post was at 21:05 ----------


при чтении с области С000-EFFF нужно подключить ПЗУ файлом lpm_dos1.vhd
А это зачем? Разве этот образ загрузчика работает не с 0000 адреса? Я так понял, что в С000 просто закидывается образ монитора, затем делается JMP C000. Или не так?

---------- Post added at 21:10 ---------- Previous post was at 21:07 ----------

Упс... Хотел видео повнимательней посмотреть, а у тебя сайт не работает...

fifan
31.01.2011, 21:16
нужно также куда-то сливать информацию с карты в ОЗУ. Может быть загрузчик использует другую часть ОЗУ для этого? Или обходится теми 512 байт на экране?
Обоснование автора: загрузчик использует несколько ячеек ОЗУ для себя (около 30), их располагаем там же, где обычные системные ячейки. Загрузчик использует 512 байт экрана (BE00h-BFFFh) в качестве буфера считываемого сектора, для загрузки служебной информации. Сам файл ложится сразу по месту посадки. Так же используются 8 ячеек (BDF8h-BDFFh) для шлюза запуска. Почему экран? Чтобы не портить остальное ОЗУ. Т.е., сброс не портит ОЗУ, только восстанавливает систему. А значит данные пользователя не портятся, т.к. экран все равно не хранит информацию пользователя. Но так как используется немного ОЗУ, то можно спрятать буфер в системной области (не в экране, если кого раздражают эти точки справа), которая будет задокументирована.

Разве этот образ загрузчика работает не с 0000 адреса? Я так понял, что в С000 просто закидывается образ монитора, затем делается JMP C000.Да ошибся, ;)ПЗУ (вернее загрузчик) запускается с нуля. Посмотри как я сделал загрузку Теста-М (это работает, альтернативно тест оставил) и грузится он с нуля, потом тест направляет себя на C003. Это так называемый начальный пуск. На реальном Специалисте так и сделано. Сначала ПЗУ сидит с нуля, потом после инициализации ВВ55 включается триггер начального пуска и ПЗУ переключается на адрес с С000 (http://www.zx.pk.ru/showpost.php?p=353601&postcount=227). У меня там переменная есть np, которая меняется при записи в РУС. В пакете t80 я тоже начальный пуск сделал с нуля.

b2m
31.01.2011, 21:23
Да ошибся, ;)ПЗУ (вернее загрузчик) сидит с нуля. Посмотри как я сделал загрузку Теста-М (это работает, альтернативно тест оставил) и грузится он с нуля, потом тест направляет себя на C003.
Ewgeny7, не слушай его, он тебя плохому научит :)
Если мы про dos_.bin, то первая команда загрузчика - JMP 0C00h
400h-0BFFh знакогенератор
0С00h-185Ah код загрузчика

b2m
01.02.2011, 20:22
Добавил в свой эмулятор реализацию SD вышеуказанного автора (HardWareMan).

Ewgeny7
03.02.2011, 20:56
SD прикручено. Результат тут (http://scorpion-zs.narod.ru/u10_Spetz_01.rar).
Автор модуля и загрузчика к нему - HardWareMan, в творческой обработке fifan'a и моей.

Error404
03.02.2011, 23:09
SD прикручено. Результат тут (http://scorpion-zs.narod.ru/u10_Spetz_01.rar).
Автор модуля и загрузчика к нему - HardWareMan, в творческой обработке fifan'a и моей.

Какова скорость?
Заметно ускорение за счет железного сдвига?

fifan
04.02.2011, 08:10
Загрузка секунд 4. Скорость интерфейса - при старте 1, потом - 8 МГц. Может скорость и больше покатит. Еще по проекту:
1. Ewgeny7 не использовал вход наличия карты, потом подключу. Лоадер при отсутствии должен выдавать ошибку. Это фишка интерфейса.
2. Светодиоды прекрасно выполняют свои функции: один показывает наличие карты, другой - работу с интерфейсом.
3. Интерфейс будет использоваться на дискретных ИМС в реальном Специалисте, планирую оформить в качестве печатной платы вставляемой в MX-BUS разъём (что-то вроде ZX-BUS на Спектруме).

Ewgeny7
04.02.2011, 09:37
1. Ewgeny7 не использовал вход наличия карты, потом подключу. Лоадер при отсутствии должен выдавать ошибку. Это фишка интерфейса.
Евгений не использовал детектор карты по банальной причине - на U10 такого сигнала нет. Есть сигнал защиты от записи, на который ты пытался повесить наличие карты :)

---------- Post added at 09:37 ---------- Previous post was at 09:30 ----------


Загрузка секунд 4.
За такое же время примерно Орион грузит 60кб. С программным SPI :v2_dizzy_messed:

fifan
04.02.2011, 10:51
Евгений не использовал детектор карты по банальной причине - на U10 такого сигнала нет. Есть сигнал защиты от записи, на который ты пытался повесить наличие карты :)
А зря Евгений, этот вход PIN 28 (SD_PROT) на плате u10 хорошо выполняет функции датчика наличия карты при выключенной защите записи на самой карте, я пробовал - работает.;)

За такое же время примерно Орион грузит 60кб. С программным SPI :v2_dizzy_messed:
Возможно, я не против что программно быстрее.

Ewgeny7
04.02.2011, 11:28
на плате u10 хорошо выполняет функции датчика наличия карты при выключенной защите записи на самой карте, я пробовал - работает.
Я тоже пробовал, только нафига это нужно. Неужелы ты неувидишь что карты нету?


Возможно, я не против что программно быстрее.
Когда из драйвера тормоза уберутся, станет в разы быстрее.

Я заканчиваю версию 02. Уже привинтил RS-232, прикошачиваю мышку. Оба девайса сидят на "Орионовских" портах.
Интересует такая весчь - на Z80 много неработающих программ будет?

fifan
04.02.2011, 13:46
прикошачиваю мышку.
А что она эмулирует? Какие-то кнопки?

на Z80 много неработающих программ будет?
Не знаю, его на Специалисте не юзал.

Ewgeny7
04.02.2011, 18:01
u10_spetz_02

Добавлены компорт и мышка.
"Причёсаны" тексты исходника, добавлены и подправлены комментарии.

Новые порты:
F764 - порт данных USART, чтение/запись
F765 - порт статуса USART, бит 7 - передатчик занят/свободен, бит 6 - приемник пуст/приход нового байта
F76D - кнопки мышки, 3 младших бита
F76E - координата Х мыши 0..255
F76F - координата Y мыши 0..255

fifan
04.02.2011, 18:09
А для каких целей можно использовать последовательный порт, что можно передавать/принимать?

Ewgeny7
04.02.2011, 18:15
А для каких целей можно использовать последовательный порт, что можно передавать/принимать?
На Орионе я заливал программы с ПЦ в память. Для этого требуется программка в пару десятков байтов. В ПЗУ монитора найдется столько пустого места?

---------- Post added at 18:15 ---------- Previous post was at 18:13 ----------

Второй вариант использования - трассировка при написании программ. Отсылать символы при прохождении участков программ.

fifan
04.02.2011, 18:18
Интересно. Можно использовать. Кстати нашёл интерфейс названный в журнале как «Мышь» к «Специалисту». Вот здесь (http://www.nedopc.org/forum/viewtopic.php?t=9361) поднималась эта тема.

Ewgeny7
04.02.2011, 18:26
Да, зачётная мышко там на фото :v2_dizzy_roll: