RUЭВМ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Июль 2020
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031  

Календарь Календарь

Последние темы
» Радио-86РК: внешние видео-адаптеры
автор Microsha Вчера в 14:06

» Новости криптовалют: статьи, заметки, разное...
автор Viktor2312 06.07.20 10:51

» Новинки. Книги. Часть 1.
автор Viktor2312 04.07.20 11:56

» Арго ПК ФВ 6511. Информация, документы, фото.
автор Viktor2312 01.07.20 21:23

» Обзор крипто проектов.
автор Viktor2312 28.06.20 0:03

» МИКРО - 80. Статьи, заметки, очерки, разное...
автор barsik 27.06.20 22:56

» Серия видео про Биткоин.
автор Viktor2312 27.06.20 16:09

» Электроника КР-04. Информация, документы, фото.
автор barsik 26.06.20 13:25

» Флейм только по теме "Радио-86РК".
автор barsik 25.06.20 20:06

» Netbox.Global (NBX) - браузер с инновационной технологией.
автор Viktor2312 23.06.20 14:45

» Электроника КР-03: Обсуждение
автор barsik 18.06.20 21:24

» Радио-86РК: Разное
автор barsik 18.06.20 2:06

» Биткоин, с технической точки зрения. Разное...
автор Viktor2312 16.06.20 22:47

» Радио-86РК: Расширение ОЗУ
автор barsik 11.06.20 10:21

» Разное
автор Viktor2312 09.06.20 1:40

» Улучшение видео возможностей РК86
автор barsik 31.05.20 12:39

» Турбирование Специалиста
автор barsik 22.05.20 13:33

» Программы от РК86 на Специалисте
автор barsik 20.05.20 21:08

» Варианты улучшения платы ЭКСПРЕСС минимальной ценой
автор barsik 20.05.20 21:02

» Z80 в Специалисте
автор barsik 20.05.20 21:00

» Семейство PIC32MZ EF 32-разрядных МК (252 МГц).
автор Viktor2312 28.04.20 15:53

» Микросхема ЦАП AK4499, ЦАПы на её основе. Общая тема.
автор Viktor2312 12.04.20 14:27

» Можно ли улучшить цвет Специалиста ?
автор barsik 09.04.20 19:03

» USB --> I2S
автор Viktor2312 06.04.20 0:25

» Часики на лампах
автор freddy 15.03.20 14:27

Самые активные пользователи за месяц
Viktor2312
Радио-86РК: Разное - Страница 3 Vote_lcapРадио-86РК: Разное - Страница 3 Voting_barРадио-86РК: Разное - Страница 3 Vote_rcap 
barsik
Радио-86РК: Разное - Страница 3 Vote_lcapРадио-86РК: Разное - Страница 3 Voting_barРадио-86РК: Разное - Страница 3 Vote_rcap 
Microsha
Радио-86РК: Разное - Страница 3 Vote_lcapРадио-86РК: Разное - Страница 3 Voting_barРадио-86РК: Разное - Страница 3 Vote_rcap 

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


Радио-86РК: Разное

Страница 3 из 3 Предыдущий  1, 2, 3

Перейти вниз

Радио-86РК: Разное - Страница 3 Empty Re: Радио-86РК: Разное

Сообщение  Viktor2312 в 17.12.18 19:17

51
Изучай микропроцессорный комплект КР580, он максимально полон, при этом относительно не сложен, легко доставаем и дешёв по цене. Это если конечно касается РЭТРО железа, хотя и он на многое способен даже сейчас, например станки на нём как работали, так и продолжают работать. И выпускают продукцию полностью соответствующую нынешним ГОСТ -ам. У меня недавно покупали немного микросхем, как раз для таких станков, обычные КР580, точное название уже не помню.
Просто ядро само собирается из минимума деталей, но при этом не запрятано это всё в одну микросхему, что удобно для расширения, изучения, есть что по-паять. Там нужен сам микропроцессор КР580ВМ80А, тактовый генератор КР580ГФ24, желательно буферизировать шину адреса, я считаю обязательно, например при помощи двух КР580ИР82 и системный контроллер КР580ВК28. Вот 5 микросхем и ядро почти готово, чтобы работало, нужно добавить ПЗУ и ОЗУ и дешифратор адреса и получится простейшее микропроцессорное ядро, которое если включить, то уже будет работать, а далее можно добавлять ПДП если нужно КР580ВТ57, вывод изображения на дисплей КР580ВГ75, параллельные порты КР580ВВ55А и последовательные КР580ВВ51, таймер КР580ВИ53 и там ещё есть с десяток микросхем, то есть после минимума, самого ядра, подключать к нему можно много чего, а тех же портов может быть 255 на ввод и 255 на вывод, но нужно учитывать, что в конкретный момент микропроцессор работает только с одним портом, так же можно добавить в систему часы или страничную память, так как микропроцессор адресует только 64 Кбайт всего памяти ПЗУ + ОЗУ, но ОЗУ можно сделать страничным. И т. д. и т. п...
Viktor2312
Viktor2312
Гуру+

Сообщения : 12354
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Радио-86РК: Разное - Страница 3 Empty Re: Радио-86РК: Разное

Сообщение  san010101 в 17.12.18 19:25

52
Интересные вы люди, раньше на таких пк диссертации делали
сам начинал на z80

san010101
новичёк

Сообщения : 36
Дата регистрации : 2018-07-24
Возраст : 43
Откуда : Красноярск

Вернуться к началу Перейти вниз

Радио-86РК: Разное - Страница 3 Empty Re: Радио-86РК: Разное

Сообщение  Viktor2312 в 17.12.18 22:27

53
сам начинал на z80

Я тоже клепал Ленинграды первые на нём, на продажу, но мне Z80 ни тогда не нравился, ни сейчас, как-то не лёг на душу, до 1994 года примерно, последний собрал в 1994г. и потом больше не собирал, до недавнего времени.
Viktor2312
Viktor2312
Гуру+

Сообщения : 12354
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Радио-86РК: Разное - Страница 3 Empty Re: Радио-86РК: Разное

Сообщение  san010101 в 25.12.18 15:44

54
А все таки сделать ПЗУ с языком высокого уровня, чтобы не загружаеть каждый раз?

san010101
новичёк

Сообщения : 36
Дата регистрации : 2018-07-24
Возраст : 43
Откуда : Красноярск

Вернуться к началу Перейти вниз

Радио-86РК: Разное - Страница 3 Empty .

Сообщение  barsik в 25.12.18 22:28

55
san010101 пишет:А всё-таки сделать ПЗУ с языком высокого уровня, чтобы не загружать каждый раз?
Неточно поставленный вопрос. Неясно о каком конкретно языке высокого уровня идёт речь.

о ЯВУ:

Если речь идёт о настоящем ЯВУ, т.е о компиляторе Паскаля, Си, Ада, PL/M и куче других уже непопулярных ЯВУ, которые существуют для КР580, то загружать их из ПЗУ обойдётся довольно дорого (нужен большой объём ПЗУ). Кстати, дискета, винчестер или флэш-привод это по сути то же большое ПЗУ, но оперативно перезаписываемое.

Большой объём ПЗУ нужен по следующим причинам. Во-первых, все эти компиляторы не являются отдельными независимыми программами, а работают только в составе DOS для которой предназначен конкретный компилятор. Т.к компилятору откуда-то надо брать десятки файлов содержащих исходный текст программы, стандартные библиотеки и заголовочные иклюдэ-файлы. Также сами компиляторы не являются одним единственным файлом, а состоят из множества модулей, последовательно подгружаемых в TPA в ходе разных фаз трансляции (иначе как 150 кб уместить в адресном пространстве 8-ми разрядки). Кроме того, без расширения ОЗУ хотя-бы до 52 кб использовать компиляторы ЯВУ на РК невозможно.

К сожалению, такие компиляторы имеют существенный объём кода и ПЗУ такого объёма обойдётся недёшево. Например, компилятор Паскаля имеет объём под 200 кб. К некоторым компиляторам (тем, что транслируют в текст на ассемблере) ещё нужны другие программы CP/M (линковщик и ассемблер, если использовать куски на ассемблере). Для их хранения достаточно ROM-привода ~48 кб (тогда в ROM-диске храним саму CP/M и ещё несколько программ CP/M).

Имея большой по объёму многобанковый ROM-диск технически несложно из него сделать CP/M привод (эл.диск ROM), т.е диск с флагом R/O, содержащий часто используемые CP/M-программы. Для этого достаточно содержимое CP/M RAM-диска прошить в ROM-диск. Я делал себе в 90-тые CP/M-привод из ROM-диска (это было удобно чтобы не хранить графический драйвер XBIOS.SYS в 16К на каждой дискете). Естественно, при попытке записи на такой CP/M привод будет выскакивать обидная надпись BAD SECTOR... Потому ROM-привод в CP/M не может быть диском A (т.к CP/M имеет дурную привычку писать свои временные файлы именно на привод A:).

Но иметь только CP/M ROM-привод содержащий все файлы компилятора недостаточно. Нужен и CP/M привод A (хотя бы минимального размера) позволяющий на него запись. Для компиляции достаточно небольшого RAM-диска размером в 56К из дополнительной банки ОЗУ новодела РК86. Ведь имея компилятор в ROM-приводе в эл.диске требуется хранить только исходник и результирующий код.

о бейсике:

Если же под ЯВУ понимается интерпретатор бейсика, т.е бейсик от МИКРО-80 (1A20), бейсики МИКРОН (разных версий), журнальный бейсик-сервис с вводом ключевых слов через <АР2>, бейсик MIUS, бейсик ПЛЮС или речь о других подобных интерпретаторах бейсика, то иметь их в ПЗУ совсем не проблема.

