PDA

Просмотр полной версии : 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 заработала, остальной софт не сломался.

zebest
09.08.2020, 16:40
Вот только странно, что у Соргелига такой ошибки никогда не было(или давно исправил). И ?
Нее, недавно исправил, тут я неправ:)
Кто виноват Miguel Angel что он выбрал такую сборку... Риторический в принципе вопрос.
И на оф.репе Т80 с ошибкой как была , так и есть.

nihirash
09.08.2020, 16:48
Вот только странно, что у Соргелига такой ошибки никогда не было.

Хорошо быть им :-)

Я тут скорее это написал на случай, если у кого все таки есть - то исправить это легко и есть пример как.

zebest
09.08.2020, 17:35
Ну как легко.. У Соргелига в двух местах изменено. Лучше уж его модуль взять.
И еще там синтаксическая ошибка в модуле, но не знаю, видимо компилятору на нее пофиг. Но себе исправил :)

fifan
09.08.2020, 18:06
А какой именно файл в корке Т80 нужно заменить?

caro
09.08.2020, 18:12
А какой именно файл в корке Т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
Я не знал в какой репе искать)
Спасибо!

К слову, фикс лучше этот применить) Я себе ядро уже пересинтезирую позже.

zebest
10.08.2020, 15:23
ну и т.с. еще один гвоздь в связи с MQM3. "Дискователи" оной чет перестарались, после конверсии из SCL в TRD в esxDOS крашиЦЦа еще в первой части. Поэтому корректность IM2 проверяем на тар-версии.

IanPo
10.08.2020, 15:48
Нашел аналогичную ошибку в TV80. Поправил, не проверял.

shurik-ua
10.08.2020, 15:58
может это специально было сделано чтобы видеть кто у кого скопировал код )

omercury
10.08.2020, 20:23
кто у кого
Автор Tv80 этого никогда, как бы, и не скрывал.

fifan
25.08.2020, 19:05
Подниму тему. Я использую процессор 8080. При фиксации вышеприведённой ошибки в файле T8080se.vhd компилятор не находит одной из описанных входных переменных.

IanPo
26.08.2020, 09:47
fifan
Квартус ошибку дает?
Надо текст посмотреть, что меняли и что было.

fifan
26.08.2020, 18:44
Error (12002): Port "STACKRQ" does not exist in macrofunction "u0"
В архиве корка t80. Квартус выдаёт ошибку в файле T8080se.vhd.

IanPo
27.08.2020, 10:36
Вот кусок из 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
);

fifan
27.08.2020, 15:21
Я это тоже заметил. Попробую прописать по аналогии с заменённым файлом из старой корки. Прослежу зачем он нужен и из какого файла приходит.

fifan
27.08.2020, 20:24
Запутался - слишком много исправлений, не буду ничего переделывать.