mirror of
https://github.com/romychs/Ocean-240.2-Emulator.git
synced 2026-04-21 11:03:21 +03:00
6.6 KiB
6.6 KiB
Эмулятор персонального компьютера Океан-240.2
Зачем?
Эмулятор был разработан для удобства реверс-инжененринга программ монитора и приложений для этого старого компьютера. Поэтому и имеет такой минималистичный интерфейс.
Если нужен более точный эмулятор Океана-240.2 и других компьютеров на безе процессора КР580ВМ80, рекомендую проект Emu80.
Особенности реализации
- Микросхемы КР580ВВ55, ВИ53, ВИ51, ВТ59, КР1818ВГ93 эмулируются в степени, достаточной для работы операционной системы и монитора.
- В отличие от оригинала, который использует CPU КР580ВМ80, в эмуляторе использована эмуляция Z80. Эмулятор Z80 у меня уже был написан, поэтому использовал его, возможно, позже, обрежу его до i8080. Из за меньшего количества тактов у некоторых инструкций Z80, эмуляция работает несколько быстрее оригинала.
- Эмулируются 2 дисковода с дисками 720К, такой вариант используется с CP/M и Монитором R8.
- Работает под современными ОС Windows и Linux. Используется фреймворк Fyne, что позволяет скомпилировать код и под другие платформы, но я не пробовал.
- Поддерживает ZRCP - протокол отладки эмулятора ZEsarUX). Это позволяет использовать среду разработки VSCode с плагином DeZog для отладки исходного кода прямо в эмуляторе.
Возможности отладки
Работают все функции плагина Dezog и протокола: документация плагина.
- Выполнение кода по шагам, в том числе и назад (с ограничениями плагина DeZog)
- Просмотр и изменение памяти
- Просмотр и изменение значения регистров процессора
- Условные и безусловные брейкпоинты
- ASSERTION - остановка по несоблюдению указанного условия
- WPMEM - остановка при обращении к указанным ячейкам памяти (можно указать тип обращения r|w|rw)
- CodeCoverage - в коде, цветом помечаются строки, выполненные процессором.
Можно отлаживать код и без VSCode, подключившись телнетом к порту отладчика, по умолчанию это localhost:10001, далее, можно передавать отладчику команды. Их список доступен по команде help.
telnet localhost 10001
Список доступных команд отладчика
__about__ Shows about message
__clear-membreakpoints__ Clear all memory breakpoints
__close-all-menus__ Close all visible dialogs
__cpu-code-coverage__ Sets cpu code coverage parameters
__cpu-history__ Runs cpu history actions
__cpu-step__ Run single opcode cpu step
__disable-breakpoint__ Disable specific breakpoint
__disable-breakpoints__ Disable all breakpoints
__disassemble__ Disassemble at address
__enable-breakpoint__ Enable specific breakpoint
__enable-breakpoints__ Enable breakpoints
__enter-cpu-step__ Enter cpu step to step mode
__evaluate__ Evaluate expression
__exit-cpu-step__ Exit cpu step to step mode
__extended-stack__ Sets extended stack parameters, which allows you to see what kind of values are in the stack
__get-cpu-frequency__ Get cpu frequency in HZ
__get-current-machine__ Returns current machine name
__get-machines__ Returns list of emulated machines
__get-membreakpoints__ Get memory breakpoints list
__get-memory-pages__ Returns current state of memory pages
__get-os__ Shows emulator operating system
__get-registers__ Get CPU registers
__get-tstates-partial__ Get the t-states partial counter
__get-tstates__ Get the t-states counter
__get-version__ Shows emulator version
__hard-reset-cpu__ Hard resets the machine
__help__ Shows help screen or command help
__hexdump__ Dumps memory at address, showing hex and ascii
__load-binary__ Load binary file "file" at address "addr" with length "len", on the current memory zone
__quit__ Closes connection
__read-memory__ Dumps memory at address
__reset-tstates-partial__ Resets the t-states partial counter
__run__ Run cpu when on cpu step mode
__save-binary__ Save binary file "file" from address "addr" with length "len", from the current memory zone
__set-breakpoint__ Sets a breakpoint at desired index entry with condition
__set-breakpointaction__ Sets a breakpoint action at desired index entry
__set-breakpointpasscount__ Set pass count for breakpoint
__set-debug-settings__ Set debug settings on remote command protocol
__set-machine__ Set machine
__set-membreakpoint__ Sets a memory breakpoint starting at desired address entry for type
__set-register__ Changes register value
__snapshot-load__ Loads a snapshot
__snapshot-save__ Saves a snapshot
__write-memory__ Writes a sequence of bytes starting at desired address on memory
__write-port__ Writes value at port
