GithubHelp home page GithubHelp logo

leaderit / radio-86rk-monitor Goto Github PK

View Code? Open in Web Editor NEW
2.0 2.0 0.0 41 KB

Monitor for Radio-86RK (Retro Soviet hobbyist computer), Rewrited from Scratch, Well Described, Binary Identical to Original One.

License: GNU General Public License v3.0

Shell 2.64% Assembly 97.36%
8bit-computers radio-86rk retro retrocomputing rk-86

radio-86rk-monitor's Introduction

Radio-86rk-monitor

Monitor for Radio-86RK (Retro Soviet hobbyist computer), Rewrited from Scratch, Well Described, Binary Identical to Original One.

I did the project because i would like to update hardware of "good-old" 8-bit PC, but it needs to update firmware. I did not found binary variants for my goals, i did not found sources for my modifications. Eventualy, i restored it from scratch by reverce enginering of the original binary file.

I described and commented it well enouth for future modifications and your education goals.

Tools for compile sources are

Tools for cross-compile sources are: https://github.com/vhelin/wla-dx

You may build it from sources for platforms:

Build Status - Linux
Build Status - macOS
Build Status - Windows x86
Build Status - Windows x64
Build Status - Windows MSVC

For Mac OS use: brew install wla-dx

Docs are here: https://wla-dx.readthedocs.io/en/latest/

The Monitor

RADIO-86RK (SOVIET 8-BIT COMPUTER) THE MONITOR ROM source recovered from ROM Binaries and well decribed for future using by Valerii Grazhdankin, (c) 2022

The Monitor is a system programm with a command line interface, booted after System On or Reset. Monitor is placed in system's Read-Only Memory (ROM)

Monitor Commands

  • Memory Operations
    D<Start_Address>,<End_Address> - Display memory content in hexadecimal
    L<Start_Address>,<End_Address> - Display memory content in ASCII
    F<Start_Address>,<End_Address>,<Value> - Fill memory with the specified value
    M<Address> - Modify memory content
    T<Start_Address>,<End_Address>,<Destination_Start_Address> - Copy memory block to destination
    C<Start_Address>,<End_Address>,<Destination_Start_Address> - Compare memory block with destination
    S<Start_Address>,<End_Address>,<Value> - Search memory for a value
    R<ROM_Start_Address>,<ROM_End_Address>,<Destination_Start_Address> - Read from the ROM connected to the Parallel interface to memory
  • Run Control
    G<Start_Address>[,End_Address] - Run code, optionally stop at the specified address
    X - Display and modify registers
    U - Run Expanded ROM from 0F000h Address
  • Cassette Input/Output
    O<Start_Address>,<End_Address>[,Speed] - Write memory to cassette. Default speed is 1Dh / 1200 bps
    I[Offset][,Speed] - Read data from a tape to memory at the specified offset

The Monitor Tape Records

Monitor's format of a tape record:

  • 0xE6 - Syncronization byte
  • XX XX - Start address of memory allocation, High byte First
  • XX XX - End address of memory allocation, High byte First
  • ..... - Data of the file. Size of the file is END_ADDR - START_ADDR
  • 00 00 - Junk bytes, may be absant
  • 0xE6 - Syncronization byte
  • XX XX - Check summ, High byte First

The Monitor Memory Map

  • 16K Version:

    • 0000h - 3FFFh - SRAM
      • 3600h - 3FFFh - Display buffer and monitor variables
  • 32K Version:

    • 0000h - 7FFFh - SRAM
      • 7600h - 7FFFh - Display buffer and monitor variables
  • Both versions:

    • 8000h - 8FFFh - 8255A PPI (Keyboard, Cassette recorder, Sound control)

      • 8000h - Channel A data
      • 8001h - Channel B data
      • 8002h - Channel C data
      • 8003h - Control word
    • 0A000h - 0AFFFh - 8255A PPI (ROM Disk and Parallel Interface)

      • 0A000h - Channel A data
      • 0A001h - Channel B data
      • 0A002h - Channel C data
      • 0A003h - Control word
    • 0C000h - 0CFFFh - 8275 CRT Controller

      • 0C000h - Data Register
      • 0C001h - Configuration / Status register
    • 0E000h - 0EFFFh - 8257 DMA Controller (write only, because the computer architecture )

      • 0E000h - Channel 0 Address register
      • 0E000h - Channel 0 Lenght register
      • 0E000h - Channel 1 Address register
      • 0E000h - Channel 1 Lenght register
      • 0E000h - Channel 2 Address register
      • 0E000h - Channel 2 Lenght register
      • 0E000h - Channel 3 Address register
      • 0E000h - Channel 3 Lenght register
      • 0E000h - Configuration register
    • 0F000h - 0F7FFh - Monitor Extention EPROM (read only)

    • 0F800h - 0FFFFh - The Monitor EPROM (read only)

Monitor API

  • 0F800h - Entry point after reset

  • 0F803h - Keyboard input

    • Input : None
    • Output: A - character code read from keyboard
  • 0F806h - Tape Read

    • Input : A=0FFh - with sync; A=08h - no sync
    • Output: A - data read from a tape
  • 0F809h - Print character to screen

    • Input : C - character to print
    • Output: None
  • 0F80Ch - Tape write

    • Input : C - data to write
    • Output: None
  • 0F80Fh - Print character to screen (Duplicated entry)

    • Input : C - character to print
    • Output: None
  • 0F812h - Query keyboard

    • Input : None
    • Output: A=00h - key not pressed; A=0FFh - key pressed
  • 0F815h - Print to screen in hex

    • Input: A - data to print
    • Output: None
  • 0F818h - Print string

    • Input: HL - string address
    • Output: None
  • 0F81Bh - Get key

    • Input : None
    • Output: A=0FFh - key not pressed; A=0FEh - Rus/Lat; otherwise A - key code
  • 0F81Eh - Get cursor position

    • Input : None
    • Output: H - row, L - column
  • 0F821h - Read character from screen at current cursor position

    • Input : None
    • Output: A - char read from screen
  • 0F824h - Read from a tape

    • Input: HL - offset of memory buffer to store data to
    • Output: HL - start; DE - end; BC - checksum
  • 0F27h - Write block to a tape

    • Input: HL - start, DE - end of memory block
    • Output: BC - checksum
  • 0F82Ah - Calculate Check Summ

    • Input: HL - start; DE - end;
    • Output: BC - checksum
  • 0F82Dh - Init Display

    • Input: None
    • Output: None
  • 0F830h - Get memory heap

    • Input: None
    • Output: HL - Address of highest address of memory, avalable for a user's programm
  • 0F833h - Set memory heap

    • Input: HL - Address of highest address of memory, avalable for a user's programm
    • Output: None

Happy Hobying!

Valerii Grazhdankin

radio-86rk-monitor's People

Contributors

leaderit avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.