c71e249a4e
First substantive commit: the entire Sprinter C compiler tree on top of
the bare README+gitignore initial commit.
What's in here:
bin/sprinter-cc — driver script invoking SDCC + linker + mkexe
libc/ — Sprinter-specific libc layer over ESTEX/BIOS
(conio, gfx, io, mem, stdio + headers)
runtime/ — crt0 variants (default/small/banked/minimal)
+ heap + bank trampolines
toolchain/ — mkexe (SprintEXE packer, C + tests)
examples/ — 30 demo programs (gfx, file I/O, env, time, …)
lib/Makefile — builds the libc archive (sprinter.lib)
docs/ — converted Sprinter manuals + asm reference samples
third_party/ — solid-c reference compiler dump + sdcc setup script
release_docs/ — packaging / release notes
gitignore overhaul:
• Drop dangerous blanket patterns: *.asm (would hide docs/samples/*.asm)
and *.exe (case-insensitive match was hiding third_party/solid-c/*.EXE
on macOS APFS). Replaced with examples/*/*.{asm,exe,…} and lib/*.lib.
• Restore tracking of toolchain/mkexe/tests/{one,big}.bin — those are
INPUT fixtures, not build outputs.
• Collapse the duplicated SDCC/C/Sdcc sections into one section per
concern (build outputs / vendored / OS-junk).
• Add .sprinter-cc-*/, build/ (catches lib/build/ too), .claude/.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
219 lines
20 KiB
Plaintext
219 lines
20 KiB
Plaintext
▄▄▄▄▄▄
|
||
▄█░░░░░░
|
||
█░░ █░░
|
||
█░░▄▄▄█░░
|
||
█░░░░░░░░
|
||
█░░ █░░
|
||
█░░ █░░ рхитектура компьютера Sprinter.
|
||
▀░░ ▀░░
|
||
|
||
Введение.
|
||
|
||
Данное описание предполагает наличие определенных знаний читателя,
|
||
а именно знание архитектуры компьютера ZX-Spectrum и их разновидностей, в
|
||
частности Pentagon-128 и Scorpion-256, а так же знание языка BASIC и
|
||
некоторое знакомство с языком ассемблера Z80.
|
||
Здесь я буду называть конфигурацией машины - конкретную реализацию
|
||
конкретной схемы в перепрограммируемой логической микросхеме (ППЛМ).
|
||
Это означает, что машина имеет множество конфигураций, каждая из которых
|
||
имеет свою схему.
|
||
Я так же использую понятие КЭШ-ОЗУ. Это не КЭШ в формальном
|
||
смысле, а быстрое ОЗУ, в котором процессор может работать на высокой
|
||
частоте без ожидания. КЭШ-ем это ОЗУ называется только по традиции,
|
||
подобно КЭШ-у на КР537РУ10 в компьютерах Pentagon-128.
|
||
|
||
|
||
Краткие данные компьютера Sprinter.
|
||
|
||
Пpоцессоp . . . . . . . . . . . Z84C15
|
||
Тактовая частота . . . . 21MHz/3.5MHz
|
||
ОЗУ . . . . . . . . . . . . . . 4096Kb
|
||
КЭШ ОЗУ . . . . . . . . . . . . . 64Kb
|
||
ПЗУ . . . . . . . . . . . . . . .128Kb
|
||
Видео-ОЗУ . . . . . . . . . 256Kb(512)
|
||
Контpоллеp дисков . . . . . Кp1818ВГ93
|
||
Поддеpжка 1.44Mb фоpмата . . 3.5"диска
|
||
Контpоллеp винчестеpа . . . . . IDE/AT
|
||
Контpоллеp клавиатуpы . . . 101key/AT
|
||
Контpоллеp мыши . . . . . . . MS-Mouse
|
||
Два слота . . . . . . . стандаpт ISA-8
|
||
Железная эмуляция AY-3-8910 стерео-OUT
|
||
COVOX . . . . . . . . . 8bit x 4chanel
|
||
Видео-pежимы: . . . Spectrum standart
|
||
GRAF 320x256x256,640x256x16, TXT 80x32
|
||
Выход видео на TV или CGA монитоp, RGB
|
||
|
||
|
||
Техническая реализация.
|
||
|
||
Ядром машины являются процессор Z84C15 и ППЛМ EPF10K10QC208.
|
||
Кроме них на плате присутствуют микросхемa ПЗУ, 72х-пиновый SIMM
|
||
на 4Mb, 256Kb видео-ОЗУ, 64Kb КЭШ-ОЗУ, схема контроллера дисковода на
|
||
БИС КР1818ВГ93, буферы для подключения джойстика, магнитофона, принтера,
|
||
клавиатуры, дисководов, винчестера, мыши, буферные микросхемы шины ISA-8
|
||
и еще одна ППЛМ фирмы ALTERA - EPM7032LC44. Эта ППЛМ не меняет своей
|
||
конфигурации и предназначена для обеспечения синхронизации и начального
|
||
запуска компьютера. На плате так же предусмотрена возможность подключения
|
||
CMOS часов на основе микросхемы DALLAS. Кроме периферии и буферов имеются
|
||
микросхемы дешифрации, входы которых подключаются к процессору через ППЛМ.
|
||
Это позволяет легко менять адресацию устройств без какого либо изменения
|
||
разводки печатной платы.
|
||
|
||
|
||
Возможности архитектуры машины.
|
||
|
||
Схема компьютеpа основана на большой пеpепpогpаммиpуемой логической
|
||
микpосхеме. Подключение периферийных устройств через ППЛМ позволяет получить
|
||
высокую гибкость машины по конфигурациям.
|
||
Пpогpаммиpование ППЛМ осуществляется непосpедственно в момент
|
||
включения, а так же пpи пеpезагpузке, что позволяет каpдинально менять
|
||
схему в ППЛМ непосpедственно во вpемя pаботы. Это сильно выделяет
|
||
архитектуру компьютера из ряда существующих компьютеров и поэтому многие
|
||
понятия, присущие обычным машинам, меняют свой смысл. Фактически компьютер
|
||
имеет изменяемую архитектуру, в которой возможны изменения во многих частях
|
||
схемы. Так, например, нельзя говорить о конкретных адресах портов
|
||
подключения периферии, так как они могут быть изменены в одну секунду
|
||
путем перепрограммирования ППЛМ и данных в ОЗУ, отвечающих за конфигурацию
|
||
портов. Конкретные адреса появляются только в конкретных конфигурациях,
|
||
например, такой как конфигурация ZX-Spectrum.
|
||
Перепрограммируемость схемы дает довольно большую свободу
|
||
фантазии программиста по конфигурации машины. Задумывая конкретную
|
||
работу программист может определить в какой конфигурации ее можно
|
||
сделать лучше, а, возможно, и придумать свою конфигурацию, которую
|
||
затем можно реализовать в ППЛМ и включить перед запуском этой программы.
|
||
|
||
|
||
Блочная схема компьютера Sprinter.
|
||
|
||
┌───────┐ ┌──────────────────────────────┐ ┌────────────>Sinc
|
||
│Принтер│ │ 2 ISA SLOTS │ │ ┌───────>R
|
||
├───────┤ └───┬─┬─┬─┬─┬───────┬─┬─┬─┬─┬──┘ │ │ ┌─────>G
|
||
│ Мышь │ ┌───┴─┴─┴─┴─┴───────┴─┴─┴─┴─┴──┐ │ │ │ ┌───>B
|
||
└─┬─┬─┬─┘ │ Буферы и дешифраторы │ │ ┌─┴─┴─┴─┐
|
||
│ │ │ └───┬──────────┬─┬──┬─┬────┬─┬─┘ │ │ ЦАП │
|
||
│ │ │ │INT │ │ │ │ │ │ │ │ буфер │
|
||
┌──┴─┴─┴┬─┐ │ │ │ │ │ ┌┴─┴──────┴─┐└──┬─┬──┘ ┌────────┐
|
||
│ Внутр │ ├────│──────────┘ └──│ │───┤ EPF10K10 ├───┘ └──────┤ видео │
|
||
│ порты │ ├────│──────────DATA─│ │───┤ ├──V_DATA────┤ │
|
||
├───────┘ ├────│───┐ ┌─────────│ │───┤ ├────────────┤ ОЗУ │
|
||
│ ├<───┘ │ │ │ │ │ │ │ │
|
||
│ ├────────────────────┘ └───┤ ├────────────┤ │
|
||
│ Z84C15 ├───────────────ADRESS─────┤ ├─V_ADRESS───┤ │
|
||
│ ├────┐ ┌───────────────────┤ ├────────────┤ │
|
||
│ │ │ │ │ │ │ │ │ │
|
||
│ ├<───│ │─│ │──────────────>┤ ├──WE,CSi───>┤ │
|
||
│ ├<───│ │─│ │────DIR───────>┤ │ └────────┘
|
||
│ ├<───│ │─│ │──────────────>┤ ├───────> Audio OUTs
|
||
│ │ │ │ │ │ │ │ ┌────────┐
|
||
│ │ ┌─┴─┴─┴─┴───────┐ │ ├────────────┤ MAIN │
|
||
│ │ │ ПЗУ и КЭШ-ОЗУ ├<─ADR'─┤ ├──DATA──────┤ RAM │
|
||
└─┬─┬─┬──┬┘ │ CS ├<─CS───┤ ├────────────┤ │
|
||
│ │ │ │ └───────────────┘ │ │ │ SIMM │
|
||
│ D │ │ ┌──────────────┐ │ ├────────────┤ │
|
||
│ A │ │ │ EPM7032 ├───────>┤ ├──ADRESS────┤ │
|
||
│ T │ └──>┤ Sinchro │ │ ├────────────┤ │
|
||
│ A │ │ HDD_DIR ├<───────┤ │ │ │
|
||
│ │ │ │ ФАПЧ ├<───────┤ ├─RAS,CAS,WE─┤ │
|
||
│ │ │ └─┬─┬─┬─┬─┬────┘ │ │ └────────┘
|
||
│ │ │ │ │ │ │ │ │ │
|
||
┌─┴─┴─┴────────┴─┴─┴─┴─┴───────┐ │ │
|
||
│ Периферийные устройства ├<────┤ │
|
||
│ FDD,HDD,KEMPSTON ├<DIR─┤ │
|
||
│ ├<────┤ │
|
||
└──────────────────────────────┘ │ │
|
||
┌────────────────────>┤ │
|
||
┌────────┐ │ ┌────────┐ │ │
|
||
│ TAPE ├<──┘ │Keyboard├─────────>┤ │
|
||
│ in/out │ ├┬┬┬┬┬┬┬┬┤ │ │
|
||
└────────┘ └┴┴┴┴┴┴┴┴┘ └───────────┘
|
||
|
||
Рисунок 1.
|
||
|
||
|
||
|
||
Для простоты некоторые буферы и дешифраторы на схеме не указаны.
|
||
Количество Проводов в шинах так же условны. Часть сигналов управления
|
||
устройств с ППЛМ смультиплицированы с адресами SIMM-а.
|
||
|
||
|
||
Дальнейшее описание архитектуры является описанием конкретных
|
||
конфигураций и частей конфигураций. Но перед этим следует сказать несколько
|
||
слов о переключении самих конфигураций.
|
||
|
||
Загрузка конфигураций.
|
||
|
||
В момент включения компьютера, а так же после нажатия на RESET вся
|
||
информация, находившаяся в ППЛМ отвечающая за конкретную конфигурацию,
|
||
стирается. ППЛМ переходит в режим ожидания загрузки блока данных схемы.
|
||
В этот момент процессор полностью отключен от какой либо периферии.
|
||
В его адресное пространство памяти оказывается включена одна страница ПЗУ и
|
||
одна страница ОЗУ КЭШ-памяти. Любая запись в адресное пространство памяти
|
||
процессора в этот момент приводит к записи данных в ППЛМ и программа в
|
||
подключенной странице ПЗУ имеет только одну единственную цель - загрузить
|
||
в ППЛМ данные конфигурации. В этой же странице ПЗУ находятся данные
|
||
начальной конфигурации. (В данный момент это конфигурация Sprinter-1.)
|
||
Программа загрузки конфигурации проверяет флаг в КЭШ-памяти и, если он
|
||
установлен, загружает в ППЛМ данные из ОЗУ, если сброшен, то данные из
|
||
ПЗУ. На этом основано переконфигурирование схемы компьютера.
|
||
Для изменения схемы надо загрузить в последнюю страницу КЭШ-памяти
|
||
блок данных конфигурации со смещения #100 и выставить флаг, которым является
|
||
текстовая строка "FLEX_10K_LOADING", записанная по смещению #80 в этой же
|
||
странице КЭШ-а. После этого надо произвести полный сброс, который
|
||
осуществляется программно записью в специальную страницу памяти RESET_PAGE.
|
||
Программа в ПЗУ, запускаемая по сбросу находит флаг FLEX_10K_LOADING и
|
||
начинает загрузку данных в ППЛМ. При этом она одновременно затирает флаг,
|
||
что предотвращает повторную загрузку новой конфигурации при нажатии на
|
||
кнопку RESET и позволяет вернуться после "ручного" сброса в начальную
|
||
конфигурацию. Затирание флага так же избавляет от мучений в случае
|
||
подключения неправильной конфигурации во время экспериментов с программами.
|
||
Нажатие на RESET всегда вернет схему в начальную конфигурацию.
|
||
|
||
Примечание:
|
||
Внутренняя информация блока данных ППЛМ является закрытой
|
||
информацией фирмы ALTERA. Кроме самих микросхем ППЛМ ALTERA поставляет
|
||
и программное обеспечение для разводки схем внутри ППЛМ. К сожалению, эта
|
||
программа не может работать на компьютере типа ZX-Spectrum и в ближайшем
|
||
обозримом будущем не предвидится ее версия для Sprinter-а. Поэтому
|
||
разработка новых конфигураций может производится только при наличии
|
||
достаточно мощной машины (все делалось на Pentium-166) и программы разводки
|
||
схем в ППЛМ, цена на которую составляет сотни долларов США.
|
||
В связи с этим, в данный момент Sprinter имеет несколько конкретных
|
||
конфигураций, две из которых записаны в ПЗУ, а остальные могут быть
|
||
подгружены с дискеты или винчестера. Постоянно ведется совершенствование
|
||
конкретных конфигураций и разработка новых.
|
||
|
||
Конфигурация Sprinter-1.
|
||
|
||
Включает в себя конфигурацию Spectrum-128/256, распределение памяти
|
||
до 4Mb, расширенный экран с режимами Spectrum, Text-80x32, Graf-320x256x256,
|
||
контроллер дисковода, контроллер IDE винчестера, контроллер клавиатуры AT,
|
||
подключенной как ZX-Keyboard, 8-bit COVOX.
|
||
Эта конфигурация максимально приближена к конфогурации ZX-Spectrum
|
||
и позволяет работать на обычных спектрумовских программах и постепенно
|
||
менять их под расширенные режимы экрана и памяти, а так же для работы с
|
||
новыми устройствами.
|
||
|
||
Конфигурация Sprinter-2.
|
||
|
||
Включает в себя конфигурацию Spectrum-128/256, распределение памяти
|
||
до 4Mb, расширенный экран с режимами Spectrum, Text-80x32, Graf-320x256x256,
|
||
контроллер дисковода, контроллер IDE винчестера, контроллер клавиатуры AT,
|
||
подключенной как ZX-Keyboard, Accelerator.
|
||
Конфигурация, как и Sprinter-1 приближена к спектрумовской, но
|
||
имеет более жесткие требования к программам по совместимости. Позволяет
|
||
использовать акселератор операций с основным и видео-ОЗУ. Акселератор
|
||
ускоряет операции пересылки блоков данных и заполнения ОЗУ одним байтом
|
||
до физического предела скорости основного ОЗУ.
|
||
В последней версии конфигурация Sprinter-2 не имеет Spectrum-овской
|
||
клавиатуры. Вместо нее из порта 0FEh считывается сканкод пришедший с
|
||
AT-клавиатуры.
|
||
|
||
Конфигурация ZX-Spectrum-256/AY.
|
||
|
||
Эта конфигурация максимально приближена к ZX-Spectrum-128/256
|
||
и включает в себя схему музыкального сопроцессора AY-3-8910. В этой
|
||
конфигурации отсутствуют расширенные режимы экрана.
|
||
Вторая версия схемы AY включает в себя три генератора голосов,
|
||
генератор шума и регуляторы амплитуды. Генератор огибающей отсутствует.
|
||
Так же отсутствует возможность чтения из портов данных сопроцессора.
|
||
В третьей версии AY предполагается данные недостатки исключит |