Тут есть два варианта. Загрузка из расширенного до нужного объёма резидентного ПЗУ или из внешнего ROM-диска (по схеме ROM-диска ОРИОНА, т.к ROM-диск предложенный для самого РК имел ограничение в 32К).

Способ ROM-диска, наиболее нетравмирующий. При этом достаточно прошить в ROM-диск желаемые программы и слегка модифицировать ROM-BIOS F800. Последнее теперь сделать легко, т.к я ещё в прошлом году для добавки поддержки многобанковости и ВИ53 в ПЗУ РК, освободил там ~170 байт, куда можно уместить даже маленькую ОС для обслуги ROM-диска.

Для решения задачи старта бейсика достаточно встроить простейший стартёр программы из ROM-диска (это займёт менее 30 байтов кода). Тогда по нажатию <СБРОС> будет обычный выход в RAM-монитор из ROM-BIOS. Если же в момент сброса удерживать какую-нибудь из трёх внематричных клавиш (УС, СС, РУСЛАТ), то происходит выход в бейсик (или любую другую программу из ROM-диска). При этом, чтобы можно было менять программу в ROM-диске без перепрошивки ПЗУ F800, программа размещается в ROM-диске в формате ORD, т.е содержит в начале стандартный ORD-заголовок в 16 байт из которого загрузчик в ПЗУ узнаёт размер файла и место загрузки.

Расширять резидентное ПЗУ можно 3-мя способами. Первый - это расширение резидентного ПЗУ F800, - страничным методом в окне F800...FFFF, при этом в окне 2 кб, управляемые какими-либо битами прокачиваются страницы ПЗУ размером в 2 кб.

Второй способ, - это введение "теневого ПЗУ". Это когда большое окно ПЗУ на 8К/16К (или даже 32К) находится как бы в тени ОЗУ по адресам 0...1FFF/3FFF и по отдельной команде включается, чтобы обеспечить доступ процессору к находящимся там программам. Программа может как работать из окна ПЗУ, так и просто храниться там, перегружаясь для работы в ОЗУ. Естественно, при этом ОЗУ находящееся в этих же адресах (и переведённое при включении ПЗУ в "тень") недоступно, что делает невыгодной работу бейсика прямо из ПЗУ, т.к резко сокращает ОЗУ для хранения бейсик программы. К тому же при этом бейсик надо модифицировать, чтобы перенести рабочие ячейки и адрес буфера текста на 4000. Интересно, что такая архитектура с работой бейсика прямо из ПЗУ очень похожа на архитектуру ZX-16К из 1982 года.

Третий способ это включение ПЗУ в неиспользуемых дырках адресного пространства в области портов. Как известно, в РК86 не очень удачно для портов выделено целых 32 кб, тогда как реально РК-портам достаточно ~20 адресов. Потому можно в каждой из трёх 8-ми килобайтовых областей являющихся выборками В/У (8000...9FFF, A000...BFFF, C000...DFFF) сделать с помощью дополнительной логики перераспределение адресного пространства.

Отдав из 8-ми килобайт собственно порту ввода/вывода всего 1 кб (есть причина почему меньше нежелательно), выиграв чип-селект на участок в 7 кб, в котором можно разместить расширяющее ПЗУ 27128 (с 2-х страничной коммутацией, т.к в 7 кб влезает только бейсик 1A20 от МИКРО-80). Можно взять схемку вот отсюда. Рассмотрите также вариант расширения ПЗУ до 15 кб по этой схеме. Такой вариант выгоден тем, что тогда бейсик может работать из самогО ПЗУ (если его перетранслировать), оставив все 29 кб для размещения бейсик-программы.

_________________
***
barsik
barsik
Мастер++

Сообщения : 651
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Радио-86РК: Разное - Страница 3 Empty .

Сообщение  barsik в 09.10.19 21:26

56
Как ни странно, самый убогий компьютер РК86 остаётся самым популярным, во многом из-за тех, кто подключается к ретро-хобби. Возможно потому, что новички не уверены в своих силах и думают, что РК сделать проще других. А это не так. Уже один только 30 лет подряд мучивший всех эр-кашников глюк в виде сбоев ОЗУ, должен настораживать. Многим не удаётся добиться надёжности даже сейчас, когда информации на эту тему накопилось много.

В этом разделе полно бестолковых, безинформативных тем. А самой необходимой темы в помощь собирающим РК нет. В журнале "Радио" с периодичностью в несколько лет публиковали подборки по устранению глюка, причём почти в каждой статье написано, что эта метода борьбы с глюком лучшая. В тематических форумах на десятках тем, с десятками страниц каждая, также разбросаны описания ещё более лучших методов. Но найти их там не потратив десятки часов на поиск, т.е сходу - практически невозможно.

В итоге абсолютно неясно, какой же метод устранения глюка наилучший, наиболее надёжный и повторяемый. Хоть бы в одном форуме была бы тема в которой в одном месте были бы приведены все известные методы борьбы с глюком ОЗУ и большими буквами был бы описан метод ремонта, который сейчас признан всегда работающим, т.е 100% эффективным для 100% оригинальных машин. Кстати, странно, что делая новоделы никто не заимствовал схемы формирования /RAS-/CAS из клонов РК, ведь про них (а их было полтора десятка), никаких жалоб не поступало.

Также было бы удобно, если бы доступно лежали схемы по замене процессора на Z80 и 8085, а также схема добавки к КР580 контроллера ВК28. А то пока я это нашёл в одном популярном форуме, то без пользы истратил кучу времени.

Спойлер:

Метод борьбы с глюком заинтересовал потому, что несколько месяцев назад я отчистил свою плату РК от второэтажных микросхем и привёл её в исходный вид (из доработок осталась переделка на фонт 9*8 ) и готовлюсь начать настройку. Я так ремонтировал этот РК уже несколько раз. Для настройки приходится вернуть плату к оригинальной схеме. И только потом можно восстанавливать мелкие доработки. Настройку не начинал и даже ещё не решил во что превратить эту плату.

Потому меня и интересует метода борьбы с глюкастостью ОЗУ, которая сейчас считается лучшей и работает. Когда-то я перепробовал все журнальные методы, но ни один не помог. Без сбоев мой РК не работал на РУ5 и на импортных 4164 от пяти-шести разных фирм. А абсолютно без сбоев заработал только с ОЗУ 4164 единственной фирмы TMS.

Я ещё буду думать как доработать свой РК. Есть несколько желаний. Хотя первым делом, естественно, восстановлю то, что имел ранее - т.е открою ОЗУ на 8400...BFFF и добьюсь работы РК-КНГМД (т.к требуется перенести на PC файлы с РК-дискет, там некоторые утерянные РК-программы и исходники, что нужны).

А вот дальше надо думать. Сначала хотел ставить Z80, но теперь возникло желание поставить в РК 8085 (интересно попробовать его 10 очень удобных недокументированных команд). Также хотелось бы переделать РК под VGA-монитор (для этого ОЗУ меняется на статику). А в случае, если бы у меня вдруг случился припадок энтузиазма (что маловероятно), то было бы интересно напаять на имеющуюся ВГ75 вторую ВГ75 вторым этажом и получить из неё 8-й бит для знакогенератора по идее от freddy.

_________________
***
barsik
barsik
Мастер++

Сообщения : 651
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Радио-86РК: Разное - Страница 3 Empty Re: Радио-86РК: Разное

Сообщение  Microsha в 09.10.19 23:04

57
вот же это решение. Привожу цитату с другого форума:
"Перебирая всевозможные варианты "лечения" проблемы, нашел "нестандартное" решение проблемы от А.Сапронова из г. Калуга путем изменения режима работы ИР1 и перевода ее в режим только сдвига. И вот же оно. Компьютер работает идеально и абсолютно стабильно, как и полагается хорошей железке. Самое гениальное, что для этого нужно всего лишь поменять местами проводники к выводам 1 и 6 микросхемы ИР1, то есть вывод 6 заземлить, а что шло к 6-му - перевести на 1й, предварительно оторвав тот от "земли". Все остальные костыли-задержки, естествено, устранены. Предлагаю в очередную ревизию ПП закладывать это решение стандартно, так как оно абсолютно и требует ничтожных перестановок."

Microsha
новичёк

Сообщения : 15
Дата регистрации : 2019-09-12

Вернуться к началу Перейти вниз

Радио-86РК: Разное - Страница 3 Empty Re: Радио-86РК: Разное

Сообщение  Viktor2312 в 09.10.19 23:42

58
Очень много эмоций, как бы это сказать... практика - это хорошо...

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12354
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Радио-86РК: Разное - Страница 3 Empty .

Сообщение  barsik в 10.10.19 4:52

59
Microsha пишет:вот же это решение
Спасибо, как раз это и имел в виду. Я помнил, что когда-то встречал пост с такой доработкой (и впоследствии положительные отзывы), но когда вчера стал искать, потратил час и не нашёл. Я вообще-то пробовал почти все разумные методы борьбы с глюком, опубликованные в ж."Радио" к 1991, но этот метод тогда или не заметил или он опубликован позже. Попробую этот метод уже в ближайшие годы (м.быть даже ещё в этом году).
Viktor2312 пишет:Очень много эмоций, как бы это сказать...
Где вы увидели много эмоций? Тем более "очень много". Я лишь, причём без всяких эмоций, намекнул, что раз предложенной темы нет, то кто-нибудь мог бы её создать в данном форуме (и естественно, наполнить). Если под эмоциями имеется в виду упоминание "безинформативных тем", то я ничуть не преувеличил - половина тем этого раздела (да и других) просто пустышки.
Viktor2312 пишет:как бы это сказать...
Это делается словами. Чтобы что-то сказать слова надо составлять в определённом порядке, желательно со смыслом и с учётом правил русского языка. Выбирая слова желательно избегать англо-русского суржика, уголовного и молодёжного жаргона. А вообще говорить (публиковать в форуме) надо, если есть, что сказать и озвучивание этой информации имеет смысл, т.е содержит хоть что-то полезное для читателя.
Viktor2312 пишет:практика - это хорошо...
Чем практика в листании на форумах тем в сотни страниц в поисках нужной информации - хороша?
barsik пишет:схемы по замене процессора на Z80 и 8085, а также схема добавки к КР580 контроллера ВК28. А то пока я это нашёл в одном популярном форуме
Неточно написал, - я нашёл только схемы замены CPU, схему установки ВК28 в РК так и не нашёл.

Установка ВК28 меня интересует из принципа... т.е по историческим причинам. Вообще-то ставить ВК28 не имеет особого смысла. Он не поможет в турбировании, т.к в РК не процессор слабое звено, а небуферизованное ОЗУ. Я его хотел поставить из-за того, что тогда мне просто нравились ВК28 (они позволили турбировать Специалист аж до 3.5 МГЦ) и я имел их с десяток. И схема интересна потому, что у меня есть платка переходник, где стоит процессор и ВК28.

Спойлер:
Я уже когда-то делал попытку поставить ВК28 в РК. Когда я его турбировал (путём замены кварца питающего CPU, ж.Радио 01.1991), то без периферийных плат и снятым ППА D14, РК надёжно работал с кварцем 28 МГЦ (клок 3.1 МГЦ). Но при нагрузке шины периферией (эл.диск на РУ7 и РК-КНГМД) надёжность падала и с подключенной периферией приходилось использовать кварц лишь 22 МГЦ.

Тогда я (полагая, что это улучшит надёжность) решил добавить ВК28 на платке-переходнике с штырьками (платка вставляется прямо в панельку КР580, фото этого переходника где-то выкладывал). Но как ни бился так и не смог заставить работать РК с ВК28. Так и не понял, чём дело, платка так и лежит без пользы (платка исправна, в Специалисте работает).

_________________
***
barsik
barsik
Мастер++

Сообщения : 651
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Радио-86РК: Разное - Страница 3 Empty Re: Радио-86РК: Разное

Сообщение  Viktor2312 в 10.10.19 13:57

60
Чем практика в листании на форумах тем в сотни страниц в поисках нужной информации - хороша?

Вы можете не листать, читать только первый пост. Обычно туда по мере сил и возможностей переносится вся полезная информация. У нас же свобода выбора, можно листать, а можно и не листать - никто никого ни к чему не принуждает. Да, а так конечно форум наполнен информацией только на 0,01 % от той, которую я хочу выложить, зачем, да ни зачем, просто как минимум для себя, так как да, в моём понимании, форум - это и личные конспекты, это и библиотека, и хранилище схем, статей, описаний, прошивок, ПО... Остальное домыслите и переиначте сами, по своему усмотрению... И вообще я отдыхаю, а потом работать буду, так что особо читать, что вы пишите буду в воскресенье, и большая просьба, постарайтесь без перехода на личности, оскорблений и матов, ну будьте разумными и воспитанными людми, этот форум - для технической информации, а не для складирования многопостов флейма и склоков...

_________________
"ЛП & ТИ"
Viktor2312
Viktor2312
Гуру+

Сообщения : 12354
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Радио-86РК: Разное - Страница 3 Empty .

Сообщение  barsik в 10.10.19 15:36

61
Viktor2312 пишет:
Чем практика в листании на форумах тем в сотни страниц в поисках нужной информации - хороша?
Вы можете не листать, читать только первый пост.
Вышла путаница. Я писал, что утомился искать информацию о "Z80 и 8085 в РК" не на этом форуме, а на другом, где это есть. А на этом форуме я конечно тоже посмотрел, но нет. А вы ответили, что это хорошая практика (а мне не нужна лишняя тренировка в пользовании браузером, я это и раньше уже делал). Вот я и спросил, чем хорошо впустую тратить время на поиск на другом форуме?

В итоге два поста ни о чём лучше удалить.

_________________
***
barsik
barsik
Мастер++

Сообщения : 651
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Радио-86РК: Разное - Страница 3 Empty .

Сообщение  barsik в 19.12.19 15:56

62
Это временный пост (будет удалён через какое-то время) для переадресации с другого форума, где исходники выложенные для просмотра не могут быть выложены под спойлер и потому это вызывает гнев тех пользователей, которые с детства ненавидят ассемблер, предпочитая бейсик.

исходник ПЗУ РК для модификаций:


;  МОНИТОР РК86 для КР580 совместимый с Z80
;  ========================================

; Last modify: 04.02.2020

; Свободно 274 ячейки

; Звук только на INTE
; В CCP принудительно включается ЛАТ-регистр.
; Удалена директива X. Директива G теперь не имеет второго параметра -
; стоп точки. Зато теперь введён возврат из запуска по G по RET. И можно
; передавать два параметра (второй и третий, они передаются в DE и BC).

        .Z80
        aseg
        ORG     100H

RABADR  EQU     0F800H
DOPPPA  EQU     0A000H

PDA     EQU     DOPPPA
PDU     EQU     DOPPPA+3

K_ORIG  EQU     0               ; если не 0, то оригинальный курсор
BASE    EQU     7600H           ; ниже D0H байтов - служебные ячейки

EK_ADR  EQU     BASE            ; текущий адрес на экране
POSX    EQU     BASE+02H
POSY    EQU     BASE+03H
ESC_F   EQU     BASE+04H
KBDFLG  EQU     BASE+05H        ; если =0, то есть символ в SYMBUF
RUSLAT  EQU     BASE+06H        ; допустимо только 0 или FF
LAST_K  EQU     BASE+09H        ; эти 2 байта должны следовать подряд
COUNT   EQU     BASE+0AH        ; счётчик опросов (вначале 15)
APVFLG  EQU     BASE+0BH        ; флаг автоповтора
FRELOC  EQU     BASE+0CH        ; эта ячейка не используется

TMPSTK  EQU     BASE+0DH        ; временно храним стек при МГ п/п-ммах
POINT   EQU     BASE+14H        ; адрес откуда произошёл RST_30H
R_HL    EQU     BASE+16H
R_BC    EQU     BASE+18H
R_SP    EQU     BASE+1CH
R_AF    EQU     BASE+1EH        ; ниже откладываются AF,HL,DE,BC
STOP_A  EQU     BASE+23H
TMP_COD EQU     BASE+25H
P_JMP   EQU     BASE+26H        ; для байта C3H (JMP)
PAR_HL  EQU     BASE+27H
PAR_DE  EQU     BASE+29H
PAR_BC  EQU     BASE+2BH
FLG_P2  EQU     BASE+2DH        ; флаг, что есть параметры 2 или 2,3
INV_MG  EQU     BASE+2EH
KNS_RD  EQU     BASE+2FH
KNS_WR  EQU     BASE+30H
RAMTOP  EQU     BASE+31H
COMBUF  EQU     BASE+33H        ; буфер ввода директивы
STACK   EQU     BASE+0D0H       ; стек монитора

SA      EQU     076D0H          ; 76D0 начало экранной области
SCBASE  EQU     077C2H          ; 77C2 ЛЕВ.ВЕРХН.УГОЛ ЭКР.

VG_75   EQU     0C000H
VT_57   EQU     0E000H

PA      EQU     8000H
PB      EQU     PA+1
PC      EQU     PA+2
PU      EQU     PA+3

PDA     EQU     DOPPPA
PDB     EQU     PDA+1
PDC     EQU     PDA+2
PDU     EQU     PDA+3

; ----------------------------------------------

LOOP    MACRO   ADDR
        DEC     BC
        LD      A,B
        OR      C
        JP      NZ,ADDR
        ENDM

; ----------------------------------------------

        .phase  0F800H

        JP      XF800           ; +0
        JP      CONIN           ; +3
        JP      LDBYTE          ; +6
        JP      COUT_C          ; +9
        JP      WRBYTE          ; +C
        JP      COUT_C          ; +F   это д.быть PRINT
        JP      STATUS          ; +12
        JP      HEX_A           ; +15
        JP      MSGH            ; +18
        JP      XF81B           ; +1B
        JP      ASKCUR          ; +1E
        JP      RD_SCR          ; +21
        JP      RD_BLK          ; +24
        JP      WR_BLK          ; +27
        JP      CHSUMM          ; +2A
        JP      PUSK_VG         ; +2D
ASKTOP: LD      HL,(RAMTOP)     ; +30
SETTOP: LD      (RAMTOP),HL     ; +33
        RET

; ----------------------------------------------

AFB86:  LD      C,(HL)                  ; 10 bytes
        CALL    WRBYTE
        CALL    AF999
        JP      AFB86

; ----------------------------------------------

XF800:  LD      HL,BASE-1
        LD      (RAMTOP),HL
        LD      SP,HL

        LD      A,8AH
        LD      (PU),A

        CALL    PUSK_VG

        INC     HL                      ; LD HL,BASE
        LD      C,L                     ; 0
        LD      DE,COMBUF+2CH
        CALL    DIR_F

        CALL    RST_18
TITR:   defb    1FH,'radio-86r','k' or 80H

        LD      HL,1D2AH
        LD      (KNS_RD),HL

if      $ ne RABADR + 6CH
        if1
        .printx * Standard subroutine WARMST shifted ! *
        endif
endif
WARMST:                         ; Warm_BOOT
        LD      SP,STACK

        CALL    RST_18
