docs: справочники по железу Sprinter + правка gfx_scroll_h
- docs/new/ — сводные справочники (архитектура, BIOS, DSS, память, графика, акселератор, IRQ, порты, ввод, звук, известные баги); - docs/Original/ — первоисточники, из которых они собраны (BIOS, Estex DSS, мануалы, описание акселератора), + Форум.doc/.docx в reference; - libbgi/common/gfx_scroll_h.c — обход бага скролла при ширине >256 (правка автора: шаг банды 255 и продвижение указателей на cw; старый вариант с 256 оставлен закомментированным с TODO); - удалён applications/PoP/roomtest/hang_variants.png — рабочая раскладка из разбора позы виса, в репозитории ей не место. Большие архивы (docs/extra ~568 МБ, docs/sources с вложенными git-репо ~68 МБ) в коммит НЕ включены — см. обсуждение. Co-Authored-By: Claude Opus 5 <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