Просмотр полной версии : ZX Spectrum: аппаратная реализация на восьми микросхемах
Частов за десять доходт сюда: (может по-дольше подождать?)
За десять часов он должен был подальше уйти. Но уже сейчас видно, что есть над чем работать.
Zexall отличается от z80tests тем, что в первом тестируются инструкции с разными операндами, а во втором с одними и теми же. Тесты на "alu #nn" у вас проходят, а те же alu с регистрами уже не работают, хотя результат и флаги у них вычисляются совершенно одинаково. Значит, прежде всего нужно найти различия в реализациях этих инструкций и устранить их.
Lisitsin
27.03.2011, 12:41
За десять часов он должен был подальше уйти. Но уже сейчас видно, что есть над чем работать.
Тесты на "alu #nn" у вас проходят, а те же alu с регистрами уже не работают, хотя результат и флаги у них вычисляются совершенно одинаково. Значит, прежде всего нужно найти различия в реализациях этих инструкций и устранить их.
Не понял, а что это за alu #nn? (простите мне мою неграмотность)
Не понял, а что это за alu #nn?
Речь идет об операциях ALU с ргеистром A: ADD, ADC, SUB, SBC, AND, XOR, OR и CP. Судя по видео, варианты с непосредственным операндом у вас работают как положено, а с операндами-регистрами и (HL) -- нет.
Lisitsin
27.03.2011, 16:46
Да ... Так просто к этому делу не подлезть ...:v2_conf2:
А со стартом вы мне можете помочь? Может там глюк и сдастся?
Да ... Так просто к этому делу не подлезть ...
Большая проблема с ZEXALL в том, что после каждой правки он потребует уйму времени для проверки.
OK, подумаем, что еще можно сделать.
А со стартом вы мне можете помочь? Может там глюк и сдастся?
Давайте попробуем. Начиная с PC=#11EF со всеми регистрами. Много строк, наверное, не понадобится.
Lisitsin
27.03.2011, 18:42
Вот здесь он снова в RAM-FILL сваливается:
TRACE_RAM-DONE.zip
По первой же строки видно, что тест памяти проходит только от #FFFF до #5C01. Аппаратные проблемы?
Lisitsin
27.03.2011, 20:31
#FFFF до #5C01
Странное дело ... если проблемы были бы аппаратные то он и во второй раз бы этот тест не проходил. А он со второго раза стартует и нормально ... Мне кажется это опять что-то внутри AVR.
Мне кажется это опять что-то внутри AVR.
Это возможно. Тогда такой вопрос: он при каждом сбросе ведет себя совершенно одинаково? И при каждом сбросе первая строка в трейсинге с HL=#5C00?
Lisitsin
27.03.2011, 22:10
Вот я сделал ещё один проход, но немного раньше RAM-DONE. Получается так, что вдруг перестаёт выполняться команда JR Z и при Z=1 перехода не происходит:
Ведёт себя каждый раз одинаково при каждом сбросе - вертикальные полоски появляются дважды, потом стартует BASIC.
Вот я сделал ещё один проход, но немного раньше RAM-DONE. Получается так, что вдруг перестаёт выполняться команда JR Z и при Z=1 перехода не происходит:
Отличная идея. Но взведенного ZF я в трейсинге не увидел. :)
Смотрите, вот пара строк для ячейки #5BFF, для которой тест проходит:
11ea 3f68 ffff 5bff 3f03 0000 0000 4002
11ed 3f68 ffff 5bff 3f43 0000 0000 4002
Это состояния после первого и второго "DEC (HL)". После первого ZF не должен быть взведен, а после второго -- должен быть взведен. Для этой и всех предыдущих ячеек так и есть.
А для следующей ячейки мы получаем не только неверный ZF, но и вообще странные значения регистра F:
11ea 3f68 ffff 5c00 3fab 0000 0000 4002
11ed 3f68 ffff 5c00 3fab 0000 0000 4002
Что если добавить к регистрам в трейсинге значение ячейки (HL)?
Lisitsin
28.03.2011, 18:24
Что если добавить к регистрам в трейсинге значение ячейки (HL)?
Легко !
Lisitsin
28.03.2011, 19:06
Готово. (HL) шлю в последнюю очередь.
TRACE_RAM-DONE_3.zip
Что-то совсем не похоже на правду. :) Как минимум, значение ячеек не уменьшается.
Lisitsin
28.03.2011, 21:04
Прошу прощения:). Что-то у меня тактовая частота нейроимпульсов сегодня понижена.
TRACE_RAM-DONE_4.zip
Вот что происходит для ячейки #5BFF:
11e9 3f59 ffff 5bff 3f19 0000 0000 4002 02
11ea 3f59 ffff 5bff 3f03 0000 0000 4002 01
11ed 3f59 ffff 5bff 3f43 0000 0000 4002 00
А вот что происходит для ячейки #5C00:
11e9 3f59 ffff 5c00 3f19 0000 0000 4002 ff
11ea 3f59 ffff 5c00 3fab 0000 0000 4002 fe
11ed 3f59 ffff 5c00 3fab 0000 0000 4002 fd
Во втором случае исходное значение ячейки не #02, а #FF, чего не должно быть, если все работает как положено. Значит, дело не в эмуляции "DEC (HL)", а в том, что ячейка #5C00 не уберегла свое значение.
Очень хорошо было бы вывести все случаи модификации этой ячейки в формате PC:старое_значение:новое_зна чение. Если это сложно, то можно вместо ячейки (HL) в трейсинге вывести ячейку (#5C00) и посмотреть в каком месте она сбрасывается в #FF.
Lisitsin
29.03.2011, 17:46
Разница где-то в софте. Шью старую версию - там всё нормально. Сейчас буду подбрасывать поочерёдно все страницы кода и смотреть в какой из них глюк.
Lisitsin
29.03.2011, 23:57
Короче разобрался. Сам виноват. Гонял тест и забыл вернуть начальную инициализацию PC в ноль. Стартовал с адреса 0x04, отсюда и эффект. Сейчас исправил, но проблемы как были так и остаются. Попробую снова запустить zexall.
Lisitsin
31.03.2011, 18:23
А проблеммка с видео оказалась по-сложнее, чем я думал. Картинку засинхронизировать удалось, но грязи ужасно много. прийдётся вводить в схему дополнительный провод от центрального процессора к видеопроцессору и дёргать за него, когда центральный обращается к памяти.
Вот как сейчас выглядит картинка:
http://www.youtube.com/watch?v=m1Wujk6t4QY
Попробую снова запустить zexall.
Есть какие-нибудь результаты?
дёргать за него, когда центральный обращается к памятиТак это (циклы ожидания) уже будет бОльшое отступление от "правильной" эмуляции (картинки на бордюре и т.д.).
balu_dark
01.04.2011, 01:24
А проблеммка с видео оказалась по-сложнее, чем я думал. Картинку засинхронизировать удалось, но грязи ужасно много. прийдётся вводить в схему дополнительный провод от центрального процессора к видеопроцессору и дёргать за него, когда центральный обращается к памяти.
Вот как сейчас выглядит картинка:
http://www.youtube.com/watch?v=m1Wujk6t4QY
В любом случае - сейчас намного приятнее чем было. то что было ранее - ну жутко нервировало.
Lisitsin
01.04.2011, 18:40
Есть какие-нибудь результаты?
Пока нет. Сейчас перелопачиваю весь скрипт. Корректирую обращение к памяти. Обращение к памяти буду сигнализировать по отдельному проводу, который будет отслеживаться видеопроцессором. Неделька понадобится.
Сейчас перелопачиваю весь скрипт. Корректирую обращение к памяти. Обращение к памяти буду сигнализировать по отдельному проводу, который будет отслеживаться видеопроцессором. Неделька понадобится.
Провод нужен для разруливания обращений к памяти процессора и видеопроцессора или для чего-то другого? Если первое, то эмулятор должен делать это не как-нибудь, а вполне определенным образом.
balu_dark
02.04.2011, 12:46
помоему в железе это рулилось так - при 1чке тактового сигнала - память юзал процессор а при нолике тактового - видеоконтроллер. если не ошибаюсь именно это и называлось "прозрачный доступ к памяти". Но было сделано не на всех клонах. Единственно не могу вспомнить к какому из тактовых это привязывалось - 14, 7 или 3.5 мегагерц. Скорее всего к какому либо из первых двух.
Lisitsin
02.04.2011, 13:27
Провод нужен для разруливания обращений к памяти процессора и видеопроцессора или для чего-то другого? Если первое, то эмулятор должен делать это не как-нибудь, а вполне определенным образом.
Провод ввожу для разрешения конфликта обращения к памяти обоих процессоров. Единица будет означать занятость памяти центральным процессором. Видеопроцессор будет отслеживать эту линию и читать память только при нуле на этой линии.
Провод ввожу для разрешения конфликта обращения к памяти обоих процессоров. Единица будет означать занятость памяти центральным процессором. Видеопроцессор будет отслеживать эту линию и читать память только при нуле на этой линии.
Как это реализовано в настоящем Спектруме можно почитать здесь:
http://www.worldofspectrum.org/faq/reference/48kreference.htm
начиная со слов
If you run a program in the lower 16K of RAM, or read or write in that memory, the processor is halted sometimes, as the ULA needs to access the video memory to keep the TV updated; the electron beam can't be interrupted, so the ULA is given a higher priority to access the contended memory.
Это даст общее представление. Возможно, имеет смысл не реализовывать различные схемы "прозрачного" доступа и затем эмулировать логику ULA в части видеовывода, а реализовать разделение доступа между видеопроцессором и основным процессором сразу так, как это сделано в ULA.
сразу так, как это сделано в ULA Это будет неверное решение. Не надо забывать о том, что "там" использовалась динамическая оперативная память и операция обращения к памями разруливалась автоматом, который формировал, в том числе, такие сигналы как RAS и CAS. В данном случае, надеюсь, память другого типа и все "проще". Да и вообще, о каких там приоритетах может идти речь - я, помнится делал автомат, где коллизий не м.б. в принципе и тайминги 565ру5 это позволяли.
Это будет неверное решение. Не надо забывать о том, что "там" использовалась динамическая оперативная память и операция обращения к памями разруливалась автоматом, который формировал, в том числе, такие сигналы как RAS и CAS. В данном случае, надеюсь, память другого типа и все "проще".
Штука в том, что в Спектруме видеовывод, остановки центрального процессора и прерывания жестко связаны между собой. Качественная эмуляция Спектрума подразумевает и эмуляцию этих связей. Поэтому, какого бы типа память ни использовалась, видеовывод приходится реализовывать согласно тому, как работает оригинальный Спектрум с его динамической памятью и всеми остальными особенностями. Я дал ссылку. Почитайте.
Lisitsin
02.04.2011, 22:41
Ну, некоторые продвиги есть. Правда изредка слетает:
http://www.youtube.com/watch?v=DI4us7O4KiY
красиво выглядит! Спрайт пропадает-двоится это глюк записи или так и есть?
какого бы типа память ни использовалась Нда ... действительно. Похоже "имитировать тормоза" так-же придется :)
Вы уж извините, наблюдаю за вашей эпопеей с момента её создания. Прихожу к выводу, что Вы неверно сделали эмуляцию z80. Ибо, через это проходили все создатели эмуляторов на ПЦ. Про Z80, его особенности, есть масса материалов. Включая, недок. особенности. Полагаю, что если бы Вы сделали, хотя бы 99% эмулятор команд Z80, то 54-х страниц на этом форуме не было бы, и у Вас запустился бы без проблем ZX-BASIC. И Большая часть игр. В эмулях, частенько приводится инфа, раскрывающая, что там не так, по сравнению с обычной транскрипцией. Есть команды, которые работают не так как написано. Но в ZX-Basic их нет. У Вас проблемы с загрузкой даже бейсик файлов. О чём это говорит? Да только о некорректной эмуляции Z-80. Я долго нерешался написать, было лень, ждал ну когда же человек-то одумается? Теперь говорю - кривая у вас эмуляция проца. Кроме чтения док надобно все проверять в оочию, на рабочей машинке.. Даже 2 эмулятора могут соврать.
Есть команды, которые работают не так как написано. Но в ZX-Basic их нет. У Вас проблемы с загрузкой даже бейсик файлов.
Дык уже вроде всё грузится без проблем?
А всё остальное???? Не работает ведь? И почему??????
Lisitsin
03.04.2011, 15:25
красиво выглядит! Спрайт пропадает-двоится это глюк записи или так и есть?
Запись кривая. На экране всё ровно.
---------- Post added at 15:22 ---------- Previous post was at 15:19 ----------
Нда ... действительно. Похоже "имитировать тормоза" так-же придется :)
Не понял. А что, ходит быстрее чем надо чтоли?
---------- Post added at 15:25 ---------- Previous post was at 15:22 ----------
Вы уж извините, наблюдаю за вашей эпопеей с момента её создания. Прихожу к выводу, что Вы неверно сделали эмуляцию z80. Ибо, через это проходили все создатели эмуляторов на ПЦ. Про Z80, его особенности, есть масса материалов. Включая, недок. особенности. Полагаю, что если бы Вы сделали, хотя бы 99% эмулятор команд Z80, то 54-х страниц на этом форуме не было бы, и у Вас запустился бы без проблем ZX-BASIC. И Большая часть игр. В эмулях, частенько приводится инфа, раскрывающая, что там не так, по сравнению с обычной транскрипцией. Есть команды, которые работают не так как написано. Но в ZX-Basic их нет. У Вас проблемы с загрузкой даже бейсик файлов. О чём это говорит? Да только о некорректной эмуляции Z-80. Я долго нерешался написать, было лень, ждал ну когда же человек-то одумается? Теперь говорю - кривая у вас эмуляция проца. Кроме чтения док надобно все проверять в оочию, на рабочей машинке.. Даже 2 эмулятора могут соврать.
Дак я ж не волшебник, я только пока учусь ... Здесь Higgins рулит, я так, исполнитель ...
Не понял. А что, ходит быстрее чем надо чтоли?
Без реализации задержек центрального процессора при обращении к видеопамяти и портам некоторые вещи будут работать неправильно, либо вообще не будут работать. Прежде всего это касается спецэффектов, основанных на четкой связи между моментом выборки байта из видеопамяти или цвета бордюра и количеством тактов от начала прерывания, которые к этому моменту должен отработать центральный процессор. Такие эффекты называются мультиколорами.
Среди других неприятностей могут быть искажение звука и мерцание или даже полное исчезновение спрайтов. И все это может быть даже если времянки исполнения инструкций выдержаны точно. Если же и с ними проблемы, то ко всему перечисленному могут добавиться и проблемы с загрузкой файлов, особенно, если речь идет о турбозагрузчиках.
Может быть, сейчас самая важная задача -- пройти ZEXALL хотя бы для основных инструкций.
Lisitsin
03.04.2011, 16:28
Может быть, сейчас самая важная задача -- пройти ZEXALL хотя бы для основных инструкций.
Согласен. Но боюсь здесь будет нужен более серьёзный инструсент, не такой медленный как порт клавиатуры PC/2.
Zexall стоит на том же самом месте:
Lisitsin
03.04.2011, 17:31
Видеопроблема до конца не решена. Чёрточки при загрузке и во многих играх слетает синхронизация кадров. Буду решать дальше.
ELITE:
http://www.youtube.com/watch?v=F0hAsGGJ9gk
Но боюсь здесь будет нужен более серьёзный инструсент, не такой медленный как порт клавиатуры PC/2.
Набросал пару строк. Этот код сравнивает значения регистра AF после операций ALU с непосредственным операндом с теми же операциями ALU с регистровыми операндами. Во время тестирования бордюр белый и результаты выводятся в область атрибутов. Остановка теста с зеленым бордюром означает успешное завершение теста. Красный бордюр означает найденную ошибку. В этом случае интересно содержимое экрана, которое может помочь уточнить проблемное место.
Загружать и запускать код можно так. Набрать:
LOAD "" CODE 18432 : PRINT USR 18432
и пустить ленту.
Lisitsin, а вы через ТВ тюнер подключаетесь? Попробуйте через ТВ. Интересно будут такие помехи или нет.
Lisitsin
04.04.2011, 17:59
Загружать и запускать код
Благодарю за помощь !!! Сделал.
http://www.youtube.com/watch?v=I816LApX3NM
Только не очень то мне видно цвет бордюра ....
Может можно его узнать через PRINT PEEK какой нибудь?
---------- Post added at 17:59 ---------- Previous post was at 17:57 ----------
Lisitsin, а вы через ТВ тюнер подключаетесь? Попробуйте через ТВ. Интересно будут такие помехи или нет.
Модулятора нет. Сейчас паяю видеокодер на CXA1645. ПАЛ или NTSC какой-нибудь. Если получится.
Только не очень то мне видно цвет бордюра ....
Пока квадратики мелькают, тест работает. Когда перестанет мелькать покажите скриншот и по нему будет понятно есть проблема или нет.
Lisitsin
04.04.2011, 23:08
Вот что получается:
Вот что получается:
Это значит, что есть проблемы с самим исполнением теста.
Давайте попробуем локализовать проблему. В приложении к этому сообщению лежит модифицированная программка. Загружется и исполняется так же, как прежняя. Изменены цвета бордюра (голубой в случае успеха и черный в случае ошибки) и HALT заменен на вечный цикл.
Если тест завершится корректно, т.е. пусть даже с черным бордюром, но без квадратов в нижних двух третях экрана, значит есть проблемы с исполнением HALT при запрещенных прерываниях. Если эти две трети экрана заполнятся квадртами снова, нужно будет знать содержимое 16-ти квадратов в пятой строке сверху перед остановкой теста. У вас в скриншоте эта строка вся заполнена светлыми квадратами, чего не должно быть никогда, поэтому нужно содержимое этой строки непосредственно до, пока она еще что-то значит.
Lisitsin
05.04.2011, 22:49
Финал получается таким:
Финал получается таким:
Прошли успешно. Делаем два вывода:
1) HALT не работает как положено с запрещенными прерываниями и
2) Проблема с операциями ALU в инструкциях с операндом (HL), таких как XOR (HL). Это те инструкции, которые не проверяются в тесте. Если сходу найти ошибку не получится, я попробую сделать специальный тест на эти инструкции.
Lisitsin
05.04.2011, 23:45
HALT не работает как положено с запрещенными прерываниями
Спасибо. Вот как я его делаю:
Я, честно говоря, очень сомневаюсь в возможности эмуляции процессора на такой низкой частоте МК.
самое главное зачем?
Зачем эмулировать процессор процессором, когда он свободно продается...
Понимаю АУ или УЛА эмулировать, первую трудно найти, второй нет.
Вторую сам бог велел сделать на программируемой матрице, как она и была в реальном фирменном спеке...
Все делано переделано, но щас почитаю во что все это вылилось :)...
Клон, это на тяжелые постъядерные времена, когда небудет z80
CodeMaster
06.04.2011, 08:30
Вторую сам бог велел сделать на программируемой матрице, как она и была в реальном фирменном спеке...
Conan вроде давно должен был получить книгу где должна быть полностью описАна ULA, но что-то молчит, видно увлёкся чтением ;-) Единственно, я что-то не знаю есть подходящие ПЛИС в DIP-40, что бы можно было полностью заменить оригинал или придётся на переходнике ПЛИСину делать.
ПЛИС в DIP-40, что бы можно было полностью заменить оригинал или придётся на переходнике ПЛИСину делать
неплохо было бы сделать взаимозаменяемую с оригиналом, чтобы можно было фирменные модели ремонтировать и подправлять глюки, которые нежелательно присутвуют...
Думаю можно было бы через плату-переходник сделать совместимость с оригинальной разводкой.
ну, судя по топику эта полноценная замена и рождается на меге.
ну, судя по топику эта полноценная замена и рождается на меге.
нужно делать матрицу
где должна быть полностью описАна ULA
Не обязательно лепить прям точно такую же как была, можно сделать совместимую электрически. Тем более нам нужны свои инты и прочие фишки...
CodeMaster
06.04.2011, 17:31
чтобы можно было фирменные модели ремонтировать
Ну а для чего она ещё нужна, ИМХО только для этого
ну, судя по топику эта полноценная замена и рождается на меге.
Ну варианта замены я тут не увидел, это проект сам в себе, кроме того ULA разнесена минимум на 3 ИМС ATMega128, ATtiny2313 и SN74S257
---------- Post added at 17:31 ---------- Previous post was at 17:28 ----------
Не обязательно лепить прям точно такую же как была, можно сделать совместимую электрически.
Это рождение неизвестных глюков, вместо известных, отталкиваться надо от оригинала, а остальное это штучные потребности.
Lisitsin
06.04.2011, 17:34
Я бы хотел внести некоторое уточнение в рассуждения. Дело в том, что я (теперь уже мы (вместе с Higgins)) эмулируем не столько процессор Z80, сколько Specrum весь целиком. Более того, живой Z80 обладает некоторой избыточностью, которую нге требуется эмулировать, что упрощает задаче. А вот реальная эмуляция Z80 на AVR я боюсь невозможна (скорее всего не хватит производительности на имитацию сигналов шины управления в дополнение к уже написанному).
CodeMaster
06.04.2011, 17:39
эмулируем не столько процессор Z80, сколько Specrum весь целиком.
Я то так и считал с самого начала, это Клон как всегда во флуд переводит ;-) Хотя реализация ULA на ПЛИС, пусть не в рамках данного проекта интересная идея.
Lisitsin, как закончишь этот проект, раскури её поподробней.
Lisitsin, возможно вы не видели этот сайт http://www.zxdesign.info/harlequin.shtml и некоторая информация с него окажется полезной.
это Клон как всегда во флуд переводит ;-)
вот стрелки не надо переводить...
не столько процессор Z80, сколько Specrum весь целиком.
Эмулятор спектрума и так есть на ПЦ. В чем разница? Если просто для спортивного интереса, то тут дело хозяйское.
Дык уже ULAPlus вроде как уже сделали....
Lisitsin
06.04.2011, 18:31
Эмулятор спектрума и так есть на ПЦ. В чем разница? Если просто для спортивного интереса, то тут дело хозяйское.
Это попытка сделать ZX Spectrum на максимально простой аппаратной реализации, доступной к сборке любым радиолюбителем.
Это попытка сделать ZX Spectrum на максимально простой аппаратной реализации, доступной к сборке любым радиолюбителем
это , в принципе, уже сделано, и более проще и изящно.
ULA нет...
Вот если бы сделать
один корпус ULA (любой клон)
один корпус AY
один корпус ВГ93
один корпус Z80 (для спортивного интереса)
вот эти задачки были бы интересны, о чем кодермастер и говорил...
---------- Post added at 18:59 ---------- Previous post was at 18:53 ----------
Дык уже ULAPlus вроде как уже сделали....
вот было бы неплохо ULA
классическую на 40 выводах с разводкой под фирменный 48к и 128к
и ULA Amstrad 100 выводов.
Копировать один в один необязательно, что должен делать этот черный ящик и так знают, он на рассыпухе и так вскрыт, делай реализуй на матрице ну или на проце, если сможешь без обвеса уложиться...
Это попытка сделать ZX Spectrum на максимально простой аппаратной реализации, доступной к сборке любым радиолюбителем.
а на чём им прошивать микроконтроллеры ? да и припаяет их далеко не каждый радиолюбитель.
AHTuXPuCT
06.04.2011, 19:13
goodboy - радиолюбитель припаяет всё!
а на чём им прошивать микроконтроллеры ? да и припаяет их далеко не каждый радиолюбитель.
я умею паять любые микросхемы и у меня есть программатор и паяльная станция
я самый обычный радиолюбитель, можно сказать даже посредственный.
---------- Post added at 19:53 ---------- Previous post was at 19:51 ----------
прошивать микроконтроллеры
здесь предпринимателей много, сразу начнут продавать прошитые на любой скус по сходной цене
Lisitsin, вы здесь? За толпой доброжелателей не разглядеть. :)
Попробуйте тест в приложении. Загружается и запускается так же.
Lisitsin
06.04.2011, 22:18
Я здесь ...
Нашёл ряд ошибок в формировании S флага после инструкций CP8. Тест сейчас загружу.
Lisitsin
06.04.2011, 22:33
Тест короткий? Сразу вижу сею картинку: (вложение)
СР исправил, но буква "n" в РОВОСОРе всё равно кривляется.
Есть ещё кое какой нюанс с (HL): на границе 3fff-4000 читает оба байта из ROM, а на границе ffff-0000 читает оба байта из RAM. Не знаю насколько это смертельно.
Сразу вижу сею картинку:
Отлично. Это значит, что "ADD A, #00" и "ADD A, (HL)", где в (HL) лежит #00 дают различие в AF.
Условие для трассировки: PC=#48AC ИЛИ #48AE ИЛИ #48BD ИЛИ #48BE. Регистры PC, HL и AF.
Lisitsin
07.04.2011, 17:17
[QUOTE=Higgins;373536]
Как я понял, это для Higgins_alu_hl?
Тогда во вложении.
Господа, уже около 600 топиков, а дела не движутся. Хотелось бы обсуждать уже железку, а не эмуляцию кода и не среди всего двух человек. Наверное есть для этого личка. Любой зашедший в эту тему со стороны (я то слежу с первого топика) ничего не увидит кроме диалога.
Lisitsin
07.04.2011, 18:14
Господа, уже около 600 топиков, а дела не движутся. Хотелось бы обсуждать уже железку, а не эмуляцию кода и не среди всего двух человек. Наверное есть для этого личка. Любой зашедший в эту тему со стороны (я то слежу с первого топика) ничего не увидит кроме диалога.
А можно в личку файлы слать? что-то я не понял как.
TRACE_HIGGINS _ALU_HL_1.zip
Снова кладем в память одно, а читаем из нее другое:
#48AC ADD A, #FF ; AF = #FEB9
#48AE PUSH AF
#48AF POP IY
#48B1 LD (#48DB), IY ; сохраняем
...
#48BA LD HL, #48AD
#48BD ADD A, (HL) ; AF = #FEB9 тоже, что очень хорошо
...
#48C1 LD IY, (#48DB)
#48C5 LD A, IYH ; A = #FF вместо сохраненного #FE
Очень похоже на прежние проблемы.
Господа, уже около 600 топиков, а дела не движутся. Хотелось бы обсуждать уже железку, а не эмуляцию кода и не среди всего двух человек. Наверное есть для этого личка. Любой зашедший в эту тему со стороны (я то слежу с первого топика) ничего не увидит кроме диалога.
На мой вкус, работать через личку и не удобно, и не правильно. Можно просто договориться, что Lisitsin сделает отдельную тему для анонсов по этой железке. Когда и если до них дойдет дело. :)
Lisitsin
07.04.2011, 20:07
Отлично !!! Работаю.
Господа, уже около 600 топиков, а дела не движутся. Хотелось бы обсуждать уже железку, а не эмуляцию кода и не среди всего двух человек. Наверное есть для этого личка. Любой зашедший в эту тему со стороны (я то слежу с первого топика) ничего не увидит кроме диалога.
Я наоборот слежу за этим топиком, т.к. интересно узнать тонкости эмуляции Z80-ядра. Так что, думаю, пусть наши друзья пишут здесь ;)
Lisitsin
09.04.2011, 18:42
Нашёл ошибки в эмуляции команд LD (nn), IX, LD (nn), IY. После исправления трейсинг изменился в лучшую сторону (вложение), но проблемы с игрушками всё равно остаются. Запускаю zexall.
TRACE_HIGGINS _ALU_HL_1_1.zip
Здесь все проходим. Если zexall в этой части не пройдем, тогда понадобится больше строк.
Lisitsin
10.04.2011, 00:25
Последние результаты:
Lisitsin
10.04.2011, 01:04
Собрал тут композитный видеокодер (схема во вложении), но что-то плохо он работает (http://www.youtube.com/watch?v=XxrYCxRu_c0). В динамике вообще теряется.
Интересное подключение кварца Q1. И зачем транзистор VT1 нужен? Эта схема работала когда ставишь генератор на ЛН1 с соответствующим кварцем и подаёшь на вывод 6 D1.
Lisitsin
10.04.2011, 08:42
Интересное подключение кварца Q1. И зачем транзистор VT1 нужен? Эта схема работала когда ставишь генератор на ЛН1 с соответствующим кварцем и подаёшь на вывод 6 D1.
Вот и я говорю. Плохо что-то она работает. В даташите пишут, что размах синхронизации должен быть почти от пола и почти до потолка, а там меньше вольта получается.
http://www.youtube.com/watch?v=4ywDLit-Jh0 - в цвете
Lisitsin, отсутствует красный и голубой, зеленый. По идее регулируется на входе палкодера, подстроечными резисторами.
Так должно выглядеть ftp://ftp.worldofspectrum.org/pub/sinclair/screens/load/r/gif/RainbowIslands.gif
Последние результаты:
При этом z80test все еще проходим?
Lisitsin
10.04.2011, 12:30
При этом z80test все еще проходим?
В начале всё проходит, в конце - во вложении.
Появляется и пропадает странный глюк: при PRINT 2 в бейсике пишет 1. (и не только 2). При этом DAA Z80tests проходит. Можно сделать трейсинг с момента 1024:ED-ENTER после команды PRINT 1.
В начале всё проходит, в конце - во вложении.
Попробуйте тест во вложении. Он тестирует инструкции вида "alu A, A".
Lisitsin
10.04.2011, 15:18
Попробуйте тест во вложении.
Попробовал:
Попробовал:
Имеем следующее:
1) Видимо правильно работающие инструкции ALU и
2) Ошибку ZEXALL на этих инструкциях.
Остается подозревать код счета контрольной суммы в ZEXALL. Попробую найти подходящее условие для трейсинга.
Появляется и пропадает странный глюк: при PRINT 2 в бейсике пишет 1. (и не только 2). При этом DAA Z80tests проходит. Можно сделать трейсинг с момента 1024:ED-ENTER после команды PRINT 1.
Это ценная информация. Давайте разберемся с ALU и затем посмотрим на этот глюк внимательнее.
* * *
UPDATE: Условие такое. Тресинг начинаем после того, как управление пятый раз пройдет по адресу PC=#9A0B. Это значит, начинаем трейсинг с пятого теста. В самом трейсинге в моменты прохождения управления через PC=#9C41 выводим содержимое четырех смежных ячеек: #9D5F, #9D60, #9D61 и #9D62. В них хранится текущая контрольная сумма.
Lisitsin
10.04.2011, 17:40
Начало такое:
TRACE_ZEXALL_ALU.zip
Здесь совпадаем.
Всего в трейсинге для пятого теста у меня получилось 770049 строк. В приложении архив с тресингом каждой тысячной строки. Если сможете вывести только эти тысячные строки, посмотрите, с какой строки начинается различие.
Lisitsin
12.04.2011, 17:14
По всей видимости с контрольной суммой порядок, и при всём этом пятый тест проваливается:
По всей видимости с контрольной суммой порядок, и при всём этом пятый тест проваливается:
Давайте все-таки проверим это до конца. Сможете вывести все контрольные суммы начиная со строки
770000 55 9c 03 08
и до начала шестого теста?
Lisitsin
12.04.2011, 20:27
Сможете вывести все контрольные суммы начиная со строки
и до начала шестого теста?
На четвёртые сутки всё ж таки поймал:
TRACE_ZEXALL5_3.rar
Сравнение контрольных сумм дает ошибку. При этом сама контрольная сумма правильная -- 1DFD7864. На вашем скриншоте тест выдает эту сумму, а ожидает по какой-то причине 06C7AA8E.
Попробую узнать, откуда может взяться неправильная эталонная сумма.
* * *
Эталоны лежат в памяти начиная с #8105 для первого теста и далее для каждого теста со смещением #5F:
Тест 1: #8105
Тест 2: #8164
Тест 3: #81C3
Тест 4: #8222
Тест 5: #8281
Тест 6: #82E0
Нам нужен шестой тест. В моем снапшоте по адресу #82E0 я вижу ожидаемое 1D FD 78 64.
Код сверки с эталонной суммой можно поймать по адресу #9D0F. В этот момент в HL должен быть адрес эталонной суммы.
Вопрос в том, чему у вас равно значение HL при проходе через #9D0F для нашего шестого теста. И если это значение правильное (#82E0), то что лежит по этому адресу. А если там лежит 1D FD 78 64, то почему "CP (HL)" в коде сверки не дает взведенный ZF.
Lisitsin
15.04.2011, 18:32
Для шестого теста по проходу через #9d0f вывожу PC:HL:[82E3]:[82E2]:[82E1]:[82e0]:
TRACE_ZEXALL5_4.zip
Первая строка:
9d0f 82e0 8e aa c7 06
Это значит, что к моменту проверки мы приходим с правильным адресом эталонной суммы, но сама эталонная сумма неправильная. Посмотрю, откуда она там такая берется.
* * *
Эталоны сумм лежат на месте сразу после загрузки. Никаких распаковываний или перемещений. Каким образом у вас загружается код так, что эталон получается настолько непохожим -- загадка.
* * *
Так. :) Еще раз: берем версию теста, которую я давал здесь:
http://zx.pk.ru/showthread.php?p=369566#post369566
Судя по скриншотам, вы грузите оригинальную версию. :)
Lisitsin
16.04.2011, 16:58
упс !!! что-то не похоже. Распаковывалась как zexall. Скачал zexfix, пробую
упс !!! что-то не похоже. Распаковывалась как zexall. Скачал zexfix, пробую
В архиве лежит zexfix.tzx .
Lisitsin
16.04.2011, 19:46
:v2_conf2:Вот что переутомление делает ...
Скачал и запустил zexfix. А выгдядит начало прямо как zexall.
Шесть тестов прошло, седьмой валится. Тестируется дальше
Lisitsin
16.04.2011, 20:38
Седьмой тест не проходит, а на восьмом по ходу дела вообще зависает - уж слишком равномерные чёрточки я вижу на экране ...
Седьмой тест не проходит
Давайте посмотрим на контрольные суммы на этом тесте. Получить их можно точно так же, как для шестого. Для начала давайте возьмем несколько тысяч первых сумм.
Lisitsin
17.04.2011, 19:33
Для седього теста получается: (вложение).
Там где в контрольных суммах вопросительные знаки - скорее всего повторяющийся символ, например, 7? c большой вероятностью 77.
TRACE_TST7.zip
Отличие в пятой строке. Достаточно будет сделать немножко трейсинга с самого начала седьмого теста со всеми регистрами.
Lisitsin
21.04.2011, 21:00
Спасибо, делаю.
Я тут сделал одну удобную вещ:
при нажатии на F11 девайс копирует все внутренние регистры и рабочие 48 K внешней RAM во flash память видеопроцессора, а по клавише F12 происходит ровно обратное. Сейчас гоняю - работает. Реальная поддержка в случае с zexfix.
Иллюстрирую работу:
http://www.youtube.com/watch?v=-ueHjO0F1nU
(в памяти уже было начало z80tests, но прошедшее без команды DAA)
Lisitsin
22.04.2011, 20:25
Готово: (вложение)
Но функция эта что-то пока не совсем корректно работает. Экспериментировал на ROBOCOPе:
http://www.youtube.com/watch?v=R5Alk-XgDg8
какой-то сбой происходит. Вроде бы сохраняю всё состояние, включая даже MEMPTR и состояние прерывания. Может быть надо учитывать время прихода прерывания?
zexfix не восстанавливается. Потом уходит в сбой. А z80tests восстанавливается нормально ...
TRACE_TST7_2.zip
Нужно больше строк.
Lisitsin
25.04.2011, 17:07
Нужно больше строк.
Можно и больше:
TRACE_TST7_3.zip
Инструкция
#9C09 ADD A, IXH
До исполнения:
9c09 c035 22dd 2847 38c5 accf c76e 234b
Получаем:
9c0b c035 22dd 2847 e4b0 accf c76e 234b
Должно быть:
9c0b c035 22dd 2847 e5b0 accf c76e 234b
У меня получается #38 + #AC = #E4. Откуда #E5? :)
Lisitsin
25.04.2011, 22:10
:v2_conf2:Ничего не понял
Lisitsin
29.04.2011, 17:47
Докладаю обстакановку: схема ужалась на один чип (вложение).
А в принципе можно выбросить стабилизатор питания (митаться всё равно надо от адаптера). И Attiny2313 можно выбросить и подключить обычную клавиатуре. И вот тогда реально будет 5 чипов.
Lisitsin, Сколько реально по цене такой спек получяется, если плату лутом сделать? Озу у него всего 48 кб исользуется?
Lisitsin
29.04.2011, 18:05
Игрушка в цвете:
http://www.youtube.com/watch?v=eA3i6YxVjS8
---------- Post added at 18:05 ---------- Previous post was at 18:01 ----------
Lisitsin, Сколько реально по цене такой спек получяется, если плату лутом сделать? Озу у него всего 48 кб исользуется?
Себестоимость без платы около 1200 руб. Самые дорогие - атмеги - рублей по 300-350. ОЗУ у него вообще 128 к (пригодится для пентагона в будущем) но используется реально только 48.
Black_Cat
29.04.2011, 19:14
О! Давно не заглядывал, а оно оказывается уже работает :) . Т.е. наконец можно поздравить товарища Lisitsin'а с победой принципа над здравым смыслом! :) . Теперь уже с высокой долей вероятности можно сказать что и такой программно-аппаратный эмулятор не только теоретически возможен, но и реально реализуем! Ура товарисчи! :)
Какие выводы уже можно сделать:
1) Таой компьютер явно не проще и не дешевле в производстве, чем компьютер на ПЛИС, хотя по стоимости и сопоставим.
2) Сложность разработки такого компьютера на порядки выше чем компьютера на ПЛИС.
Т.е. изначальный тезис о том, что проще собрать Спектрум из того что есть под рукой, вместо того чтоб как все купить более приспособленный для таких целей набор микросхем - оказался ложным, что собсно и предполагалось изначально :) .
Но сам по себе факт существования такого Спектрума - уже достижение достойное книги рекордов Гиннеса :)
Lisitsin
29.04.2011, 19:31
Выражаю свою неограниченную благодарность БК-0010 за то, что он познакомил меня с Higgins, который и оказал мне неоценимую помощь в исправлении ошибок эмуляции Z80.
По поводу плисовых спектрумов: ну надо же им всё таки конкуренцию составить, хоть какую-то ... :)
Какие выводы уже можно сделать:
Сей продукт ничем не отличается от эмулятора на ПЦ, там по сути тоже микропроцессорная система, на которой программно эмулируется работа другой микропроцессорной системы... Как было известно и ранее теоретически - от перестановки мест слагаемых сумма не изменяется. :v2_dizzy_roll:
:)111111111:)111111111111111111:)11111111111:)
1111111:)111111111:)11111111:)111111111:)11111111
1:)111111:)11111111:)1111111111111:)1111111:)111
Сей продукт ничем не отличается от эмулятора на ПЦ ...
Ну это мнение с точки зрения "геймера". Идея и реализация (!), пусть и любительская, перевесит любые проекты, где используются готовые IP-core и аппаратные платформы. Это я с точки зрения зрения инженера и работа-нанимателя.
Hm, Head hunter? Т.Е. лисицин может расчитывать на зп с 6ю нулями?:)
solegstar
29.04.2011, 21:40
Но сам по себе факт существования такого Спектрума - уже достижение достойное книги рекордов Гиннеса :)
А со спеком всегда так, незаметили что-ли??? :)
PS: уже последние ннннадцать лет!
Black_Cat
29.04.2011, 21:46
Клон, :) не суйся со свинным рылом, да в калашный ряд :) - не по тебе это вопрос :) . Есть эмуляторы программные (их называют просто "эмулятор"), есть эмуляторы аппаратные (это собсно все отечественные клоны), а это эмулятор программно - аппаратный - зверь до сих пор невиданный :)
osa
А то :)
Для чего-же делается большая часть открытых проектов ... Как минимум "для души" и "резюме". Что главнее для "автора" не важно, а то, что "ничего не пропадает" это однозначно (убеждался не раз).
а это эмулятор программно - аппаратный - зверь до сих пор невиданный
обычный эмулятор :) никакой он не аппаратный :) все отличие, что он написан не для ПЦшной системы, а для системы на базе промышленного процессора Атмел :) и еще, что эта система самостоятельно спроектирована (не куплена в магазине) :). Во всем остальном :) это обычный эмулятор.
Плюсы :) в этом сомнительны, зачем создавать систему :) и записывать в нее эмулятор, :) когда уже есть готовый компьютер, только пиши эмулятор на свой вкус и радуйся :)?
Я с твоим концептом не согласен :)
эмулятор может быть либо программный :) либо аппаратный :)
Программно-аппаратным эмуль был бы, если :) он был бы частично аппаратно реализован, частично программно:)
Что в нем аппаратного, кроме самой микропроцессорной системы, которая не в счет :)?
Ничего не понял
Я неправильно поймал инструкцию. Речь идет о строке 22536 трейсинга. Она соответствует инструкии #DD #8C, т.е. ADC A,IXH. Значит, после исполнения в регистре должно быть #E5. Судя по трейсингу, у вас там получается #E4.
Lisitsin
30.04.2011, 01:58
#DD #8C, т.е. ADC A,IXH
Реальная у меня тут ошибка. И в IXH и в IXL не учитывался флаг С. Исправил, гоню zexfix. Премного благодарен !!!
CodeMaster
30.04.2011, 07:40
Что в нем аппаратного, кроме самой микропроцессорной системы, которая не в счет
Типо ты прав, но это и не софт-эмулятор, это скорее виртуальная машина.
но это и не софт-эмулятор
ну тогда следующий шаг - написать сначала ОС для этой системы, а уж потом под нее эмулятор.
Такого Спекка пока еще тоже нет!
Пришли плохие дяди и устроили здесь дискуссию... Lisitsin, не обращай внимания, продолжай!
Пришли плохие дяди и устроили здесь дискуссию...
против автора проекта никто ничего не имеет, не нужно тут нагнетать.
Клонище, кончай Диззиков стадами гонять, обидятся.
И флудить заканчивайте.
кончай Диззиков стадами гонять
меня Чёрный заразил.
Lisitsin
01.05.2011, 11:12
Всем доброго времени.
Информация для Higgins: ошибку исправил, но седьмой тест всё равно валится. Трейсинг прилагаю.
TRACR_TST7_5.zip
В строке 48579 после исполнения SBC IXH получаем:
9c0b c035 22dd 2847 0f1a accf c76e 234b
Должно быть:
9c0b c035 22dd 2847 8b9f accf c76e 234b
Lisitsin
01.05.2011, 20:27
:) :) :)
Операнд вместо IXH просто H
Lisitsin
02.05.2011, 09:03
Седьмой тест прошёл. А восьмой похоже вообще зависает. Не заканчивается чего-то совсем. Может просто мало жду (часов 6 наверное)?
А происходит в нём следующее: (вложение)
Может просто мало жду (часов 6 наверное)?
Замерил время работы тестов. Ниже следует табличка для тестов Zexfix. Указано количество часов и минут от начала работы до старта теста с соответствующим номером.
#1 0:00
#2 0:12
#3 0:17
#4 0:23
#5 0:29
#6 0:32
#7 2:14
#8 3:07
#9 3:33
#10 3:33
#11 3:40
#12 3:41
#13 3:42
#14 3:48
Тресинг посмотрю.
* * *
UPDATE:
TRACR_TST8_1.zip
Здесь совпадаем. Можно сравнить первые контрольные суммы.
Lisitsin
03.05.2011, 10:24
Выдаёт четыре контрольные суммы и встаёт:
9C41 3B F0 D7 0E; 9C41 71 79 72 6A; 9C41 2E 69 19 C9; 9C41 22 77 9C E2;
Весь трейсинг во вложении.
TRACR_TST8_2.zip
После исполнения ADC A, (IX+d) получаем:
9c0c c1dc 406e 32fd 2565 8002 8002 e5fa
Должно быть:
9c0c c1dc 406e 32fd 2531 8002 8002 e5fa
* * *
UPDATE: Если сравнивать только значения регистра PC, то трейсинг совпадает с тем, что должно быть. То есть, до потери управления трейсинг не дошел.
Lisitsin
03.05.2011, 16:33
Прогнал ещё раз:
Lisitsin
03.05.2011, 16:43
Ошибку нашёл ! Спасибо !!!
В эмуляции ADC A, (IX+d) флаги попадали не во флаговый регистр, а во временный.
Исправил, но игрушки без особых изменений. Гоню Zexall. кстати, а можно её как-нибудь через PRINT USR xxxx запускать сразу с требуемого теста?
Lisitsin
05.05.2011, 21:12
Нашёл ещё одну ошибку. Прогнал до конца, не проходит всего два теста: BIT n (b, c, d, e, h, l, (hl), a), INC/DEC ((IX/IY)+1). Трейсинг во вложении - для десятого теста.
Трейсинг во вложении - для десятого теста.
Не похоже. Значение BC для каждого следующего теста увеличивается на #5F. В начале седьмого он равен #82B8. Для десятого он должен быть #82B8 + #5F * 3 = #83D5, т.е. первая строка должна начинаться так:
9a0b 83d5 ...
А в целом замечательные результаты. Еще чуть, и дожмем.
Насчет запустить исполнение с заданного теста -- попробую покопать.
Lisitsin
07.05.2011, 21:41
Есть несколько тысячных контрольных сумм десятого теста (вложение)
Lisitsin
08.05.2011, 19:41
Трейсинг десятого теста:
TRACE_TST10_3.zip
Это трейсинг для 11-го теста. В начале 10-го BC должен быть #83d5.
Ниже следует табличка со значениями BC при прохождении управления через PC=#9a0b для всех тестов, начиная с второго.
2 80dd
3 813c
4 819b
5 81fa
6 8259
7 82b8
8 8317
9 8376
10 83d5
11 8434
12 8493
13 84f2
14 8551
15 85b0
16 860f
17 866e
18 86cd
19 872c
20 878b
21 87ea
22 8849
23 88a8
24 8907
25 8966
26 89c5
27 8a24
28 8a83
29 8ae2
30 8b41
31 8ba0
32 8bff
33 8c5e
34 8cbd
35 8d1c
36 8d7b
37 8dda
38 8e39
39 8e98
40 8ef7
41 8f56
42 8fb5
43 9014
44 9073
45 90d2
46 9131
47 9190
48 91ef
49 924e
50 92ad
51 930c
52 936b
53 93ca
54 9429
55 9488
56 94e7
57 9546
58 95a5
59 9604
60 9663
61 96c2
62 9721
63 9780
64 97df
65 983e
66 989d
67 98fc
68 995b
Kakos_nonos
11.05.2011, 15:47
Предлагаю добавить в проект эмулятор AY на Атмега8. На форуме где-то есть схемка.
Lisitsin
12.05.2011, 07:37
Готово.
TRACE_TST10_4.zip
В строке 28435 после BIT 0, (HL) получаем:
9c0b 7a86 be61 8003 245c 7acc 9dfc 1998
Должно быть:
9c0b 7a86 be61 8003 2454 7acc 9dfc 1998
* * *
UPDATE: в приложении архив с версией Zexfix с опросом клавиатуры. При нажатии на любую кнопочку текущий цикл тестирования прерывается и управление уходит на следующий цикл. Надеюсь, это будет полезно для тех, кто мучает Zexfix. :)
Kakos_nonos, смысла нет, так как АУгрик можно преспокойно купить у CHRV.
Black_Cat
12.05.2011, 16:12
Kakos_nonos, смысла нет, так как АУгрик можно преспокойно купить у CHRV.BYTEMAN, ты типо специалист?
Смысл есть:
1) MSC51 дешевле AY
2) один MSC51 потянет эмуляцию 2х AY, т.е. TuboSound или даже TSFM, если разберутся с его устройством, или аналогично SAA.
3) этот же MSC51 может выполнять роль загрузчиа с SD карты и клавиатурного и мышиного контроллера.
Итого в принципе, в одной микросхеме можно получить функциональный аналог divIDE + TSFM или ZMSound + ZXMC! При том себестоимость железа в сумме будет меньше цены одного AY!
---------- Post added at 16:12 ---------- Previous post was at 16:09 ----------
И я бы как раз рекомендовал товарищу Lisitsin'у, подумать над над такой добавкой к своему компьютеру.
У Lisitsinа девайс уже разведён и сделан. Вряд ли у него найдутся пины для подключения ещё одной Атмеги для эмулляции AY.
Black_Cat
12.05.2011, 17:16
Вряд ли у него найдутся пины для подключения ещё одной Атмеги для эмулляции AY.
fifan, вот не понимаю, зачем тут нужны домыслы человека не видевшего схему, если можно просто взять и посмотреть её
Kakos_nonos
12.05.2011, 17:31
Эмулятор АУ на атмеге можно подключить по последовательному интерфейсу. Потребуется всего две ножки.
Lisitsin
12.05.2011, 18:41
UPDATE: в приложении архив с версией Zexfix с опросом клавиатуры.
А вот за это С П А С И Б О. Ато я уже замучился в конец.
---------- Post added at 18:41 ---------- Previous post was at 18:31 ----------
В строке 28435 после BIT 0, (HL) получаем:
Как я понимаю, ошибочно взведён третий бит, а берётся он из старшего байта MEMPTR. Эх, не до конца он у меня прописан ... Может пришло время ко второй части Z80TESTS вернуься?
Ладно эмулять проц, это полностью цифровая штука. Но эмулить звуковые чипы - это, IMXO, просто издевательство.
BYTEMAN, ты типо специалист?
А что, не похож? ;)
Как я понимаю, ошибочно взведён третий бит, а берётся он из старшего байта MEMPTR. Эх, не до конца он у меня прописан ...
В данном случае MEMPTR выставляется инструкцией LD SP, (nn). Она идет непосредственно перед BIT 0, (HL).
Ладно эмулять проц, это полностью цифровая штука. Но эмулить звуковые чипы - это, IMXO, просто издевательство.
Звуковые чипы - это тоже цифровые чипы с ЦАП в той или иной форме.
Следующее откровение от БК-0010 мы выслушаем после того, как он реализует эмуляцию AY на MSC51 (очевидно, имеется в виду MCS-51).
Black_Cat
13.05.2011, 16:45
:) Дима, эмуляция AY на MSC51 уже давно реализована, года уж два или три :)
Black_Cat
13.05.2011, 18:55
да, я ошибся :) , реализовано это не два или три, а четыре года назад :)
http://www.zx.pk.ru/showthread.php?t=5440
Что Дим, в SpeccyWiki и этого нет? :)
Lisitsin
13.05.2011, 19:41
Исправил, не проходит. Сделал тысячные контрольные суммы десятого теста (приложение). Делаю более длинный подробный трейсинг.
да, я ошибся :) , реализовано это не два или три, а четыре года назад :)
http://www.zx.pk.ru/showthread.php?t=5440
Там нет кода эмуляции.
TRACE_TST10_CRC1000_3.zip
Это не похоже на контрольные суммы. Старшие половины ячеек в каждой строке совпадают. :)
У меня получилось такое начало:
9c41 580a541f
9c41 414cdd66
9c41 74384859
Lisitsin
14.05.2011, 08:58
Ой !
Исправляюсь ...
Ошибку вижу уже в первой контрольной сумме. Подробный трейсинг начала десятого теста во вложении.
TRACE_TST10_5.zip
Здесь все проходим. Давайте для этого теста выведем только строки для #9C09 <= PC <= #9C0D.
Lisitsin
15.05.2011, 09:43
Готово:
TRACE_TST10_6.zip
После BIT 7, C получаем:
9c0b 7a86 be61 8003 2438 7acc 9dfc 1998
Должно быть:
9c0b 7a86 be61 8003 2490 7acc 9dfc 1998
Lisitsin
15.05.2011, 11:09
Нашли !!!
Во всех тестах седьмого бита тестировался везде регистр В.
Десятый пошёл. Zexall проходит полностью. Пробую игруки ...
Lisitsin
15.05.2011, 11:26
ROBOCOP без изменений (бува "n"), ELITE тоже:
Zexall проходит полностью.
Может быть стоит еще раз прогнать полностью версию без опроса клавиатуры. На всякий случай.
ELITE тоже
А что не так с ELITE?
Lisitsin
15.05.2011, 12:24
Elite доходит до этого места и больше не реагирует на клавиатуру. Zexall запускаю.
Elite доходит до этого места и больше не реагирует на клавиатуру.
1) Разряды 7, 6 и 5 портов клавиатуры (те, что не соответствуют никаким клавишам) у вас возвращаются взведенными или сброшенными?
2) Все ли инструкции ввода поддержаны? IN A, (n), IN r, (C)/IN (C) -- все они должны уметь опрашивать клавиатуру.
Lisitsin
15.05.2011, 13:15
1) Разряды 7, 6 и 5 портов клавиатуры (те, что не соответствуют никаким клавишам) у вас возвращаются взведенными или сброшенными?
2) Все ли инструкции ввода поддержаны? IN A, (n), IN r, (C)/IN (C) -- все они должны уметь опрашивать клавиатуру.
Разряды 7 и 5 взведены постоянно, а шестой соответствует сигналу магнитофона, но за полярность я не отвечаю. Так что может читаться и как ноль. Я в него копирую старший разряд десятиразрядного аналого - цифрового преобразователя микропроцессора, который подключен к шестому порту. Так что если сигнал на этой ноге ниже 2,5 В - там ноль, в противном случае единица.
Все команды IN опрашивают клавиатуру в том случае, если младший разряд адреса порта равен нулю. Иначе возвращается #FF.
Black_Cat
15.05.2011, 13:22
Разряды 7 и 5 взведены постоянноа должен быть D5 в нуле. Кроме того D6 на ZX48 и ZX128 (не +2, +3) - это функция того, что записано в порт бордюра #FE. На ZX48 начиная с Issue3, если в D4=1 #FE, то из D6 читается единица всегда, вместо сигнала магнитофона. На этом построена защита некоторых программ, которые вешаются, если не так.
Lisitsin
15.05.2011, 13:27
Кроме того D6 на ZX48 и ZX128 (не +2, +3) - это функция того, что записано в порт бордюра #FE.
А что именно за функция? Какой-то разряд цвета бордюра? А что тогда отведено магнитофону, если шестой разряд отражает состояние бордюра?
Black_Cat
15.05.2011, 13:40
Так что если сигнал на этой ноге ниже 2,5 В - там ноль, в противном случае единица.не так, для TTL логики единица - это от 2V и выше, а 0 - от 0,8V и ниже.
---------- Post added at 13:29 ---------- Previous post was at 13:28 ----------
А что именно за функция? Какой-то разряд цвета бордюра?я ж написал:
если записано в D4=1 #FE, то из D6 читается единица всегда, вместо сигнала магнитофона. На этом построена защита некоторых программ, которые вешаются, если не так.
---------- Post added at 13:40 ---------- Previous post was at 13:29 ----------
Кроме того, D3 #FE управляет чувствительностью читалки магнитофона:
D3=0 - низкая чувствительность
D3=1 - высокая чувствительность
Кроме того оба эти разряда образуют нелинейный 2х битный ЦАП, и сигнал на спикере насамделе имеет 3 уровня амплитуды, но цена разряда D3 очень маленькая, поэтому это на слух без нелинейного усилителя не различить. Но на отечественных клонах это уже более заметно, а в Фениксе цена разряда D3=0,5 D4. Советую сделать так же если есть возможность. На совместимости это не скажется.
Кроме того, если есть возможность - желательно вывести эти разряды на отдельные ноги, как в большинстве рассыпушных отечественных клонов, чтоб можно было получать биперное стерео.
Lisitsin
15.05.2011, 13:45
не так, для TTL логики единица - это от 2V и выше, а 0 - от 0,8V и ниже.[COLOR="Silver"]
Спасибо за консультацию !
Про ТТЛ я пока ещё не забыл. Просто у меня сделано так:
На ножке микросхемы, которая отведена магнитофону, у меня пол питания (2,5 В). К этой ножке подводится через разделителбную ёмкость сигнал магнитофона (уровень линейного выхода). внутри AVR к этому выводу подключен 10-разрядный АЦП таким образом, что 5 В соответствует цифра 1023. Таким образом, копируя старший разряд АЦП в шестой разряд порта, я получаю ноль для низкого уровня сигнала магнитофона (отрицательная полуволна), а единицу для высокого (положительная полуволна).
Разряды 7 и 5 взведены постоянно, а шестой соответствует сигналу магнитофона, но за полярность я не отвечаю. Так что может читаться и как ноль. Я в него копирую старший разряд десятиразрядного аналого - цифрового преобразователя микропроцессора, который подключен к шестому порту. Так что если сигнал на этой ноге ниже 2,5 В - там ноль, в противном случае единица.
Все команды IN опрашивают клавиатуру в том случае, если младший разряд адреса порта равен нулю. Иначе возвращается #FF.
Пусть будет так.
Еще вопрос: случаи, когда сразу несколько разрядов в старшей половине адреса клавиатурного порта сброшены обрабатываются правильно?
Black_Cat
15.05.2011, 13:53
терь понятно, это вход АЦП. Вот кстати D3 как раз смещает среднюю точку в АЦП, правда я не слышал, чтоб это где-то использовалось, а можно было-бы сделать простейший программный 2х битный АЦП последовательного приближения :)
Lisitsin
15.05.2011, 14:05
Еще вопрос: случаи, когда сразу несколько разрядов в старшей половине адреса клавиатурного порта сброшены обрабатываются правильно?
Я надеюсь, правильно: уж много я на это сил и времени потратил. За это у меня отвечает клавиатурный контроллер.
Но подробного теста не делал. Правда тут уменя ещё одна проблемка всплыта: дочка залила тут клаву компотом, ту, на которой я отрабатывался. Она работала как часы и не сбоила ...
А у других клав что-то сбои частенько бывают: при отпускании клавиши может не заметить префикс f0 и думает, что клавиша ещё нажата - включается автоповтор. Прийдётся ещё потрудиться ...
Black_Cat
15.05.2011, 14:07
Т.е. в конкретном случае при D3=0 - средний уровень АЦП = 2,5v, а при D3=1 этот уровень уже может быть выше (точных данных нет), но логично если он будет 2,5 +0,5*2,5= 3,75V. Хотя в реальном ZX48 компаратор работает токо по положительной полуволне.
Lisitsin
15.05.2011, 15:25
Странно, а в журнале "Радио" № 7 1995 г. смотрю я схему порта 254 и вижу: разряды 7 и 5 подтянуты к +5 В. Или это более ранняя версия схемы ... ?
Black_Cat
15.05.2011, 15:54
Странно, а в журнале "Радио" № 7 1995 г. смотрю я схему порта 254 и вижу: разряды 7 и 5 подтянуты к +5 В. Или это более ранняя версия схемы ... ?это обсуждалось где-то в теме KAY2010, некоторые игры не идут если в этих разрядах не ноль.
---------- Post added at 15:46 ---------- Previous post was at 15:35 ----------
Так, кажись вспомнил, это относилось токо к D5, а D7 притягивался к +5
---------- Post added at 15:54 ---------- Previous post was at 15:46 ----------
В последнем предложении была очепятка - исправлено и выделено!
Lisitsin
17.05.2011, 21:30
Сбросил D5 в ноль. Ничего не меняется.
Z80TESTS: не проходит только некоторые тесты в конце (и в тесте флагов, и в тесте MEMPTR (вложение))
ZEXFIX проходит полностью.
Black_Cat
23.05.2011, 23:57
Lisitsin, а какая может быть максимальная частота эмулируемого Z80?
Lisitsin
24.05.2011, 22:52
Lisitsin, а какая может быть максимальная частота эмулируемого Z80?
Только одна и родная - 3,5 МГц.
Black_Cat
25.05.2011, 00:00
Только одна и родная - 3,5 МГцэто теоретически возможный предел?
Lisitsin
25.05.2011, 17:46
И теоретически и практически. Если гнать сильно быстрее, убрав нопы, едут времянки и начинает сбоить видеопроцессор.
Black_Cat
25.05.2011, 20:16
И теоретически и практически. Если гнать сильно быстрее, убрав нопы, едут времянки и начинает сбоить видеопроцессор.понятно, значит упирается в архитектуру
Lisitsin
25.05.2011, 21:08
понятно, значит упирается в архитектуру
Скорее в производительность. Архитектура пожалуй самая продвинутая среди классических микроконтроллеров ...
Тем более Overclock в данном случае может означать лишь непонятные "понты".
Lisitsin
31.05.2011, 17:23
Всем добра.
Кто-нибудь собирает девайс?
собрался, микроконтроллеры уже купил, но на дропбоксе 404
---------- Post added at 17:27 ---------- Previous post was at 17:26 ----------
жду конца отладки и взмаха зеленым флагом
Lisitsin
31.05.2011, 17:33
Ну уж если модератор собирать пытается....
Да, тема удалась ...
Lisitsin, у тебя файлы из первого поста не открываются. к тому же я молод и времени мало:( хочу в качестве первого проекта большого собрать, т.к. плис мне пока не запаять.
---------- Post added at 17:42 ---------- Previous post was at 17:36 ----------
к тому же я не модератор, а так, мелкий модерюк:v2_blush:
Lisitsin
31.05.2011, 17:42
Сейчас обновлять буду ...
Kakos_nonos
31.05.2011, 17:57
Очень нравится проект, автору большое спасибо, работа проделана громадная.
У меня вот такая просьба: сделать из эмулятора спектрума эмулятор ZX80/ZX81. Думаю, сейчас, когда реализованна эмуляция speccy, реализовать ZX80 не составит особого труда, стоит только выкинуть видеопроцессор, и память (там всего 1к, можно использовать озу МК, а видео формирует основной процессор). Желательно, если возможно, сделать в DIP корпусах, тогда у меня получиться собрать, а для собирания спекки у меня пока опыта нету :(
Lisitsin
31.05.2011, 19:30
У меня вот такая просьба: сделать из эмулятора спектрума эмулятор ZX80/ZX81.
Можете по-больше проектной информации предоставить? (прошивку, карту памяти, параметры видео ... ). Выкинуть видеопроцессор и память боюсь не получится: у самой ATMega128 только 4К внутреннего ОЗУ, да и производительности на обе функции (формирование видеосигнала и эмуляция) не хватит.
Kakos_nonos
31.05.2011, 19:52
Вот информация о совместимом компьютере ZX97. Со схемами и прошивками.
http://www.user.dccnet.com/wrigter/index_files/zx97lite.htm
---------- Post added at 18:52 ---------- Previous post was at 18:48 ----------
А вот о самом ZX80. Схемы и прошивки тоже есть.
http://www.mango-a-gogo.com/scot/zx80/zx80.htm
эххх мега не в дип... будем учиться
Kakos_nonos
01.06.2011, 10:32
Эмулятор ZX80 и ZX81. Содержит прошивки
http://www.delhez.demon.nl/
Самодельный ZX80. Тоже много информации
http://home.micros.users.btopenworld.com/zx80/zx80.html
CodeMaster
01.06.2011, 10:43
У меня вот такая просьба: сделать из эмулятора спектрума эмулятор ZX80/ZX81.
А смысл, из-за VGA? В ZX80 нет ULA, можно и так собрать :-/
Kakos_nonos
01.06.2011, 15:05
А смысл, из-за VGA? В ZX80 нет ULA, можно и так собрать :-/
Микросхем меньше. ZX80 мой любимый компьютер, хочется чтоб был, а покупать или собирать реал будет сложно, поэтому возможен такой вариант.
В качестве видеоконтроллёра можно какой нибудь тини2313 поставить, там основной элемент - сдвиговый регистр, на который проц посылает байт, а он уже отправляет по биту на телек.
Lisitsin
02.06.2011, 17:26
В качестве видеоконтроллёра можно какой нибудь тини2313 поставить, там основной элемент - сдвиговый регистр, на который проц посылает байт, а он уже отправляет по биту на телек.
Так он ещё и чёрно-белый?
Kakos_nonos
02.06.2011, 17:49
Да. И там изображение формируется во время ожидания нажатия на клавишу, а в остальное время экран чёрный. То есть видеоконтроллёр там не нужен.
Kakos_nonos, там 15 (если не изменяет память) микросхем - на макетке всё элементарно собирается!
Kakos_nonos
02.06.2011, 19:20
Это да, только микросхемы там английские, заказывать надо, а атмеги можно и рядом купить.
Это да, только микросхемы там английские,
Аналоги наши чтоле не продаются? ;)
---------- Post added at 19:57 ---------- Previous post was at 19:55 ----------
эххх мега не в дип... будем учиться
osa, тебе понравится.
Я сейчас уже не могу на ДИП смотреть, огромные, с толстенными ЛАПАМИ!!! :)
Я сейчас уже не могу на ДИП смотреть, огромные, с толстенными ЛАПАМИ!!!
Согласен полностью , я совсем недавно увлекся электроникой, и начал сам собирать всякие спектрумы и сопутствующие ус-ва, но уже сейчас чувствую, что мне легче и быстрее перепаять всякие тсопы\соики, чем дипы.. Как говорится, не та так страшен черт.. стоит только попробовать :)
Lisitsin
04.06.2011, 13:55
Сообщение для сборщиков:
В качестве RAM лучше использовать что-нибудь более скоростное, например IS61C512-25(20,15)T(I), так как заложенная разработчиком работает на границе устойчивости (время доступа 35 нС). IS61C512-25(20,15)T(I) конструктивно совместимы (корпус, поножовщина) с заложенной IS61C1024-35TLI и отличается только меньшим объёмом памяти (64 К).
serj0611
15.09.2011, 00:22
IS61C1024-15J подойдёт?
Lisitsin
26.11.2011, 11:58
IS61C1024-15J подойдёт?
Элементарно !!!. Прошу прощения за поздний ответ )))
Lisitsin
26.11.2011, 12:16
как там проект?
Да пока так же. Тесты все проходит, а самые классные игрушки работать не хотят. Щас буду делать девайс, который подключу к реальному спектруму и буду смотреть с его помощью в чём различие в работе.
Lisitsin, а можно поучаствовать в тестировании железа?
какие из игрушек не работают?
а какие работают?
Lisitsin
01.12.2011, 21:42
Lisitsin, а можно поучаствовать в тестировании железа?
какие из игрушек не работают?
а какие работают?
Ни можно, а нужно !!!
Не работают такие вещи, как R-TYPE и ELITE. R-TYPE висит при старте игры, ELTE при вопросе Load new commander? (Y/N). R-TYPE висит так:
PC (PC) (PC+1) (PC+2) (PC+3) BC DE HL AF IX IY SP
868C 3A 8A 7A FE 0000 C4B4 C4B1 0093 7AED 7AE7 FFFE; LD A,(7A8A)
868F FE 03 38 F9 0000 C4B4 C4B1 0093 7AED 7AE7 FFFE; CP 03
8691 38 F9 C3 49 0000 C4B4 C4B1 0093 7AED 7AE7 FFFE; JR C,F9
и заново.
Если с адреса 8691 принудительно записать два нопа, то игра стартует, но без звука )))
А ELITE даёт примерно следующий трейсинг (во вложении). В конце нажата клавиша "N", но реакции нет.
Работают ROBOCOP, но печатные символы n и o искажаются, а также KOSMOS, KRAAL, MANIC MINER, PHEENIX, SALAMANDER, SOLDIER OF LIGHT, XONIX.
R-TYPE висит при старте игры
ячейка #7a8a постоянно увеличивается в программе которая висит на вторых прерываниях.
в вашем случае этого не происходит (она равна нулю)
.........
#BE2D LD HL,#7A8A
INC (HL)
возможно у вас некорректно сделана обработка im2 ???
PC (PC) (PC+1) (PC+2) (PC+3) BC DE HL AF IX IY SP
868C 3A 8A 7A FE 0000 C4B4 C4B1 0093 7AED 7AE7 FFFE; LD A,(7A8A)
868F FE 03 38 F9 0000 C4B4 C4B1 0093 7AED 7AE7 FFFE; CP 03
8691 38 F9 C3 49 0000 C4B4 C4B1 0093 7AED 7AE7 FFFE; JR C,F9
и заново.
Если с адреса 8691 принудительно записать два нопа, то игра стартует, но без звука )))
А ELITE даёт примерно следующий трейсинг (во вложении). В конце нажата клавиша "N", но реакции нет.
Работают ROBOCOP, но печатные символы n и o искажаются, а также KOSMOS, KRAAL, MANIC MINER, PHEENIX, SALAMANDER, SOLDIER OF LIGHT, XONIX.
можно скриншот как искажаются буквы
и можно версию элиты приложить?
---------- Post added at 13:04 ---------- Previous post was at 12:37 ----------
в приложении - отрисовка надписи внизу экрана
как получаешь эту вот трассировку?
---------- Post added at 13:06 ---------- Previous post was at 13:04 ----------
в указанных soldier of light и manic miner прерывания в игре не используются
Lisitsin
02.12.2011, 18:57
можно скриншот как искажаются буквы
и можно версию элиты приложить?[COLOR="Silver"]
Эт можно ...
Искажённые символы на видео:
http://dl.dropbox.com/u/12408899/CVBS%20%28ROBOCOP%29.zip
Версия ELITE во вложении
Lisitsin
02.12.2011, 19:01
ячейка #7a8a постоянно увеличивается в программе которая висит на вторых прерываниях.
в вашем случае этого не происходит (она равна нулю)
.........
#BE2D LD HL,#7A8A
INC (HL)
возможно у вас некорректно сделана обработка im2 ???
RESPECT !!!
IMM2 вообще не обрабатываю: прочитал в журнале Радио, что в спектруме используетмя только IMM1 для прерываний от клавиатуры. Если игры используют IMM2 - это всё решает !!!
А по какому адресу оно обрабатывается, и что про него можно почитать?
Огромное СПАСИБО !!!
balu_dark
02.12.2011, 19:56
Ну в Радио имелось ввиду скорее всего другое - интерпретатор бэйсика( родной РОМ короче говоря) использует только ИМ1 а в игрушках очень часто юзают ИМ2 потому как на него вешают например обработку клавиатуры или проигрывание музыки на сопроцессоре. Тоесть любые переодические операции для которых не нужно максимальное быстродействие и не занимающие много тактов.
у ИМ2 адрес таблицы векторов грузится в регистр I .
если на пальцах - при прерывании читается вектор прерывания с шины данных ( у большинства наших клонов там будет FF) младший бит вектора обнуляется автоматически( тоесть всегда равен нулю). и адрес куда прыгнуть обработчику чтобы взять вектор вычисляется Addr= (Register I * 256) + Vector from DATA bus. Вектор всегда только четное число.
Начиная с (Register I * 256) идет таблица из 128и двухбайных адресов обработчика.
чаще всего вся область забита или одним и тем же адресом или вообще используется только последний вектор. эти 2 байта кущего вектора - грузятся в регистр PC. или как он там на спеке назывался. и управление переходит по этому адресу.
Выход из обработчика прерывания стандартный - RETI.
Цитата из книжки :"Для перехода в режим ISR в режиме 2 требуется 19 тактовых периодов: 7 периодов для ввода 8ми разрядного вектора от прерывающего устройства,следующие 6 - для сохранения на стеке текущего состояния PC (адреса возврата) и еще 6 - для считывания стартового адреса ISR."
USERHOME
02.12.2011, 20:39
IM2 (IMM2 неправильно, СЭР)
Картинка по Z-80 (http://www.box.com/s/xc36sjfp9hg9iao4rx9q)
Может пригодиться ВАМ Lisitsin
---------- Post added at 20:39 ---------- Previous post was at 20:20 ----------
2.Картинка по Z-80 IM2 (http://www.box.com/s/5bl7v6dat9oceb3zvpkp)
3.Картинка по Z-80 IM2 (http://www.box.com/s/cnp0jfy8u0nzoeum8zqy)
И ещё по IM2 картинки
Lisitsin
02.12.2011, 20:42
Персональная благодарность
balu_dark, !!!
Есть только один вопросец: какие биты регистра I идут в ход при обработке imm1? Насколько я понимаю, только 7? То есть старший равен 0? Спасибо !!!
USERHOME
02.12.2011, 20:49
И ещё... Младший байт читается с ШД (шина данных) , а старший из регистра I
Младший байт всегда (8 резисторов подтягивающих ШД к +5 вольт) должен читаться 255 #FF %11111111
Это всё вцелом составляет вектор прерывания
---------- Post added at 20:49 ---------- Previous post was at 20:47 ----------
При IM 1 адрес физически фиксирован в самом Z-80 и независимо от I состовляет 56
#38 (IM0 тоже, как и IM1 режим)
Lisitsin
02.12.2011, 22:21
Персональная благодарность
balu_dark, !!!
Есть только один вопросец: какие биты регистра I идут в ход при обработке imm1? Насколько я понимаю, только 7? То есть старший равен 0? Спасибо !!!
Прошу прощения, разобрался. Перепутал регистр I с регистром R.
---------- Post added at 21:21 ---------- Previous post was at 19:58 ----------
Сделал, но что-то не работает. ELITE при старте, не нарисовав крутящийся корабль, уходит в безвозвратный сбой, R-TYPE виснет в заставке. ROBOCOP зависает при загрузке с чёрным экраном.
Lisitsin
02.12.2011, 22:50
вот как собствнно дклаю обработку прерывания: (вложение)
Lisitsin
02.12.2011, 22:58
а если все же не на играх отлаживать, а на чем нить попроще, постабильнее?
в приложении маленький тест, под 48 режим как раз, и как раз IM2 точно использует. Что показывает?
На середине загрузки даёт серый экран и при пробеле корректно отдаётся бейсику )))
Lisitsin
02.12.2011, 23:08
На середине загрузки даёт серый экран и при пробеле корректно отдаётся бейсику )))
Так вроде говорят младший в ноль аппаратно сбрасывается для корректного прочтения двухбайтного адреса. Типа из нулевого адреса младший байт вектора читается, а из первого - старший, я так понял ...
младший бит вектора обнуляется автоматически( тоесть всегда равен нулю).
Вектор всегда только четное число.
откуда дровишки? это нифига не так. первый раз прочитал, удивился, почти поверил. никакой бит не обнуляется. если в регистре I число #BB, а на шине #FF, то адрес возьмется из #BBFF и #BC00. и именно поэтому правильная табличка - 257 байт длиной.
---------- Post added at 01:13 ---------- Previous post was at 01:12 ----------
Так вроде говорят младший в ноль аппаратно сбрасывается
врут :)
с шины данных корректно должно прочитаться #FF. в тесте команда типаа
LD A,#3B
LD I,A
IM 2
вот и посчитай, куда будет указывать вектор в программе, и где - у тебя.
в 48ом ПЗУ #FF по адресу #3BFF и #3C00.
Lisitsin
02.12.2011, 23:32
Ну вот эт другое дело .... Щас сделаю )))
---------- Post added at 22:31 ---------- Previous post was at 22:23 ----------
Пробовал с FF - то же самое.
Lisitsin
02.12.2011, 23:43
ну запусти тест в любом эмуле с трассировкой в пошаговом режиме, и посмотри разницу со своей трассировкой. Где то же они будут расходиться во взглядах. Это сложно?
у меня трассировка медленная - я втыкаюсь в клавиатурный порт и пишусь в текстовом редакторе. Могу запуститься по известному критерию и вывести содержимое нужных регистров, но не всю трассировку вывести. А как можно делать трассировкуиз эмуляторов?
Есть ещё один момент: я не инициализирую I при включении питания и сбросе. Это плохо?
Lisitsin
03.12.2011, 00:10
ну в том же спектакуляторе. к примеру. выходишь в дебАгер и шагаешь. в EmuZWin тоже нравится отладчик..
программа с #8000 адреса грузится и оттеда же работает..
в Unreal-e а5 же..
А как, к примеру, в EmuZWin нужный текст трейсинга получить, чтоб сравниваться автоматически?
balu_dark
03.12.2011, 00:17
откуда дровишки? это нифига не так. первый раз прочитал, удивился, почти поверил. никакой бит не обнуляется. если в регистре I число #BB, а на шине #FF, то адрес возьмется из #BBFF и #BC00. и именно поэтому правильная табличка - 257 байт длиной.[COLOR="Silver"]
Дровишки из лесу :) оно так для контроллера прерываний :)
а вот для нашего случая адрес берут из FF и (FF+1)
Сорри что немного ввел в заблуждение.
Короче не вдаваясь в лишние подробности для примера :
LD A,#C0
LD I,A
IM2
будет исполнятся примерно так :
PUSH PC
LD PC,(#C0FF) ( 256*RAM[#C100]+RAM[#C0FF])
balu_dark
03.12.2011, 01:07
IM_2: LDI ZL,0XFF ;Здесь обрабатывается IM2. В регистр косвенной адресации заношу:
IN ZH,I ; 0xFE – в младший регистр, I – в старший регистр.
CPI ZH,0X40
А так если сделать?
И посмотреть бы код LOAD_PC_Z[12].
Lisitsin
03.12.2011, 01:27
Test-48 дает такой трейсинг :
Lisitsin
03.12.2011, 01:30
IM_2: LDI ZL,0XFF ;Здесь обрабатывается IM2. В регистр косвенной адресации заношу:
IN ZH,I ; 0xFE – в младший регистр, I – в старший регистр.
CPI ZH,0X40
А так если сделать?
И посмотреть бы код LOAD_PC_Z[12].
Так уже и fe и ff делал - примерно одно и то же.
USERHOME
03.12.2011, 01:45
http://zx.pk.ru/attachment.php?attachmentid=31328&stc=1&d=1322861299
http://zx.pk.ru/attachment.php?attachmentid=31330&stc=1&d=1322861454
http://zx.pk.ru/attachment.php?attachmentid=31331&stc=1&d=1322861467
http://zx.pk.ru/attachment.php?attachmentid=31332&stc=1&d=1322862186
А вот ниже самое интересное:v2_dizzy_roll:
http://zx.pk.ru/attachment.php?attachmentid=31333&stc=1&d=1322862240
USERHOME
03.12.2011, 01:47
http://zx.pk.ru/attachment.php?attachmentid=31334&stc=1&d=1322862422
Lisitsin
03.12.2011, 02:08
Ничего не понял. В одном месте читаю:
Команда RET I.
Код - ED 4D. Эта команда аналогична команде RET (возврат после вызова подпрограммы), но выполняет двойную функцию:
· возврат из подпрограммы, обслуживающей маскируемое прерывание;
· разрешение маскированного прерывания (ведь во время работы обслуживающей программы оно запрещалось, иначе новое прерывание могло бы прервать обработку прерывания и т.д.).
В другом: пользователь должен сам разрешать прерывания через EI, так как RETI этого не делает. Так как же на самом деле?
USERHOME
03.12.2011, 02:15
EI - всегда делает программист
RETI - Специальная комманда для серии из Z-80 логики (для контроллера прерываний, которого НЕТ в ZX-Specrume и совместимых компьютеров)
Можно писать в конце обработчика прерываний (для ZX)
EI
RET
и/или
EI
RETI
Одно и тоже!
---------- Post added at 02:15 ---------- Previous post was at 02:14 ----------
Просто по (это IMHO) команде RETI легко программисту определить конец обработчика прерываний (типа "этикет хорошего тона")
USERHOME
03.12.2011, 02:18
EI - всегда САМИ ручками пишем в любом случае
---------- Post added at 02:18 ---------- Previous post was at 02:18 ----------
перед RET или RETI
Эт можно ...
Искажённые символы на видео:
http://dl.dropbox.com/u/12408899/CVBS%20%28ROBOCOP%29.zip
Версия ELITE во вложении
значит так
символы N O находятся по адресу #5c00 и #5c08 соответственно
при обработке im1 там портятся данные
к тому же у тебя портятся данные во многих программах
там где используется IY
а правильно прерывания обрабатываются так
по адресу регистрI*256+#ff берется адрес обработчика
если I=#ff то данные берутся из #ffff и #0000
статус прерываний сохраняется гдето
и по команде RETI восстанавливается
так было в мануале, но у меня оно не работало
Lisitsin
03.12.2011, 17:56
Короче, пока не работает, разбираюсь ...
если в робокопе портятся буквы то у тебя получается продолжает (не запрещается) работать подпрограмма по im1 - она-то и портит данные (в случае с робокопом - шрифт)
goodboy, да просто вместо им2 работает им1
Lisitsin, попробуй запустить игру Zynaps
она у тебя не должна заработать сейчас
Lisitsin
03.12.2011, 20:54
Зашуршал )))
http://dl.dropbox.com/u/12408899/AVR%20SPECTRUM%2048%20GAMES.ZIP
это что вы реализовали? корректное im1?
Lisitsin
03.12.2011, 21:08
Короче сделал корректно im2. Сначала вектор читал сразу два байта, без проверок озу/пзу, и оно глючно было. Сделал перед чтением каждого байта проверку - и ему понравилось )))
Lisitsin
03.12.2011, 21:12
Сборщикам:
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot