Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Эмуляторы отечественных компьютеров (http://zx-pk.ru/forumdisplay.php?f=61)
-   -   Эмулятор ДВК (http://zx-pk.ru/showthread.php?t=18351)

MiX 16th December 2013 04:47

Patron, А может-ли эмулятор работать с реальными дисководами?

Patron 19th December 2013 16:39

Обновилась текущая сборка "эмулятора ДВК": DVK_Emulator_19.12.13_00-19

Изменения:

1. Внесены изменения, описанные ЗДЕСЬ.

2. Добавлена возможность управления встроенным дизассемблером, для чего:

2.1. В объект 1801VM1 добавлены:

2.1.1. Состояние DisAsm, которое включает/выключает встроенный дизассемблер.
2.1.2. Состояние StepMode, которое включает/выключает режим пошагового выполнения команд. При включении StepMode - всегда включается DisAsm. При выключении DisAsm - всегда выключается StepMode.
2.1.3. Текстовый порт DisAsm, в который выводится листинг дизассемблирования исполняемых команд.
2.1.4. Параметры DisAsmBottomAddr и DisAsmTopAddr, позволяющие задать нижнюю и верхнюю границы окна дизассемблирования.
2.1.5. Скрытый параметр MaxLoopCommandsToHide ( значение по умолчанию 24 ), управляющий "сжатием" листинга циклов. В пошаговом режиме сжатие листинга циклов отключается.


3. В модуль CPU_module добавлен объект CPUCSR, создающий на шине отладочный порт по адресу, задаваемому параметром CPUCSR_Address ( значение по умолчанию 0177724 ). Бит 00 этого порта управляет состоянием DisAsm, а бит 01 - управляет состоянием StepMode подключенного к шине процессора.

4. В комплект поставки включён файл конфигурации DisAsm.cfg, выводящий листинг дизассемблирования в отдельное окно.

5. В образ HDSYS.DSK добавлены файлы CPUCSR.MAC и CPUCSR.SAV, содержащие пример взаимодействия отлаживаемой программы с отладочным портом. Для отключения дизассемблирования тела обработчика EMT - в файле конфигурации DisAsm.cfg нужно изменить параметр DisAsmTopAddr c 0177776 на ( например ) 040000.

Patron 19th December 2013 16:44

Изменение эмулируемой конфигурации.

Использование встроенного дизассемблера.
---------------------------------------------------------------

Файл конфигурации DisAsm.cfg содержит пример использования дизассемблера, встроенного в эмулятор процессора. Для отображения листинга дизассемблирования создаётся дополнительная консоль DisAsm, которая находится в отдельном окне:

Скрытый текст

Code:

[objects]

DisAsm        = Ядро:Console


[links]
CPU [DisAsm]  > DisAsm


[DisAsm.ini]
TabTitle=""
SeparateWindow_X0_px=0
SeparateWindow_Y0_px=0
SeparateWindow_DX_px=800
SeparateWindow_DY_px=600
InitialStateOf[SeparateWindow]=1
SaveChangesFor[SeparateWindow]=1
InitialStateOf[ControlBar]=0
SaveChangesFor[ControlBar]=1
InitialStateOf[StatusBar]=1
SaveChangesFor[StatusBar]=1
DumpMode=1
PrinterMode=0
InitialStateOf[Log]=0
SaveChangesFor[Log]=1

http://s5.hostingkartinok.com/upload...39312ad8b1.png

[свернуть]

На полосе окна DisAsm находятся виджеты кнопок, подключенных к состояниям объектов CPU и bus:

Скрытый текст

Code:

[objects]

DisAsm_Button    = Ядро:SB_StatePushButton
StepMode_Button  = Ядро:SB_StatePushButton
Step_Button      = Ядро:SB_StateFlashButton
DisAsmLog_Button = Ядро:SB_StateFlashButton
CLS_Button      = Ядро:SB_StatePushButton


[links]

DisAsm + ( DisAsm_Button + CPU ) | ( StepMode_Button + CPU ) | ( Step_Button + bus )
DisAsm + ( DisAsmLog_Button + DisAsm ) | ( CLS_Button + DisAsm )


[DisAsm_Button.ini]
SB_Part_Data=nPosition[1] | nPriority[0] | bHidden[0]
TextFieldWidth_Px=0
TextFieldText=
ButtonPushMode  = 2
IsInverted      = 0
ButtonON_Text    = "DisAsm"
ButtonOFF_Text  = "DisAsm"
ButtonWidth      = 70
ButtonHeight    = 18
ButtonFontSize  = 12
ButtonFontWeight = 600
StateName        = "DisAsm"




[StepMode_Button.ini]
SB_Part_Data=nPosition[2] | nPriority[0] | bHidden[0]
TextFieldWidth_Px=0
TextFieldText=
ButtonPushMode  = 2
IsInverted      = 0
ButtonON_Text    = "Step Mode"
ButtonOFF_Text  = "Step Mode"
ButtonWidth      = 90
ButtonHeight    = 18
ButtonFontSize  = 12
ButtonFontWeight = 600
StateName        = "StepMode"



[Step_Button.ini]
SB_Part_Data=nPosition[3] | nPriority[0] | bHidden[0]
TextFieldWidth_Px=0
TextFieldText=
ButtonPushMode  = 2
IsInverted      = 0
ButtonON_Text    = "Step"
ButtonOFF_Text  = " "
StateName        = Pause
ButtonWidth      = 60
ButtonHeight    = 18
ButtonFontSize  = 12
ButtonFontWeight = 600

PushedButton_Text_X_Offset_Px = 0
PushedButton_Text_Y_Offset_Px = 3
PoppedButton_Text_X_Offset_Px = 0
PoppedButton_Text_Y_Offset_Px = 3
ButtonON_TextColor  = 0,0,0
ButtonOFF_TextColor  = 0,0,0
ButtonON_Background  = 210,210,110
ButtonOFF_Background = 1,0,0
Is_PoppedButton_Border_ButtonLike = 0
Is_PushedButton_Border_ButtonLike = 0
DoCenterAlignButtonText = 1
LightsOFF_StateName=Power




[DisAsmLog_Button.ini]
SB_Part_Data=nPosition[4] | nPriority[0] | bHidden[0]
TextFieldWidth_Px=0
TextFieldText=
ButtonPushMode  = 2
IsInverted      = 0
ButtonON_Text    = "Log"
ButtonOFF_Text  = "Log"
StateName        = Log
ButtonWidth      = 60
ButtonHeight    = 18
ButtonFontSize  = 17
ButtonFontWeight = 600

PushedButton_Text_X_Offset_Px = 0
PushedButton_Text_Y_Offset_Px = 1
PoppedButton_Text_X_Offset_Px = 0
PoppedButton_Text_Y_Offset_Px = 0
ButtonON_TextColor  = 0,0,0
ButtonOFF_TextColor  = 0,0,0
ButtonON_Background  = 160,205,160
ButtonOFF_Background = 1,0,0
Is_PoppedButton_Border_ButtonLike = 1
Is_PushedButton_Border_ButtonLike = 1
DoCenterAlignButtonText = 1
LightsOFF_StateName=Power




[CLS_Button.ini]
SB_Part_Data=nPosition[5] | nPriority[0] | bHidden[0]
TextFieldWidth_Px=0
TextFieldText=
ButtonPushMode  = 1
IsInverted      = 0
ButtonON_Text    = "Clear"
ButtonOFF_Text  = "Clear"
ButtonWidth      = 60
ButtonHeight    = 18
ButtonFontSize  = 12
ButtonFontWeight = 600
StateName        = "ClearScreen"

[свернуть]

В пошаговом режиме эмуляция ставится на паузу после выполнения процессором каждой следующей команды. Кнопка [ Шаг ] - это просто иначе оформленная кнопка [ Пауза ], поэтому она активируется не только в пошаговом режиме процессора, но и при любой постановке эмуляции на паузу:

http://s6.hostingkartinok.com/upload...88cc746e1b.png


Слева в листинге дизассемблера указаны значения PC и PSW, потом мнемоника команды и в поле комментариев - содержимое операндов до выполнения команды.


При нажатии кнопки [ Лог ] - листинг начинает писаться в файл DisAsm.log, при этом в листнг попадают только те строки, которые были выведены на консоль когда кнопка [ Лог ] уже была нажата. Чтобы сохранить строки, выведенные на консоль до этого - их можно скопировать в буфер обмена, нажав клавишу <PrintScreen> ( при этом копируются все строки от верхней, видимой на экране, до последней, выведенной на консоль, поэтому, чтобы скопировать в буфер обмена весь текстовый буфер консоли - нужно сначала промотать содержимое экрана до самого верха при помощи полосы прокрутки или колеса мыши ).


В данной конфигурации на шине присутствует отладочный порт, создаваемый объектом CPUCSR:

Code:

[objects]

CPUCSR  = CPU_module:CPUCSR


[links]

bus & CPU | CpuBoard | TerminalPort | PrinterPort
bus & Booter | TerminalPort2 | MX | HD | CPUCSR


[CPUCSR.ini]
CPUCSR_Address = 0177724


Пример взаимодействия отлаживаемой программы с отладочным портом эмулятора находится на системном диске в файлах CPUCSR.SAV и CPUCSR.MAC:

Code:

;
;        Тест отладочного регистра эмулятора процессора ( 0177724 ).
;
;
;      Бит 01 включает/выключает дизассемблер
;              ( при выключении - выключает и пошаговый режим ).
;
;      Бит 02 включает/выключает пошаговый режим
;              ( при включении - включает и дизассемблер  ).
;
;
        .MCall        .Exit

START:

        Mov        #2, @#177724        ; Включает дизассемблер в пошаговом режиме.

        Mov        #100., R0
        Mov        #10.,  R1
        Mov        #4,    R2
        Clr        R3

        BiC        #2, @#177724        ; Выключает пошаговый режим.

1$:
        Inc        R3
        SOB        R0, 1$

        BiS        #2, @#177724        ; Включает пошаговый режим.

        Inc        R1
        EMT 341
        Inc        R2
        Inc        R3

        Mov        #0, @#177724        ; Выключает дизассемблер.

;================================

        Dec        R1
        Dec        R2
        Dec        R3

;================================

        Mov        #1, @#177724        ; Включает дизассемблер в потоковом режиме.

        Mov        #12., R0
2$:
        Dec        R0
        BEq        3$
        Cmp        R0, #5
        BLE        2$
        SOB        R0, 2$
3$:

;================================

22$:
        Inc        R1
        Inc        R2
        Inc        R3
        Inc        PC
        Br        22$

;================================

        Mov        #0, @#177724        ; Выключает дизассемблер.

        .Exit

.End        START
;


Запуск CPUCSR.SAV осуществляется в окне терминала, по команде:
Code:

.R CPUCSR

Чтобы в листинг не включался текст системного обработчика команды EMT - в файле конфигурации DisAsm.cfg нужно изменить верхнюю границу окна дизассемблирования:

Code:

[CPU.ini]
CPU_Frequency_KHz      = 5300
CPU_SpeedLimit_KIPS    =True

DisAsmBottomAddr      = 0
DisAsmTopAddr          = 040000
;; DisAsmTopAddr          = 0177776
InitialStateOf[DisAsm]=0
SaveChangesFor[DisAsm]=1
InitialStateOf[StepMode]=0
SaveChangesFor[StepMode]=1


hobot 19th December 2013 22:44

вопрос по системному разделу
 
Quote:

Originally Posted by Patron (Post 653816)
Обновилась текущая сборка "эмулятора ДВК": DVK_Emulator_19.12.13_00-19

Code:

  CPUCSR.MAC    3  19-Dec-2013  1597
CPUCSR.SAV    2  19-Dec-2013  1600    < UNUSED >  143              1602
 51 Files, 1588 Blocks
 143 Free blocks

.CPUCSR

?MON-F-Trap to 4 001006

.

Что это за штука, которая ТРАПиться? )
И ещё кажется что-то обновилось в SYS файлах на системном
разделе? Нет?

Есть ли планы полноценного WEB-ресурса посвящённого
эмулятору или об этом пока рано говорить?

И конечно огромная благодарность за развитие и поддержку лучшего в мире эмулятора ДВК! )

