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

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

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24085
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Mondx wrote:
Shaos wrote:А в каком месте я некрасиво написал? :lol:
Я имею ввиду стиль. После ветвлений (jmp, ret) желательна пустая строка и т.п.
Ты про yozh0003.asm? Он целиком и полностью основан на disassm.v1.8.asm от vital72 :mrgreen:

Или ты про выхлоп дизассембера? Там как раз лучше всё слепить покомпактнее :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
Mondx
Doomed
Posts: 518
Joined: 10 Aug 2022 07:27
Location: Crimea

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

Post by Mondx »

Нет, вообще.
Видно что vital72 грамотный парень). Но конструкции $-5 это чтотто.) Понятно, что это для продвинутых парней, а тогда почему бы не писать как Аликберов, просто в кодах?)
User avatar
Shaos
Admin
Posts: 24085
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Ну переходы с $ это дело поправимое :)
Потом причешу для пущей читаемости.
Но первым делом надо автоматические тесты нагородить…
Я тут за главного - если что шлите мыло на me собака shaos точка net
Mondx
Doomed
Posts: 518
Joined: 10 Aug 2022 07:27
Location: Crimea

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

Post by Mondx »

Shaos wrote:Ну переходы с $ это дело поправимое …
В м80 для .z80 это делается на раз:
loop defl $
jp loop
Для .8080, думаю будет:
loop set $
jmp loop
Но это так, к слову.)
User avatar
Alikberov
Doomed
Posts: 355
Joined: 14 Oct 2019 18:10
Location: Tashkent

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

Post by Alikberov »

Mondx wrote:Понятно, что это для продвинутых парней, а тогда почему бы не писать как Аликберов, просто в кодах?)
Просто в кодах - это только при включении КР-03 или при редактировании ПЗУ, где нужно чётко попадать в адрес.
А так - онлайн ассемблер помогает.
b2m
Devil
Posts: 907
Joined: 26 May 2003 06:57

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

Post by b2m »

Shaos wrote:P.S. вот этот кусок поди можно переписать без дадов?
Ну ка расскажи, как можно быстро вытягивать по 5 бит из HL в A ;)
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
Mondx
Doomed
Posts: 518
Joined: 10 Aug 2022 07:27
Location: Crimea

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

Post by Mondx »

b2m wrote:
Shaos wrote:P.S. вот этот кусок поди можно переписать без дадов?
Ну ка расскажи, как можно быстро вытягивать по 5 бит из HL в A ;)
Не хочется читать историю... Но тут бы хотелось поконкретнее с терминологией.
5 бит из HL (а тогда почему HL?) или по (HL)? И каких бит.
Вроде бы грамотный мужик, а формулировки... не очень.)
User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

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

Post by vital72 »

Shaos wrote: P.S. вот этот кусок поди можно переписать без дадов?
нет никак, это самое компактное, что может быть, и код и так небольшой -- всего два байта на пересылку бита в аккум, итого 10 байт на всё.

------------
Shaos wrote: пожалуй я возьму за основу Йожа версию 1.8
а почему не последнюю? отличия 1.9.2 от 1.8 только в том, что 3-х байтовые команды LXI заменены на 2-х байтовые MVI, там, где старший байт регистровой пары уже имеет нужное значение, а также оптимизированы переходы, вот такой код:

Code: Select all

	...
	jc	label
	...

label:
	<code>
	jmp	continue
заменён на компактный:

Code: Select all

	...
	<code>
	jc	continue
	...
ПЫСЫЖ эзотерикой я ещё не занимался :esmile:
у меня самой простой табличный способ -- тупо взял описание команды из таблицы, сделал читабельной и выплюнул, это камрады Alikberov и b2m команды на биты раскладывают.
я вот пока медитирую над таблицей 8080, выискиваю возможности для дальнейшей оптимизации.
Last edited by vital72 on 13 Feb 2024 05:12, edited 2 times in total.
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
Shaos
Admin
Posts: 24085
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 »

Shaos wrote:Ну там ещё описатели команд как-то вдруг стали по две в строку упакованы…
а, ну так, ищём пути уменьшения кода :ebiggrin:
ну а если так не хочется упакованные таблицы использовать -- посмотри в сторону замены LXI на MVI, а так же уменьшения количества переходов по примеру выше, там как минимум два перехода можно убрать.
ПЫСЫЖ могу сам 1.8 соптимизировать, будет 1.8.1
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
Alikberov
Doomed
Posts: 355
Joined: 14 Oct 2019 18:10
Location: Tashkent

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

Post by Alikberov »

 Распаковка мнемоники

Code: Select all

;;;;;;;;;;;;;;;;;;;;;;;;;
;       HL - TEXT BUFFER
;       DE - PACKED ASCII
;;;;;;;;;;;;;;;;;;;;;;;;;
; ?XXX_XXYY YYYZ_ZZZZ
;;;;;;;;;;;;;;;;;;;;;;;;;
MNEM:   MOV     A,D
        ANI     07CH
        STC
        RAR
        RAR
        MOV     M,A     ; Печатаем первую букву (XXXXX)
        INX     H
        MOV     A,D
        ANI     00BH
        ORI     008H
        MOV     D,A
        MOV     A,E
        XCHG
        DAD     H
        DAD     H
        DAD     H
        XCHG
        MOV     M,D     ; Печатаем вторую букву (YYYYY)
        INX     H
        ANI     01FH
        ORI     040H
        MOV     M,A     ; Печатаем третью букву (ZZZZZ)
        INX     H       ; 23 инструкции / 28 байтов

User avatar
Shaos
Admin
Posts: 24085
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Mondx wrote:
b2m wrote:
Shaos wrote:P.S. вот этот кусок поди можно переписать без дадов?
Ну ка расскажи, как можно быстро вытягивать по 5 бит из HL в A ;)
Не хочется читать историю... Но тут бы хотелось поконкретнее с терминологией.
5 бит из HL (а тогда почему HL?) или по (HL)? И каких бит...
Ну тут задача из 16 бит вытащить 3 буквы (и 1 флаг) - буквы упакованы по 5 бит, которые надо вычитать и прибавить к ним 40h:

Code: Select all

0257 0080                               disassm_put_str:
0258 0080 D5                                    push    d
0259 0081 5F                                    mov     e, a
0260 0082 16 00                                 mvi     d, 0
0261 0084 19                                    dad     d
0262 0085 19                                    dad     d
0263 0086 5E                                    mov     e, m
0264 0087 23                                    inx     h
0265 0088 56                                    mov     d, m
0266 0089 EB                                    xchg
0267 008A D1                                    pop     d
0268 008B CD 91 00                              call    $+6
0269 008E CD 91 00                              call    $+3
0270 0091 AF                                    xra     a
0271 0092 29                                    dad     h
0272 0093 17                                    ral
0273 0094 29                                    dad     h
0274 0095 17                                    ral
0275 0096 29                                    dad     h
0276 0097 17                                    ral
0277 0098 29                                    dad     h
0278 0099 17                                    ral
0279 009A 29                                    dad     h
0280 009B 17                                    ral
0281 009C A7                                    ana     a
0282 009D C8                                    rz
0283 009E C6 40                                 adi     40h
0284 00A0 12                                    stax    d
0285 00A1 13                                    inx     d
0286 00A2 C9                                    ret
Вот скажем если бы они были упакованы в другом порядке - не так:

Code: Select all

dw      ((S_5BIT*2048)+(T_5BIT*64)+(A_5BIT*2)+1)        ;  STAX
а скажем так:

Code: Select all

dw      (S_5BIT+(T_5BIT*32)+(A_5BIT*1024)+8000h)        ;  STAX
то первая буква вытаскивалась бы таким образом:

Code: Select all

    mov a,m
    ani 1Fh
    adi 40h
а третья буква таким:

Code: Select all

    inx h
    mov a,m
    rrc
    rrc
    ani 1Fh
    adi 40h
но вот со второй буквой есть сложности...
Я тут за главного - если что шлите мыло на 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 »

 Распаковка мнемоники 24 байта

Code: Select all

;       DE - TEXT BUFFER
;       HL - PACKED STR

	call	$+6
	call	$+3
	xra	a
	dad	h
	ral
	dad	h
	ral
	dad	h
	ral
	dad	h
	ral
	dad	h
	ral
	ana	a
	rz
	adi	40h
	stax	d
	inx	d
	ret

https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
Alikberov
Doomed
Posts: 355
Joined: 14 Oct 2019 18:10
Location: Tashkent

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

Post by Alikberov »

vital72 wrote:

 Распаковка мнемоники 21 байт (строго 3 буквы)

Code: Select all

;       DE - TEXT BUFFER
;       HL - PACKED STR

	call	$+6
	call	$+3
	mvi   a,1
	dad	h
	ral
	dad	h
	ral
	dad	h
	ral
	dad	h
	ral
	dad	h
	ral
	stax	d
	inx	d
	ret

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

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

Post by vital72 »

:ebiggrin:
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой