Попробовал компилировать под Windows в Qt Creator 4.6.0.
Конфигурация Desktop Qt 5.6.3 MinGW 32bit.
Собралось без ошибок и варнингов (и это отлично).
При запуске пустое окно со списком платформ -- тут было бы здорово писать сообщение о том что нужно положить/настроить emu80.conf, также стоит это написать в README.md в исходниках.
Затем, после того как я положил emu80.conf и запустил конфигурацию rk86 -- видимо программа не нашла папки rk86, программа работает в фоне, ошибок не показывает -- тут надо показать окно-алерт и завершиться или вернуться в окно выбора платформы.
При выборе команды Debug -- segmentation fault в DebugWindow::draw() строка 257.
Эта проблема решилась тем что подложил файл dbgfont.bin. Но тут нужно проверять что шрифт не загрузился.
Ну и отладчик лучше было переделать в графический конечно, выделить в отдельные окна просмотр памяти и всё остальное.
- - - Updated - - -
Несколько подозрительных мест в коде:
1. Debugger.cpp:130
Похоже на то что перепутаны местами значение и количество байт.Код:memset(&m_states, sizeof(m_states), 1);
2. Debugger.cpp:1035
Странно что m_inputCurPos сначала вычисляется в зависимости от условия, а потом обнуляется.Код:if (useInitialNumber) { m_inputCurPos = nDigits - 1; m_inputCurValue = int2Hex(initialNumber, nDigits); } else { m_inputCurPos = 0; m_inputCurValue = ""; } m_inputCurPos = 0;
3. ConfigReader.cpp
В функции ConfigReader::createObject() два раза одна проверка:
4. CpuZ80.cpp:377Код:else if (typeName == "Ut88MemPageSelector") obj = new Ut88MemPageSelector();
IXY ^ IXY -- странно что одно и то же значение, по идее это даёт 0.Код:cbits = (IXY ^ IXY ^ sum) >> 8;
5. CpuZ80.cpp:841
Что-то тут не так, AF это af[af_sel], то есть первая и третья строчки делают присваивание в себя.Код:case 0x08: /* EX AF,AF' */ af[af_sel] = AF; af_sel = 1 - af_sel; AF = af[af_sel]; break;
И вот тут ниже подобный код, думаю та же проблема:
6. Eureka.cpp:70Код:case 0xD9: /* EXX */ regs[regs_sel].bc = BC; regs[regs_sel].de = DE; regs[regs_sel].hl = HL; regs_sel = 1 - regs_sel; BC = regs[regs_sel].bc; DE = regs[regs_sel].de; HL = regs[regs_sel].hl; break;
Логический AND между bool и константой -- непонятно что это значит.Код:m_useRomDisk = value && 0x80;




Ответить с цитированием