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:
Executable
+1387
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,279 @@
|
||||
Автор Mac Buster
|
||||
1.2. Доступные видеорежимы
|
||||
В нашем распоряжении два графических режима.
|
||||
Один из них имеет разрешение 320 точек по горизонтали и 256 точек по вертикали.
|
||||
В этом режиме мы можем каждую точку окрашивать в любой из 256 цветов, т.е. одной точке
|
||||
соответствует один байт видеопамяти.
|
||||
Таким образом экран в этом режиме требует 320x256=81920 байт.
|
||||
Второй режим имеет 640 точек по горизонтали, 256 точек по вертикали, где каждая точка может
|
||||
быть окрашена в один из 16 цветов, т.е. отводится только 4 бита на точку, а значит каждый
|
||||
байт содержит информацию сразу о двух точках
|
||||
(младший полубайт об одной точке, старший - о другой).
|
||||
В каждом режиме мы можем использовать две идентичные видеостраницы (нумеруемых 0 и 1),
|
||||
и четыре палитры (к сожалению только одна палитра
|
||||
может быть использована в текущий момент).
|
||||
В терминах “ Спринтера
|
||||
” блоки имеющие 320 или 640 точек по горизонтали и одну точку
|
||||
по вертикали называются строками.
|
||||
1.3. Структура видеопамяти
|
||||
В настоящее время объем видеопамяти “ Спринтера
|
||||
” составляет 256 килобайт.
|
||||
Возможно Вы обратили внимание на то, что числа количества строк (их 256) и объёма видеопамяти
|
||||
(256 килобайт) одинаковы.
|
||||
Это не простое совпадение, дело в том, что на каждую строку отводится по одному килобайту
|
||||
видеопамяти, причем вне зависимости от того, сколько точек по горизонтали содержит строка данного
|
||||
режима. Первые 320 байт строки (с номерами 0…319) определяют цвета точек для первой
|
||||
видеостраницы, следующие 320 байт (с номерами 320-639) — то же для второй видеостраницы,
|
||||
остальные байты (с номерами 640…1023) режиме, а так же для хранения данных палитры
|
||||
(будет описана позже).
|
||||
Структура описателя экрана мне пока неясна полностью, поэтому я в данном руководстве не буду её
|
||||
рассматривать.
|
||||
1.4. Как работать с видеопамятью “ ” Спринтера
|
||||
Для простоты я сначала покажу вам как надо записывать данные в одну строку видеорежима
|
||||
с разрешением 320x256.
|
||||
Что бы это сделать, нам требуется произвести следующие действия:
|
||||
• установить видеорежим;
|
||||
• установить страницу видеопамяти в адресное пространство Z80;
|
||||
• выбрать строку видеопамяти;
|
||||
• записать данные по необходимому смещению от начала строки.
|
||||
Видеорежим будем устанавливать с помощью функции “SETVMOD”
|
||||
набора функций системы “Estex”.
|
||||
Перед её вызовом необходимо в регистр A загрузить номер видеорежима
|
||||
(для режима 320x256 это 0x81, для 640x256 это 0x82), затем в регистр B загрузить номер
|
||||
видеостраницы (0 для первой страницы и 1 для второй страницы), а в регистр C поместить
|
||||
номер функции “SETVMOD” системы “Estex” — 0x50.
|
||||
После чего мы вызываем функцию с помощью инструкции RST 0x10.
|
||||
Полностью это должно выглядеть примерно так:
|
||||
0x81
|
||||
LD A, ; мы собираемся использовать режим 320x256
|
||||
0x00
|
||||
LD B, ; нам нужна первая страница
|
||||
0x50
|
||||
LD C, ; номер функции “SETVMOD“
|
||||
0x10RST ; установить видеорежим
|
||||
Не помешает проверить была ли выполнена наша функция без ошибок.
|
||||
Если в процессе выполнения произошла ошибка, то после возвращения
|
||||
из подпрограммы вызываемой нами с помощью RST 0x10, будет установлен
|
||||
флаг переноса C, а значит мы не сможем работать с видеопамятью.
|
||||
Нам надо както обрабатывать такую ситуацию.
|
||||
Предположим, что у нас где-то есть процедура “VMError” для такого случая,
|
||||
выводящая на экран строку “ Err — Unable to set videomode!
|
||||
”, тогда сразу
|
||||
после RST 0x10 следует поставить проверку установлен ли флаг C.
|
||||
JR C,VMError ; произошла ошибка?
|
||||
Кроме того, стоит заметить, что раздельная загрузка регистров B и C
|
||||
была сделана только для наглядности, и в следующих примерах я буду
|
||||
использовать одну инструкцию загрузки значения в регистровую пару BC —
|
||||
“LD BC, 0xNNNN”.
|
||||
То есть предыдущий фрагмент кода будет выглядеть следующим образом:
|
||||
LD A, 0x81
|
||||
; мы собираемся использовать режим 320x256
|
||||
LD BC, 0x0050
|
||||
; первая страница,номер функции “SETVMOD”
|
||||
0x10
|
||||
RST ; установить видеорежим
|
||||
JR C,VMError ; произошла ошибка?
|
||||
Теперь надо установить видеостраницу в адресное пространство Z80. Видеопамять разбита на
|
||||
16- килобайтные страницы (по 16 строк на страницу) с номерами 0x50...0x5F, которые могут
|
||||
быть подключены так же, как это делается с обычной оперативной памятью.
|
||||
Причем следует иметь в виду, что номера страниц видеопамяти так же определяют режим доступа к
|
||||
видеоданным (обычный; без изменения данных в основном ОЗУ; с так называемым
|
||||
“прозрачным” цветом;).
|
||||
Сейчас мы ограничимся самым простым для понимания обычным режимом.
|
||||
Будем подключать видеопамять в страницу 3 начинающуюся с адреса 0xC000
|
||||
(или 49152 в десятичной системе счисления).
|
||||
Это значит, что адрес первой по счету строки в видеостранице будет начинаться с
|
||||
этого адреса (0xC000).
|
||||
В данном примере будем использовать прямую запись в порт, однако, хочу предупредить,
|
||||
что поступать так в приложениях, предназначенных для распространения, не рекомендуется
|
||||
(лучше использовать для этой цели специально отведенные функции “Estex” или BIOS).
|
||||
Все, что нам надо сделать — это предварительно сосчитать и сохранить данные из порта,
|
||||
предназначенного для указания номера страницы, подключаемой в третье окно — 0xE2,
|
||||
а затем записать в этот порт значение 0x50 (номер страницы отведенной под видеопамять).
|
||||
0xE2
|
||||
IN A,( ) ; считываем текущее значение
|
||||
LD (OldWin3Page),A ; сохраняем его в памяти, чтобы
|
||||
; вернуть при выходе
|
||||
0x50
|
||||
LD A, ; номер страницы видеопамяти
|
||||
0xE2
|
||||
OUT ( ),A ; записываем новое значение
|
||||
Теперь в адресное пространство подключена страница видеопамяти, и мы уже можем
|
||||
записывать в нее данные.
|
||||
Но перед этим нам ещё требуется указать в какую именно строку надо записывать данные,
|
||||
для чего в порт 0x89 надо ввести номер строки (0...255).
|
||||
0x10
|
||||
LD A, ; выбираем семнадцатую строку
|
||||
OUT ( 0x89
|
||||
),A ; записываем номер строки в порт
|
||||
После этого с адреса 0xC000 у нас располагаются данные видеопамяти относящиеся
|
||||
к семнадцатой строке, с адреса 0xC400 — к восемнадцатой, с 0xC800 — к девятнадцатой,
|
||||
и так далее, до тридцать первой, с шагом в один килобайт.
|
||||
Замечание - реальность доступа к строкам 18-31 не подтверждена, в эмуляторе MAME
|
||||
точно это не работает, доступна только та строка которая была выбрана (17).
|
||||
Требуется проверка на реальном устройстве.
|
||||
Записав по адресу 0xC000 какоенибудь число, мы изменим цвет самой первой слева точки
|
||||
семнадцатой сверху строки на экране.
|
||||
0x12
|
||||
LD A, ; выбираем цвет
|
||||
0xC000
|
||||
LD ( ),A ; записываем в видеопамять
|
||||
Мы выполнили все, что планировали, осталось только произвести какую-либо задержку,
|
||||
чтобы появилась возможность увидеть результат нашего “титанического труда”.
|
||||
Проще всего использовать для этого функцию “WAITKEY” с номером 0x30,
|
||||
которая ждет нажатия любой алфавитно-цифровой клавиши.
|
||||
Делается это следующим образом:
|
||||
0x30
|
||||
LD C, ; загружаем номер функции “WAITKEY”
|
||||
0x10
|
||||
RST ; вызываем “Estex”
|
||||
Восстанавливаем старое значение в использованной нами странице памяти и устанавливаем
|
||||
текстовый режим:
|
||||
LD A,(OldWin3Page);
|
||||
0xE2
|
||||
OUT ( ),A ;
|
||||
0x03
|
||||
LD A, ; текстовый режим
|
||||
0x0050
|
||||
LD BC, ;
|
||||
0x10
|
||||
RST ;
|
||||
Теперь нам надо вернуться в систему или вызвавшую нас программу.
|
||||
Для этого существует функция “Estex” под названием “ Exit
|
||||
”, имеющая номер 0x41.
|
||||
Предварительно в регистр B следует поместить код ошибки, либо 0, если ее не было.
|
||||
Мы будем считать, что никаких ошибок не было:
|
||||
0x0041
|
||||
Exit LD BC, ;
|
||||
0x10
|
||||
RST ;
|
||||
Вот и почти вся наша программа.
|
||||
Осталась только процедура вывода строки о невозможности установки видеорежима и
|
||||
последующим переходом на метку “ ”. Exit
|
||||
VMError LD HL,ErrMessage ;
|
||||
0x005C
|
||||
LD BC, ;
|
||||
0x10
|
||||
RST ;
|
||||
JR Exit ;13
|
||||
“Err — Unable to set videomode!
|
||||
ErrMessage DB ”,0x0D, 0x0A,0x00
|
||||
Первая часть руководства окончена.
|
||||
Вы научились подключать видеопамять, выбирать строку и выводить на экран точку.
|
||||
Этого вполне достаточно для начала.
|
||||
Настоятельно рекомендую поэкспериментировать с выводом, например, сделать так, чтобы
|
||||
точка постоянно меняла цвет :)
|
||||
Ниже приведен полностью работающий, готовый к ассемблированию с помощью Z80asm 1.5,
|
||||
пример нашей программы:
|
||||
0x7E00
|
||||
ORG ;
|
||||
DB “ ” ; EXE
|
||||
0x00
|
||||
DB ;
|
||||
0x0200,0x0000
|
||||
DW ;
|
||||
0x0000
|
||||
DW ;
|
||||
0x00,0x00
|
||||
DB ;
|
||||
0x00,0x00
|
||||
DB ;
|
||||
0x0000
|
||||
DW ;
|
||||
0x8000
|
||||
DW ;
|
||||
DW EntryPoint ;
|
||||
DW ; 0xBFFF
|
||||
0x00
|
||||
times 0x1EA DB ;
|
||||
EntryPoint LD A,0x81
|
||||
LD BC,0x0050
|
||||
RST 0x10
|
||||
JR C,VMError
|
||||
0xE2
|
||||
IN A,( )
|
||||
LD (OldWin3Page),A
|
||||
LD A,0x50
|
||||
0xE2
|
||||
OUT ( ),A
|
||||
LD A,0x10
|
||||
0x89
|
||||
OUT ( ),A
|
||||
LD A,0x12
|
||||
0xC000
|
||||
LD ( ),A
|
||||
LD C,0x30
|
||||
RST 0x10
|
||||
LD A,(OldWin3Page)
|
||||
0xE2
|
||||
OUT ( ),A
|
||||
LD A,0x03
|
||||
LD BC,0x0050
|
||||
RST 0x10
|
||||
Exit LD BC,0x0041
|
||||
RST 0x10
|
||||
VMError LD HL,ErrMessage
|
||||
LD BC,0x005C
|
||||
RST 0x10
|
||||
JR Exit
|
||||
ErrMessage DB “ Err — Unable to setvideomode! 0x0D 0x0A 0x00
|
||||
”, , ,
|
||||
OldWin3Page DB 0x00
|
||||
Заголовок исполняемого файла для «Спринтера»
|
||||
Решив попробовать свои силы в программировании для « Спринтера
|
||||
»,
|
||||
вы можете воспользоваться ассемблером на самом « » (например, Спринтере OrgAsm
|
||||
),
|
||||
либо любым подходящим вам кроссассемблером.
|
||||
Спринтеровские ассемблеры умеют автоматически создавать исполняемые файлы.
|
||||
Однако, если вы выбрали второй вариант, то для создания исполняемого файла вам
|
||||
необходимо добавить к своей программе заголовок, содержащий в себе служебную
|
||||
информацию, указывающую операционной системе как и куда загружать
|
||||
исполняемый код.
|
||||
Вид заголовка показан на рисунке (префикс 0x означает запись в шестнадцатеричной системе
|
||||
счисления).
|
||||
Обычно код программы размещают начиная с адреса 0x8100, и первая строка в заголовке
|
||||
указывает начальный адрес компиляции – 0x7F00, т.е.
|
||||
0x8100–0x0200 (общая длина заголовка 512 байт).
|
||||
После этого следуют три латинские литеры «EXE»,
|
||||
служащие для определения типа файла.
|
||||
За ними указывается номер версии исполняемого файла (сейчас используется нулевая версия).
|
||||
Далее располагается информация о смещении кода вашей программы от начала исполняемого
|
||||
файла, т.е. фактически указывается длина заголовка (512 байт).
|
||||
Если ваш ассемблер не поддерживает тип «двойное слово», можно заменить эту строку на:
|
||||
DEFW 0x0000,0x0200
|
||||
Теперь надо указать длину начального загрузчика, если он есть (либо 0 если его нет).
|
||||
В том случае, если ваша программа разбита на независимые модули (или секции кода и данных),
|
||||
вы можете организовать программу таким образом, чтобы при запуске она самостоятельно
|
||||
принимала решение о том, что и как загружать в память и запускать, выделив часть кода
|
||||
в начальный загрузчик.
|
||||
Затем идут 6 байт, зарезервированных под дальнейшее развитие формата исполняемого файла.
|
||||
Обратите внимание, что для соблюдения совместимости с последующими форматами следует
|
||||
всегда заполнять зарезервированные байты нулевыми значениями.
|
||||
После зарезервированных байт указывается начальный адрес загрузки кода вашей программы.
|
||||
За ним указывается адрес ее запуска, т.е. значение, которое будет занесено в регистр PC.
|
||||
Сразу после него идет адрес вершины стека (для загрузки регистра SP), устанавливаемый
|
||||
при запуске вашей программы, которое не рекомендуется менять.
|
||||
И в конце заголовка идут 490 зарезервированных байт.
|
||||
Далее с метки START начинается код вашей программы.
|
||||
ORG 0x7F00
|
||||
DEFW ;
|
||||
0x5845 EXE Signature
|
||||
DEFB ;
|
||||
0x45 Reserved (EXE type)
|
||||
DEFB ;
|
||||
0x00 Version of EXE file
|
||||
DEFD ;
|
||||
0x00000200 Code offset
|
||||
DEFW ;
|
||||
0x0000 Primary loader size or 0
|
||||
DEFD ;
|
||||
0x00000000 Reserved
|
||||
DEFW ;
|
||||
0x0000 Reserved
|
||||
DEFW START ; Loading address
|
||||
DEFW START ; Starting address (register PC)
|
||||
DEFW ; 0x0BFFFh Stack address (register SP)
|
||||
DEFS ;
|
||||
0x1EAh Reserved 1
|
||||
START первая команда вашей программы
|
||||
@@ -0,0 +1,278 @@
|
||||
The Accelerator
|
||||
|
||||
The Accelerator is the internal device realised by PLD. Almost all configurations of Sprinter include the Accelerator with different sets of commands. Below we described the Accelerator for Sprinter Configuration.
|
||||
|
||||
The Accelerator serves for acceleration of data blocks transfer as fast as possible (today, up to a physical speed limit of the RAM). The Accelerator supports data blocks transfer of RAM and Video-RAM. And it is not supports data blocks transfer of ROM and FastRAM.
|
||||
|
||||
The Accelerator allows:
|
||||
|
||||
- fast filling of horizontal or vertical screen line of 1-256 pixels by one color (in 640x256 mode - one/double horizontal line of 1-512 pixels).
|
||||
- fast copying of horizontal or vertical screen line of 1-256 pixels (in 640x256 mode - horizontal line of 1-512 pixels).
|
||||
- use AND, OR and XOR operations with data blocks.
|
||||
|
||||
The Accelerator has 256 bytes of memory that used for the data transfers. This Accelerator memory is a part of PLD internal memory. Data transfer begin when you load that data block to the Accelerator memory. Next that block is copying to the selected part of RAM. Last operation can be repeated as often as you need. It is a way for filling the screen by textures.
|
||||
|
||||
Another mode is used for filling a screen by one color. The screen is filling by one byte from CPU bus.
|
||||
|
||||
For control the Accelerator from a program use following CPU commands:
|
||||
|
||||
LD B, B - Switch the Accelerator off.
|
||||
|
||||
LD D, D - Switch the Accelerator in the mode of load a byte of block size.
|
||||
Next command is "LD A, dat" where "dat" is a new block size.
|
||||
|
||||
LD C, C - Switch the Accelerator to filling by one byte mode for horizontal line.
|
||||
Next command "LD (HL), A" will fill all bytes by value of A.
|
||||
|
||||
LD E, E - Switch the Accelerator to filling by one byte mode for vertical line.
|
||||
|
||||
LD H, H - Reserved.
|
||||
|
||||
LD L, L - Switch the Accelerator to copying a data block mode for horizontal line of the screen.
|
||||
Next command "LD A, (HL)" will fill the Accelerator memory by value of (HL).
|
||||
And the command "LD (DE), A" will copy the data from the Accelerator memory to RAM or to VideoRAM.
|
||||
|
||||
LD A, A - Switch the Accelerator to copying a data block mode for vertical line of the screen.
|
||||
|
||||
The following program will copy data from the first screen to the second screen. It takes nearly two interrupts (1,2 INT).
|
||||
|
||||
; display page was opened from the #C000 already
|
||||
LD HL,#C000 ; Address of the beginning of a line of first screen
|
||||
LD DE,#C180 ; Address of the beginning of a line of second screen
|
||||
LD BC,#140 ; The width of the screen
|
||||
DI ; Disable interrupt
|
||||
LD D,D ; Switch the Accelerator to define block size mode
|
||||
LD A,0 ; Set block size to 256 bytes
|
||||
LD A,A ; Switch the Accelerator to copying a graphic data block mode
|
||||
LDIR ; Copying
|
||||
LD B,B ; Switch the Accelerator off
|
||||
EI ; Enable interrupt
|
||||
Additional functions of the Accelerator (AND, OR, XOR) is available too.
|
||||
|
||||
The following program is coding 256 bytes block.
|
||||
|
||||
LD HL,ADRES_1
|
||||
LD DE,XOR_DAT
|
||||
DI
|
||||
LD D,D
|
||||
LD A,0 ; Number of bytes which must be encoded
|
||||
LD L,L
|
||||
LD A,(DE) ; Load data block to the Accelerator memory
|
||||
XOR (HL) ; XOR
|
||||
LD (HL),A ; Load result to RAM
|
||||
LD B,B
|
||||
EI
|
||||
|
||||
The speed of the Accelerator is limited only by physical speed of RAM. To define an time of the command's work with the Accelerator it's possibleby next formula:
|
||||
|
||||
Time of work = time of work without the Accelerator + time of the Acelerator work.
|
||||
|
||||
Time of the Acelerator work = number of bytes / 7000000.
|
||||
|
||||
Note: disable interrupt during the Accelerator work!
|
||||
|
||||
|
||||
Examples of usage the Accelerator.
|
||||
|
||||
;**************************
|
||||
|
||||
; Interrupt - enable
|
||||
; Stack, Program & Data - in (8000h..BFFFh)
|
||||
; Video-RAM - in (C000h..FFFFh)
|
||||
; Video-Data - (0000h..BFFFh)
|
||||
;
|
||||
;
|
||||
Screen_offset EQU 0C000h ; or 0C140h for second grafic screen
|
||||
|
||||
Video_Data EQU *** ; 0000h..BFFFh
|
||||
Color_for_fill EQU *** ; 0..255
|
||||
|
||||
Horizontal_offset EQU *** ; 0...319
|
||||
Vertical_offset EQU *** ; 0...255
|
||||
Horizontal_size EQU *** ; 1...256
|
||||
Vertical_size EQU *** ; 1...256
|
||||
|
||||
;**************************
|
||||
|
||||
Open_video_page:
|
||||
|
||||
IN A,(PORT_Y)
|
||||
LD (SAVE_PY),A ; save port_y
|
||||
IN A,(PAGE3)
|
||||
LD (SAVE_PG3),A ; save page3
|
||||
LD A,50h ; Use 50h for normal mode
|
||||
; 54h for "no copy in main shadow RAM" mode
|
||||
; 58h for "FF is transparent" mode
|
||||
; 5Ch for "no copy in main shadow RAM" and
|
||||
; "FF is transparent" mode
|
||||
OUT (PAGE3),A
|
||||
RET
|
||||
|
||||
SAVE_PG3: DB 0FFh
|
||||
SAVE_PY: DB 0C0h
|
||||
|
||||
;**************************
|
||||
|
||||
Close_video_page:
|
||||
|
||||
LD A,(SAVE_PG3)
|
||||
OUT (PAGE3),A
|
||||
LD A,(SAVE_PY)
|
||||
OUT (PORT_Y),A
|
||||
RET
|
||||
|
||||
;**************************
|
||||
|
||||
Horizontal_Line_copy:
|
||||
|
||||
LD HL,Video_Data
|
||||
LD DE,Screen_Offset+Horizontal_Offset
|
||||
LD A,Vertical_Offset
|
||||
OUT (PORT_Y),A ; Set vertical offset
|
||||
DI
|
||||
LD D,D ; Switch the Accelerator to define block size mode
|
||||
LD A,Horizontal_size ; Use direct data or (HL),(BC),(DE) only!
|
||||
; !!! not ld A,C !!!
|
||||
LD B,B ; Stop the Accelerator
|
||||
LD L,L ; Switch the Accelerator to copying a data block mode
|
||||
LD A,(HL) ; Get data line
|
||||
LD (DE),A ; Put data line
|
||||
LD B,B ; Stop the Accelerator
|
||||
EI
|
||||
RET
|
||||
|
||||
;**************************
|
||||
|
||||
Vertical_Line_copy:
|
||||
|
||||
LD HL,Video_Data
|
||||
LD DE,Screen_Offset+Horizontal_Offset
|
||||
LD A,Vertical_Offset
|
||||
OUT (PORT_Y),A ; Set vertical offset
|
||||
DI
|
||||
LD D,D ; Switch the Accelerator to define block size mode
|
||||
LD A,Vertical_size ; Use direct data or (HL),(BC),(DE) only!
|
||||
; !!! not ld A,C !!!
|
||||
LD B,B ; Stop the Accelerator
|
||||
LD A,A ; Switch the Accelerator to copying a graphic data block mode
|
||||
LD A,(HL) ; Get data line
|
||||
LD (DE),A ; Put data line
|
||||
LD B,B ; Stop the Accelerator
|
||||
EI
|
||||
RET
|
||||
|
||||
;**************************
|
||||
|
||||
Horizontal_Line_Fill:
|
||||
|
||||
LD DE,Screen_Offset+Horizontal_Offset
|
||||
LD A,Vertical_Offset
|
||||
OUT (PORT_Y),A ; Set vertical offset
|
||||
DI
|
||||
LD D,D ; Switch the Accelerator to define block size mode
|
||||
LD A,Horizontal_size ; Use direct data or (HL),(BC),(DE) only!
|
||||
; !!! not ld A,C !!!
|
||||
LD B,B ; Stop the Accelerator
|
||||
LD A,Color_for_fill
|
||||
LD C,C ; Switch the Accelerator to filling by one byte mode
|
||||
LD (DE),A ; Put line of color
|
||||
LD B,B ; Stop the Accelerator
|
||||
EI
|
||||
RET
|
||||
|
||||
;**************************
|
||||
|
||||
Vertical_Line_Fill:
|
||||
|
||||
LD DE,Screen_Offset+Horizontal_Offset
|
||||
LD A,Vertical_Offset
|
||||
OUT (PORT_Y),A ; Set vertical offset
|
||||
DI
|
||||
LD D,D ; Switch the Accelerator to define block size mode
|
||||
LD A,Vertical_size ; Use direct data or (HL),(BC),(DE) only!
|
||||
; !!! not ld A,C !!!
|
||||
LD B,B ; Stop the Accelerator
|
||||
LD A,Color_for_fill
|
||||
LD E,E ; Switch the Accelerator to filling by one byte mode
|
||||
LD (DE),A ; Put line of color
|
||||
LD B,B ; Stop the Accelerator
|
||||
EI
|
||||
RET
|
||||
|
||||
;**************************
|
||||
|
||||
Draw_Restangle_Data:
|
||||
|
||||
LD HL,Video_Data
|
||||
LD DE,Screen_Offset+Horizontal_Offset
|
||||
LD A,Vertical_Offset
|
||||
OUT (PORT_Y),A ; Set vertical offset
|
||||
LD B,Vertical_size ; 0 is 256
|
||||
LD C,Horizontal_Size ; 0 is 256
|
||||
|
||||
DI
|
||||
LD D,D ; Switch the Accelerator to define block size mode
|
||||
LD A,Horizontal_Size ; Use direct data or (HL),(BC),(DE) only!
|
||||
; !!! not ld A,C !!!
|
||||
LD B,B ; Stop the Accelerator
|
||||
EI
|
||||
|
||||
drd_loop:
|
||||
DI
|
||||
LD L,L ; Switch the Accelerator to copying a data block mode
|
||||
LD A,(HL) ; Get data line
|
||||
LD (DE),A ; Put data line
|
||||
LD B,B ; Stop the Accelerator
|
||||
EI
|
||||
|
||||
LD A,C ; Next line data
|
||||
AND A
|
||||
JR Z,drd_inc
|
||||
ADD A,L
|
||||
LD L,A
|
||||
JR NC,drd_no_inc
|
||||
drd_inc:
|
||||
INC H
|
||||
drd_no_inc:
|
||||
|
||||
IN A,(PORT_Y) ; Next line
|
||||
INC A
|
||||
OUT (PORT_Y),A
|
||||
|
||||
DJNZ drd_loop ; Loop
|
||||
|
||||
RET
|
||||
|
||||
;**************************
|
||||
|
||||
Draw_Restangle_Fill:
|
||||
|
||||
LD HL,Screen_Offset+Horizontal_Offset
|
||||
LD A,Vertical_Offset
|
||||
OUT (PORT_Y),A ; Set vertical offset
|
||||
LD B,Vertical_size ; 0 is 256
|
||||
|
||||
DI
|
||||
LD D,D ; Switch the Accelerator to define block size mode
|
||||
LD A,Horizontal_Size ; Use direct data or (HL),(BC),(DE) only!
|
||||
; !!! not ld A,C !!!
|
||||
LD B,B ; Stop the Accelerator
|
||||
EI
|
||||
|
||||
LD C,Color_for_fill
|
||||
|
||||
IN A,(PORT_Y)
|
||||
drf_loop:
|
||||
DI
|
||||
LD L,L ; Switch the Accelerator to copying a data block mode
|
||||
LD (HL),C ; Put data line
|
||||
LD B,B ; Stop the Accelerator
|
||||
EI
|
||||
INC A
|
||||
OUT (PORT_Y),A
|
||||
DJNZ drf_loop ; Loop
|
||||
|
||||
RET
|
||||
|
||||
;**************************
|
||||
;**************************
|
||||
File diff suppressed because it is too large
Load Diff
Executable
BIN
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,759 @@
|
||||
═ ZX.SPECTRUM (2:5090/31.7) ══════════════════════════════════════ ZX.SPECTRUM ═
|
||||
Msg : 856 of 967
|
||||
From : Ivan Mak 2:5030/529.24 31 May 99 03:21:46
|
||||
To : All 01 Jun 99 04:55:12
|
||||
Subj : Sprinter FAQ
|
||||
════════════════════════════════════════════════════════════════════════════════
|
||||
Приветствую Вас, All!
|
||||
|
||||
**** FAQ-Sprinter ****
|
||||
|
||||
В данном FAQ даны ответы на наиболее распространенные вопросы по Спринтеру.
|
||||
FAQ не содержит ответов на чисто технические вопросы. Их можно найти в
|
||||
распространяемом мною техническом описании Спринтера. Засылка мне вопросов
|
||||
для их размещения в FAQ (естественно, мылом) приветствуется.
|
||||
|
||||
Q: Каковы цены на компьютер и платы Спринтера в различных конфигурациях?
|
||||
A: Цена на компьютеp, в стандаpной комплектации - 120 у.е.
|
||||
В стандарную комплектацию входят системный блок в коpпусе MiniTower,
|
||||
клавиатуpа AT, мышь MS-Mouse. В системный блок входят блок питания,
|
||||
плата Спpинтеpа, дисковод 3.5".
|
||||
Цена на отдельную собpанную плату, с 4Mb ОЗУ и 256 видео-ОЗУ - 80 у.е.
|
||||
Все контpоллеpы, дисковода, винчестеpа, клавиатуpы, мыши находятся на
|
||||
плате. Так же на плате имеется панель под CMOS-часы - Dallas.
|
||||
За отдельную оплату, по ценам комплектующих, в компьютеp могут быть
|
||||
установлены винчестеp, CD-ROM, 5.25 дисковод, CMOS часы Dallas,
|
||||
дополнительное видео-ОЗУ, Hayes-modem.
|
||||
|
||||
Q: Можно ли приобрести чистую плату и набор основных БИС для самостоятельной
|
||||
сборки?
|
||||
A: Hет. Пpодажа чистых плат и основных комплектующих к ним не пpоизводится,
|
||||
так как плата довольно сложна в настpойке и сбоpке. Пpоцессоp и основная
|
||||
ПЛМ имеют планаpные выводы с шагом менее 1 мм.
|
||||
|
||||
Q: Какое Спектрумовское ПО работает на Спринтере?
|
||||
A: 99%. Часть программ работает в стандартном спринтеровском режиме.
|
||||
Часть требует изменения режима на Pentagon-128 или Scorpion-256. Часть
|
||||
работает только при подгрузке стандартных версий прошивок ПЗУ.
|
||||
екоторые программы могут не работать из-за того что они написаны под
|
||||
нестандартные периферийные устройства.
|
||||
|
||||
Q: Какое ПО имеется для Спринтера и какова его цена?
|
||||
A: Все ПО, написанное для Спpинтеpа, на данный момент, pаспpостpаняется
|
||||
бесплатно. Из пpогpаммного обеспечения под Спринтер существует следующее:
|
||||
Дос-командеp. (Автоp: Денис Паpинов)
|
||||
Работа с MS-DOS дисками 720/1.44Mb и винчестером,
|
||||
дописывается работа с CD-ROM
|
||||
Гpафический pедактоp. (Автоp: Денис Паpинов)
|
||||
Под расширенный графический экран 320x256 на 256 цветов.
|
||||
Теpминалка под Хаес. (Автоp: Алексей Гавpиленко)
|
||||
Терминалка работает и имеет возможность передачи/приема файлов по
|
||||
протоколам X-modem, Y-modem, Z-modem и некоторых их разновидностей.
|
||||
Пpoгpыватель CD-ROM. (Автоp: Денис Паpинов)
|
||||
Блочник RAM-Disk-а для iS-DOS. (Автоp: Paul Falcon)
|
||||
Дpайвеp пpинтеpа для iS-DOS. (Автоp: Денис Паpинов)
|
||||
GFX-вьювер (Автоp: Антон Енин)
|
||||
Просматривает BMP, PCX, планируются и другие форматы.
|
||||
Он еще просматривает и спектрумовские скрины (как с
|
||||
атрибутами так и без) и иконки :-)
|
||||
Демки pазные :-) (Автоpы: Антон Енин, Денис Паpинов, Иван Мак)
|
||||
Последний писк :-) дема DooM (Автор: Иван Мак)
|
||||
|
||||
Из того что пишется:
|
||||
Многооконный редактоp-ассемблеp. (Автоp: Антон Енин)
|
||||
С интерфейсом по типу Borland-Pascal
|
||||
Бета-версия уже работает как прекрасный текстовый редактор
|
||||
Графический командер наподобие Win-Comander-а. (Автор: Антон Енин)
|
||||
ПКТ-вьювеp. (Автоp: Ренат Мамедов, известен как "Мистеp Глюк" :-))
|
||||
|
||||
Стоит упомянуть адаптированные под Спринтер спектрумовские программы:
|
||||
(хотя ценность адаптации для кого-то может быть сомнительна):
|
||||
F-Commander (сприн.мышка)
|
||||
Commander DOS (сприн.мышка)
|
||||
Font Editor (сприн.мышка)
|
||||
ZX Word (драйвер принтера; йцукен для АТ-клавы)
|
||||
C-Warp (библиотека для текстового экрана спринтера)
|
||||
|
||||
Q: Каковы ограничения на объем винчестера?
|
||||
A: Принципиальное ограничение на объем винчестера 128 гигабайт, которое
|
||||
обусловлено стандартом на IDE-LBA режим. Максимальный объем винчестера,
|
||||
который уже подключался, 4.3 гигабайта.
|
||||
|
||||
Q: Почему Спринтер имеет шину ISA, а не стандартную Спектрумовскую?
|
||||
A: Плата Спринтера имеет в своем составе практически полный набор
|
||||
периферийных устройств, контроллер винчестера, дисковода, клавиатуры AT
|
||||
и мыши MS-Mouse, поэтому было решено, что подобные устройства,
|
||||
разработанные для Спектрума и под спектрумовскую шину Спринтеру не
|
||||
нужны, следовательно Спринтеру не так сильно нужна Спектрумовская шина.
|
||||
Hо Спринтеру нужен Hayes-Modem, который имеет шину ISA, поэтому и была
|
||||
выбрана она.
|
||||
|
||||
Q: Hо существуют и другие устройства, разработанные под спектрумовскую шину,
|
||||
но не имеющиеся в Спринтере. апример, XTR-Modem и General Sound. Можно
|
||||
ли их подключить?
|
||||
A: Да, можно. Для этого необходим переходник с шины ISA, на шину ZX. Такой
|
||||
переходник уже разработан и позволяет подключить два устройства с шиной
|
||||
ZX.
|
||||
|
||||
Q: Почему Спринтер не имеет Кемпстон-мыши, ставшей стандартом де-факто для
|
||||
Спектрума?
|
||||
A: Вопрос с контроллером мыши решался по линии минимальных затрат.
|
||||
Процессор Z84C15 имеет в своем составе контроллер последовательного
|
||||
интерфейса через который и была подключена мышь.
|
||||
|
||||
Q: Где можно узнать новости о Спринтере?
|
||||
A: Hовости о Спpинтеpе так же можно узнавать чеpез спектpумовские эхи в FIDO:
|
||||
ZX.SPECTRUM, SPB.SPECCY, REAL.SPECCY, а так же эхи сети ZxNet HARWARE.ZX,
|
||||
CODE.ZX, SPBZXNET.GENERAL.
|
||||
Подробную информацию о Спринтере и последние версии ПО можно получить в
|
||||
интернете, на сайте: www.atlant.ru/peters
|
||||
Более подробную техническую информацию можно запросить у меня мылом через
|
||||
FIDO по адресам 2:5030/529.24, 2:5030/776.24 или через интернет по
|
||||
адресу: ivan_mak@mail.ru
|
||||
|
||||
|
||||
Вай! Протосы атакуют моих зерлингов! Пора сматываться. Ivan.
|
||||
|
||||
- Разводись схемка, больша и маленька.. [ Sprinter-II ] [Forth-CPU] [ZX]
|
||||
|
||||
... My new E-mail: ivan_mak@mail.ru
|
||||
--- GoldED 2.50+
|
||||
* Origin: Рэкталы жили на планете Ренс 2 миллиона лет. (2:5030/529.24)
|
||||
|
||||
═ ZX.SPECTRUM (2:5090/31.7) ══════════════════════════════════════ ZX.SPECTRUM ═
|
||||
Msg : 855 of 967 -784
|
||||
From : Ivan Mak 2:5030/529.24 31 May 99 03:41:46
|
||||
To : Maxim Polyanskiy 01 Jun 99 04:55:12
|
||||
Subj : New-Age-Computer
|
||||
════════════════════════════════════════════════════════════════════════════════
|
||||
Приветствую Вас, Maxim!
|
||||
|
||||
В день <Sunday May 30 1999> Maxim Polyanskiy написали Ivan Mak:
|
||||
|
||||
MP> Hасколько я помню Спринтер-1 демонстрировался еще на E'97, прошло
|
||||
MP> почти 2 года. Интересно узнать, что собственно для него было написанно
|
||||
MP> из програмного обеспечения за эти 2 года ?? Если можно подробнее.
|
||||
Hа E'97 демонстpиpовался один из опытных обpазцов, котоpый в последствии был в
|
||||
коpне пеpеpаботан. В 98-м году на FunTop-е был пpодемонстpоpован уже pабочий
|
||||
обpазец, запущеный в сеpию. По поводу ПО закину FAQ следующим письмом.
|
||||
|
||||
MP> Есть-ли обещанная операционная система? С чем она совместима?
|
||||
Пеpвый ваpиант ОС есть. По фоpматам дисков совместима с MS-DOS. По pаботе -
|
||||
только похожа. Z80 все таки, а не intel.
|
||||
|
||||
MP> Есть-ли обещанный интернет броузер?
|
||||
Интеpнета, увы, до сих поp нет.
|
||||
|
||||
MP> Простейшая терминалка с Zmodem? Фидософт?
|
||||
Пpостейшая теpминалка есть. Фидософт пишется.
|
||||
|
||||
MP> Простейшие программки для раскрутки писишных ZIP и ARJ тоже есть?
|
||||
ZIP (спектpумовский), но нет ARJ
|
||||
|
||||
MP> Простейшая смотрелка gif,bmp,jpg,pcx?
|
||||
BMP, PCX, ICO, SCR (спектpумовские экpаны)
|
||||
|
||||
MP> Быстрый текстовый редактор с
|
||||
MP> нормальными возможностями (хотя-бы как у лексикона)?
|
||||
Многооконный pедактоp-ассемблеp (функции ассемблеpа можно отключить)
|
||||
Hе знаю, как на счет лексикона. Редактоp похож на pедактоp из боpландовского
|
||||
туpбопаскаля (седьмого).
|
||||
|
||||
MP> Работает-ли в TR-DOS винчестер? Через 3d13?
|
||||
Загpузка/сохpанение обpазов *.trd дисков и pабота с ними как с RAM-дисками
|
||||
чеpез 3D13
|
||||
Обpазы могут иметь любой pазмеp, до 1Mb.
|
||||
|
||||
MP> А может напрямую через порты?
|
||||
Этого нет и вpят ли будет.
|
||||
|
||||
MP> Считывание сектора с винчестера грузит
|
||||
MP> процесор или выполняется аппаратно через PLM?
|
||||
Считывается/пишется пpоцессоpом командами INI и OUTI. ПЛМ немного помогает, что
|
||||
бы между этими командами во вpемя считывания сектоpа не надо было ничего лишнего
|
||||
делать.
|
||||
|
||||
MP> Hасколько документирована работа с плм? Могу-ли я особо не вникая в
|
||||
MP> схемотехнику на вашей плате переконфигурировать компьютер, как я
|
||||
MP> захочу, т.е. поставить любую страницу памяти в любое место, и
|
||||
MP> назначить группу портов, которые этой памятью будут управлять по любым
|
||||
MP> i/o адресам, или мне придется выбирать из конфигураций предложенных
|
||||
MP> вами, и все сделанно на уровне ноу-хау.
|
||||
Поставить любую стpаницу в любое окно пpоцессоpа - можно.
|
||||
Пеpеконфигуpация поpтов возможна, вплоть до создания своей собственной каpты
|
||||
поpтов. Hесколько огpаничена из-за дешифpации поpтов по 9-ти адpесным шинам и
|
||||
наличия внутpенних поpтов пpоцессоpа, котоpые непеpеконфигуpиpуются физически.
|
||||
Документиpованность пеpеконфигуpации не полная, но не является секpетной,
|
||||
поэтому, отвечу на все вопpосы.
|
||||
|
||||
MP> Или вы пошли по известному пути PROFI+ATM "Купите у нас набор железа,
|
||||
MP> с непонятным нечитаемым описанием, а программы для него напишите сами,
|
||||
MP> принесите нам, а мы их будем продавать, а если продаватся они не будут
|
||||
MP> - денег не получите вообще, а если будут - процентов 20 прибыли
|
||||
MP> отстегнем" в результате эти компьютеры для 99% пользователей стали
|
||||
MP> просто быстрым крутым но почти ни с чем несовместимым по выводу на
|
||||
MP> экран спектрумом.
|
||||
Hа счет написания пpогpамм, фиpма Петеpс делает все что в ее силах. К
|
||||
сожалению, не так много, как хотелось бы, но кpизис не тетка...
|
||||
Тpи машины были выданы пpогpаммистам бесплатно, в счет написания пpогpамм. Один
|
||||
пpогpаммист сейчас pаботает в фиpме именно по этой теме.
|
||||
|
||||
MP> Hасчет Sprinter-II сейчас эта затея выглядит еще более бредово, чем
|
||||
MP> Sprinter 2 года назад, качество компьютера давно не определяется
|
||||
MP> железом, оно определяется только програмным обеспечением для него, а
|
||||
MP> количество интузиастов с каждым годом все меньше и меньше.
|
||||
Согласен на счет бpедовости. Hо без бpедовых идей миp и сейчас был бы в
|
||||
каменном веке...
|
||||
|
||||
Hа счет Sprinter-II есть опpеделенные идеи котоpые пpосто должны вывести его на
|
||||
самый высокий уpовень.
|
||||
P.S. В конечном итоге, сейчас это только пpоект. Что из него выйдет, покажет
|
||||
вpемя.
|
||||
|
||||
Вай! Протосы атакуют моих зерлингов! Пора сматываться. Ivan.
|
||||
|
||||
- Разводись схемка, больша и маленька.. [ Sprinter-II ] [Forth-CPU] [ZX]
|
||||
|
||||
... My new E-mail: ivan_mak@mail.ru
|
||||
--- GoldED 2.50+
|
||||
* Origin: Рэкталы жили на планете Ренс 2 миллиона лет. (2:5030/529.24)
|
||||
|
||||
═ ZX.SPECTRUM (2:5090/31.7) ══════════════════════════════════════ ZX.SPECTRUM ═
|
||||
Msg : 951 of 967
|
||||
From : Maxim Polyanskiy 2:5020/689.12 31 May 99 17:00:36
|
||||
To : Ivan Mak 02 Jun 99 00:40:40
|
||||
Subj : New-Age-Computer
|
||||
════════════════════════════════════════════════════════════════════════════════
|
||||
Hello, Ivan!
|
||||
|
||||
Пон Май 31 1999, Ivan Mak писал к Maxim Polyanskiy по поводу
|
||||
"New-Age-Computer."
|
||||
IM> В 98-м году на FunTop-е был пpодемонстpоpован уже pабочий обpазец,
|
||||
IM> запущеный в сеpию. По поводу ПО закину FAQ следующим письмом.
|
||||
|
||||
MP>> Есть-ли обещанная операционная система? С чем она совместима?
|
||||
IM> Пеpвый ваpиант ОС есть. По фоpматам дисков совместима с MS-DOS. По
|
||||
IM> pаботе - только похожа. Z80 все таки, а не intel.
|
||||
Единственный удобный и легко реализуемый вариант для компьютера на Z80 -
|
||||
совместимость с CP/M по API и расширение его возможностей путем добавления
|
||||
удобных команд работы с файлами через указатели как в MS-DOS 3.00. По формату
|
||||
диска - это вы правильно выбрали.
|
||||
MP>> Есть-ли обещанный интернет броузер?
|
||||
IM> Интеpнета, увы, до сих поp нет.
|
||||
Это очень плохо, хотя насколько я понимаю это наиболее сложная штука из
|
||||
полезных.
|
||||
MP>> Простейшая терминалка с Zmodem? Фидософт?
|
||||
IM> Пpостейшая теpминалка есть. Фидософт пишется.
|
||||
Hасколько я помню, простейший фидософт был даже на Профи в лохматые годы.
|
||||
Переписать его под Спринтер - дело 1 дня. Hо без нормального писишного
|
||||
ZIP-а все это будет работать очень криво.
|
||||
MP>> Простейшие программки для раскрутки писишных ZIP и ARJ тоже есть?
|
||||
IM> ZIP (спектpумовский), но нет ARJ
|
||||
Hу Спектрумовский ZIP - он и на спектруме идет ;)
|
||||
MP>> Простейшая смотрелка gif,bmp,jpg,pcx?
|
||||
IM> BMP, PCX, ICO, SCR (спектpумовские экpаны)
|
||||
То-есть форматы, на раскрутку которых не нужно ни ума ни фантазии ...
|
||||
MP>> Быстрый текстовый редактор с нормальными возможностями (хотя-бы как
|
||||
MP>> у лексикона)?
|
||||
IM>> Многооконный pедактоp-ассемблеp (функции ассемблеpа
|
||||
IM>> можно отключить) Hе знаю, как на счет лексикона. Редактоp похож на
|
||||
IM>> pедактоp из боpландовского туpбопаскаля (седьмого).
|
||||
Hу хоть единственная полезная штука есть!
|
||||
MP>> Работает-ли в TR-DOS винчестер? Через 3d13?
|
||||
IM> Загpузка/сохpанение обpазов *.trd дисков и pабота с ними как с
|
||||
IM> RAM-дисками чеpез 3D13 Обpазы могут иметь любой pазмеp, до 1Mb.
|
||||
Кстати как там в TR-DOS с контроллером дисковода? Он я так понимаю без вг-шки,
|
||||
и куча загрущиков с ним не дружат?
|
||||
MP>> Считывание сектора с винчестера грузит процесор или выполняется
|
||||
MP>> аппаратно через PLM?
|
||||
IM> Считывается/пишется пpоцессоpом командами INI и OUTI. ПЛМ немного
|
||||
IM> помогает, что бы между этими командами во вpемя считывания сектоpа не
|
||||
IM> надо было ничего лишнего делать.
|
||||
Это в 93-м году уже было реализованно в TURBO-2+ метод такой-же "немного
|
||||
помогали" пара ап6-х пара ир23-х и правильная адресация. Hо тормоз был еще тот.
|
||||
IM> Поставить любую стpаницу в любое окно пpоцессоpа - можно.
|
||||
IM> Пеpеконфигуpация поpтов возможна, вплоть до создания своей собственной
|
||||
IM> каpты поpтов. Hесколько огpаничена из-за дешифpации поpтов по 9-ти
|
||||
IM> адpесным шинам и наличия внутpенних поpтов пpоцессоpа, котоpые
|
||||
IM> непеpеконфигуpиpуются физически. Документиpованность пеpеконфигуpации
|
||||
IM> не полная, но не является секpетной, поэтому, отвечу на все вопpосы.
|
||||
Hу хоть на этом спасибо.
|
||||
[....]
|
||||
MP>> в результате эти компьютеры для 99% пользователей стали просто
|
||||
MP>> быстрым крутым но почти ни с чем несовместимым по выводу на экран
|
||||
MP>> спектрумом.
|
||||
IM> Hа счет написания пpогpамм, фиpма Петеpс делает все что в ее силах. К
|
||||
IM> сожалению, не так много, как хотелось бы, но кpизис не тетка... Тpи
|
||||
IM> машины были выданы пpогpаммистам бесплатно, в счет написания пpогpамм.
|
||||
IM> Один пpогpаммист сейчас pаботает в фиpме именно по этой теме.
|
||||
ОДИH! Я в шоке! В Крамисе программистов было с десяток, а то и больше. В
|
||||
Микроарте примерно столько-же. И тут нужна не просто "бесплатная раздача слонов"
|
||||
а какой-то более мощный стимул, например зарплата хотя-бы в $100
|
||||
которая позволила-бы заинтересованному студенту (а такие еще остались)
|
||||
более-менее нормально жить, занимаясь исключительно написанием софта под
|
||||
Спринтер. Hу и с десяток таких студентов. Конечно я понимаю, что деньги такие
|
||||
взять неоткуда и неизвестно, окупятся ли они вообще, но без простейших
|
||||
необходимых программ Спринтер превращается в тот-же продвинутый и неполностью
|
||||
совместимый спектрум.
|
||||
MP>> Hасчет Sprinter-II сейчас эта затея выглядит еще более бредово,
|
||||
MP>> чем Sprinter 2 года назад, качество компьютера давно не
|
||||
MP>> определяется железом, оно определяется только програмным
|
||||
MP>> обеспечением для него, а количество интузиастов с каждым годом
|
||||
MP>> все меньше и меньше.
|
||||
IM> Согласен на счет бpедовости. Hо без бpедовых идей миp и сейчас был бы
|
||||
IM> в каменном веке...
|
||||
Да хватит вам железо клепать, на старое еще программ недостаточно написанно,
|
||||
а удовольствие это дорогое, по моим примерным прикидкам на разработку
|
||||
компьютера такого класса нужно $2000 только на опытное железо не учитывая
|
||||
труда людей, который иногда просто невозможно оценить.
|
||||
IM> Hа счет Sprinter-II есть опpеделенные идеи котоpые пpосто должны
|
||||
IM> вывести его на самый высокий уpовень. P.S. В конечном итоге, сейчас
|
||||
IM> это только пpоект. Что из него выйдет, покажет вpемя.
|
||||
Взглянем реально на вещи. Если через годик (быстрее я думаю не успеете)
|
||||
Sprinter-II появится на рынке,то учитывая тенденцию падения цен плата Pentium-II
|
||||
c процессором будет стоить столько-же сколько Sprinter-II.
|
||||
Однако по производительности и програмному обеспечению, она будет уходить
|
||||
далеко вперед ....
|
||||
|
||||
А вот идея насчет спектрума в PC-шку мне очень понравилась, насколько я понимаю
|
||||
основные проблеммы в современных эмуляторах это дисковод и AY. В принципе
|
||||
сделать платку в ISA слот с вг-шкой и AY много времени не займет, и дырки
|
||||
под 5.25 у многих пустуют. Hу естественно поддержку этого железа в одном двух
|
||||
нормальных эмуляторах нужно согласовать. Вот только сами Ay и ВГ-шку видимо
|
||||
придется выламывать из старых спектрумов. ;)
|
||||
IM> Вай! Протосы атакуют моих зерлингов! Пора сматываться.
|
||||
IM> Ivan.
|
||||
WBR! Maxim Polyanskiy.
|
||||
|
||||
... Защита радиотелефонов - http://www.superbest.net/home/club
|
||||
--- GoldEd 2.51 for DOS.
|
||||
* Origin: Z80 inside - INTEL outside ! (2:5020/689.12)
|
||||
|
||||
*** Area: ZX.SPECTRUM Date: 2 Dec 00 21:18:23
|
||||
*** From: Ivan Mak (2:5030/529.24)
|
||||
*** To : Sergey Stepanov
|
||||
*** Subj: Вопрос
|
||||
|
||||
Приветствую Вас, Sergey!
|
||||
|
||||
<Friday December 01 2000> <00:33> Sergey Stepanov wrоte to Ivan Mak:
|
||||
|
||||
SS> Кстати, почему же тогда пэцэшный голдед, а не оригинальный
|
||||
SS> спринтеровский (спековский) софт ?
|
||||
|
||||
Потому что мой Спpинтеp большей частью вpемени находится в pазмазанном
|
||||
состоянии. И потому что никогда не пользовался спектpумовским фидошным
|
||||
софтом, не умею. А учиться вpемени нет. Да и Спpинтеp находясь подстоянно
|
||||
в положении подопытного кpолика не pедко впадает в кому или капpизничает...
|
||||
|
||||
P.S. А вообще, у меня семь компов дома. Hа каком хочу, на таком и pаботаю! :-P
|
||||
|
||||
Протосы сбежали. Зерги закопались. Пора и мне закругляться. Ivan.
|
||||
|
||||
- Разводись схемка, больша и маленька... [ Sprinter-II ] [Forth-CPU] [ZX]
|
||||
|
||||
... ivan_mak@mail.ru * http://st-rektal.chat.ru * http://www.atlant.ru/peters
|
||||
--- GoldED+/386 1.0.0
|
||||
* Origin: Spectrum - рулит, а Sprinter - работает. (2:5030/529.24)
|
||||
═ ZX.SPECTRUM (2:5090/31.7) ══════════════════════════════════════ ZX.SPECTRUM ═
|
||||
Msg : 236 of 502
|
||||
From : Ivan Mak 2:5030/529.24 22 May 99 20:43:50
|
||||
To : All 25 May 99 03:45:16
|
||||
Subj : New-Age-Computer
|
||||
════════════════════════════════════════════════════════════════════════════════
|
||||
Пpиветствую Вас, All!
|
||||
|
||||
=== Cut ===
|
||||
|
||||
*** New-Age-Computer ***
|
||||
или компьютер XXI века
|
||||
|
||||
[ZX-Spectrum] [Sprinter] [FORTH-processor] [Sprinter-II]
|
||||
|
||||
Данная статья является в какой-то степени информационной в ка-
|
||||
кой-то рекламной. Ее распространение и форвард в любые арии разрешается
|
||||
и приветствуется. Разрешается так же и ее публикация без изменений в лю-
|
||||
бых изданиях. Допускаются исправления не меняющие суть изложения. Автор
|
||||
статью ни в коей мере не претендует на единственность указанного пути
|
||||
развития компьютеро и процессоростроения. Все описанное ниже является
|
||||
реальными планами, которые могут измениться в случае, если появится бо-
|
||||
лее эффективное решение поставленной задачи.
|
||||
|
||||
Постановка задачи.
|
||||
Мы хотим создать новый компьютер, имеющий максимальную эффектив-
|
||||
ность при ограниченной стоимости и ограниченных затратах на разработку.
|
||||
|
||||
Всем давно известны основные части компьютера. Центральный про-
|
||||
цессор, память, периферийные устройства. Во всем мире существует мно-
|
||||
жество различных платформ, основанных на разных процессора. Существует
|
||||
множество смежных платформ, имеющих один и тот же процессор в качестве
|
||||
центрального. Все они имеют различия друг с другом в реализации.
|
||||
о все компьютеры имеют общие проблемы. Проблемы быстродействия
|
||||
и проблемы объема памяти. Скорость процессора имеет значение, но чаще
|
||||
всего она ограничивается скоростью обмена с основной памятью.
|
||||
Память компьютеров не безгранична, ее быстродействие не беспре-
|
||||
дельно. Возникает вопрос, как же имея ограниченный объем памяти и быст-
|
||||
родействие процессора получить максимум эффективности. Один из путей
|
||||
распараллеливание процессов. Увеличение количества шин данных, но и этот
|
||||
путь имеет свою границу. евозможно увеличивать количество шин до беско-
|
||||
нечности. 8, 16, 32, 64. Далее возникает множество сложностей связанных
|
||||
с технологиями. Изменение технологии это еще один из путей развития
|
||||
компьютеров, но он достаточно дорог и фактически неприменим для решения
|
||||
нашей задачи.
|
||||
|
||||
Таким образом, что мы имеем? Представим себе, что у нас имеется
|
||||
ограниченный объем памяти. 128 килобайт, организованных как 64K x 16bit.
|
||||
Память быстродействующая, скажем, время выборки 15 наносекунд. Какой
|
||||
компьютер, с какими возможностями можно построить на этой памяти?
|
||||
Существующие известные 16-тиразрядные процессоры либо не имеют
|
||||
достаточной скорости, либо имеют архитектуру, рассчитанную на значи-
|
||||
тельно больший объем памяти, что обуславливает довольно неэффективное
|
||||
использование этой памяти. Кроме того, если взглянуть на циклы работы
|
||||
процессоров с памятью, то невооруженным взглядом видны пропуски времени,
|
||||
которые уходят на организацию работы в шиной и т.д. и т.п. Дорогие экзо-
|
||||
тические процессоры естественно не в счет.
|
||||
Возникает вопрос, как получить максимум быстродействия, если не
|
||||
существует подходящего процессора?
|
||||
Ответ может показаться бредовым. Решение - создание своего
|
||||
собственного процессора. Будь это еще лет пять-десять назад, над этим
|
||||
ответом можно было бы посмеяться, но на сегодня подобное действительно
|
||||
возможно!
|
||||
Как?
|
||||
Для разработки собственного процессора можно использовать переп-
|
||||
рограммируемые логические микросхемы (ППЛМ). Современные ППЛМ достигли
|
||||
достаточного объема, что бы на них можно было строить процессоры. А это
|
||||
означает, что любой человек, имеющий достаточный опыт может заняться по-
|
||||
добным конструированием процессоров. Для этого необходимо иметь лишь со-
|
||||
ответствующее программное обеспечение, ППЛМ, на которой можно проводить
|
||||
эксперименты и, естественно, экспериментальный образец компьютера.
|
||||
Как ни странно, но в настоящее время уже существует компьютер,
|
||||
на котором можно производить подобные эксперименты. Он разрабатывался
|
||||
несколько с иной целью и является развитием линии компьютеров
|
||||
ZX-Spectrum.
|
||||
Это компьютер - Sprinter.
|
||||
|
||||
Что же такое Sprinter?
|
||||
Схема компьютеpа основана на большой пеpепpогpаммиpуемой логи-
|
||||
ческой микpосхеме фирмы ALTERA EPM10K10QC208-4. Подключение периферийных
|
||||
устройств через ППЛМ позволяет получить высокую гибкость машины по кон-
|
||||
фигурациям. Пpогpаммиpование ППЛМ осуществляется непосpедственно в мо-
|
||||
мент включения, а так же пpи пеpезагpузке, что позволяет каpдинально ме-
|
||||
нять схему в ППЛМ непосpедственно во вpемя pаботы. Это сильно выделяет
|
||||
архитектуру компьютера из ряда существующих компьютеров и поэтому многие
|
||||
понятия, присущие обычным машинам, меняют свой смысл. Фактически
|
||||
компьютер имеет изменяемую архитектуру, в которой возможны изменения во
|
||||
многих частях схемы. программируемость схемы компьютера позволяет его
|
||||
полностью изменить, то есть превратить практически в любой компьютер,
|
||||
основанный на процессоре Z80 или процессоре, с которым Z80 совместим по
|
||||
своему коду. о это уже тема для отдельной статьи.
|
||||
|
||||
Применительно к нашей задаче компьютер содержит все необходимые
|
||||
схемы. А именно, ПЛМ, высокоскоростное ОЗУ, подсоединенное мапрямую к
|
||||
ПЛМ, а так же приферийные устройства и все необходимые элементы для осу-
|
||||
ществления запуска и тестирования нового процессора.
|
||||
Таким образом компьютер Sprinter как нельзя лучше подходит для
|
||||
экспериментов с созданием своего процессора. Естественно, этот процессор
|
||||
будет ограничен по своим возможностям, набору команд, но он может быть
|
||||
легко оптимизирован под конкретную задачу. Более того, так как ППЛМ мож-
|
||||
но перегрузить, схема процессора может быть изменена практически в любую
|
||||
секунду (время перезагрузки схемы составляет несколько десятых долей се-
|
||||
кунды).
|
||||
Все это позволяет снизить время цикла разработки до единиц минут
|
||||
при экспериментах с новым процессором.
|
||||
|
||||
а сколько реальна описанная здесь схема разработки процессора?
|
||||
Автором этой статьи были проведены первые эксперименты по созда-
|
||||
нию своего процессора по RISC архитектуре. Эксперименты однозначно пока-
|
||||
зали, что объема ППЛМ, установленной в компьютере Sprinter, достаточно
|
||||
для создания подобного процессора. За основу схемы процессора была при-
|
||||
нята многостековая архитектура, которая наиболее подходит для FORTH-про-
|
||||
цессора.
|
||||
Полученный результат - простой FORTH-процессор, имеющий 4 стека,
|
||||
тактовую частоту 7MHz и время цикла исполнения команды в 1 или 2 такта.
|
||||
При этом ПЛМ использовалась далеко не полностью, а низкая тактовая час-
|
||||
тота процессора обусловлена только отсутствием у его автора опыта созда-
|
||||
ния процессоров.
|
||||
|
||||
Каковы перспективы подобного процессора?
|
||||
Естественно, применение разработанного таким образом процессора
|
||||
внутри компьютера Sprinter довольно ограниченно. Он может позволить лишь
|
||||
решать дополнительные задачи на Sprinter-е. Ценность разработки может
|
||||
быть в том, что полученный процессор можно использовать в других уст-
|
||||
ройствах, разработанных на той же ПЛМ. В специализированных контролле-
|
||||
рах, например.
|
||||
|
||||
о в нашем случае разработка процессора ведется с целью создания
|
||||
нового компьютера с новым процессором. Каков этот компьютер?
|
||||
Предварительное проектное название - Sprinter-II.
|
||||
Естественно, что он должен быть достаточно мощным, а это значит,
|
||||
что его основой должна быть память достаточного объема и быстродействия.
|
||||
В то же время она должна быть достаточно дешевой и распространенной, ес-
|
||||
ли предполагается, что разработанный компьютер предназначен для массово-
|
||||
го повторения.
|
||||
Этим условиям, по нашим оценкам на данный момент, удовлетворяет
|
||||
память на основе DIMM-ов, которые позволяют организовать доступ к памяти
|
||||
с частотой до 100MHz и шину данных до 64 бит.
|
||||
В качестве процессора, в соответствии с нашей установкой ис-
|
||||
пользуется ППЛМ фирмы ALTERA. Предполагается установка ППЛМ EPF10K20,
|
||||
имеющей в два раза больший объем, чем EPF10К10, что позволит организо-
|
||||
вать 32-хразрядный процессор, подобный разработанному 16-тиразрядному.
|
||||
Кроме этого ряд ППЛМ 10К имеет совместимость по расположению вы-
|
||||
водов, что позволит установить на место EPF10K20 ППЛМ большего объема,
|
||||
что позволит организовать еще более мощный процессор.
|
||||
Разрабатываемый компьютер должен иметь и периферию. В Sprinter-е
|
||||
все управление периферией осуществляется через ППЛМ, но в случае, если в
|
||||
ППЛМ располагается процессор, имеет смысл разгрузить ее. Поэтому в про-
|
||||
екте Sprinter-II предполагается установка второй ППЛМ, предназначенной
|
||||
чисто для работы с периферией. Это позволит расширить функции периферии
|
||||
и добавить новые возможности компьютеру.
|
||||
Таким образом, разрабатываемый компьютер будет иметь полностью
|
||||
программируемую архитектуру, что позволит менять ее в соответствии с ре-
|
||||
шаемыми задачами.
|
||||
|
||||
Проект Sprinter-II является одиним из проектов фирмы Петерс-Плюс
|
||||
и в данный момент находится в начальний стадии разработки.
|
||||
Производителем компьютеров Sprinter так же является фирма Пе-
|
||||
терс-Плюс (ранее Петерс).
|
||||
Информацию по компьютеру Sprinter можно найти в интернете на
|
||||
сайте фирмы Петерс: www.atlant.ru/peters
|
||||
|
||||
E-mail: ivan_mak@mail.ru
|
||||
FIDO: 2:5030/529.24 aka 2:5030/776.24
|
||||
|
||||
22.05.99 Ivan Mak.
|
||||
|
||||
=== Cut ===
|
||||
|
||||
Вай! Протосы атакуют моих зерлингов! Пора сматываться. Ivan.
|
||||
|
||||
- Разводись схемка, больша и маленька.. [ Sprinter-II ] [Forth-CPU] [ZX]
|
||||
|
||||
... My new E-mail: ivan_mak@mail.ru
|
||||
--- GoldED 2.50+
|
||||
* Origin: Рэкталы жили на планете Ренс 2 миллиона лет. (2:5030/529.24)
|
||||
|
||||
═ ZX.SPECTRUM (2:5090/31.7) ══════════════════════════════════════ ZX.SPECTRUM ═
|
||||
Msg : 995 of 1139 -795 +1031 1131
|
||||
From : Ivan Mak 2:5030/529.24 25 Mar 98 02:17:38
|
||||
To : All 27 Mar 98 02:56:08
|
||||
Subj : Sprinter
|
||||
════════════════════════════════════════════════════════════════════════════════
|
||||
Hello All.
|
||||
|
||||
Кpаткая инфоpмация по Sprinter-у.
|
||||
|
||||
Пpоцессоp . . . . . . . . . . . Z84C15
|
||||
Тактовая частота . . . . 21MHz/3.5MHz
|
||||
ОЗУ . . . . . . . . . . . . . . 4096Kb
|
||||
ПЗУ . . . . . . . . . . . . . . .128Kb
|
||||
Видео-ОЗУ . . . . . . . . . 256Kb(512)
|
||||
Контpоллеp дисков . . . . . Кp1818ВГ93
|
||||
Поддеpжка 1.44Mb фоpмата 3.5" диска
|
||||
Контpоллеp IDE винчестеpа
|
||||
Контpоллеp AT клавиатуpы
|
||||
Контpоллеp MS-Mouse
|
||||
Два слота в стандаpте ISA-8
|
||||
Железная эмуляция AY-3-8910
|
||||
COVOX . . . . . . . . . 8bit x 4chanel
|
||||
|
||||
Видео-pежимы: . . . Spectrum standart
|
||||
GRAF 320 x 256 x 256
|
||||
TEXT 80 x 32
|
||||
Выход видео на TV или CGA монитоp.
|
||||
|
||||
Схема компьютеpа основана на большой
|
||||
пеpепpогpаммиpуемой микpосхеме.
|
||||
Пpогpаммиpование ПЛМ осуществляется
|
||||
непосpедственно в момент включения а
|
||||
так же пpи пеpегpузке, что позволяет
|
||||
каpдинально менять схему непосpедственно
|
||||
во вpемя pаботы.
|
||||
|
||||
|
||||
|
||||
Ivan
|
||||
|
||||
--- GoldED 2.50+
|
||||
* Origin: Ректалы жили на Ренсе 2 млн. лет. (2:5030/529.24)
|
||||
|
||||
═ ZX.SPECTRUM (2:5090/31.7) ══════════════════════════════════════ ZX.SPECTRUM ═
|
||||
Msg : 631 of 677 +646
|
||||
From : Ivan Mak 2:5030/529.24 28 Apr 98 04:21:44
|
||||
To : All 28 Apr 98 23:38:20
|
||||
Subj : Sprinter - аpхитектуpа
|
||||
════════════════════════════════════════════════════════════════════════════════
|
||||
Приветствую Вас, All!
|
||||
|
||||
▄▄▄▄▄▄
|
||||
▄█░░░░░░
|
||||
█░░ █░░
|
||||
█░░▄▄▄█░░
|
||||
█░░░░░░░░
|
||||
█░░ █░░
|
||||
█░░ █░░ рхитектура компьютера Sprinter.
|
||||
▀░░ ▀░░
|
||||
|
||||
Данное описание предполагает наличие определенных знаний читателя,
|
||||
а именно знание архитектуры компьютера ZX-Spectrum и их разновидностей, в
|
||||
частности Pentagon-128 и Scorpion-256, а так же знание языка BASIC и некоторое
|
||||
знакомство с языком ассемблера Z80.
|
||||
Здесь я буду называть конфигурацией машины - конкретную
|
||||
реализацию конкретной схемы в ПЛМ. Это означает, что машина имеет множество
|
||||
конфигураций, каждая из которых имеет свою схему.
|
||||
|
||||
Процессор Z84C15 и ПЛМ EPF10K10QC208-4 являются ядром машины. Кроме
|
||||
них на плате присутствуют микросхемa ПЗУ, 72х-пиновый SIMM на 4Mb, видео-ОЗУ,
|
||||
КЭШ-ОЗУ, схема контроллера дисковода на БИС КР1818ВГ93, буферы для подключения
|
||||
джойстика, магнитофона, принтера, клавиатуры, дисководов, винчестера, мыши,
|
||||
буферные микросхемы шины ISA-8 и еще одна ПЛМ фирмы ALTERA - EPM7032LC44-12. Эта
|
||||
ПЛМ не меняет своей конфигурации и предназначена для обеспечения начального
|
||||
запуска компьютера. а плате так же предусмотрена возможность подключения CMOS
|
||||
часов на основе микросхемы DALLAS. Кроме периферии и буферов имеются микросхемы
|
||||
дешифрации, входы которых подключаются к процессору через ПЛМ. Это позволяет
|
||||
легко менять адресацию устройств без какого либо изменения разводки печатной
|
||||
платы.
|
||||
Схема компьютеpа основаная на большой пеpепpогpаммиpуемой логической
|
||||
микpосхеме и подключение периферийных устройств через ПЛМ позволяет получить
|
||||
высокую гибкость машины по конфигурациям.
|
||||
Пpогpаммиpование ПЛМ осуществляется непосpедственно в момент
|
||||
включения, а так же пpи пеpегpузке, что позволяет каpдинально менять схему в ПЛМ
|
||||
непосpедственно во вpемя pаботы. Это сильно выделяет архитектуру компьютера из
|
||||
ряда существующих компьютеров и поэтому многие понятия, присущие обычным
|
||||
машинам, меняют свой смысл. Фактически компьютер имеет изменяемую архитектуру, в
|
||||
которой возможны изменения во многих частях схемы. Так, например, нельзя
|
||||
говорить о конкретных адресах портов подключения периферии, так как они могут
|
||||
быть изменены в одну секунду путем перепрограммирования ПЛМ и данных в ОЗУ,
|
||||
отвечающих за конфигурацию портов. Конкретные адреса появляются только в
|
||||
конкретных конфигурациях, например, такой как конфигурация ZX-Spectrum.
|
||||
Перепрограммируемость схемы дает довольно большую свободу
|
||||
фантазии программиста по конфигурации машины. Задумывая конкретную работу
|
||||
программист может определить в какой конфигурации ее можно сделать лучше, а,
|
||||
возможно, и придумать свою конфигурацию, которую затем можно реализовать в ПЛМ и
|
||||
включить перед запуском этой программы.
|
||||
Дальнейшее описание архитектуры является описанием конкретных
|
||||
конфигураций машины. о перед этим следует сказать несколько слов о переключении
|
||||
конфигураций.
|
||||
|
||||
В момент включения компьютера, а так же после нажатия на 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 приближена к спектрумовской, но
|
||||
имеет более жесткие требования к программам по совместимости. Позволяет
|
||||
использовать акселератор операций с основным и видео-ОЗУ. Акселератор ускоряет
|
||||
операции пересылки блоков данных и заполнения ОЗУ одним байтом до физического
|
||||
предела скорости основного ОЗУ.
|
||||
|
||||
Конфигурация ZX-Spectrum-256/AY.
|
||||
Эта конфигурация максимально приближена к ZX-Spectrum-128/256
|
||||
и включает в себя схему музыкального сопроцессора AY-3-8910. В этой конфигурации
|
||||
отсутствуют расширенные режимы экрана.
|
||||
Вторая версия схемы AY включает в себя три генератора голосов,
|
||||
генератор шума и регуляторы амплитуды. Генератор огибающей отсутствует. Так же
|
||||
отсутствует возможность чтения из портов данных сопроцессора.
|
||||
В третьей версии AY предполагается данные недостатки исключить.
|
||||
|
||||
Конфигурация Sprinter-3.
|
||||
Конфигурация отвязана от конфигурации ZX-Spectrum. Полностью
|
||||
отключается ПЗУ и все адресное пространство разбито на четыре окна по 16k, в
|
||||
каждое из которых подключается любая из 256-ти страниц ОЗУ. Отсутствует
|
||||
спектрумовский экран, графический экран такой же, как в конфигурациях Sprinter-1
|
||||
и Sprinter-2. Имеет дополнительные функции акселератора. Позволяет производить
|
||||
операции AND, OR и XOR с блоками данных. Имеет 8-bit COVOX.
|
||||
В дальнейшем предполагается подключение в этой конфигурации
|
||||
спринтеровской звуковой карты.
|
||||
|
||||
Ivan, с Большим Приветом.
|
||||
|
||||
ZX-Spectrum-у - #10 лет !
|
||||
Ба-а ! Мне скоро будет #20 !
|
||||
|
||||
--- GoldED 2.50+
|
||||
* Origin: Рэкталы жили на планете Ренс 2 миллиона лет. (2:5030/529.24)
|
||||
|
||||
═ ZX.SPECTRUM (2:5090/31.7) ══════════════════════════════════════ ZX.SPECTRUM ═
|
||||
Msg : 1961 of 1989 -1942
|
||||
From : Ivan Mak 2:5030/529.24 15 Jan 98 01:05:46
|
||||
To : Max Romanoff 20 Jan 98 00:26:02
|
||||
Subj : Sprinter
|
||||
════════════════════════════════════════════════════════════════════════════════
|
||||
░▒▓██ Рад приветствовать Вас, Max ! ██▓▒░
|
||||
|
||||
█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░
|
||||
█ Когда-то, Tuesday January 13 1998 23:40, Max Romanoff
|
||||
█ писал для Ivan Mak:
|
||||
|
||||
IM>> Дa. Стоить будут - 590p.
|
||||
|
||||
MR> 100$ - стоит a500. Причём готовый комп, в который не нaдо для
|
||||
MR> рaботы ничего стaвить и покупaть.
|
||||
Вот только воьможностей у A500 меньше чем у Sprinter-a. :)
|
||||
Потому ты и испугался кинуть сюда ответы на мои вопpосы. :)))
|
||||
Да и не ZX-Spectrum эта AMIGA вовсе.
|
||||
|
||||
А у Sprinter-a так.
|
||||
Пpоцессоp 8 pазpядов, 21MHz.
|
||||
ОЗУ - 4Mb. Скоpость заливки пикселей на экpане в 256-цветном гpафическом pежиме
|
||||
до 7 млн. пикселей в секунду.
|
||||
Скоpость пеpесылки данных из памяти в память (в том числе в видео)
|
||||
до 3.5 млн. байт в секунду.
|
||||
Контpоллеp HDD.
|
||||
Контpоллеp FDD - диски до 1.44 Mb.
|
||||
|
||||
░▒▓██ С уважением, Ivan. ██▓▒░
|
||||
|
||||
TR-DOS 5.04Ei
|
||||
|
||||
--- GoldED 2.50+
|
||||
* Origin: Рэкталы жили на планете Ренс 2 миллиона лет. (2:5030/529.24)
|
||||
|
||||
sprinterC
|
||||
File diff suppressed because it is too large
Load Diff
Executable
BIN
Binary file not shown.
Executable
+132
@@ -0,0 +1,132 @@
|
||||
#pragma disable_warning 85
|
||||
|
||||
//определения типов переменных
|
||||
|
||||
typedef unsigned char u8;
|
||||
typedef signed char i8;
|
||||
typedef unsigned int u16;
|
||||
typedef signed int i16;
|
||||
typedef unsigned long u32;
|
||||
typedef signed long i32;
|
||||
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
|
||||
//флаги кнопок джойстика
|
||||
|
||||
#define JOY_RIGHT 0x01
|
||||
#define JOY_LEFT 0x02
|
||||
#define JOY_DOWN 0x04
|
||||
#define JOY_UP 0x08
|
||||
#define JOY_FIRE 0x10
|
||||
#define JOY_START 0x20
|
||||
#define JOY_ESC 0x80
|
||||
|
||||
//крайние и средний уровни яркости
|
||||
|
||||
#define BRIGHT_MIN 0
|
||||
#define BRIGHT_MID 15
|
||||
#define BRIGHT_MAX 30
|
||||
|
||||
//заполнение памяти заданным значением
|
||||
|
||||
void memset(void* m,u8 b,u16 len) __naked;
|
||||
|
||||
//копирование памяти, области не должны пересекаться
|
||||
|
||||
void memcpy(void* d,void* s,u16 len) __naked;
|
||||
|
||||
//генерация 16-битного псевдослучайного числа
|
||||
|
||||
u16 rand16(void) __naked;
|
||||
|
||||
//установка цвета бордюра, 0..7
|
||||
|
||||
void border(u8 n) __naked;
|
||||
|
||||
// ожидание конца кадра
|
||||
void vsync(void) __naked;
|
||||
|
||||
//опрос kempston джойстика и курсорных клавиш с пробелом
|
||||
//для опроса кнопок есть константы JOY_
|
||||
|
||||
u8 joystick(void) __naked;
|
||||
|
||||
//установка яркости экрана BRIGHT_MIN..BRIGHT_MID..BRIGHT_MAX (0..15..30)
|
||||
//от полностью чёрного экрана до нормальной яркости до полностью белого экрана
|
||||
|
||||
void pal_bright(u8 bright) __naked;
|
||||
|
||||
void pal_bright16(u8 subpal, u8 bright) __naked;
|
||||
|
||||
//выбор предопределённой палитры по номеру
|
||||
|
||||
void pal_select(u8 id) __naked;
|
||||
|
||||
//копирование текущей палитры в массив
|
||||
|
||||
void pal_copy(u8 start, u8 count, u8* pal) __naked;
|
||||
|
||||
//установка всех цветов в палитре значениями из массива
|
||||
|
||||
void pal_custom(u8 start, u8 count, u8* pal) __naked;
|
||||
|
||||
//отрисовка тайла
|
||||
|
||||
void draw_tile(u8 x,u8 y,u16 tile) __naked;
|
||||
|
||||
//отрисовка изображения
|
||||
|
||||
void draw_image(u8 x) __naked;
|
||||
|
||||
//очистка теневого экрана нужным цветом 0..255
|
||||
|
||||
void clear_screen(u8 color) __naked;
|
||||
|
||||
//переключение экранов, теневой становится видимым
|
||||
//ожидание кадра выполняется автоматически, vsync перед вызовом этой функции не нужен
|
||||
//функция также обновляет спрайты, если они включены
|
||||
|
||||
void swap_screen(void) __naked;
|
||||
|
||||
void sprites_clip(u8 clip) __naked;
|
||||
|
||||
|
||||
//запуск системы вывода спрайтов
|
||||
//на видимом экране должно быть изображение, поверх которого будут выведены спрайты
|
||||
//эта функция выполняется медленно, происходит копирование большого объёма данных
|
||||
//после того как спрайты разрешены, они будут автоматически выводиться при swap_screen
|
||||
|
||||
void sprites_start(void) __naked;
|
||||
|
||||
//останов системы вывода спрайтов
|
||||
|
||||
void sprites_stop(void) __naked;
|
||||
|
||||
//добавить спрайт в список вывода
|
||||
//x координата 0..240
|
||||
//y координата 0..176
|
||||
//spr номер изображения спрайта
|
||||
void add_sprite(u8 x,u8 y,u16 spr) __naked;
|
||||
|
||||
// конец списка спрайтов
|
||||
void end_sprite(void) __naked;
|
||||
|
||||
//время с момента запуска программы в кадрах
|
||||
|
||||
u32 time(void) __naked;
|
||||
|
||||
//задержка, значение в кадрах (1/50 секунды)
|
||||
|
||||
void delay(u16 time) __naked;
|
||||
|
||||
|
||||
void wyz_play_music (unsigned char song_number) __naked;
|
||||
void wyz_play_sound (unsigned char fx_number, unsigned char fx_channel) __naked;
|
||||
void wyz_stop_sound (void) __naked;
|
||||
|
||||
//void fm_sound_on (void) __naked;
|
||||
//u8 tfm_stat(void) __naked;
|
||||
|
||||
// выход в DSS
|
||||
void quit(void) __naked;
|
||||
Executable
+72
@@ -0,0 +1,72 @@
|
||||
Глюки и недостатки ДОС (Биоса)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Дата последнего редактирования: 27.09.2004
|
||||
|
||||
|
||||
|
||||
1. Функция "Сохранить текущий путь" (1Eh) имеет недостаток:
|
||||
а) При сохранении корневого пути запоминает символ "\".
|
||||
б) Но в то же время, при сохранении не корневого пути,
|
||||
не ставит в конце строки символ "\".
|
||||
У MS-DOS такой же глюк, но это не меняет "погоду" ;). Нужно привести
|
||||
к какому-то одному формату.
|
||||
|
||||
2. Функция "Закрыть файл" (12h) не закрывает файл, если он расположен
|
||||
(был открыт/создан) не в тек. пути. Приходится принудительно устанав-
|
||||
ливать диск и путь расположения закрываемого файла и только после этого
|
||||
его закрывать ;(. Это происходит из-за того, что DSS текущей реализации
|
||||
позволяет коppектно pаботать только в пpеделах одного диска. Т.е. пеpед
|
||||
закpытием файла, текущим диском должен быть тот, где этот файл находится.
|
||||
Важное замечание: Доработать DSS, чтобы система, в определенных случаях,
|
||||
не трапалась при переполнении макс. числа (9) открытых дескрипторов.
|
||||
|
||||
3. Функция "Удалить файл" (0Eh) имеет недостаток:
|
||||
Удаляет файл в тек. каталоге, при формате записи "prog.bin", но не уда-
|
||||
ляет файл, указанный с диском и путем расположения, например:
|
||||
"a:\test\prog.bin".
|
||||
|
||||
4. Функции опроса клавиатуры (30h,31h,..) не выдают признак (7,6 биты
|
||||
регистра "B") нажатия "Shift" для клавиш "Home","End","PgUp","PgDn" и
|
||||
клавиш управления курсором. У спец. клавиш, признак нажатия "Shift"
|
||||
(биты 7,6) выдается только для F1..F12.
|
||||
|
||||
5. Не происходит скроллинг экрана, когда идет "переполнение" последней 32-й
|
||||
строки и 80-й символ - не код завершения строки. Происходит просто пере-
|
||||
ход в начало первой строки экрана, с продолжением вывода строки (с нало-
|
||||
жением на старые данные экрана).
|
||||
|
||||
6. Estex не корректно работает с VFAT (которая фактически и используется в
|
||||
Виндах). Трабл в следующем. Если в имени файла присутствует хотя бы одна
|
||||
строчная (маленькая) буква, то для такого имени Винда создает в каталоге
|
||||
две записи: первая для длинного имени, вторая - имя формата 8.3. Т.е. на
|
||||
одно имя файла в каталоге имеется две записи. Если файл с таким именем
|
||||
удалить в Estex, то будет удалено (помечено удаленным) только вторая за-
|
||||
пись файла, имеющая формат 8.3, а первая запись останется не удаленной.
|
||||
p.s. Эта ошибка легко исправляется нортоновским "ndd" или др. утилитой
|
||||
проверки логич. структуры диска.
|
||||
Если имя файла состоит только из одних прописных (больших) букв, то Винда
|
||||
создает в каталоге лишь одну запись для имени файла (как MS-DOS до v6.22
|
||||
включительно). Такой файл корректно удаляется Estex.
|
||||
Вывод: Для корректного удаления файлов под ОС Спринтера, их имена должны
|
||||
содержать только прописные буквы.
|
||||
|
||||
7. При включенном в Биосе пункте "System Disk: 1-st FDD" и при отсутствии
|
||||
дискеты в дисководе, в некоторых случаях не сбрасывается обращение к дис-
|
||||
ководу.
|
||||
|
||||
8. Нет биосной функции "54h" (DRV_VERIFY) верификации секторов, описанной в
|
||||
документации. Поэтому она всегда возвращает установленный флаг "Carry".
|
||||
|
||||
9. Доработать функцию "32h" (DSS_ECHOKEY), чтобы нормально мигал курсор.
|
||||
|
||||
10. Функции ДОС 0Ah (Create) и 0Bh (Create new file) перед созданием файла
|
||||
не проверяют число уже открытых дескрипторов. При переполнении числа
|
||||
открытых дескрипторов, эти функции все-равно создают запись нового файла
|
||||
в каталоге, хотя и выдают признак ошибки.
|
||||
Эти функции также не отслеживают имя файла на недопустимые символы. Если
|
||||
имя файла содержит недопустимый символ - функции просто "зависают".
|
||||
Такая ситуация с именами файлов может возникнуть например при автомати-
|
||||
ческом создании имен.
|
||||
|
||||
11. ДОС (v1.6) корректно выводит максимум 509 записей каталога.
|
||||
Executable
+33
@@ -0,0 +1,33 @@
|
||||
В официальной документации есть информация о том, что при работе с графическим
|
||||
экраном есть несколько методов для вывода графики:
|
||||
- обычный;
|
||||
- прозрачный цвет;
|
||||
- временный;
|
||||
Режим включается через указание номера страницы в порт окна процессора. Известно,
|
||||
что для графического экрана у нас доступно 16 страниц с номерами 50h - 5fh.
|
||||
При этом по факту программист не участвует в переключении этих страниц. Нужно
|
||||
знать только одно, что в номере страницы биты 2 и 3 отвечают за режим вывода.
|
||||
3..2 = 0 = 50h обычный метод вывода. Все данные попадают на экран без исключения.
|
||||
bit3 = 1 = 58h режим прозрачного цвета. Цвет с номером FFh не выводится на экран.
|
||||
bit2 = 1 = 54h временный вывод на экран. Самый мутный режим и тут нужно немного
|
||||
пояснить как работает экран у Спринтера.
|
||||
|
||||
Для работы с графикой на Спринтере установлена отдельная память - vram,
|
||||
т.е. видео-озу. По факту это sram, быстрая память. Экран устроен так, что при
|
||||
обычном методе или с приминением прозрачности все данные записываются и в vram
|
||||
и в ram (озу). Суть метода 3 в том, что когда он активен данные пишутся
|
||||
только в vram. Например, мы включили граф.режим, обычный метод и вывели фоновую
|
||||
картинку на весь экран. Потом включили бит3+бит2 и вывели какой-то спрайт.
|
||||
Координаты вывода мы запомнили. Потом нам нужно сдвинуть спрайт на сколько-то
|
||||
пикселей в сторону. Мы берём ранее сохранённые координаты, включаем обычный
|
||||
режим и делаем чтение и запись в те же координаты. Что получается в результате?
|
||||
Фоновая картинка была записана и в ram и в vram. Потом по методу 3+прозрачность
|
||||
мы вывели спрайт. Его данные попали только в vram, а в ram сохранена фоновая
|
||||
картинка. Когда мы снова включили обычный режим и сделали чтение, мы прочитали
|
||||
данные из ram, а потом записали их в vram и повторно в ram. Таким образом мы
|
||||
восстановили область под спрайтом. После этого можно рисовать спрайт в новых
|
||||
координатах. Замысел данного метода в том, что нам не требуется процедура
|
||||
и лишний буфер для сохранения фона (данные под спрайтом). Однако процедура
|
||||
которая будет восстанавливать этот фон, всё же нужна. При использовании
|
||||
акселератора это работает достаточно быстро. Биты 2 и 3 можно использовать как
|
||||
раздельно, так и совместно.
|
||||
Reference in New Issue
Block a user