Wednesday, July 10, 2019

ZX Spectrum - Кворум-64 (Old-Hard №80)

Форматирование моё.





См. также
Радио86РК - советский самодельный компьютер
Советские персональные компьютеры
Клоны ZX Spectrum
ZX Spectrum - Кворум-64




...вспомним архитектуру классического Спектрума — чтобы понять, насколько отличается от нее CP/M. Заранее прошу прощения за возможные неточности — все это было очень давно.

Спектрум-48 собран на процессоре Z-80 с 8-битными регистрами и 16-битной адресацией. В Спектруме было 16 Кбайт ПЗУ, занятого интерпретатором диалекта Бейсика, служившего одновременно и операционной системой для машины; и 48 Кбайт ОЗУ, из которых 6.75 Кбайт было занято видеопамятью с весьма специфической адресацией, в устройство которой мы сейчас не будем вдаваться...

Ниже есть продолжение.


01:09 историческая справка о продукции Синклера
03:19 компьютеры Синклера до ZX Spectrum
05:38 очень плавно переходим к предпосылкам появления клонов
08:43 почему Кворум-64 именно "64"
10:54 два слова про теневую память и CP-M/80
12:34 смотрим на Кворум-64 и сравниваем его с оригинальными моделями
17:08 пример звука со спикера и телевизора
17:40 кассеты и загрузка
20:32 наши vs иностранные (кассеты и не только)
23:34 НЕ кассеты
25:51 игровая приставка на базе ZX Spectrum
26:31 дискеты
27:47 интерфейс, BASIC и клавиатура
35:58 загрузка игр, бордюр
41:43 звук и музыка
44:20 графика и знакоместа
51:02 шутер от первого лица (?!!!)
52:01 игры и управление
54:46 игры на русском и русские игры
56:14 ZX Spectrum сегодня
1:00:50 что ещё посмотреть или почитать

...Общая карта памяти выглядела примерно так:



Конечно, Бейсиковые программы на процессоре с частотой 3.5 МГц несусветно тормозили, и все нормальные чуваки тогда писали на ассемблере, а программам на Бейсике обычно отводилась роль загрузчика, который дозагружает с кассеты ассемблерные модули по заданным адресам, и передает им управление. (У реальных пацанов и загрузчики были хитрые ассемблерные, но не суть.)

Спектрум-128, как несложно догадаться, расширял общий объем ОЗУ машины с 48 до 128 Кбайт (и добавлял музыкальный сопроцессор AY-3-8910/12, который во второй половине 90-х уже был жестким дефицитом...) Но так как в 16 бит шины адреса 128 Кбайт уже не влезали, использовалась специальная, не особо удобная система: вся память делилась на 8 банков по 16 Кбайт, и в верхние 16 Кбайт адресного пространства (0xC000-0xFFFF) можно было «впечатывать» любой из этих 8 банков, выведя специальное значение в порт 0x7FFD. (Да, области памяти 0x4000-0x7FFF и 0x8000-0xBFFF тоже были обычными банками памяти — не помню сейчас уже номера — и в 0xC000-0xFFFF можно было их отзеркалить.) Кроме того, в Спектруме-128 было два банка ПЗУ — с классическим интерпретатором Бейсика, и с более продвинутым, в котором строчный редактор поменялся на примитивный полноэкранный, а также были разделены функции собственно Бейсика и ОС — добавилась несложная система меню, благодаря которой можно было включить загрузку с ленты, не выходя в Бейсик и не набирая там сакрального LOAD "" :)

Наконец, для Спектрума существовало некоторое количество различных контроллеров дисковода, из которых наиболее популярным (и единственным, используемым в российских клонах Спектрума) стал Beta Disk Interface. Он добавлял в Спектрум еще один банк ПЗУ, который аппаратным образом включался вместо обычного и перехватывал управление при переходе по адресам 0x3D00-0x3FFF, если не ошибаюсь. В ПЗУ контроллера содержалась очень примитивная дисковая операционная система TR-DOS, работавшая с дискетами объемом 640 Кбайт, и управлявшаяся командами, похожими на команды Бейсика. В контроллере также была специальная кнопка Magic Button, при нажатии на которую на диск записывался полный дамп памяти (48 Кбайт — о Спектруме-128 TR-DOS не знала). Это позволяло вместо того, чтобы делать полноценную адаптацию Спектрумовских программ и игр под дисковод, просто загрузить программу с ленты, нажать кнопку и сбросить на диск. Дальше можно было уже загружать ее с дискеты. Конечно, если в программе была, например, функция сохранения и записи, то они так и продолжали работать с лентой, но в целом это было очень удобно.

...У вас к компьютеру был подключен не самый плохой телевизор (Кворум же, как и все Спектрумы, обычно работал с телевизором вместо монитора)...

Операционная система CP/M-80

CP/M-80 была разработана для машин на процессорах Intel i8080 и совместимых с ним Zilog Z-80 компанией Digital Research в 1970-х годах. CP/M означает Control Program for Microcomputers; суффикс -80 официально появился в названии, только когда появилась и CP/M-86 для PC и процессоров 8088/8086. До того, как PC стремительно начал набирать популярность, нишу персональных, относительно маломощных компьютеров занимали именно машины с CP/M-80.

CP/M-80 была одной из первых операционных систем в современном понимании. Именно в ней появилась такая фича, как абстракция программ от физического оборудования, и именно это стало причиной ее (относительной) популярности. CP/M-80 состояла из трех размещавшихся в памяти модулей: CCP (Console Command Processor — примитивный командный интерпретатор), BDOS (Basic Disk Operating System — реализация системных вызовов) и BIOS (Basic Input/Output System — драйвера стандартных устройств: диска, консоли, принтера и последовательного интерфейса). При портировании CP/M на новую машину нужно было переписать только BIOS; CCP и BDOS были аппаратно-независимы. Прикладные же программы могли пользоваться функциями BDOS, или, при необходимости, напрямую BIOS, но были избавлены от необходимости знать премудрости работы с дисковыми контроллерами разных машин.

Разумеется, на практике все было не так гладко. Самым большим упущением BDOS/BIOS было отсутствие какой-либо стандартизации функций вывода на экран, кроме самых примитивных, тех, что сгодятся и для терминала-телетайпа. В результате программы, включавшие в себя функции, например, экранного редактора (наподобие WordStar и Turbo Pascal), при установке предлагали выбрать из нескольких десятков известных разработчикам машин, либо же, если машины в списке не было, ввести самостоятельно размеры экрана и различные управляющие коды для перемещения курсора и т. п. Ну, это мелочи.

Общая карта памяти CP/M-машины выглядела так:



Отметим еще раз, что эта карта памяти будет справедлива на любой машине с CP/M. Поэтому здесь много неопределенностей. Нет видеопамяти, например (а она и не факт, что будет присутствовать в реальности — может, машина вообще подключена к телетайпу), а единственные адреса, содержимое которых гарантировано — 0x0000-0x0100. Для осуществления системного вызова необходимо положить его номер в регистр C, если не ошибаюсь, а затем выполнить инструкцию CALL 0x0005; инструкция JMP по адресу 0x0005 уже выполнит переход куда надо в BDOS. Также в этой области имеются:

* точка входа в BIOS (адрес 0x0000). Эта функция выполняет перезагрузку машины, но несложной арифметикой можно получить адрес любой другой функции BIOS;

* номер текущего диска (A: = 0, B: = 1…);

* направление текущих потоков ввода-вывода (например, консоль можно направить на печатающее устройство, или в последовательный порт);

* имена файлов (не более 2), переданных загруженной программе как параметры командной строки, в структурах данных FCB, пригодных в качестве аргументов вызова функций BDOS;

* полная командная строка текущей программы (адреса 0x0080-0x00FF — не более 127 символов).

Объем TPA (области для загружаемых программ) тоже не гарантировался и в принципе мог, в зависимости от реализации, составлять где-то от 10 до 52 Кбайт.

Файловая система CP/M-80 существенно проще, чем FAT, хотя со своими задачами справляется вполне удовлетворительно. Файлы хранятся с именами 8.3; даты создания/изменения не хранятся (наличие RTC-часов в машинах с CP/M не гарантировалось); размер файла хранится с точностью до 128 байт с округлением в большую сторону (объем занимаемого им на диске пространства — до 4 Кбайт). Также отсутствуют директории, вообще — на работу с жесткими дисками CP/M не была рассчитана, а с дискетками можно и так жить. Был, впрочем, некий суррогат под названием «области пользователя». Эти области нумеровались от 0 до 15, и в каждой из них могли храниться отдельные файлы. Переключались они командой USER n.

Раз уж речь зашла о командах, то их было немного: DIR, SAVE, ERA (удаление файлов), REN (переименование файлов), USER, может еще одну-две забыл. (SAVE выполняла довольно специфическую функцию — сохранение содержимого TPA на диск — если, например, вы запустили отладчик, загрузили в нем программу, похимичили над ней, вышли и хотите сохранить еще оставшуюся в памяти версию.) Популярным расширением для CP/M был альтернативный командный интерпретатор ZCPR3, куда более навороченный. Впрочем, сам я не пробовал.

В целом, CP/M очень напоминала раннюю версию DOS, да, в общем-то, и немудрено — DOS разрабатывалась как клон CP/M. Для CP/M-80 существовало немало прикладного софта — офисные программы, средства разработки, утилиты. Но с появлением и бурным развитием PC все это быстро стало неактуальным — как и версия CP/M-86, не сумевшая составить сколько-нибудь значительную конкуренцию DOS.

Исходные тексты CP/M различных версий и ее системных утилит (на ассемблере) несложно найти в Интернете...
https://www.youtube.com/watch?v=FSLKsEDC5us
https://habr.com/en/post/122762/

Замечание: 1. У меня был другой клон ZX Spectrum-а, не кворум.
2. CP/M на этом клоне ZX Spectrum-е не было.
3. CP/M был на радио-86рк.

No comments:

Post a Comment