Такой вопрос - какие сигналы от Z80 следует подтягивать к +5В, кроме шины данных?
Неактуально - всё это описано в Z80-UM...
Такой вопрос - какие сигналы от Z80 следует подтягивать к +5В, кроме шины данных?
Неактуально - всё это описано в Z80-UM...
Последний раз редактировалось andreil; 01.07.2018 в 09:39.
"Байт-48"
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Для тестирования корректности функционирования подсистем пишу более расширенный тест, чем стандартный для ПРО.
На данный момент готовы проверки 6 видеорежимов из 8 - остались только 3-х и 4-х битные.
Результаты 4-х и 16-и цветных режимов:
Заодно выводится номер столбца-знакоместа для проверки корректности широкоэкранного режима.
Выбор теста осуществляется DIP-переключателями конфигурации ПРО (не инверсные значения, то есть "флажок" в эмуляторе означает "0" в бите):
- Биты 0-2 - номер проверяемого видеорежима;
- Бит 3 - активация турбо-режима;
- Бит 4 - активация широкого экрана;
- Биты 5-7 - не используются. Резерв для тестирования PIO.
Пишу на С, собираю через SDCC, поэтому выходной код не самый оптимальный. Но зато легко и быстро пишутся программы).
PS: Жду CPLD'шки для сборки макетки. А пока - вот таким вот тестом буду проверять симуляцию в FPGA...
"Байт-48"
В продолжение темы о тесте - перевёл полностью на ASM. Не требует памяти, работает чисто на регистрах.
6 тестов из 8 уместил в 2Кб - без агрессивных оптимизаций и сжатия, включая шрифт 8*8 для 128 символов.
Собственно, текущая версия теста (исходник и бинарник) - в аттаче, если кому интересно.
OrionNGtest.zip
О назначении переключателей было написано выше, потому не дублирую.
Прошивается вместо ROM1, которая на 8Кб.
- - - Добавлено - - -
PS: Это мой первый опыт на ASM'е Z80, просьба тапками не закидывать -_-
"Байт-48"
Этаж сколько эта мини платка с смд халявными микрухами (из прошлой жизни) жрет на один см квадратный. Орион-Про отдыхает
Электроника КР-02, MSX YIS-503IIR, Орион-128, Ленинград-2, Pentagon-128k, MSX2 YIS-503IIIR, MSX-EXT, ...
Такой вопрос - насколько актуален объём памяти в 1Мб? Или "всем хватит" 512Кб?
Просто пытаюсь максимально впихнуть в ресурсы по видеопортам и не хватает ячеек из-за "жирного" диспетчера памяти. А выносить часть портов, относящихся к памяти, в другой корпус - не очень хорошо, поскольку они только внутри и коммутируются всё равно.
"Байт-48"
Готового ПО под такой объём ОЗУ в природе нет. И ситуация тут следующая. Если бы в Орионе был 1 Мб, то это было бы классно, и, например, я бы в своей ОС с удовольствием поддержал (а точнее сказать, в таком случае вообще пересмотрел бы архитектуру ОС). Но, есть "но"... при условии популярности такой платформы среди пользователей. А мы все понимаем, что этого не случится.. увы.
Поэтому, если технически сложно сделать "метр", то я бы оставил 512 Кб.
Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел
Не то, что сложно, просто я пытаюсь вырезать до минимума необходимого, что бы уместить в 1 чип почти всё, касающееся памяти (порты F9, 08, 04, 05, 06 - стандартный, Z80-Card, Pro). Если порт F9 ещё можно вынести "наружу", то остальные будут реализованы "в чипе", что бы избавиться от ожиданий при обращении к ВВ55, на которых они реализованы в оригинале. Сооружать "эмулятор" ВВ55 на рассыпухе не вижу смысла вообще.
- - - Добавлено - - -
Очень много ячеек занимают синхронные счётчики - использовать внешние не позволит количество выводов.
Синхронность релизована "в лоб" - выдачей данных по ниспадающему фронту (счёт - по восходящему фронту). То есть на 10 битный счётчик тратится 20 ячеек, таких у нас 2...
- - - Добавлено - - -
Кстати, по портам - порты диспетчера памяти (04-06) софтом только пишутся или ещё и читаются?
Порт 0А, например, читается - тут само его назначение предписывает это (управление RAM, ROM). иначе приходилось бы это же состояние хранить отдельно в памяти для модификации отдельных битов.
"Байт-48"
Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).
Делал так - в итоге получаю глитчи в реале из-за асинхронности счётчиков и полный разлад всего видеотракта, поскольку возникают "левые" импульсы для счётчика строк. Первоначально я так и было, но при проверке оно работало через раз - наблюдалась вот такая вот картина на счётчиках:
"Байт-48"
На картинке не вижу ничего "нехорошего", нет других сигналов, от которых зависят счётчики...
На всякий случай напомню о синхронности: у счётчиков строк и столбцов должен быть один (!), единственный (!!), общий (!!!) клок, и это должен быть пиксельклок. А вот разрешения клока у счётчиков столбцов и строк должны быть разными, являющимися комбинаторной функцией от предыдущего состояния. Причём, функция разрешения счёта/сброса счётчика столбцов должна являться переменной для функции разрешения счёта/сброса счётчика строк. Вот посмотри и проникнись :
Результат здесь.Код:module HVSync ( input wire PixClock, output reg HSync, output reg VSync, output reg [2:0] R, output reg [2:0] G, output reg [2:0] B); parameter HVA = 1024; // Visible Area parameter HFP = 24; // Front Porch parameter HST = 136; // Sync Time parameter HBP = 160; // Back Porch parameter VVA = 768; // Visible Area parameter VFP = 3; // Front Porch parameter VST = 6; // Sync Time parameter VBP = 29; // Back Porch //variables reg [10:0] PC = 0; // Pixel Counter (Column, X) reg [9:0] LC = 0; // Line Counter (Row, Y) wire VA = (PC <HVA) & (LC < VVA); // Visible Area on screen always @(posedge PixClock) begin // VA <= ((PC < HVA-1) | (PC == HVA+HFP+HST+HBP-1)) & ((LC < VVA) | (LC == VVA+VFP+VST+VBP-1)); HSync <= (PC >= HVA+HFP-1) & (PC < HVA+HFP+HST-1); if (PC < (HVA+HFP+HST+HBP-1)) PC <= PC + 1'b1; else begin PC <= 0; VSync <= (LC >= VVA+VFP-1) & (LC < VVA+VFP+VST-1); if (LC < (VVA+VFP+VST+VBP-1)) LC <= LC + 1'b1; else LC <= 0; end end // Color Image always @(posedge PixClock) begin if (VA) begin if ((PC[7:0]==0) | (PC[7:0]==255) | (LC[7:0]==0) | (LC[7:0]==255)) begin R <= 7; G <= 7; B <= 7; end else begin if (LC[7:6]==0) begin R <= ~PC[9:7]; G <= 0; B <= 0; end if (LC[7:6]==1) begin R <= 0; G <= PC[8:6]; B <= 0; end if (LC[7:6]==2) begin R <= 0; G <= 0; B <= ~PC[7:5]; end if (LC[7:6]==3) begin R <= PC[6:4]; G <= PC[6:4]; B <= PC[6:4]; end end end else begin R <= 0; G <= 0; B <= 0; end end endmodule
Последний раз редактировалось LeoN65816; 12.07.2018 в 09:44.
Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)