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

98 lines
7.2 KiB
Plaintext

Акселератор компьютера Sprinter.
Акселератор предназначен для ускорения операций по пересылке блоков данных в ОЗУ и видео-ОЗУ.
Акселератор позволяет:
- быстро заполнять горизонтальную или вертикальную линию длиной до 256 точек одним цветом (в режиме 640x256 - одинарную/двойную горизонтальную линию длиной до 512 точек)
- быстро копировать горизонтальную или вертикальную линию длиной до 256 точек (в режиме 640x256 - горизонтальную линию до 512 точек)
- проводить быстрые операции AND, OR, XOR с блоками памяти.
Акселератор не может работать с блоками данных ПЗУ и Быстрого-ОЗУ.
ОЗУ акселератора является частью внутреннего ОЗУ ППЛМ.
Операции по пересылке данных производятся путем записи блока данных в это
внутреннее ОЗУ, а затем копировании его в нужное место ОЗУ из ОЗУ акселератора.
Блок данных, записываемый в ОЗУ акселератора может иметь различную
длинну из диапазона 1..256 байт.
После одной записи копирование может производиться несколько раз и, таким
образом, можно производить заполнение экрана текстурами.
Для заполнения экрана одним цветом используется другой режим
акселератора. В нем вместо копируемого блока данных из внутреннего ОЗУ
производится запись данных с шины процессора, которые в этот момент не
изменяются.
Управление акселератором производится непосредственно из программы.
Для этого изпользуются команды процессора, которые, фактически, являются
операциями типа NOP.
LD B,B - выключить акселетарор.
LD D,D - включить акселератор в режим приема байта размера блока
далее следует команда типа LD A,dat, где dat и будет новым
размером блока. Если размер блока был установлен ранее,
его можно не устанавливать.
LD C,C - Операция Fill - заполнение одним байтом. Последующая
команда типа LD (HL),A приведет к заполнению указанного
ранее количества байт значением A
LD E,E - Операция Fill для графического экрана - заполнение
вертикальных линий.
LD H,H - rezerved
LD L,L - копирование блока. Последующая команда типа LD A,(HL)
приведет к заполнению ОЗУ акселератора данными из адреса (HL),
а команда типа LD (DE),A приведет к перезаписи данных из ОЗУ
акселератора в ОЗУ или видео-ОЗУ.
LD A,A - копирование блока для графического экрана подобна команде
LD L,L, но работает с вертикальными линиями экрана.
Пример использования акселератора:
; Считаем, что экранная страница уже открыта по адресу #C000
LD HL,#C040 ; адрес начала линии первого экрана
LD DE,#C180 ; адрес начала линии второго экрана
LD BC,#140 ; длина экрана по горизонтали
DI ; запретить прерывания для работы с акселератором
LD D,D ; включить акселератор на установку размера блока
LD A,0 ; установить размер блока - 256 байт
LD A,A ; установить акселератор на копирование
; вертикальных линий.
LDIR ; копировать
LD B,B ; выключить акселератор
EI ; включить прерывания
Эта часть программы произведет копирование всего содержимого первого экрана на другой.
Время исполения составляет примерно 26 милисекунд.
Дополнительные функции акселератора (AND, OR, XOR) работают таким же образом.
Для выполнения логических функций используются команды XOR (HL); OR (HL); AND (HL).
Пример кодирования блока в 256 байт.
LD HL,ADRES_1
LD DE,XOR_DAT
DI
LD D,D
LD A,0 ; число байт, которые надо закодировать
LD L,L
LD A,(DE) ; взять блок данных в ОЗУ акселератора
XOR (HL) ; произвести операцию XOR с данными акселератора
LD (HL),A ; запомнить в ОЗУ результат операции
LD B,B
EI
Скорость работы акселератора ограничивается только физической
скоростью работы основного ОЗУ. Определить примерное время работы команды с
акселератором можно по такой формуле:
Время работы = время работы команды без акселератора + время работы
акселератора
Время работы акселератора = число пересылаемых байт /7 микросекунд
Во время работы акселератора необходимо отключать прерывания, так как в этот момент
изменяется система команд процессора и программа на прерывании не сможет работать корректно.