Тема: Непонятные команды ЦП из инструкций на Агат
=
Персональный компьютер "Агат" - технические беседы (является частью agatcomp.su / agatcomp.ru) Как зарегистрироваться?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
ПЭВМ "Агат" 7-9: Форум → 6502 → Непонятные команды ЦП из инструкций на Агат
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
=
> Тут есть нюанс - у Агата стек переключается одной инструкцией при желании (изменение привязки нулевого сегмента к нулевому банку). =) Я в своей проге (не с целью защиты но для оптимизации) использую переключаемые нулевые страницы, выполняя динамически модифицируемый код прямо в нулевой странице - побочным эффектом стало переключение стеков.
Тут есть сомнения. Команды смены базы нулевой страницы и стека были не у всех процессоров. В инструкции на агат они обозначены звёздочками: "в исходной версии системы команд отсутствуют" (что бы это ни значило...). В реальных прогах я их не встречал, мой эмулятор их не имеет (а на недокументированные команды он останавливается по умолчанию).
Вроде бы эти команды появились стабильно в 65c02.
Вроде бы эти команды появились стабильно в 65c02.
Я этого конечно не знал, но на моем экземпляре Агат9 (и еще на паре компов где тестировалось) это работало без сбоев. Внешняя Зона в процессе работы использует 3 разных банка для нулевого сегмента. Впрочем, в отличие от zero page, стек во время переключений я и не использовал (обходился косвенными переходами).
Ну давайте попробуем...
У меня как раз сейчас развёрнута девятка с недоделанным отладчиком :))
Одеваем белые перчатки и залазим на сайт за документацией:
http://agatcomp.ru/agat/Paper/DocsShtat.shtml
Техническое описание. Часть 4. Описание системы команд. Фг3.032.002 ТО3
Берём лэмзовский вариант книжки, толстенькая книжка на 140 страниц.
Страница примерно 143 (по нумерации в djvu), там табличка системы команд.
В самом конце команда # 72 TSA, опкод $80.
На странице 137 написано: "TSA - запись содержимого стека базы в аккумулятор".
Пробую исполнить её на реальном железе:
5000- 85 70 .. STA $70
5001- 70
0070:01
5002- 80 85 .. SKB #$85 ; '^E
5003- 85
5004- 71 60 .. ADC ($60), Y ; 0101- FE
5005- 60
0060- 00
0061- 01
0101- FE
5006- FF ?? ?? INS ????, X
Видно, что ЦП признал опкод $80 как загадочную _двухбайтовую_ команду (на адрес 5003 он не выставил сигнал SYNC и отладчик не стал дизассемблировать байт по этому адресу - это аргумент команды).
Смотрим сюда:
https://www.masswerk.at/6502/6502_instr … .html#NOPs
Инструкция ничего не делает, но занимает два байта.
Такой себе затянутый NOP.
Э... м...
Кто разбирается в истории и генеалогии 6502 - прокомментируйте, pls.
1) Где искать команду смены базы стека и нулевой страницы, если она всё таки была?
2) Что за команды, которые "в исходной версии системы команд отсутствуют" ? Может это были опкоды для секционированной версии 6502 в Агат-4 ?
Я имел в виду переключение нулевого сегмента cпецифичное для агатов. Банальное STA $C10X.
Перед этим перехват векторов сброса на эту инструкцию. Ну или перед BRK ее разместить. Как итог - у нас сохраняется стек и нулевая страница препарируемой программы в нетронутом виде.
Погуглил про TSA/TAS (чтение 16битного адреса стека и модификация) - это про наследников 6502, где cтек мог находиться не только на первой странице:
А в твоей ссылке выше TAS упоминается как нестабильная команда 6502:
Эта техника интересная, но в изучении спрайт-ос она бы не помогла, вероятно.
Сисмон на регион 0-1fff подключает нулевой сегмент озу и спрайт ос, скорее всего, тоже.
Не знаю, можно ли с ними как-то договориться.
Попробовал 1B:
5005- 1B 00 50 SLO $5000, Y ; 5001:3A
5006- 00
5007- 50
5001- 9D
5001- 9D
5001:9D
5001:3A
Эта вообще три байта.
Эта техника интересная, но в изучении спрайт-ос она бы не помогла, вероятно.
Сисмон на регион 0-1fff подключает нулевой сегмент озу и спрайт ос, скорее всего, тоже.
Не знаю, можно ли с ними как-то договориться.
Операционка/монитор под которой идет отладочный процесс конечно может перевыставлять нулевой сегмент каждый раз когда к ней переходит управление. Ну можно подпатчить и операционку тогда. :) А если отлаживаем саму операционку - то иметь свой аналог монитора/отладочных процедур в памяти. Но это уже детали.
---------------
ЗЫЖ Оно и неудивительно, что компиляторов с языков высокого уровня под 6502 было так мало. Ясно видны в поздних реинкарнациях 6502 попытки сделать стек перемещаемым подальше от нулевой страницы (=больше) - 256 байт конечно же недостаточно для локальных переменных в стеке.
И с новыми режимами адресации cтека. Лучше поздно чем никогда :)
Stack Relative LDA 15,S
Stack Relative Indirect Indexed Y LDA (9,S),Y
https://softpixel.com/~cwright/sianse/d … O.HTM#1.00
-------------
Кстати, в 1984 интервью Возняка спросили, планируют ли они переходить с 6502 на этот 65816 (16-ти разрядный) процессор:
>Are you thinking about using the new 65816 processor for anything?
We’re thinking about it and doing some R&D with it, but I don’t know if we’ll use it. Anything we do has to be compatible with the Apple II.
Хотя в нем уже был режим эмуляции 6502. :)
Техническое описание. Часть 4. Описание системы команд. Фг3.032.002 ТО3
Берём лэмзовский вариант книжки, толстенькая книжка на 140 страниц.
У нас в Караганде были АГАТики Волжского завода, в штатных книжках-доках была описана система команд 6502. А в этой рассматривается та система команд, которой нет ни у 6502, ни у 65C02, ни у 65C816, ни у 65CE02.
2) Что за команды, которые "в исходной версии системы команд отсутствуют" ? Может это были опкоды для секционированной версии 6502 в Агат-4 ?
Очень и очень вероятно.
65C816
Для этого есть. Называются они по разному, но суть одна - чтение и изменение 16битного адреса стека. пункт 6.10.2:
http://6502.org/tutorials/65c816opcodes.html#6.10.2
У нас в Караганде были АГАТики Волжского завода, в штатных книжках-доках была описана система команд 6502. А в этой рассматривается та система команд, которой нет ни у 6502, ни у 65C02, ни у 65C816, ни у 65CE02.
Погоди, тогда надо на сайте пометку сделать что книги разнятся.
Если я правильно понял, тут http://agatcomp.ru/agat/Paper/DocsShtat.shtml в спойлере "Агат-7 Книга 2"
Документ "Версия 1989 года (ВЗЭВТ): DJVU 3.5 Мб. Тут только часть 4." описывает обычную систем команд 6502.
А документ от ЛЭМЗ 85 года отличается, поскольку описывает загадочную систему команд?
Называются они по разному, но суть одна - чтение и изменение 16битного адреса стека. пункт 6.10.2:
http://6502.org/tutorials/65c816opcodes.html#6.10.2
Дык, с этим-то все как раз понятно. Ты другие команды там посмотри. Кстати там и BIT помечен звездочкой...
А документ от ЛЭМЗ 85 года отличается, поскольку описывает загадочную систему команд?
Йес, ит из. ;)
Я так понял, что все те фичи с переделыванием базы нулевой страницы и другие звёздочки были на плате эмулятора 6502. Который в АГАТе-4 (вроде)
Да, Кривцов так и писал что фичи таки были. Только на "красном агате", тот что перед агат-4.
http://agatcomp.ru/agat/Hardware/Agat4.shtml
Цитата:
Процессор на К588 серии - памятник социалистической реальности т.е. требованию полностью отечественной комплектации изделий Министерства Радиопромышленности СССР. Написан гг Чамкиным, Кривцовым и Лисиным на собственном редакторе микропрограмм, отвезен в Минск на Интеграп, изготовлен в 2 экземплярах. Сделана плата, запущен монитор (пришлось подправить - ошибочка в микропрограмме). Отличается половинной частотой и очень повышенным объемом выпитой водки (особенно в Минске - там работала чудесная команда Валеры Свиридовича)
Перелопатил все доки, больше нигде не нашел такого кроме книжки от ЛЭМЗ.
Вот что есть только:
http://agatcomp.ru/agat/Paper/NoSort/KOMMAND.shtml
http://agatcomp.ru/agat/Paper/NoSort/65c02_1.jpg
http://agatcomp.ru/agat/Paper/NoSort/65c02_2.jpg
Помню, как-то делал табличку недокуменированных команд 6502. Составил. Потом пришёл ещё класс АГАТов, а там индийские процы. И у них эти команды отличались.
А никто случайно не занимался составлением таблицы с командами секционного процессора их книжки? Т.е. чтобы наглядно сравнить секционный , обычный 6502, 65C02 и 65C816. Здорово бы было на сайте сделать отдельную страничку с известными подробностями о секционном и там иметь такую наглядность.
Помню, как-то делал табличку недокуменированных команд 6502. Составил. Потом пришёл ещё класс АГАТов, а там индийские процы. И у них эти команды отличались.
Интересно про SCL 6502:
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
ПЭВМ "Агат" 7-9: Форум → 6502 → Непонятные команды ЦП из инструкций на Агат
Форум работает на PunBB, при поддержке Informer Technologies, Inc