Дизассемблер 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 »

975
You do not have the required permissions to view the files attached to this post.
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
Shaos
Admin
Posts: 24053
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

да - теперь совсем-совсем предел :surprised:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 355
Joined: 14 Oct 2019 18:10
Location: Tashkent

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

Post by Alikberov »

Внесу и свою лепту в это творчество! :no:
Уместил в 926 (только i8080) байтов, но имеются недоработки (за сутки это просто так не отладишь) - нужно более тщательнее всё писать/отлаживать (вылетать перестал - уже хорошо!).
(Вообще-то, особого настроения нет - сложно всё это, да и ваш код не переплюнуть. :roll: )
You do not have the required permissions to view the files attached to this post.
User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

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

Post by vital72 »

... и тут подумалось ...
половину таблицы disassm_table_8085 занимают команды MOV, OR, ANA и т.д. а в тоже время, все данные уже находятся в коде команды. если сделать отдельный обработчик для этих команд, то таблицу disassm_table_8085 можно уполовинить, а это АЖ 256 байт!
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
Shaos
Admin
Posts: 24053
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

vital72 wrote:... и тут подумалось ...
половину таблицы disassm_table_8085 занимают команды MOV, OR, ANA и т.д. а в тоже время, все данные уже находятся в коде команды. если сделать отдельный обработчик для этих команд, то таблицу disassm_table_8085 можно уполовинить, а это АЖ 256 байт!
Ну это же сдвинутая половина и потом там есть исключение - HLT (MOV M,M), а в-принципе, наверное можно процедурно эту часть таблицы заполучить - типа разбить таблицу на четверти, первая и четвёртая четверти будут храниться и обрабатываться как сейчас, а вторая и третья - процедурно :roll:

типа:

Code: Select all

;  =============================================================================
;  ДИЗАССЕМБЛИРОВАНИЕ БЛОКА КОДА  ______________________________________________
;  вход:  HL - начальный адрес блока
;         DE - конечный адрес блока

disassm:
        inx     d
        call    CMP_DE_HL
        jnc     MONITOR_PROMPT
        push    d
        push    h               ;  addr of first byte
        lxi     d, disassm_out
        push    d
        mov     e, m
        mvi     d, 0
        inx     h
        push    h
; vvvvvvvvvv
        mov a,e
        cpi 40h
        jc old
        cpi 0C0h
        jnc old
        ; procedural
        ...
        jmp DALEE
; ^^^^^^^^^^
old:    lxi     h, disassm_table_8085
        dad     d
        dad     d
...
А внутри таблицы (на месте второй и третьей четверти) положить другие таблички и код, чтобы забить место :lol:

Ну или просто на четверти разбить и иметь четыре таблички - с адресами хранимыми в массиве из 4 слов (просто второй и третий адреса будут по другому использоваться)...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24053
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

Alikberov wrote:Внесу и свою лепту в это творчество! :no:
Уместил в 926 (только i8080) байтов, но имеются недоработки (за сутки это просто так не отладишь) - нужно более тщательнее всё писать/отлаживать (вылетать перестал - уже хорошо!).
(Вообще-то, особого настроения нет - сложно всё это, да и ваш код не переплюнуть. :roll: )
Я хочу CI/CD нахлобучить на гитлаб-репу (когда выложу заточенную под pdp11asm85 версию), чтобы оно при каждом коммите собирало и прогоняло тесты (для этого надо дописать мой текстовый эмулятор рк), чтобы удостовериться, что ничего не сломалось в обновляемой версии...
Я тут за главного - если что шлите мыло на 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 »

766 байт
... и жопой чую, что это не пердел.
You do not have the required permissions to view the files attached to this post.
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
Shaos
Admin
Posts: 24053
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

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

Post by Shaos »

:o
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 355
Joined: 14 Oct 2019 18:10
Location: Tashkent

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

Post by Alikberov »

Кстати, попытался избавиться от таблицы - дороговато!

 Подсчёт длины инструкции

Code: Select all

;;;;;;;;;;;;;;;;;;;;;;;;;
;;;INSTRUCTION LENGTH ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;
; A     INSTRUCTION CODE;
;;;;;;;;;;;;;;;;;;;;;;;;;
; C     INSTRUCTION SIZE;
;;;;;;;;;;;;;;;;;;;;;;;;;
; SIZE: 74 BYTES        ;
;;;;;;;;;;;;;;;;;;;;;;;;;
LEN:    MVI     C,001H  ; Или 31h для F809 проверки
        SUI     040H
        RP
        XRI     046H
        MOV     B,A
        INR     C
        ANI     007H
        RZ
        INR     C
        ORA     B
        CPI     0A0H
        JC      LEN@1
        ANI     007H
        CPI     004H
        RZ
        ORA     B
LEN@1:  CPI     0C0H
        JNC     LEN@2
        ANI     00FH
        CPI     007H
        RZ
        DCR     C
        DCR     C
        RET
LEN@2:  ANI     00FH
        CPI     002H
        RZ
        CPI     00AH
        RZ
        CPI     00BH
        RZ
        ANI     007H
        CPI     005H
        JZ      LEN@4
LEN@3:  DCR     C
        DCR     C
        RET
LEN@4:  ORA     B
        CPI     0C0H
        JC      LEN@3
        CPI     0D0H
        RC
        DCR     C
        CPI     0E0H
        RC
        DCR     C
        RET

Таблицей - компактнее и гибче:

 Используя таблицу

Code: Select all

LEN:    MVI     L,001H
        SUI     0C0H
        RM
        PUSH    PSW
        RRC
        RRC
        ANI     01FH
        ADI     LEN@TB
        MOV     L,A
        MVI     A,LEN@TB>>8
        ACI     000H
        MOV     H,A
        MOV     L,M
        POP     PSW
        ORI     0FCH
LEN@1:  DAD     H
        DAD     H
        INR     A
        JM      LEN@1
        MOV     A,H
        ANI     003H
        MOV     L,A
        RET

LEN@TB: DB      0F5H,067H,035H,06FH     ; C0-CF
        DB      0B5H,067H,0B1H,063H     ; D0-DF
        DB      075H,067H,075H,063H     ; E0-EF
        DB      075H,067H,075H,063H     ; F0-FF
        DB      05DH,065H,054H,065H     ; 00-0F
        DB      05CH,065H,054H,065H     ; 10-1F
        DB      07CH,065H,074H,065H     ; 20-2F
        DB      07CH,065H,074H,065H     ; 30-3F

Last edited by Alikberov on 11 Feb 2024 15:25, edited 1 time in total.
User avatar
Alikberov
Doomed
Posts: 355
Joined: 14 Oct 2019 18:10
Location: Tashkent

Дизассемблер «A…»…

Post by Alikberov »

На данный момент - 938 байт (все инструкции i8080) с адреса 0038 по 03E2.

В качестве демонстрации код использует служебные ячейки Журнального Монитора для трюкового запуска директивой «G,<начало>,<конец>» для дизассемблирования любого фрагмента памяти…
Прерывание - по F4/УС+C.

Внимание!
Параметр «<начало>» нельзя указывать ниже 0010 и выше 7600/!\
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 24053
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 »

740 байт.
каждый байт даётся с большим трудом.
для тестов прилагаю откомпилированный файл дизассемблера, код располагается с адреса 7000H и запускатель дизассемблера директивой Монитора "G,<начало>,<конец>" (скоммуниженно у Руслана)
You do not have the required permissions to view the files attached to this post.
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 »

ну и как всегда, сразу же нашёл как ещё два байта срезать
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 »

хехе 734
You do not have the required permissions to view the files attached to this post.
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
Alikberov
Doomed
Posts: 355
Joined: 14 Oct 2019 18:10
Location: Tashkent

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

Post by Alikberov »

Shaos wrote:А трюкового это как? :)
В данном контексте слово трюк употребляется в том смысле, что до него, на сколько мне известно, никто не додумывался до сих пор. :mrgreen:
Здесь развёрнуто и подробно.
vital72 wrote:(скоммуниженно у Руслана)
:lol:
Last edited by Alikberov on 12 Feb 2024 07:02, edited 1 time in total.