1

Тема: Непонятные команды ЦП из инструкций на Агат

=

2 Отредактировано Voldemar0 (28-08-2021 14:17)

Re: Непонятные команды ЦП из инструкций на Агат

> Тут есть нюанс - у Агата стек переключается одной инструкцией при желании (изменение привязки нулевого сегмента к нулевому банку). =) Я в своей проге (не с целью защиты но для оптимизации) использую переключаемые нулевые страницы, выполняя динамически модифицируемый код прямо в нулевой странице - побочным эффектом стало переключение стеков.

Тут есть сомнения. Команды смены базы нулевой страницы и стека были не у всех процессоров. В инструкции на агат они обозначены звёздочками: "в исходной версии системы команд отсутствуют" (что  бы это ни значило...). В реальных прогах я их не встречал, мой эмулятор их не имеет (а на недокументированные команды он останавливается по умолчанию).

Вроде бы эти команды появились стабильно в 65c02.

3 Отредактировано vvhitevvizard (28-08-2021 14:11)

Re: Непонятные команды ЦП из инструкций на Агат

Voldemar0 пишет:

Вроде бы эти команды появились стабильно в 65c02.

Я этого конечно не знал, но на моем экземпляре Агат9 (и еще на паре компов где тестировалось) это работало без сбоев. Внешняя Зона в процессе работы использует 3 разных банка для нулевого сегмента. Впрочем, в отличие от zero page, стек во время переключений я и не использовал (обходился косвенными переходами).

4 Отредактировано Voldemar0 (28-08-2021 14:34)

Re: Непонятные команды ЦП из инструкций на Агат

Ну давайте попробуем...
У меня как раз сейчас развёрнута девятка с недоделанным отладчиком :))

Одеваем белые перчатки и залазим на сайт за документацией:
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 ?

5 Отредактировано vvhitevvizard (28-08-2021 15:24)

Re: Непонятные команды ЦП из инструкций на Агат

Я имел в виду переключение нулевого сегмента cпецифичное для агатов. Банальное STA $C10X.
Перед этим перехват векторов сброса на эту инструкцию. Ну или перед BRK ее разместить. Как итог - у нас сохраняется стек и нулевая страница препарируемой программы в нетронутом виде.

Погуглил про TSA/TAS (чтение 16битного адреса стека и модификация) - это про наследников 6502, где cтек мог находиться не только на первой странице:

Spoiler

TCS Transfer Accumulator to Stack Pointer
TCS transfers a full 16 bits to the stack pointer without regard for the setting of status bit m.
As with TCD and TDC the C in TCS refers to the accumulator as a full 16 bits.
The mnemonic TAS, transfer a to stack pointer, is used by some assemblers.
While in 6502 emulation mode only the eight-bit A accumulator value is transferred because the stack is always located at page 1 on a 6502 TCS and TXS are the only two instructions that alter the stack pointer register.
No flags are affected by TCS.

Addressing Mode              Syntax        Opcode   Bytes  Cycles
----------------------------------------------------------------------
  Implied                      TCS            1B      1       2
                        Alais: TAS
----------------------------------------------------------------------


TSC Transfer Stack Pointer to Accumulator
TSC transfers a full 16 bits of the stack pointer to the 16 bit accumulator without regard for the setting of status bit m.
As with TCD and TDC the C in TSC refers to the accumulator as a full 16 bits.
The mnemonic TSA, transfer a to stack pointer, is used by some assemblers.
While in 6502 emulation mode a one will be transferred to the hidden B (upper 8 bits) accumulator because the stack is always located at page one in 6502 mode.
      Flags Affected: n-----z-
                      n Set if most significant bit of transfer value
                        is set.
                      z Set if transferred value is zero.



Addressing Mode              Syntax        Opcode   Bytes  Cycles
----------------------------------------------------------------------
  Implied                      TSC            3B      1      2
                        Alais: TSA
----------------------------------------------------------------------

А в твоей ссылке выше TAS упоминается как нестабильная команда 6502:

Spoiler

TAS (XAS, SHS)
Puts A AND X in SP and stores A AND X AND (high-byte of addr. + 1) at addr.

unstable: sometimes 'AND (H+1)' is dropped, page boundary crossings may not work (with the high-byte of the value used as the high-byte of the address)

A AND X -> SP, A AND X AND (H+1) -> M

6 Отредактировано Voldemar0 (28-08-2021 15:45)

Re: Непонятные команды ЦП из инструкций на Агат

Эта техника интересная, но в изучении спрайт-ос она бы не помогла, вероятно.
Сисмон на регион 0-1fff подключает нулевой сегмент озу и спрайт ос, скорее всего, тоже.
Не знаю, можно ли с ними как-то договориться.

