Files
snark13 c71e249a4e 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>
2026-06-03 16:13:21 +03:00

53 lines
33 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Архитектура компьютера Sprinter.
HYPERLINK "" \l "intro" Вступление. HYPERLINK "" \l "brief" Краткая характеристика компьютера Sprinter. HYPERLINK "" \l "realiz" Техническая реализация.
 HYPERLINK "" \l "loadconf" Загрузка конфигураций.
 HYPERLINK "" \l "config" Описание конфигураций модели Sprinter. HYPERLINK "" \l "allocate" Распределение основной памяти компьютера Sprinter. HYPERLINK "" \l "vaddress" Видео-область, графический и спектрумовский режимы адресации.
 HYPERLINK "" \l "vidalloc" Распределение видео ОЗУ.
 HYPERLINK "" \l "scrstruct" Структура экрана и его режимы. HYPERLINK "" \l "palette" Палитра.

Вступление

   Персональный компьютер Sprinter является универсальным компьютером на базе 8 битного процессора Z80 (Z84C1516PSC) фирмы Zilog. Основой компьютера является перепрограммируемая логическая матрица (ППЛМ) EP1K30QC208-3 фирмы ALTERA.
В настоящее время компьютер Sprinter использует плату Sp2000 в качестве материнской платы. Плата Sp2000 была разработана в конце 2000 года специально с возможностью обеспечения поддержки будущих моделей компьютера и имеет ряд конструктивных особенностей, использование которых нашло свое отражение в данном руководстве.

Вначале поясним основные понятия, которые вам будут встречаться.

Модель компьютера - набор конфигураций, зашитых в ПЗУ и определяющих возможности, доступные для пользователя. Современная модель компьютера Sprinter пока является единственной и носит тоже название.

Конфигурация компьютера - реализация конкретной схемы в перепрограммируемой логической микросхеме (ППЛМ). 

Основная конфигурация - конфигурация активная сразу после включения компьютера и содержащая в себе наиболее важные и часто используемые режимы работы данной модели компьютера.

Режим конфигурации - изменение характеристик работы компьютера в рамках конфигурации.

Быстрое ОЗУ - дополнительное ОЗУ, в котором процессор может работать на высокой частоте без тактов ожидания. 

Физический блок памяти - 16K блок основной памяти компьютера. Обозначается шестнадцатеричным числом -- #00..#FF

Логический блок памяти - 16K блок спектрумовской схемы распределения памяти. Обозначается десятичным числом - 0..15


Краткая характеристика компьютера Sprinter.
Процессор Z84C15 (21MHz/3.5MHz)
ОЗУ 4Mb
Быстрое ОЗУ 64Kb
ПЗУ 256Kb
ВидеоОЗУ 256Kb (512Kb)
Контроллер дисков Кp1818ВГ93 (аналог WD1793)
Поддержка дисководов: 3,5" диск (1.44Mb/720Kb)
5,25" диск (720Kb)
Часы CMOS DALLAS
Контpоллеp винчестеpа IDE/AT
Контpоллеp клавиатуpы 101key/AT
Контpоллеp мыши MS Mouse
Два слота стандаpт ISA-8
Аудио выход AY-3-8910 в ППЛМ, звуковой ЦАП (16 бит)
Видео выход Аналоговый CGA монитоp, RGB, ТВ со SCART.
Графические видеорежимы 320x256x256, 640x256x16, в стандарте Spectrum
Текстовые видеорежимы 80x32x16, 40х32х16

Техническая реализация.

   Ядром машины являются процессор Z84C15 и ППЛМ фирмы ALTERA - EP1K30QC208-3. Кроме них на плате присутствуют: микросхема ПЗУ, слот под 72-х-пиновый SIMM, видео ОЗУ, 64Kb Быстрого ОЗУ, схема контроллера дисковода на БИС КР1818ВГ93 (аналог WD1793), буферы для подключения джойстика, магнитофона, принтера, клавиатуры, дисководов, винчестера, мыши, буферные микросхемы шины ISA-8 и еще одна ППЛМ фирмы ALTERA -- EPM7064SLC100-10. Эта ППЛМ не меняет своей конфигурации и предназначена для обеспечения синхронизации и начального запуска компьютера. На плате так же предусмотрена возможность подключения CMOS часов - микросхемы DALLAS. 
   Кроме периферии и буферов имеются микросхемы дешифрации, входы которых подключаются к процессору через ППЛМ. Это позволяет легко менять адресацию устройств, без какого-либо изменения разводки печатной платы.

   Схема компьютера основана на большой перепрограммируемой логической микросхеме (ППЛМ). Подключение периферийных устройств через ППЛМ позволяет получить высокую гибкость машины по конфигурациям.

   Программирование (загрузка данных) ППЛМ осуществляется непосредственно в момент включения компьютера, а так же при перезагрузке, что позволяет кардинально менять схему в ППЛМ непосредственно во время работы. Это сильно выделяет архитектуру Sprinter-а из ряда существующих компьютеров, и многие понятия, присущие обычным машинам, меняют свой смысл. Фактически компьютер имеет гибкую архитектуру, в которой возможны изменения во многих частях схемы. Например, нельзя говорить о конкретных адресах портов подключения периферии, так как они могут быть изменены в одну секунду путем перепрограммирования ППЛМ и данных в ОЗУ, отвечающих за конфигурацию портов. Конкретные адреса появляются только в конкретных конфигурациях, например, в конфигурации ZX-Spectrum.

   Перепрограммируемость схемы дает большую свободу фантазии программиста по конфигурации машины. Задумывая конкретный проект, программист может определить в какой конфигурации его можно реализовать лучше, а, возможно, и придумать свою конфигурацию, которую затем можно реализовать в ППЛМ и включить перед запуском этой программы.
INCLUDEPICTURE \d "http://www.petersplus.ru/sprinter/pix/fig1.gif" \* MERGEFORMATINET 

рисунок 1.
Для упрощения схемы некоторые буферы и дешифраторы на схеме не указаны. Количество проводов в шинах так же условно.


Загрузка конфигураций.

   В момент включения компьютера, а так же после нажатия на RESET вся информация, находившаяся в ППЛМ и отвечающая за конкретную конфигурацию, стирается. ППЛМ переходит в режим ожидания загрузки блока данных схемы.

   В этот момент процессор полностью отключен от какой-либо периферии. В его адресное пространство памяти включено только ПЗУ и возможно подключение Быстрого ОЗУ. Любая запись в адресное пространство памяти процессора в этот момент приводит к записи данных в ППЛМ и программа в подключенной странице ПЗУ имеет только одну единственную цель - загрузить в ППЛМ данные конфигурации. В этой же странице ПЗУ находятся данные основной конфигурации. Программа загрузки конфигурации проверяет флаг в Быстром ОЗУ и, если он установлен, загружает в ППЛМ данные из Быстрого ОЗУ, если сброшен, то данные из ПЗУ. На этом основано переконфигурирование схемы компьютера.

   Для изменения схемы используется функция BIOS, которая загружает в Быстрое ОЗУ блок данных конфигурации и выставляет флаг в виде текстовой строки <<ACEX_30K_LOADING>>, после чего производится полный сброс, который осуществляется программно записью в специальную страницу памяти RESET_PAGE. Программа в ПЗУ, запускаемая по сбросу находит флаг <<ACEX_30K_LOADING>> и начинает загрузку данных в ППЛМ. Одновременно она затирает флаг, что предотвращает повторную загрузку новой конфигурации при нажатии на кнопку RESET и позволяет вернуться после "ручного" сброса в начальную конфигурацию. Затирание флага так же позволяет быстро вернуть схему в начальную конфигурацию в случае подключения неправильной конфигурации во время экспериментов с программами. 

   Внутренняя информация блока данных ППЛМ является закрытой информацией корпорации ALTERA. Кроме самих микросхем ППЛМ, эта корпорация поставляет и программное обеспечение для разводки схем внутри ППЛМ. К сожалению, разработка новых конфигураций может производится только при наличии компьютера, для которого создана программа разводки схем в ППЛМ -- MAX-Plus II. Версии программы для компьютера Sprinter не существует.

Описание конфигураций модели Sprinter.

   В современную модель компьютера Sprinter включено две конфигурации обеспечивающих все существующие возможности компьютера.

