ZXNet эхоконференция «code.zx»


тема: Sprinter: идентификация конфигурации



от: 812/08.16
кому: Yuri Burawtsow
дата: 16 Sep 1997

Hа днях, 15 сентября 97, в 00:14, Yuri Burawtsow писал к Denis Parinov:

Рад приветствовать тебя, Yuri!!!!!!

YB> Такие вопросы у меня появились:

YB> 1. Как определить, что программа запуще-
YB> на именно на Sprinter'е, причем даже если
YB> эмулируется другая машина?

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

YB> 2. Как программно определить наличие
YB> полного ОЗУ?

В Спринтере видимо не будет понятия не полное ОЗУ. Как
резервировать память см. ниже _HO_ это тока проэкт и видимо
что то будет менятся.

YB> 3. Как программно влиять на режим Турбо?

YB> 4. Как включать/отменять эмулирование
YB> любой другой машины?

этим видимо будет заниматься OS!

YB> Отвечая на вопросы, приведи, pls, под-
YB> робное описание всех портов и точек входа,
YB> используемых в этих операциях.

Кста, а зачем это тебе понадобилось? Если собираешся чегонить
писать обязательно согласуй с ф.Петерс!!!

YB> С уважением, Юрий.

Все приведенное ниже можно использовать только для ознакомления
т.к. что-то может изменится и привести к неработоспособности
программ, по всем вопросам касаемо железа обращатся в ф. Петерс
тел. (812) 132-05-86.

Sprinter-97. Экран.

Генерация видеоизображения в компьютере производится особым
образом. Все поле изображения, включая заэкранные области
импульсов синхронизации, разбито на квадраты ( знакоместа ),
равные по размеру стандартному знакоместу компьютера
ZX-Spectrum. В каждом таком знакоместе задается режим вывода
изображения. Это может быть изображение обычного символа
ZX-Spectrum или два символа ZX-Spectrum, сжатые по горизонтали в
два раза. Это могут быть графические изображения в различных
режимах разрешения. В режиме знакоместа может быть указано, что
в знакоместо надо выводить бордер, сигнал гашения или
синхронизации. Таким образом, все синхронизирующие сигналы
оказываются программируемыми. Информация о режиме знакомест
записывается в специальное ОЗУ,
которое заполняется необходимыми данными сразу же после
включения комьпютера. В дальнейшей работе для изменения режима
вывода изображения достаточно изменить значения режимов в нужных
знакоместах. Знакоместа, отвечающие за синхронизацию и импульсы
гашения затрагивать не рекомендуется, так как это приведет к
изменению режима синхронизации телевизора и передергиванию
изображения при изменении режима. ( Подобное передергивание
наблюдается в IBM, когда производится переключение режима
экрана. ) В режиме знакоместа так же указывается с какой области
видео-ОЗУ берутся данные, выводимые на экран. Это позволяет
легко перемещать изображения по знакоместам путем изменения
информации в режимах зннакомест. Это избавляет программы,
работающие с окнами от слежения за положением данных в
видеопамяти при перемещении окон. Для их перемещения достаточно
перезаписать данные о режиме знакомест. Само же изображение в
видеопамяти остается на прежнем месте. Если располагать
информацию различных окон в разных местах видео-ОЗУ, то
переключение окон будет производиться без потери информации в
этих окнах, что приводит к существенному ускорению подобных
операций. В существующей версии Sprinter-97 режим знакоместа
задается двумя байтами. Первый байт содержит информацию о режиме
знакоместа и старшую часть адреса знакоместа. Второй
представляет собой младшую часть адреса знакоместа. Адрес
знакоместа имеет полуторабайтовое значение и задает 64-х
байтовый блок видео-ОЗУ, из которого берется изображение данного
знакоместа. Изображение в знакоместе может иметь различное
разрешение и режим. В режимах G-256-8 и G-16-16 в знакоместе
используются все 64 байта. В режиме G-16-8 достаточно 32-х байт,
В режиме ZX-40 - 9 байт, ZX-80 - 18 байт. Режим G-16-8
использует все 64 байта, в которых используются только 4 бита из
8-ми. Какие биты используются для вывода, определяется палитрой.
Схемно этот режим не отличается от режима G-256-8. Что бы задать
этот режим, достаточно записать в палитру цвета не зависящие от
ненужных битов. Это избавляет от маскирования ненужных битов при
выводе изображения. Включение режима ZX-40 приводит к
формальному подключению шести знаков формата ZX-Spectrum в
данное знакоместо. Половина из них соответствует альтернативному
экрану, подключаемому через bit3 порта 7FFD. 'Альтернативные'
символы появляются на экране рядом с 'нормальными' в режиме
ZX-80, когда в одном знакоместе оказываются два символа.
Остается определить какие из трех пар символов должны выводиться
на экран. Это определяется дополнительными битами в байте режима
экрана. В графических режимах эти биты определяют номер
используемой палитры в данном знакоместе. Распишем какие биты
байта режима за что отвечают.


С уважением, Denis.

-+- ZX WORD 2.5+

от: 812/08.16
кому: Yuri Burawtsow
дата: 16 Sep 1997

Hа днях, 15 сентября 97, в 00:14, Yuri Burawtsow писал к Denis Parinov:

Рад приветствовать тебя, Yuri!!!!!!


Bit3..Bit0 - старшая часть адреса Видео-ОЗУ.
Bit5..Bit4 - режим вывода:
00 - (G-256-16 планируется ),G-16-16;
01 - ZX-80;
10 - G-256-8,G-16-8;
11 - ZX-40.
Bit7..Bit6 - номер палитры в графическом режиме или номер
символа в режиме ZX-Spectrum. Hомер палитры в графическом режиме
определяет так же и дополнительные подрежимы. Палитры с номерами
2 и 3 в режиме G-256-8 соответствуют особому подрежиму BOND, в
котором цвет номер FFh переопределен как не существующий. Если
информация пикселя имеет этот номер, то его цвет берется из
предыдущей точки. Это дает эффект аппаратной заливки
горизонтальных линиий, что может существенно увеличить скорость
вывода изображений, построенных на одноцветных плоскостях. Этот
же номер определяет символ в режиме ZX-Spectrum. Существуют
только символы с номерами 0,1,2. Символ с номером 3 является
признаком установки вывода в данное знакоместо сигналов
синхронизации, гашения и бордера. Какой именно сигнал,
определяется битами 3..0 этого же байта режима, так как в
моменты вывода этих сигналов адрес видео-ОЗУ не требуется.
Адресация видео-ОЗУ. Адрес видео-ОЗУ формируется из номера
страницы и непосредственного адреса в этой странице. Hомер
видео-страницы записывается в специальный порт (rgadr).
Адресация имеет два режима - ZX... и GR... В режимах ZX-40 и
ZX-80 адресация информации в знакоместах производится так же как
в стандартном ZX-Spectrum. Адресация же самих знакомест
полностью определяется тем что записано в байтах режима. В
графических режимах адресация изменена так что бы байты,
располагающиеся на одной горизонтальной линии располагались
непосредственно друг за другом.

