Просмотр полной версии : ZX Spectrum: аппаратная реализация на восьми микросхемах
Lisitsin
06.09.2010, 19:59
Всем привет. Разрабатываю ZX Spectrum на микроконтроллерах ATMEL (ATMega128 - 2 шт, ATtiny2313 - 1 шт.) Всего в схеме 8 микросхем: центральный процессор(ATMega128), видео процессор(ATMega128), контроллер клавиатуры (ATtiny2313)(планируется применение стандартной клавиатуры PC/2), стабилизатор питания (MC78M05CDT), порт ввода-вывода (SN74S04), формирователь цветного изображения (SN74S257), ОЗУ (IS62C1024) с защёлкой адреса (74AC373). Проект:
http://dl.dropbox.com/u/12408899/Spectrum%207%20chip%20project.zip - сам проект
http://dl.dropbox.com/u/12408899/AVR%20Spectrum%20photo.zip - фото девайса
Ссылки обновлены 31.05.2011
Спасибо.
А зачем, Василий Николаевич, шило на мыло менять? В смысле Атмегу на Z80? Вы наверное фанат Атмег, если планируете аж 3 процессора применить? Не жирно будет? Сколько приблизительно будет стоить по комплектухе Ваш девайс?
Лисицын Василий Николаеви, интересно бы посмотреть на результаты, фото устройства. Можно затем на атмеге реализовать дисковый интерфейс.
Lisitsin
06.09.2010, 21:51
По себестоимости под 1000 рублей. Я не фанат ATMeg, но для тех, кто не в курсе, в реальном ZX Spectrumе как раз и есть три процессора: центральный Z80, процессор видеоизображения (тот, что читает из ОЗУ и формирует видеопоток) и процессор ввода-вывода, работающий с клавиатурой и портом 254. Будут дополнительные аппаратные возможности: внешние потры ввода-вывода, доступ ко всем внутренним регистрам ATMegи и многое другое.
---------- Post added at 21:51 ---------- Previous post was at 21:50 ----------
А шило надо менять на более качественное и современное.
А каким образом Вы будете эмуллировать процессор Z80?
Забавный девайс получится. Из разряда "мы легких путей не ищем" :)
Lisitsin
06.09.2010, 22:11
А у меня производительности в 24 раза выше. ATMega спокойно работает на 21 MHz. Уже 80 % команд я, в общем-то, сэмулировал.
ATMega спокойно работает на 21 MHz.
Да. Ей хватает скорости на эмуляцию 3.5Мгц Z80?
Lisitsin
06.09.2010, 22:13
Кому нужно - сброшу проектную схему. Из неё реально видно какой путь легче. В сравнении со стандартной схемой ZX (48) раза в 4 проще.
В сравнении со стандартной схемой ZX (48) раза в 4 проще.
В сравнении со схемой на ПЛИС ваш вариант громоздок :)
Не обижайтесь, у вас очень необычный проект, даже невороятный. Мне действительно интересна ваша задумка. С удовольствием буду следить за развитием и помогу советом.
---------- Post added at 22:16 ---------- Previous post was at 22:16 ----------
ewgeny7(gaf)speccy.su
А не проще всю схему запихнуть в плисину?
А не проще всю схему запихнуть в плисину?
Это уже было десять раз. Даже я делал Скорпиона :) На МК еще никто не делал.
у меня только один вопрос: никаких мультиколоров и чего-то подобного, рассчитанного по тактам, не получится?
Я, честно говоря, очень сомневаюсь в возможности эмуляции процессора на такой низкой частоте МК. Про мультиколоры пока не и спрашивайте :)
doorsfan
06.09.2010, 22:26
Пв реальном ZX Spectrumе как раз и есть три процессора: центральный Z80, процессор видеоизображения (тот, что читает из ОЗУ и формирует видеопоток) и процессор ввода-вывода, работающий с клавиатурой и портом 254. Будут дополнительные аппаратные возможности: внешние потры ввода-вывода, доступ ко всем внутренним регистрам ATMegи и многое другое.
На самом деле, процессор таки один, а почти вся остальная рассыпуха, подобная схемам львова/москвы/харькова - запихнута в 1 кристалл.
Подозреваю, Ваш спектрум можно реализовать на меньшем количестве микросхем:
Женя7 прав, можно сделать на меньшем кол-ве корпусов:
1. Циклон: z80+видеоконтроллер+дешифра ор портов в/в
2. микросхема памяти
3. буфер на 74ls для RGB, бипер, мафон_выход
4. буфер на 74ls для клавиатуры
5. компаратор на 74ls для мафона_входа.
Но проект действительно забавный ;)
Lisitsin
06.09.2010, 22:46
Производительности хватает. Тактовая в 7 раз больше + гарвардская архитектура - 1 такт - одна команда.
Производительности хватает. Тактовая в 7 раз больше + гарвардская архитектура - 1 такт - одна команда.
Знаете народ, у меня такое ощущение что тут развод полный. Нас похоже кормят троллингом. Сейчас его такое же сообщение(первый пост) удалил из темы про букашки.
Уважаемый, если вы так утверждаете что у вас так круто все. Почему не выложите схему для ознакомления в общий доступ. Ведь насколько всем известно без программы микроконтроллер ничто. Или это секрет. :v2_biggr:
Lisitsin
06.09.2010, 23:03
С ПЛИСами, к сожалению, не знаком. Но на ПЛИСАх проект будет внутренне ещё более громоздкий: там надо проектировать всю внутреннюю архитектуру Z80. Стоимость возрастает: ПЛИС - дорогое удовольствие. Насчёт производительности: не забывайте, что видеопроцессор у меня отдельный, а центраьный занимается чисто эмуляцией. К примеру: цикл чтения кода операции у меня занимает 17 (семнадцать) ходов тактового генератора (21 (двадцать один) МГц).
---------- Post added at 23:03 ---------- Previous post was at 22:58 ----------
Прошу прощения, если чем не угодил. Дело в том, что на сайтах я впервые: работаю через чисто интуитивный интерфейс. Никакого развода: я и сам часто боюсь, что есть в проекте подводные камни, вот и использую форум для проверки своей бдительности. Схему не выкладываю потому, что не знаю как это сделать. Первому заинтересовавшемуся скину .SCH .PCB на e-mail. Даже пример софта эмулятора. Чес слово!
Знаете народ, у меня такое ощущение
А я уже думал что я один такой подозрительный... LoLz
Схему не выкладываю потому, что не знаю как это сделать.
Просто каким-нибудь образом перенести в графический формат и вложить в сообщение в посте.
Lisitsin
06.09.2010, 23:09
Народ, кто расскажет как .SCH в общий доступ скинуть?
---------- Post added at 23:09 ---------- Previous post was at 23:08 ----------
А как .SCH преобразовать в графический формат?
выкладывайте в sch, в pdf напечатаем...
Народ, кто расскажет как .SCH в общий доступ скинуть?
Запакуй всё в один архив . Далее в своём (первом)посте - [EDIT] -> [Расширенный режим] -> [Управление вложениями]
Lisitsin
06.09.2010, 23:25
Выкладываю.
Lisitsin
06.09.2010, 23:29
Пример софта:
Lisitsin
06.09.2010, 23:36
Спасибо за помощь, Keeper.
Lisitsin
06.09.2010, 23:48
Всем спасибо, я спать. Завтра - на работу. Появлюсь вечером.
Лисицын Василий Николаеви, Спасибо за интересный, неординарный проект! Никого не слушайте, доводите до финиша - рассыпухи хватает ещё с совеццких времён, а на ПЛИСе уже хватает клонов. Ваш же проект заинтриговал именно своей нестандартностью..
Всем спасибо, я спать. Завтра - на работу. Появлюсь вечером.
Жду, скучаю.
Черт, я тоже вынашивал проект такой последний месяц.
Анализировал возможность эмуляции Z80 мегой 32, но решил все же лучше настоящий
Z80. На меге 32 видеоконтроллер сделать и на 1 еще порты ввода вывода с SD в виде дисков, память чипы кеш памяти с 486 мамок. ПЗУ загружается в ОЗУ нужное с диска при старте, потом запускается процессор.
Но я дальше размышлений пока не дошел.
Буду с интересом следить.
А почему не пользуешься SPI для вывода видео?
Лисицын Василий Николаеви, у тебя PCAD. Я на нём давно работаю. Проект в стадии проектирования или уже работающий вариант? Потом можно печатку сворганить.
По схеме. Что за "нулевые" резисторы R27,28,50,51,30? Неужели нельзя было без них обойтись? По мне так лучше лучше переходное отверстие поставить чем их ставить. Или ты используешь одностороннюю ПП? Еще не есть хорошо светодиод HL1 подключать напрямую без резистора.
Потом, что за подключение кварцевого генератора G1 через конденсатор C21?
Вообще зачем такие жирные провода рисовать? Нельзя их принять "нулевой" толщины? Затем, зачем всё так натыкано, в смысле близко детали друг от друга стоят. От заземления до вывода, например, конденсатора должен быть провод.
Вот пример перерисованной части твоей схемы. Посмотри.
Но на ПЛИСАх проект будет внутренне ещё более громоздкий: там надо проектировать всю внутреннюю архитектуру Z80.
это уже триста лет как сделано - готовый модуль Т80.
Стоимость возрастает: ПЛИС - дорогое удовольствие.
155 рублей Циклон 1 тайваньский.
300 рэ Циклон 1 американский.
3. буфер на 74ls для RGB, бипер, мафон_выход
4. буфер на 74ls для клавиатуры
Не обязательно. В Орионе я не ставил буферов, Циклон прекрасно тянет и без них.
А почему не пользуешься SPI для вывода видео?
а как из одного SPI сделать RGB-видео?
---------- Post added at 10:01 ---------- Previous post was at 10:00 ----------
155 рублей Циклон 1 тайваньский.
блин, че ж ты по почте не торгуешь...
блин, че ж ты по почте не торгуешь...
Я еще год назад предлагал эти циклоны, когда мы обсуждали видеокарту для спекки.
тогда их было более 200 шт. на складе. Сейчас их нет, но обещали снова привезти ("ЭФО-Петербург").
Я еще год назад предлагал эти циклоны... Сейчас их нет, но обещали снова привезти ("ЭФО-Петербург").
Тады я первый в очередь на них стою, забей для меня пол десятка.
Тады я первый в очередь на них стою, забей для меня пол десятка.
Сейчас Андрюс предлагает эти циклоны по 300рэ. Кому надо срочно - обращайтесь к нему.
Тайваньские или американские Циклоны 1?
Тайваньские или американские Циклоны 1?
не знаю...
Проект вполне реален, но думаю интересней было бы его оптимизировать.
Как пример можно посмотреть реализацию чешского компьютера PMD-85.
http://pmd85.topindex.sk/
На сайте есть вся информация со схемами, разводкой платы и исходниками эмуляции
процессора 8080 и самого компьютера на одном контроллере ATMega128.
...интересней было бы его оптимизировать.
Как пример можно посмотреть реализацию чешского компьютера PMD-85.
Прекрасный пример! Причём игры уже зашиты во внутреннее флеш-ПЗУ (объёмом 128 кБайт). Жаль только что видеовыход чёрно-белый. Да и ввод/вывод данных отсутствует. Хорошо бы SD карточку!
P.S. Берите все исходники - переписал на свой сайт - http://www.spetsialist-mx.ru/for_out/small_pmd_128.rar (2,53 МБайта).
Lisitsin
07.09.2010, 17:48
Черт, я тоже вынашивал проект такой последний месяц.
Анализировал возможность эмуляции Z80 мегой 32, но решил все же лучше настоящий
Z80. На меге 32 видеоконтроллер сделать и на 1 еще порты ввода вывода с SD в виде дисков, память чипы кеш памяти с 486 мамок. ПЗУ загружается в ОЗУ нужное с диска при старте, потом запускается процессор.
Но я дальше размышлений пока не дошел.
Буду с интересом следить.
А почему не пользуешься SPI для вывода видео?
SPI не выдаёт данные длиннее определённой длины ( 8 или 16 бит), и эти пачки данных стробируются, так что между ними возникает пауза. Я уже думал об этом.
---------- Post added at 17:45 ---------- Previous post was at 17:38 ----------
Лисицын Василий Николаеви, у тебя PCAD. Я на нём давно работаю. Проект в стадии проектирования или уже работающий вариант? Потом можно печатку сворганить.
По схеме. Что за "нулевые" резисторы R27,28,50,51,30? Неужели нельзя было без них обойтись? По мне так лучше лучше переходное отверстие поставить чем их ставить. Или ты используешь одностороннюю ПП? Еще не есть хорошо светодиод HL1 подключать напрямую без резистора.
Потом, что за подключение кварцевого генератора G1 через конденсатор C21?
Вообще зачем такие жирные провода рисовать? Нельзя их принять "нулевой" толщины? Затем, зачем всё так натыкано, в смысле близко детали друг от друга стоят. От заземления до вывода, например, конденсатора должен быть провод.
Вот пример перерисованной части твоей схемы. Посмотри.
PCB уже есть, и без нулевых резисторов и даже четырёх перемычек там не обошлось. Печать двухсторонняя. Версия пока не рабочая, но я уже сформировал корректный видеосигнал, даже с эффектом FLASH. В железе нет пока ОЗУ: жду почтой IS62C1024. Если оба процессора с ней нормально сдружатся - больше половины дела сделана.
---------- Post added at 17:48 ---------- Previous post was at 17:45 ----------
это уже триста лет как сделано - готовый модуль Т80.
155 рублей Циклон 1 тайваньский.
300 рэ Циклон 1 американский.
Не обязательно. В Орионе я не ставил буферов, Циклон прекрасно тянет и без них.
И это уже есть и работает? Тады ого!
Lisitsin
07.09.2010, 17:56
А вот Вам и PCB! Признаюсь: со светодиодом без резистора ошибка.
И это уже есть и работает? Тады ого!
Таких "ого" на ПЛИС уже много. Лепятся как пирожки :)
Lisitsin
07.09.2010, 18:13
Таких "ого" на ПЛИС уже много. Лепятся как пирожки :)
Ну, что-ж ... будем догонять.
А вот Вам и PCB! Признаюсь: со светодиодом без резистора ошибка.
А четыре перемычки религия не позволила развести?
Lisitsin
07.09.2010, 19:04
Ну длолжен ж быть хоть какой-то изъян? Ато это уже прямо военная техника получается.
А мне перемыки на нулевых резисторах нравятся... Зелёненькие такие... :v2_blush::v2_laugh:
---------- Post added at 19:42 ---------- Previous post was at 19:40 ----------
Если не сложно, покажите PCB в каком-нибудь граф.формате, нет у меня када.
Lisitsin
07.09.2010, 19:51
Вот что реально у меня сейчас с видеосигналом: (чёрно-белый выход)
Lisitsin
07.09.2010, 19:58
А мне перемыки на нулевых резисторах нравятся... Зелёненькие такие... :v2_blush::v2_laugh:
---------- Post added at 19:42 ---------- Previous post was at 19:40 ----------
Если не сложно, покажите PCB в каком-нибудь граф.формате, нет у меня када.
Это можно ...
Вот что реально у меня сейчас с видеосигналом: (чёрно-белый выход)
А цвет когда будет?
Lisitsin
07.09.2010, 20:16
А цвет когда будет?
Да я думаю он есть: R, G, B сигналы на осциллоскопе вижу. Просто сейчас нет под рукой RGB входа нету.
Просто сейчас нет под рукой RGB входа нету.
могу посоветовать 2 выхода из этой ситуации:
1. ZX-KIT VGA&PAL от zst - подключение спектрума к VGA-монитору.
2. PalCoder от NedoPC - подключение спектрума к любому телевизочу через НЧ-вход в цвете.
И необходимость в RGB-входе отпадает.
Lisitsin
08.09.2010, 17:37
Доброго времени суток. А кто мне может показать проект на ПЛИС? Буду премного благодарен.
molodcov_alex
08.09.2010, 17:49
Раз (http://zx.pk.ru/showthread.php?t=10316), два (http://zx.pk.ru/showthread.php?t=12425), три (http://www.nedopc.com/zxevo/zxevo.php), например.
SPI не выдаёт данные длиннее определённой длины ( 8 или 16 бит), и эти пачки данных стробируются, так что между ними возникает пауза. Я уже думал об этом.
Вот тут (наложение титров на видеосигнал) используется SPI, вроде таких проблем нет:
http://garydion.com/projects/videoverlay/
Lisitsin
08.09.2010, 18:03
Вот тут (наложение титров на видеосигнал) используется SPI, вроде таких проблем нет:
http://garydion.com/projects/videoverlay/
Посмотрел. Так в том то всё и дело, что титры имеют пробелы между буквами: 8 бит данных - 1 бит пустой (строб spi) и опять заново. А в zx изображение непрерывно.
Посмотрел. Так в том то всё и дело, что титры имеют пробелы между буквами: 8 бит данных - 1 бит пустой (строб spi) и опять заново. А в zx изображение непрерывно.
Что за строб SPI? Он же полностью синхронный, то есть 8 клоков - 8 бит данных.
Lisitsin
08.09.2010, 19:11
Что за строб SPI? Он же полностью синхронный, то есть 8 клоков - 8 бит данных.
До сей поры всё верно. Но это только два провода - MOSI (или MISO) - данные и SCK - синхронизация. Но данные передаются пачками по 8 бит, а разделяются они третьим сигналом - ~SS (slave select). И занимает он не менее такта.
До сей поры всё верно. Но это только два провода - MOSI (или MISO) - данные и SCK - синхронизация. Но данные передаются пачками по 8 бит, а разделяются они третьим сигналом - ~SS (slave select). И занимает он не менее такта.
Если микроконтроллер работает как SPI хост, то ~SS становится обычным пином, никак не влияющим на передачу/прием данных по MOSI/MISO:
When the SPI is configured as a Master (MSTR in SPCR is set), the user can determine the direction of the SS pin.
If SS is configured as an output, the pin is a general output pin which does not affect the SPI system.
Lisitsin
08.09.2010, 19:41
Если микроконтроллер работает как SPI хост, то ~SS становится обычным пином, никак не влияющим на передачу/прием данных по MOSI/MISO:
When the SPI is configured as a Master (MSTR in SPCR is set), the user can determine the direction of the SS pin.
If SS is configured as an output, the pin is a general output pin which does not affect the SPI system.
Сразу признаюсь: так я не пробовал. Пытался поначалу делать видео через SPI, но увидел формирование SS в AVR Studio и не стал. Сделал всё тупо "в лоб": у меня на один пиксел три такта - хватает чтобы и подготовить данные, и выдать, и даже ещё что-нибудь сделать.
вот если бы контроллер еще сразу цветной пал формировал... не получится?
Lisitsin
08.09.2010, 20:10
К сожадению, с PALом не знаком, ни чего сказать не могу. Но если положиться на SPI то вероятность по сравнению с прямой реализацией намного выше.
вот если бы контроллер еще сразу цветной пал формировал... не получится?
Чисто теоретически можно (http://trznadel.info/kuba/avr/), но тактовая частота должна быть кратна 4.43МГц или сколько там у цветовой поднесущей.
molodcov_alex
09.09.2010, 00:53
Есть еще вот такая вещь: http://www.linusakesson.net/scene/phasor/index.php
вот именно phasor меня и наталкивает на такие мысли...
Lisitsin
09.09.2010, 17:42
Ура !!! Прислали по почте IS62C1024. Но шаг у неё 0,5 мм. Как паять буду - не знаю.
Lisitsin
11.09.2010, 16:39
Кстати, возникла мысль: если для основного процессора написать вместо эмулятора систему - не хилый компьютер получится. Ни кто не хочет взяться за дело?
sergey2b
11.09.2010, 16:56
Кстати, возникла мысль: если для основного процессора написать вместо эмулятора систему - не хилый компьютер получится. Ни кто не хочет взяться за дело?
я давно обдусывал и немного эксперементировал
основная проблемма количество перезаписей программы ограниченно 1k
если вшить basic который будет работать с программами с sd карты получаеться лучше но практического применения такой машинке не видно (видел 2-3 аналогичных проекта но судя по тому что все они заглохли применения им не нашли)
если для основного процессора написать вместо эмулятора систему - не хилый компьютер получится. Ни кто не хочет взяться за дело?
Можно поподробней, что означает эта шифровка?
Lisitsin
11.09.2010, 17:31
Кстати, возникла мысль: если для основного процессора написать вместо эмулятора систему - не хилый компьютер получится. Ни кто не хочет взяться за дело?
я давно обдусывал и немного эксперементировал
основная проблемма количество перезаписей программы ограниченно 1k
если вшить basic который будет работать с программами с sd карты получаеться лучше но практического применения такой машинке не видно (видел 2-3 аналогичных проекта но судя по тому что все они заглохли применения им не нашли)
Ну, во-первых, ни 1к, а 10к - этого должно хватить для разработки системы. А грузиться можно с абсолютно любого носителя прямо в ОЗУ. А ОЗУ можно сделать даже больше 128 к. Видео сигнал в цвете уже есть.
---------- Post added at 17:31 ---------- Previous post was at 17:28 ----------
Можно поподробней, что означает эта шифровка?
Короче: у меня 2 процессора. Один - видео - формирует изображение. А второй должен эмулировать команды Z80. Мысль такая: если вместо этого написать ему что-то типа бэйсика со всеми системными подпрограммами - получится по харду - спектрум, а по производительности - мама не балуйся.
sergey2b
11.09.2010, 17:35
Ну, во-первых, ни 1к, а 10к - этого должно хватить для разработки системы.
я имелл ввиду перезаписать программу в atmega можно только около 1000 раз+-
потом ее можно выкидывать
если вы хотите эмулировать z80 а программа будет в RAM да это сработает
просто я думал что если уже используеться МК и ПК не счем не совместим но лучше писать непосредственно для МК тем более инструментарий лучше чем для z80
Lisitsin
11.09.2010, 17:40
Ну, во-первых, ни 1к, а 10к - этого должно хватить для разработки системы.
я имелл ввиду перезаписать программу в atmega можно только около 1000 раз+-
потом ее можно выкидывать
если вы хотите эмулировать z80 а программа будет в RAM да это сработает
просто я думал что если уже используеться МК и ПК не счем не совместим но лучше писать непосредственно для МК тем более инструментарий лучше чем для z80
А я и говорю: ни 1000, а 10000:
• Nonvolatile Program and Data Memories
– 128K Bytes of In-System Reprogrammable Flash
Endurance: 10,000 Write/Erase Cycles
Систему писать во FLASH и пусть себе стоит.
Lisitsin
12.09.2010, 13:33
Ну, так что? Есть кто кому не слабо?
Есть кто кому не слабо?
теоретически? много кому не слабо.
практически - нет таких. у всех дела и т.п.
Lisitsin
12.09.2010, 15:42
Ну и ладно. Буду эмулироваться.
Lisitsin
12.09.2010, 20:17
Подцепил к проекту RAM. Пишу и читаю с обоих ATмег на полной скорости. Видеосигнал стал таким: (видимо есть некоторые глюки).
Entia non sunt multiplicanda sine necessitate...
Теоретические замечания: вряд ли удасться сэмулировать даже команды Z80 с праильными таймингами (кол-во тактов на инструкцию), т.к. для этого должны соблюдаться условия кратности времени исполнения инструкции Z80 и времени эмуляции ее же мегой. При этом, учитвая, что разные инструкции Z80 исполняются за разное число тактов, а еще наверное и отдельные инструкции выполняются разное число тактов в зависимости от ее операндов (этого точно не знаю)...
Lisitsin
14.09.2010, 22:43
Спасибо за замечания. Каждый такт считаю. Все команды хорошо документированы. Число тактов начиная от начала цикла М1 (выборки команды из памяти) указываю в программе в коментариях. Пример программы выкладывал где-то ранее. Не удаётся уложиться по времени (не на много) с командами DAA и XOR, но я надеюсь, что на работоспособность это сильно не повлияет.
Когда планируется релиз ПО и ПП?
Lisitsin
15.09.2010, 17:13
Когда планируется релиз ПО и ПП?
Конкретных сроков нет. Творчество - вещь свободная. Сейчас вылавливаю глюки в программе видеопроцессора, потом буду отрабатывать контроллер клавиатуры, а уж потом доэмулируюсь до конца.
Lisitsin
15.09.2010, 20:46
Уже лучше ...
а как будет происходить загрузка софта в ваше творение ?
Lisitsin
15.09.2010, 21:28
Уже лучше ...
Для начала с магнитофона или MP3, а там посмотрим ...
Для начала с магнитофона или MP3, а там посмотрим ...
В Speccy 2007 проги загружаются посредством Атмеги с SD карты...
balu_dark
16.09.2010, 00:46
в этот проект поставить еще одну мегу - будет перебором :)
в этот проект поставить еще одну мегу - будет перебором :)
Да зачем? В основной, которая оперирует с шиной данных выделить выводы для подключения SD карты и вставить в неё код обслуживания SD интерфейса.
Хорошо бы, для начала, реализовать вывод на телевизор, подключив к работающему клону, например, к Ленинграду. Такое решение более интересно, чем эмулировать Z80.
А эмулировать Z80, который стоит 75 руб АТМЕГОЙ128, которая стоит 200 руб, дороже и дольше.
Эту задачу оставьте на потом, если врямя будет. Сначала лучше заняться основной, оригинальной идеей.
В ZXNEXT с этой задачей справился Z80+ПЗУ+регистры. На АТМЕГе тем более получится.
То есть, сначала предлагаю сделать видеоконтроллер на ATMEGA128 без счетчиков, мультиплексоров, регистров сдвига и транзисторов.
Вот это было бы здорово.
---------- Post added at 11:27 ---------- Previous post was at 11:08 ----------
Да зачем? В основной, которая оперирует с шиной данных выделить выводы для подключения SD карты и вставить в неё код обслуживания SD интерфейса.
В SPECCY2007 одна АТМЕGA32 работает с SD и клавиатурой. Тут тоже можно вместо АTTINY ее использовать.
Lisitsin
16.09.2010, 17:10
А у меня для загрузки/выгрузки есть UART. А видео я уже получил ... правда с транзисторами и мультиплексором. Без них не обойтись, поверьте на слово.
Правда есть хорошая поговорка: не говори "гоп", пока не сэмулируешься ...
Lisitsin
20.09.2010, 17:28
А вот и фотографии:
Прикольно расположение резисторов под углом. Девайс работает или частями?
Lisitsin
20.09.2010, 19:16
Прикольно расположение резисторов под углом. Девайс работает или частями?
Компоненты по ГОСТу допускается ставить под углом 45 градусов. А вот центральный процессор пришлось вывернуть наизнанку. Девайс работает аппаратно. Пишу софт.
Alegator
21.09.2010, 00:56
Супер проект интересный!!!
axel_sunrise
21.09.2010, 06:51
да,хотелось бы и самому повторить такой девайс,автор молодец
Lisitsin
21.09.2010, 10:20
да,хотелось бы и самому повторить такой девайс,автор молодец
Спасибо. А что мешает повторить-то? Я вроде бы всё выложил. Вот, ещё PCB RAM:
Симпатично. А как эта кучка процов прошиватся будет? Все скопом, или по одному?
axel_sunrise
21.09.2010, 16:44
Спасибо. А что мешает повторить-то? Я вроде бы всё выложил. Вот, ещё PCB RAM:
Нет возможности сделать плату,даже ЛУТом,если кто то займётся производством платы,то я бы купил)))
плату ... я бы купил)))
Не зачем торопиться, пусть сначала автор отладит девайс, а потом сам автор и закажит производство...
Alegator
21.09.2010, 16:55
Конструкция конечно привлекательна! Самое интересное это несложная конструкция с точки зрения повторения и доработок!!! Буду с нетерпением ждать продолжения!!!
Lisitsin
21.09.2010, 18:51
Симпатично. А как эта кучка процов прошиватся будет? Все скопом, или по одному?
Шью каждый проц отдельно in-system.
---------- Post added at 18:51 ---------- Previous post was at 18:49 ----------
А платы я делал утюгом. Даже для RAM.
Народ хочет мелкосерийное производство.
Lisitsin
21.09.2010, 23:14
Всё в их руках. Пусть только народ напишет софт.
а какая модель спектрума взята для построения экрана (48/128/Pentagon) ?
Lisitsin
22.09.2010, 00:19
а какая модель спектрума взята для построения экрана (48/128/Pentagon) ?
Родной 48 !!! (256х192)
Родной 48 !!! (256х192)
я имел ввиду сколько видимых строк и за сколько тактов они рисуются ?
вот к примеру построение экрана у пентагона.
http://www.worldofspectrum.org/rusfaq/pent.gif
а вот фирменный 48ой -http://www.zxdesign.info/horiztiming.shtml всё это соблюдается ?
в противном случае поплывут все рисунки на бордюре, мультиколоры и замерцают/пропадут спрайты в играх
Lisitsin
22.09.2010, 17:38
Я повторил вот эти времянки:
Lisitsin
22.09.2010, 17:39
А получилось то, что выложено на #84. Такты у меня свои: 3 такта на точку (21 МГц). Строк видимых 192. 256 точек в строке.
Lisitsin
29.09.2010, 20:02
Ещё есть ссылочки:
http://dl.dropbox.com/u/12408899/zx/CVBS%20%28100915-204844%29.wmv - video
http://dl.dropbox.com/u/12408899/zx/OPCODE_00.inc - part of soft
http://dl.dropbox.com/u/12408899/zx/RAM.pcb - RAM PCB
http://dl.dropbox.com/u/12408899/zx/RAM.sch - RAM SCH
http://dl.dropbox.com/u/12408899/zx/Spectrum.pcb - main board PCB
http://dl.dropbox.com/u/12408899/zx/Spectrum.sch - main board SCH
http://dl.dropbox.com/u/12408899/zx/DSC00454.JPG - photo 1
http://dl.dropbox.com/u/12408899/zx/DSC00455.JPG - photo 2
http://dl.dropbox.com/u/12408899/zx/DSC00456.JPG - photo 3
Доборые люди !!! Пока я пытаюсь сэмулировать ZX, пишите под это дело софт. Ресурсов - завались, железо работает. Повторить девайс сей может каждый в домашних условиях. Чем смогу - помогу.
Alegator
29.09.2010, 20:19
Буду собирать!!! Осталось дождаться прошивок!!!!
Lisitsin
29.09.2010, 20:27
Первая ссылка битая.
Первую исправил.
---------- Post added at 20:27 ---------- Previous post was at 20:23 ----------
Буду собирать!!! Осталось дождаться прошивок!!!!
Вот, пожалуйста, HEX под видеопроцессор:
Но в правом нижнем углу изображения один атрибут глючный (видно в видеозаписи). To be continued ...
Прекрасно! Особенно прикалывает корпус IC62C1024 - вытянутый. Ждём реализа.
Базар переехал: http://www.zx.pk.ru/showthread.php?t=13982
Lisitsin
10.10.2010, 22:31
Ну, короче ещё раз:
http://dl.dropbox.com/u/12408899/Sta...1%80%D1%82.zip
Сейчас мне уже думается, что проблема программная, а не аппаратная. А глюк в правом нижнем углу я только что убрал.
И вот видео НЕХ без глюка:
CityAceE
11.10.2010, 16:12
Лисицын Василий Николаеви, неплохо бы все схемы, фотографии и остальную полезную информацию разместить в первом сообщении темы. Сейчас очень сложно всё это найти в раздувшейся теме.
Lisitsin
11.10.2010, 18:04
Уже лучше. Глюк был всё-таки не аппаратный, а программный.
http://dl.dropbox.com/u/12408899/CVBS%20%28101011-174845%29_%D1%83%D0%B6%D0%B5%20%D0%BB%D1%83%D1%87% D1%88%D0%B5.zip
Lisitsin
30.10.2010, 23:38
Ура !!!
А что это за мигающий Z слева сверху?
Lisitsin
31.10.2010, 12:12
А что это за мигающий Z слева сверху?
Это у меня точка останова.
Но вообще в динамике у меня всё так:
http://dl.dropbox.com/u/12408899/CVBS%20%28101031-003937%29.zip
Видеопроцессор глючит. Буду исправлять видеософт.
axel_sunrise
31.10.2010, 17:22
Ура !!!
Прикольно,надо будет собрать для интереса :)
Прикольно,надо будет собрать для интереса :)
Пока не чего - автор ещё девайс не отладил.
Lisitsin
31.10.2010, 22:12
Г л Ю к И типа ловлю ...
Lisitsin
10.11.2010, 17:43
От чёрточек на экране вроде бы избавился, но как вести себя будет в динамике-пока не знаю. На очереди прерывания и клавиатура. Если заработает - можно будет собирать.
axel_sunrise
11.11.2010, 02:54
вы попробуйте потом игры запустить на нём
вы попробуйте потом игры запустить на нём
А для чего автор этот девайс делает? Вообще-то Спектрум в большей степени игровой компьютер.
Lisitsin
11.11.2010, 17:10
Для начала бы BASIC запустить ...
Lisitsin
02.12.2010, 19:55
Всем привет. Короче всё ни как не займусь проектом. То одно то другое.
От глюков видеопроцессора почти избавился, но тут еще одна проблема: на скорости 21 МГц ни каждый процессор работает корректно с внутренним ОЗУ. Центральный у меня с ОЗУ работает нормально, а видео не хочет. При чтении корректный результат получается с опозданием - при очередном чтении. От глюка можно избавиться программно, но на душе всё равно неприятно.
Lisitsin
05.12.2010, 19:52
Короче проблему с разгоном решил. На прерывания пока не реагирует. Возникли тут проблемы со временем на проект. Продолжу на новогодних праздниках.
---------- Post added at 19:52 ---------- Previous post was at 19:51 ----------
Желающие могут пока собирать.
Orionsoft
31.12.2010, 18:14
Удивительный проект!
+ wishlist видео формировалось бы сразу для VGA
и будет MEGA штука, ведь VGA мониторы вытеснили телевизоры .
Автору респект !
Lisitsin
05.01.2011, 23:10
Thank you, Orionsoft. Но пока не работает. Глюков много. Радует пока только то, что на лицо физическая реализуемость.
Lisitsin
08.01.2011, 11:40
Пришлось внести небольшие схемные изменения в клавиатурный контроллер. Тактовую частоту пришлось снизить. Дело в том, что при таком разгоне процессор работает нормальнно со всем чем угодно, только не с RAM. С RAM возникают глюки. Это в свою очередь потащило за собой изменение схемы синхронизации. Но в общем то победа. Клавиатурный контроллер работает у меня корректно. Тестировал.
Lisitsin
09.01.2011, 03:49
Ну вот, глюки уже более приличные, даже клавиши правильно нажимаются ...
Lisitsin
09.01.2011, 16:26
Hi to all. Вот что я имею:
http://dl.dropbox.com/u/12408899/CVBS%20%28110109-162101%29.zip
Кто может мне объяснить природу сего глюка? Короче до первого нажатия клавиши ведёт себя ровно, но при клавише пишет целый экран вопросительных знаков. На клавиатуру потом реагирует адекватно, но ошибки висят.
Всем спасибо !!!
Spectramine
09.01.2011, 18:36
Элементарно - где-то опять неправильная эмуляция z80 :)
Lisitsin
09.01.2011, 19:46
Элементарно - где-то опять неправильная эмуляция z80 :)
Гениально !!! Буду искать, правильное замечание.
Lisitsin
12.01.2011, 19:24
Я тут подумал, может сделать что-нибуть типа вот этого?
(да не обидится сэр Клайв Синклер)
Сэр давно уже не обижается, а вот надпись выводить логично если ПЗУ как-то переработано.
ага, "soft" в надписи как-то не к месту.
Lisitsin
12.01.2011, 22:04
Ладно, напишем что-нибудь другое. Как проект-то обозвать?
ZX-ASpect (ZX AVR Spectrum) :)
RabidRabbit
13.01.2011, 13:51
Своё писАть надо на бордюре ;)
ZX-ASpect (ZX AVR Spectrum)
AVR-Spectrum :D
Lisitsin
15.01.2011, 21:34
Аспект мне нравится. Прямо на бордюре - отличная идея.
вычищу глюки - попробую сделать.
Lisitsin
21.01.2011, 00:02
УРА !!!
http://dl.dropbox.com/u/12408899/CVBS%20%28110120-234658%29.zip
http://dl.dropbox.com/u/12408899/ZX%20AVR%20PROJECT.ZIP
Время компиляции 23:28.
Пока не работает двоично-десятичная коррекция и не правильно работает вывод в порт 254. Будем трудиться.
Желающие и могущие пока пробуют собрать.
Желающие и могущие пока пробуют собрать.
Стоит самому заказать печатки и распространять через "Барахолку". Ты ж автор - продавай своё творение сам. Лучше конструктором, в смысле Атмеги + плата. Не все могут найти программатор и прошить Атмеги.
УРА !!!
http://dl.dropbox.com/u/12408899/CVB...-234658%29.zip
http://dl.dropbox.com/u/12408899/ZX%20AVR%20PROJECT.ZIP
Время компиляции 23:28.
Пока не работает двоично-десятичная коррекция и не правильно работает вывод в порт 254. Будем трудиться.
Желающие и могущие пока пробуют собрать.
Возможно пригодятся для эксперементов ROM версии игрух (подтыкать можно вместо ROM48) - http://retro-roms.blogspot.com/2010/01/sinclair-zx-spectrum-games-cartridge.html . Там так же есть древний попсовый тест . (Shadow of the Unicorn ROM Loader (2001)(Ross, Fraser)(GB).rom загрузчик Shadow of the Unicorn для +2a or +3).
Lisitsin
21.01.2011, 17:28
Народ, а подскажите, где можно взять игрушки и всякие программки в формате mp3 или WAV ?
Народ, а подскажите, где можно взять игрушки и всякие программки в формате mp3 или WAV ? надо конвертить самому из образов ленты (tap/tzx), например программой k7zx или tap2wav
Вот программка TZX котрая воспроизводит tzx и другие файлы.
Плюс игрушка Dizzy 3.5 и 4 русская.:v2_wink2:
Продолжение архива с TZX :v2_wink2:
Ну и маленький хвостик (да простят меня модераторы):v2_wink2:
Василий Николаевич раскажите про коннцепцию Вашего А-Спека.
1 То что Вы на Mege делаете эмуляцию Z80 это понятно.
2 Видео адаптер на другой Mege тоже понятно.
Вот не понятно как они не конфликтуют с одной памятью.
И где у этого зверка ROM для меня тоже пока еще секрет.
Я подозреваю что он в RAM находиться вот только куда нижнии 4к РОМа вы запихнули.
Раскажите про Ваш проект более подробно.
И если можно выложите исходники на Mega
Народ, а подскажите, где можно взять игрушки и всякие программки в формате mp3 или WAV ?
Вот кстати вышеупомянутая k7zx4 ( http://personal.auna.com/casariche/k7zx4/k7zx4.htm ) способна не только загружать и делать WAV/mp3 файлы , но и делать турбо версии из дампов в формате .Z80 (загрузка дампа 48к ~20секунд). Вот тема про настройки - http://zx.pk.ru/showthread.php?t=7543
З.Ы. Оригинальные ленточные версии - http://www.worldofspectrum.org/games/index.html . Там же во встроенном эмуляторе можно глянуть чаво за игра .
З.Ы.Ы. Децел линков на готовые дампы .Z80 - http://zx.pk.ru/showthread.php?p=231464#post231464
раскажите про коннцепцию Вашего А-Спека.
А с первого поста лень почитать?
А с первого поста лень почитать?
Может Вы сможете расказать как происходит синхронизация между видео адаптером и процессором?
Я во всей теме этого не нашел или укажите где это можно прочитать.
Lisitsin
22.01.2011, 17:03
Может Вы сможете расказать как происходит синхронизация между видео адаптером и процессором?
Я во всей теме этого не нашел или укажите где это можно прочитать.
Сейчас синхронизация доступа к памяти примитивная и работает плохо. Чёрточки на экране - это и есть глюк синхронизации. Могу их и убрать почти полностью или даже полностьтю. Но сейчас не до этого. Принцип такой: видеопроцессор читает байт видеоданных из одного адреса видеопамяти два раза и сравнивает полученные результаты. Если они равны - считает данные достоверными.
А можно схемы не в пикаде, а в .pdf выложить? Не все пользуются пикадом...
Помогаю автору - выкладываю схему.
Lisitsin
27.01.2011, 23:29
Картинка грузится, звук есть, но игрушки пока не стартуют.
http://dl.dropbox.com/u/12408899/CVBS%20%28110127-232143%29.zip
Интересно возможно ли реализация данного устройства на одной меге?
По ногам вроде хватает, хватит ли по производительности?
Lisitsin
29.01.2011, 17:36
Интересно возможно ли реализация данного устройства на одной меге?
По ногам вроде хватает, хватит ли по производительности?
По производительности не хватит и по архитектуре. Не хватает регистров общего назначения: я уже и так устройства ввода-вывода использую для хранения данных.
Василий Николаевич, когда уже цвет-то будет? Не надоело в сером купаться?
Lisitsin
03.02.2011, 17:44
Василий Николаевич, когда уже цвет-то будет? Не надоело в сером купаться?
Да у меня вход у TV тюнера чёрно-белый ...
Да у меня вход у TV тюнера чёрно-белый ...
Тут у нас мода устаялась всё оформлять в виде VGA видеовыхода.
Lisitsin
03.02.2011, 21:18
Сие для меня в оталённой перспективе. Но если кто меня ткнёт носом где можно почитать про VGA так, чтобы можно было понять и реализовать - буду несказанно рад.
Но если кто меня ткнёт носом
Для начала прикинь потянет ли АВРка видеовыхлоп в два раза бымтрей. По сути и упрощенно - нужно выводить каждую строку изображения не один, а два раза подряд, вместе со строчным синхроимпульсом. Причем в два раза быстрей. Т.н. "скандаблер". Вот и весь ВГА.
Lisitsin
04.02.2011, 16:56
Для начала прикинь потянет ли АВРка видеовыхлоп в два раза бымтрей. По сути и упрощенно - нужно выводить каждую строку изображения не один, а два раза подряд, вместе со строчным синхроимпульсом. Причем в два раза быстрей. Т.н. "скандаблер". Вот и весь ВГА.
А где можно на это описалово проштудить?
Lisitsin
10.02.2011, 21:44
Всем привет. Только что запускал R-TYPE. Но корабля не было и через 10 секунд свалился в сбой. Ни у кого не завалялось тестовых программок для проверки эмуляции? Типа для проверки корректности выполнения команд Z80?
всем спасибо.
Смотрите в приложении набор утилиток для тестирования. Начать стоит, наверное, с z80tests.
Lisitsin
11.02.2011, 20:29
Благодарю, Higgins. Запустил Z80tests и в итоге кругом failed: (да как он вообще у меня работает?)
Благодарю, Higgins. Запустил Z80tests и в итоге кругом failed: (да как он вообще у меня работает?)
Ну, что, хорошее начало. :)
Судя по картинке, тест даже не может корректно сообщить об ошибке, то есть проблемы с какими-то основными вещами.
Можно попробовать еще раз глазами внимательно проверить реализации самых первых инструкций в тесте и, если будут найдены ошибки, исправить их и попробовать тест еще раз. Если тест сообщит, что тест для этих инструкции пройден успешно, значит сам код тестирования исполняется верно, и можно продолжать искать ошибки для других инструкций. Иначе, нельзя быть уверенным в том, что код тестирования исполняется верно, и тогда сообщения Failed/Passed не имеют никакого значения. В этом случае следует начать с проверки основных инструкций (арифметика, сравнения и переходы) и флагов (C, Z).
Lisitsin
11.02.2011, 22:59
Ну вот, например, SCF: MRIN failed: что это за MRIN? SCF я делаю элементарно:
EX37: CBR F,1<<NN - сбрасываю N
SBR F,1<<CC - устанавливаю с
NOP - коррекция времени выполнения команды
JMP LOOP - возврат в следующий цикл M1
и ещё не ясно что такое expected GRND
А Basic глючит следующим образом: PRINT 10 - в ответ - 1. PRINT 12.21 - в ответ 1.21. Целую часть пишет всегда либо 1 (если >=1) либо 0 (<1). Синус, косинус считает при этом верно. При загрузки программ с кассеты загрузчик стартует только со второй попытки загрузки, а в первый раз выдаёт OK и сваливается в main-loop.
А Basic глючит следующим образом: PRINT 10 - в ответ - 1. PRINT 12.21 - в ответ 1.21. Целую часть пишет всегда либо 1 (если >=1) либо 0 (<1). Синус, косинус считает при этом верно. При загрузки программ с кассеты загрузчик стартует только со второй попытки загрузки, а в первый раз выдаёт OK и сваливается в main-loop.
Lisitsin
11.02.2011, 23:33
А вот и R-TYPE.
Lisitsin
12.02.2011, 22:48
А вот и Robocop:
Ну вот, например, SCF: MRIN failed: что это за MRIN? SCF я делаю элементарно:
MRIN означает, что утилита не может правильно вывести значение контрольной суммы, т.е. ошибки эмулятора приводят к тому, что вместо шестнадцатиричных цифр печатаются неподходящие буквы и токены.
Тест печатает цифры контрольной суммы с помощью RST #10. Для ориентации в коде: само значение контрольной суммы хранится по адресу #9527. По адресам #8926 - #8931 лежит тело цикла тестирования. Процедура по адресу #80F5 печатает значение в HL (собственно, контрольную сумму). Процедура #80FE печатает значение в A. Процедура #810B печатает значение в четырех младших битах A, то есть одну шестнадцатиричную цифру.
Все эти процедуры печати очень простые и не работать там, в общем-то, нечему, за одним исключением: процедура #810B использует DAA. Это для вас должно быть звоночком. Во-первых, потому что проблемы с этой инструкцией -- обычное дело для эмуляторов. Во-вторых, потому что проблемы с печатью чисел в BASIC тоже указывают на возможные проблемы именно с этой инструкцией.
Значит, вопрос такой: как вы считаете результат для DAA?
как вы считаете результат для DAA?
добавлю пять копеек - для Z80 и i8080 эта команда работает по разному. Это так, для информации...
Посчитать DAA можно так:
#define PF_LOG(n) ((!PF_LOG4((n)) == !PF_LOG4((n) >> 4)) << PF_BIT)
case 0x27: /* DAA: f(4) */
d = 0x0000;
if((Z80_AF & Z80_CF) || Z80_AF >= 0x9a00) d |= 0x6000, Z80_AF |= Z80_CF;
if((Z80_AF & Z80_HF) || ((Z80_AF & 0x0f00) >= 0x0a00)) d |= 0x0600;
if(!(Z80_AF & Z80_NF)) Z80_AF = ((Z80_AF + d) & 0xff00) |
(((Z80_AF & 0x0f00) >= 0x0a00) << HF_BIT) | (Z80_AF & Z80_CF);
else Z80_AF = ((Z80_AF - d) & 0xff00) |
(((Z80_AF & Z80_HF) && (Z80_AF & 0x0f00) <= 0x0500) << HF_BIT) | Z80_NF | (Z80_AF & Z80_CF);
r = (Z80_AF >> 8);
Z80_AF |= PF_LOG(r) | (!r << ZF_BIT) | (r & (Z80_SF | Z80_XF | Z80_YF));
Команда короткая -- 4 такта, поэтому в вашем случае, чтобы выдержать скорость эмуляции, наверное, понадобится вводить таблички.
Нашелся еще один тест на инструкции. Смотрите в приложении.
Lisitsin
13.02.2011, 13:46
Она у меня как раз и сделана таблицей - вытаскиваю AF из EEPROM - там как раз 4 К и хватает впритык. Но просто саму таблицу пока не сгенерировал. И проблема как раз в том, что не сваливаюсь я к исполнению этой команды. Спасибо за подсказку !!!
ZEXFIX не грузится. Загрузчик проглатывает, он стартует, а при дальнейшей загрузке уходит в сброс. Может код можно ещё как-то подгрузить?
Lisitsin
13.02.2011, 14:54
Пробовал так: CLEAR 32768: LOAD "" CODE: RANDOMIZE USR 32768
Итог приложен. Сваливается в сброс, режим G и ворчит при нажатии на клавишу.
SCF я делаю элементарно:
EX37: CBR F,1<<NN - сбрасываю N
SBR F,1<<CC - устанавливаю с
NOP - коррекция времени выполнения команды
JMP LOOP - возврат в следующий цикл M1
К слову, SCF кроме N сбрасывает флаг H, а также копирует биты 3 и 5 из регистра A в F -- т.н. флаги X и Y. Если этого не делать, тест на флаги не пройдет.
Lisitsin
14.02.2011, 18:56
К слову, SCF кроме N сбрасывает флаг H, а также копирует биты 3 и 5 из регистра A в F -- т.н. флаги X и Y. Если этого не делать, тест на флаги не пройдет.
Точно!!!
Исправил, но всё равно всё fail:
Lisitsin
14.02.2011, 21:22
Higgins особую благодарность. Ткнул носом прямо в проблему. Буду генерировать DAA.
Lisitsin
15.02.2011, 18:22
Попытался реализовать DAA. Уже лучше:
Попытался реализовать DAA. Уже лучше:
Отлично. Видно, что DAA свое дело делает.
SCF тестируется в паре с CCF, поэтому пока оба не будут работать первый тест не пройдем. Я посмотрел ваш старый код для CCF -- выглядит правильно, но нет копирования битов 3 и 5 из A в F. Для теста это существенно. Но: я попробовал тест на SCF без копирования битов 3 и 5 в CCF и у меня не получилось то же значение, что на вашей картинке. Стало быть, еще могут быть проблемы в других инструкциях, задействованных в подсчете контрольной суммы.
Lisitsin
15.02.2011, 22:26
Исправил DAA. Стало ещё лучше. Уже PRINT выдаёт адекватные значения.
Прилагаю тесты.
Lisitsin
20.02.2011, 13:25
Шлю данные через PC-2:
Lisitsin
21.02.2011, 22:20
Начиная с 0X8085 но не до конца:
Начиная с 0X8085 но не до конца:
Значения регистров в первой строке похожи на правду. Но:
1) Нужны еще значения регистров IX и IY и
2) Не понятно, почему после инструкции по адресу #8085, которая должна быть "LD HL, (nn)", исполняется инструкция по адресу #0038. До первого CALL/RST там еще далеко.
Lisitsin
21.02.2011, 23:51
Забыл отключить маскируемое прерывание.
Lisitsin
22.02.2011, 18:48
Там вначале есть RST10: он пишет SCF : . Вот что сейчас (пока не до конца. Процесс долгий.)
Вот что сейчас
Инструкция "OR L" по адресу #808E не взводит флаг PF при A=#80 и L=#C2.
Посчитать значение флага можно так (n -- результат операции):
#define PF_LOG(n) ((!PF_LOG4((n)) == !PF_LOG4((n) >> 4)) << PF_BIT)
#define PF_LOG4(n) ((1u << ((n) & 0xf)) & 0x9669u)
#define PF_BIT 2
Lisitsin
22.02.2011, 22:58
Угу. Только мне от этой двоичной арифметики что-то нехорошо становится. Можно это как-то проще интерпретировать? Я так понимаю: если в результате операции произошло изменение (то что стало минус то что было), превышающее значение 0f, значит флаг V возводится?
А в AVR бит V вообще как-то странно используется ... Операция OR, например, его просто сбрасывает.
Есть вторая часть трейсинга:
Угу. Только мне от этой двоичной арифметики что-то нехорошо становится. Можно это как-то проще интерпретировать? Я так понимаю: если в результате операции произошло изменение (то что стало минус то что было), превышающее значение 0f, значит флаг V возводится?
PF для битовых операций (включая OR) считается не так, как для арифметических, не по переменам знаков.
Интерпретировать эту арифметику очень просто: 0x9669 это просто битовый массив размером 16, т.е. числам 0...15 поставлено в соответствие значение 0 или 1. Макрос PF_LOG4(n) реализует это соответствие: для числа (n) в диапазоне 0..15 он возвращает поставленное ему в соответствие значение -- 0 или 1. Макрос PF_LOG(n) сравнивает значения, которые дает PF_LOG4() для четырех старших и четырех младших разрядов своего аргумента (n). Если эти значения совпадают, значит PF должен быть взведен, иначе PF должен быть сброшен.
Lisitsin
23.02.2011, 11:38
Да, тяжело мне иметь дело с профкссиональным эмуляторщиком ...
Для начала не могли бы вы мне, любителю - самоучке объяснить в этой ситуации сам смысл флага P в этой инструкции? Это влаг чётности, переполнения дополнения до 2 или что-то другое?
Предыдущие объяснения я понимаю так:
Флаг Р определяется только по значению результата после выполнения инструкции. Берутся две тетрады результата - старшая и младшая. Каждой ставится в соответствие по одному биту - 1 или 0 в соответствии со значением каждой тетрады (0-15). Если эти два бита равны - флаг возводится, не равны - сбрасывается. Если это так - мне останется только уяснить сам принцип этого соответствия - PF_LOG4(n) - имеется ли здесь в виду (прошу прощения за такую глупость) функция логарифма по основанию 4 ?
Это влаг чётности, переполнения дополнения до 2 или что-то другое?
Для битовых операций это флаг четности. Его можно реализовать одной большой табличкой, а можно двумя маленькими, подсчитывая четность не для восьми разрядов, а для двух половинок из четырех разрядов.
Флаг Р определяется только по значению результата после выполнения инструкции.
Да, значение флага зависит только от результата операции.
Берутся две тетрады результата - старшая и младшая. Каждой ставится в соответствие по одному биту - 1 или 0 в соответствии со значением каждой тетрады (0-15). Если эти два бита равны - флаг возводится, не равны - сбрасывается.
Верно.
Если это так - мне останется только уяснить сам принцип этого соответствия - PF_LOG4(n) - имеется ли здесь в виду (прошу прощения за такую глупость) функция логарифма по основанию 4 ?
"PF" значит флаг PF. "LOG" означает реализацию флага для логических операций (еще есть PF_ARI() -- для арифметических операций). "4" значит, что четность вычсляется для четырехразрядного операнда.
Lisitsin
23.02.2011, 12:29
А-а-а-а-а-а ...
Так чётность у меня уже есть таблицей .....
Просто читаю мануал на Z80, а там про OR написано: P/V is set if overflow; reset otherwise. Ну я его и оставляю таким, как у AVR. Что-ж это значит, ерроры в мануале? Да уж ....
А у AND r, CP r, ADC A,r, ADD A,r, SUB r и SBC r там тоже overflow стоит ...
И ещё: и ещё, и ещё .... Всю ночь кулером гудел. Жена уже ругается:
Что-ж это значит, ерроры в мануале? Да уж ....
А у AND r, CP r, ADC A,r, ADD A,r, SUB r и SBC r там тоже overflow стоит ...
Да, описание инструкций там составлено по технологии copy-and-paste, поэтому такого рода ошибок там предостаточно. Хорошего документа с подробным описанием инструкций я не знаю.
TRACE3 -- это после исправления PF для битовых инструкций?
Lisitsin
23.02.2011, 16:35
TRACE3 -- это после исправления PF для битовых инструкций?
Пока нет. Но вот с битом чётности опять непонятно. C2 - это 1100 0010. Число единиц - 3 - нечётное (odd). Если верить опять тому же мануалу - бит надо сбрасывать, а устанавливается он - если чётное (even).
Я сейчас в инструкциях OR поставил обращение к таблице чётности, но Р всё равно в нуле. Может проинвертировать таблицу-то надо?
И ещё: для каких из: AND r, CP r, ADC A,r, ADD A,r, SUB r и SBC r надо подставлять в P/V бит чётности? (ато я мануалу уже не знаю как верить ...)
Пока нет. Но вот с битом чётности опять непонятно. C2 - это 1100 0010. Число единиц - 3 - нечётное (odd). Если верить опять тому же мануалу - бит надо сбрасывать, а устанавливается он - если чётное (even).
Я сейчас в инструкциях OR поставил обращение к таблице чётности, но Р всё равно в нуле. Может проинвертировать таблицу-то надо?
В моем сообщении опечатка. Перед исполнением "OR L" по адресу #808E регистр A=#86 и L=#C2. Результат операции #86 | #C2 = #C6 = %11000110 -- количество единиц четное, PF взводим.
Lisitsin
23.02.2011, 18:48
А AND r, CP r, ADC A,r, ADD A,r, SUB r и SBC r?
Ато я OR исправил, но всё равно SCF 4efc failed, expected 0ebf
А AND r, CP r, ADC A,r, ADD A,r, SUB r и SBC r?
Ато я OR исправил, но всё равно SCF 4efc failed, expected 0ebf
Арифметические: ADD, ADC, SUB, SBC, CP.
Битовые/логические: AND, XOR, OR.
Для всех логических выставляем PF как флаг четности.
Lisitsin
25.02.2011, 18:32
Битовые-логические исправил. SCF всё равно failed. Трейсинг со слов 892B 0EA4 0000 0000 0EA5 2000 2000; уже с исправленными инструкциями.
До конца трейсинг будет долгий. В реальном масштабе времени он занимает около 15 секунд, а сейчас пройдено около половины секунды.
А может IX и IY отключить? Всё по-быстрее будет.
USERHOME
25.02.2011, 19:36
Извините если я повторюсь... про флаг P/V:v2_dizzy_coder:
P/V - Если при логических операциях и командах сдвига кол-во установленных в ЕДИНИЦУ битов чётно (функция чётности 'P')
P/V - Если результат арифмитической операции находится вне диапазона представления чисел со знаком, т.е. меньше -128, либо больше +127 (функция переполнения 'V')
:v2_dizzy_priest:
Команды LD A,I и LD A,R ,в отличие от всех остальных команд загрузки, оказывают влияние на флаги:
H < - 0
N < - 0
P/V <-IFF2 (триггер разрешения/запрещения прерываний)
:v2_dizzy_snowball2:
Далее....
P/V (Parity/Overflow) - Флаг чётности/переполнения
Этот флаг имеет несколько функций.
1. При арифмитических операциях над числами со знаком он действует как флаг переполнения V. Т.к. диапазон представления чисел со знаком от -128 до +127, то при операциях над ними возможен выход результата за эти пределы - переполнение. В этом случае флаг устанавливается в 1, сигнализируя об ошибочности результата. Логика установки флага V в 1 такова:
а) если был перенос из 6-го бита в 7-ой, и не было переноса из 7-го бита во флаг C;
б) не было переноса из 6-го бита в 7-ой, но есть перенос из 7-го бита во флаг C.
Сложение
_+76 = 0 1 0 0 1 1 0 0
-114 = 1 0 0 0 1 1 1 0
----------------------
______1 1 0 1 1 0 1 0 = -38 верно
C=0
V=0
Сложение
__-1 = 1 1 1 1 1 1 1 1
__-1 = 1 1 1 1 1 1 1 1
----------------------
______1 1 1 1 1 1 1 0 = -2 верно
C=1
V=0
Сложение
_+82 = 0 1 0 1 0 0 1 0
_+94 = 0 1 0 1 1 1 1 0
----------------------
______1 0 1 1 0 0 0 0 = -80 неверно!
C=0
V=1
В последнем примере произошла установка флага V.
Это означает, что ошибка должна быть програмно учтена при анализе результата.
P.S Может чем поможет ВАМ :v2_wink2:
Битовые-логические исправил. SCF всё равно failed. Трейсинг со слов 892B 0EA4 0000 0000 0EA5 2000 2000; уже с исправленными инструкциями.
До конца трейсинг будет долгий. В реальном масштабе времени он занимает около 15 секунд, а сейчас пройдено около половины секунды.
К моменту исполнения по адресу #892B различия с эталоном не только в регистре F, но и в регистре A, поэтому начинать трассировку с этого адреса уже поздновато. Давайте вернемся к трассировке с адреса #8085. Очень много строк не пока нужно. Насчет SCF тоже не беспокойтесь. Чем позже будет проходить этот первый тест, тем больше инструкций мы успеем исправить анализируя сравнительно небольшие трейсинги без дополнительных ухищрений. В конце концов наша цель -- исправить все ошибки, а не пройти конкретный набор тестов.
Lisitsin
26.02.2011, 11:02
Начиная с 8085:
Начиная с 8085:
Продвинулись на одну инструкцию, и теперь 14 строк трейсинга совпадает с эталоном. :)
"CP #FF" по #80EF не копирует 3 и 5 биты операнда (#FF) в F.
Lisitsin
26.02.2011, 11:46
Продвинулись на одну инструкцию, и теперь 14 строк трейсинга совпадает с эталоном. :)
"CP #FF" по #80EF не копирует 3 и 5 биты операнда (#FF) в F.
Работаю ...
А все команды CP, CPI копируют биты 3, 5 из операнда в F?
А все команды CP, CPI копируют биты 3, 5 из операнда в F?
CP n и CP r работают так. CPI, CPD, CPIR и CPDR выставляют эти флаги по-другому:
case 0201: /* CPI, CPD, CPIR, CPDR: f(4) f(4) r(3) e(5) + e(5) */
if(y < 4) return Z80_PC;
s = Z80_AF, w = Z80_HL, do_alu(7, r = READ(w)), CONT5(w);
r = LIB_UZX_DATA_HIGH(Z80_AF) - r - !!(Z80_AF & Z80_HF);
Z80_BC = DEC16(Z80_BC);
Z80_AF = (Z80_AF & (LIB_UZX_DATA_HIGH_MASK | Z80_SF | Z80_ZF | Z80_HF)) |
((r << 4) & Z80_YF) | (r & Z80_XF) | ((Z80_BC != 0) << PF_BIT) | Z80_NF | (s & Z80_CF);
if(y & 1) Z80_HL = DEC16(Z80_HL), z80_MEMPTR = DEC16(z80_MEMPTR);
else Z80_HL = INC16(Z80_HL), z80_MEMPTR = INC16(z80_MEMPTR);
if((y & 2) && !(Z80_AF & Z80_ZF) && Z80_BC != 0)
return (CONT5(w), Z80_PC = SUB16(Z80_PC, 2), z80_MEMPTR = INC16(Z80_PC));
return Z80_PC;
Lisitsin
26.02.2011, 13:24
Тут ещё такая тема: в мануале написано, что CPD, CPDR, CPI, CPIR - все флаг N взводят. А мне что-то кажется, что CPI, CPIR флаг сей должны сбрасывать.
Тут ещё такая тема: в мануале написано, что CPD, CPDR, CPI, CPIR - все флаг N взводят. А мне что-то кажется, что CPI, CPIR флаг сей должны сбрасывать.
Все эти инструкции взводят NF, см. Z80_NF в коде выше.
Lisitsin
26.02.2011, 14:24
Исправил CP, CPI, CPIR, CPD, CPDR в части флагов 3, 5:
Исправил CP, CPI, CPIR, CPD, CPDR в части флагов 3, 5:
Хорошая новость: к #8085 приходим с правильным значением F.
Теперь по адресу #0B03 инструкция "BIT 1, (IY + 1)" все те же флаги 3 и 5. Там должны быть соответственно биты 3 и 5 старшей половины регистра MEMPTR. Он, в свою очередь, получает значение адреса читаемой ячейки, в данном случае IY + 1.
Lisitsin
26.02.2011, 15:11
Хорошая новость: к #8085 приходим с правильным значением F.
Теперь по адресу #0B03 инструкция "BIT 1, (IY + 1)" все те же флаги 3 и 5. Там должны быть соответственно биты 3 и 5 старшей половины регистра MEMPTR. Он, в свою очередь, получает значение адреса читаемой ячейки, в данном случае IY + 1.
То есть я просто копирую их опять же из операнда? Работаю.
Lisitsin
26.02.2011, 16:13
BIT исправил:
Или я что-то не так понимаю: биты 3 и 5 копируются из самого операнда или из старшего байта его адреса?
Lisitsin
26.02.2011, 17:53
Если биты 3 и 5 копируются из старшего байта адреса операнда, вот что получается:
Lisitsin
26.02.2011, 20:42
Каюсь. SCF и CCF исправил неправильно. Сейчас сделал правильно. SCF и CCF Passed. DAA failed, но я там ничего не делал с флагом H - не нашёл в документации. Трейсинг последует.
То есть я просто копирую их опять же из операнда?
Или я что-то не так понимаю: биты 3 и 5 копируются из самого операнда или из старшего байта его адреса?
Задача в три действия действия:
1) Заносим *адрес* индексированной ячейки в MEMPTR.
2) Берем старшую половину регистра MEMPTR.
3) Копируем биты 3 и 5 из этой старшей половины MEMPTR в регистр F.
Каюсь. SCF и CCF исправил неправильно. Сейчас сделал правильно. SCF и CCF Passed. DAA failed, но я там ничего не делал с флагом H - не нашёл в документации. Трейсинг последует.
Отлично. :)
Lisitsin
26.02.2011, 22:23
Вот что сейчас: (вложение)
Тест MEMPTR сплошь failed. Я биты 3 и 5 в командах пересылки данных вообще не трогаю. Они там тоже из MEMPTR:H копируются?
Вот что сейчас: (вложение)
Та же инструкция "BIT 1, (IY + 1)" по тому же адресу: не взводится PF для случая сброшенного бита.
Тест MEMPTR сплошь failed. Я биты 3 и 5 в командах пересылки данных вообще не трогаю. Они там тоже из MEMPTR:H копируются?
Здесь есть сводный документ о MEMPTR:
http://zx.pk.ru/showpost.php?p=44058&postcount=150
Lisitsin
27.02.2011, 11:18
Та же инструкция "BIT 1, (IY + 1)" по тому же адресу: не взводится PF для случая сброшенного бита.
Да ....
Я недокументированные штуки почти не учитывал. А как команды BIT вообще на PF влияют?
А как команды BIT вообще на PF влияют?
Устанавливают в то же состояние, что и ZF, то есть взводят если тестируемый бит сброшен, и сбрасывают если взведен.
Lisitsin
27.02.2011, 11:35
Устанавливают в то же состояние, что и ZF, то есть взводят если тестируемый бит сброшен, и сбрасывают если взведен.
Работаю ...
Lisitsin
27.02.2011, 16:34
Исправил:
Исправил:
Не похоже. После "BIT 1, (IY + 1)" ZF взведен, а PF нет. :v2_wink2:
Lisitsin
27.02.2011, 17:54
Ой ! У меня тут глюк аппаратный был с утра. Я различные старые версии прошивал. Наверное старенькое что попалось .Торможу уже как BASIC . Щас исправлюсь ...
А сколько строк сейчас нужно в трейсинге делать?
А сколько строк сейчас нужно в трейсинге делать?
Сейчас различие с эталоном в 28-й строке. :)
Lisitsin
27.02.2011, 18:06
Должно работать:
Должно работать:
"CP #80" по #0B26 не взводит SF при A=#53.
(#53 - #80) mod #100 = #100 - #2D = #D3 = %11010011 -- старший разряд взведен.
Lisitsin
27.02.2011, 18:54
"CP #80" по #0B26 не взводит SF при A=#53.
(#53 - #80) mod #100 = #100 - #2D = #D3 = %11010011 -- старший разряд взведен.
Работаю ...
Lisitsin
27.02.2011, 20:51
Гениально !!!
пропал реальный глюк в бейсике.
10 PRINT 6
20 GOTO 10
RUN
раньше цикле так в десятом выдавал какой-нибудь глюк типа NONSENCE IN BASIC.
Теперь как часы - сколько не крути !!!
Но загрузчик автоматически пока не стартует - только со второго раза.
TRACE8_0.zip
Отлично. Теперь "ADD HL, HL" по #0B79 ошибочно взводит 5-й разряд регистра F. Инструкции "ADD HL/IX/IY, rr" должны копировать биты 3 и 5 старшей половины результата сложения в F.
Lisitsin
27.02.2011, 22:43
В работе. А все 16-битные ADD, ADC, SBC так себя ведут, и что при этом происходит с флагом S ?
Спасибо ...
В работе. А все 16-битные ADD, ADC, SBC так себя ведут, и что при этом происходит с флагом S ?
Да, 16-разрядные ADD, ADC и SBC копируют биты 3 и 5 из старшей половины результата в F. При этом 16-разрядный ADD флаг S не меняет, а 16-разрядные ADC и SBC копируют старший (знаковый) разряд результата во флаг S.
Lisitsin
28.02.2011, 17:48
Да, 16-разрядные ADD, ADC и SBC копируют биты 3 и 5 из старшей половины результата в F. При этом 16-разрядный ADD флаг S не меняет, а 16-разрядные ADC и SBC копируют старший (знаковый) разряд результата во флаг S.
Приветствую.
А ADD HL,rr копируют биты 3, 4 из старшего байта результата после операции сложения или из H до операции сложения? И ещё: я читал, что BIT 7,r влияет на S, копируя в него седьмой бит тестируемого байта. Правда ли сие? А остальные BIT n,r на него не влияют? Это я начитался "Z80 Undocumented Features (in software behaviour)" By Sean Young (sean@msxnet.org) (приложение)
А ADD HL,rr копируют биты 3, 4 из старшего байта результата после операции сложения или из H до операции сложения?
А что такое результат до операции сложения?
ADD копирует биты 3 и 5 из старшей половины результата сложения. Разумеется, после самого сложения.
И ещё: я читал, что BIT 7,r влияет на S, копируя в него седьмой бит тестируемого байта. Правда ли сие? А остальные BIT n,r на него не влияют?
Да, "BIT 7, ..." копирует старший бит в S и остальные не влияют. То есть инструкции "BIT" ведут себя так, как если бы сначала формировалась битовая маска с взведенным разрядом в указанной позиции, которая затем применялась бы к операнду инструкции. Тогда в случае сброшенного тестируемого разряда получаем взведенные ZF (в результате применения маски получаем ноль) и PF (количество взведенных разрядов равно нулю, то есть их количество условно четно). А если тестируемый разряд взведен и это старший (знаковый) разряд, тогда взводится SF.
By Sean Young
Хороший документ.
Lisitsin
28.02.2011, 19:03
А у Sean Young по поводу битов 5 и 3 при ADD HL,rr я читаю:ADD HL,xx (use high byte of HL, i.e. H, before the addition) - типа до сложения. Или у меня ещё и с английским туговато?
А у Sean Young по поводу битов 5 и 3 при ADD HL,rr я читаю:ADD HL,xx (use high byte of HL, i.e. H, before the addition) - типа до сложения. Или у меня ещё и с английским туговато?
Полностью это выглядит так:
BIT n,(HL) *Z*1**0-
P/V, Z, S set as the other BIT instructions, but the 5 and 3 flags are
different. Okay, brace yourself. They are a copy of an internal register of
the Z80, which is set as follows:
ADD HL,xx (use high byte of HL, i.e. H, before the addition)
То есть "BIT n, (HL)" устанавливает P, Z и S как прочие инструкции "BIT", но флаги 3 и 5 устанавливает по-другому. И это правильно.
Однако то, что говорится о самом внутреннем регистре не верно. Во-первых, читая эти слова можно подумать, что внутренний регистр 8-разрядный. Это не так, и "BIT n, (HL)" копирует биты 3 и 5 из старшей половины 16-разрядного внутреннего регистра, MEMPTR.
Во-вторых, "ADD HL, ..." присваивает внутреннему регистру не старшую половину H до сложения, а увеличенное на единицу значение HL. Это происходит действительно до сложения (то есть до копирования результата сложения в HL), но здесь речь идет не о выставлении флагов 3 и 5, а о значении MEMPTR после исполнения "ADD HL, ...". Сама эта инструкция -- "ADD HL, ..." -- копирует во флаги 3 и 5 соответствующие разряды старшей половины результата сложения.
К слову, это относится только к "BIT n, (HL)", но не к "BIT n, (i+d)", которые копируют 3 и 5 биты адреса (i+d) в F.
Lisitsin
28.02.2011, 20:34
Последние исправления:
Последние исправления:
"RRA" по #0BA0. Должна копировать биты 3 и 5 результата сдвига в F.
Lisitsin
28.02.2011, 22:32
Исправил:
Error404
28.02.2011, 22:46
Может, спрошу то что уже здесь обсуждалось (весь тред прочитать не осилю), но в глаза не бросилось чтобы применяли zexall (http://mdfs.net/Software/Z80/Exerciser/) для проверки. А между тем, эта утилита как раз для проверки корректности выполнения всех команд с учетом всех флагов. Ну типа чтобы не гадать что где недоэмулировано. И большинство эмуляторшиков ориентируются по ней чтобы вывести "базис" эмулируемых команд.
Lisitsin
28.02.2011, 22:50
Может, спрошу то что уже здесь обсуждалось (весь тред прочитать не осилю), но в глаза не бросилось чтобы применяли zexall (http://mdfs.net/Software/Z80/Exerciser/) для проверки. А между тем, эта утилита как раз для проверки корректности выполнения всех команд с учетом всех флагов. Ну типа чтобы не гадать что где недоэмулировано. И большинство эмуляторшиков ориентируются по ней чтобы вывести "базис" эмулируемых команд.
Мне её посоветовали на World of Spectrum. Я даже скачал, но она почему-то у меня не грузится.
zexall очень медленно работает - я в эмуле выставил частоту 50 MHz и то приходиться долго ждать результатов.
Исправил:
"RRCA" по #0BDC тоже должна копировать биты 3 и 5 результата сдвига в F.
Кроме того, "BIT 1, (IY + 1)" по #0B03 ошибочно взводит SF и не взводит флаг 3 при IY=#5C3A. #5C = %1011100 -- 3-й разряд взведен.
Lisitsin
01.03.2011, 17:42
Работаю ...
Lisitsin
01.03.2011, 19:52
Я там вас ещё не замучил? Да, код у меня .... на какой мы там строчке от начала?
Я правильно понимаю, BIT n, (IX/Y+d):
1. при n=3, 5, 7 должна копировать ,бит 3, 5, 7 из тестируемого байта соответственно в F3, F5, SF. Тогда влияет ли она на флаги (F5, SF), (F3, SF), (F5, SF) при n=3, 5, 7 соответственно?
2. При n=0, 1, 2, 4, 6 копирует в F3, F5 биты 3, 5 из HIGH (IX(Y)+d). FS при этом не меняется. (?)
Трейсинг шлю.
Я там вас ещё не замучил? Да, код у меня .... на какой мы там строчке от начала?
Намана. :) На 225-й строке. Если игнорировать флаги 3 и 5, то на 695-й строке. Уже кое что. :)
Я правильно понимаю, BIT n, (IX/Y+d):
1. при n=3, 5, 7 должна копировать ,бит 3, 5, 7 из тестируемого байта соответственно в F3, F5, SF. Тогда влияет ли она на флаги (F5, SF), (F3, SF), (F5, SF) при n=3, 5, 7 соответственно?
Нет, во флаги 3 и 5 эти инструкции копируют биты 3 и 5 старшей половины IX/Y+d. Независимо от значения n. Если и только если тестируемый бит сброшен, эти инструкции взводят ZF и PF. Если и только если тестируется бит 7 и он взведен, взводится флаг SF. MEMPTR присваивается значение IX/Y+d. Тоже независимо от значения n.
---------- Post added at 20:42 ---------- Previous post was at 20:32 ----------
Трейсинг шлю.
Сломали RRCA: при A=#01 взводит SF. Эта инструкция не должна менять SF, ZF и PF, что бы там ни получалось после сдвига.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot