Eсли вдуматься, то сама по себе «lxi sp» лишняя, так как классический код (читайте: для военной техники с повышенным требованием к стабильности и без разных сомнительных трюков) совершать предустановку указателя стека должен всегда один раз.
Ради интереса, я и ПДП программировал через «lxi sp,0E006h + push hl»…
Если желаете обфусцировать всё и путать хакера - это всегда пожалуйста!
Потому я и думаю, что теоретически код «31» аппаратно можно изъять и заменить на «rst 7» куда-то. То есть, искусственно симулировать прерывание без прерывания.
Как это должно работать…
Логика видит на шине «M1»+«MREQ»+«READ» и код «31». Тогда схема процессору «FF» и устанавливает специальный триггер, который при следующем «M1» включит к шине ПЗУ с «макрокодом», примерно таким:Тем самым, искусственно получим команду «DAD const_16».Код:3138 E3 |XTHL 3139 D5 |PUSH DE 313A 5E |MOV E,M 313B 23 |INX H 313C 56 |MOV D,M 313D 23 |INX H 313E 33 |INX SP 313F 33 |INX SP 3140 E3 |XTHL 3141 19 |DAD DE 3142 3B |DCX SP 3143 3B |DCX SP 3144 D1 |POP DE 3145 C9 |RET
Естественно, ПЗУ с таким кодом имеет объём 64 Кб и старший байт адреса обозначает код инструкции. А младший байт - подключается к шине адреса процессора.
То есть, при считывании любого кода по «M1» ПЗУ это всегда подключено и схема следит, какой код ПЗУ возвращает.
Если код отличен от 00, то подключается это ПЗУ до команды C9 по всему пространству.
В прикладном режиме можно перехватить и команды «in/out» таким же образом, чтобы БСВВ получала управление и виртуализировала порты.
Например:И даже если физически портовое пространство отсутствует, как в РК, то подобными трюками приложение его может заполучить.Код:API-вызов / виртуальный порт CD 03 F8 --> DB 83 CD 12 F8 --> DB 82 CD 1B F8 --> DB 8B CD 15 F8 --> D3 85




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 