Patron 19th December 2013 23:00

Quote:

Originally Posted by hobot (Post 654029)
Что это за штука, которая ТРАПиться?

Отладочный регистр есть на шине только тогда, когда в конфиге создан и подключен к шине объект CPUCSR. Это делается только в конфиге DisAsm.cfg. Если загрузить конфиг DisAsm.cfg и запустить там CPUCSR.SAV - обращения по адресу 0177724 пройдут успешно. Во всех остальных случаях - будет Trap_To_04.

MiX 23rd December 2013 16:16

Patron, Что-то тест не проходит. Запускаю эмулятор в конфиге DisAsm, нажимаю сброс 2 раза, набираю T0 ,enter. Тест доходит до набора "1 2 3 4 j c u k" и когда я набираю j после 1234 он пишет 000404 , @J?,@160556

Patron 23rd December 2013 16:44

Quote:

Originally Posted by MiX (Post 655195)
Что-то тест не проходит. Запускаю эмулятор в конфиге DisAsm, нажимаю сброс 2 раза, набираю T0 ,enter. Тест доходит до набора "1 2 3 4 j c u k" и когда я набираю j после 1234 он пишет 000404 , @J?,@160556

Это из-за того, что встроенные тесты ДВК не дружат с прерыванием таймера. Если выключить таймер до набора T0 - всё проходит.

---------- Post added at 14:44 ---------- Previous post was at 14:41 ----------

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

MiX 23rd December 2013 17:04

Quote:

Originally Posted by Patron (Post 655209)
Если выключить таймер до набора T0 - всё проходит.

У меня с выключенным таймером доходит до 6 теста и пишет дефект 71 ,0020466 ,@ ?

Patron 23rd December 2013 17:34

Quote:

Originally Posted by MiX (Post 655212)
У меня с выключенным таймером доходит до 6 теста и пишет дефект 71 ,0020466 ,@ ?

Это потому что по адресу 177170 пока не эмулируется контроллер RX для дисков DX/DY.

MiX 23rd December 2013 17:42

И ещё можно-ли отдельно дизассемблировать фаил не запуская его. Если нет то дай пожалуйста ссылку(если есть) где есть какая-нибудь программка.


All times are GMT +4. The time now is 02:59.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.