nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 May 2024 13:52



Reply to topic  [ 254 posts ]  Go to page Previous  1 ... 12, 13, 14, 15, 16, 17  Next
Emu80 v.4 
Author Message
Maniac

Joined: 21 Jan 2003 04:08
Posts: 224
Reply with quote
В общем, да, все так :)

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

Да и вообще, реализацию РОМ-диска буду со временем переделывать для унификации интерфейса для разных компьютеров...

_________________
Эмулятор Emu80


11 Jan 2024 03:14
Profile ICQ WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22802
Location: Silicon Valley
Reply with quote
Тем не менее - для работы многостраничного ром-диска на РК требуется изменение кода :)

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

Я свою реализацию ещё причешу, чтобы осталось совместимость с dsdos-ом и чтобы просто ромдиск тоже работал как и раньше...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


11 Jan 2024 20:32
Profile WWW
Maniac

Joined: 21 Jan 2003 04:08
Posts: 224
Reply with quote
Shaos wrote:
Тем не менее - для работы многостраничного ром-диска на РК требуется изменение кода :)
Возьмёшь пул-реквест пока реализацию ещё не переделал? ;)

Я не в курсе, существует общепринятая реализация многостраничного ром-диска на РК? Как страницы переключаются?

PR не могу точно обещать, что возьму. Но, если что, перепишу по-своему...

_________________
Эмулятор Emu80


11 Jan 2024 22:21
Profile ICQ WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22802
Location: Silicon Valley
Reply with quote
Pyk wrote:
Shaos wrote:
Тем не менее - для работы многостраничного ром-диска на РК требуется изменение кода :)
Возьмёшь пул-реквест пока реализацию ещё не переделал? ;)

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

Attachment:
romdisk2.png
romdisk2.png [ 5.72 KiB | Viewed 2515 times ]

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

Pyk wrote:
PR не могу точно обещать, что возьму. Но, если что, перепишу по-своему...

Я буду стараться сделать красиво и не сломать что уже работает :dj:

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


11 Jan 2024 22:47
Profile WWW
Maniac

Joined: 21 Jan 2003 04:08
Posts: 224
Reply with quote
Shaos wrote:
Тот же vinxru, но подцепленный к РК :)

Так-то он реализован уже, по умолчанию в конфиге Апогея...

_________________
Эмулятор Emu80


11 Jan 2024 23:05
Profile ICQ WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22802
Location: Silicon Valley
Reply with quote
Pyk wrote:
Shaos wrote:
Тот же vinxru, но подцепленный к РК :)

Так-то он реализован уже, по умолчанию в конфиге Апогея...

Но в РК это не работает :)

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

И там только полмега (16 страниц):
Code:
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;
}

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


11 Jan 2024 23:13
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22802
Location: Silicon Valley
Reply with quote
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 2494 times ]

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973
12 Jan 2024 01:09
Profile WWW
Maniac

Joined: 21 Jan 2003 04:08
Posts: 224
Reply with quote
Я правильно понимаю, что через PageSelector выбираются страницы размером в 512 Мб?
То есть по сути это расширение уже реализованного ApogeyRomDisk?

В таком случае будет логичнее сделать производный класс от ApogeyRomDisk или даже просто добавить к нему еще один метод для выбора текущей страницы...

_________________
Эмулятор Emu80


12 Jan 2024 01:28
Profile ICQ WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22802
Location: Silicon Valley
Reply with quote
Да, так тоже работает:
Code:
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:
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:

Attachment:
romdisk3.png
romdisk3.png [ 5.93 KiB | Viewed 2388 times ]

По идее это легко чинится аппаратно путём добавления в квазидиск логики, которая предотвращает сохранение номера страницы, если бит 7 и бит 6 порта C оба установлены в 1 - только если бит 7 в 1, а бит 6 в 0 - тогда всё будет ок...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


12 Jan 2024 01:43
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22802
Location: Silicon Valley
Reply with quote
А зачем в начале каждого исходного файла стоит непечатная последовательность #EF #BB #BF?

Attachment:
EF_BB_BF.jpg
EF_BB_BF.jpg [ 80.96 KiB | Viewed 2410 times ]


P.S. Погуглил - это похоже вот это: https://en.wikipedia.org/wiki/Byte_order_mark

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


12 Jan 2024 22:53
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22802
Location: Silicon Valley
Reply with quote
Ещё вопрос - про шрифты:
Code:
# Шрифты 8x8, 8x12, 8x16
@FONT     = "rk86/fontr.bin"

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

P.S. А всё нашёл - rk86/sgr.bin надо подменить :)
Code:
# Знакогенератор
@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 2391 times ]

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973
13 Jan 2024 00:21
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22802
Location: Silicon Valley
Reply with quote
Shaos wrote:
Хотя наверное и класс ApogeyRomDisk можно расширить, добавив необязательный конфигурационный параметр sizeMB (по умолчанию размер будет как и теперь 512КБ, а при указании sizeMB=1, sizeMB=2 или sizeMB=4 будет установлено соответствующее количество мегабайтов (маска 0x1f, 0x2f или 0x3f соответственно вместо 0xf)...

Расширил :)

https://github.com/vpyk/emu80v4/pull/22

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


13 Jan 2024 01:33
Profile WWW
Maniac

Joined: 21 Jan 2003 04:08
Posts: 224
Reply with quote
PR вижу, постараюсь завтра внимательно посмотреть, сегодня уже не успеваю.

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

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

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

_________________
Эмулятор Emu80


13 Jan 2024 10:49
Profile ICQ WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22802
Location: Silicon Valley
Reply with quote
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:

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


13 Jan 2024 12:24
Profile WWW
Maniac

Joined: 21 Jan 2003 04:08
Posts: 224
Reply with quote
Не сложилось в прошлое воскресенье, так и осталось почти до следующих выходных :(

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

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

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

_________________
Эмулятор Emu80


19 Jan 2024 05:46
Profile ICQ WWW
Display posts from previous:  Sort by  
Reply to topic   [ 254 posts ]  Go to page Previous  1 ... 12, 13, 14, 15, 16, 17  Next

Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.