PROMPT: defb    13,10,'--','>'+128

        CALL    GETLIN

        LD      HL,WARMST
        PUSH    HL

        LD      HL,COMBUF
        LD      A,(HL)

        PUSH    AF
        CALL    GETPRM
        LD      HL,(PAR_BC)             ; Z80: LD BC,(PAR_BC)
        LD      C,L
        LD      B,H
        LD      HL,(PAR_DE)             ; Z80: LD BC,(PAR_DE)
        EX      DE,HL
        LD      HL,(PAR_HL)
        POP     AF

        CP      'D'
        JP      Z,DIR_D
        CP      'C'
        JP      Z,DIR_C
        CP      'S'
        JP      Z,DIR_S
        CP      'T'
        JP      Z,DIR_T
        CP      'M'
        JP      Z,DIR_M
        CP      'G'
        JP      Z,DIR_G
        CP      'I'
        JP      Z,DIR_I
        CP      'O'
        JP      Z,DIR_O
        CP      'L'
        JP      Z,DIR_L
        CP      'R'
        JP      Z,DIR_R
        CP      'F'
        JP      NZ,ERROR
DIR_F:
        LD      (HL),C
        CALL    AF999
        JP      DIR_F

; ----------------------------------------------
; ВХОД: E=POSX, D=POSY  
;       HL= экранный адрес      
   
COD_18:                         ; 29 bytes
        LD      A,E             ; POSX
        INC     HL              ; следующий экранный адрес
        INC     E               ; POSX++
        CP      8+63            ; последняя колонка ?
        RET     NZ              ; если была не последняя колонка
        LD      E,8             ; нач.позиция по X на новой строке
        LD      BC,-64
        ADD     HL,BC           ; Вычесть 64 = экр.поз в начало строки
COD_1A: LD      A,D
        CP      3+24            ; последняя строка ?
        LD      BC,78
        JP      NZ,AFDD3        ; если не последняя строка
        LD      D,2             ; если последняя строка, то на первую строку
        LD      BC,-24*78
AFDD3:  INC     D
        ADD     HL,BC           ; вычесть 24*78
        RET

; ----------------------------------------------

if      $ ne RABADR + 0EEH
        if1
        .printx * Internal subroutine GETLIN shifted ! *
        endif
endif

GETLIN: LD      HL,COMBUF
        LD      D,H
        LD      E,L
AF8F1:
        XOR     A
        LD      B,A             ; чтобы на выходе получить флаг пустой строки
        CALL    SET_RL
AF8F3:  CALL    CONIN           ; используется в DIR_M
        CP      8
        JP      Z,BAKSTP
        CP      7FH
        JP      Z,BAKSTP
        LD      (HL),A
        CALL    COUT_A
        CP      13
        JP      Z,AF91A
        CP      '.'
        JP      Z,WARMST
        LD      B,E                     ; B=76H --> бит D7=0
        LD      A,low COMBUF+31
        CP      L
        JP      Z,ERROR
        INC     HL
        JP      AF8F3

; ----------------------------------------------

TABK2:  defb    09,0AH,0DH,7FH,08H,19H,18H,1AH          ; 8 bytes

; ----------------------------------------------

SET_RL: LD      (RUSLAT),A              ; 6 bytes
        JP      PUSK_VG

; ----------------------------------------------

if      $ ne RABADR + 012CH
        if1
        .printx * Internal subroutine GETPRM shifted ! *
        endif
endif

GETPRM: LD      HL,BASE+27H
        LD      DE,BASE+2DH
        LD      C,0
        CALL    DIR_F

if      high (BASE+34H) eq high BASE
        LD      E,34H
   else
        .printx *      Wrong BASE (Low BASE need be < 0E0H) !
endif
        CALL    GET_HL
        LD      (PAR_HL),HL
        LD      (PAR_DE),HL
        RET     C
       
        LD      A,255
        LD      (FLG_P2),A
       
        CALL    GET_HL
        LD      (PAR_DE),HL
        RET     C
       
        CALL    GET_HL
        LD      (PAR_BC),HL
        RET     C
        JP      ERROR

; ----------------------------------------------

AFE97:  PUSH    HL                      ; 27 bytes
        LD      HL,7 shl 8 + 1
AFE9C:  LD      A,L
        RRCA
        LD      L,A
        CPL
        LD      (PA),A
        LD      A,(PB)
        CPL
        OR      A
        JP      NZ,AFEB3
        DEC     H
        JP      P,AFE9C
AFEAF:  LD      A,0FFH
        POP     HL
        RET

; ----------------------------------------------

BEEP:   LD      BC,05F0H                ; 20 bytes
SND_BC: LD      A,B
BPLOO1: EI
        DEC     A
        JP      NZ,BPLOO1
        LD      A,B
BPLOO2: DI
        DEC     A
        JP      NZ,BPLOO2
        DEC     C
        JP      NZ,SND_BC
        RET

; ----------------------------------------------

AFEF3:  LD      A,H                     ; 7 bytes
        LD      HL,TABK1
        JP      AFEFE

; ----------------------------------------------

DIR_G:  JP      (HL)                    ; 1 bytes

; ----------------------------------------------

if      $ ne RABADR + 0190H
        if1
          .printx * Internal subroutine CMPDH shifted ! *
        endif
endif

CMPDH:  LD      A,H
        CP      D
        RET     NZ
        LD      A,L
        CP      E
        RET

; ----------------------------------------------

JJJ_02: CALL    HXHLBL                  ; 15 bytes

LDXHX@: LD      A,(HL)
HEXABL: PUSH    BC
        CALL    HEX_A
        LD      A,20H
        CALL    COUT_A
        POP     BC
        RET

; ----------------------------------------------

DIR_S:  LD      A,C                     ; 11 bytes
        CP      (HL)
        CALL    Z,HXHLBL
        CALL    AF996
        JP      DIR_S

; ----------------------------------------------

if      $ ne RABADR + 01B0H
        if1
        .printx * Internal subroutine CR shifted ! *
        endif
endif

CR:     CALL    RST_18
        defb    13,10 or 80H
        RET

; ----------------------------------------------

DIR_I:  LD      A,(FLG_P2)              ; 46 bytes
        OR      A
        JP      Z,AFA91
        LD      A,E
        LD      (KNS_RD),A
AFA91:  CALL    RD_BLK
        CALL    HXHLBL
        CALL    HXDEBL
        EX      DE,HL
        PUSH    BC
        CALL    CHSUMM
        LD      H,B
        LD      L,C
        CALL    HXHLBL
        POP     DE
        CALL    CMPDH
        RET     Z
        CALL    HXDEBL
ERROR:  CALL    RST_18
        defb    '?'+80H
        JP      WARMST

; ----------------------------------------------

DIR_L:  CALL    HXHLBL                  ; 30 bytes
AFA0B:  LD      A,(HL)
        OR      A
        JP      M,AFA15
        CP      20H
        JP      NC,AFA17
AFA15:  LD      A,'.'
AFA17:  CALL    COUT_A
        CALL    AF996
        LD      A,L
        AND     0FH
        JP      Z,DIR_L
        JP      AFA0B

; ----------------------------------------------

XF81B:  LD      A,(PC)          ; 30 bytes
        RLA
        LD      A,0FEH
        RET     NC
AFE7D:
        XOR     A
        LD      (PA),A
;       LD      (PC),A
        LD      A,(RUSLAT)
        AND     00000001B
        OR      00000110B       ; зажигаем/гасим светодиод
        LD      (PU),A
        LD      A,(PB)
        INC     A
        JP      NZ,AFE97
        DEC     A
        RET

; ----------------------------------------------

AFF3B:  LD      A,L                     ; 23 bytes
        AND     2FH
        LD      L,A
AFF3F:  LD      A,L
        CP      40H
        POP     HL
        RET     P
        PUSH    HL
        LD      L,A
        AND     00FH
        CP      00CH
        LD      A,L
        JP      M,AFF50
        XOR     10H
AFF50:  POP     HL
        RET

; ----------------------------------------------

CHSUMM: LD      BC,0                    ; 23 bytes
AFB19:  LD      A,(HL)
        ADD     A,C
        LD      C,A
        PUSH    AF
        CALL    CMPDH
        JP      Z,POPAF
        POP     AF
        LD      A,B
        ADC     A,(HL)
        LD      B,A
        CALL    AF999
        JP      AFB19

; ----------------------------------------------

DIR_M:
;       CALL    HXHLBL                  ; 22 bytes
;       CALL    LDXHX@
        CALL    JJJ_02

        PUSH    HL
        CALL    GETLIN
        POP     HL
        JP      NC,AFA3B
;       JP      C,AFA3B
        PUSH    HL
        CALL    GET_HL
        LD      A,L
        POP     HL
        LD      (HL),A
AFA3B:  INC     HL
        JP      DIR_M

; ----------------------------------------------

DIR_R:  LD      A,90H                   ; 19 bytes
        LD      (PDU),A
AFA6D:  LD      (PDB),HL
        LD      A,(PDA)
        LD      (BC),A
        INC     BC
        CALL    AF999
        JP      AFA6D

; ----------------------------------------------

DIR_D:  CALL    HXHLBL                  ; 18 bytes
AF9C8:  CALL    LDXHX@
        CALL    AF996
        LD      A,L
        AND     0FH
        JP      Z,DIR_D
        JP      AF9C8

; ----------------------------------------------

KEY_FE: LD      A,(PC)                  ; 18 bytes
        AND     80H
        JP      Z,KEY_FE                ; ждём отпускания РУС/ЛАТ
        LD      A,(RUSLAT)
        CPL
        CALL    SET_RL
        JP      AFE1A

; ----------------------------------------------

AF996:  CALL    CHK_F4                  ; 11 bytes
AF999:  CALL    CMPDH
        INC     HL
        RET     NZ
        DEC     HL
POPAF:  POP     AF
        RET

; ----------------------------------------------

LD_BLK: CALL    LDBS                    ; 10 bytes
        LD      (HL),A
        CALL    AF999
        JP      LD_BLK

; ----------------------------------------------

RD_SCR: PUSH    HL                      ; 7 bytes
        LD      HL,(EK_ADR)
        LD      A,(HL)
        POP     HL
        RET

; ----------------------------------------------

RD_BLK: LD      A,0FFH
        CALL    @LD_BC
        PUSH    HL
        ADD     HL,BC
        EX      DE,HL
        CALL    LDBCBS
        POP     HL
        ADD     HL,BC
        EX      DE,HL
        PUSH    HL
        CALL    LD_BLK
        LD      A,0FFH          ; с поиском СБ
        CALL    @LD_BC
        POP     HL              ; БЫСТРЕЕ DB 06 -> LD B,NN

if      $ ne RABADR + 02CEH     ; FACE
        if1
        .printx * Internal subroutine PUSK_VG shifted ! *
        endif
endif

PUSK_VG:                        ; 1001.0011
                                ; 1100.0011

        PUSH    HL
        LD      HL,VG_75+1
        LD      (HL),0          ; reset commando
        DEC     HL              ; адрес VG_75
        LD      (HL),04DH       ; 0.1001101  77+1 знакомест
        LD      (HL),01DH       ; 00.011101  29+1 строк

        LD      (HL),99H        ; 1001.1001  9 +1 линия подчерк.
                                ; 9+1 линий в знакоместе
if      K_ORIG
        LD      (HL),93H
   else
        LD      (HL),0C3H
endif

        INC     HL              ; адрес VG_75+1
        LD      (HL),27H        ; start display commando
        LD      A,(HL)          ; read status
AFAE1:  LD      A,(HL)          ; read status
        AND     20H             ; mask 'Interrupt request flag'
        JP      Z,AFAE1         ; ждем конца строки
        LD      HL,VT_57+8
        LD      (HL),80H
        LD      L,4             ; VT_57+04
        LD      (HL),low SA     ; 0D0H
        LD      (HL),high SA    ; 076H
        INC     L               ; адрес VT_57+5
        LD      (HL),23H
        LD      (HL),49H
        LD      L,8             ; VT_57+8
        LD      (HL),0A4H
        POP     HL
        RET

; ----------------------------------------------

DIR_O:  LD      A,C
        OR      A
        JP      Z,AFB35
        LD      (KNS_WR),A
AFB35:  PUSH    HL
        CALL    CHSUMM
        POP     HL
        CALL    HXHLBL
        CALL    HXDEBL
        EX      DE,HL
        PUSH    HL
        LD      H,B
        LD      L,C
        CALL    HXHLBL          ; КС
        POP     HL
WR_BLK:
        PUSH    BC              ; КС

        LD      BC,0            ; выводим 256 байтов 00 (пилотон)
AFB4D:  CALL    WRBYTE
        EX      (SP),HL         ; это задержка 38 тактов
        EX      (SP),HL
        DEC     B
        JP      NZ,AFB4D

        LD      C,0E6H          ; выводим синхробайт E6
        CALL    WRBYTE

        CALL    WR_HL           ; выводим НА
        EX      DE,HL
        CALL    WR_HL           ; выводим КА

        EX      DE,HL
        CALL    AFB86           ; выводим блок

        LD      HL,0
        CALL    WR_HL           ; выводим 2 байта 00

        LD      C,0E6H          ; снова выводим с/байт E6
        CALL    WRBYTE

        POP     HL
        CALL    WR_HL           ; выводим КС

        JP      PUSK_VG

; ----------------------------------------------

; Вводит в HL HEX-число из строки по (DE) до нажатия ВК

GET_HL: LD      HL,0            ; 48 bytes
AF95D:  LD      A,(DE)          ; Выход: CY=1 если разделитель <ВК>
        INC     DE
        CP      13
        SCF
        RET     Z
        CP      ','
        RET     Z
        CP      20H
        JP      Z,AF95D

        LD      BC,ERROR
        PUSH    BC

        SUB     '0'
        RET     C               ; JP C,ERROR

        CP      9+1
        JP      C,AF982

        CP      'A'-'0'
        RET     C               ; JP C,ERROR

        CP      'F'-'0'+1
        RET     NC              ; JP NC,ERROR

        SUB     'A'-('9'+1)
AF982:
        ADD     HL,HL
        ADD     HL,HL
        ADD     HL,HL
        ADD     HL,HL
        RET     C               ; JP C,ERROR

        OR      L
        LD      L,A

        POP     AF
        JP      AF95D

; ----------------------------------------------

if      $+1 ne RABADR + 0378H
        if1
        .printx * Internal subroutine HXHLBL shifted ! *
        endif
endif

HXDEBL: EX      DE,HL
HXHLBL: PUSH    BC
        CALL    CR
@ADRBL: LD      A,H
        CALL    HEX_A
        LD      A,L
        CALL    HEXABL
        POP     BC
        RET

; ----------------------------------------------

LDBCBS: LD      A,8             ; загр.BC без поиска СБ
@LD_BC: CALL    LDBYTE          ; без поиска СБ, если A=8, с поиском, если A=FF
        LD      B,A
        CALL    LDBS
        LD      C,A
        RET                             ; 11 bytes

; ----------------------------------------------

ESCRES: XOR     A                       ; 5 bytes
SETESC: LD      (ESC_F),A
        RET

; ----------------------------------------------

@LDBYTE EQU     LDBYTE

LDBS:   LD      A,8

if      $ ne RABADR + 0398H
        if1
        .printx * LDBYTE for emulator B2M need be at FB98 ! *
        endif
endif

LDBYTE: PUSH    HL
        PUSH    DE
        PUSH    BC
        LD      D,A
AFB9C:  LD      A,80H
        LD      (VT_57+Cool,A

        LD      HL,0
        LD      C,L
        ADD     HL,SP
        LD      (TMPSTK),HL

        LD      SP,0
        LD      A,(PC)
        RRCA
        RRCA
        RRCA
        RRCA
        AND     1
        LD      E,A
AFBB7:  POP     AF
        LD      A,C
        AND     07FH
        RLCA
        LD      C,A
        LD      H,0
AFBBF:  DEC     H
        JP      Z,AFC34
        POP     AF              ; Регенерация ОЗУ
        LD      A,(PC)
        RRCA
        RRCA
        RRCA
        RRCA
        AND     1
        CP      E
        JP      Z,AFBBF
        OR      C
        LD      C,A
        DEC     D
        LD      A,(KNS_RD)
        JP      NZ,AFBDC
        SUB     012H
AFBDC:  LD      B,A
AFBDD:  POP     AF              ; Регенерация ОЗУ
        DEC     B
        JP      NZ,AFBDD
        INC     D
        LD      A,(PC)
        RRCA
        RRCA
        RRCA
        RRCA
        AND     001H
        LD      E,A
        LD      A,D
        OR      A
        JP      P,AFC0B
        LD      A,C
        CP      0E6H            ; ПРЯМОЙ СИНХРО-БАЙТ ?
        JP      NZ,AFBFF
        XOR     A
        LD      (INV_MG),A      ; ПРИЗНАК ИНВЕРСИИ МАГНИТОФОНА
        JP      AFC09

; ----------------------------------------------

AFBFF:  CP      19H             ; ОБРАТНЫЙ С/БАЙТ
        JP      NZ,AFBB7        ; 58 bytes
        LD      A,0FFH
        LD      (INV_MG),A      ; Tape inverse flag
AFC09:  LD      D,9
AFC0B:  DEC     D
        JP      NZ,AFBB7

        LD      HL,VT_57+4
        LD      (HL),low SA             ; 0D0H
        LD      (HL),high SA            ; 076H
        INC     HL
        LD      (HL),023H
        LD      (HL),049H
        LD      A,27H                   ; start display commando
        LD      (VG_75+1),A
        LD      A,0E0H                  ; reset count
        LD      (VG_75+1),A
        LD      L,8
        LD      (HL),0A4H

        LD      HL,(TMPSTK)
        LD      SP,HL

        LD      A,(INV_MG)
        XOR     C                       ; with Tape Inverse flag
        JP      POPREG

; ----------------------------------------------

BYTE2:  LD      A,C                     ; 14 bytes
        CP      'Y'
        JP      NZ,ESCRES
        CALL    HOME
        LD      A,2                     ; ПРИНЯТО 2 БАЙТА ESC,'Y'
        JP      SETESC

; ----------------------------------------------

WR_HL:  LD      C,H
        CALL    WRBYTE
        LD      C,L

if      $ ne RABADR + 0446H
        if1
        .printx * WRBYTE for emulator B2M need be at FC46 ! *
        endif
endif


@WRBYTE:
WRBYTE: PUSH    HL
        PUSH    DE
        PUSH    BC
        PUSH    AF
        LD      A,80H
        LD      (VT_57+Cool,A
        LD      HL,0
        ADD     HL,SP           ; временно храним стек
        LD      SP,0            ; для регенерации
        LD      D,8
AFC58:  POP     AF
        LD      A,C
        RLCA
        LD      C,A
        LD      A,1
        XOR     C
        LD      (PC),A
        LD      A,(KNS_WR)
        LD      B,A
AFC66:  POP     AF
        DEC     B
        JP      NZ,AFC66
        LD      A,0             ; XOR A = LD A,B (в данном случае незачем)
        XOR     C
        LD      (PC),A
        DEC     D
        LD      A,(KNS_WR)
        JP      NZ,AFC7A
        SUB     14
AFC7A:  LD      B,A

AFC7B:  POP     AF            ; подъем стека на [рег.B] ячеек
        DEC     B
        JP      NZ,AFC7B
        INC     D
        DEC     D
        JP      NZ,AFC58
        LD      SP,HL
        LD      HL,VT_57+4
        LD      (HL),low SA     ; 0D0H
        LD      (HL),high SA    ; 076H
        INC     HL              ; VT_57+5
        LD      (HL),23H
        LD      (HL),49H
        LD      A,27H           ; start display commando
        LD      (VG_75+1),A     ; 001.sss.bb    001.001.11
        LD      A,0E0H          ; сброс счетчиков строк и знакомест ???
        LD      (VG_75+1),A
        LD      L,8
        LD      (HL),0A4H        ; VT_57+8
        POP     AF
POPREG: POP     BC
        POP     DE
        POP     HL
@BAK    EQU     $
        RET

if      @BAK ne 0FCA4H
        if1
        .printx * Internal point 0FCA4H (need for emulator B2M) shifted ! *
        endif
endif

; ----------------------------------------------

HEX_A:  PUSH    AF
        RRCA
        RRCA
        RRCA
        RRCA
        CALL    NIBBLE
        POP     AF
NIBBLE: AND     0FH
        CP      10
        CCF
        ADC     A,30H
        DAA

COUT_A: LD      C,A
COUT_C:
        PUSH    HL
        PUSH    DE
        PUSH    BC
        PUSH    AF

        CALL    STATUS
        LD      HL,TOBACK
        PUSH    HL
        LD      HL,(POSX)
        EX      DE,HL
        LD      HL,(EK_ADR)
        LD      A,(ESC_F)
        OR      A
        JP      Z,NO_ESC
        DEC     A
        JP      Z,BYTE2         ; если второй байт ('Y')
        DEC     A
        JP      Z,AFD73         ; если третий байт
        LD      A,C             ; четвёртый байт
        SUB     20H
        LD      C,A
AFCDD:  DEC     C
        JP      M,ESCRES         ; СБРОС ESC_F И ВЫХОД
        PUSH    BC
        CALL    COD_18
        POP     BC
        JP      AFCDD

; ----------------------------------------------

NO_ESC: LD      A,C
        AND     7FH
        CP      7
        JP      Z,BEEP
        CP      8
        JP      Z,COD_08
        CP      10
        JP      Z,COD_0A
        CP      0CH
        JP      Z,HOME
        CP      13
        JP      Z,COD_0D
        CP      1FH
        JP      Z,CLS
        LD      C,A
        SUB     18H
        JP      Z,COD_18
        DEC     A
        JP      Z,COD_19
        DEC     A
        JP      Z,COD_1A
        DEC     A
        JP      Z,COD_1B

        LD      (HL),C          ; Видимый на экране символ
        CALL    COD_18          ; сместить на следующее знакоместо
        LD      A,D
        CP      3               ; мы на первой строке ?
        RET     NZ              ; если не на первой строке
        LD      A,E
        CP      8               ; мы в первой колонке ?
        RET     NZ              ; если не на первой колонке
        CALL    COD_19
COD_0A: LD      A,D
        CP      3+24            ; мы на последней строке ?
        JP      NZ,COD_1A       ; если не на последней строке

        PUSH    HL              ; РОЛИК ЭКРАНА
        PUSH    DE
        LD      HL,SCBASE+78
        LD      DE,SCBASE
        LD      BC,25*78
@LDIR:  LD      A,(HL)          ; пересылка блока размером [BC]
        LD      (DE),A          ; (HL) --> (DE)
        INC     HL
        INC     DE
        LOOP    @LDIR
        POP     DE
        POP     HL
        RET

; ----------------------------------------------

AFEB3:  LD      L,20H                   ; 47 bytes
AFEB5:  LD      A,(PB)
        CPL
        OR      A
        JP      Z,AFEAF
        DEC     L
        JP      NZ,AFEB5
        LD      L,8
AFEC3:  DEC     L
        RLCA
        JP      NC,AFEC3
        LD      A,H
        LD      H,L
        LD      L,A
        CP      1
        JP      Z,AFEFA
        JP      C,AFEF3
        RLCA
        RLCA
        RLCA
        ADD     A,20H
        OR      H
        CP      5FH
        JP      NZ,AFF06
        LD      A,20H
        POP     HL
        RET

; ----------------------------------------------

AFE2A:  DEC     H                       ; в рег.A=код клав, в рег.H- COUNT
        JP      NZ,AFE21                ; 39 bytes
        INC     A
        JP      Z,AFE22                 ; если код FF, то сброс флагов
        INC     A
        JP      Z,KEY_FE                ; если код FE (RUSLAT)

        PUSH    BC                      ; КЛИК
        LD      BC,5003H
        CALL    SND_BC
        POP     BC

        LD      A,(APVFLG)
        LD      H,0E0H
        DEC     A
        LD      (APVFLG),A
        JP      Z,AFE4C
        LD      H,40H
AFE4C:  LD      A,0FFH
        JP      AFE22

; ----------------------------------------------

; После 15 вызовов STATUS при нажатой клавише выставляется флаг KBDFLG

STATUS: LD      A,(PC)          ; 38 bytes
        RLA
        JP      NC,AFE0E        ; если нажат RUS/LAT
        LD      A,(KBDFLG)
        OR      A
        RET     NZ              ; если в SYMBUF уже есть символ
AFE0E:  PUSH    HL
        LD      HL,(LAST_K)
        CALL    XF81B
        CP      L
        LD      L,A
        JP      Z,AFE2A
AFE1A:  LD      A,1
        LD      (APVFLG),A
        LD      H,15H           ; число опросов, чтобы зафиксировать код
AFE21:  XOR     A
AFE22:  LD      (LAST_K),HL
        POP     HL
        LD      (KBDFLG),A
        RET

; ----------------------------------------------

AFF1A:  LD      A,(RUSLAT)              ; 33 bytes
        OR      A
        JP      Z,AFF2A
        LD      A,L
        CP      40H
        JP      M,AFF2A
        OR      20H
        LD      L,A
AFF2A:  LD      A,H
        AND     20H
        JP      NZ,AFF3F
        LD      A,L
        CP      40H
        JP      M,AFF3B
        LD      A,L
        XOR     20H
        POP     HL
        RET

; ----------------------------------------------

AFEFA:  LD      A,H                     ; 32 bytes
        LD      HL,TABK2
AFEFE:  ADD     A,L
        LD      L,A
        LD      A,(HL)
        CP      40H
        POP     HL
AFF04:  RET     C
        PUSH    HL
AFF06:  LD      L,A
        LD      A,(PC)
        LD      H,A
        AND     40H
        JP      NZ,AFF1A
        LD      A,L
        CP      40H
        JP      M,AFF3F
        AND     1FH
        POP     HL
        RET

; ----------------------------------------------

COD_08:                         ; ВХОД: E=POSX, D=POSY
                                ;       HL= экранный адрес

        LD      A,E             ; 29 bytes
        DEC     HL
        DEC     E
        CP      8               ; были в первой колонке ?
        RET     NZ              ; если были не в первой колонке
        LD      E,8+63          ; POSX последней колонки
        LD      BC,64
        ADD     HL,BC           ; экр.адрес в последнюю колонку
COD_19: LD      A,D
        CP      3               ; это первая строка ?
        LD      BC,-78
        JP      NZ,AFDF0
        LD      D,3+25
        LD      BC,24*78
AFDF0:  DEC     D
        ADD     HL,BC           ; Вычесть 78 или прибавить 24*28
        RET

; ----------------------------------------------

CLS:    LD      HL,SCBASE+832H          ; 22 bytes
        LD      DE,30*78 +1
CLSLOO: LD      (HL),0
        DEC     HL
        DEC     DE
        LD      A,E
        OR      D
        JP      NZ,CLSLOO
HOME:   LD      DE,308H
        LD      HL,SCBASE
        RET

; ----------------------------------------------

AFC34:  LD      HL,(TMPSTK)             ; 18 bytes
        LD      SP,HL
        CALL    PUSK_VG
        LD      A,D
        OR      A
        JP      P,ERROR
        CALL    CHK_F4
        JP      AFB9C

; ----------------------------------------------

AFD73:  LD      A,C                     ; 18 bytes
        SUB     20H
        LD      C,A
AFD77:  DEC     C
        LD      A,4
        JP      M,SETESC
        PUSH    BC
        CALL    COD_1A
        POP     BC
        JP      AFD77

; ----------------------------------------------

COD_1B: LD      A,1                     ; 5 bytes
        JP      SETESC

; ----------------------------------------------

if      $ ne 0FE63H
        if1
        .printx * Internal point FE63 (need for emulator emu80) shifted ! *
        endif
endif

CONIN:  CALL    STATUS
        OR      A
        JP      Z,CONIN
        XOR     A
        LD      (KBDFLG),A
        LD      A,(LAST_K)
        RET

; ----------------------------------------------

TOBACK: LD     (EK_ADR),HL              ; 24 bytes
        EX      DE,HL
        LD      (POSX),HL
        LD      A,80H
        LD      (VG_75+1),A
        LD      A,L
        LD      (VG_75),A
        LD      A,H
        LD      (VG_75),A
        POP     AF
        JP      POPREG

; ----------------------------------------------

DIR_C:  LD      A,(BC)                  ; 19 bytes
        CP      (HL)
        JP      Z,AF9E6

;       CALL    HXHLBL
;       CALL    LDXHX@
        CALL    JJJ_02

        LD      A,(BC)
        CALL    HEXABL
AF9E6:  INC     BC
        CALL    AF996
        JP      DIR_C

; ----------------------------------------------

BAKSTP: LD      A,E                     ; 15 bytes
        CP      L                       ; начало буфера ввода ?
        JP      Z,AF8F1
        CALL    RST_18
TZABOJ: defb    8,32,8+128
        DEC     HL
        JP      AF8F3

; ----------------------------------------------

COD_0D: LD      A,L                     ; 13 bytes
        SUB     E
        JP      NC,AFDF9
        DEC     H
AFDF9:  LD      L,A
        LD      BC,8
        LD      E,C
        ADD     HL,BC
        RET

; ----------------------------------------------

CHK_F4: CALL    XF81B                   ; 12 bytes
        CP      3
        RET     NZ
        CALL    PUSK_VG
        JP      ERROR

; ----------------------------------------------

MSGH:   LD      A,(HL)                  ; 11 bytes
        OR      A
        RET     Z
        CALL    COUT_A
        INC     HL
        RET     M
        JP      MSGH

; ----------------------------------------------

DIR_T:  LD      A,(HL)                  ; 9 bytes
        LD      (BC),A
        INC     BC
        CALL    AF999
        JP      DIR_T

; ----------------------------------------------

TABK1:  defb    0CH,1FH,1BH,0,1,2,3,4,5         ; 9 bytes

; ----------------------------------------------

RST_18: EX      (SP),HL                 ; 6 bytes
        CALL    MSGH
        EX      (SP),HL
        RET

; ----------------------------------------------

ASKCUR: LD      HL,(POSX)               ; 4 bytes
        RET

; ----------------------------------------------

AF91A:  SUB     B                       ; 2 bytes
        RET

; ----------------------------------------------

if      RABADR  EQ 0F800H
 if    $ eq 0
        if1
        .printx * Totally fit in 2K size ! *
        endif
 endif

 if    $ ne    0

     if high $ gt 0F8H
        @FREE   EQU     1000H - ($ and 0FFFH)
        rept    256
        if      $ ne 0
           defb 255
        endif
        endm
     endif
 endif

 if    $ ge    1
        if1
          .printx * Code length over 2048 bytes ! *
        endif
        @OVER   EQU     $
 endif

endif                           ; RABADR EQ 0F800H
        .dephase

        END



Последний раз редактировалось: barsik (06.02.20 16:49), всего редактировалось 2 раз(а)

_________________
***
barsik
barsik
Мастер++

Сообщения : 651
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Радио-86РК: Разное - Страница 3 Empty Re: Радио-86РК: Разное

Сообщение  Viktor2312 в 19.12.19 18:49

63
Прекращайте всё удалять, выложили, пусть лежит, вдруг потом кому нибудь пригодится. Лучше когда есть, чем нет и искать неизвестно где. А то у нас итак хватает блокираторов-идиотов, которые только и делают, что гадят и гадят, что ценнейшая информация становится не доступной, без VPS, но они и там думаю со временем нагадят.

Положили, пусть будет, да и постов на форуме станет больше - что очень хорошо.
Viktor2312
Viktor2312
Гуру+

Сообщения : 12354
Дата регистрации : 2012-08-10
Возраст : 41
Откуда : Пятигорск

Вернуться к началу Перейти вниз

Радио-86РК: Разное - Страница 3 Empty Возможная причина сбоев в динамических ОЗУ на РК86

Сообщение  barsik в 11.06.20 8:13

64
Среди людей плотно погрузившихся в тему РК86 сложилось мнение, что причиной сбоев динамических ОЗУ в РК86 является неправильное формирование сигналов /RAS /CAS на сдвиговом регистре 155 ИР1. Соответственно, как методы решения проблемы, более десятка опубликованных вариантов используют метод сдвижки туда-сюда фронтов /RAS /CAS путём введения задёржек (емкостями) или модификацию узла формирователя на 155 ИР1 (что естественно, также изменяет времянки у /RAS /CAS). Многих озадачивало, что почти все эти методы в конкретных аппаратах оказываются малополезными, хотя перепробовав весь десяток предлагаемых вариантов обычно можно найти вариант доработки РК86 дающий результат.

На самом деле все претензии к схеме формирователя /RAS /CAS в РК86 необоснованы, т.к эта схема формирователя /RAS /CAS в РК86 сделана просто идеально, точно по временным диаграммам представленным в РТМ на ОЗУ 565РУ3. А причиной сбоев является вовсе не неправильное формирование сигналов /RAS /CAS или неудачная разводка печати, а ставшее фатальным для РК86 идиотское желание его разработчиков сократить число корпусов в конструкции. Т.е желание поставить рекорд в минимальности схемы бытового компьютера по числу корпусов и цене. Это бессмысленное (точнее очень вредное) желание "экономить на детях" при цене 155-той серии в ~50 копеек за корпус дорого обошлось и стало хорошей иллюстрацией старой русской пословицы "Скупой платит дважды".

А в данном случае экономия всего нескольких корпусов стала просто фатальной, сделав всю конструкцию крайне неудачной, уродливой и бессмысленной. Лишь упомяну тут о том, что затрата всего нескольких доп.корпусов, в частности, использование атрибутов и введение доп.дешифратора для формирования адресов В/У дало бы Радио-86РК те же (или лучшие) апп.возможности, что имелись в текстовой иностранной промышленной микро-ЭВМ "Роботрон-1715" (которые в СССР поставлялись из-за рубежа в обмен на нефть, газ и другие сокровища недр).

Когда я настроил свой РК86, то тоже столкнулся с проблемой сбоев ОЗУ. Любопытно, что при ОЗУ 565 РУ3 у меня сбоев не было, но когда позднее я заменил ОЗУ на 565 РУ5, надёжность упала. Одна из мер предлагаемых для устранения глюков помогла лишь немного, другие не помогали вообще. По счастью, у меня имелось более 250 микросхем динамических ОЗУ, причём 80% из них были иностранного производства десятка разных фирм. Опытным путём я обнаружил, что только при использовании микросхем TMS 4164A-20NL надёжность была 100%. Но стоило применить хоть одну ОЗУ иной фирмы, как начинались сбои. Объяснить феномен никто не смог.

Недавно, с целью турбирования, я наконец добавил в свой РК86 буфер на ОЗУ, сделанный на двух 589АП16, что лампово (оказалось удачно, что как раз ими я запасся в изобилии для Специалиста ещё в 80-тые годы XX-века). 589 АП16 возможно даже лучше, чем 1533 АП6, т.к позволяют развязать у РУ5-тых входы от выходов, что дополнительно разгружает выходы ОЗУ, что возможно позволит сильнее турбировать или поднимет надёжность.

И тут неожиданно обнаружилось, что после этого в моей плате РК стали работать не только уникальные фирменные TMS 4164 (коих, увы, у меня сохранилась всего 1 банка), но и обычные отечественные 565 РУ5. К сожалению, разных динамических ОЗУ у меня осталось совсем мало (их давно уже не 250, а лишь всего пара банок РУ5, т.к ценные фирменные вражеские 4164 я ещё в 90-тые годы XX-века сдуру потратил на Орионы-128).

Ещё нужна проверка на бОльшем количестве ОЗУ 565 РУ5 и на разных иностранных ОЗУ 4164. Но, если буфер - это панацея, то это наводит меня на мысль, что проблемы сбоев в РК возникают вовсе не из-за неверного формирования /RAS /CAS, а из-за конфликта на шине вызванного отсутствием буферов ОЗУ.

Компьютер РК86 давно уже включён в книгу рекордов Гинесса, как единственный в мире компьютер в котором динамические ОЗУ 565 РУ5 применены без буферов. Возможно данные на выходе 565 РУ5 не мгновенно спадают по фронту 0-->1 сигнала /CAS и вызывают помехи на шине данных при чтении процессором следующей команды, а небуферизованные выходы процессора КР580 не в состоянии вытащить шину с кучей паразитных емкостей. Это объясняет почему в промышленных РК-подобных, где применены буфера никаких проблем со сбоями в ОЗУ не возникало. А также то, что предлагаемые меры борьбы со сбоями ОЗУ работают только на конкретном образце. Достаточно в другом компьютере иметь не только иные задержки для /RAS /CAS, но и чуть меньшую нагрузку шины на землю или +5В (из-за разных серий микросхем и разброса их параметров) и та же самая мера исправления дефекта помогающая на одной машине не помогает на другой.


Последний раз редактировалось: barsik (18.06.20 3:06), всего редактировалось 1 раз(а)

_________________
***
barsik
barsik
Мастер++

Сообщения : 651
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Радио-86РК: Разное - Страница 3 Empty Re: Радио-86РК: Разное

Сообщение  Microsha в 11.06.20 11:32

65
barsik пишет:
Недавно, с целью турбирования, я наконец добавил в свой РК86 буфер на ОЗУ, сделанный на двух 589АП16, что лампово (оказалось удачно, что как раз ими я запасся в изобилии для Специалиста ещё в 80-тые годы XX-века). 589 АП16 в данном случае лучше, чем 1533 АП6, т.к позволяют развязать у РУ5-тых входы от выходов, что дополнительно разгружает выходы ОЗУ (и соответственно позволяет сильнее турбировать).
А вы могли бы привести схему доработки? У меня до сих по валяется новодельная плата, со сбойным ОЗУ. Никакие ухищрения с ИР1 не помогли, а возможности подбора м/с ОЗУ у меня нет.

Microsha
новичёк

Сообщения : 15
Дата регистрации : 2019-09-12

Вернуться к началу Перейти вниз

Радио-86РК: Разное - Страница 3 Empty .

Сообщение  barsik в 18.06.20 2:06

66
Microsha пишет:
barsik пишет:наконец добавил в свой РК86 буфер на ОЗУ, сделанный на двух 589 АП16

А вы могли бы привести схему?
Схема стандартная для 589 АП16, в соответствии с её РТМ (её можно посмотреть в оригинальной схеме Специалиста в журнале "Моделист-Конструктор" 02.1987). АП16, в отличие от ВА86 и АП6, позволяет буферизовать ОЗУ у которых нельзя соединять входы и выходы (напр. 565 РУ1, РУ2). Но 565 РУ3 как раз позволяют это. Обычно ОЗУ разработанные после конца 70-тых годов имеют объединённые входы-выходы и для них применять 589 АП16 позволяющие развязку входов/выходов уже не требуется.

Радио-86РК: Разное - Страница 3 RAM.1592406650

Увы, в оригинальной печ.плате РК86 отрезать входы от выходов проблематично, т.к для этого необходимо снять панельки. Есть панельки, что легко демонтировать поддев пинцетом и после снятия платстмассового корпуса выпаять контакты по одному. Но таких довольно ненадёжных, но легко извлекаемых панелек в последние 30 лет встречается мало. Обычно ставят дорогие панельки, которые для сохранения печатных проводников и металлизации отверстий, можно только выкусить раздирая пластмассу кусачками на фрагменты (это очень утомительная, неприятная работа).

Т.к при соединении входов и выходов к буферу идёт меньше цепей, то при РУ5 даже АП16 включают по схеме АП6, (для чего у РУ5 посредством короткого замыкания выводов организуется одна общая цепь входов-выходов). Так сделано в плате Специалист-Экспресс и в трёх-банковой плате на РУ3, что была у меня до Экспресса.

Из-за того, что входы и выходы соединены (причём под панельками), в РК86 буфера 589 АП16 по схеме с раздельными входами/выходами не поставить. Потому по схеме с раздельными входами/выходами АП16 можно поставить только в новодельную плату РК. Но это вряд-ли произойдёт, т.к, раз изобретена схема установки статики в РК86, то уже не имеет смысла выпускать платы новодела на динамических ОЗУ. А у статики - объединённые входы-выходы, потому, естественно, для статики удобнее АП6 (т.к один корпус это меньше, чем два корпуса). Да и для статики буфера не особо нужны, т.к статика скоростная, отчего выходы у неё мощные.

Но я не для того, чтобы разделить входы у ОЗУ, применил 589 АП16. И даже не потому, что у меня они имеются (в количестве аж ~50 штук, хотя почти все паянные, выпаяны из плат СМ-1800), в то время как 555 АП6 надо покупать (или выпиливать из старых плат). А именно потому, что для монтажа вторым этажом на оригинальной плате РК от применения 589 АП16 никуда не уйти. Из-за того, что 20-ти нОгую микросхему на 14-ти- или 16-тинОгую вторым этажом не припаять. Потому приходится применять 16-тинОгие АП16 или АП26. И, естественно, их можно смонтировать лишь над 16-тинОгими 580 ГФ24, 555 ИД7 или 555 КП11. В моей плате над ГФ24 уже смонтирован второй кварцевый генератор (требуемый при улучшении фонта до 9*8 ), естественно, это генератор не на ещё одной ГФ24 (т.к они много жрут), а на ЛН1. А над ИД7 D11 у меня смонтирован ещё один ИД7, нужный для формирования доп. чип-селектов. Потому пришлось монтировать две 589 АП16 над двумя 555 КП11. При этом провода получились длинными (чтоб провода не портили дизайн их, естественно, пустил с нижней стороны платы).

У меня давно возникло с трудом подавляемое желание отпилить с платы РК участок печ.платы с 8-ю панельками под 565 РУ5 и привинтить на это место другой фрагмент содержащий буфер АП6 и разъём под SIMM-30 (который я уже давно выпилил из дохлой платы 486-той PC). Препятствует удовлетворению этого скромного желания лишь отсутствие схемы формирующей полноценный 10-ти битовый вектор регенерации, необходимый для регенерируемости SIMM-30 в РК86).
Microsha пишет:У меня до сих по валяется новодельная плата, со сбойным ОЗУ. Никакие ухищрения с ИР1 не помогли
Получается, что победительная мера по устранению глюков ОЗУ от А.Сапронова из Калуги (смена цепей на контактах 1 и 6 ИР1) оказалась всё-же не победительной и не срабатывает. Предположительно поможет замена процессора КР580 на Z80. Кстати, установка АП16 вторым этажом не очень эстетична, потому я надеюсь, что удастся избавиться от этого как раз путём замены КР580 на Z80.

Хочу применить SU880 (это КМОП версия Z80 жрущая всего несколько мА, при работе совершенно холодная) и тактировать его клоком NTSC кварца 3.579 МГЦ. Такой кварц широко распространён (у тех, кто распаивает на детали старые телевизоры), а в РК удобен именно тем, что при делении 3.579 МГЦ на 2 получается стандартный клок РК требуемый для режима Нетурбо. Стандартная скорость РК86 необходима для работы программы прошивателя для УФ-ПЗУ 573 РФ8, прошивателя РПЗУ с проволочными перемычками 556 РТ4/РТ11/РТ5 и 155 РЕ3, а также для игр XONIX и PACMAN (другие РК-игры вообще не представляют интереса в силу низкого игрового аспекта).

Сам РК86 и его ПО меня не интересуют (даже если переделать РК в полноценно графический с экраном 192*102), поэтому, чтобы поиметь от платы РК86, как "от паршивой овцы хоть шерсти клок", начал недавно переделывать плату РК в инструментальный компьютер и текстовый терминал. Для этого не буду подключать в шину ничего (сверх того, что есть по журнальной схеме). А весь интерфейс с внешним миром - только через ППА D14 (в том числе и НГМД, НЖМД, энергонезависимый эл.диск на статике и 580 ВИ53). Протокол шины для внешних БИС подключенных к ППА эмулируется программно. Хотя обмен через ППА тормозит, но это легко компенсируется повышенным клоком Z80 (ускорение при клоке 3.5795 МГЦ -  в 2.5 раза от базовой версии).

ПЗУ в адресном пространстве C400...FFFF, например, по нижеприведённой схеме, даёт 15/30 кб резидентных программ, причём без расходования на это ППА D14 под нужды ROM-диска (т.к ППА D14 нужен как интерфейс к другим периферийным устройствам, для этого он должен быть выведен на 2-3 разъёма (слота), куда вставляются периферийные платы) и без всякой нагрузки шины дополнительным ПЗУ (т.к ПЗУ остаётся всего одно, но это уже не 573 РФ2, а 573 РФ8 ). ИД14 в такой схеме запаивается на место DD11 (ИД7), т.к это сокращает число корпусов (благодаря тому, что ИД14 содержит целых два дешифратора). Н, естественно, можно в роли ИД14 оставить имеющийся на плате ИД7 (т.к он формирует те же 4 чип-селекта с шагом 8 кб на адр.пространстве 8000...FFFF), но в этом случае для формирования доп.чип-сектов для портов придётся ставить ещё один дешифратор).