Попробовал 1B:

                            5005-  1B 00 50    SLO  $5000, Y    ; 5001:3A
                            5006-  00 
                            5007-  50 
                            5001-  9D 
                            5001-  9D 
                            5001:9D 
                            5001:3A 

Эта вообще три байта.

7 Отредактировано vvhitevvizard (29-08-2021 05:17)

Re: Непонятные команды ЦП из инструкций на Агат

Voldemar0 пишет:

Эта техника интересная, но в изучении спрайт-ос она бы не помогла, вероятно.
Сисмон на регион 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. :)

8

Re: Непонятные команды ЦП из инструкций на Агат

Voldemar0 пишет:

Техническое описание. Часть 4. Описание системы команд. Фг3.032.002 ТО3
Берём лэмзовский вариант книжки, толстенькая книжка на 140 страниц.

У нас в Караганде были АГАТики Волжского завода, в штатных книжках-доках была описана система команд 6502. А в этой рассматривается та система команд, которой нет ни у 6502, ни у 65C02, ни у 65C816, ни у 65CE02.

Voldemar0 пишет:

2) Что за команды, которые "в исходной версии системы команд отсутствуют" ? Может это были опкоды для секционированной версии 6502 в Агат-4 ?

Очень и очень вероятно.

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

9

Re: Непонятные команды ЦП из инструкций на Агат

LeoN пишет:

65C816

Для этого есть. Называются они по разному, но суть одна - чтение и изменение 16битного адреса стека. пункт 6.10.2:
http://6502.org/tutorials/65c816opcodes.html#6.10.2

10 Отредактировано garnizon (30-08-2021 13:09)

Re: Непонятные команды ЦП из инструкций на Агат

LeoN пишет:

У нас в Караганде были АГАТики Волжского завода, в штатных книжках-доках была описана система команд 6502. А в этой рассматривается та система команд, которой нет ни у 6502, ни у 65C02, ни у 65C816, ни у 65CE02.

Погоди, тогда надо на сайте пометку сделать что книги разнятся.

Если я правильно понял, тут http://agatcomp.ru/agat/Paper/DocsShtat.shtml  в спойлере "Агат-7 Книга 2"
Документ "Версия 1989 года (ВЗЭВТ): DJVU 3.5 Мб. Тут только часть 4." описывает обычную систем команд 6502.

А  документ от ЛЭМЗ 85 года отличается, поскольку описывает загадочную систему команд?

11 Отредактировано LeoN (30-08-2021 15:52)

Re: Непонятные команды ЦП из инструкций на Агат

vvhitevvizard пишет:

Называются они по разному, но суть одна - чтение и изменение 16битного адреса стека. пункт 6.10.2:
http://6502.org/tutorials/65c816opcodes.html#6.10.2

Дык, с этим-то все как раз понятно. Ты другие команды там посмотри. Кстати там и BIT помечен звездочкой...

garnizon пишет:

А  документ от ЛЭМЗ 85 года отличается, поскольку описывает загадочную систему команд?

Йес, ит из. ;)

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

12 Отредактировано Sergei Frolov (30-08-2021 23:42)

Re: Непонятные команды ЦП из инструкций на Агат

Я так понял, что все те фичи с переделыванием базы нулевой страницы и другие звёздочки были на плате эмулятора 6502. Который в АГАТе-4 (вроде)

13 Отредактировано garnizon (31-08-2021 00:12)

Re: Непонятные команды ЦП из инструкций на Агат

Да, Кривцов так и писал что фичи таки были. Только на "красном агате", тот что перед агат-4.
http://agatcomp.ru/agat/Hardware/Agat4.shtml

Цитата:
Процессор на К588 серии - памятник социалистической реальности т.е. требованию полностью отечественной комплектации изделий Министерства Радиопромышленности СССР. Написан гг Чамкиным, Кривцовым и Лисиным на собственном редакторе микропрограмм, отвезен в Минск на Интеграп, изготовлен в 2 экземплярах. Сделана плата, запущен монитор (пришлось подправить - ошибочка в микропрограмме). Отличается половинной частотой и очень повышенным объемом выпитой водки (особенно в Минске - там работала чудесная команда Валеры Свиридовича)

14

Re: Непонятные команды ЦП из инструкций на Агат

Перелопатил все доки, больше нигде не нашел такого кроме книжки от ЛЭМЗ.

Вот что есть только:

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

15

Re: Непонятные команды ЦП из инструкций на Агат

Помню, как-то делал табличку недокуменированных команд 6502. Составил. Потом пришёл ещё класс АГАТов, а там индийские процы. И у них эти команды отличались.

16

Re: Непонятные команды ЦП из инструкций на Агат

А никто случайно не занимался составлением таблицы с командами секционного процессора их книжки? Т.е. чтобы наглядно сравнить секционный , обычный 6502, 65C02 и  65C816. Здорово бы было на сайте сделать отдельную страничку с известными подробностями о секционном и там иметь такую наглядность.