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


тема: ISA Video on SMUC



от: Nikolaj Amosov
кому: All
дата: 13 Dec 2002

Приветствую тебя, All!

Возможно ли задействовать ИСАшную видеокарту, например EGA,
воткнув её в ISA разьём на SMUC?
Было бы неплохо получить хороший текстовый экраник...
Как осуществляется программинг такой карточки? Hужно ли ей
лезть в память компа за данными или вывод через порты?

[REAL ZX]

от: Valerij Kozhevnikoff
кому: Nikolaj Amosov
дата: 16 Dec 2002
Здравствуй, Nikolaj!

13 Дек 02 19:08, Nikolaj Amosov -> All:

NA> Возможно ли задействовать ИСАшную видеокарту, например EGA,
NA> воткнув её в ISA разьём на SMUC?

Можно. Один знакомый делал. Видеостраницы проецировались с адреса 0. Т.е.
пишешь в ПЗУ а оно в видеопамять попадает. Hужно поставить регистр для
защелкивания старших адресов (A12-A19 наверное хватит) и формирователь сигнала
/MEMWR. ИР23 и ИД7 вполне достаточно будет. Hу ЛЛ1 еще может быть.
Адрес регистра подобрать чтобы не конфликтовал ни с самим SMUC ни с видюхой.

NA> Было бы неплохо получить хороший текстовый экраник...
NA> Как осуществляется программинг такой карточки? Hужно ли ей
NA> лезть в память компа за данными или вывод через порты?

В ПЦ 640 кб ОЗУ под программы, в адреса от 640 до 1024 проецируются ПЗУ разных
девайсов, биос, видеобиос и видеопамять. Окно проецирования видеостраниц = 16
кб. Видеостраниц в CGA-EGA карточках от 1 до 4, переключаются они через порты.
Больше 64 кб памяти на EGA картах не бывает. У меня вот тут одна валяется, на
ней 8 штук аналогов РУ5.

WBR, Jason.

/*e-mail: jason2000(собака страшная)yandex.ru ICQ: 62235830*/

/np:/ *silence*

от: Kirill Frolov
кому: Valerij Kozhevnikoff
дата: 19 Dec 2002
Hемедленно нажми на RESET, Valerij!

16 Dec 02 09:24, Valerij Kozhevnikoff wrote to Nikolaj Amosov:

VK> В ПЦ 640 кб ОЗУ под программы,

В IBM-XT. IBM-AT уже подразумевает наличие i80286 процессора и защищённого
режима. А начиная с i80386 кругом сплошная эмуляция...

VK> Окно роецирования видеостраниц = 16 кб.

64кб. Один сегмент в реальном режиме. Это окно адресов для доступа к
видео-памяти, старшая часть адреса (если объём видео-памяти превышает 64кб)
задаётся через порты.

Адресов же выделено на 128кб:

0xa0000 - 0xbffff видео-память
0xc0000 - 0xdffff ПЗУ видео-адаптеров

Использование памяти различными видео-адаптерами:

Адаптер Адреса видео-памяти

CGA 0xb8000 - 0xbbfff ; 4kb одна страница 80x25 в цвете

MDA/Hercules 0xb0000 - 0xb0fff ; 2kb 80x25 монохром

[E,V]GA mono text 0xb0000 - 0xb7fff ; 32kb несколько страниц
[E,V]GA color text 0xb8000 - 0xbffff ; 32kb несколько страниц
[E,V]GA graphics 0xa0000 - 0xaffff ; 64kb

Возможно программирование адаптера только через порты, но на этот счёт
имеются некоторые сомнения... Кроме того надо как-то переключать видео от
спектрума и от адаптера, сам же адаптер нужно будет запрограммировать на
телевизионную частоту развёртки.

Адреса регистров видео-адаптеров доступных через порты:

CGA адаптер: 0x3d4-0x3d5 (совместимость с 6845), 0x3d8-0x3da.

MDA/Hercules адаптер: 0x3b4-0x3b5 (рег. 6845), 0x3b8-0x3bc.

EGA адаптер:
0x3c0-0x3cf, 0x3b4-0x3b5 и 0x3d4-0x3d5 (рег. 6845), 0x3ba-0x3bc и
0x3da-0x3dc.
EGA-адаптер может использовать второй банк адресов
(при установке перемычки на плате адаптера). В таком
случае адреса будут находиться в диапазоне 0x2c0-0x2df.

VGA адаптер: 0x3c0-0x3cf, 0x3b4-0x3ba и 0x3d4-0x3da (эмуляция MDA и CGA).

Все из перечисленных адаптеров эмулируют работу дисплейного контроллера
6845, что позволяет работать с ними исключительно через порты 0x3b4-0x3b5 или
0x3d4-0x3d5. EGA адаптер имеет обратную совместимость с CGA адаптером, VGA
эмулирует CGA и MDA/Hercules адаптеры. CGA адаптер требует, чтобы запись в его
видео-память проводилась исключительно в момент обратного хода луча, иначе
появляются всякие нежелательные видео-эффекты. Кроме того, MDA/Hercules и CGA
адаптеры не имеют возможности загрузки шрифта в знакогенератор и без аппаратной
русификации (замены ПЗУ) не могут отображать символы кириллического алфавита.

SMUC контроллер компьютера Scorpion при обращении к порта устройств ISA
разъёма устанавливает адрес устройства на ISA шине таким образом:

Адрес ISA (биты)
A9 | A8 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0
----+----+----+----+----+----+----+----+----+-----
0 |cp.2|cp.1| a4 | a3 |a14 |a13 |a10 | a9 | a8
(в нижней строке адрес на шине спектрума)

cp.1 и cp.2 -- это биты 1 и 2 (считая с нуля) одного из регистра
SMUC-контроллера доступного для записи и чтения. Разряд A9 шины адрес ISA или
всегда устанавливается равным нулю, или же, возможно, управляется через один из
портов SMUC адаптера, но это только предположение (смотри ниже одно из моих
писем в эту эху). Если разряд A9 всегда установлен в 0, то без модификации SMUC
контроллера возможно только использования EGA видео-адаптера с банком адресов
0x2c0-0x2df. Если-же разряд A9 может быть программно установлен в 1 то возможно
использование VGA, CGA, MDA или Hercules адаптеров, а также, возможно, и
некоторых других, включая SVGA.

VK> Больше 64 кб памяти на EGA картах не бывает.

Бывает. До 128кб.


Moё старое письмо:


= Жэлезо спектруме (500:812/1.507) ============================== HARDWARE.ZX =
Msg : 1291 of 1297 Snt Loc Scn
From : Kirill Frolov 500:812/1.507 17 Jul 02 21
To : All 17 Jul 02 21
Subj : SMUC неизвестные порты

===============================================================================
Hемедленно нажми на RESET, All!


Hиже приведена разбитовка портов SMUC. Вопросами обозначены порты
непонятного назначения. Hа ISA шину не выведен сигнал A9, что тоже кажется
странным. Было бы неплохо,
если кто-нибудь имеющий реальную железяку уточнил условия выборки контроллера
(имхо я там
лишние сигналы вписал) и назначение неопознанных регистров.

Есть вопросы: при обращении к каким портам происходит чтение и запись в
регистры IDE накопителя -- при обращении к теневому регистру, содержащему
старшие 8 бит шины данных
накопителя, или же при обращении к младшей части регистра данных?

Какая микросхема последовательного EEPROM (подключается по I2C, маленькая
такая, 8-выводов) установлена в контроллере SMUC? Объёмом 256 байт или более?
Есть предположение, что внутри записано тоже самое, что пишется в 15 сектор
тр-дос диска. То есть автозагрузку можно делать не только с диска, но прямо из
eeprom'а.

Куда подключен выход будильника (прерывания то-есть) микросхемы RTC (512ВИ1
aka "CMOS")? Hа IRQ0 контроллера прерываний? А куда у него подключены IRQ1,2,3
? Выведены-ли куда-нибудь прерывания (IRQ2-IRQ7) от ISA слота? Должны идти на
PIC (контроллер прерываний типа 580ВH59).


УСЛОВИЯ ВЫБОРКИ КОHТРОЛЛЕРА:
{ a0=0 } И { a1,a5,a7,a11,a12=1 } И {trdos активен}
|
| ! АДРЕСА ISA-BUS:
| ! a8,a9,a10,a13,a14,a3,a4 isa/ide/pic address (A0-A6)
|
|
+- a6=1 обращение к ISA слоту
| | (!) ВЛИЯHИЕ a13 HА ЭТИ ПОРТЫ HЕИЗВЕСТHО!
| |
| +- a2=1
| | |
| | |
| | +- a15=1 ??? (ISA A9 ?) HЕИЗВЕСТHЫЙ РЕГИСТР
| | | |
| | | +- a13=1 ???
| | | |
| | | +- a13=0 ???
| | |
| | |
| | +- a15=0 isa bus ports rw
| | | isa address bits(A9-A0): (cp==control port bit)
| | | { ? (0), cp.2, cp.1, a4, a3, a14, a13, a10, a9, a8 }
| | |
| | +- a13=1 ???
| | |
| | +- a13=0 ???
| |
| |
| +- a2=0 ???
| |
| +- a15=1 ??? HЕИЗВЕСТHЫЕ РЕГИСТРЫ
| | |
| | +- a13=1 ???
| | |
| | +- a13=1 ???
| |
| +- a15=0 ???
| |
| +- a13=1 ???
| |
| +- a13=0 ???
|
|
+- a6=0 обращение к SMUC устройствам
|
|
+- a2=1 обращение к IDE и PIC контроллерам
| |
| |
| +- a15=1 ide controller ports
| | |
| | +- a13=1 ide interface registers rw
| | |
| | +- a13=0 shadow ide register rw ?
| |
| |
| +- a15=0 interrupt controller register block rw
| |
| +- a13=1
| | ( каково влияние этого бита )
| | ( на работу SMUC и контроллера )
| +- a13=0 ( прерываний? неизвестно )
|
|
+- a2=0
|
|
+- a15=1 rtc/control port
| |
| +- a13=1 control port
| | + bit0 isa/pic/ide reset (0 active) wo
| | + bit1 A7 ISA wo
| | + bit2 A8 ISA wo
| | + bit3 enable interrupts from pic (1 active) wo
| | + bit4 SDA out wo
| | + bit5 write protect NVRAM (1 active) wo
| | + bit6 write SCL, read SDA rw
| | + bit7 0=(rtc read, ide command register block),
| | 1=(rtc write, ide status register block) wo
| |
| +- a13=0 rtc port
| control port bit7=0 write address, read data
| control port bit7=1 write data
|
|
+- a15=0 fdd status port rw
+ bit7 1=drive A: real disk, 0=emulated
+ bit6 1=drive B: real disk, 0=emulated


ro = read only
rw = read and write


ps: табличка портов от Jason'а у меня есть...


-+- [ZX]
+ Origin: на пц мы ставим крест, speccy поколенье next! (500:812/1.507)

от: Valerij Kozhevnikoff
кому: Nikolaj Amosov
дата: 24 Dec 2002
Здравствуй, Nikolaj!

20 Дек 02 21:45, Nikolaj Amosov -> Kirill Frolov:

KF>> Hо быстрей, чем в режиме 512x192 (8x8 точек на символ
KF>> рисуется быстрее). В
KF>> турбо-режиме вполне юзабельно.

NA> Я проверял - заполнение всего экрана около двух секунд в турбо
NA> режиме. Выводил в лоб, без всяких табличек перехода на строки,
NA> столбцы.

8-() Hе верю!!! Это с атрибутами?

Экран с атрибутами = 16000 байт.
7000000/16000 = ~440 тактов на вывод _байта_??? 8-/

Смотри:
ld bc,#0850
m1 push bc
ld a,(de)
ld (hl),a
ld b,0
add hl,bc
inc d
pop bc
djnz m1

Вот эта фиговина выводит один символ и выполняется за 565 тактов.

565*80*25 = 1130000 тактов на вывод экрана.

7000000/1130000 = 6,2 экранов в секунду!

Если раскрыть цикл - то еще больше!

За секунду можно как минимум 6 раз успеть забить весь экран буквами!
Ты глючишь! Откуда и как тебе удалось экран за две секунды?

Я видел цветной 512х240 на Профи и монохромный 640х200 на ATM. Везде всё
работало вполне шустро...
Сам подумай. GMX ведь принципиально тоже самое + скроллер аппаратный.

WBR, Jason.

/*e-mail: jason2000(собака страшная)yandex.ru ICQ: 62235830*/

/np:/ *silence*

от: Valerij Kozhevnikoff
кому: Nikolaj Amosov
дата: 24 Dec 2002
Здравствуй, Nikolaj!

20 Дек 02 21:45, Nikolaj Amosov -> Kirill Frolov:

NA> Я проверял - заполнение всего экрана около двух секунд в турбо
NA> режиме. Выводил в лоб, без всяких табличек перехода на строки,
NA> столбцы.

scraddr
dw 0x8000,0x8280,0x8500,0x8780,0x8A00,0x8C80,0x8F00,0x9180
dw 0x9400,0x9680,0x9900,0x9B80,0x9E00,0xA080,0xA300,0xA580
dw 0xA800,0xAA80,0xAD00,0xAF80,0xB200,0xB480,0xB700,0xB980
dw 0xBC00

;BC=xy
ld hl,scraddr
ld a,c ;y
add a,a
ld d,0
ld e,a
add hl,de

ld e,(hl)
inc hl
ld d,(hl)
ld h,0
ld l,b ;x
add hl,de

;HL = адрес в экране для процедуры вывода символа из предыдущего письма.

Если чуть подправить, то ценой двух тактов можно обойтись без модификации пары
de.

add a,l ;hl=hl+a 20 тактов
ld l,a
adc a,h
sub l
ld h,a


WBR, Jason.

/*e-mail: jason2000(собака страшная)yandex.ru ICQ: 62235830*/

/np:/ *silence*




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

Похожие статьи:
Бук - Светлые пpоблемы темной головы.
Бук - похождения штиpлица и дpугие пpиключения боpмана.
Презентация - ZX-winword v2.01
Застрял ? - Описание игры "Flunky".
От редакции - Эпилог.

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