Дизассемблер Yozh

Советский компьютер Радио-86РК (1986) и его клоны

Moderator: Shaos

User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

Re: Дизассемблер Yozh

Post by vital72 »

дизассемблер выводит мнемонику согласно таблице кодов. эта команда не документирована, о чём говорит подсказка, тем не менее, в железе процессором она исполняется именно так, как написано и, соответственно, следующий код будет выбран тот, который соответствует длине этой недокументированной инструкции, так что тут ещё вопрос, чей дизассемблер кривой.
но если так уж смущают недокументированные инструкции, которые специально помечены, чтобы обратить на себя внимание, то вы всегда можете код по этим адресам пометить как данные и вывод листинга будет приятен вашему глазу.
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
shiny
Maniac
Posts: 324
Joined: 14 Oct 2023 06:59

Re: Дизассемблер Yozh

Post by shiny »

vital72 wrote:дизассемблер выводит мнемонику согласно таблице кодов. эта команда не документирована, о чём говорит подсказка, тем не менее, в железе процессором она исполняется именно так, как написано и, соответственно, следующий код будет выбран тот, который соответствует длине этой недокументированной инструкции, так что тут ещё вопрос, чей дизассемблер кривой.
но если так уж смущают недокументированные инструкции, которые специально помечены, чтобы обратить на себя внимание, то вы всегда можете код по этим адресам пометить как данные и вывод листинга будет приятен вашему глазу.
А где такие сведения о недокументированных командах? Вообще-то меня смущают недокументированные инструкции, с ними одна головная боль.
User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

Re: Дизассемблер Yozh

Post by vital72 »

вообще-то, это не является каким-то секретом, информация легко гуглится.
в журнале Радио 87г. печаталась цветная таблица мнемоник проца 8080, где недокументированные команды были помечены серым цветом.

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

процессор 8085 имеет 12 дополнительных команд, по сравнению с 8080, но только две из них документированы, а команды эти могут упростить программисту жизнь.
Last edited by vital72 on 29 Feb 2024 11:14, edited 1 time in total.
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
shiny
Maniac
Posts: 324
Joined: 14 Oct 2023 06:59

Re: Дизассемблер Yozh

Post by shiny »

vital72 wrote:вообще-то, это не является каким-то секретом, информация легко гуглится.
у меня какое-то невезение с Радио 86рк - мало что находится. В описании опкодов 8080 находил команды с прочерками.

Спасибо за разъяснение, учту.
КР580ВМ80А (как и прототип 8080) имеет 12 недокументированных команд. Опкоды #08, #10, #18, #20, #28, #30, #38 являются аналогами операции NOP; опкод #CB является аналогом JMP; опкоды #DD, #ED, #FD являются аналогами CALL; опкод #D9 является аналогом RET.
User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

Re: Дизассемблер Yozh

Post by vital72 »

таблички из ж. Радио
You do not have the required permissions to view the files attached to this post.
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
shiny
Maniac
Posts: 324
Joined: 14 Oct 2023 06:59

Re: Дизассемблер Yozh

Post by shiny »

дизассемблер REZ с сырками под cp/m:
http://www.retroarchive.org/cpm/cdrom/S ... 00/VOL010/
User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

Re: Дизассемблер Yozh

Post by vital72 »



обнаружился небольшой баг в моём коде дизассма, связанный с проверкой границ блока.
например, если ввести директиву "YF800,FFFF" или "Y1,", то ничего выводиться не будет, хотя директива D с такими параметрами отрабатывает. ошибка связана с нечёткой проверкой границ блока.
простое решение, которое у меня получилось на данный момент -- это:
1. вначале цикла дизассма по метке disassm убрать код

Code: Select all

	inx	d
	call	CMP_DE_HL
	jnc	MONITOR_PROMPT
2. в конце цикла вместо кода

Code: Select all

	jmp	disassm + 1
поместить код

Code: Select all

	dcx	h
	call	CMP_DE_HL
	inx	h
	jc	disassm
	jmp	MONITOR_PROMPT
это решит проблему с параметрами "YF800,FFFF", но по-прежнему не решит "Y1,", т.е. будет необходимо всегда задавать конечный адрес блока.
Last edited by vital72 on 01 Mar 2024 06:43, edited 1 time in total.
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
Alikberov
Doomed
Posts: 347
Joined: 14 Oct 2019 18:10
Location: Tashkent

Re: Дизассемблер Yozh

Post by Alikberov »

vital72 wrote:это решит проблему с параметрами "YF800,FFFF", но по-прежнему не решит "Y1,", т.е. будет необходимо всегда задавать конечный адрес блока.
В своём варианте я тоже с этим сталкивался и решил тупо: Три раза проверяю границы на ZF со сдвигом на единицу. :lol:
Громоздко, но помогло. :idea:
User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

Re: Дизассемблер Yozh

Post by vital72 »

тоже думал так сделать, но не хотел раздувать код
-----
всё фигня -- давай по новой.
всё равно налажал, типичная ошибка на единицу. исправил предыдущий пост.
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Дизассемблер Yozh

Post by Shaos »

А если просто проверять, что текущий адрес (подготовленный для следующего цикла) переехал через конечный?
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

Re: Дизассемблер Yozh

Post by vital72 »

неправильно прочитал сообщение.
другой ответ: проверка "переехал" -- это и есть проверка на меньше, такое исправление и предложено, единственно, это не сработает, когда конечный адрес не задан (равен нулю)
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Дизассемблер Yozh

Post by Shaos »

ну ноль это тоже адрес :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

Re: Дизассемблер Yozh

Post by vital72 »

ну вот когда конечный адрес блока равен нулю, а начальный нет -- ничего выводиться не будет, а если оба по нулям, только одна инструкция выведется. думаю, это приемлемое решение минимумом кода. была проблема, когда конечный адрес был FFFF, сейчас, вроде, я её вылечил, но это не точно :ebiggrin:
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

Re: Дизассемблер Yozh

Post by vital72 »

ради интереса замерил время, за сколько продизассеблирует дизассемблер всю память 0000-FFFF.
у меня получилось 41 минута.
условия, при которых выполнялась программа, были следующие:
-- частота процессора 3МГц;
-- стандартная авторская подпрограмма вывода текста;
-- сразу после запуска была нажата кнопка, чтобы изменить внутреннее состояние клавиатуры на "есть символ для чтения", это придаёт скорости к выводу.
самое узкое место здесь -- это авторская подпрограмма вывода. мало того, что она сама по себе медленная, так какого-то чёрта в ней ещё делается опрос клавиатуры, убивающий скорость напрочь. по итогу скорее была измерена скорость вывода, чем скорость дизассемблеривания.
на скорость дизассемблеривания влияют команды, которые попадаются по дороге. самые быстрые -- это команды NOP и аналогичные. у меня в памяти были какие то куски кода, нулей было немного, особенно учитывая, что половина памяти -- это адреса портов, там вообще нулей не бывает.
для своего проекта я полностью переписал весь Монитор и моя подпрограмма вывода в разы шустрее авторской.
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Дизассемблер Yozh

Post by Shaos »

Медленновато как-то
Я тут за главного - если что шлите мыло на me собака shaos точка net