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

User Tag List

Показано с 1 по 1 из 1

Тема: Эмулятор ZX Spectrum для MP4 плейра Explay-M3

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

    По умолчанию Эмулятор ZX Spectrum для MP4 плейра Explay-M3

    Думаю, что это окажется кому-то интересным!

    Вот здесь у себя на сайте человек выложил эмулятор ZX Spectrum для старого MP4-плейера. Как я понял, предварительно он провёл реверс этой модели и научился писать для неё софт, полностью разарботав для себя инструментарий.

    В этой статье он описал общий подход к написанию программ для подобных устройств.

    Это ссылка на архив, где среди прочего лежит и сам эмулятор.

    Разработчик также завёл тему на 4pda по поводу этого плейера, которую уже закрыли.

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

    Ну и в заключении привожу текст из недр архива:

    ---увеличитель(экр.лупа)----
    т.к экран мелкий, есть возможность назначить на любую кнопку
    (по умолчанию Vol) Zoom 100-400% и положение окна. и этой
    кнопкой делать перкл. во весь экран или крупно часть экрана,
    например в шахматах - доску крупно, а в нетроботе игровое окно.

    ---одновременное нажатие кнопок----
    в некоторых играх надо нажимать стрелки влево+вверх итп.
    в плеере две независимые группы кнопок - джойстик(стрелки и ентер)
    и vol/esc/mode. Если на vol=up esc=dn то можно нажимать одновременно.
    кнопку Mode использовать не желательно, она глючит со стрелками,
    но Mode+Vol Mode+Esc Mode+Enter Vol+Esc - нажимать можно и будут
    нажиматься соотв. клавиши ZX(Назначаются через настройки)

    --Как назначить на кнопку клавишу ZX --
    Mode-Экр.клава, поставить курсор на нужную клавишу, нажать снова Mode
    в меню выбрать кнопку, потом в другом меню выбрать добавлять к кнопке +cs +ss
    или назначить на эту кнопку Zoom или вызов экр. клавиатуры.
    Настройки можно сохранить через меню. Имя файла такое же как *.z80 +.key

    ----прошивка 48к------
    128к пока не поддерживается-не знаю схемы переключения ОЗУ
    и где там видеопамять - как узнаю - сделаю может быть..
    Командная строка бейсика работает, можно писать програмки
    и запускать. Через экр. клавиатуру можно ввести любую клавишу
    или комбинацию клавиш (Vol= +cs) (Esc= +ss).
    полная расшифровка клавиш (команды бейсика) ниже по тексту.

    ---TRDOS-----
    была идея сделать эмуляцию чтения сектора(адрес 3D13) функция 5
    но там ещё какая то фун-я 19 есть, а описания что это у меня нет.
    и как грузить бейсиковские проги я уже не помню, хотя можно
    покопать архивы и сделать, вроде игры с дозагрузкой с диска есть,
    но кто будет играть в долгие игры на мелком плеере? сомнительно.
    можно играть в небольшие игры и под фоновые мп3 по дороге на работу
    в автобусе или в очереди чтобы время убить.

    ------звук------
    Была вначале идея считать такты и следить за выводом в порт динамика,
    делать WAV и проигрывать. НО оказалось что эмулятор еле успевает
    реальную скорость синклера эмулировать из-за прорисовки экрана.
    Я то думал 40МГц против 3,5МГц и однотактных инструкций можно
    програмить как удобно и ещё придётся задержки вставлять, но
    первый эмулятор работал медленнее раз в пять чем надо,
    пришлось оптимизировать алгоритм, табличный GOTO, прямую запись в
    видеопамять (была через вирт. экран) и скорость теперь почти такая же,
    если графика не интенсивно используется, то даже чуть быстрее.
    Потом если накапливать а потом играть звук то будет задержка и
    звук там был примитивный "1" или "0" одного уровня громкости, никакого
    ЦАП, хотя некоторые короткие звуки типа свиста, щелчка или тона можно
    было имитировать. Так что теперь звук можно сделать ещё так:
    На системный бипер в пзу 48к (адрес 03B5) поставить жучок который будет
    считать частоту F= 437500/(HL+30.125) и длительность T=DE/F
    потом делать WAV и играть его. (Но я пока не знаю формата WAV)
    А на звуки в игре вместо вызова 3 байта заменить на LD A,N RST 0
    тогда в перехватчике на RST 0 (нигде не используется) можно по значению
    в регистре А по таблице проиграть нужный WAV - его предварительно можно
    сделать на компе - записать из REALSPEC. Вызовы звуков искать там же,
    индикатор - запись в порт, запоминать адреса и редактировать *.z80
    То есть если очень хочется звуковых эффектов то сделать это можно.
    но придется маленько игрули хакнуть. Перехвачик можно и на call повесить
    но это будет тормозить другие вызовы, ld a,N rst0 это тоже 3 байта и 256
    вариантов звуков.

    ---------графика------------
    эмуляция экрана самое времязатратное дело
    при выполнении инструкции, если была запись в памятьZX то
    она отмечается + длина изменения, если была запись в видеопамять,
    то перерисовываеся блок 8х1 если область точек 4000-5800, или блок 8х8
    если область атрибутов 5800-5B00. Байты кэшируются в кеш-экран и если
    в видеопамяти уже такой же байт, то ничего не рисуется.
    Используется прямая запись в видеопамять плеера raw -для пары 16-ти
    цветных точек по таблице 256*4. Поэтому отступ слева должен быть с шагом 8.
    иначе цвета поплывут. Отступ сверху желательно с шагом 2. Сейчас 32 и 24
    для экрана плеера 320х240 экран ZX 256х192 - по центру с бордюром.
    Цвет бордюра можно менять, да кому он нужен. Лучше пусть 125% zoom,
    крупнее сам экран итак мелко. zoom - аппаратный время не тратит.

    Эффект на бордюре можно сделать если рисовать линию сверху а в 1/50 сек
    делать скрол бордюра вниз, тогда будут полоски идти при записи на ленту.
    Но это уже давно никому не нужно. Разные эффекты я делал сам при вводе
    в проге загрузчике, еще в паре игр видел типа облака на небе и всё.
    Но лучше экран крупнее чем эти редкие эффекты смотреть.

    в игруле монти дефект 125% зума - справа мусор от левого края, лучше 120%

    ----------клавиатура-------------
    кнопки и клавиши в играх из этого архива:
    batty A-lf K-rt
    chess 5-lf 6-dn 7-up 8-rt
    durak QP AL space enter
    monti XC OL
    net QA OP cs-up
    void QA OP
    для других игр надо настраивать отдельно.

    две/три кнопки сразу нажимать можно
    кроме mode+right -там из порта случайный мусор идет.
    и в монти вверх -назначить на vol + вниз на esc
    тогда можно по диагонали тоже ходить если их удерживать и жать
    на стрелки джойтика влево/вправо

    48к прошивка от 1982г (но есть ещё от 90 и 92)
    можно набирать в плеере проги на бейсике и запускать
    (но без сохранения) так же команды типа PRINT 234*345+566*233
    работают и считают. синусы и прочее тоже есть. можно графики рисовать.
    я когда-то много чего написал для синклера, особенно на асемблере.
    эмулятор бипера может еще сделаю. звук через порт не успеет по времени.
    итак скорость почти как у реального, а при интенсивном использовании
    графики даже медленнее.. через rst0 лучше сделать перехват и звуки заменить
    на другие можно-покачественее-там то громкость была одного уровня.

    -----почему формат *.z80-----
    Долго думал а надо ли делать поддержку тр-дос?
    чтение сектора можно перенаправить на чтение из файла.
    потом решил что слишком неудобно грузить проги с тр-диска
    надо сделать LIST потом набрать RUN "имя" - c клавой без
    расшифровки всех 5ти значений это гиморой на ровном месте.
    есть конечно загрузчики, но вот мой какую-то 19ю функцию юзает,
    я описания не нашел, а что это - я уже давно забыл..
    это надо смотреть листинги и исходники, вспоминать че к чему.
    так что *.z80-формат (правда какието конченые наркоманы этот
    формат придумали-регистры сохранены в пьяном порядке, сжатие тупое,
    какие то дурные сдвиги памяти на 3 байта (я еле нашел эту гадость)
    Но вот распространеный он стал и все приличные эмули его делают!
    В realspec надо выбрать 48к модель через F3 потом загрузить из
    любого формата и по alt-F5 -сделать имя.z80 файл и с таким же именем
    имя лучше делать с большими и маленькими буквами Name.ext, а то некоторые
    "умные" проги зачем то переводят name.ext в 8.3 dos ->NAME.EXT а
    потом другие пишут что файл не найден(на сервере ucoz похоже так же)

    имя.key - 8+16 байт -таблица отображения кнопок на клавиатуру+настройки.
    01234567 ентер/вверх/вниз/влево/вправо/vol/esc/mode
    0-39 номер клавиши по порядку/ +64 cs /+128 ss /255-экранная клава
    ------------------------------------------------------------------
    Экранная клава 10х4
    mode-меню настроек
    ентер-ввод
    esc(cнизу) +ss
    vol(cверху) +сs
    -----------------------

    ------------------------------
    +CS +SS E/E+cs E+ss
    ------------------------------
    1 <BackSpace> ! c1 DEF FN
    2 <CapsLock> @ c2 FN
    3 # c3 LINE
    4 $ c4 OPEN#
    5 % c5 CLOSE#
    6 & c6 MOVE
    7 ` c7 ERASE
    8 ( POINT
    9 <G> ) CAT
    0 _ c0 FORMAT
    ------------------------------
    +CS +SS K E E+
    ------------------------------

    Q q <= PLOT SIN ASN
    W w <> DRAW COS ASC
    E e >= REM TAN ATN
    R r < RUN INT VERIFY
    T t > RAND RND MERGE
    Y y AND RETN STR$ [
    U u OR IF CHR$ ]
    I i AT INPUT CODE IN
    O o ; POKE PEEK OUT
    P p " PRINT TAB (C)
    ------------------------------
    +CS +SS K E E+
    ------------------------------

    A a STOP NEW READ ~
    S s NOT SAVE RESTORE |
    D d STEP DIM DATA \
    F f TO FOR SGN {
    G g THEN GOTO ABS }
    H h <Up> GOSUB SQR CIRCLE
    J j - LOAD VAL VAL$
    K k + LIST LEN SCREEN$
    L l = LET USR ATTR
    <ENTER>
    ------------------------------
    +CS +SS K E E+
    ------------------------------

    <cs>
    Z z : COPY LN BEEP
    X x l CLEAR EXP INK
    C c ? CONTIN LPRINT PAPER
    V v / CLS LLIST FLASH
    B b * BORDER BIN BRIGHT
    N n , NEXT INKEY$ OVER
    M m . PAUSE PI INVERSE
    <ss>
    SPACE/BREAK


    --------как сделана технически эмуляция клавиатуры-----

    10111111 & 00001 =enter 8х5 1-маска 0-номер пятёрочки 0-7
    11111110 & 00001 =cs
    01111111 & 00010 =ss
    00000000 не 0 любая нажата

    0 9
    (3)12345 67890(4) таблица 10х4 это 8 пятёрочек
    (2)qwert yuiop(5)
    (1)asdfg hjkl#(6) #=Enter
    (0)@zxcv bnm$_(7) @=CapS $=SS _=Space/Break
    --------------
    01234 43210
    39 +64 +128 (kod 254-нет/255-по умолчанию)

    IN(FE),A-маска 8 бит
    в таблице40 0-ненажата 1-нажата
    накопитель=0
    цикл по битам маски 1-пропуск 0-проверить эту пятерочку
    0-бит 30-34 байты "1" это бит 1 в накопитель ИЛИ
    1-бит 20-24 байты "1" это бит 1 в накопитель ИЛИ
    2-бит 10-14 байты "1" это бит 1 в накопитель ИЛИ
    3-бит 00-04 байты "1" это бит 1 в накопитель ИЛИ

    4-бит 09-05 байты "1" это бит 1 в накопитель ИЛИ
    5-бит 19-15 байты "1" это бит 1 в накопитель ИЛИ
    6-бит 29-25 байты "1" это бит 1 в накопитель ИЛИ
    7-бит 39-35 байты "1" это бит 1 в накопитель ИЛИ
    на выходе 8 ИЛИ

    выход 0-31
    -----------------------------
    алгоритм на входе маска 8 бит , на выходе значение 5 бит
    -----------------------
    считать значение кнопки 0-7
    по таблице переназначения нажать на клавеZX 40
    (очистить 00-40шт)
    если + 128 нажать еще cs (-128) больше 64 нажать еще ss (-64)
    cs+cs = нажата только cs
    поднять 1 по номеру.
    если уже отпустили то там 0 будет.
    Последний раз редактировалось CityAceE; 07.12.2023 в 16:13.
    С уважением, Станислав.

  2. Эти 3 пользователя(ей) поблагодарили CityAceE за это полезное сообщение:

    Eltaron (08.12.2023), Oleg N. Cher (08.12.2023), parallelno (07.12.2023)

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

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

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

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

Похожие темы

  1. ZXDS - эмулятор ZX Spectrum для Nintendo DS
    от sv в разделе Эмуляторы
    Ответов: 45
    Последнее: 23.04.2022, 09:46
  2. Эмулятор магнитофона для ZX-Spectrum
    от Vinnny в разделе Внешние накопители
    Ответов: 9
    Последнее: 02.10.2020, 16:46
  3. Ответов: 5
    Последнее: 15.04.2014, 22:29
  4. Точный эмулятор ZX Spectrum 48 для V6Z80P+
    от Valen в разделе Зарубежные компьютеры
    Ответов: 6
    Последнее: 07.03.2013, 17:51

Ваши права

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