О распространённом баге эмуляции команды PUSH процессора Z80

Разбираясь с артефактом скроллинга мультиколорных картинок в деме EyeAche2 (правый столбец на экране слегка подглючивает — полоски подмигивают, скроллинг в нем слегка рваный), перешерстив в связи с этим все тайминги Пентагона и узнав о нём много нового, а также попутно исследовав тайминги переключения экранов на фирменных машинах, наткнулся на любопытный баг кода эмуляции Z80, конкретно команды PUSH. Ну, баг и баг, но дело в том, что этот же баг присутствует ещё в куче эмуляторов: в Unreal, Zemu, SpecEmu, Zero, Fuse, fMSX. Возможно, ещё где-то. Так что думаю, что нижеизложенная информация может быть интересна и полезна для всего сообщества:

А баг — в неправильной логике эмуляции команды PUSH. Все эти эмули (включая мой, до вчерашнего дня) действуют в «оптимизаторской» логике её выполнения:
dec sp
ld (sp),h
dec sp
ld (sp),l

А надо — как в документации:
dec sp
dec sp
ld (sp),l
ld (sp+1),h

Из-за того, какая часть засылаемой в стек регистровой пары кладется в память первой, и происходит накладка в EyeAche 2. Там идет такой код:
LD SP, #5820; //начало следующей строки атрибутов
LD HL,#3F00
PUSH HL; //запись в конец предыдущей строки атрибутов

и далее несколько раз похожий. Но проблема в том, что код этот происходит как раз во время, когда заканчивается вывод текущей строки экрана (последнее знакоместо). И если логика выполнения PUSH правильная, то сначала в память пишется младший байт HL — в знакоместо, байт которого уже выведен на экран, а потом — старший, и на этот момент видеоконтроллер уже выводит последний байт строки. Т.е. новая инфа в атрибутах не повлияет на вывод текущей строки (она и не должна).

А если логика PUSH «оптимизаторская», то сначала в память пишется старший байт, и иногда (но не всегда), в зависимости от того, на каком такте цикла команды HALT закончился предыдущий кадр, эмулятор видеоконтроллера успевает считать этот только что записанный в память байт атрибута, хотя по логике авторов кода, не должен. Соответственно, в крайнем знакоместе текущей строки выводится полоска с атрибутом, который должен выводиться только в конце следующей строки. Из-за этого в эмуляторах на экране во время мультиколор-скроллинга некоторые полоски в крайнем справа ряду мигают, либо скроллинг в нем слегка неровный. (Этот глюк попал даже в видео демы на ютюбе.)

Вот такая вот история. Пользуясь случаем, выражаю благодарность форумчанам JV-Soft, Portos13, PheeL с форума zx-pk.ru, а также Ast-A-Moore и The Mighty Dopethrone с форума сайта WorldOfSpectrum, которые снимали по моей просьбе видео работы тестов и демок со своих реалов, для исследования таймингов и артефактов Пентагона и фирменных машин. (Для фирменных машин выяснилось, что ни один эмуль на сегодня не эмулирует полностью правильно логику работу видеоконтроллера и тайминги переключения экранов, плюс есть как минимум две схемы работы видеоконтроллера у черных амстрадовских моделей, но это уже другая история).

Результаты Конкурса Best Basic Game 2017!

Всем привет! Подошло к концу голосование и я рад сообщить имена нащих победителей! Первое место и приз в 4000 рублей получает автор Михаил Жучков с игрой Sokoban. Второе место и приз в 3000 рублей получает автор Сергио с игрой Micey. И третье место и приз в 2000 рублей получает автор Тимофей Минятов с игрой Pohishenie. Поздравляем авторов с победой!

HYPERADIO RC

УБИТЬ ВСЕХ ЧЕЛОВЕКОВ! ВСЯ ВЛАСТЬ РОБОТАМ!


kill all humans all power to the robots

Еще не прошел год до моего ежегодного отчёта по hyperadio, но уже очень близко к времени X, а так-как есть новости по проекту, то зачем ждать?

Читать дальше →

я все таки ее доделал!

Всем привет ребята! сегодня я все таки доделал эту чертову стратегию на которую потратил уйму времени и сил! :-) выложил на конкурсе. кто желает может скачать и взглянуть на это произведение… пока только первая часть без игры с компьютером. но вторая часть будет! я ее обязательно доделаю. все кто не поленится скачать и поиграть просьба отписаться а впечатлениях здесь же. вот ссылка для скачивания: my-files.ru/5iz7vc

Отзывы и критика

На тему проблем фидбека, конструктивной критики и элементарной вежливости, свойственных определённым странам и коммьюнити.

На днях вышел свежий обзор видеоблоггера ретрокомпьютерной тематики, с полумилионной аудиторией, на три свежие коммерческие (продающиеся за $ на картриджах) приставочные игры от энтузиастов. Обзорщик получил их бесплатно и ему они не слишком понравилось, о чём он честно сказал, но главная мысль его видео — выход нового софта помогает поддерживать жизнь в старых платформах, а покупка нового софта помогает поддерживать этот процесс.

Читать дальше →

Знаешь, ты мне не нравишься.

Дело в том, что ты напыщенный мудак.

Ты знаешь лучше — как должно быть.
Ты знаешь лучше всех — как должно быть написано/нарисовано/должно звучать, как правильно писать код/рисовать, где что не верно / старо / не в стиле / не та платформа, и какое место на компо должно быть у прода…
И при этом ты знаешь даже — кто в этом виноват.

Читать дальше →

Twinlight

Привет!

После нескольких лет проведённых в попытках сделать игру на основе идей Deflektor'a мне наконец-то удалось довести дело до конца.

Итак встречайте нашу новую игру Twinlight


Скачать можно тут

Поиграть онлайн можно тут же

Как и в оригинале вам необходимо на каждом уровне уничтожить все вражеские коконы и провести лазер к ресиверу.
Механизм отражений сильно упрощён, зато есть несколько новых фишек и графика в суровом режиме толстых пикселей с цветом на точку :)

Уже традиционное в этом году огромное спасибо n1k-o за помощь с музыкой, а также wbr за бетатесты, советы и мотивацию! Ну и всем всем всем кто помогал и чьи наработки я использовал. А это как минимум kowalski и wbcbz7 с которыми мы калечили плеер от psndcj в варианте от introspec и приделывали к нему плеер эффектов от Shiru основываясь на том что делал drbars в диззях :) Отдельное спасибо fyrex и lvd за MegaLZ (так называемый, «морально устаревший пакер» :) )

Удачи!

Старт Конкурса Best Basic Game!

Всем доброго дня суток! :-) 1 ноября на events.retroscene.org/ состоится открытие конкурса на лучшую игру на бейсике 2017! Будут выложены все работы авторов принявших участие в конкурсе. Заходите! Скачивайте! Играйте! Голосуйте за лучшие игры! Призовой фонд в 9000 рублей будет разделен между авторами чьи игры заняли соответственно первое, второе и третье место! Ссылка на голосование и скачиваеие игр здесь! events.retroscene.org/bbg2017/main_compo Голосование продлится до 12 числа

конкурс лучшая игра на бейсике

Всем доброго времени суток! наш конкурс практически подошел к концу! работы собраны и как я понял больше других работ ожидать не стоит. скажу сразу что от конкурса я ожидал большего энтуазизма от людей. всего было прислано 4 работы. моя будет пятой по счету но она еще не готова. мне понадобится еще недели 2 чтобы ее завершить поэтому я с извинениями вынужден продлить конкурс еще на 2 а возможно и на 3 недели. работа на которую я замахнулся получилась слишком большой и сложной и я не рассчитал своих сил. поэтому я еще раз приношу свои извинения перед всеми кто принял участие в конкурсе и всеми остальными кто так или иначе помогал мне в его организации. сразу говорю что конкурс состоится просто придется еще немного подождать! но меня немного огорчает что так мало народу приняло участие… ребята у вас еще есть время! неужели больше никто не хочет тряхнуть стариной и сдуть пыль со своего старенького zx spectrum???? посмотрите как за рубежом люди отнеслись к своему конкурсу по бейсик играм. сколько там было работ и сколько участников. а мы что? хуже? я закончу свой проект за 2 максимум за 3 недели. и у меня большая просьба к людям здесь- не поленитесь, напишите свою игру! 6000 рублей лежат у меня в кошельке и только ждут победителя! я очень надеюсь что вы меня услышите.