User Tag List

Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 28 из 28

Тема: Как сократить код эмулятора Z80 на PC

  1. #21
    Veteran Аватар для SMT
    Регистрация
    16.01.2005
    Адрес
    Бобруйск
    Сообщений
    1,267
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    надо много еще сделать: перелопатить компилятор форт-подобного П-языка
    а из какого формата планируется компилировать и в какой?

  2. #22
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SMT
    6 команд, неплохо. а что за команды? форт-слова, которые выполняются непосредственно, без ссылки на определение слова? можешь дать список?

    а из какого формата планируется компилировать и в какой?
    --- начало
    0xxx.xxxx - загрузки констант и команды переходов

    000х.хххх - загрузка коротких констант от -16 до +15
    001х.хххх yyyy.yyyy - безусловный переход на -4096..+4095 байт
    010x.xxxx yyyy.yyyy - условный переход (если на вершине 0)
    011х.хххх yyyy.yyyy - условный переход (если не 0)

    1xxx.xxxx - команды вызова подпрограмм

    11хх.xxxx - короткие вызовы первых 64 подпрограмм с номерами 0..63
    10xх.хххх yyyy.yyyy - вызовы до 16384 подпрограмм

    При наличии значительно меньшего общего числа подпрограмм, возможно изменение веса (в сторону увеличения числа подпрограмм, вызываемых 1-байтовой командой), например:
    1000.00xx yyyy.yyyy - вызов 1024 подпрограмм
    1000.0100 = 84..FF = 0..7B = 0..123. Т.е. 124 подпрограммы может быть вызвано в таом случае 1-байтовой командой, но общее число подпрограмм ограничено 1024 штуками.


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

    --- конец

    Дык из (т)екстового формата. Имя процедуры - компилируется в вызов. L(n) в загрузку константы n. И т.д.

    Правка: все уже сделано, надо только до ума довести.

  3. #23
    Veteran Аватар для SMT
    Регистрация
    16.01.2005
    Адрес
    Бобруйск
    Сообщений
    1,267
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    аа. понятно. я думал, ты взялся за оптимизирующий компилятор с ЯВУ

  4. #24
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SMT
    оптимизирующий компилятор с ЯВУ
    нет с ЯВУ пока вручную или генератором кода (у меня в KOL+MCK часть Паскаль кода генерится, - и совсем несложно там же приделать генерацию исходного П-кода). Может когда-нибудь и из Паскаля в исходный П-код компилятор смогу сделать. Пока хотя бы сам.

  5. #25
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Первый этап закончил: эмулятор байт-кода есть, генерация П-кода и компиляция П-кода в байт-код есть. Уменьшил размер экзешника на 100К (сжатый уменьшился на 21К всего. Немного, но и исходного кода, для которого генерится П-код на автомате, тоже не очень-то много). Байт-код получился в 2 раза компактнее такого же машинного. Замедление скорости на глаз неразличимо (тем более что заменяется код инициализации диалогов). Следующим ходом попробую сделать компилятор Паскаль->П-код, и тогда можно будет сжать весь паскаль-код, который не требует высокого быстродействия.

  6. #26
    Veteran Аватар для ZXMAK
    Регистрация
    30.01.2006
    Адрес
    Харьков
    Сообщений
    1,406
    Спасибо Благодарностей отдано 
    2
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    15 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vladimir Kladov
    Первый этап закончил: эмулятор байт-кода есть, генерация П-кода и компиляция П-кода в байт-код есть. Уменьшил размер экзешника на 100К (сжатый уменьшился на 21К всего. Немного, но и исходного кода, для которого генерится П-код на автомате, тоже не очень-то много). Байт-код получился в 2 раза компактнее такого же машинного. Замедление скорости на глаз неразличимо (тем более что заменяется код инициализации диалогов). Следующим ходом попробую сделать компилятор Паскаль->П-код, и тогда можно будет сжать весь паскаль-код, который не требует высокого быстродействия.
    Идея конечно интересная, если я правильно понял ты хочешь сделать JIT компилятор псевдоязыка, на котором описывается логика обработки инструкций Z80, верно?

    правда я уже успел полюбить .net, где подход с JIT компиляцией не так прост и может вылится в еще больший код... впрочем чистый код полного эмулятора Z80, включая и дизассемблер на IL у меня занимает 73 кб (в архиве 13,5 кб), что на мой взгляд не так и много... но я всетаки хочу переписать его в некую форму микрокода, где базовые операции строятся на основе машинных циклов Z80... может чтото и получится...

  7. #27
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    нет, я отказался от этой идеи. Вместо этого я сделал эмулятор байт-кода "вообще". Полезнее для уменьшения размеров не только одной этой программы эмулятора, но и кучи других.

    .net это когда софт уже (почти) есть, а железо, которое его может принять, еще пока дорого. Так что я не тороплюсь. Кроме того, это надо юзеру ставить runtime-библиотеки от .net, а вот надо ли это ему.
    Последнюю версию EmuZWin (2.7) можно получить по этой ссылке, а "официальная" страница с описанием здесь. Если что-то не пашет, берите там же версии 2.6 или старше. [B]

  8. #28
    Master Аватар для Vladimir Kladov
    Регистрация
    09.02.2005
    Адрес
    Новосибирск
    Сообщений
    933
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    17
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    и про JIT: как я понимаю, это совсем не то, потому что мой байт-код эмулируется, а не транслируется перед выполнением. Свой JIT я сделал еще раньше в эмуляторе, и как раз для увеличения скорости, и это как раз встроенный в эмулятор макро-компилятор PC-Asm, который компилирует в память в зависимости от опций, и у меня получается максимально быстрый код для эмуляции Z80 во всех сочетаниях режимов и для вывода графики. И без всяких (почти if-ов внутри, потому что if-ы отрабатываются компилятором. Это несколько как раз увеличило размер, но зато дало поддержать гораздо больше режимов.
    Последнюю версию EmuZWin (2.7) можно получить по этой ссылке, а "официальная" страница с описанием здесь. Если что-то не пашет, берите там же версии 2.6 или старше. [B]

Страница 3 из 3 ПерваяПервая 123

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

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

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

Ваши права

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