Add full compiler toolchain, libc, examples and reference docs
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>
This commit is contained in:
@@ -0,0 +1,219 @@
|
||||
▄▄▄▄▄▄
|
||||
▄█░░░░░░
|
||||
█░░ █░░
|
||||
█░░▄▄▄█░░
|
||||
█░░░░░░░░
|
||||
█░░ █░░
|
||||
█░░ █░░ рхитектура компьютера 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 предполагается данные недостатки исключит
|
||||
Reference in New Issue
Block a user