Конфигурация Sprinter.

   Эта конфигурация является основной для модели Sprinter. Включает в себя распределение памяти до 4Mb, графический экран с режимами разрешения 320х256 пикселей (256 цветов) и 640х256 пикселей (16 цветов). В обоих режимах доступна палитра в 16 млн. цветов. Также конфигурация включает в себя текстовые режимы 80х32 символов (16 цветов) и 40х32 символов (16 цветов). Кроме этого включены контроллер дисковода, контроллер IDE устройств, контроллер клавиатуры AT (построенный на внутреннем последовательном порте процессора), Акселератор, поддержка звукового ЦАПа в режиме 8 бит моно.
   Акселератор используется для операций с основным и видео ОЗУ, ускоряет операции пересылки блоков данных и заполнения ОЗУ одним байтом до физического предела скорости основного ОЗУ. Так же позволяет ускорить логическую обработку блоков данных по функциям AND, OR, XOR.

Конфигурация Spectrum.

   Данная конфигурация была создана для возможности использования программного обеспечения написанного для компьютера ZX Spectrum и некоторых его клонов.
   Конфигурация имеет возможность работать в нескольких режимах. Во всех режимах присутствует музыкальный сопроцессор AY-3-8910.

Режим Sprinter ZX.

   Данный режим является промежуточным, обеспечивающим доступ к возможностям Spectrum-а и к части возможностей Sprinter-а. Такое решение позволяет расширить возможности спектрумовских программ без существенного изменения кода.
Включен режим Scorpion 256
Доступен звуковой ЦАП.
Доступен графический экран 320х256х256 и 640х256х16
Доступен текстовый экран 80х32х16
Доступны порты управления расширенной памятью (свыше 256Kb)
Акселератор не доступен
Режим ZX Spectrum.

   Данный режим обеспечивает 100% совместимость с оригинальной моделью ZX Spectrum.

Режим Pentagon 128.

   Режим самого популярного в России клона компьютера Spectrum с 128Kb.
Включена синхронизация экрана по стандарту Pentagon
Отключен доступ к портам управления расширенной памятью
Режим Scorpion 256.

   Режим одного из самых распространенных в России клона компьютера Spectrum с памятью 256Kb.
Включена синхронизация экрана по стандарту Scorpion
Отключен доступ к портам управления расширенной памятью
Режим Pentagon 512.

   Режим компьютера Pentagon с 512Kb.
Включена синхронизация экрана по стандарту Pentagon
Отключен доступ к портам управления расширенной памятью
Распределение основной памяти компьютера Sprinter.

   Структура распределения основной памяти компьютера Sprinter является двухуровневой.

   Основная память компьютера (4Mb) разделена на блоки по 16Kb, задаваемые однобайтовым номером. Адресное пространство процессора Z80 разделено на 4 окна с адресами #0000..#3FFF, #4000..#7FFF, #8000..#BFFF и #C000..#FFFF, которые для краткости принято называть окнами с номерами 0, 1, 2 и 3.

   Аналогичным образом на 16kb блоки разделено ПЗУ и Быстрое ОЗУ. Физический номер страницы ПЗУ имеет значения #E0..#EF, а Быстрого ОЗУ - #F0..#FF. Реально на данный момент для адресации Быстрого ОЗУ используются только 2 и 1 биты из этого номера.
INCLUDEPICTURE \d "http://www.petersplus.ru/sprinter/pix/fig2.gif" \* MERGEFORMATINET 

рисунок 2.

   Схема распределения памяти позволяет подключить в адресное пространство процессора не только ОЗУ или ПЗУ, но и порты, и память ISA карт, вставляемых в слот. При подключении в адреса #C000..#FFFF через порт #1FFD расширенных страниц ОЗУ, на их место можно переадресовать слоты. Для этого надо просто записать в порт одной из этих страниц значение, соответствующее ISA-слоту, к которому необходимо произвести обращение. Это значение так же указывает, к чему ведется обращение, к портам или памяти слота (конкретные номера будут расписаны ниже).

   При подключении конфигурации Spectrum блоки памяти подключаются к логическим блокам спектрумовской схемы распределения памяти. 
   В каждом окне процессора располагается логический блок памяти согласно спектрумовскому распределению. В окно 0 подключено ПЗУ, в окно 1 - страница 5, в окно 2 -- страница 2, в окно 3 любая из страниц 0..7 для режима Pentagon-128, 0..15 для режима Scorpion-256 и 0..31 для режима Pentagon-512. Кроме этого, в режиме Scorpion-256 вместо ПЗУ может быть подключена логическая страница с номером 0.
   Каждый логический блок имеет свой собственный физический номер подключаемой в него страницы ОЗУ. Логические страницы с номерами 0, 2 и 5 имеют дублированные номера, один для жесткого подключения в окна 0, 1, 2 процессора, второй для подключения в окно 3. В режиме Спектрума номера физических страниц, выставленные в этих блоках, совпадают.
   В конфигурации Spectrum каждая страница ПЗУ или ОЗУ имеет свой порт, в котором указывается физический номер страницы. Всего таких портов страниц памяти 32 (в режиме Pentagon-512 добавляются еще 16 портов). 16 портов отвечают за номера страниц ОЗУ, подключаемые в третье окно процессора. Еще три порта отвечают за подключение страниц ОЗУ в окна 0..2. Восемь портов используются для подключения различных страниц ПЗУ. Один порт - для подключения страницы Быстрого ОЗУ вместо ПЗУ. И один порт - это порт системной страницы, подключаемой на место ПЗУ сразу после сброса машины по клавишам Ctrl+Alt+Del.
   Оставшиеся 3 порта страниц памяти остаются на данный момент в резерве. 

Видео-область, графический и спектрумовский режимы адресации.

   Запись в видео ОЗУ может осуществляться через два режима адресации видеопамяти.

   Первый режим адресации используется для вывода графики и текста в конфигурации Sprinter.
   Второй режим используется для задания знакогенераторов в текстовом режиме конфигурации Sprinter а также для вывода графики и текста в конфигурации Спектрума.
   Видео-область основного ОЗУ и видео-ОЗУ это два разных и физически отличающихся ОЗУ.
   Видео-область в основной памяти составляет 256Kb ОЗУ и соответствует страницам #50..#5F. При подключении этих страниц в любое окно процессора и при обращении к адресам этого окна мультиплексор адреса переключается в режим первого режима адресации. В этом режиме биты 3..0 номера страницы не влияют на адрес памяти, а определяют особый режим вывода, о котором будет сказано ниже. Адрес памяти в первом режиме адресации задается номером, засылаемым в RGADR (он же PORT_Y), о котором так же будет сказано ниже, и десятью младшими битами адреса процессора.
   Во втором режиме адресации видео-область основного ОЗУ располагается в адресах #4000..#5FFF и #C000..#DFFF для логических страниц 5 и 7. Любая физическая страница основного ОЗУ (кроме #50..#5F) подключенная к этим областям памяти процессора может стать видео-областью. В этом режиме нет привязки страницы основного ОЗУ к странице видео-ОЗУ. Последняя определяется через RGADR.

Распределение видео ОЗУ.

   Видео ОЗУ Спринтера является теневой памятью. Весь вывод в видео-ОЗУ производится параллельно с выводом в основное ОЗУ. При считывании из области видео данных считывается информация из видео области ОЗУ, а видео ОЗУ остается недоступным.
   Недоступность видео ОЗУ не является принципиальным ограничением. 

   Распределение видео-ОЗУ является частично жестким, частично программным.
   Жесткая часть распределения определяет где находится область описания режимов экрана и
данные палитры. Программное распределени определяет, где находятся данные для вывода в графических,
текстовых и спектрумовском режимах экрана, открываемых функциями BIOS.

   Современная модель компьютера Sprinter имеет в своем распоряжении 256К видео ОЗУ. Видео ОЗУ содержит в себе информацию, которую можно представить как видео экран размером 1024х256 байт. 
   Подобный видео экран разделен на несколько областей, границы которых принято обозначать порядковыми номерами байтов из первой линии длиной 1024 байта с #0000 по #03FF..
   Например, данные графической палитры находятся в видео ОЗУ с #03E0 по #03FF для первого цвета. Для последующих цветов в палитре нужно прибавлять 1024 для каждого цвета.
INCLUDEPICTURE \d "http://www.petersplus.ru/sprinter/pix/arch/vramarh.jpg" \* MERGEFORMATINET
  При использовании функций DOS данные графических экранов располагаются в интервале #0000..#02FF.
INCLUDEPICTURE \d "http://www.petersplus.ru/sprinter/pix/arch/vramsys.jpg" \* MERGEFORMATINET

Первый графический экран - #0000..#013F 
Второй графический экран - #0140..#027F 
Знакогенераторы текстового режима - #02C0..#02FF
Область описания режимов экрана находятся в адресах - #0300..#039F.
Область #03A0..#03DF является зарезарвированной и не должна использоваться.
Данные графической палитры находятся с #03E0 по #03FF.

  При использовании функций BIOS данные графических и спектрумовских экранов располагаются в интервале #0000..#02FF.
INCLUDEPICTURE \d "http://www.petersplus.ru/sprinter/pix/arch/vramzx.jpg" \* MERGEFORMATINET

Спектрумовский экран - #0000..#003F
Первый графический экран - #0040..#017F
Второй графический экран - #0180..#02BF
Знакогенераторы текстового режима - #02C0..#02FF
Область описания режимов экрана находятся в адресах #0300..#039F.
Область #03A0..#03DF является зарезарвированной и не должна использоваться.
Данные графической палитры находятся с #03E0 по #03FF.
INCLUDEPICTURE \d "http://www.petersplus.ru/sprinter/pix/arch/apxa.jpg" \* MERGEFORMATINET
Данные илюстрации демонстрируют различные структуры экрана
INCLUDEPICTURE \d "http://www.petersplus.ru/sprinter/pix/arch/apxb.jpg" \* MERGEFORMATINET
INCLUDEPICTURE \d "http://www.petersplus.ru/sprinter/pix/arch/apxc.jpg" \* MERGEFORMATINET
 

Структура экрана и его режимы.

   Видео система, схема которой записана в ППЛМ, позволяет управлять режимом вывода изображения. Управление осуществляется через запись данных в область описания режима экрана (#0300...#039F).
   Весь экран представляет собой набор из 56x39 (56x40) элементов, что соответствует телевизионному режиму 312 (320) полных линий на кадр.
   Видимая область составляет 40x32 элементов. Остальные элементы это бордюр, а также место обратного хода луча и синхроимпульсов.

  Любой из присутствующих на экране элементов может независимо содержать один из режимов вывода информации.

1. Текстовый режим 80 символов в строке, 32 строки, 16 цветов. Отличительной особенностью является возможность на одном экране иметь до 36 знакогенераторов, указываемых для каждого символа. 
2. Текстовый режим 40 символов в строке, 32 строки, 16 цветов. Используется только в конфигурации Spectrum.
3. Графический режим 320x256 точек, 256 цветов. Он же 8x8 точек 256 цветов на одно знакоместо. 
4. Графический режим 640x256 точек, 16 цветов. Он же 16x8 точек 16 цветов на одно знакоместо.

В данных режимах цвета выбираются из палитры 16 млн. цветов.


Палитра.

   На экран компьютера Sprinter могут одновременнно выводиться несколько окон 
с различными палитрами: четырьмя палитрами для графических окон и одной палитрой для текстовых окон.

   Палитра может включать любые 256 цветов из возможных 16 миллионов цветов.
Каждый цвет состоит из красного, зеленого и синего цветов различной интенсивности.
Информация о каждом цвете включает в себя три байта (и еще один байт зарезервирован и не используется сейчас).
Эти три байта считываются из области палитры в видео ОЗУ (#03E0..#03FE) и выводятся в три регистра с тремя ЦАП-ами на
выходе. Какие именно три байта выводить определяется схемой видео-системы. 
Номер линии соответствует номеру цвета для графического цветного режима или номеру атрибута для
текстового режима. 


   В графическом окне каждый пиксел может иметь один из 256 цветов одной из четырех палитр:

#03E0..#03E2 -- графичеcкая палитра 0
#03E4..#03E6 -- графичеcкая палитра 1
#03E8..#03EA -- графичеcкая палитра 2
#03EC..#03EE -- графичеcкая палитра 3

Примечание: в режиме экрана 640x256 пикселей каждый пиксел может иметь только 16 младших цветов из палитры.

   В текстовом окне каждое знакоместо может иметь четыре цвета:

#03F0..#03F2 -- текстовая палитра 0 -- цвет фона
#03F4..#03F6 -- текстовая палитра 1 -- цвет символа
#03F8..#03FA -- текстовая палитра 2 -- цвет мерцания фона
#03FC..#03FE -- текстовая палитра 3 -- цвет мерцания символа