Прогоню позже, пока рано -- в T11 нет понятия bus error, и чтобы его добавить корректно, придется немного перетряхнуть код.
Вид для печати
Прогоню позже, пока рано -- в T11 нет понятия bus error, и чтобы его добавить корректно, придется немного перетряхнуть код.
Мне показалось удобным добавлять Trap_4 в код при помощи исключений :
Тогда бросать исключения можно в любом месте и на любом уровне вложенности вызовов подпрограмм, а обрабатывать - только на самом верхнем уровне.Код:if( !abRAM[addr] )
{
wBadAddr = addr;
nBadAccessType = 4;
throw(0);
}
Я так и собираюсь сделать. Похоже, для этого придется залезть и в ядро mame -- https://github.com/mamedev/mame/blob...mumem.cpp#L715
Конвертор в абсолютный формат bin2load (https://github.com/jguillaumes/retroutils via http://ancientbits.blogspot.ru/2012/...nes-pdp11.html) оказался весьма полезен -- конвертировал им загрузочный сектор виртуальных дисков HD:, стало чуть удобнее грузить тесты.
Код перетряхнул и результат довольно ужасен, но стал проходить тест памяти 791323.
https://img-fotki.yandex.ru/get/3008...bb992_orig.png
Тест FIS 791403 проваливается схоже с VKAC, и результаты TSTVM2 намекают, где именно (команда DIV).
https://img-fotki.yandex.ru/get/4704...b0693_orig.png
https://img-fotki.yandex.ru/get/1334...bc46d_orig.png
https://img-fotki.yandex.ru/get/4704...003ed_orig.png
https://img-fotki.yandex.ru/get/5479...2cc34_orig.png
Попутно выяснил, что диск TSTSYS.DSK довольно странный -- rt11 5.3 считает его битым, и PUTR портит файлы при записи на него.
Более аккуратно отслеживаю CPC, CPSW и тест FIS (VKAC) почти работает:
https://img-fotki.yandex.ru/get/1207...6918f_orig.png
Аналогичному тесту 791403 это помогло меньше. Листинга от него нет, но скорее всего, это вариант того же VKAC.
С CPC и CPSW есть тонкие моменты. Они изменяются только когда в PSW сброшен бит 7 или 8. Это можно посмотреть в исходниках UKNCBTL.
При этом CPSW меняется только при изменении младшего байта PSW. Целиком PSW меняется только в таких случаях -прерывания режима HALT (двойное зависание, сигнал/команда HALT, прерывание ошибки шины в HALT-режиме, включение питания, команда FIS, ошибка получения адреса вектора прерывания), команды STEP и RUN, команды RTI и RTT при возврате в адрес больший 0160000. В остальных случаях изменяется только младший байт.Код:void SetPSW(WORD word){
m_psw = word & 0777;
if ((m_psw & 0600) != 0600) m_savepsw = m_psw;
}
void SetLPSW(BYTE byte)
{
m_psw = (m_psw & 0xFF00) | (WORD)byte;
if ((m_psw & 0600) != 0600) m_savepsw = m_psw;
}
void SetReg(int regno, WORD word)
{
m_R[regno] = word;
if ((regno == 7) && ((m_psw & 0600)!=0600)) m_savepc = word;
}
void SetLReg(int regno, BYTE byte)
{
m_R[regno] = (m_R[regno] & 0xFF00) | (WORD)byte;
if ((regno == 7) && ((m_psw & 0600)!=0600)) m_savepc = m_R[7];
}
void SetPC(WORD word)
{
m_R[7] = word;
if ((m_psw & 0600) != 0600) m_savepc = word;
}
Есть еще один тонкий момент. В эмуляторе UKNCBTL также не шел эмулятор FIS, пока в команде не была вставлена небольшая затычка (отмечена красным):
А иначе в эмуляторе FIS происходило прерывание, но т.к. в стек в 1801ВМ2 кладутся CPC и CPSW, то соответственно без этого клался в стек адрес за командой FIS, а надо адрес за MTPS.Код:void CProcessor::ExecuteMTPS () // MTPS - move to PS{
WORD ea;
BYTE dst;
if(m_methdest)
{
ea = GetByteAddr(m_methdest,m_regdest);
if (m_RPLYrq) return;
dst = GetByte(ea);
if (m_RPLYrq) return;
}
else
dst = GetLReg(m_regdest);
SetLPSW((GetLPSW() & 0x10) | (dst & 0xEF));
SetPC(GetPC());
m_internalTick=MTPS_TIMING[m_methdest];
}
Заново переписываю обработку прерываний и все такое, результат 791403 временно стал похож на VKAC (проваливаются тесты на bus error внутри команд FIS), зато сломалось многое другое :) Буду думать.
Где-то на этом форуме упоминалась прошивка КЦГД с тестами -- есть у кого такая?
Начал делать qbus (пока не очень настоящий -- только чтобы работал RESET); стал проходить тест терминала и тест VKAH. Других хороших новостей пока нет :)
https://img-fotki.yandex.ru/get/5523...66f05_orig.png
Промежуточный результат -- что думает RT-11 5.3 про этот эмулятор:
https://img-fotki.yandex.ru/get/5093...fb310_orig.png
Заработала эмуляция КЦГД (см. соседнюю тему) с прошивкой 181 + попутно стал проходить тест скорости:
https://img-fotki.yandex.ru/get/5026...3d323_orig.png