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,97 @@
|
||||
Акселератор компьютера 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 микросекунд
|
||||
|
||||
Во время работы акселератора необходимо отключать прерывания, так как в этот момент
|
||||
изменяется система команд процессора и программа на прерывании не сможет работать корректно.
|
||||
Reference in New Issue
Block a user