Соответствие битов адреса и битов байтов режима:
1. Режимы ZX... Адрес - PGS4..0,A12..0,A13=0, A14..A15 - окно.
Окна основного ОЗУ открытые для вывода на экран - xxx0x101b
Byte0
Bit7..6 - A12..A11( Для атрибутов - A9..A8 )
Bit5..4 - задает режим ZX-40/ZX-80
Bit3..0 - страница видео-ОЗУ, устанавливается OUT (pgadr),A
Byte1
Bit7..0 - A7..0
Адресация знакоместа - А10..А8 ( Для атрибутов А12..10 = 110b )
2. Режимы GR... Адрес - PGS4..1,A13..0, PGS0=0, A14..A15 - окно.
Окна основного ОЗУ открытые для вывода на экран - 0101xxxxb
Byte0
Bit7..6 - задает палитру и режим BOND
Bit5..4 - задает режим GR-...
Bit3..0 - А9..6
Byte1
Bit7..4 - A13..10
Bit3..3 - PGS4
Bit2..0 - A5..3
Адресация знакоместа - А2..0 - горизонталь, PGS3..1 - вертикаль.
Как адресовать видео-ОЗУ в различных режимах ?
Адреса видео-ОЗУ мультиплексируются в зависимости от того, в
каком режиме необходимо производить вывод. Для этого порт
страницы видео-ОЗУ содержит специальный бит, который определяет
режим адресации видео-ОЗУ. Это Bit5 Вывод в порт видеостраницы
значений 40h..7Fh приводит переключению адресации видео-ОЗУ в
графический режим. Подобное переключение введено для упрощения
работы с графическим экраном. В данный момент в качестве
страницы видео-ОЗУ в графическом режиме используется часть
адреса страницы основного ОЗУ, что приводит к установлению
формального соответствия конкретных страниц видео-ОЗУ конкретным
страницам основного.Этими страницами являются страницы
50h..5Fh.Для их использования в качестве страниц видео-ОЗУ
необходимо переключить адресацию видео-ОЗУ в графический режим.
ОЗУ режима экрана располагается в видео-ОЗУ и адресуется точно
так же. Для получения доступа к нему, надо записать в порт
видеостраницы значение 16h или 17h. Hа странице 17h
располагаются байты 0, а на странице 16h байты 1 режима.
Информация режима состоит из 40 строк имеющих длину 64 байта и
следующих друг за другом в странице 17h. в каждой строке имеется
информация о синхронизации строк. Она располагается в байтах от
40-го до 55-го. Строки с 32-й до 39-й отвечают за кадровую
сингронизацию. Байты 0..39 в строках 0..31 содержат информацию о
режиме видимой области экрана. Байты с теми же адресами в
странице 16h соответствуют байтам 1 режима. Изменять информацию
в 32-й до 39-й строк, та так же в байтах 40..63 в строках от 0-й
до 31-й не рекомендуется. Строки режима располагаются друг за
другом и представляют собой два блока по 2.5k, расположенные на
двух страницах. В этих страницах достаточно памяти для
расположения нескольких таких блоков для задания нескольких
страниц режимов. В существующей версии Sprinter-97 используются
только две таких страницы, располагающиеся с адресов 0000h и
1000h в странице. Hеобходимо помнить, что режим задается при
значениях 16h и 17h, засылаемых в порт страницы видео-ОЗУ. В
этом случае страница видео-ОЗУ имеет размер 8К и адреса в
странице находятся в пределах 0..1FFFh.) Переключение страниц
режима осуществлается путем записи в порт (rgmod) значений 0 или
1. Этих страниц видео-ОЗУ содержит еще одну дополнительную
страницу, в которой содержатся данные палитры. Эта страница
становится доступной после записи в порт видеостраницы значения
80h.

С уважением, Denis.

-+- ZX WORD 2.5+

от: 812/08.16
кому: Yuri Burawtsow
дата: 16 Sep 1997

Hа днях, 15 сентября 97, в 00:14, Yuri Burawtsow писал к Denis Parinov:

Рад приветствовать тебя, Yuri!!!!!!

Sprinter-97. Функции BIOS.

;=============================================================
; Функции Bios Sprinter-97.
; Рабочая версия 16.07.97
;=============================================================
; !!! Функции дополняются и могут быть частично изменены. !!!
;=============================================================
; LP_OPEN_WIN Открытие окна
; point 3D13h C=80h Вход: B - код окна.
; B=0 - Spectrum 32x24 B=1 - Spectrum 64x24
; B=2 - Spectrum 40x24 B=3 - Spectrum 80x24
; Выход: DE - размер окна
CMD_OPEN_WIN EQU 80H
;=============================================================
; LP_PRINT_ALL Вывод символов на экран с текущего знакоместа
; point 3D13h C=81h Вход: A - символ,
; B - число выводимых символов,
; Е - атрибут символа
CMD_PRINT_ALL EQU 81H
;=============================================================
; LP_PRINT_SYM Вывод символов на экран с текущего знакоместа
; без атрибута
; point 3D13h C=82h Вход: A - символ,
; B - число выводимых символов,
CMD_PRINT_SYM EQU 82H
;=============================================================
; LP_PRINT_ATR Вывод атрибутов на экран с текущего знакоместа
; point 3D13h C=83h Вход: B - число выводимых символов,
; Е - атрибут символа
CMD_PRINT_ATR EQU 83H
;=============================================================
; LP_SET_PLACE Установка текущего знакоместа
; point 3D13h C=84h Вход: E - знакоместо по горизонтали
; D - знакоместо по вертикали
CMD_SET_PLACE EQU 84H
;=============================================================
; LP_PRINT_LN Вывод строки символов на экран с текущего
; знакоместа
; point 3D13h C=85h Вход: HL - адрес строки
; B - число выводимых символов,
; Е - атрибут символов
CMD_PRINT_LINE EQU 85H
;=============================================================
; LP_PRINT_LN2 Вывод строки символов на экран с текущего
; знакоместа без атрибутов
; point 3D13h C=86h Вход: HL - адрес строки
; B - число выводимых символов,
CMD_PRINT_LINE2 EQU 86H
;=============================================================
; LP_PRINT_LN3 Вывод строки символов на экран с текущего
; знакоместа после D выводятся пробелы
; point 3D13h C=87h Вход: HL - адрес строки
; B - число выводимых символов,
; D - разделитель
; Е - атрибут символов
CMD_PRINT_LINE3 EQU 87H
;=============================================================
; LP_PRINT_LN4 Вывод строки символов на экран с текущего
; знакоместа без атрибутов после D выводятся
; пробелы
; point 3D13h C=88h Вход: HL - адрес строки
; B - число выводимых символов,
; D - разделитель
CMD_PRINT_LINE4 EQU 88H
;=============================================================
; LP_CLS_WIN Очистка окна экрана
; point 3D13h C=89h Вход: DE - положение окна
; B - атрибут очистки
; H - высота, L - ширина
CMD_CLS_WIN EQU 89H
;=============================================================
; LP_SCROLL_UD ; Вход : D - верхняя строка ( от 0 )
; B = 1 - UP/ B=2 - DOWN
; E - число скроллируемых строк
CMD_SCROLL EQU 8AH
;=============================================================
; LP_PRINT_LN5 Вывод строки символов на экран с текущего
; знакоместа после D ничего не выводится
; point 3D13h C=8Bh Вход: HL - адрес строки
; B - число выводимых символов,
; D - разделитель
; Е - атрибут символов
; Выход: HL - последний символ + 1
CMD_PRINT_LINE5 EQU 8BH
;=============================================================
; LP_PRINT_LN6 Вывод строки символов на экран с текущего
; знакоместа без атрибутов после D ничего не
; выводится
; point 3D13h C=8Ch Вход: HL - адрес строки
; B - число выводимых символов,
; D - разделитель
; Выход: HL - последний символ + 1
CMD_PRINT_LINE6 EQU 8CH
;=============================================================


С уважением, Denis.

-+- ZX WORD 2.5+

от: 812/08.16
кому: Yuri Burawtsow
дата: 16 Sep 1997

Hа днях, 15 сентября 97, в 00:14, Yuri Burawtsow писал к Denis Parinov:

Рад приветствовать тебя, Yuri!!!!!!

