Closed vitasam closed 2 years ago
Not really, I made this one as a proof-of-concept, it was not my goal to make it work 100% correctly.
По-русски можно?
Насколько я понимаю, Ваш эмулятор БК0010 - единственный для этой железки ttgoVGA32. Было бы интересно развивать его дальше. У меня никогда не было БК0010, но я с детства всегда его хотел :)
Я скинул ссылку и фотографии в тот чат БК0010, некий интерес там есть, по крайней мере один человек точно заказал железку, чтобы попробовать.
Я буду только рад, если кто-то будет развивать этот проект, однако я не могу тратить много времени на это, к сожалению. У меня тоже не было БК, но я ходил в кружок заниматься.
Спасибо! Мне точно было бы интересно этим заниматься, попробую по мере свободного времени.
Кстати, вот ещё нашелся, но там кастомная железка: https://github.com/konst-st/BK8266
Этот, похоже дальше продвинулся.
Про загрузку бинарных файлов. Вот в эмуляторе гида (первая ссылка в этом issue), может, полезная информация:
// для БК10.
bool CMotherBoard::EmulateLoadTape()
{
/*
* Известные косяки: 1) для бейсиковских бин файлов удаляет расширение .bin, как исправить
* непонятно, потому что никак не узнать, что мы загружаем именно бейсиковский бин файл,
* а не какой-либо другой. То же самое и с любыми другими файлами, по задумке авторов,
* имеющими расширение .bin, оно как правило удаляется.
* 2) при загрузке файла с автозапуском, автозапуск делается из ячейки на слово выше, чем в реальности.
* Это может быть критично только для очень хитрых программ.
**/
// если включена эмуляция и по этому адресу действительно ПЗУ монитора БК10
if (g_Config.m_bEmulateLoadTape && ((GetWord(0116206) == 04767) && (GetWord(0116210) == 0426)))
{
bool bFileSelect = false; // что делать после диалога выбора
и тут:
// Загрузим файл, если ошибок не было
if (!bError && file.Open(strFileName, CFile::modeRead))
{
file.Read(&readAddr, sizeof(readAddr)); // Первое слово в файле - адрес загрузки
file.Read(&readSize, sizeof(readSize)); // Второе слово в файле - длина
// сплошь и рядом встречаются .bin файлы. у которых во втором слове указана длина
// меньше, чем длина файла - 4. Это другой формат бин, у которого в начале указывается
// адрес, длина, имя файла[BK_NAMELENGTH], массив[длина], КС - контрольная сумма в конце
uint16_t filesz = (file.GetLength() < 65536) ? static_cast<uint16_t>(file.GetLength()) : 65535;
bool bIsCRC = false;
Там вообще как-то хитро всё грузится (файл ..\BKemu\BK\devemu\Board.cpp):
if (loadAddr < 0750)
{
// Помещаем в R1 последний адрес, куда производилось чтение, как в emt 36
SetRON(CCPU::REGISTER::R0, 0);
SetRON(CCPU::REGISTER::R1, loadAddr + loadLen);
SetRON(CCPU::REGISTER::R2, 0);
SetRON(CCPU::REGISTER::R3, 0177716);
SetRON(CCPU::REGISTER::R5, 040);
SetRON(CCPU::REGISTER::PC, 0117374); // выходим туда.
}
else
{
SetRON(CCPU::REGISTER::R0, loadcrc);
SetRON(CCPU::REGISTER::R0, 0314);
SetRON(CCPU::REGISTER::R3, 0177716);
SetRON(CCPU::REGISTER::R4, 0);
// Помещаем в R5 последний адрес, куда производилось чтение, как в emt 36
SetRON(CCPU::REGISTER::R5, loadAddr + loadLen);
SetRON(CCPU::REGISTER::PC, 0116710); // выходим туда.
}
Вот это я точно не обрабатываю:
// сплошь и рядом встречаются .bin файлы. у которых во втором слове указана длина
// меньше, чем длина файла - 4. Это другой формат бин, у которого в начале указывается
// адрес, длина, имя файла[BK_NAMELENGTH], массив[длина], КС - контрольная сумма в конце
uint16_t filesz = (file.GetLength() < 65536) ? static_cast
Мне кажется, надо попробовать этот кусок, где if (loadAddr < 0750)
Я вчера поэкспериментировал немного - поднял размер 0х4000 побольше (кстати, 0х4000 это маловато для реальной БК0010) и добавил printf().
Некоторые программы типа dizzy, скрашились с выводом core-dump, но некоторые типа Перестройка, не работают.
(кстати, 0х4000 это маловато для реальной БК0010) В БК-0010 ОЗУ всего 0x4000, включая системную область, но без экранной памяти https://zx-pk.ru/wiki/%D0%91%D0%9A-0010 Я не поддерживаю БК-0011 пока
Да, я знаю, но в БК0010-чате говорят, что многие программы для чистой БК0010 грузятся с экраном, вплоть до ПЗУ
Hello,
do you know about this emulator? http://gid.pdp-11.ru/
And this is quite active community: https://t.me/bk0010_11m