Skip to content

Реконструкция CP/M для Микро-80

Notifications You must be signed in to change notification settings

prokushev/micro-80-cpm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

95 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

МИКРО/80 / ЮТ/88 CP/M

Общие сведения

При подключении квазидиска к Микро-80, опубликованного в "Микропроцессорные средства и системы" 1984 года №4, необходимо программное обеспечение для его использования. Стандарной дисковой операционной системой для МикроЭВМ на базе Intel 8080 является CP/M. Она не была опубликована для Микро-80. Но была опубликована для другого компьютера - ЮТ-88 в "Юный техник. Для умелых рук" 1990 года №1. Данный проект посвящен реализации CP/M для Микро-80, ЮТ-88. Данная версия CP/M может запускаться без изменений на машинах Микро-80 и ЮТ-88. Она представляет собой восстановленную версию системы из исходных текстов DRI CP/M, дампов CP/M-64 для ЮТ-88, исходных кодов, опубликованных С.Н.Поповым в МИСиС.

Загрузка CP/M

CP/M может быть, в зависимости от конфигурации компьютера, загружена с rom-диска или с ленты. После загрузки и запуска загрузчика будет выведено меню с вариантами подготовки квазидиска. При создании пустого диска, на нем будет расположена утилита ch.com, которая позволяет скопировать файл с ленты на диск или с диска на ленту.

Далее, используя CH.COM, наполняем диск программами:

  1. CH STAT.COM
  2. CH POWER.COM
  3. CH PIP.COM
  4. CH DUMP.COM и т.д.

Утилита CH.COM

Обмен между диском и магнитофоном организован программой ch.com, основанной на ch.com, опубликованной для ЮТ-88. Программа несколько переработана для работы на любой машине, без привязки к МОНИТОРу, CP/M BIOS. Однако, формат записи на ленту (перфоратор) не совместим с директивами МОНИТОРа, что следует учитывать.

Внешние утилиты

  • STAT +
  • ASM +
  • DDT
  • LOAD +
  • PIP +
  • ED +
  • SYSGEN +
  • SUBMIT +
  • DUMP +
  • MOVCPM
  • POWER (была описана для ЮТ-88, поэтому пусть будет, без исходников)
  • BASIC (тоже без исходников, MBASIC-85 5.29)
  • FORMAT (пока даже не планируется)

Перечень изменений

  • Восстановлены исходные тексты CP/M-64 на базе исходных текстов CP/M 2.2. Выполнена побайтная проверка бинарника.
  • Восстановлены исходные тексты специфических для ЮТ-88 частей. BIOS восстановлен с использованием публикации С.Н.Попова в МПСиС.
  • Убран прямой вызов недокументированных точек входа МОНИТОРа из эмулятора терминала
  • Поддержка реализации квазидиска на МИКРО-80 (8 банков памяти, а не 4)
  • Универсальный BIOS для ЮТ-88/МИКРО-80 (нет "запаздывания" ввода на МИКРО-80)
  • Универсальный терминал для ЮТ-88/МИКРО-80
  • Квазидиск имеет правильную структуру каталога при создании (не перекрыт частью BIOS)
  • Загрузчик позволяет выбрать, формировать новый квазидиск или использовать текущий
  • BIOS использует правильную п/п для устроства LST
  • Загрузчик может быть загружен в любые адреса памяти (не только в 3100)
  • Размер блока диска изменен на 2048 (для поддержки диска больше 256кб)

todo

  • Универсальный BIOS для ЮТ-88/МИКРО-80 с поддержкой обоих вариантов реализации диска (автоопределение размера диска? сейчас реализована поддержка максимальной емкости, что не очень хорошо для реальной железки)
  • Загрузчик сейчас никак не учитывает возможные разные размеры памяти.
  • Попробовать поддержать Радио-86РК, скорее всего, только 32К версию.
  • Адаптация power.com под знакогенератор и 64 символа в строке.

СТАНДАРТНЫЕ ПОДПРОГРАММЫ CP/M BIOS

Начало BIOS можно опреледить командой МОНИТОРа D1,2. Добавив смещение можно определить адрес точки входа. Данный метод является предпочтительней, чем прямое ипользование адресов точек входа. Вообще, использование BIOS не рекомендуется.

; Пример вызова подпрограмм BIOS
	LD DE, -3			; Смещение подпрограммы
	CALL BIOS			; Вызов подпрограммы BIOS
	...
	RST 0				; Возврат в систему

BIOS:
	LD HL, (1)			; Определение адреса BIOS
	ADD HL, DE			; Добавление смещение
	JP (HL)				; Вызов подпрограммы
+---------------------+--------+------------------------------+
!     Назначение      !Смещение! Параметры                    !
+---------------------+--------+------------------------------+
!  Холодный старт     !   -3   ! ВХОДНЫЕ                      !
!                     !        ! ВЫХОДНЫЕ                     !
+---------------------+--------+------------------------------+
!  Теплый старт       !   0    ! ВХОДНЫЕ                      !
!                     !        ! ВЫХОДНЫЕ                     !
+---------------------+--------+------------------------------+
! Состояние консоли   !   3    ! ВХОДНЫЕ                      !
!                     !        ! ВЫХОДНЫЕ                     !
!                     !        ! A=00H - клавиша не нажата    !
!                     !        ! A=0FFH - клавиша нажата      !
+---------------------+--------+------------------------------+
! Ввод с консоли      !   6    ! ВХОДНЫЕ                      !
!                     !        ! ВЫХОДНЫЕ                     !
+---------------------+--------+------------------------------+
! Вывод на консоль    !   9    ! ВХОДНЫЕ                      !
!                     !        ! ВЫХОДНЫЕ                     !
+---------------------+--------+------------------------------+
! Вывод на принтер    !   12   ! ВХОДНЫЕ                      !
!                     !        ! ВЫХОДНЫЕ                     !
+---------------------+--------+------------------------------+
! Вывод на магнитофон !   15   ! ВХОДНЫЕ                      !
!                     !        ! ВЫХОДНЫЕ                     !
+---------------------+--------+------------------------------+
! Ввод с магнитофона  !   18   ! ВХОДНЫЕ                      !
!                     !        ! ВЫХОДНЫЕ                     !
+---------------------+--------+------------------------------+

СТАНДАРТНЫЕ функции CP/M BDOS

; Пример вызова функций BDOS
    LD  DE, parameter
	LD	C, C_READ
	CALL 5
+---------------------------+----------------+
! Назначение                ! Номер функции  !
+---------------------------+----------------+
! Теплый старт              ! 0 (P_TERMCPM)  !
+---------------------------+----------------+
! Ввод с консоли            ! 1 (C_READ)     !
+---------------------------+----------------+
! Вывод на консоль          ! 2 (C_WRITE)    !
+---------------------------+----------------+
! Прямой ввод-вывод консоли ! 6 (C_RAWIO)    !
+---------------------------+----------------+
! Вывод строки на косоль    ! 9 (C_WRITESTR) !
+---------------------------+----------------+
! Ввод строки с консоли     ! 10 (C_READSTR) !
+---------------------------+----------------+
! Состояние консоли         ! 11 (C_STAT)    !
+---------------------------+----------------+
! Версия CP/M               ! 12 (S_BDOSVER) !
+---------------------------+----------------+

НУЛЕВАЯ СТРАНИЦА

+-------+-------+------------------------------------------------------------+
! 00–02 ! Код   ! Выход из программы (так же используется для поиска BIOS)   !
+-------+-------+------------------------------------------------------------+
!  03   ! Байт  ! I/O byte (not implemented)                                 !
+-------+-------+------------------------------------------------------------+
!  04   ! Byte  ! Current CCP drive (low 4) and user (high 4)                !
+-------+-------+------------------------------------------------------------+
! 05–07 ! Code  ! Call CP/M BDOS system call. Also RAMTOP.                   !
+-------+-------+------------------------------------------------------------+
! 08–3A ! Code  ! 8080 restart/interrupt vectors.                            !
+-------+-------+------------------------------------------------------------+
! 3B–4F ! Bytes ! Reserved                                                   !
+-------+-------+------------------------------------------------------------+
!  50   ! Byte  ! The drive from which the program was loaded (CP/M 3)       !
+-------+-------+------------------------------------------------------------+
! 51–52 ! Word  ! Address of the password for the first FCB (CP/M 3)         !
+-------+-------+------------------------------------------------------------+
!  53   ! Byte  ! Length of the password for the first FCB (CP/M 3)          !
+-------+-------+------------------------------------------------------------+
! 54–55 ! Word  ! Address of the password for the second FCB (CP/M 3)        !
+-------+-------+------------------------------------------------------------+
!  56   ! Byte  ! Length of the password for the second FCB (CP/M 3)         !
+-------+-------+------------------------------------------------------------+
! 57–5B ! Bytes ! Reserved                                                   !
+-------+-------+------------------------------------------------------------+
! 5C–6B !       ! Default FCB 1                                              !
+-------+-------+------------------------------------------------------------+
! 6C–7F !       ! Default FCB 2 (overwritten if FCB 1 is opened)             !
+-------+-------+------------------------------------------------------------+
!  80   ! Byte  ! Number of characters in command tail                       !
+-------+-------+------------------------------------------------------------+
! 81–FF ! Bytes ! Command tail (everything after the program name)           !
+-------+-------+------------------------------------------------------------+

Библиотека diskdef

diskdef

About

Реконструкция CP/M для Микро-80

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published