User Tag List

Результаты опроса: Использование RST

Голосовавшие
5. Вы ещё не участвовали в этом опросе
  • Предлагаемый вариант нужно обсудить…

    1 20.00%
  • Старо, как весь восьмибитный мир!

    2 40.00%
  • Автор сам понял, что написал?

    2 40.00%
Опрос с выбором нескольких вариантов ответа.
Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 21 по 30 из 47

Тема: Обфускация кода / Плюшки команды RST 7

  1. #21

    Регистрация
    05.03.2010
    Адрес
    Ташкент
    Сообщений
    160
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    41 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Exclamation x86-мнемоника для i8080/z80 и rst 0 - это зло или хорошо?

    Кaк-то уже писал свой транслятор с ассемблера, в котором опкод - i8080, а мнемоника - x86.
    И знаете что? Отлаживать свои программы стало легче!
    Так как я их стал писать в MSVC внутри «_asm {…}», а потом копировал и транслировал в код ВМ80:
    • mov al,[bx] === mov a,m
    • xchg bx,[sp] === xthl
    • jmp bx === pchl
    • add bx,dx === dad de


    Кстати, вот накидал тут кода:

    Используется всё: RST 0…7

    Код:
    prompt  equ	0F86Ch
    puta	equ	0F815h
    puts    equ	0F818h
    
    THE_PSW	EQU	07FFEH
    THE_HL	EQU	07FFCH
    
    JRNZ	EQU	0C7H
    JRZ	EQU	0CFH
    JRNC	EQU	0D7H
    JRC	EQU	0DFH
    
            org 0
    ;    Эта крошечная утилита с оригинальным трюком
    ; использования RST-команд.
    ; Возможность выбора точки старта программы посредством
    ; директивы <G0>..<G38>-МОНИТОРа.
    ; Возможность вызова нужной подпрограммы при помощи
    ; функции <USR(0..56)>-БЕЙСИКа.
    ; Вызов дополнительного API из любой части остального
    ; приложения посредством <RST 0>..<RST 7>
    	ORG	00000H
    	DB	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
    	DB	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
    	DB	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
    	DB	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
    	DB	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
    	DB	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
    	DB	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
    ; Здесь располагается обработчик программных прерываний и системных вызовов.
    ; Через "МОНИТОР" из-вне имеется 57 точек входа директивой G0-G38 для запуска
    ; программы в различных режимах.
    ; Внутри программы эти вызовы дублируют API "МОНИТОРа" и дополняют его.
    	ORG	00038H
    	SHLD	THE_HL	; Сохраняем HL-пару
    	PUSH	PSW	; Затем, посредством
    	POP	H	; регистровой пары HL
    	SHLD	THE_PSW	; сохраняем и PSW
    	LXI	H,08A00H; Проверяем указатель стека:
    	DAD	SP	; Предустановил ли его МОНИТОР?
    	POP	H
    	JC	START	; Значит это "холодный старт"
    	MOV	A,H
    	ADD	A	; Проверим, прикладной ли вызов?
    	JNZ	THE_APP	; Приложение вызывает наш API
    	JC	MON_RST	; Значит один из FF МОНИТОРа
    	MVI	A,TAPIS	; Table of APIs
    	ADD	L	; Иначе - это USR-вызов
    	MOV	A,M
    	INX	H
    	MOV	H,M
    	XTHL
    	LHLD	THE_PSW
    	PUSH	H
    	POP	PSW
    	LHLD	THE_HL
    	RET
    THE_APP:MOV	A,M	; Вызов из приложения
    	XRI	080H	; Если укладывается в KOI-7
    	JM	PRINT	; Просто печатаем сообщение
    	INX	H
    	PUSH	H	; Сейчас проверим следующий байт
    	SUI	012H	; Одна из стандартных 18 точек
    	JC	THE_MON	; МОНИТОРа?
    	ADD	A
    	MVI	H,THE_API >> 8
    	MOV	L,A
    	MOV	A,M
    	INX	H
    	MOV	H,M
    	MOV	L,A
    	XTHL
    	RET
    THE_MON:CMA
    	MOV	L,A
    	ADD	A
    	ADD	L
    	MOV	L,A
    	MVI	H,0F8H
    THE_RET:PUSH	H
    	LHLD	THE_PSW
    	PUSH	H
    	POP	PSW
    	LHLD	THE_HL
    	RET
    PRINT:	PUSH	H
    	PUSH	B
    	CALL	PUTS
    	POP	B
    	INX	H
    	JMP	THE_RET
    TAPIS:	DW	PROMPT
    	DW	  0,0,0,0,0,0,0
    	DW	0,0,0,0,0,0,0,0
    	DW	0,0,0,0,0,0,0,0
    	DW	0,0,0,0,0,0,0,0
    	DW	0,0,0,0,0,0,0,0
    	DW	0,0,0,0,0,0,0,0
    	DW	0,0,0,0,0,0,0
    START:	LXI	SP,075FFH
    	MOV	C,L
    	DB	0FFH,1FH,'START:',0
    	MOV	A,C
    	DB	0FFH,08AH
    	DB	0FFH,092H
    Фокус в том, что при запуске через «G0…G38» указатель стека SP установлен в служебную область МОНИТОРа и программно легко это определить.
    А вот при «CALL 00000h…00038h» указатель стека уже в области пользователя и получается, что и «RST 0» тоже работает как особая подпрограмма.

    На ZX-Spectrum этот трюк не сработает, так как при СБРОСе SP никак не изменяется.
    Но вот кодом «FF» я заполнял все 256 ячеек (исключения - 00038h и 00098h, где нужно вставить «JR»), а сам код начинался с 00100h.
    [свернуть]

  2. #22

    Регистрация
    16.12.2008
    Адрес
    Kharkov, Ukraina
    Сообщений
    2,221
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    18 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Видимо автор не читал свой заголовок темы, критику и посты по теме. Или попутал в запале со своей соседней темой. А теперь в стиле зх.пк обсуждает чего-то другое.

    Как нам было бы хорошо, если бы команды да для меня лично на понятном языке.

    Гугл ассистент еще вспомним, и Эллочку-людоедку.
    Электроника КР-02, MSX YIS-503IIR, Орион-128, Ленинград-2, Pentagon-128k, MSX2 YIS-503IIIR, MSX-EXT, ...

  3. #23

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,395
    Спасибо Благодарностей отдано 
    765
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Радио-86РК Посмотреть сообщение
    Кaк-то уже писал свой транслятор с ассемблера, в котором опкод - i8080, а мнемоника - x86.
    Например Веремеенко (который еще писал про Dendy+спек) в zx-ревю писал про систему Трамплин, если не путаю.


    Цитата Сообщение от Радио-86РК Посмотреть сообщение
    ; Возможность вызова нужной подпрограммы при помощи
    ; функции <USR(0..56)>-БЕЙСИКа.
    1. Для какого бейсика это применимо, если у практически всех РКшных по этим адресам свои бейсиковские процедуры?
    2. Что это дает? Экономию 2-3 байт на каждом вызове из программы на бейсике? Можно сделать еще лучше (проще и короче) если просто хакнуть usr или даже добавить специальный оператор или функцию. И главный вопрос - кто будет это использовать? Не припомню выкладывания новых программ на бейсике для РК за все время существования форума, хотя возможно я просто пропустил.

    Даже если отвлечься от бейсика, то программа скорее похожа на троллинг. Если это было целью тогда поздравляю, получилось.

    - - - Добавлено - - -

    Цитата Сообщение от ivagor Посмотреть сообщение
    Например Веремеенко (который еще писал про Dendy+спек) в zx-ревю писал про систему Трамплин, если не путаю.
    Похоже спутал, Веремеенко писал про мнемоники x86 для трансляции в код z80, не 8080. А про трансляцию мнемоник x86 в код 8080 возможно писали на форуме.

  4. #24

    Регистрация
    05.03.2010
    Адрес
    Ташкент
    Сообщений
    160
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    41 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от OrionExt Посмотреть сообщение
    Видимо автор не читал свой заголовок темы, критику и посты по теме. Или попутал в запале со своей соседней темой.
    Ничегo не попутал. Просто проводил достаточно опытов на разных архитектурах.
    Цитата Сообщение от ivagor Посмотреть сообщение
    1. Для какого бейсика это применимо, если у практически всех РКшных по этим адресам свои бейсиковские процедуры?
    Можно отследить, откуда вызов идёт. А в идеале - сам Бейсик хорошенечко подкорректировать.
    Цитата Сообщение от ivagor Посмотреть сообщение
    2. Что это дает? Экономию 2-3 байт на каждом вызове из программы на бейсике? Можно сделать еще лучше (проще и короче) если просто хакнуть usr или даже добавить специальный оператор или функцию. И главный вопрос - кто будет это использовать? Не припомню выкладывания новых программ на бейсике для РК за все время существования форума, хотя возможно я просто пропустил.
    В ZX-Spectrum RST-фишки реализованы не совсем оптимально.
    Оно и видно - начало 80-х. Сейчас Демо-сцена вытворяет вещи, невообразимые для тех лет.

    DRIFT

    [свернуть]

    И Бейсики (всех архитектур) можно было переписать на уровне XXI века с куда широкими трюками.
    Цитата Сообщение от ivagor Посмотреть сообщение
    Даже если отвлечься от бейсика, то программа скорее похожа на троллинг. Если это было целью тогда поздравляю, получилось.
    Вот уж не хотел троллить.
    Видимо, когда одновременно занимаешься смежным кодом, он из смежного становится смешанным и всех путает.
    Последний раз редактировалось Радио-86РК; 10.12.2019 в 18:54. Причина: добавил видео

  5. #25

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,395
    Спасибо Благодарностей отдано 
    765
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Радио-86РК Посмотреть сообщение
    В ZX-Spectrum RST-фишки реализованы не совсем оптимально.
    Оно и видно - начало 80-х. Сейчас Демо-сцена вытворяет вещи, невообразимые для тех лет.
    И Бейсики (всех архитектур) можно было переписать на уровне XXI века с куда широкими трюками.
    Если это серьезный ответ, то я зря влез в обсуждение.

  6. #26

    Регистрация
    16.12.2008
    Адрес
    Kharkov, Ukraina
    Сообщений
    2,221
    Спасибо Благодарностей отдано 
    4
    Спасибо Благодарностей получено 
    21
    Поблагодарили
    18 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Чего меня беспокоить (движок форума)? ivagor?
    Электроника КР-02, MSX YIS-503IIR, Орион-128, Ленинград-2, Pentagon-128k, MSX2 YIS-503IIIR, MSX-EXT, ...

  7. #27

    Регистрация
    05.03.2010
    Адрес
    Ташкент
    Сообщений
    160
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    41 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Post ПСИХ: ПДП, Синхронизация, ИМС - Хроники

    Пo теме…
    Не так давно использовал RST для необычной задачи…

    Немногo оффтопа…
    psi.zip
    Легенда
    Никакие микросхемы не могут быть исправными на все 100%.
    Соответственно, какие-то и греются сильнее. А в микросхемах ОЗУ это также может приводит к аномально быстрой потере заряда ячейками запоминающей матрицы…
    Так как РУ6/РУ3 - матрицы 128×128, то достаточно регенерировать 128 ячеек перебором по RAS, что давно всем известно.
    И пришла одна идейка, чтобы написать утилиту, которая отключает циклы ПДП на продолжительный, но управляемый период времени. Всё это время процессор активно регенерирует только 28 ячеек, считывая из них коды команд циклической задержки.

    Как Вы уже догадываетесь, сложность вся заключалась в том, чтобы весь код программы размещался короткими секциями по 28 байт каждые 128 байт. Тем самым, код программы всегда будет храниться надёжно именно во всех каждых 28 байтах. Тогда как остальные 100 ячеек на всей протяжённости адресного пространства будут тихонечко разряжаться…

    Утилита
    Максимально компактно и писалась специально под все эти условия. С помощью RST-трюков удалось добиться её максимальной(относительно) плотности.
    После запуска «G0»-директивой она:
    1. Очищает экран и выводит содержимое буфера 50×25
    2. Выводит текущее значение задержки
    3. Позволяет пользователю курсорными клавишами настроить величину задержки
    4. Нажатием на «ПРОБЕЛ» можно очистить буфер
    5. Нажатием «ВК» отключается ПДП на период выбранной величины
    6. Восстанавливает синхронизацию и переходит к шагу №1

    При «0000» задержки никакой нет - минимальна.
    При «FFFF» задержка максимальна, длительностью до десятка секунд…

    P.S.: Если кому-то нравятся необычные программы, это - от меня…

    Эти 2 пользователя(ей) поблагодарили Радио-86РК за это полезное сообщение:

    Oleg N. Cher(13.12.2019), Titus(13.12.2019)

  8. #28

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Можно программировать для 8080 с мнемониками z80
    ну дык за это я и агитирую


    Цитата Сообщение от Denn Посмотреть сообщение
    У кого-то "мышление робота" и ему понятнее чёткие монотонные конструкции "LD xx,yy" - здоровья на.
    это у 8080тчиков мышления робота

    они умножают на $8 в шестнадцетиричной системе в голове

    для них же просто очевидно что обработчик RST 5 лежит по адресу $28
    в х86 асме тоже гафно
    а там int-ов заметно побольше...

    почему некоторые с "мышлением робота" додумались писать rst 28
    а некоторые с мышлением человеков не додумались?
    Последний раз редактировалось NEO SPECTRUMAN; 13.12.2019 в 04:52.

  9. #29

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,415
    Спасибо Благодарностей отдано 
    1,711
    Спасибо Благодарностей получено 
    2,238
    Поблагодарили
    881 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Радио-86РК Посмотреть сообщение
    Утилита
    А назначение-то утилиты какое? )

    - - - Добавлено - - -

    Цитата Сообщение от Радио-86РК Посмотреть сообщение
    Оно и видно - начало 80-х. Сейчас Демо-сцена вытворяет вещи, невообразимые для тех лет.
    Сейчас демо-сцена ничего такого не вытворяет) 90-е годы особо не переплюнуты)

  10. #30

    Регистрация
    05.03.2010
    Адрес
    Ташкент
    Сообщений
    160
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    66
    Поблагодарили
    41 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    А назначение-то утилиты какое? )
    Утилитарноe!
    Жалко, эмуляторы не достаточно развиты в этом плане: Циклы регенерации памяти им не нужны и разработка программ под эмуляцию несколько отличается в плане упрощения…

    А утилита эта написана и отлажена онлайн-эмулятором, но предназначается именно для реального «РАДИО-86РК» в железе. Помнится, на кассете у меня были программа теста ОЗУ и определения скорости по пилотону.
    Вот эта утилита производит обратное: Она отключает ПДП нарочно, чтобы потом отобразить картину обрушения данных на физических микросхемах (не эмулируемых).

    На самом деле, я пытался её писать десятилетиями!
    Но не знал, как подойти. Дамп уж слишком большой получался - около килобайта. Тяжело было и визуально охватывать, и отлаживать…
    А вот с помощью «RST» нашёл выход: Вместо «JMP» между секциями вставляю «RST», которая прыгает через 100 байтов вперёд.
    Интересно то, что лет 20 тому назад опыта у меня не было для подобных трюков. А вот в этом году за ночь написал и отладил!
    (Лет 15 назад для PC написал подобную утилиту с отображением графика биения частот компонентов ПК. К сожалению, только в чистейшем DOS работает и не терпит никаких эмуляций или виртуализации. То есть, сейчас её нормально запустить - проблема…)

    P.S.: То есть, продолжаю на РАДИО-86РК писать программы в XXI веке!

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Недокументированные команды z80
    от tae1980 в разделе Программирование
    Ответов: 18
    Последнее: 09.12.2018, 09:16
  2. Неиспользуемые и редкоиспользуемые команды
    от alone в разделе Программирование
    Ответов: 120
    Последнее: 18.10.2013, 00:07
  3. Недокументированные команды
    от MadCat! в разделе Программирование
    Ответов: 46
    Последнее: 02.02.2011, 13:49
  4. Команды Z80
    от e2e4 в разделе Для начинающих
    Ответов: 11
    Последнее: 02.07.2010, 21:13
  5. Команды Z80
    от Almaz в разделе Программирование
    Ответов: 1
    Последнее: 28.10.2007, 12:50

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •