Просмотр полной версии : T80 и команда IM2
nihirash
09.08.2020, 16:21
Всем привет!
Практически каждый проект в ПЛИС, реализующий софткорку Z80 использует для основы T80.
В принципе, корка неплохо работает и справляется со своей задачей. Но иногда встречается что то вроде демы "MQM 3", которая просто встает колом на декранчинге.
Собственно Miguel Angel раздебажил и нашел ошибку декодирования инструкции. Почитать об этом можно тут (https://www.facebook.com/groups/1571560916478710/permalink/2386038405030953/)
Фикс можно посмотреть на примере некста (https://gitlab.com/SpectrumNext/ZX_Spectrum_Next_FPGA/-/merge_requests/1).
Я уже пособирал для теста корку на gomaDOS+ и все отлично бегает, MQM 3 заработала, остальной софт не сломался.
Вот только странно, что у Соргелига такой ошибки никогда не было(или давно исправил). И ?
Нее, недавно исправил, тут я неправ:)
Кто виноват Miguel Angel что он выбрал такую сборку... Риторический в принципе вопрос.
И на оф.репе Т80 с ошибкой как была , так и есть.
nihirash
09.08.2020, 16:48
Вот только странно, что у Соргелига такой ошибки никогда не было.
Хорошо быть им :-)
Я тут скорее это написал на случай, если у кого все таки есть - то исправить это легко и есть пример как.
Ну как легко.. У Соргелига в двух местах изменено. Лучше уж его модуль взять.
И еще там синтаксическая ошибка в модуле, но не знаю, видимо компилятору на нее пофиг. Но себе исправил :)
А какой именно файл в корке Т80 нужно заменить?
А какой именно файл в корке Т80 нужно заменить?
В файле t80_mcode.vhd надо изменить одну строку
-- when "01011110"|"01110111" =>
when "01011110"|"01111110" =>
-- IM 2
IMode <= "10";
nihirash
09.08.2020, 18:17
Ну как легко.. У Соргелига в двух местах изменено.
Можно меня носом в это ткнуть?
Я просто не знаю, где его лежит модуль.
И если можно ткнуть носом, где у него исправлено.
Чтобы совсем для тупеньких)
shurik-ua
09.08.2020, 18:21
интересно какой ассемблер им собрал для IM2 команды хекс 0xED, 0x7E - или они вручную сразу хексы вводили )
Shadow Maker
09.08.2020, 18:22
Можно меня носом в это ткнуть?
Я просто не знаю, где его лежит модуль.
И если можно ткнуть носом, где у него исправлено.
Чтобы совсем для тупеньких)
Ну ты уж вообще, лень последний коммит посмотреть https://github.com/MiSTer-devel/ZX-Spectrum_MISTer/commit/a020e3c358c687fccd8e7a35929041cf550ed50a
nihirash
09.08.2020, 18:25
Я не знал в какой репе искать)
Спасибо!
К слову, фикс лучше этот применить) Я себе ядро уже пересинтезирую позже.
ну и т.с. еще один гвоздь в связи с MQM3. "Дискователи" оной чет перестарались, после конверсии из SCL в TRD в esxDOS крашиЦЦа еще в первой части. Поэтому корректность IM2 проверяем на тар-версии.
Нашел аналогичную ошибку в TV80. Поправил, не проверял.
shurik-ua
10.08.2020, 15:58
может это специально было сделано чтобы видеть кто у кого скопировал код )
omercury
10.08.2020, 20:23
кто у кого
Автор Tv80 этого никогда, как бы, и не скрывал.
Подниму тему. Я использую процессор 8080. При фиксации вышеприведённой ошибки в файле T8080se.vhd компилятор не находит одной из описанных входных переменных.
fifan
Квартус ошибку дает?
Надо текст посмотреть, что меняли и что было.
Error (12002): Port "STACKRQ" does not exist in macrofunction "u0"
В архиве корка t80. Квартус выдаёт ошибку в файле T8080se.vhd.
Вот кусок из T80.vhd - тут нет STACKRQ. Видимо, нужно его прописать.
port(
RESET_n : in std_logic;
CLK_n : in std_logic;
CEN : in std_logic;
WAIT_n : in std_logic;
INT_n : in std_logic;
NMI_n : in std_logic;
BUSRQ_n : in std_logic;
M1_n : out std_logic;
IORQ : out std_logic;
NoRead : out std_logic;
Write : out std_logic;
RFSH_n : out std_logic;
HALT_n : out std_logic;
BUSAK_n : out std_logic;
A : out std_logic_vector(15 downto 0);
DInst : in std_logic_vector(7 downto 0);
DI : in std_logic_vector(7 downto 0);
DO : out std_logic_vector(7 downto 0);
MC : out std_logic_vector(2 downto 0);
TS : out std_logic_vector(2 downto 0);
IntCycle_n : out std_logic;
IntE : out std_logic;
Stop : out std_logic;
out0 : in std_logic := '0'; -- 0 => OUT(C),0, 1 => OUT(C),255
REG : out std_logic_vector(211 downto 0); -- IFF2, IFF1, IM, IY, HL', DE', BC', IX, HL, DE, BC, PC, SP, R, I, F', A', F, A
DIRSet : in std_logic := '0';
DIR : in std_logic_vector(211 downto 0) := (others => '0') -- IFF2, IFF1, IM, IY, HL', DE', BC', IX, HL, DE, BC, PC, SP, R, I, F', A', F, A
);
Я это тоже заметил. Попробую прописать по аналогии с заменённым файлом из старой корки. Прослежу зачем он нужен и из какого файла приходит.
Запутался - слишком много исправлений, не буду ничего переделывать.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot