Вход

Просмотр полной версии : [Поиск 1] Процессор NEC V20



Tronix
21.03.2013, 19:40
А вот интересно, можно ли заместо штатного поставить NEC V20? В вики пишут, что мол у него аппаратное (в смысле аппаратное в самом камне, на уровне логики) умножение/деление, что есть несомненный плюс даже для функций BIOS в части обработки NMI (эмуляции CGA). Ну и для всяких прог тоже неплохо.

По пинам оно вроде полностью совместимо. Единственное что смущает, по данным той же вики NEC V20 работали на частоте от 8MHz. А у поиска она что-то в районе 5MHz.. Вопрос, заведется ли NEC на меньшей частоте?

DrPass
21.03.2013, 20:11
Если верить той же вики, он по CMOS-процессу сделан. Т.е. это должна быть статическая схема, и минимальная частота ему пофигу, хоть в пошаговом режиме. С другой стороны, можно нацепить для него отдельный тактовый генератор. Отечественные умельцы таким образом и штатный ВМ88 разгоняли на пару мегагерц.

Tronix
19.10.2013, 17:11
Выпаял проц, поставил DIP-40 панельку и засунул в Поиск NEC V20 \w/
Было так:
http://habrastorage.org/storage3/800/7d4/6cc/8007d46cc50288af020d775b64b8b27c.jpg
Стало:
http://habrastorage.org/storage3/5fc/2da/816/5fc2da816e0f7316f6a552bb697395c3.jpg

Комп, как и предполагалось, завелся без проблем. Единственное, какой-то глюк с Volcov Commander и некоторыми другими программами (Rar) - пропадают каждые четные символы. При этом Norton Commander - не глючит.
http://habrastorage.org/storage3/f80/233/43a/f8023343aa7f7c1e30008604b54810a8.jpg

Сдается мне это глюк в какой-то функции BIOS int 10h, вывод символа или строки, несовместимость с NEC. Там же (в NEC) какие-то опкоды 8088 по другому интерпретируются в связи с поддержкой эмуляции 8080 и почти полным набором 286 инструкций. Короче будет время - обязательно разберусь и пофикшу BIOS.

Насчет скорости - ну небольшой прирост есть, особенно в математики (деление,умножение).

Это тест быстродействия с КМ1810ВМ88:
http://habrastorage.org/storage3/017/121/e63/017121e6368825b54c494dfbbb10027a.jpg

Видео подсистема с КМ1810ВМ88
http://habrastorage.org/storage3/2e8/28d/440/2e828d440051b6621e882ab36099600e.jpg

А дальше уже NEC V20:
http://habrastorage.org/storage3/765/5ea/5bd/7655ea5bd0a4ec15a33788f5d97fed4d.jpg

Тест CPU с NEC V20:
http://habrastorage.org/storage3/b1f/0bf/57d/b1f0bf57d9062ef44898c7372c9f020a.jpg

И видео подсистема:
http://habrastorage.org/storage3/e23/ce7/0d0/e23ce70d0e098c76cb23b541dcfbcf81.jpg

Вообще, субьективно, с NEC V20 поприятнее работается. Поживее как-то :)

Tronix
19.10.2013, 22:58
Хм, странно.. В BIOS не нашел явных несостыковок с V20... Проверял на вот какие вещи:
1) POP CS, и вообще двух-байтные POP'ы мне не встретились в листинге. v20 их не ест.
2) После MUL v20 не сбрасывает ZF, если резалт 0. Есть несколько MUL в коде, но ZF после операций не проверяется нигде
3) Экзотические AAD/AAM не встречаются нигде. В интеле инструкции могут принимать аргумент, в V20 он всегда = 0Ah
4) То же касается и инструкции SALC (D6 opcode), которую v20 интерпретирует как XLAT. Нет таких инструкций в BIOS.

Вообще, похоже, глюк происходит при переключении видео-страниц (int 10h, ah=05h). Чему там глючить я не нашел.

Не исключаю, что это какая-то аппаратная заморочка, возможно связанная с мультиплексором и памятью в целом. Воткнул назад КМ1810ВМ88.

Sonic_Blast
20.10.2013, 00:01
У меня один поиск с 128кб(Поиск 1.03) памяти с км1810вм88 в чеките показывает 232 Dhrystones а с 512кб(1.06) показывает 214 Dhrystones

Tronix
20.10.2013, 11:26
Ничего не понимаю ... Собрал из исходников биос 89 года. Зашил. Наблюдаю тот же глюк. Смотрю в INT_10A.ASM в процедуру ACT_DISP_PAGE и не вижу ничего криминального.

Sonic_Blast
20.10.2013, 11:48
Может быть у вас проц глюкнутый или плохо ножки в розьеме пропаяны или ещё что-то)?

Tronix
20.10.2013, 12:02
Может быть у вас проц глюкнутый или плохо ножки в розьеме пропаяны или ещё что-то)?

Исключено. Проц отлично работает на XT-шке, тем более у меня их два (NEC V20), и оба ведут себя одинаково. Ноги пропаял хорошо, тем более если в панельку ставлю родной КМ1810ВМ88, то все работает как и раньше работало (до поднятия проца на панельку).

Щаз простую прогу сделал:

mov ah,9 ; вывести символ 'a' 2000 раз в нулевую стран.
mov cx,2000
mov bh,0
mov al,'a'
mov bl,7
int 10h

xor ah,ah ; ждем нажатия любой клавиши
int 16h

mov ah,5 ; переключить видео-страницу на 1
mov al,1
int 10h

mov ah,9 ; вывести символ 'b' 2000 раз в первую страницу
mov cx,2000
mov bh,1
mov al,'b'
mov bl,7
int 10h

xor ah,ah ; ждем любой клавиши
int 16h

mov ah,5 ; переключится на нулевую вид страницу
mov al,0
int 10h

xor ah,ah ; ждем клавиши
int 16h

int 20h ; выходим


Наблюдаю адские глюки сразу после переключения на первую видеостраницу. Хотя нет, уменьшил число символов до 20, все нормально, кроме того что после первого int16 все последующие не ждут нажатия клавиши.. Разбираюсь.

Sonic_Blast
20.10.2013, 12:18
а чем проц выпаивали? (дорожки не отслаивались?)

Tronix
20.10.2013, 14:45
а чем проц выпаивали? (дорожки не отслаивались?)

Сначала смазал все ноги безотмывочным американским флюсом, потом отпаивал поочередно с помощью оловоотсасывателя, который посоветовал DrPass в соседней теме про ремонт. Конечно, не все прошло идеально гладко, некоторые ноги которые идут к большим дорожкам пришлось несколько раз припаивать-отсасывать, еще помогала оплетка для удаления припоя. Вообщем глаза боятся а руки делают -) Дороги не оторвал, оторвал только одну ногу на старом проце. Перввую ногу, которая как раз на толстую дорожку шла. Но и ее припаял потом аккуратно обратно к процу. Так что все обошлось без серьезных последствий.

DrPass
20.10.2013, 21:16
Не вдаваясь в подробности, могу предположить, что в int 10h как раз все в порядке. Глючат-то отечественные программы, а иностранный Нортон работает нормально. А как советский программист обычно выводит символы, через BIOS, что ли? Да фигушки. Готов поспорить, и товарищ Евгений Рошаль, и Волков, оба баловались прямой записью в видеопамять. А раз так, смотреть надо код обработчика NMI.

Quest
20.10.2013, 23:34
Сначала смазал все ноги безотмывочным американским флюсом, потом отпаивал поочередно с помощью оловоотсасывателя, который посоветовал DrPass в соседней теме про ремонт. Конечно, не все прошло идеально гладко, некоторые ноги которые идут к большим дорожкам пришлось несколько раз припаивать-отсасывать, еще помогала оплетка для удаления припоя. Вообщем глаза боятся а руки делают -) Дороги не оторвал, оторвал только одну ногу на старом проце. Перввую ногу, которая как раз на толстую дорожку шла. Но и ее припаял потом аккуратно обратно к процу. Так что все обошлось без серьезных последствий.

А что за флюс, если не секрет ? У меня ФТС водосмываемый . Можно ссылку на тему или название оловоотсасывателя ? Тоже хочу попробовать проц на панельку поставить.
Можно наверное и феном отпаять ?

Tronix
21.10.2013, 00:08
Не вдаваясь в подробности, могу предположить, что в int 10h как раз все в порядке. Глючат-то отечественные программы, а иностранный Нортон работает нормально. А как советский программист обычно выводит символы, через BIOS, что ли? Да фигушки. Готов поспорить, и товарищ Евгений Рошаль, и Волков, оба баловались прямой записью в видеопамять. А раз так, смотреть надо код обработчика NMI.

Верно и не верно одновременно. Прямую запись в память я проверял - все ок. Так же проверил основные функции int 10h - тоже ок. Тут вот какая хитрость как мне кажется - по-идее когда мы вызываем int 10h обработчик если что-то двигает на экране (например скролит его вверх) должен заблокировать NMI и вызов обычных прерываний. Потому что я могу установить в таймере (08h или 1ch) обработчик, дергающий постоянно int 10h. Поэтому когда предыдущий вызов int 10h скролит экран вверх а у меня срабатывает по таймеру вызов int 10h, то он не должен сработать а должен дождаться отработки первого int 10h. Усугубляется все тем, что в обработчике int 10h есть рекурсивный вызов его же (некоторых функций), поэтому без цистерны спирта тут не разберешься.

Я покажу позже видео с шариком - простенький резидент, который садится на 1Ch (таймер) и выводит отскакивающий от углов экрана шарик (букву 'o'). Там юзается в основном ah=2 (установить курсор в заданные координаты), ah=3 (получить координаты курсора), ah=9 (печать символа), ah=8 (чтение символа по координатам). В общем все. Так вот, допустим у нас приглашение доса 'C:\>" посередине экрана. Запускаем эту прогу и все хорошо - шарик летает, все надписи на экране есть. Далее, вводим команду DIR, в каталоге много файлов, и начинается прокрутка экрана вверх, шарик все бегает и начинаются глюки.

Как мне кажется, происходит вызов int 10h, когда еще работает другой int 10h, возможно по какой-то причине NEC не блокирует NMI. Или 8088 из-за тормознутости не успевает вызвать пересекающийся int 10, а NEC из-за того, что быстрее - успевает. Либо же стоит строго запретить вызов прерываний в обработчике int 10h (CLI), но тогда возникает проблема с рекурсией в самом обработчике и надо нафиг все переписать с нуля ваще :\


А что за флюс, если не секрет ? У меня ФТС водосмываемый . Можно ссылку на тему или название оловоотсасывателя ? Тоже хочу попробовать проц на панельку поставить.
Можно наверное и феном отпаять ?

Флюс - AMTECH RMA-223-LF . Ссылка на тему: http://zx-pk.ru/showthread.php?t=15079 , там где-то предпоследние - последние страницы. Феном КРАЙНЕ НЕ РЕКОМЕНДУЮ! Ибо советские микросхемы насколько я знаю очень боятся перегрева. Раньше, когда отцы микросхемы паяли, я знаю юзали специальные теплоотводы, чтоб не дай бог не нагреть ее больше ~40 градусов. Отпаять-то возможно проц и отпаяется, но сколько погибнет микрух в его окружении - сие есть тайна.

DrPass
21.10.2013, 01:23
Верно и не верно одновременно. Прямую запись в память я проверял - все ок. Так же проверил основные функции int 10h - тоже ок. Тут вот какая хитрость как мне кажется - по-идее когда мы вызываем int 10h обработчик если что-то двигает на экране (например скролит его вверх) должен заблокировать NMI и вызов обычных прерываний.
Ну а как он может NMI заблокировать, если у этого аппарата на нем работа int 10h и построена? Он же из int 10h пишет в регистры CGA, и тут же вылетает в обработчик NMI для мимуляции работы видеоконтроллера.

Tronix
21.10.2013, 10:14
Короче вынос мозга полнейший. int 10h ничего сначало не запрещает, а даже наоборот - разрешает обычные прерывания (STI). Далее идет проверка на функции, и если они простые - типа определить координаты курсора и активную страницу - инфа передается в регистры и происходит нормальный выход из обработчика. А вот если нужно что-то нарисовать на экране, например символ - начинается полный треш и угар. Символ рисуется в памяти, из-за чего происходит вызов NMI, обработчик NMI в свою очередь смотрит что случилось и если кто-то работает с видео памятью вызывает функции int 10h для корректной обработки, затем возвращает управление в int 10h, int 10h в свою очередь возвращает управление в программу.

Tronix
21.10.2013, 13:43
Да, DrPass оказался прав. Все дело в прямом выводе в видеопамять.

---------- Post added at 13:43 ---------- Previous post was at 12:23 ----------

rep stosw - когда заполняю b800 одним символом - рисуется каждый первый. Каждый второй не рисуется. Потом, если переключить на 1 активную страницу и потом снова на нулевую - все символы отрисовываются нормально (то есть в памяти они по факту есть).

Смарю NMISER.ASM. IN AX,TRAP_A - пытается получить в AX адрес (смещение?) записавшегося байта. Далее там некоторые перетрубации с получением символа из памяти и его аттрибута, сравнение - текущая ли активная страница, вычисление смещения в выходном буфере и отрисовка символа.

Заремил сравнение текущая ли страница или нет (потому что если не текущая - выход из обработчика), конкретно указал что рисуем всегда символ 'O' цветом 7. Результат - все то же самое, вижу только нечетные 'O', четных на экране не вижу.
Кстати интересный момент - эмулятор SovietPC не честно работает. Он игнорит обработчик NMI и рисует изображение своими какими-то процедурами внутренними (возможно берет символы сразу с B800).

Отсюда вывод - либо на четных символах NMI вообще не вызывается, либо вызывается, но в AX получает рандом вместо корректного смещения. Особенность работы NEC V20 с командами stosb/stosw?

ivagor
21.10.2013, 14:26
Может такая особенность
"- V20 will resume 'rep' with instructions with segment override prefixes following interrupts, 8088 won't."
как то сказывается?
А вообще очень интересная тема.

Tronix
21.10.2013, 16:17
Может такая особенность
"- V20 will resume 'rep' with instructions with segment override prefixes following interrupts, 8088 won't."
как то сказывается?
А вообще очень интересная тема.

Да не, как я понимаю смысл в том, что оригинальный 8088 не может корректно работать с командами типа REP DS: STOSW, то есть когда вместо ожидаемого ES ему суют DS. А NEC V20 напротив - может.

Почему то либо NMI не вызывается после очередной записи в память, либо вызывается, но в порту 28h сидит неверный адрес записываемого байта. Отлаживать очень не удобно, нельзя пикнуть (ибо 61h порты), нельзя что-то вывести на экран (потому что произойдет рекурсия), нельзя писать в файл (потому что неведомо - загрузился дос или нет). И пост карту не всунешь в этот долбаный совьет-иса слот

---------- Post added at 16:17 ---------- Previous post was at 15:46 ----------

Может ли NEC при lodsw писать в память сразу 4 байта, если видит, что CX > 4 ?

Tronix
21.10.2013, 20:40
Не срабатывает "ловушка" адреса - порт 28h (TRAP_A). Простые тесты:


mov ax, 0B800h
mov es,ax
mov di,0
mov al,'O' ; буква O
mov ah,7 ; белым по черному
mov cx,1 ; один раз
rep stosw

in ax,28h
call PrintHexAX


В итоге в AX у нас 8000h . Че такое '8' я хз, но следующие 3 байта явно смещение, по которому произошла запись. Здесь все ок, все работает как ожидалось.


mov ax, 0B800h
mov es,ax
mov di,0
mov al,'O' ; буква O
mov ah,7 ; белым по черному
mov cx,2 ; два раза
rep stosw

in ax,28h
call PrintHexAX


Что в AX? Правильно - тот же 8000h, хотя очень бы хотелось видеть там 8002h по логике, потому что второй символ у нас записался в B800:0002.
Ну и в довершение:


mov ax, 0B800h
mov es,ax
mov di,0
mov al,'O' ; буква O
mov ah,7 ; белым по черному
mov cx,3 ; три раза
rep stosw

in ax,28h
call PrintHexAX


В AX у нас 8004h как и должно быть.

Из этого следует, что глюка в аппаратной реализации защелки адреса. Тут уж я умываю руки. В качестве великого костыля конечно можно при вызове NMI рендерить не один символ, а два сразу - текущий и соседний, но во-первых это дополнительное место нужно, во-вторых исходников 91 года биоса нет, а 89 года BIOS уж очень какой-то неказистый.

Quest
21.10.2013, 21:02
исходников 91 года биоса нет
где-то они должны-же быть...

b2m
22.10.2013, 09:48
Из этого следует, что глюка в аппаратной реализации защелки адреса.
Могу предположить, что у V20 тратится меньше тактов на каждый цикл rep stosw, а схема рассчитана на большее количество тактов, поэтому схема срабатывает лишь на каждый второй цикл. Либо из-за других таймингов.

Tronix
22.12.2013, 18:46
Кстати говоря, тут недавно узнал, что в XT скорость рефреша памяти устанавливает PIT i8253 канал 1. В поиске такая инициализация:


TIM_CTL EQU 43H ;Адрес порта управления таймером 8253
TIMER0 EQU 40H ;Адрес порта счетчика/таймера 0 8253

MOV AL,36H ;Установить режим 8253
OUT TIM_CTL,AL ;Таймер
XOR AL,AL
OUT TIMER0,AL ;Канал 0
OUT TIMER0,AL
MOV AL,76H
OUT TIM_CTL,AL
XOR AL,AL
OUT TIMER0+1,AL ;Канал 1
OUT TIMER0+1,AL


В Super PC/XT BIOS так:

mov al, 01010100b ; IC 8253 inits memory refresh
out 43h, al ; chan 1 pulses IC 8237 to
mov al, 12h ; DMA every 12h clock ticks
out 41h, al ; 64K done in 1 millisecond
mov al, 01000000b ; Latch value 12h in 8253 clock
out 43h, al ; chip channel 1 counter


Я вот подумал, может поиграться с инициализацией? Правда я пока не понимаю, что значат эти значения и как обращаться с каналом 1.

DrPass
04.05.2014, 01:53
Приехал ко мне NEC v20, тоже поставил в "Поиск". У меня картина в ЧекИТе куда забавнее получается. Нет, сам по себе NEC работает точно так же, и быстродействие тютелька в тютельку. И спецэффекты на экране одинаковые. Абсолютный треш начался, когда я с полки достал еще один Поиск, самый обычный, без каких-либо модификаций.
Вот, посмотрите и сравните с бенчмарками Tronix'а на первой странице треда:
http://i058.radikal.ru/1405/f5/640f345b0cb9t.jpg (http://radikal.ru/fp/e17dff05e6fe4f3ba7542f6d1dc92d0f)

---------- Post added at 00:53 ---------- Previous post was at 00:47 ----------

UPD: Мне, конечно, уже лень еще раз разбирать Поиск с NEC v20, чтобы обратно поставить туда ВМ88 и замерить его быстродействие... Но надо будет завтра попробовать. У Поиска с полки есть важное отличие, он на 128К, и остальная память находится в адаптере В108. Есть подозрение, что он тупо быстрее работает чем Поиск с 512К. Например, за счет того, что у 512К за доступ к большей части памяти конкурирует видеоадаптер, а у 128К она автономная. Если так, то это сама по себе нехилая прибавка в скорости, получается, модель 128К со внешней памятью этак на 20% быстрее, чем модель на 512К

Tronix
04.05.2014, 10:31
Отличия в скорости однозначно есть между Поиск-128 и Поиск-512. Я особо не заморачивался, но по моим ощущениям Поиск-512 работает быстрее, нежели Поиск-128.

Было бы интересно побороть глюк с экраном....

---------- Post added at 10:31 ---------- Previous post was at 10:20 ----------

А ведь еще наверно можно оверклокнуть тот же NEC на ~8MHz или на 10MHz. Вопрос в том, достаточно ли будет подать на проц удвоенный клок или нужно всю схему гнать?

DrPass
04.05.2014, 12:07
А ведь еще наверно можно оверклокнуть тот же NEC на ~8MHz или на 10MHz. Вопрос в том, достаточно ли будет подать на проц удвоенный клок или нужно всю схему гнать?

Я уже попробовал :) Просто так не работает, очевидно, где-то рассинхронизация сигналов идет. У NECа, кстати клок имеет скважность 1/2, а у ВМ88 - 1/3, этот момент нужно иметь в виду, когда делаешь замену одного на другой. Кстати, это еще теоретически может влиять на диаграмму управляющих сигналов, которые выдает процессор, и быть причиной того, что проц "опережает" срабатывание защелки TRAP.


---------- Post added at 11:07 ---------- Previous post was at 11:05 ----------


Отличия в скорости однозначно есть между Поиск-128 и Поиск-512. Я особо не заморачивался, но по моим ощущениям Поиск-512 работает быстрее, нежели Поиск-128.


У меня вот строго наоборот получилось, Поиск-512 показывает 212 дристунов, а Поиск-128 аж 256 дристунов.

Tronix
04.05.2014, 13:04
У NECа, кстати клок имеет скважность 1/2, а у ВМ88 - 1/3, этот момент нужно иметь в виду, когда делаешь замену одного на другой. Кстати, это еще теоретически может влиять на диаграмму управляющих сигналов, которые выдает процессор, и быть причиной того, что проц "опережает" срабатывание защелки TRAP.

Это где-то в документах написано? Я этой инфы не нашел.. Кстати, есть у меня "чипсетная" мать XT (http://habrastorage.org/files/94d/e1f/e76/94de1fe764ff44fdb5fc7fa8b66a67d2.jpg), так там даж специальный джампер есть выбора 8088 или NEC V20. Увы, что он делает остается только гадать, ибо вся логика упрятана в тот самый "чипсет".

А "скважность" это типа у всех сигналов с проца получается? Как же тогда вообще вся схема работает... Может быть для адреса например сделать "удлинялку" импульсов?

---------- Post added at 13:04 ---------- Previous post was at 12:46 ----------

Или даже не адресные линии, а сигнал выставления адреса на шину. Блин, осциллограф бы здорово помог конечно. Ну и доки по 8088 надо читать, вдумчиво. Я то бегло просто просматривал, большую часть не стараясь понять. Нужно видимо будет еще раз перечитать уже с осмыслением.

DrPass
04.05.2014, 13:22
Это где-то в документах написано? Я этой инфы не нашел..

Про NEC я смотрел в его даташите, в разделе AC Characteristics, параметры Clock pulse high-level width и Clock pulse low-level width. Цифры там одинаковые стоят. А про ВМ88 - в ТО к самому "Поиску" было.

---------- Post added at 12:22 ---------- Previous post was at 12:18 ----------



А "скважность" это типа у всех сигналов с проца получается? Как же тогда вообще вся схема работает... Может быть для адреса например сделать "удлинялку" импульсов?[COLOR="Silver"]

Нет, он выходные сигналы сам формирует. Я, к сожалению, не знаю, как скважность тактового пульса вообще влияет на работу процессора. Возможно, переключение каких-то внутренних схем реализовано по переднему фронту, а каких-то - по заднему фронту пульса.

pilgrim
04.05.2014, 13:54
На счёт скорости ОЗУ. Если не ошибаюсь, то это была программа testozu. Когда тестировал память на 128кБ поиске с блоком В107, то при поблочной проверке быстродействия ОЗУ, в результате доп. память показала большее быстродействие чем ОЗУ ПК. Возможно, это связано ещё с тем, что внешний блок ОЗУ работает на других частотах и время от времени удаётся производить 2 операции за один цикл разрешения обращения к ОЗУ ПК. Судя по схемотехнике, во время цикла регенерации (он же цикл вывода видеоданных) выдаётся сигнал неготовности ОЗУ, который также запрещает работу и внешнего ОЗУ.

Tronix
04.05.2014, 15:10
Ну это понятно, что при цикле вывода видеоданных выдается сигнал неготовности ОЗУ, иначе бы была странная картинка на экране. Вопрос в том, как работает защелка адреса при выводе инфы в видеопамять. Ну то есть понятно, что РТ5 смотрит куда идет обращение и в соответствии с адресом дальше по схеме. Но почему один адрес срабатывает, а второй нет... Посмотреть бы на сигналы возле и после РТ5 на обоих процах при записи в 0xB800....

Коплю на осциллограф :(

pilgrim
04.05.2014, 15:40
Ну это понятно, что при цикле вывода видеоданных выдается сигнал неготовности ОЗУ, иначе бы была странная картинка на экране. Вопрос в том, как работает защелка адреса при выводе инфы в видеопамять. Ну то есть понятно, что РТ5 смотрит куда идет обращение и в соответствии с адресом дальше по схеме. Но почему один адрес срабатывает, а второй нет... Посмотреть бы на сигналы возле и после РТ5 на обоих процах при записи в 0xB800....

Коплю на осциллограф :(
За цикл чтения/записи ОЗУ ПК, цикл регенерации, управление защёлкой видеопамяти и готовность ОЗУ ПК отвечает (формирует) исключительно РЕ3. А сами запись/чтение производятся, только тогда, когда с РТ4 есть сигнал разрешения обращения к ОЗУ. Т.е. РЕ3 в цикле всё время формирует процесс записи/чтения, затем цикл регенерации ОЗУ и вывода видео независимо есть ли или нет обращение к памяти, а сигналы записи и чтения доходят до ОЗУ только в случае разрешающего сигнала с РТ4.

Лучше логический анализатор.

Tronix
04.05.2014, 15:57
Лучше логический анализатор.

Можно. но я не могу никак выбрать из клонов USBee. Уже с месяца два смотрю на всякие, но так и не выбрал... Лог анализатор конечно в цифровой технике больше нужен, но и осциллограф тоже хочется. Может посоветуете что-то? Начать хочу с малого, то есть с лог анализатора на 8 каналов, до ~10Mhz. Ибо я не знаю, что должна показывать стрелка у осциллографа, ну только в теории предполагаю. Рано мне еще за такие приборы браться. Я, как уже не раз говорил, в схемотехнике и электронике ноль полный.

pilgrim
04.05.2014, 16:28
Наиболее оптимальные по цене/практичности:
http://molotok.ru/atten-ads1102cal-2ch-100mhz-1gsa-oscillograf-i4192894495.html
http://molotok.ru/atten-ads1102c-2ch-100mhz-500msa-oscillograf-i4196078324.html
У меня второй, меня устраивает.
Анализаторы:
1. http://molotok.ru/logicheskij-analizator-saleae-24mhz-8-kanalov-i4204687048.html
2. http://www.seeedstudio.com/depot/open-workbench-logic-sniffer-p-612.html?cPath=63_69
Оба анализатора у меня в наличии есть. Оба меня устраивают.
Отдельно покупал щупы (до 10 МГц они работают более или менее нормально):
http://molotok.ru/logicheskij-analizator-24m-8-kanalnyj-shchupy-i4201845063.html

DrPass
04.05.2014, 16:32
Судя по схемотехнике, во время цикла регенерации (он же цикл вывода видеоданных) выдаётся сигнал неготовности ОЗУ, который также запрещает работу и внешнего ОЗУ.

Интересно бы посмотреть, какой период регенерации стоит у В108 и у самого Поиска. Подозреваю В108 ведь не привязан к контроллеру дисплея, и там может быть даже период регенерации равен 8 мс, все-таки РУ7 как-никак.

pilgrim
04.05.2014, 16:41
Интересно бы посмотреть, какой период регенерации стоит у В108 и у самого Поиска. Подозреваю В108 ведь не привязан к контроллеру дисплея, и там может быть даже период регенерации равен 8 мс, все-таки РУ7 как-никак.

На прямую не завязан, но, в отличие от В107, у них общие такты, т.е. как не крути - они синхронизированны. А на счёт количества тактов на цикл регенерации - надо по счётчикам посчитать и понять есть ли разница или нет.

DrPass
07.05.2014, 02:30
Кстати говоря, тут недавно узнал, что в XT скорость рефреша памяти устанавливает PIT i8253 канал 1. В поиске такая инициализация:
...
Я вот подумал, может поиграться с инициализацией? Правда я пока не понимаю, что значат эти значения и как обращаться с каналом 1.

Ковыряю сейчас очередной дохлый Поиск, как раз до памяти добрался. Нифигашечки, тут все не как в ХТ. Первый канал таймера у него запускает IRQ6, на котором висит подпрограмма ощупывания клавиатуры. А регенерация памяти, похоже, целиком "захардкоденная". На счетчик D38 поступает тактовый пульс 15МГц, он по нему перебирает адреса РЕшки D41, РЕшка выдает когда надо RAS, CAS и WE. Если проц захотел доступа к памяти, строб RAM SELECT через триггер попадает на А4 той же РЕшки, и сигналы на ее выходах переключаются в режим, соответствующий циклу процессора.

Tronix
03.06.2014, 09:23
Интересно, откуда разработчики Поиска черпали знания? Неужели не копипаста а своя оригинальная разработка? Чем больше на него смотришь, тем больше складывается ощущение, что так оно и есть...

DrPass
03.06.2014, 10:44
Интересно, откуда разработчики Поиска черпали знания? Неужели не копипаста а своя оригинальная разработка? Чем больше на него смотришь, тем больше складывается ощущение, что так оно и есть...

Разработка, судя по всему, честная своя. Хотели сделать похожее на IBM, но чтоб по минимуму дорогих микросхем.

Tronix
31.10.2015, 16:37
Сегодня немного исследовал Поиск на предмет не прорисовки каждого второго байта с V20. Для этого взял родной BIOS, из которого выкинул монитор и работу с кассетой, а вместо этого после всей инициализации сделал тестовую программку - записывает один символ в видео-память, ждет пару секунд, записывает два символа в видео-память, ждет пару секунд и так по кругу. Такого плана:


again:
MOV DX,01
CALL BEEP_ERROR
mov ax, 0B800h
mov es,ax
mov di,0
mov al,'1' ; буква 1
mov ah,7 ; белым по черному
mov cx,1 ; один раз
rep stosw

mov cx,200
call delay_pit

MOV DX,02
CALL BEEP_ERROR
mov ax, 0B800h
mov es,ax
mov di,160
mov al,'2' ; буква 2
mov ah,7 ; белым по черному
mov cx,2 ; два раза
rep stosw

mov cx,200
call delay_pit

jmp again


Смотрел сигналы IO/M- (признак обращения к памяти), TRAPSEL - это после дешифрации адреса РТ5 и дальше TRAPL, TRAPH и TRAPDAT после ИД7 уходящие на регистровую память для защелок адреса и данных. Вот так выглядит запись одного байта в приближении:

http://habrastorage.org/files/47d/963/de9/47d963de90d6454faa2db65c712885d9.png

IO/M стал высокий (идет доступ к памяти), РТ5 видит что доступ к памяти и адреса совпали с B8000, дешифровала TRAPSEL, ИД7 в свою очередь защелкнула сначала младший байт на шине адреса, затем старший. Все понятно.

Дальше полный цикл для обоих процов NEC V20 и 8088. Полный цикл - запись одного байта, ожидание, запись двух байт. Это 8088:

http://habrastorage.org/files/051/439/394/05143939457e47358726b23057190750.png

Это V20:

https://habrastorage.org/files/b9c/0d6/2d2/b9c0d62d23f744cf950832d8f5fb814d.png

В целом - все очень похоже, за исключением TRAPSEL, который на 8088 проце активно живет, а на V20 не очень. Но нас интересует момент записи двух байт сразу. Это вторая "черточка" из TRAPL и TRAPH на рисунках. Приближаем:

Это 8088:

http://habrastorage.org/files/e0b/55c/2b5/e0b55c2b5c2545a88802e4d5fdc2ec2f.png

Сначала адрес первого байта защелкнули, потом адрес второго байта. Все четко.

А это уже V20, то же место:

http://habrastorage.org/files/330/9f1/0d6/3309f10d612d4598a97501d0657e4182.png

Адрес первого байта защелкнули, а дальше... - а дальше ничего. Самое удивительное, что IO/M- дальше не сработал. Соотвественно РТ5 и не рыпнулась даже, и как следствие ни адрес ни защелкнулся, ни NMI не вызвалось. Просто тупо игнор.

Не понимаю :(

Tronix
01.11.2015, 18:42
Чего-то я немного не туда походу смотрю... РТ5 дешифрует адреса портов ввода-вывода, соответственно сигнал /TRAPSEL формируется когда идет обращение к портам 28,29,2ah. И сигнал IO/M когда 1 - это признак обращения к портам I/O. А при записи в память адреса дешифрует РТ4, которая формирует сигнал /CRTIOM (при чем ей помогает РТ5(?)). Вот дальше я немного не понял. Ну дешифровали, что запись идет в B8000h, сформировался сигнал /CRTIOM. Дальше по идее нужно защелкнуть адрес в защелках TRAPL, TRAPH и вызвать NMI. Но по схеме я что-то не отслеживаю, как может адрес защелкнуться при /CRTIOM. NMI - да, должен вызваться... Короче ну нафиг.

---------- Post added at 18:42 ---------- Previous post was at 18:32 ----------

Аааа, /CRTIOM похоже формирует через мультивибратор NMI, и по этому же сигналу защелкивается адрес в защелках 28,29h. Дальше проц уходит на обработку NMI и уже обращаясь к портам 28-29 читает получившийся там адрес.. Так что ли. Тогда щаз посмотрю сигналы /CRTIOM и NMI...

Tronix
01.11.2015, 20:49
Посмотрел, когда два байта пишутся - нет во втором случае сигнала /CRTIOM, соответственно нет и NMI. На этом все пока. Может быть спустя какое-то время возьму 16-канальный анализатор, буду снифать адреса и данные. Иначе не понимаю что происходит.

piroxilin
02.11.2015, 01:03
Tronix, Могу дать погонять китайский 16канальный Saleae.
16 каналов будут на 16мгц сэмплиться.
Всёравно пока без дела лежит.
Забирать на м.калужской, как обычно :)

Tronix
02.11.2015, 22:34
Tronix, Могу дать погонять китайский 16канальный Saleae.

Спасибо, но наверное пока не нужно. У меня на работе тоже есть 16-ти канальник, какой-то злой, на ПЛИС, очень большие мегагерцы может снифать. Если что его возьму....

Просуммирую мысли, в кратце, чтобы самому не забыть:

У Поиска есть две области видео-памяти по 16Kb каждая, отображаться на экране может одна из них. В графическом режиме отображается B800h, в текстовом - отображается BC000h, содержащая графическое представление текстовых символов из B800h. Происходит это в моем понимании примерно так: когда установлен текстовый режим, при записи символа в видео-память B800h срабатывают ловушки адреса (регистры-защелки), которые запоминают, по какому адресу произошла запись. Дальше вызывается обработчик NMI, который в свою очередь читает из портов 28h и 29h значение адреса (из регистров-защелок), по которому произошла запись, и отрисовывает символ в видимой графической области BC000. Сам код символа записывается в B8000h.

За отслеживание, что запись происходит в видео-память отвечает РТ4 (с небольшой помощью РТ5?), при удачной дешифрации формирующая сигнал /CRTIOM. Дальше этот сигнал вместе с некоторыми другими запускает мультивибратор, который дает длинный импульс NMI (не менее пяти тактов, наверное).

http://habrastorage.org/files/50c/ac9/dfd/50cac9dfde0c4f76b0c0edcccad0837b.png

По сигналу NMI происходит защелкивания текущего адреса в регистры-защелки:

http://habrastorage.org/files/00a/ca3/494/00aca3494d0d4c758680b341044139a6.png

Ну и дальше проц должен уйти на обработчик NMI, который прочтет из портов 28h,29h адрес куда писался байт и отрисует его графическое представление в отображаемый экран BC000h. Дешифрует порты РТ5, формируя сигнал /TRAPSEL, который потом разделяется на 28h (TRAPL),29h (TRAPH) и 2ah (TRAPDAT) с помощью ИД7.

Так вот, когда идет запись двух байт (mov cx,2; rep stosw), первый байт - есть сигнал /CRTIOM, затем длинный NMI и затем уже /TRAPSEL, TRAPL и TRAPH. А вот второй байт - нет сигнала /CRTIOM, соответственно нет и всего остального. Такое ощущение, что "проскакивает" он.

DrPass
02.11.2015, 23:30
Я щас глянул даташит на NEC v20, увидел интересный момент. У него скважность CLK по спецификации равна двум. А на Поиске-то она равна трем. Учитывая, что переключение шин процессора происходит скорее всего по фронту сигнала, это действительно может вызывать подобную хрень.

bigral
03.11.2015, 04:12
похоже что /trapsel на v20 кривой изза другого поведения /inta? либо изза другого состояния на шине в момент формирования /trapsel

Tronix
03.11.2015, 07:49
Не доходит дело до /TRAPSEL. Это я неправильно смотрел. Сначала должен сформироваться сигнал /CRTIOM, чтобы вызвать NMI и по этому же сигналу (NMI) защелкнуть текущий адрес на шине адреса в ИР23. А /TRAPSEL уже потом, его процедура обработки NMI формирует для доступа к портам 28,29h, из которых она узнает по какому адресу произошла запись. Так дело до NMI не доходит, так как нет /CRTIOM

А /CRTIOM дешифруется просто с шины адреса... Неужели на шине адреса не выставляется адрес по какому происходит запись в память? Но этого же не может быть, иначе бы вообще ничего не работало. Да и потом, физически, запись в B800h происходит, то есть байты там появляются (в памяти). Значит все-таки проц работает нормально, и адреса выставляет нужные на шину. Только если РТ4 не успевает сработать из-за короткого CLK?

Есть другая безумная идея - сделать свой дешифратор на мелкой ПЛИС для сигнала /CRTIOM и сравнить с текущим дешифратором. Если у меня сигнал будет формироваться, а у Поиска нет - то скорее всего дело в РТ4(и РТ5?). С другой стороны, как же работают остальные сигналы /PROMSEL (доступ к ПЗУ) и /RAMSEL (доступ к RAM)... Не понимаю.

Tronix
03.11.2015, 20:49
Хммм... Уставшим взглядом после работы посмотрел опять на схему дешифратора и увидел, что кроме адресов и DT/R по входу еще присутствует сигнал /NMIDIS.


Формирование сигнала немаскируемого прерывания произво-
дится при записи данных в буфер дисплея B8000Н - BBFFFН
только при наличии сигнала разрешения NMIDISABLE (потенциал
низкого уровня на выводе 1 микросхемы D42).


Рулится програмно, через 68h порт бит 3...


----------------------------------------------------
Порт ввода-вывода 68Н
----T-------------------T---------------------------
N ¦Наименование ¦ Назначение
бита¦сигнала управления ¦
----+-------------------+---------------------------
0 ¦ R (Red) ¦
----+-------------------+Цвет изображения и фона
1 ¦ G (Green) ¦
----+-------------------+
2 ¦ B (Blue) ¦
----+-------------------+---------------------------
3 ¦ NMI DISABLE ¦Запрет/разрешение формиро-
¦ ¦вания немаскируемого
¦ ¦прерывания
----+-------------------+---------------------------
4 ¦ PALETTE ¦Цветовой выбор (палитра)
----+-------------------+---------------------------

- 32 -
5 ¦ I (INTENS) ¦Интенсивность изображения
¦ ¦и фона
----+-------------------+---------------------------
6 ¦ DISPLAY BANK ¦0/1 страница видеопамяти
----+-------------------+---------------------------
7 ¦ HIRES ¦Графика высокого/среднего
¦ ¦ разрешения


Вот его бы интересно взглянуть. Пока что-то не найду на схеме...

pilgrim
04.11.2015, 01:33
Хммм... Уставшим взглядом после работы посмотрел опять на схему дешифратора и увидел, что кроме адресов и DT/R по входу еще присутствует сигнал /NMIDIS.



Рулится програмно, через 68h порт бит 3...


----------------------------------------------------
Порт ввода-вывода 68Н
----T-------------------T---------------------------
N ¦Наименование ¦ Назначение
бита¦сигнала управления ¦
----+-------------------+---------------------------
0 ¦ R (Red) ¦
----+-------------------+Цвет изображения и фона
1 ¦ G (Green) ¦
----+-------------------+
2 ¦ B (Blue) ¦
----+-------------------+---------------------------
3 ¦ NMI DISABLE ¦Запрет/разрешение формиро-
¦ ¦вания немаскируемого
¦ ¦прерывания
----+-------------------+---------------------------
4 ¦ PALETTE ¦Цветовой выбор (палитра)
----+-------------------+---------------------------

- 32 -
5 ¦ I (INTENS) ¦Интенсивность изображения
¦ ¦и фона
----+-------------------+---------------------------
6 ¦ DISPLAY BANK ¦0/1 страница видеопамяти
----+-------------------+---------------------------
7 ¦ HIRES ¦Графика высокого/среднего
¦ ¦ разрешения


Вот его бы интересно взглянуть. Пока что-то не найду на схеме...

D72.1 вв55

Tronix
07.11.2015, 21:26
Вообщем, пока форум лежал, решил проконсультироваться тут: http://www.nedopc.org/forum/viewtopic.php?f=87&t=11189 . В итоге, были проведены ряды экспериментов: я записывал по кругу цифру "1" (mov cx,1; rep stosw) на экран и два раза цифру "2" (mov cx,2; rep stosw). В самом обработчике NMI вывожу содержимое из регистров-защелок (in ax,28h), затем значение по этому адресу в памяти символа и его аттрибута (CHR: ) и значение по этому адресу плюс два (CHR+2). Поведение на 8088 предсказуемо:

http://hsto.org/files/e30/ec7/e08/e30ec7e082394220bc5459be90932a4d.JPG

А вот V20:

http://hsto.org/files/151/2e7/cbf/1512e7cbf93d41f8b66a0225d8dd0e07.JPG

Выяснилось, что при операции прямой записи в память типа MOV CX,2; REP STOSW попадая в NMI для обработки первого символа в памяти уже находится и второй символ!

Такие дела... В итоге взял исходники BIOS 89 года, которые есть везде, и попробовал сделать следующее - при в ходе в NMI взять из стека адрес CS:IP предшествующей команды и сравнить ее на наличие префикса REP (0xF3). Если есть - значит мы попали в NMI в разрыве между REP xxxx, и значит нужно рендерить сразу два символа - текущий и по адресу текущий+2. Но пришлось сделать две проверки - когда CX=2 и rep stosw, то я получаю в NMI уже опкод команды, следующей за rep stpsw. Поэтому для такого случая приходится проверять es:[bx-2]. С другой стороны, когда CX=1 и rep stosw, я здесь зря отрисую два символа. Когда CX=3, должно сработать первое условие es:[bx].

Скомпилил и тут же словил первый баг - не правильно распознавался объем RAM. Вместо 480Кб дос рапортовала о 306Кб вроде, и CheckIt не запускался, ругаясь на нехватку памяти. Переписал процедуру определения RAM. Скомпилял. Запустил VC - работает как надо. Запустил тесты в CheckIt - ну.... снизилась видео-скорость конечно... 430 bios speed и 822 direct speed. Ну и вообще, биос 89-ого года из сорцов - уж очень ранний, что-ли. Багов много - не правильно настроена клава. Клавиша ESC - это F1, F2 - это F1, нельзя нажать Ctrl+L, потому что Ctrl - это вроде бы Alt и тд. Странно отрисовываются инверсные цвета, не так как в биосе 91-ого года (когда фон белый а сам символ черный). Не полностью работают CGA-порты, особенно на чтение, поэтому Принц Персии не запускается и ругается на отсутствие видеоадаптера. И это только на первый взгляд. Ах да, я еще выпилил полностью работу с кассетой, а то мне места не хватало. Но на всякий случай выложу здесь, в прикрепленном файле с исходниками.

А так можно попробовать подменять NMI из-под доса резидентом...

Tronix
09.11.2015, 07:55
впилил дезассемблированную обработку сканирования клавиш из биоса 91-ого года. Теперь клавиши начали соответствовать своей раскладке на клавиатуре (ESC - это ESC, F1 - это F1 и тд), начали срабатывать комбинации Ctrl + буква, начал включаться синий фон при нажатии правого Ctrl (переключение на русский). Однако само переключение не происходит, символы по прежнему печатаются английские, и не выключается синий фон повторным нажатием на правый Ctrl. Видимо что-то еще там не того, наверное еще и int9 надо менять... Но все равно, уже гораздо лучше, по сравнению с самым первым вариантом.

Итого, уже пофикшено:
1) Правильное определение количества набортной памяти. По умолчанию сильно занижал, например на реальных 480Кб дос рапортовала о ~306Kb. Не стал разбираться, а переписал функцию. Сделал вывод на экран количества памяти (места много, так как выкинул кассетные функции).
2) Нормальный вывод символов, с инверсными аттрибутами. Volkov Commander стал выглядеть так-же, как и на биос 91-ой версии
3) Частично заработала клавиатура. Описано выше. Изменен SCANINT2.ASM. Старый сохранен как SCANINT2.A__

Что еще надо сделать:
1) Клавиатура - описано выше (русские символы, убирание синего фона при повторном нажатии пр. Ctrl)
2) Впилить более корректную обработку CGA портов в NMI, в том числе вроде в 91-ой версии есть возможность читать значения из CGA портов, а не только их туда писать. Добится запуска принца персии.
3) Посмотреть что с курсором - он не убирается, когда его выключают, хотя вроде бы функции такие в 89 биосе есть.
4) Посмотреть что с переключением видео-страниц. При тестировании видеостраниц в Checkit происходит не пойми что.
5) Шрифт - взять из 91-ой версии, потому что мне он больше нравится. Различаются начертанием кодов >127
6) Ну и по мелочи, оптимизация, приведение кода в человеческий вид...

Вот такие планы...

Копейкин
09.11.2015, 10:55
Спасибо, Tronix!

Самому очень хочется заняться BIOSом, да времени катастрофически не хватает.
А нет ли у Вас в планах - знакогенератором заняться?
Привести к привычному виду символы псевдографики?

Tronix
09.11.2015, 13:14
Привести к привычному виду символы псевдографики?

Что имеется ввиду?

Копейкин
09.11.2015, 13:42
Что имеется ввиду?
А чем вызвана неприятная полосатость строки команд Нортона и прерывистость бордюра?
Ваши скриншоты на первой странице этой темы.

Tronix
09.11.2015, 20:17
А чем вызвана неприятная полосатость строки команд Нортона и прерывистость бордюра?
Тем, что у Поиска шрифт, фактически, 7x8 а не 8x8 как у нормальных людей. Ну то есть формально то он 8x8 конечно, да вот только первый бит (или последний, смотря откуда смотреть) отвечает за цветовой признак - либо белые пиксели, либо лиловые (зеленые). Например возьмем черточку (минус):

00000000
00000000
00000000
01111111
01111111
00000000
00000000
00000000

Вот она в таком виде - белая. В таком:

00000000
00000000
00000000
11111111
11111111
00000000
00000000
00000000

- лиловая. И если в шрифте она так и записана, то белой она уже не станет. Будет всегда лиловой.

Копейкин
09.11.2015, 20:29
Спасибо за детальное изложение, я так глубоко видеоконтроллер Поиска не копал.
Чтобы полностью всё осознать, Вы не расскажете - это аппаратно реализовано?
Или можно программно привести в соответствие?
Ведь в видеорежиме 3 отдельно коды символов, отдельно атрибуты должны быть...

Tronix
09.11.2015, 21:03
Спасибо за детальное изложение, я так глубоко видеоконтроллер Поиска не копал.

Я то же не копал. Все время как хочу - вылазят столько нюансов, что я опять запутываюсь и все по новой. Поэтому все что дальше - мое имхо. Поиск работает всегда в графическом режиме, текстового у него нет. При этом в графическом режиме высокого разрешения 640x200 он может работать в двух вариантах: 1) когда каждый байт раскладывается на 8 бит и каждый бит трактуется как черный или белый. То есть обычный графический ч/б режим. И второй вариант - когда каждый байт трактуется как первый бит - наличие дополнительного цвета за последующими 7 битами. Таким образом в этом режиме может быть отображено 3 различных цвета (черный,белый,лиловый), но с потерей каждого первого бита в каждом байте. Это аппаратно так.

Как-то так.

Tronix
15.11.2015, 19:40
Поборол лень и впилил все-таки дизассемблерные обработчики int 10h, int 9h, scanint и int16h из биос 91-ого года. Да, в BIOS 91 года отличия большие, по сравнению с имеющимися сорцами...

Клава - они полностью переписали обработчик scanint (который сканирует клаву). int 9h - почти байт-в-байт совпал с имеющимися сорцами BIOS от Поиск-2. Таблицу перекодировки русских букв вынесли из scanint в int 16h. И теперь это стало реально таблицей маленьких и больших букв, а раньше была маленькая табличка плюс куча условий в scanint. Меняют при нажатии на правый ctrl фон на синий, в 89 этого нет. Короче изменения внушают.

Видео - тоже они здорово переделали int 10h. Обработчики не совпадают, поэтому просто подгонял дизассемблерный листинг с правкой констант. Теперь курсор вменяем. NMI добавил чуть-чуть чтения портов, Принц персии стартует. Остальное надо проверять и доделать чуть-чуть.

Так что основные фишки из 91-ого биоса перенесены. Потестирую, если все ок, оставлю...

Копейкин
16.11.2015, 10:51
Спасибо Вам огромное.
А в этом варианте БИОСа поддерживается клавиатура 89 или 91 года?
Там вроде по разному было сделано.

Tronix
21.11.2015, 18:42
Спасибо Вам огромное.
А в этом варианте БИОСа поддерживается клавиатура 89 или 91 года?
Там вроде по разному было сделано.

В этом варианте клавиатура 91-ого года теперь (раньше была 89-ого).

Вообше, немного подоптимизировал NMI, int 10h... Скорость видео с оригинальным процессором 1810ВМ88 я показывал на первой странице, но вот еще раз:
http://hsto.org/storage3/2e8/28d/440/2e828d440051b6621e882ab36099600e.jpg

А это скорость видео с оптимизацией обработчика NMI и функций вывода символов из int 10h (табличное умножение). Процессор тот же - 1810ВМ88:
http://habrastorage.org/files/21b/c33/820/21bc3382077849d28d77166b49e59409.JPG

В обработчике NMI есть деление, а оно, как известно, происходит долго. Ради эксперимента попробовал заменить деление табличкой, но жертвуя 4 Кб оперативной памяти. То есть, если у Поиска 480Кб - будет 476Кб, если 96Кб - будет 92Кб соответственно. Это задается дефайном OPTIMIZE_DIV в BIOS.ASM. Вот с включенной оптимизацией на родном проце 1810ВМ88:
http://habrastorage.org/files/eca/f74/256/ecaf742563774ab5ab8652024249f39c.JPG

Что касается NEC V20 - то скорости тоже пропорционально возросли.

blackmirror
25.11.2015, 10:43
Всем добрый день!
В документации на "поиск" встретил упоминание, что процессор для доступа к памяти получает только 8 тактов из 16, и при частоте 15МГц это даёт скорость доступа 937500 операций в секунду. Не знаю, успевает ли он за эти 8 тактов прочитать или записать два байта или только один, но очевидно, что скорость памяти является главным тормозом. То есть, чем меньше читается кода и обращений к памяти, тем лучше. При дальнейшем развитии данной мысли, был написан обработчик NMI, который сначала жил в загрузочном секторе, а когда стало очевидно, что для разных текстовых режимов желательно иметь разные обработчики, переселился в COM-файл. Для ускорения рисования обе половины шрифта были положены рядом, чтобы не работать с указателями. Для режима 80 символов обрабатываются 2 бита атрибутов - инверсия и альтернативный цвет, они преобразуются в XOR-маску, это не совсем то, что делает биос, но его логику я не особо уловил, да и можно сделать преобразование по таблице и без проблем добавить третий признак - подчеркивание в альтернативном цвете, что позволит выводить на экране 8 различных начертаний символов. Для режима 40 символов вывод в режиме XOR отсутствует, что с ним делать в текстовом режиме не особо ясно, а графические режимы я не делал. Основная идея оптимизации была в том, чтобы снизить расход времени в NMI на сохранение регистров, для этого строки экрана были поделены на блоки по 8 или 16 символов. Обработчик NMI сохраняет регистр AX, читает куда записан символ, и если это тот же блок, то ничего не делает. Рисование блока будет произведено целиком, когда символы начнут выводиться в новый блок. Хорошо бы еще учитывать какие реально символы выводились, а незаконченный блок рисовать в обработчике прерывания от таймера, но пока этого не сделано. Для режима 80 символов блоки рисуются по 2 символа сразу. Для режима 40 символов сначала была добавлена табличка на 512 байт, для конвертирования шрифта, потом был сделан конвертированный шрифт в 4К, ну а в fast_nmi в целях эксперимента было сделано 12 копий шрифта для всех несовпадающих комбинаций цвета символа и фона. Еще был сделан resident, который должен ускорить рисование символов в других программах, но это относится только к программам, пишут напрямую в память. В NC при нажатии Ctrl+O, панельки скрываются вроде бы быстрей, а вот обратно видимо перечитывается список файлов с дискеты. Checkit зачем-то перехватывает int2, и реальную скорость рисования символов занижает раза в полтора, resident востанавливает int2 по таймеру, но checkit не работает в эмуляторе, поэтому, если у кого есть возможность - просьба проверить на реальном железе. Результаты в эмуляторе такие:
bios vs fast_nmi vs resident
268 vs 3406 vs 2909
1284 vs 4091
Если вернуться к варианту с таблицей в 512 байт, то в режиме 25x40 скорость упадёт раза в два, это тоже существенно быстрее, но упихать такую таблицу в ПЗУ будет не просто. А пока образ дискеты с тестовыми версиями:
55014

Копейкин
25.11.2015, 11:03
В документации на "поиск" встретил упоминание, что процессор для доступа к памяти получает только 8 тактов из 16, и при частоте 15МГц это даёт скорость доступа 937500 операций в секунду.
Вы учтите такой момент, что процессор Поиск-1 работает на частоте 5МГц, причём цикл обращения к шине, если не было wait stat'тов, занимает 4 такта. Поэтому регенерация/вывод на экран должны быть "прозрачны" для процессора. Другое дело, что программная эмуляция режимов адаптера занимает много времени, это да.

blackmirror
25.11.2015, 12:15
Копейкин
Не знаю, насколько регенерация памяти и видеосистема притормаживают процессор, интересно бы посмотреть диаграммы, но реального железа у меня нет. Если исходить из соображений, что простые инструкции занимают 2-3 байта, делают одно обращение к памяти или работают с регистрами, и в среднем читается/записывается 3 байта на 1 инструкцию, то память ограничивает производительность процессора на уровне 300000 команд в секунду. Если это поделить на 854 символа в секунду из результатов checkit, то получается 351 тактов, что несколько дофига. Чтобы нарисовать символ нужно вычислить смещение на экране, смещение в шрифте, маску для атрибутов, прочитать и записать 8 байт для режима 25x80. Если выделить по 10 команд на вычисление смещений, атрибутов, еще по 10 на чтение, наложение маски и запись, получается около 60 полезных команд, все остальные команды пользы для рисования символов не приносят. Сохранение регистров - еще 20 команд неизбежного зла, но если разбить экран на блоки можно за 10 команд убедиться что символ попадает в текущий блок и отложить его рисование на потом. Когда мы будет рисовать блок, эти 10 команд можно отыграть за счёт того, что не нужно вычислять смещение на экране для всех символов блока. То есть в теории, рисование одного символа команд за 60 одолеть можно. На практике ускорения в 351/60 мы не получаем, но в 3 раза ускорение для режима 25х80 получить можно без особых затрат. Для режима 25x40 можно получить ускорение в 5-6 раз, если делать табличку на 512 байт, и в 10 раз если занять шрифтом 4К. Расшифровка цифр из предыдущего сообщения:
1284 - примерно такую цифру должен был показать checkit, если бы не перехватил int2, а вот такое:
4091 - должен его заставить показать resident, если конечно они уживутся в реальности

Sonic_Blast
19.12.2015, 01:23
привет Троникс а если залить этот биос что ты скомпилил для NEC V20 в обычный поиск с КМ1810ВМ88 (я залил но что-то он не правильно выводит приветствие нету строки F1 - работа с кассетой) у него расскладка клавы как у второй ревизии поисков 1? (то есть с украинской буквой і) ?

Tronix
19.12.2015, 10:13
привет Троникс а если залить этот биос что ты скомпилил для NEC V20 в обычный поиск с КМ1810ВМ88 (я залил но что-то он не правильно выводит приветствие нету строки F1 - работа с кассетой) у него расскладка клавы как у второй ревизии поисков 1? (то есть с украинской буквой і) ?

Если ты залил BIOS v1.7 бинарь, то он собран для 8088 процессора, без использования V20 команд. Приветствие выводит такое, потому что я выпилил работу с кассетой из BIOS. Раскладка клавиатуры для поздних Поисков, с украинской "i" и еще такая-же "и", только с двумя точками на верху (хз как она называется).

Sonic_Blast
19.12.2015, 12:53
а если скомипилитть для В20 а зашить в машину с 8088 будет работать?

у меня есть ХТ-ишка одна из первых моделей она не рассчитана на работу с В20 но я поставил его и все работает))
я так понял что у тебя в этот твой биос вшит драйвер для юзания больше 608кб памяти?

Tronix
19.12.2015, 22:57
а если скомипилитть для В20 а зашить в машину с 8088 будет работать?
Не будет.



я так понял что у тебя в этот твой биос вшит драйвер для юзания больше 608кб памяти?
Нет.

bigral
16.11.2016, 21:26
Подниму старую тему чтоб резюмировать. Тут выяснилось что v20 реагирует на NMI не совсем в те моменты как это делал i8088? И таким образом выходит что 2-й символ заносится раньше в память чем того ожидала схема POISK-1?

Если это все правда, то вопрос, можно ли отрубить вообще NMI и выводить графику по таймеру (типа как в эмулях) и сколько потребуется времени для пересчета всего текстового экрана в графический?

Копейкин
20.11.2016, 14:18
NMI отрезать нельзя. На нём вся эмуляция CGA и строится. Любое обращение к памяти или регистрам по адресам видеоадаптера вызывает прерывание, в котором всё отрисовывается в единственном реальном графическом режиме. Поэтому и текстовые режимы так тормозят.

Filin
02.12.2017, 22:46
Интересная статистика. Берем проц V20, берем BIOS by Tronix и два Поиска - один 512КБ ОЗУ, второй 128КБ.
Впаиваем панельки, поочередно ставим новый проц и биос и делаем замеры CheckIt

1)Доска 512КБ
http://s019.radikal.ru/i605/1712/69/541bfa1b4c00.jpg
http://s019.radikal.ru/i625/1712/50/c3dad081400c.jpg



2)Доска 128КБ
http://i066.radikal.ru/1712/3c/f474feaf5f31.jpg
http://s014.radikal.ru/i326/1712/c1/289d9da1c860.jpg

Копейкин
03.12.2017, 09:43
Теперь бы понять, почему так происходит.
Отличия в платах в прошивке РТ4 дешифратора адресов памяти и перемычках адресов.

Filin
03.12.2017, 13:37
Теперь бы понять, почему так происходит.
Отличия в платах в прошивке РТ4 дешифратора адресов памяти и перемычках адресов.
Тоже пытаюсь разобраться. Влияние BIOS можно отбросить, только что запускал систему с родным BIOS и V20. Сквозь рассыпающиеся символы VC смог запустить CheckIt и он показал результат практически аналогичный, с минимальным отставанием.

Уже начал думать, что может моя 128я доска какая-то модифицированная. Но вроде никаких следов не заметил. Кварц на 15000, вроде это сток?

UPDATE:

Дальнейшее расследования показало, что в этом неожиданном росте производительности явно замешана организация памяти.

С разными блоками расширения памяти CheckIt показывает разную производительность!

Максимальные результаты, которые я выкладывал выше, получены на "коротком" модуле В109/01 на 512КБ

http://s41.radikal.ru/i094/1712/df/f31b119a4d21.jpg

А когда я менял его на "длинный" модуль В108 (ОЗУ 512Kb + ИРПР-М) то производительность в CheckIt падала

http://s019.radikal.ru/i614/1712/69/e94a6b884efd.jpg

Копейкин
03.12.2017, 17:02
Кварц на 15 МГц штатный, частота процессора 5 МГц.
К сожалению, тест на 128 плате не запустить без платы расширения.
Тогда всё упирается в расширенную память.
В108 использует для регенерации 1810ВТ3, а короткая плата простой метод RAS при активном CAS.
512 плата может выполнять тест из встроенной памяти, конкурирующих с видео.
А 128 плата, скорее всего из внешней. Скорее причина в этом.

Savoj
04.12.2017, 11:16
У меня тоже такого размера плата на 512 Кбайт, но на 1810ВТ3.
Но нет прошивки РТ4. Интересно прошивки РТ4 одинаковы с этих плат или нет? Может если будете выпаивать РТ4 со своей платы и ставить на панельку, то прошивку предоставите?
http://zx-pk.ru/threads/26450-ozu-512-kbajt-(kr1810vt3-16-kr565ru7).html