В принципе для разгрузки шин даже ППА клавиатуры D20 можно снять. Пока использую качественную, но не очень эстетичную и неудобную (т.к высокая 7 см и пока без корпуса) аппаратную ASCII-клавиатуру от венгерского АЦПУ "Консул" (её схема содержит три десятка микросхем 155-той серии и РПЗУ и жрёт тока не меньше, чем сам РК86, причём даёт даже не все нужные РК-шные коды). Эта клавиатура вечная, т.к не контактная, а с датчиками на эффекте Холла. Изначально эту клавиатуру я купил (для) и использовал на ИРИШЕ. Но для ИРИШИ у меня есть ASCII-клавиатура от Apple-IIe (она красивее и эргономичнее). Да и она ИРИШЕ пока не нужна, т.к у меня частично сдохла последняя рабочая плата граф.адаптера ИРИШИ, - начинает работать лишь через минуту, после прогрева платы (а два других граф.адаптера сдохли ещё 2 года назад). ПЗУ РК86 с поддержкой ASCII клавиатуры имею ещё с начала 90-тых (кстати, драйвер апп.клавиатуры намного короче) и даже в основном именно с ними использовал свой РК.

Теоретически для ASCII клавиатуры не обязателен даже клавиатурный ППА D20, - её можно читать через тот же универсальный интерфейс ППА D14. А если имеющуюся симпатичную клавиатуру с матрицей 6*13 мне не удастся совместимо пристроить на Специалист, то возможно именно её позднее подключу через ППА D20 к РК86 (т.к для инструментальной машины совместимость по клавиатуре не волнует). Или корветовскую клавиатуру (но там матрица ещё более крупная). Теоретически для РК-игр вместо клавиатурного ППА D20 можно поставить ИР22 через которую по схеме РК-клавиатуры подключить джойстик на курсорные клавиши, <ВК> и <пробел>. Клавиатурное ППА нужно лишь для некоторых игр, - проще переделать опрос клавиш в игре, чем надрываться пайкой контактной матрицы клавиш, в то время как у меня давно без дела лежат пять штук качественных клавиатур промышленного производства.

Радио-86РК: Разное - Страница 3 ROM_C400.1592436058

_________________
***
barsik
barsik
Мастер++

Сообщения : 651
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

Радио-86РК: Разное - Страница 3 Empty Re: Радио-86РК: Разное

Сообщение  Спонсируемый контент

67

Спонсируемый контент


Вернуться к началу Перейти вниз

Страница 3 из 3 Предыдущий  1, 2, 3

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения