Emu80 v.4

Эмулятор Радио-86РК и других советских компьютеров на КР580ВМ80А http://www.emu80.org

Moderator: Pyk

Post Reply
Pyk
Maniac
Posts: 252
Joined: 21 Jan 2003 11:08
Contact:

Re: Emu80 v.4

Post by Pyk »

В общем, да, все так :)

Поддержка РОМ-диска для РК немного в незавершенном виде, настраивается только через конфиг.
Просто в журнальном РК вообще таймер предполагалось подключать параллельно РОМ-диску, мне это не очень понравилось при реализации в эмуляторе, поэтому РОМ-диск по умолчанию выключил.

Да и вообще, реализацию РОМ-диска буду со временем переделывать для унификации интерфейса для разных компьютеров...
User avatar
Shaos
Admin
Posts: 24012
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Emu80 v.4

Post by Shaos »

Тем не менее - для работы многостраничного ром-диска на РК требуется изменение кода :)

Возьмёшь пул-реквест пока реализацию ещё не переделал? ;)

Я свою реализацию ещё причешу, чтобы осталось совместимость с dsdos-ом и чтобы просто ромдиск тоже работал как и раньше...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Pyk
Maniac
Posts: 252
Joined: 21 Jan 2003 11:08
Contact:

Re: Emu80 v.4

Post by Pyk »

Shaos wrote:Тем не менее - для работы многостраничного ром-диска на РК требуется изменение кода :)
Возьмёшь пул-реквест пока реализацию ещё не переделал? ;)
Я не в курсе, существует общепринятая реализация многостраничного ром-диска на РК? Как страницы переключаются?

PR не могу точно обещать, что возьму. Но, если что, перепишу по-своему...
User avatar
Shaos
Admin
Posts: 24012
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Emu80 v.4

Post by Shaos »

Pyk wrote:
Shaos wrote:Тем не менее - для работы многостраничного ром-диска на РК требуется изменение кода :)
Возьмёшь пул-реквест пока реализацию ещё не переделал? ;)
Я не в курсе, существует общепринятая реализация многостраничного ром-диска на РК? Как страницы переключаются?
Тот же vinxru, но подцепленный к РК :)

romdisk2.png
romdisk2.png (5.72 KiB) Viewed 4659 times

И потом я настраиваемое делаю - не только полмега и мег, как в оригинале от vinxru, но и 2 мега, и даже 4 мега (под них схема расширяется элементарно - просто ставится 8 микросхем 49F040 или 29F040 и немного логики)
Pyk wrote:PR не могу точно обещать, что возьму. Но, если что, перепишу по-своему...
Я буду стараться сделать красиво и не сломать что уже работает :dj:
Я тут за главного - если что шлите мыло на me собака shaos точка net
Pyk
Maniac
Posts: 252
Joined: 21 Jan 2003 11:08
Contact:

Re: Emu80 v.4

Post by Pyk »

Shaos wrote:Тот же vinxru, но подцепленный к РК :)
Так-то он реализован уже, по умолчанию в конфиге Апогея...
User avatar
Shaos
Admin
Posts: 24012
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Emu80 v.4

Post by Shaos »

Pyk wrote:
Shaos wrote:Тот же vinxru, но подцепленный к РК :)
Так-то он реализован уже, по умолчанию в конфиге Апогея...
Но в РК это не работает :)

(на самом деле работает)

И там только полмега (16 страниц):

Code: Select all

void ApogeyRomDisk::setPortC(uint8_t value)
{
    bool newA15 = value & 0x80;
    value &= 0x7f;
    m_curAddr = (m_curAddr & ~0x7f00) | (value << 8);
    if (newA15 && !m_oldA15) // перед переключением банка нужно сбросить бит 7 порта B
        m_curAddr = (m_curAddr & 0x7fff) | ((m_curAddr & 0xf) << 15);
    m_oldA15 = newA15;
}
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24012
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Emu80 v.4

Post by Shaos »

Shaos wrote:И потом я настраиваемое делаю - не только полмега и мег, как в оригинале от vinxru, но и 2 мега, и даже 4 мега (под них схема расширяется элементарно - просто ставится 8 микросхем 49F040 или 29F040 и немного логики)
вроде сделал настраиваемо - на уровне конфига это вот так предлагается:
Attachments

Screenshot from 2024-01-12 00-01-51.png
Screenshot from 2024-01-12 00-01-51.png (77.6 KiB) Viewed 4638 times

Я тут за главного - если что шлите мыло на me собака shaos точка net
Pyk
Maniac
Posts: 252
Joined: 21 Jan 2003 11:08
Contact:

Re: Emu80 v.4

Post by Pyk »

Я правильно понимаю, что через PageSelector выбираются страницы размером в 512 Мб?
То есть по сути это расширение уже реализованного ApogeyRomDisk?

В таком случае будет логичнее сделать производный класс от ApogeyRomDisk или даже просто добавить к нему еще один метод для выбора текущей страницы...
User avatar
Shaos
Admin
Posts: 24012
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Emu80 v.4

Post by Shaos »

Да, так тоже работает:

Code: Select all

ifdef EXT_ROM_DISK
  ApogeyRomDisk romDisk = @CFG_ROMDISK_FILE
  ppi2.circuit = &romDisk
endif
Но тут только 512КБ, а я планировал чтобы можно было указать разные размеры - не только 512КБ, но и 1МБ, 2МБ или 4МБ.

Хотя наверное и класс ApogeyRomDisk можно расширить, добавив необязательный конфигурационный параметр sizeMB (по умолчанию размер будет как и теперь 512КБ, а при указании sizeMB=1, sizeMB=2 или sizeMB=4 будет установлено соответствующее количество мегабайтов (маска 0x1f, 0x2f или 0x3f соответственно вместо 0xf):

Code: Select all

void ApogeyRomDisk::setPortC(uint8_t value)
{
    bool newA15 = value & 0x80;
    value &= 0x7f;
    m_curAddr = (m_curAddr & ~0x7f00) | (value << 8);
    if (newA15 && !m_oldA15) // перед переключением банка нужно сбросить бит 7 порта B
        m_curAddr = (m_curAddr & 0x7fff) | ((m_curAddr & 0xf) << 15); // <<<<<<<<<<<<<<<<<< m_mask вместо 0xf
    m_oldA15 = newA15;
}
P.S. Кстати монитор Апогея НЕ засылает #FF в порт C по окончании работы директивы R, как это делается в мониторе РК! Это означает, что если подключать к РК схему vinxru как есть, то перед каждым R надо указывать страницу (даже нулевую - через R8000) т.к. после каждой R (если адрес был не #80XX), оно просто запомнит произвольную страницу в соответствии с последним значением, записанным в порт B, например после R,F оно ошибочно поменяет страницу на номер 15:

romdisk3.png
romdisk3.png (5.93 KiB) Viewed 4532 times

По идее это легко чинится аппаратно путём добавления в квазидиск логики, которая предотвращает сохранение номера страницы, если бит 7 и бит 6 порта C оба установлены в 1 - только если бит 7 в 1, а бит 6 в 0 - тогда всё будет ок...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24012
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Emu80 v.4

Post by Shaos »

А зачем в начале каждого исходного файла стоит непечатная последовательность #EF #BB #BF?

EF_BB_BF.jpg
EF_BB_BF.jpg (80.96 KiB) Viewed 4554 times

P.S. Погуглил - это похоже вот это: https://en.wikipedia.org/wiki/Byte_order_mark
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24012
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Emu80 v.4

Post by Shaos »

Ещё вопрос - про шрифты:

Code: Select all

# Шрифты 8x8, 8x12, 8x16
@FONT     = "rk86/fontr.bin"
Как переключаться между этими тремя типами шрифтов? Alt-F вроде как только между двумя вариантами переключается - какой-то хардкод и какой-то большой размер из файла rk86/fontr.bin - как подменить обычный фонт 8x8 на свой?

P.S. А всё нашёл - rk86/sgr.bin надо подменить :)

Code: Select all

# Знакогенератор
@SYM_GEN  = "rk86/sgr.bin"       

# Шрифты 8x8, 8x12, 8x16
@FONT     = "rk86/fontr.bin"
...
Rk86Renderer crtRenderer
crtRenderer.font = @SYM_GEN
crtRenderer.altFont = @FONT
crtRenderer.altRenderer = no
crtRenderer.visibleArea = no
crtRenderer.crt = &crt
Attachments

myfont.png
myfont.png (4.75 KiB) Viewed 4535 times

Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24012
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Emu80 v.4

Post by Shaos »

Shaos wrote:Хотя наверное и класс ApogeyRomDisk можно расширить, добавив необязательный конфигурационный параметр sizeMB (по умолчанию размер будет как и теперь 512КБ, а при указании sizeMB=1, sizeMB=2 или sizeMB=4 будет установлено соответствующее количество мегабайтов (маска 0x1f, 0x2f или 0x3f соответственно вместо 0xf)...
Расширил :)

https://github.com/vpyk/emu80v4/pull/22
Я тут за главного - если что шлите мыло на me собака shaos точка net
Pyk
Maniac
Posts: 252
Joined: 21 Jan 2003 11:08
Contact:

Re: Emu80 v.4

Post by Pyk »

PR вижу, постараюсь завтра внимательно посмотреть, сегодня уже не успеваю.

sgr.bin - это родной знакогенератор, а fontr.bin - альтернативный, если в эмуляторе захочется красивых символов. Там для каждого символа последовательно записаны версии 8*8, 8*12 и 8*16, выбирается подходящий в зависимости от разрешения. Наследие еще DOS-версии эмулятора, рисовал эти альтернативные наборы еще тогда, по крайней мере для РК.

BOM добавил, чтобы файлы в кодировке UTF-8 нормально воспринимал Visual Studio 2015, без этого он думает, что исходники в кодировке windows. Для Linux это несколько странно, но, по крайней мере, допустимо и не мешает. Хотя основной инструмент сборки у меня - GCC, тем не менее совместимость с VS2015 поддерживается. В более поздних версиях VS тоже проблем нет, но меня неоднократно просили сохранять совместимость с WinXP, так что также приходится поддерживать совместимость со старыми инструментами сборки...

Поясни, для чего планируется использовать этот расширенный РОМ-диск? Есть какой-то софт, на котором можно его протестировать или, наоборот, эмулятор планируется использовать для его разработки, а уж потом воплощать в железе? Как планируется грузить начальный загрузчик? Будет модифицированный Монитор (или какой-то другой стандартный софт или ОС)? Не вникал пока в нюансы, но если запускать через стандартный Монитор, то вместо доп. логики можно, наверное, загрузчик дублировать в начало каждой страницы. Достаточно всего нескольких байт, я думаю...
User avatar
Shaos
Admin
Posts: 24012
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: Emu80 v.4

Post by Shaos »

Pyk wrote:PR вижу, постараюсь завтра внимательно посмотреть, сегодня уже не успеваю.
да не вопрос - когда время будет :)
Pyk wrote:sgr.bin - это родной знакогенератор, а fontr.bin - альтернативный, если в эмуляторе захочется красивых символов. Там для каждого символа последовательно записаны версии 8*8, 8*12 и 8*16, выбирается подходящий в зависимости от разрешения. Наследие еще DOS-версии эмулятора, рисовал эти альтернативные наборы еще тогда, по крайней мере для РК.
Я вроде пробовал разрешение переключать, но всё равно одна и та же часть из fontr.bin использовалась - ну да ладно, мне главное было уметь подменять основной знакогенератор :)
Pyk wrote:BOM добавил, чтобы файлы в кодировке UTF-8 нормально воспринимал Visual Studio 2015, без этого он думает, что исходники в кодировке windows. Для Linux это несколько странно, но, по крайней мере, допустимо и не мешает. Хотя основной инструмент сборки у меня - GCC, тем не менее совместимость с VS2015 поддерживается. В более поздних версиях VS тоже проблем нет, но меня неоднократно просили сохранять совместимость с WinXP, так что также приходится поддерживать совместимость со старыми инструментами сборки...
А WinXP умел UTF-8? :)
Так то GCC в моём дебияне Emu80 v4 собирает без проблем - просто когда я в коде копаюсь, я чисто для собственного удобства перевожу исходик в UNIX-фомат через dos2unix, который прибивает эту троицу в начале файла - потом при превращении обратно в DOS приходится их ручками добавлять в HEX-редакторе (я их сначала даже не заметил - мне git diff показал отличие в начале файла и только потом я стал в HEX-виде разглядывать чего там такое).
Pyk wrote:Поясни, для чего планируется использовать этот расширенный РОМ-диск? Есть какой-то софт, на котором можно его протестировать или, наоборот, эмулятор планируется использовать для его разработки, а уж потом воплощать в железе? Как планируется грузить начальный загрузчик? Будет модифицированный Монитор (или какой-то другой стандартный софт или ОС)? Не вникал пока в нюансы, но если запускать через стандартный Монитор, то вместо доп. логики можно, наверное, загрузчик дублировать в начало каждой страницы. Достаточно всего нескольких байт, я думаю...
Ну начнём с того, что vinxru после варианта 512кб сам предложил вариант 1МБ :)
https://zx-pk.ru/threads/17316-apogej-bk01-i-apogej-bk01ts-vneshnij-rom-disk.html?p=436029&viewfull=1#post436029
А где 1 мег, там можно и до 2 расширить и до 4 совершенно прозрачным образом ;)
Изменения монитора или спец.загрузчик ненужны - всё работает и так с "ручным" подходом, когда странички переключаются через R8000, R8001, R8002 и т.д. (см.скриншот выше - единственное, что в РК это надо делать перед каждой операцией чтения через команду R). Загрузчик в каждой странице тоже ненужен (как я писал без него вообще можно обойтись). А так я конечно же хочу привести Emu80 к состоянию, чтобы он "из коробки" умел играть мою 2-битную музыку, где некоторые музычки зашкаливают за 1 мег (я 10 лет назад чисто для себя подправлял Emu80 v3, чтобы он умел квазидиск и микширование INTE с выходом мафона делал, но в современном 64-битном дебияне тот код уже не собирается), а в перспективе я таки сделаю возможность записи в микрухи типа 49F040 или 29F040 и выпущу платку с поддержкой в своей операционке ShaOS (но это уже очень далёкое будущее).

P.S. Потом можно с видео на РК поиграться :eugeek:
Игры с видео и музыкальными вставками поделать :mrgreen:
И конечно же Emu80 мне бы сильно помог в разработке таковых :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
Pyk
Maniac
Posts: 252
Joined: 21 Jan 2003 11:08
Contact:

Re: Emu80 v.4

Post by Pyk »

Не сложилось в прошлое воскресенье, так и осталось почти до следующих выходных :(

А может, маску вычислять просто из фактического размера файла? Или софт будет предполагать фиксированный размер, и из самого содержимого РОМ-диска фактический размер определить не получится?

И вот это не понял:
+ else if(mb<4) mb = 2;

То есть, если указать 3, будет доступно 2? Может просто ограничить выбор вариантами 0,1,2,4? Можно и auto добавить (см. выше).
Post Reply