Удаление в знак протеста против действий MM
Удаление в знак протеста против действий MM
Последний раз редактировалось MacBuster; 26.01.2019 в 00:38. Причина: Удаление в знак протеста против действий MM
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
macro-11 есть такой язык.
На Си писалось конечно, но в большинстве случаев авторы явно указывали об этом
и почти всегда это были не игры ) (* за редким исключением!)
И что значит "на старом", а на каком Си они по вашему под RT-11 должны были писать,
особенно в те года?
Чаще писали на Фортране (совсем старые проекты), Дековском (РафОС) Бейсике и
связке Паскаль + макровставки.
Ув. доктор - тут по поводу этих игр есть мнение, что на самом деле - там в качестве загрузчика
что вроде MSX эмулятора, а основная часть кода портированных игр практически без изменений
работала - отсюда и плавность картинки и прочие радости, но вот сам геймплей рыцаря немного
отличается от MSX , однако это не значит, что писали с нуля. Порт есть порт. Вспомни какая плавная
анимация у Арканоида?
SPION.SAV - не оптимально написан? (Первый игровой проект от Высотина П. "проба пера"!),
кстати говоря эксклюзив - такой шпион только на УК-НЦ (если ошибаюсь поправляйте).
Ай да про игрушки трепаться в тему "Обсуждаем игрушки!" товарищи ) Это будет правильней )
(да увлеклись всё же!!! последняя ссылка и пост по теме уполз за горизонт
http://zx-pk.ru/threads/27621-hwyenc...l=1#post946442)
Удаление в знак протеста против действий MM
Последний раз редактировалось MacBuster; 26.01.2019 в 00:39. Причина: Удаление в знак протеста против действий MM
При портировании с Z80 несколько проблем:
1) неоптимальный доступ к памяти, потому что на исходном процессоре адресация в основном байтовая или словная невыровненному адресу. Особенно это печально при байтовой записи в память: разработчики процессора ВМ2 решили не делать цикл DATAOB и MOVB вместо одного цикла доступа к шине делает два (DATAI - modify byte - DATAO). Накладные расходы при загрузке байта в регистр (знаковое расширение, что решается, например, комбинацией CLR Rn/BISB src, Rn). Тут же чтение/запись слова по невырвненному адресу (MOVB ea -> SWAB -> MOVB ea+1): особенно печальна запись -- из-за отсутствия DATAOB на шине будет четыре цикла вместо двух + плюс фетчинг и декодинг трёх-четырёх команд вместо одной.
2) косвенная адресация при обращении к видеобуферу и такие же проблемы с байтовой адресацией.
3) команды блочного копирования LDIR сотоварищи
Z80 реально фетчит и декодирует каждый раз (пока BC != 0) LDIR и затем выполняет два шинных цикла, то есть LDIR выглядит для исполнительно устройства как (READ BUS <fetch LDIR>, <decode/exec LDIR>, READ BUS, WRITE BUS) x N.
если заменять это просто на
то это будет неоптимально и с точки зрения доступа к памяти (отстутствие цикла DATAOB) и с точки зрения выполнения: каждый раз выполняется ещё и SOB, который по времени составляет приблизительно треть от MOVB. Тут поможет аккуратный loop unrolling и, если заведомо известно выравнивание адресов или возможность его изменить, замена MOVB на MOV.Код:MOVB (Rs)+, (Rd)+ SOB Rc, . - 2
Например, тупое
Даст прирост процентов на 20 (в зависимости от ситуации). Если ещё на x2 unroll'ить, то ещё 10-15% можно отыграть, x8 unroll даст почти 1.5 раза прироста по сравнению с x1. А если есть возможность заменить на MOV (Rs)+, (Rd)+ то почти в два раза сразу.Код:; Rc = Rc / 2 1$: MOVB (Rs)+, (Rd)+ MOVB (Rs)+, (Rd)+ SOB Rc, 1$
Никита проделал офигительный объём работы, стоит ему отлить памятник только потому, что оно вообще работает. Дело то за малым: берём исходники и модифицируем код, чтобы логика осталась прежней, а код был оптимален с точки зрения целевого процессора. =)
Нельзя не привязываться к архитектуре, если речь идет о конкретно эмуляции Z80 на PDP11.
И она будет как минимум в 5-10 раз медленнее, чем реальный Z80.
Если же делать рекомпиляцию, причем грамотную, то там можно добиться где-то 1/2 скорости Z80.
Ну а потом если пройтись по этому ручками, то для некоторых игр можно и получить скорость аналогичную Z80.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)