bigral
05.12.2017, 00:47
Когда-то мне купили родители поиск1 и тогда уже не выпускались версии с памятью 128кб а только 512кб (а в DOS по-моему 480кб всего остается). Помню огорчился очень когда узнал что он более тормозной чем более старый вариант со 128кб который был у моего друга (не говоря уже о том что стандартные расширители были только 256кб \ 512кб и при их подключении часть памяти просто не использовалась). А тормоза потому что видеоконтроллер читает экран с той памяти что "на борту" и тормозит процессор если тот лезет (шина то одна). В принципе тоже самое и в zx spectrum где линейка 16кб используется и ULA и процессором. Даже в PCjr таже самая история.

Может кто-нибудь сворганит upgrade на 16кб двухпортовой SRAM, но тогда половина схемы надо перекопать убрать торможение процессора и сделать скрытую регенерацию набортных ру7.

Filin
06.12.2017, 00:14
И вот еще немножко бенчмарков касательно V20
Если в XT-IDE залить Биос с расширенными инструкциями (ide_xtp.bin), то скорость прилично так выростает. С обычным 8088 выдает 250КБ/c

http://s019.radikal.ru/i634/1712/61/7f88b1957796.jpg

Haper
06.12.2017, 08:01
Да-да, точно также и на V30 в "Поиске-2": с расширенными инструкциями за 600 кб/с переваливает, а со стандартными - около 290 кб/с

hitomi2500
21.11.2019, 10:47
Я конечно прошу прощения за оффтоп и некропостинг, но никто случайно не пробовал замену не на NEC V20, а на новодельные софт-процессоры, которые в ПЛИС? Я наткнулся на 2 проекта, Zet и S80186, правда на обоих не хватает некоторых сигналов по сравнению с реалом, но думаю вытащить их будет не очень сложно.

Копейкин
21.11.2019, 10:57
А как заменить 8088 на софт-процессор? Он ведь в ПЛИС синтезируется. Переходник от платы с ПЛИС в панель процессора? Но тогда проще на оценочной плате или Reverse U8/9/16 весь "Поиск" реализовать.

Filin
21.11.2019, 11:24
Переходник от платы с ПЛИС в панель процессора?
Такой подход весьма популярен в Амигах, но там совсем другая архитектура, позволяющая через процессорное гнездо подключать и быструю память и доп перефирию (ide, scsi, lan и тд) добиваясь многократного увеличения производительности системы.

В данном случае даже очень быстрый проц будет зажат медленной шиной и результаты будут весьма скромными. Но все равно можно поиграться )

- - - Добавлено - - -

update:
в свое время Intel выпускала платы Inboard 386 для апгрейда оригинального IBM PC. На плате был 386й проц и память, она втыкалась в ISA и от нее шел шлейф в процессорное гнездо 8088.

https://s.ecrater.com/stores/344506/55ab57a8e3b8d_344506b.jpg

Копейкин
21.11.2019, 11:24
Можно, конечно, синтезировать сразу связку CPU +FPU.Это даст выигрыш для математики.

PS
Интересное решение. Но у Поиска слоты расширения развязаны с внутренней архитектурой. Сложно будет стыковать такое расширение.

Dotoro
21.11.2019, 11:34
Orchid 286 есть еще, работает по тому же принципу ускорителя,
Находил как-то 8088 на AVR, но проект скорее пруф концепт (https://hackaday.com/2017/05/21/hackaday-prize-entry-a-pc-xt-clone-powered-by-avr/).

hitomi2500
21.11.2019, 13:07
Да плисы-то нынче совсем мелкие есть, например какой-нибудь iCE40 UltraPlus в 48-ногом корпусе 7х7 почти вмещает весь S80186. Добавить к нему преобразователи уровня, источники для питания ядра и банков, ещё один ПЛИС для 8087, и как раз получится платка размером с DIP40, может чуть больше. Только дорого выйдет - один такой плис на Digikey уже стоит $6, пока до нас доедет будут все $10.

Копейкин
21.11.2019, 13:26
К сожалению современные м/сх ПЛИС с 3-х вольтовыми входами/выходами. Еще городить преобразователи уровня придется. Немаленькая плата выйдет. 48-ногий 7х7 - это ведь BGA корпус? Тоже не каждый припаяет. Идея хорошая, но труднореализуемая.

hitomi2500
21.11.2019, 14:05
Без преобразователей уровня увы никуда, это неизбежное зло и с этим надо просто смириться. Есть хорошие преобразователи на 16 каналов, зовутся 74ALVC164245 и стоят не очень дорого. Единственный их минус - направление регулируется только для группы в 8 сигналов сразу. Если не ошибаюсь, для 8088 хватит 3 таких, может четырёх.

48 7х7 это QFN. Тоже не сахар, но паять всё-таки проще - пролудил плату и чип, залил флюсом, прогрел феном. Чип от поверхностного напряжения припоя сам садится на место. Перегрева в разумных пределах они не боятся.

У меня есть отладочная плата для такой плис, и буфера где-то завалялись. И Поиск-1 недавно ко мне вернулся после долгих лет разлуки. Когда его оживлю (если оживлю конечно), попробую на эту тему поколдовать.

LeoN65816
26.10.2020, 19:55
Я ни ПОИСКовед, ни ПОИСКовод. Из спортивного интереса мне "душу терзает" следующая идея (которую хочу предложить Tronixу и Filinу):

На али есть V33A (https://aliexpress.ru/af/D70136AL.html?d=y&origin=n&SearchText=D70136AL&catId=0&initiative_id=SB_20201026083306). В педивикии сказано, что он в два раза быстрее V30 на той же частоте (https://en.wikipedia.org/wiki/NEC_V20#Variants_and_successors). А в шите даташном сказано, что V33@16 в четыре раза быстрее, чем V30@10, то есть в 2.5 раза на той же частоте.

Он по пинам не совместим ни с V30, ни с i8086. У него демультиплексированы шины данных и адреса. И есть у него вход динамического изменения размера шины данных, то есть его можно загнать в постоянный 8-битный режим.

Но в том же ПОИСК-1 можно выпаять и процик, и регистры-защёлки адреса, и буфер шины данных, поставить туда цанговые панельки, и на мезонинной (как ранее в треде называл подобную Tronix) платке с цанговыми штырями приживить его к ПОИСКу.

Ну а в ПОИСКе-2 можно и с 16-битной шиной данных также сделать.

А можно и извратиться: опять замультиплексировать шины адреса и данных, и втыкать мезонинку только в панель процессора. :)

Вот уверен, что как минимум 2 Маха он "выдаст на гора" при той же частоте. А Filin ещё и турбировать ПОИСК умеет, ещё больше Махов можно выжать!

Как Вам идейка?

PS. Был бы у меня ПОИСК, наверное, с вероятностью 99% я бы это реализовал бы в железе.

vivat
04.06.2021, 00:09
Выпаял проц, поставил DIP-40 панельку и засунул в Поиск NEC V20 \w/
... грызь погрыз
Вообще, субьективно, с NEC V20 поприятнее работается. Поживее как-то :)

привет! а на картинке какая версия платы и чего от нее можно ожидать? она апгрейдится ли до 512кб при помощи установки РУ7? почему такой вопрос - предложили поиск побомбленый - нету 3 чипов. уже понял каких не хватает (у меня такие есть к счастью) и кажется именно такую версию, с двумя горизонтальными микрухами под слотами разширения.

- - - Добавлено - - -


Флюс - AMTECH RMA-223-LF . Ссылка на тему: http://zx-pk.ru/showthread.php?t=15079 , там где-то предпоследние - последние страницы. Феном КРАЙНЕ НЕ РЕКОМЕНДУЮ! Ибо советские микросхемы насколько я знаю очень боятся перегрева. Раньше, когда отцы микросхемы паяли, я знаю юзали специальные теплоотводы, чтоб не дай бог не нагреть ее больше ~40 градусов. Отпаять-то возможно проц и отпаяется, но сколько погибнет микрух в его окружении - сие есть тайна.
есть же сплав розе - уменьшает температуру ликвидус припоя. потом по извлечении микросхемы естественно все оплеточкой собрать и залудить заново. я сплавом розе выпаиваю даже ответственные разъемы многоножечные в пластиковом корпусе.

- - - Добавлено - - -


Короче вынос мозга полнейший. int 10h ничего сначало не запрещает, а даже наоборот - разрешает обычные прерывания (STI). Далее идет проверка на функции, и если они простые - типа определить координаты курсора и активную страницу - инфа передается в регистры и происходит нормальный выход из обработчика. А вот если нужно что-то нарисовать на экране, например символ - начинается полный треш и угар. Символ рисуется в памяти, из-за чего происходит вызов NMI, обработчик NMI в свою очередь смотрит что случилось и если кто-то работает с видео памятью вызывает функции int 10h для корректной обработки, затем возвращает управление в int 10h, int 10h в свою очередь возвращает управление в программу.

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