;=============================================================
; KBD_IN Ввод сканкода с клавиатуры без ожидания,
; point 3D13h C=8Fh Управление клавиатурой и режимом TURBO
; Вход: A = 0 - ввод сканкода
; A = 1 - отключить эмуляцию ZX-Spectrum KBD
; A = 2 - включить эмуляцию ZX-Spectrum KBD
; A = 3 - отключить TURBO ; A = 4 - включить TURBO
; Выход: Z - нет кода
; NZ - есть код - в A
CMD_KBD_IN EQU 8FH
;=============================================================
; point 3D13h C=90h
; Определение объема памяти.
; Выход: BC - общий объем ОЗУ в блоках по 16k
EMM_FN0 EQU 90H
;=============================================================
; point 3D13h C=91h
; Инициализация распределения памяти. Стирание
; всех RAM-дисков
EMM_FN1 EQU 91H
;=============================================================
; point 3D13h C=92h
; Получить блок памяти N bytes
; Вход: A - номер RAM-Disk-а
; B - число необходимых блоков
; Выход: A - RAM-Disk/код ошибки
; CF - признак ошибки
; ( нет памяти/RAM-Disk существует )
EMM_FN2 EQU 92H
;=============================================================
; point 3D13h C=93h
; Освободить блок памяти RAM-Disk-a A
; Вход: A - КЛЮЧ RAM-Disk ( Clear RAM-Disk A )
EMM_FN3 EQU 93H
;=============================================================
; point 3D13h C=94h
; Получить страницу N RAM-Disk-a A
; Вход: A - КЛЮЧ RAM-Disk, B - номер страницы
; Выход: A - страница
EMM_FN4 EQU 94H
;=============================================================
; point 3D13h C=95h
; Получить следующую страницу RAM-Disk
; Вход: A - страница ОЗУ
; Выход: A - следующая страница ОЗУ/ L=0FFh - конец
EMM_FN5 EQU 95H
;=============================================================
; point 3D13h C=96h
; Получение адресов портов и данных для восстановления
; Вход: A - номер окна проецирования
; Выход: B - данные, C - адрес порта окна
; По завершении работы с расширенным ОЗУ программа
; должна выполнить OUT (C),B для всех использованных
; окон, что бы вернуть на место страницы, подключенные
; ранее
EMM_FN6 EQU 96H
;=============================================================
; point 3D13h C=98h
; Вычисление страницы и адреса в RAM-Disk по
; абсолютному номеру сектора
; Вход: A - RAM-Disk, DE - абсолютный номер сектора
; Выход: A - страница, HL - адрес в странице
RAMD_CALC_PAGE EQU 98H
;=============================================================
; ..Внутренняя функция..
; открыть графическое окно, с описателем в IX
; на месте HL, E - страница режима, седьмой бит E - режим BOND
PIC_FN0 EQU 0A0H
;=============================================================
; point 3D13h C=0A1h
; ВЫВЕСТИ ТОЧКУ вход: dE - вертикаль, HL - горизонталь,
; A - цвет точки, B - номер граф. окна
PIC_FN1 EQU 0A1H
;=============================================================
; point 3D13h C=0A2h
; ВЫВОД ЛИHИИ 'FILL' вход: dE - вертикаль, HL - горизонталь.
; IX - длина линии в точках, A - цвет
PIC_FN2 EQU 0A2H
;=============================================================
; point 3D13h C=0A3h
; ВЫВОД ЛИHИИ 'COPY' вход: dE - вертикаль, IX - горизонт.
; A




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Лобзикам - В сентябре 1997 года я заглянул в свой почтовый ящик и увидел письмо от Венгерских Спектрумистов!
Enlight'97 - Отчет Gendalf о Enlight'97.
Экспертиза - О прохождении игры Technodrome.
Misc - НЛП и его этапы.
Сеть - Сетевые новости. Список BBS: ZX-Net 095, Независимые BBS.

В этот день...   16 апреля