Важная информация

User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 30

Тема: Интерфейс эмулятора в коде Z80

  1. #1
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,566
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    395
    Спасибо Благодарностей получено 
    1,204
    Поблагодарили
    392 сообщений
    Mentioned
    48 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb Интерфейс эмулятора в коде Z80

    Когда я писал эмулятор Спектрума для платформы PalmOS, то столкнулся с проблемой создания интерфейса эмулятора, которую я в итоге так и не решил. А между тем в процессе написания одним из вариантов был написать интерфейс эмулятора, который бы работал в самом эмуляторе, то есть по сути являлся бы программой для Спектрума. Но в итоге я так и не реализовал этот варинат.

    А ведь было бы довольно заманчиво иметь некий универсальный (дополнительный или основной) интерфейс для любого эмулятора, который бы поддерживал некий API такого интерфейса.

    Можно было бы совместными усилиями написать такой интерфейс и стандартизировать API.

    Кто что думает?
    С уважением, Станислав.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Master Аватар для boo_boo
    Регистрация
    10.05.2005
    Адрес
    Москва
    Сообщений
    715
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    имеется в виду интерфейс доступа к фичам эмулятора из Z80-кода? типа вкл/выкл режима максимальной скорости и тп?

  4. #3
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,254
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    34 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В US была такая фича. Через неиспользуемые команды с префиксами. Даже дебаггер показывал. Где-то уже была такая тема вроде...

  5. #4
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,566
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    395
    Спасибо Благодарностей получено 
    1,204
    Поблагодарили
    392 сообщений
    Mentioned
    48 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от boo_boo Посмотреть сообщение
    имеется в виду интерфейс доступа к фичам эмулятора из Z80-кода? типа вкл/выкл режима максимальной скорости и тп?
    Ага, именно. Регулировка звука, загрузка снепштотов, смена модели, настройка джойстика и т.д. и т.п.

    Цитата Сообщение от Vitamin Посмотреть сообщение
    В US была такая фича. Через неиспользуемые команды с префиксами. Даже дебаггер показывал. Где-то уже была такая тема вроде...
    Хм... Честно говоря не видел. Иначе не пропустил бы...
    С уважением, Станислав.

  6. #5
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,847
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    229
    Поблагодарили
    167 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Обычно используют заведомо свободный порт, и при чтении (или записи в него) выполняют определённые действия, например, взять из памяти блок параметров по адресу из определённого регистра, в зависимости от параметров выполнить определённую команду, поместить в тот-же блок памяти результат выполнения. Другое дело, если реализация процессора универсальная, то нельзя знать заранее, какой порт использовать. Однако, номер порта можно задавать при инициализации процессора.

  7. #6
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,254
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    34 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Хм... Честно говоря не видел. Иначе не пропустил бы...
    http://zx.pk.ru/showthread.php?t=2657

  8. #7
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,566
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    395
    Спасибо Благодарностей получено 
    1,204
    Поблагодарили
    392 сообщений
    Mentioned
    48 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А... Это я видел. Но это не совсем то Я имел ввиду полноценный интерфейс типа как в эмуляторе X128.
    С уважением, Станислав.

  9. #8
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,254
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    34 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от CityAceE Посмотреть сообщение
    Я имел ввиду полноценный интерфейс типа как в эмуляторе X128
    А там как?

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

  10. #9
    Master
    Регистрация
    17.01.2005
    Адрес
    Старый Оскол
    Сообщений
    537
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    4 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 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.

  11. #10
    Member
    Регистрация
    24.08.2007
    Адрес
    Минск
    Сообщений
    88
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Очень интересная идея, когда то посещавшая и меня. Вот мои соображения на счёт стандартизации:

    1. Использовать какую-нибудь свободную префиксную инструкцию (EDxx) - ОДНУ!

    2. После этой инструкции ввести идентификатор, например EmuControl (10 байт).
    Это во избежание случайных выполнений EDxx.

    3. Далее будет стоять код команды, которая будет определять действие - загрузка/выгрузка файлов, всевозможные переключения моделей/режимов эмуляции и т.д. В зависимости от типа команды, за ней могут следовать дополнительные значения для возможности задания дополнительных параметров. Они могут быть как числовые (порядковый номер модели), так и текстовые (имена файлов). В общем - огромный полигон для фантазии.

    4. Стандартизировать коды команд для дефолтного определения эмулятором их размера.

    5. По завершении выполнения команды - возврат на адрес следующий ПОСЛЕ НЕЁ (не после EDxx!). Исключение - команда выхода из эмулятора например.
    Последний раз редактировалось DZh; 12.09.2008 в 20:12.

Страница 1 из 3 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Работа с НМЛ из эмулятора
    от Error404 в разделе Эмуляторы
    Ответов: 6
    Последнее: 28.11.2007, 23:29
  2. Интерфейс MIDI для ZX
    от newart в разделе Звук
    Ответов: 27
    Последнее: 30.10.2007, 17:06
  3. Plug-in для AY-эмулятора
    от tmp_online в разделе Разный софт
    Ответов: 0
    Последнее: 19.03.2007, 23:03
  4. Ответов: 24
    Последнее: 28.02.2007, 20:34
  5. Как сократить код эмулятора Z80 на PC
    от Vladimir Kladov в разделе Эмуляторы
    Ответов: 27
    Последнее: 01.02.2006, 21:18

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •