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

User Tag List

Страница 4 из 6 ПерваяПервая 123456 ПоследняяПоследняя
Показано с 31 по 40 из 58

Тема: Нужна виртуальная машина на ZX

  1. #31
    Veteran
    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    >адрес возврата, который надо релоцировать
    Ну положи туда виртуальный адрес, делов-то. Только если после вычисления реального прога будет перемещена ещё раз, тут-то мы и приплыли.
    Или вот как, например, сделать простой инкремент переменной? Нельзя же мутексы на каждый чих городить.

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

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

    По умолчанию

    alone, пусть ляжет, оно ему как раз в прок.
    Вспомни как калк бейсика 48 работает: попается адрес возврата, и оттуда начинает интерпретироваться байткод, до всречи на своем загогулистом рета самого калка. Тут тот же механизм будет как раз в пору. Ну и нужно сразу разделить понятия аппаратного стека Z80 от стека байткод интерпретатора.
    Мне вот тут подумалось, что на самом деле можно реализовать практически интерпретатор Си. Просто за счет функций преобразования ссылок и динамического создания копий переменных.
    А еще подумалось, что вот же были башковитые мужики, кто это все придумывал с нуля. И реально копаясь в своей памяти могу только пару своих личных изобретений вспомнить, причем не в компьютерной области, а все остальное либо компиляция информации, либо реверсинжениринг по внешнему виду.

  4. #33
    Veteran
    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от James DiGreze Посмотреть сообщение
    Не обязательно, но возможно.
    Ну если про самомодификацию мы забыли, то неужели каждый раз считать адреса?
    С IX/IY вполне хорошая скорость при минимуме объёма достигается. Или я ещё способы упускаю?
    Цитата Сообщение от James DiGreze Посмотреть сообщение
    Ну не скажи! Банальное printf("Hello, peoples!"), будет в коде Z80 довольно витиевато выглядеть.
    Пример с printf, по-моему, самый неудачный, наверное, из всей стандартной библиотеки =)
    Цитата Сообщение от James DiGreze Посмотреть сообщение
    Про скорость... тут надо определиться с областью применения.
    ...
    Зачем так усложнять? Игры писать что-ли, али демки?
    Ну АлКо хочет, как я понимаю, ВМ и язык под неё общего назначения, и скорость тут будет играть весьма значительную роль.

  5. #34
    Veteran Аватар для GriV
    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Предлагаю следующую систему:
    байт-код:
    0 - печать следующей за ним аскии-Z строки в активное окно
    1 - создание окна, указываются начало X,Y, длина ширина
    2 - выбор активного окна, следующий байт - номер окна
    3 - очистка окна
    4 - ассемблерная вставка
    5 - операция работы с переменными, тут непонятно как что. Предлагайте варианты.

    По п.4 соглашения - запрешён самомодифицируемый код, запрещены сложные стековые операции, все доп. адресации через индексные регистры.
    Какие ещё функции надо?
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  6. #35
    Activist
    Регистрация
    21.08.2009
    Адрес
    Cyprus
    Сообщений
    233
    Спасибо Благодарностей отдано 
    82
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    19 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    Код плотнее Z80 сделать будет трудно, над этим думали создатели и 8080, и Z80.
    Ну так система команд делалась под довольно ограниченное ALU. Сейчас же в байткоде можно предусмотреть, скажем 16-, 32- и т.д. разрядную арифметику, FP, более продвинутые логические, сдвиговые и пр. операции и т.п. За счет одного этого код можно сильно уплотнить.

  7. #36
    Master
    Регистрация
    17.05.2005
    Адрес
    г. Абакан
    Сообщений
    694
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    Ну если про самомодификацию мы забыли, то неужели каждый раз считать адреса?
    С IX/IY вполне хорошая скорость при минимуме объёма достигается. Или я ещё способы упускаю?
    Самомодификацию байткода, я правильно понял?

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    Пример с printf, по-моему, самый неудачный, наверное, из всей стандартной библиотеки =)
    Хорошо, пусть будет uint32_t mul(uint16_t op1, uint16_t op2), или код x=mul(12345, x) , которое к примеру байткодом можно выразить так:
    Код:
    0x22, 0x35 /*copy var #35 and push result to stack */
    0x25, 0x39, 0x30 /* push 12345 to stack */
    0x49 /* mul stack */
    0x32, 0x35 /*copy result from stack to var #35 */
    Цитата Сообщение от NovaStorm Посмотреть сообщение
    Ну АлКо хочет, как я понимаю, ВМ и язык под неё общего назначения, и скорость тут будет играть весьма значительную роль.
    Вот я и пытаюсь понять, чего точно хочет AlCo.

    Цитата Сообщение от GriV
    0 - печать следующей за ним аскии-Z строки в активное окно
    1 - создание окна, указываются начало X,Y, длина ширина
    2 - выбор активного окна, следующий байт - номер окна
    3 - очистка окна
    4 - ассемблерная вставка
    5 - операция работы с переменными, тут непонятно как что. Предлагайте варианты.
    Имхо, слишком высокоуровнево пошел. Для начала простые операции с целочисленными переменными, потом работа с памятью и портами I/O, и уж потом всякие текстовые штучки.

    Цитата Сообщение от mastermind
    Ну так система команд делалась под довольно ограниченное ALU
    Точнее сказать 4битное АЛУ.

  8. #37
    Veteran
    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от James DiGreze Посмотреть сообщение
    Самомодификацию байткода, я правильно понял
    Не, я про машкод. Обращаться к локальным переменным через индексные регистры проще и быстрее всего на Z80, кажется.
    Цитата Сообщение от James DiGreze Посмотреть сообщение
    Хорошо, пусть будет uint32_t mul(uint16_t op1, uint16_t op2), или код x=mul(12345, x) , которое к примеру байткодом можно выразить так:
    Код:
    0x22, 0x35 /*copy var #35 and push result to stack */
    0x25, 0x39, 0x30 /* push 12345 to stack */
    0x49 /* mul stack */
    0x32, 0x35 /*copy result from stack to var #35 */
    Ну это зависит от системы команд, хоть с непосредственной адресацией одной инструкцией со значениями сразу.
    Вот на http://en.wikipedia.org/wiki/Threaded_code дофига вариантов рассмотрено.
    Цитата Сообщение от James DiGreze Посмотреть сообщение
    Имхо, слишком высокоуровнево пошел. Для начала простые операции с целочисленными переменными, потом работа с памятью и портами I/O, и уж потом всякие текстовые штучки.
    Согласен, сначала низкий уровень, а вот IO уже наверное можно и виртуализовать. Но уже на памяти можно на это дело начинать забивать из-за тормозов, по сравнению с машкодом.

  9. #38
    Guru Аватар для bigral
    Регистрация
    12.07.2006
    Адрес
    г. Киев, Украина
    Сообщений
    2,147
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    95
    Поблагодарили
    82 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от James DiGreze Посмотреть сообщение
    Код:
    0x22, 0x35 /*copy var #35 and push result to stack */
    0x25, 0x39, 0x30 /* push 12345 to stack */
    0x49 /* mul stack */
    0x32, 0x35 /*copy result from stack to var #35 */
    Я написал что стек нафиг не нужен как понятие и никто не заметил? Ну зачем он надо?

    Вот к примеру в приведенном куске первая команда какую пользу приносит? Не проще ли заменить команды такого типа на 1 типа:
    1 "выделить из кучи место и инициализировать его массивом байтов: 0x35, 0x39, 0x30" return addr
    2 "умножить первый байт массива по addr на следующее за ним слово и результат вписать на их место"

    Конечно стек прикольный тем что результат операции всегда в известном месте как и параметры для операции и это свойство на 100% используется forth-ом или java или этим: http://homepages.cwi.nl/~steven/pasc...k/10pcode.html

    НО! в нашем случае можно от него отказаться так как команды не будут такими простыми как mov a,b а будут оперировать сразу кусками памяти минимум по несколько байт! кроме того сначала будет ити внушительный кусок который должен будет сначала обьявить что команды делают (тут можно простой язык применить с mapping-ом на z80 asm 1:1)
    Последний раз редактировалось bigral; 11.01.2012 в 21:34.

  10. #39
    Master
    Регистрация
    17.05.2005
    Адрес
    г. Абакан
    Сообщений
    694
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от bigral Посмотреть сообщение
    1 "выделить из кучи место и инициализировать его массивом байтов: 0x35, 0x39, 0x30" return addr
    2 "умножить первый байт массива по addr на следующее за ним слово и результат вписать на их место"
    Те же яйца, в анфас. Выделение памяти есть? Есть. Потом результат откуда брать? Типа ссылка? А потом как понять что данные уже нафиг надо удалить? Опять передавать ссылку и удалять ее из списка. Где выгода?

    alone, своими мыслями поделись! А то мы тут уже скоро на кофейной гуще гадать начнем

  11. #40
    Veteran Аватар для GriV
    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ребята, вы вначале ТЗ составьте (убейте), а потом уже делите способ реализации (медведя). Я тут набор функций предлагаю, никто не поддержал, зато все ринулись в кодерство. Вначале думаем, потом кодим.
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

Страница 4 из 6 ПерваяПервая 123456 ПоследняяПоследняя

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

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

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

Похожие темы

  1. ZXMAK2 - Виртуальная машина ZX Spectrum
    от ZXMAK в разделе Эмуляторы
    Ответов: 1974
    Последнее: 07.03.2024, 23:45
  2. Машина Тьюринга для Z80
    от ZXMAK в разделе Эмуляторы
    Ответов: 4
    Последнее: 15.08.2011, 03:26
  3. Продвинутая Мелко Машина 1
    от Black_Cat в разделе Зарубежные компьютеры
    Ответов: 74
    Последнее: 03.03.2009, 09:05
  4. Что за машина такая??? Commodore 128...
    от ILoveSpeccy в разделе Commodore 16/64/128
    Ответов: 5
    Последнее: 31.10.2007, 10:25
  5. Java-машина
    от Error404 в разделе Программирование
    Ответов: 2
    Последнее: 15.01.2007, 15:11

Ваши права

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