Сообщение от
CityAceE
Я имел ввиду полноценный интерфейс типа как в эмуляторе X128.
В X128? Нет там никакого интерфейса.
Подобные вещи есть тока в старых версиях UnewalSpeccy (0.19b ... 0.21b3) и Z80Stealth.
Вот кусок документации UnrealSpeccy:
Код:
unreal programming interface
unreal API allows you to use emulator more efficiently. here is a
brief description of documented unreal functions. all functions
may be called through executing Z80 invalid opcode EDFF, registers
must contain the following values:
BC=6E75, DE=6572, HL=6C61, A=function_code, IX=param
for example:
UAPI:
ld bc, word ptr [key+0]
ld de, word ptr [key+2]
ld hl, word ptr [key+4]
db 0EDh, 0FFh
ret
key: db 'unreal'
API functions:
0. exit emulator,if you don't want your program to be emulated on unreal speccy
ld a,'q'
ld ix, offset quit_message
jp UAPI ; don't return
; not more then 64 chars, and can't cross 16K page boundary
quit_message: db 'allowed to run only on real hardware',0
1. get emulator version
ld a,'?'
call UAPI
; returns:
; CY=0 [success flag]
; H - major version number
; L - minor version number
; A - bits 0..6 - revision number. bit 7 = 0 - beta version
; unreal 0.19b will return HL=0x0013, A=0x00
; unreal 0.19b2 will return HL=0x0013, A=0x02
; unreal 1.00 will return HL=0x0100, A=0x80 (hopefully:)
2. set video mode
ld a,'v'
ld ix,mode
call UAPI
; flag CY=1 - mode not found, CY=0 - ok
mode equ 0 ; normal
mode equ 'c'+100h*'2' ; chunky 2x2
mode equ 'c'+100h*'4' ; chunky 4x4
mode equ 'C'+100h*'2' ; chunky 2x2, filtered
mode equ 'C'+100h*'4' ; chunky 4x4, filtered
mode equ 'n'+100h*'f' ; noflic (pseudo-gigascreen)
mode equ 'f'+100h*'c' ; flash-color
mode equ 'x'+100h*'2' ; 512x192
mode equ 'b'+100h*'i' ; bilinear
mode equ 'a'+100h*'c' ; AlCo 384x304
mode equ 't'+100h*'v' ; TV emulation
mode equ 's'+100h*'c' ; scaling (**)
; note: ** - may be removed in next versions
3. set soundchip type
ld xh, chip ; 'a' - AY-3-8910, 'y' - YM2149F, 'd' - digital, '0' - none
ld xl, stereo ; 'b' - ABC, 'c' - ACB, '0' - mono, '?' - custom
ld a,'m'
call UAPI
; flag CY=1 - bad parameter, CY=0 - ok
4. quick save 48/128K snapshot
ld a,'s'
call UAPI
; CY=1 - error, CY=0 - ok
5. quick load 48/128K snapshot
ld a,'l'
call UAPI
; CY=1 - error, probably 'quick save' not called
; CY=0 - impossible (snapshot is running, not this code)
А вот кусок документации Z80Stealth
Код:
╔══════════════════════════════════════════════════════════╗
║ Как вытащить из программы на Спектруме понравившуюся ║
║ мелодию для музыкального сопроцессора при помощи трэпов? ║
╚══════════════════════════════════════════════════════════╝
От вас потребуется знание ассемблера Z80 и умение взламывать программы для
ZX-Spectrum. Прежде всего, в конфигурационном файле впишите PSGTRAP=YES.
Типичная программа, проигрывающая музыку на музыкальном сопроцессоре,
содержит нехитрый "плеер" - кодовый блок, на который возлагается всё
программирование AY-3-8910 или YM2149F.
Сразу же после инициализации плеера "подсуньте" Z80 код
ED F9. Такое "подсовывание" можно произвести, наример, в отладчике
эмулятора. Выполнение в Z80Stealth этого кода при PSGTRAP=YES
приведёт к тому, что эмулятор создаст файл dump.psg и будет
копировать в него все данные, поступающие в регистры AY/YM. Формат
файла (PSG или EPSG) вы можете выбрать в конфигурационном файле.
Обычно в плеере есть код, обеспечивающий "зацикливание" - переход
к началу (или к произвольному месту) мелодии при достижении конца.
Впишите вместо этого кода ED FA - по этой псевдоинструкции
Z80Stealth закроет файл и завершит работу, и вы вернётесь в ДОС.
Файл dump.psg - в вашем распоряжении. Кстати, для быстрой выгрузки
PSG-файла можно воспользоваться опцией MAXSPEED=YES.