Исторически MAME ассоциируется с эмулятором для Arcade машин, но на сегоднешний день имеет приличную поддержку широкого спектра различных ПК в том числе ZX Spectrum (тайминги, вэйт память, устройства порта расширений) и его клонов: 48, 128, +2, +3, Pentagon, ATM, Scorpion, Sprinter, Evo TsConf, Evo BASECONF, Байт, и.т.д.
Телеграм: https://t.me/zx_mame
Оффициальные сборки здесь: https://www.mamedev.org/release.html
Документация: https://docs.mamedev.org/
Еще понадобятся ROMы под интересующие системы (в терминах MAME driver). Актульный торрент можно взять здесь: https://pleasuredome.github.io/pleasuredome/mame/index.html
Можно сделать так:
- Скачать торрент 'MAME 0.XXX ROMs (split)'
- Отменить загрузку всех файлов в настройках
- Добавить папку в mame.ini:
rompath roms;~/.mame/pleasuredome/roms
- Когда Эмулятор 'ругается' на отсутвиие ROM для driver. Зайти в трекер и поставить галочку на интересующем.
Если Вы добыли ROMы из других источников, их необходимо скопировать в паку roms прямо в архивах не расспаковывая.
TAB
- меню эмулируемой системы
Настройки для конкретной системы можно менят из меню, либо в mame.ini
см. mame -showconfig
Для TSConfig, и Pentevo(BASECONF) активируйте AT клавиатуру: TAB > Input Settings > Keyboard Selection > AT Keyboard [root:pc_keyboard] Enabled
Для Sprinter: TAB > Input Settings > Keyboard Selection > Microsoft Natural Keyboard [root:ms_naturl] Enabled
Многого можно добится используя UI, но удобнее из коммандной строки
mame spec128 -listmedia
mame spec128 -skip_gameinfo -cassette path/dizzy8.tap
mame pentagon -flop1 path/shock.trd
mame tsconf -hard path/wc.img
Добавить слоты расширений. Если слот имеет свой ностель, то (скорее всего) он получит приоритет над основным.
mame spectrum -exp musicmachine -cassette path/Music\ Machine.tzx
mame sprinter -skip_gameinfo -hard1 path/sprinter.img -isa0 zxbus_adapter -isa0:zxbus_adapter:card neogs -hard5 path/gs.img
mame tsconf -skip_gameinfo -zxbus1 neogs -hard1 path/gs.img -hard2 path/wc.img
mame sprinter -listslots
-window
оконный режим
-mouse_device none
помогает когда основной курсор захватывается окном эмулятора
-ui_active
Запускать с активными клавишами эмулятора
-nofilter
отключить фильтры рендера и сделать картинку 'не размытой'
-skip_gameinfo
не отоброжать окно с информацией при старте
-screen0 \\.\DISPLAY2
стартовать на втором мониторе
-hard1 \\.\PHYSICALDRIVE3
Win: подключение физического диска
... еща больше здесь
ScrLk
- отключение горячих клавиш эмулятора
Esc
- выход
PgDn
- максимальное ускорение эмуляции
F3
- soft reset
Shift+F3
- hard reset
F4
- просмотр палитры, шрифтов, тайлов. (Enter
, [
, ]
)
Из неприятного: форматы *.scl не поддерживается.
Для конвертирования scl в trd можно воспользоваться внешней программой scl2trd.
chd внутренний формат образов дисков, который позволяет хранить одновременно данные и медиа слои. Ковертируется во внутренний формат chd так:
chdman createhd -i games.img -o games.chd -c none # без сжатия данных
chdman createhd -i my.vhd -o my.chd -c zstd,zlib,huff,flac # 7zip сжатие данных
- https://docs.mamedev.org/debugger/index.html
- https://mattgreer.dev/blog/mame-debugging/
- https://github.com/tanseydavid/WPCResources/blob/master/PinMAME/pinmame-debugger-help.md
- https://docs.mamedev.org/luascript/index.html
- http://www.mamecheat.co.uk/forums/viewtopic.php?t=12245
mame ... -d
запустить с включенным отладчиком
mame ... -d -debugger imgui
с альтернативным отладчиком
Debug > New Memory Window (Ctrl+M)
- Основной источник о эмулируемой системы (таких окон можно открыть сколько угодно). Далее в выподающем списке окана нужно выброть интересующее значение. Например:
Zilog Z80 ':maincpu' program space memory
- 64K памяти, как ее адрессует Z80RAM/:ram/0/m_pointer
- все страницы ОЗУZX Spectrum 128/:/0/m_port_7ffd_data
- состояние порта #7FFD
Так же можно использовать комманды в окне: help
, help Watchpoints
, help Memory
, ...
history ;История последних комманд
bc=#1234 ;Присвоить BC 1234 (dec)
c=1a ;Присвоить C 1a (hex)
b@9f0e=3 ;Записать байт по адрессу 9f0e
w@9f0e=34bc ;Записать слово по адрессу 9f0e
ib@7ffd=4 ;Запись в порт 7ffd
bp 7cd3 ; выполнении инструкции в #7СВ3
wp 5ffc,2,w ; записи в адресса #5FFC, #5FFD
wpi 0,ffff,w,{(wpaddr & 00FF) == 82} ; записи в порт #xx82
trace run.asm,,noloop,{tracelog "sp:%04X r:%04X r':%04X | ", sp, af, af2}
gt #1000
-
Добавить в sjasmplus в после сборки проекта команду:
bplist "bin/bpx.ini" unreal
-
sjasmplus создаст на диске файл, содержащий адреса точек останова. Кол-во строк в этом файле равно кол-ву точек останова:
x0=0x8847
x0=0x884E
- Любым способом (автозаменой, или shell-скриптом, или программой из пары строк на любом языке) нужно сконвертировать эти строки в формат, понятный МАМЕ. Hint:
/^x0=0x([0-9A-F]{4})$/
Чтобы получилось так:
bp 8847
bp 884F
- Чтобы МАМЕ при запуске не встал колом на адресе 0000, нужно добавить в конец команду "g". Должно получиться так:
bp 8847
bp 884F
g
-
Сохранить это в файл debugscript.txt
-
Далее, можно запускать МАМЕ либо с параметром debug, либо без него, в зависимости от физического существования файла debugscript.txt:
if exist debugscript.txt (
mame.exe ... ... -debug -debugscript debugscript.txt
) else (
mame.exe ... ...
)
- Для этого понадобится доступ к
lua console
:
mame spectrum -console -d
- Подходим к началу интересующего отрезка и запоминаем исходное состояние:
[MAME]> t = manager.machine.time:as_ticks(3500000)
Здесь: 3500000 - текущая частота процессора
- Останавливаем исполнение в конце отрезка:
[MAME]> print(manager.machine.time:as_ticks(3500000)-t)