Май 2019
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031  

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

Последние темы
» Эмулятор радио 86рк
автор parsec Вчера в 18:44

» Эмулятор ИРИШИ для тех, кто не имеет её реальной
автор barsik Вчера в 18:38

» Новинки. Книги. Часть 1.
автор Viktor2312 Вт Май 21 2019, 16:21

» Программирование для ИРИШИ
автор barsik Пн Май 20 2019, 21:14

» Новинки. Книги. Часть 3.
автор Viktor2312 Пн Май 20 2019, 16:38

» Модуль контроллера графического дисплея (МКГД).
автор barsik Вс Май 19 2019, 13:40

» ATM Turbo 2+ v7.10
автор alemorf Сб Май 18 2019, 20:03

» Схемы и документация на отечественные ЭВМ и ПЭВМ и комплектующие
автор Viktor2312 Сб Май 18 2019, 18:10

» Куплю микросхемы КР1818ВГ93 и КМ1810ВТ3.
автор Savoj Чт Май 16 2019, 07:51

» Радио-86РК: Расширение ОЗУ
автор barsik Чт Май 16 2019, 01:26

» Клавиатура ИРИШИ
автор barsik Ср Май 15 2019, 16:57

» ИРИША и магнитофон
автор barsik Пн Май 13 2019, 04:23

» Новости криптовалют: статьи, заметки, разное...
автор Viktor2312 Сб Май 11 2019, 03:01

» Жалобы/пожелания по работе форума
автор Viktor2312 Сб Май 11 2019, 00:50

» Альтернативные КНГМД для ИРИШИ
автор barsik Пт Май 10 2019, 01:12

» Видеокарты (GPU). Статьи, заметки, очерки, разное...
автор Viktor2312 Чт Май 09 2019, 19:55

» Алгоритм SHA-256 и др., хеш (hash), хеширование, майнинг.
автор Viktor2312 Чт Май 09 2019, 01:30

» Обсуждение желаемых новодельных плат расширения и мелких усовершенствований базовых плат
автор barsik Ср Май 08 2019, 16:06

» Разное
автор Viktor2312 Вт Май 07 2019, 19:19

» Для новичков (криптовалюта).
автор Viktor2312 Вт Май 07 2019, 17:32

» Ассемблер для современных CPU Intel.
автор Viktor2312 Вт Май 07 2019, 17:12

» МКНГМД Вариант-3. Версия на К1818ВГ93
автор barsik Вт Май 07 2019, 15:15

» Обзор крипто проектов.
автор Viktor2312 Вт Май 07 2019, 12:57

» 7 Мая. День Радио!
автор Viktor2312 Вт Май 07 2019, 12:00

» "Радио-86РК". Статьи, заметки, очерки, разное...
автор barsik Сб Май 04 2019, 20:20

Самые активные пользователи за месяц
Viktor2312
Карта памяти ИРИШИ для программистов Vote_lcapКарта памяти ИРИШИ для программистов Voting_barКарта памяти ИРИШИ для программистов Vote_rcap 
barsik
Карта памяти ИРИШИ для программистов Vote_lcapКарта памяти ИРИШИ для программистов Voting_barКарта памяти ИРИШИ для программистов Vote_rcap 
alemorf
Карта памяти ИРИШИ для программистов Vote_lcapКарта памяти ИРИШИ для программистов Voting_barКарта памяти ИРИШИ для программистов Vote_rcap 
demetrius2003
Карта памяти ИРИШИ для программистов Vote_lcapКарта памяти ИРИШИ для программистов Voting_barКарта памяти ИРИШИ для программистов Vote_rcap 
a.oleg.a
Карта памяти ИРИШИ для программистов Vote_lcapКарта памяти ИРИШИ для программистов Voting_barКарта памяти ИРИШИ для программистов Vote_rcap 
parsec
Карта памяти ИРИШИ для программистов Vote_lcapКарта памяти ИРИШИ для программистов Voting_barКарта памяти ИРИШИ для программистов Vote_rcap 
Savoj
Карта памяти ИРИШИ для программистов Vote_lcapКарта памяти ИРИШИ для программистов Voting_barКарта памяти ИРИШИ для программистов Vote_rcap 
VladimirS
Карта памяти ИРИШИ для программистов Vote_lcapКарта памяти ИРИШИ для программистов Voting_barКарта памяти ИРИШИ для программистов Vote_rcap 

Поиск
 
 

Результаты :
 


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


Карта памяти ИРИШИ для программистов

Перейти вниз

Карта памяти ИРИШИ для программистов Empty Карта памяти ИРИШИ для программистов

Сообщение  barsik в Чт Янв 10 2019, 11:57

1
Авторы почему-то постеснялись опубликовать карту памяти ИРИШИ. Хотя знание и понимание работы диспетчера ОЗУ необходимо программисту при разработке программ для ИРИШИ. Мало кто знает и понимает работу диспетчера памяти ИРИШИ.

Несмотря на то, что в красной книге написано, что ИРИША может расширяться до 256 кб, но схемотехника позволяет использовать лишь 16 кб ПЗУ и 192 кб ОЗУ. А предложенная в публикации карта памяти поддерживает ещё меньший объём ОЗУ, а именно всего 128 кб. Потому в красной книге надо исправить, указав, что ОЗУ в ИРИШЕ до 128 кб, а не до 256 кб.

Т.е в базовую ИРИШУ может быть добавлена плата содержащая лишь одну единственную доп.банку 565 РУ5. Или же можно заменить 565 РУ5 на плате граф.адаптера на 565 РУ7 и с текущей картой памяти использовать на 128 кб.

Естественно можно с помощью внешней схемы обеспечить прокачку в одном из окон в 16 кб любого дополнительного объёма дополнительной памяти, хоть гигабайты. Но переключение памяти в этом окне должен делать уже внешний порт установленный на этой плате расширения. Именно так и сделано в расширении ОЗУ на плате КНГМД, где из этого доп.ОЗУ организуется эл.диск в 256 кб.

Но если речь идёт о ОЗУ управляемом резидентным диспетчером памяти, то больше, чем 192 кб не получить. К тому же в каждой из 4-х карт памяти один сегмент 16К должен быть общим с другими картами памяти. Карта памяти хранится в РПЗУ 155 РЕ3 и может быть изменена, если у пользователя есть прошиватель РПЗУ, что даёт некоторую гибкость.

Например, можно имея 3 банки ОЗУ реализовать коммутацию кусками по 48К (0000...BFFF), оставляя верхние 16К некоммутируемыми. Но это всё-равно даст лишь 160 кб ОЗУ.

Итак, объясняю как работает диспетчер памяти ИРИШИ. В резидентном ППА на плате ЦП есть два бита PC2 и PC3, которые задают текущую карту памяти. Соответственно можно включить карту 0, 1, 2 или 3. В базовом варианте ИРИШИ используются только карты 0 и 2 (сами программы работают в карте 2, включая карту 0 лишь когда требуется вызвать подпрограмму из ROM-BIOS). Это вызвано тем, что ОЗУ в базовом варианте всего одна банка и бессмысленно включать карты памяти 1 и 3 в которых половина адресного пространства пустота.

В идеологии ИРИШИ предполагается деление памяти именно на банки (точнее участки по 64 кб). Которые имеют номера 0, 1, 2 и 3. Причём банка 0 - это ПЗУ, размером всего в 16 кб. При базовой прошивке РЕ3 реализована вот такая карта памяти. Не надо путать номер банки и номер включённой карты памяти. Это разные понятия. Заметьте, что в ни в одной из 4-х карт памяти нет обращений к банку 3 (что чётко подтверждает то, что в ИРИШЕ максимум ОЗУ это 128 кб). Банка памяти с номером 2, т.е участок памяти со сплошной адресацией от 20000 до 2FFFF располагается в текстовом адаптере. И это единственная (причём очень медленная) память, что есть в базовой ИРИШЕ.

Карта памяти ИРИШИ:

0: 0000 -- 0.MS4 -- ROM-BIOS
0: 2000 -- 0.MS3 -- ROM-BIOS
0: 4000 -- 2.4000
0: 6000 -- 2.6000
0: 8000 -- 2.8000
0: A000 -- 2.A000
0: C000 -- 2.0000  --- экран
0: E000 -- 2.2000  --- экран

1: 0000 -- 2.C000
1: 2000 -- 2.E000
1: 4000 -- 1.0000  --- пусто
1: 6000 -- 1.2000  --- пусто
1: 8000 -- 2.8000
1: A000 -- 2.A000
1: C000 -- 1.4000  --- пусто
1: E000 -- 1.6000  --- пусто

2: 0000 -- 2.C000
2: 2000 -- 2.E000
2: 4000 -- 2.4000
2: 6000 -- 2.6000
2: 8000 -- 2.8000
2: A000 -- 2.A000
2: C000 -- 2.0000  --- экран
2: E000 -- 2.2000  --- экран

3: 0000 -- 2.C000
3: 2000 -- 2.E000
3: 4000 -- 1.8000  --- пусто
3: 6000 -- 1.A000  --- пусто
3: 8000 -- 2.8000
3: A000 -- 2.A000
3: C000 -- 1.C000  --- пусто
3: E000 -- 1.E000  --- пусто

То, в какой банке и по каким адресам располагается экран определяет 556 РТ4, что стоит на плате граф.адаптера. Ясно, что установив в крейт ещё одну банку памяти, например на статике 62256 или w24257 (на РУ5 невыгодно, т.к для неё нужны узлы регенерации), мы получаем ИРИШУ с 128 кб ОЗУ.

Любому программисту очевидно, что предложенные авторами карты памяти неудобны ни для программ, ни для организации эл.диска. А ещё более неудобны для адаптации для ИРИШИ программ от РК86 и ОРИОНА. Т.к область C000...FFFF занята экраном, и мы не можем иметь стандартные входы в ПЗУ F800.

Для расширения достаточно добавить всего одну 62256, включив её или в карте памяти 1 или 3. Тогда, соответственно, эта карта памяти (1 или 3) будет предоставлять все 64К для программ (в то время как карты 0 и 2, оставляют для программ всего 32 и 48 кб соответственно). Наличие 64 кб позволяет получить CP/M с максимально высоким TPA. Прибавление в банку 1 ещё 32 кб, чтобы банка стала полной в 64 кб практически не улучшит потребительные качества изделия (для эл.диска 32К мало, а памяти для программ достаточно 64К).

Самым простым способом расширения ОЗУ ИРИШИ является установка 62256 в панельку на плате ЦП. Если мы посмотрим на карту памяти 1 и 3, то видно что половина ОЗУ останется медленной, т.к берётся из текстового адаптера, а 32К берётся из быстрой дополнительной памяти в банке 1. Потому при установке 64 кб быстрой памяти карту памяти желательно поменять. Например, карту памяти 1 использовать для интерфейса между картами, а карту памяти 3 составить полностью из скоростного ОЗУ. Это позволит увеличить быстродействие ИРИШИ почти в два раза.

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

Для внутренних узлов платы МП с выхода РЕ3 задействованы /MS1, /MS3 и /MS4. По этим сигналам автоматически формируется готовность CPU и внешняя магистраль не открывается. /MS3 и /MS4 это выборки /CS ПЗУ стоящих соответственно в двух панельках по 28 ног. При применении 27256 (или 27128) достаточно одной выборки (или /MS3 или /MS4 в зависимости от того в какую панельку поставлена 27256). Тогда вторую выборку можно использовать для выбора 62256 или расширения ПЗУ. Но это требует перепрошивки РПЗУ 155 РЕ3. Для этого надо иметь соответствующий прошиватель, который имеется пока ещё не у каждого владельца ИРИШИ.


Последний раз редактировалось: barsik (Вт Мар 26 2019, 04:18), всего редактировалось 2 раз(а) (Обоснование : исправил две грамматические ошибки)

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

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

Посмотреть профиль

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

Карта памяти ИРИШИ для программистов Empty карта памяти, чтобы ИРИША работала без тормозов

Сообщение  barsik в Вт Янв 15 2019, 16:15

2
А теперь давайте прикинем член к носу, т.е подумаем о том, какую карту памяти каждый иришатник хотел бы себе поиметь (если бы имел прошиватель ПЗУ и чистую 155 РЕ3).

Карта памяти 0 не оптимальная, она оптимизирована лишь для вывода на экран подпрограммами в ПЗУ. Для бездисковой машины это нормально. Но для машины в которой есть  дисковод, винчестер или сверхскоросной перфоратор, и потому используется DOS, - не вполне. В ROM-BIOS принято прошивать драйвера внешних устройств, которые в каждой машине могут быть уникальными. Например, если используется дисковод, то в ROM-BIOS прошиты подпрограммы чтения/записи сектора с дискеты. Если используется винчестер, то в ROM-BIOS прошиты аналогичные подпрограммы для винчестера.

Обычно DOS для КР580/Z80 загружаются в старшие адреса (исключение ISIS, она размещается в адресах 0...3FFF). И значит дисковый буфер в который подпрограмма из ПЗУ должна считать сектор, тоже будет располагаться под вершиной ОЗУ, т.е выше C000. Но увы, в адресах C000...FFFF располагается экран ИРИШИ. И убрать его оттуда невозможно. В каких адресах физически включён экран определяет прошивка D6 556 РТ4 на плате граф.адаптера, но это неважно, т.к карта памяти позволяет переключить экран в любой сегмент. Проблема в том, что все имеющиеся программы ИРИШИ, в частности ROM-BIOS, используют экран с C000, потому без длительного электро-траха с программами и утраты совместимости с базовой ИРИШЕЙ, экранный адрес не изменить. Это трагическое обстоятельство делает невозможным использовать дисковые процедуры в ROM-BIOS. Это не фатально, но драйвера DOS придётся размещать в ОЗУ, что снижает TPA на пару килобайт.

По тем же причинам мы не можем изменить прошивку карты 2. Остаётся менять карты 1 и 3. Естественно, менять карту памяти надо только, если добавлено ОЗУ или ПЗУ. С точки зрения работы программ требуется поиметь сплошные 64 кб, причём максимально скоростные, т.е составленные не из ОЗУ банки 2 (которая находится внутри текстового адаптера и потому тормозная). Прикладные программы обычно работают в младших адресах (в первых 32 кб), только DOS обычно в вершине ОЗУ. Потому при расширении ОЗУ на безтормозной 62256 её желательно включить в адресах 0...7FFF. А если ставится доп.ОЗУ в 64 кб, то в карте 1 безтормозным делается всё адресное пространство памяти. Тогда для переключения карт памяти придётся или эмулировать некоммутируемый участок в области FFC0 (это неиспользуемый остаток экранной области) или использовать вызов через карту 3, в которой будут сегменты ОЗУ из карты 0.

Итак, для того, чтобы ИРИША работала без тормозов надо поставить 64 кб дополнительного ОЗУ в банк 1 и карты памяти 1 и 3 сделать такими:

1: 0000 -- 1.0000
1: 2000 -- 1.2000
1: 4000 -- 1.4000
1: 6000 -- 1.6000
1: 8000 -- 1.8000
1: A000 -- 1.A000
1: C000 -- 1.C000
1: E000 -- 1.E000 -- DOS и дисковый буфер
 
3: 0000 -- 2.0000
3: 2000 -- 2.2000
3: 4000 -- 2.4000
3: 6000 -- 2.6000
3: 8000 -- 2.8000
3: A000 -- 2.A000
3: C000 -- 1.C000
3: E000 -- 1.E000 -- DOS и дисковый буфер
 
При этом вызов подпрограмм ROM-BIOS делается в 2 этапа. Сначала из карты 1 программой выше C000 включается карта 3, а там программой расположенной в 4000...BFFF (это кстати общее правило для переключения на карту 0) включается карта 0 и делается CALL ROM-BIOS.

В таком варианте для ускорения работы DOS можно изменить и карту 0. При этом теряется совместимость с имеющимся ПО ИРИШИ. Тогда в карту 0 включают сегмент старших адресов банка 1 (там где код DOS и дисковый буфер). Тогда в адресном пространстве оказываются и драйвер диска (прошитый в ПЗУ ROM-BIOS) и дисковый буфер и чтение сектора производится прямо в дисковый буфер DOS.

0: 0000 -- 0.MS4 --- ROM-BIOS
0: 2000 -- 0.MS3 --- ROM-BIOS
0: 4000 -- 2.4000
0: 6000 -- 2.6000
0: 8000 -- 1.C000
0: A000 -- 1.E000 -- DOS и дисковый буфер
0: C000 -- 2.C000 -- экран
0: E000 -- 2.E000 -- экран

Если же нежелательно терять совместимость с ретро ПО, то для работы дисковых драйверов из ROM-BIOS можно включать ROM-BIOS в карте 3. Вот так:

3: 0000 -- 0.MS4 --- ROM-BIOS
3: 2000 -- 0.MS3 --- ROM-BIOS
3: 4000 -- 2.4000
3: 6000 -- 2.6000
3: 8000 -- 1.C000
3: A000 -- 1.E000 -- DOS и дисковый буфер
3: C000 -- 2.C000 -- экран
3: E000 -- 2.E000 -- экран
 
Не знаю рассчитаны ли стандартные подпрограммы ПЗУ для работы в карте 3. Но не вижу необходимости ROM-BIOS-ным стандартным подпрограммам (т.е п/п-мам работы с экраном, клавиатурой и магнитофоном) переключать карты памяти. Так что возможно использовать карту 0 для вызова всех стандартных п/п-рамм не потребуется, и вызов п/п-мм ROM-BIOS останется одноэтапным в карте 3.

PS. Обратите внимание, что участки по 16 кб всегда коммутируются так, что адреса второго 8-ми килобайтового блока всегда больше на 2000, чем у первого блока. А адрес первого 8-ми килобайтового блока всегда кратен 4000. Хотя каждый из 8-ми килобайтовых блоков можно брать из разных банок, но адреса должны соответствовать приведённому правилу. Т.е можно поиметь вот такой сегмент:

3: 4000 -- 1.С000
3: 6000 -- 3.E000

но нельзя сделать так:

3: 4000 -- 1.С000
3: 6000 -- 3.2000

т.к адреса A14 и A15 для обоих 8-ми килобайтовых блоков всегда одинаковы и отличие адресации блоков только в адресе A13.


Последний раз редактировалось: barsik (Ср Янв 16 2019, 21:33), всего редактировалось 1 раз(а)

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

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

Посмотреть профиль

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

Карта памяти ИРИШИ для программистов Empty .

Сообщение  barsik в Ср Янв 16 2019, 11:20

3
Вот, что можно прочитать в иришиной красной книге:


Карта памяти ИРИШИ для программистов Krasnayaknigaskrinshot.1547622892


А почему собственно, авторы пишут, что минимальный размер коммутируемого сегмента памяти - 16 кб? Ведь они тут же пишут, что минимальный сегмент для внутреннего ПЗУ равен 8 кб, а для формирования упр.сигналов используется одна и та же микросхема 155 РЕ3, у которой на один из входов подан адрес А13. Это значит, что переключение внутри 155 РЕ3 происходит с шагом в 8 кб, а не в 16 кб.

Спойлер:

Кстати, если бы авторы применили более грамотный способ начального пуска (т.е способ включить ПЗУ с 0, например как в РК86 прямой подачей сигнала /НП на /CS ПЗУ), то они получили для управления картой бы на один вход в РЕ3 больше и это позволило бы поиметь или 8 карт памяти вместо 4, или уменьшить дискретность диспетчера ОЗУ до 4 кб.


Другое дело, что на выходе РЕ3 сигнала МА13 для системной магистрали уже нет (не хватило выходов у РЕ3, их там оказалось всего 8, отчего одного выхода не хватило, что можно было исправить поставив две РЕ3 в параллель). Это означает, что двигать, т.е перемещать сегменты по адресному пространству вверх-вниз мы можем только кусками по 16 кб и с шагом в 16 кб.

Но выбирать внутри куска памяти в 16 кб мы можем любой конкретный чип-селект из четырёх с шагом в 8 кб, хотя и с ограничением, что физические адреса A14 и A15 у обоих устройств (занимающих каждый 8 кб) одинаковые.

Но кстати, и это разработчики ИРИШИ могли изменить, потому что один выход /MS2 вообще никак не используется в ИРИШЕ. Он выходит лишь на локальный разъём ГРПМ-31, но по нему не формируется готовность CPU и буфера системной магистрали не закрываются. Что означает, что его использовать вообще никак нельзя. Т.к на системную магистраль /MS2 не выходит, а в локальной магистрали этим сигналом устройства выбирать нельзя, т.к при чтении возникнет конфликт на шине с буферами системной магистрали.

Спойлер:

Таким образом лишь с помощью одного кусочка проволоки и перезашивки 155 РЕ3 можно получить диспетчер памяти с 8-ю коммутируемыми окнами размером по 8 кб, т.е почти такой же как в машинах DEC. "Почти" потому, что в DEC машинах карта памяти программируемая, а в ИРИШЕ предустановленная. Т.е вместо оперативно перезаписываемой карты памяти на 555 ИР26 поставили РЕ3. Из-за этого и малого числа карт памяти толку от 8-ми окон немного.

Т.е небольшой аппаратной ценой (лишь сделав несколько разрезов печати и припаяв столько-же проводков и перепрошив карту памяти) диспетчер памяти ИРИШИ можно существенно улучшить, сделав 8 карт памяти, что даёт или значительно более удобное управление памятью в 192 кб или позволяет расширить ОЗУ до почти 512 кб. Однако это уже разрушит всякую совместимость с базовой ИРИШЕЙ.


Впрочем, бесполезность /MS2, опять-таки, с помощью небольшого кусочка проволоки и одного разреза печати несложно исправить. Тогда используя /MS1 и /MS2 (для выбора окон по 8 кб, аналогично /MS3 и /MS4) мы можем поиметь 32 кб (причём сплошного) ПЗУ вместо 16 кб, практически без доработок лишь за счёт применения четырёх 2764 (или РФ4), при этом придётся где-то (проще всего на доп.платке фиксируемой в локальном разъёме) закрепить ещё две панельки на 28 ног.

Удобнее то же самое получить путём замены двух ПЗУ 573 РФ4 на две более ёмкие ПЗУ 27128 или всего одну 27256/РФ8. Во всех этих вариантах без перепрошивки карты памяти в 155 РЕ3 не обойтись. Впрочем, без перепрошивки РЕ3 ПЗУ в ИРИШЕ расширяется только искусственной "химией", т.е путем добавки однобитового регистра, формирующего адрес A14 у 27256.

Для нас самое главное из вышеизложенного заключается в том, что можно включать ПЗУ только в одном окне 8 кб (например на E000...FFFF), сделав остальные 8 кб этого сегмента - ОЗУ (что ранее считалось невозможным), и это позволит одновременно иметь (даже сплошные) 56 кб ОЗУ. Тем самым получится архитектура пригодная для удобной адаптации игр от РК86. Изначально я планировал допрошить свои драйверы в свободный участок ПЗУ ИРИШИ. Но удобнее не трогать эти ПЗУ (они просто не выдержат допрошивки спустя 30 лет), а добавить ещё одно ПЗУ 2764, 27128 или 27256 и включать его кусками в окне 8 кб.

Следует отметить, что вообще-то расширить ПЗУ до 32 кб (и даже более) на плате ЦП несложно и без перепрошивки карты памяти. Но при этом не получить 32 кб ПЗУ со сплошной адресацией в окне 32 кб, а только в виде двух программно коммутируемых кусков в окне 16 кб. А если расширять ПЗУ через системную магистраль, то это во-первых, невыгодно (надо делать огромную плату конструктива ИРИШИ), а во-вторых базовая карта памяти все-равно позволит иметь доп.ПЗУ только в виде двух несмежных кусков по 16 кб, к тому же в неудобных адресах.

Вышеизложенное в очередной раз наглядно подтверждает тезис о том, что каждый грамотный иришатник должен иметь дома хороший прошиватель для 155 РЕ3 и 565 РТ4 и РТ5.

Спойлер:

PS. Поправка. Ранее я написал, что для получения максимального ОЗУ можно применить 3 банки ОЗУ переключая их по 48 кб, что даёт 48*3+16= 160 кб. Это неверно. Во-первых, в карте 0, можно поиметь ещё 16 кб, итого уже 176 кб. А если поставить 4 банки ОЗУ и с учётом дискретности карты в 8 кб, а также того, что в карте 0 размещается ещё 16 кб (некоммутируемых 16 кб для стека хватит), то можно переключать банки по 56 кб, что даёт уже 56*3+8+16= 192 кб.

barsik
barsik
Мастер+

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

Посмотреть профиль

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

Карта памяти ИРИШИ для программистов Empty .

Сообщение  barsik в Ср Апр 03 2019, 12:38

4
Диспетчер памяти применяется во всех компьютерах у которых памяти больше, чем адресное пространство процессора. Нет большого расхода деталей и для программ удобна архитектура с одним небольшим коммутируемым окном на часть памяти, например, как в Spectrum-128.

В ИРИШЕ организация диспетчера памяти далеко не самая удобная. В отличие от диспетчера памяти DEC-машин (у которых адресное пространство процессора тоже всего 64 кб, а кстати, I/O-портов также нет), диспетчер памяти ИРИШИ не позволяет произвольно включать в адресное пространство любой набор фрагментов из любой произвольно большой памяти.

Диспетчер памяти ИРИШИ позволяет выбрать лишь несколько заранее заданных конфигураций памяти, причём и этот выбор стандартных конфигураций для базовой 64-х килобайтной машины сделан не самым оптимальным образом (стандартная прошивка ИРИШИ сделана сразу в расчёте на 128 кб, потому от карт 1 и 3 при 64К ОЗУ нет пользы). Потому в базовой ИРИШЕ реально есть всего две полезных карты памяти 0 и 2, которые отличаются друг от друга лишь тем, что в карте 2 в начале памяти находится ОЗУ, а в карте 0 - ПЗУ. С тем же успехом диспетчер ОЗУ мог бы быть однобитовым, как во "Львове".

Имеющийся диспетчер ИРИШИ требует особого построения программы. Трудность в том, что ROM-BIOS можно вызвать только в карте 0, а карту 0 можно включить только из программы выше $4000. Если включить карту 0 из программы ниже $4000, то по адресу 0...3FFF мгновенно оказывается ПЗУ и происходит улёт программы.

Потому те программы ИРИШИ, которым не надо много ОЗУ обычно работают с адреса $4000. Такие программы при старте однократно и навсегда включают карту памяти 0, отчего в области 0...3FFF оказывается ПЗУ, и в дальнейшем уже не используют коммутацию памяти (т.к ОЗУ ниже $4000 не используется и ПЗУ включённое здесь не мешает). ROM-BIOS ИРИШИ для отладки таких программ специально сделан так, чтобы отладчик мог работать и при включённом ПЗУ. После включения карты 0, архитектура напоминает ZX-Spectrum (там тоже ПЗУ до 4000), только экран в старших адресах, а не над ПЗУ.

Однако есть много типов программ, для которых традиционно размещение в начальных адресах, т.е с адреса 0 или с адреса $100 (например бейсик, текстов редактор, компиляторы и все программы с RST). В этом случае архитектура ИРИШИ неудобна и требует некоторого извращения. Тогда требуется разместить часть кода программы (из которых будут вызываться п/п-ммы ПЗУ) в адресах выше 4000.

Т.к в карте 2 в старших адресах располагается экран (с $C000 или $E000), то без-ДОС-овая программа должна кинуть код модуля вызова ROM-BIOS в область под вершину свободного ОЗУ, т.е программа работающая в начале памяти должна состоять из двух частей, - собственно самой программы с 0 и модуля связи с ROM-BIOS-ом загружаемого под вершину свободного ОЗУ.

Из этих соображений на голом ЯВУ, например на Паскале, для ИРИШИ программу без ухищрений написать сложно, т.к ЯВУ умеют генерировать лишь одномодульную программу,  работающую с адреса $100. Для этого Паскаль программа должна транслироваться с указанием пониженой вершины ОЗУ (чтобы осталась свободной часть памяти под вершиной свободного ОЗУ). Куда при старте программы с помощью оператора копирования памяти пересылается блок связи с ROM-BIOS написанный на ассемблере (м.быть на встроенном инлайн-ассемблере или заранее странслированный в REL-файл и линкуемый к Паскаль-программе при компоновке).

При написании ПО на ассемблере удобным оказывается ассемблер М80, т.к он единственный из всех ассемблеров (о которых я знаю) имеет оператор .phase, позволяющий транслировать в модуль фрагменты работающие не в адресах трансляции и не трахаться с ручной компоновкой отдельно странслированных фрагментов.

Программы, которым полные 48/56 кб сплошной памяти не нужны удобно размещать с 4000. Тогда в начале программы включаем карту 0 (отчего на адресах 0...3FFF появляется ROM-BIOS). Тогда для обращений в ПЗУ уже не требуется переключать карты памяти.

Вообще для работы программ требуется только ПЗУ CONOUT стоящее на 2000...3FFF. Т.к клавиатура аппаратная, то процедура её обслуживания предельно проста и ПЗУ BOOTM на адресах 0...1FFF совсем не нужно. Это позволяет в локальную магистраль включить крошечную платку расширения ОЗУ со статикой, которое коммутируется в окне 0...1FFF, но включено только в карте 0 вместо ненужного в ходе прогона программ ПЗУ BOOTM.

Для программ с 4000 я использую вот такой простейший модуль связи с ROM-BIOS.


CONOUT  EQU     2000H
KBD     EQU     4
PB      EQU     11H
PU      EQU     13H

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

STATUS: LD      A,00001110B     ; PC7=0 (задать выбор функции порта B)
        OUT     (PU),A
        IN      A,(PB)          ; PB7 готовность клавиатуры
        RLA
        LD      A,0
        JP      NC,STAT1
        DEC     A
STAT1:  OR      A
        RET

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

CONIN:  CALL    STATUS
        JP      Z,CONIN
        IN      A,(KBD)
        AND     7FH
        RET

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

COUTC:  PUSH    HL
        PUSH    DE
        PUSH    BC
        CALL    CONOUT
POPREG: POP     BC
        POP     DE
        POP     HL
        RET


Как видите, это аналоги п/п-рамм ПЗУ РК86 - STATUS =F812, CONIN =F803 и COUTC =F809. И для работы нужно только ПЗУ CONOUT с адреса 2000, а ПЗУ BOOTM совсем не нужно. На практике к этим п/п-мам добавляются ещё несколько полезных подпрограмм из ПЗУ РК86 (MSSG, HEX_A, XF81B, установить/получить координаты курсора, вершину ОЗУ, ввод/вывод байта на МГ) и подпрограммы для управления режимами и цветами.

Этот модуль можно включать в саму основную программу с помощью INCLUDE, но удобнее все основные подпрограммы один раз странслировать в REL файл и далее прилинковывать его к каждой программе при линковке. Таким образом программирование для ИРИШИ реально превращается в программирование для РК86 корректных программ (т.е тех что не лезут нагло в экран и в матрицу клавиш).

Имея исходник любой корректной программы для РК86, лишь только поменяв адреса подпрограмм в строках EQU можно без труда получить версию РК-программы для работы на ИРИШЕ. Для пробы я уже так перетранслировал бейсик и эркашный редактор дампа, чьи исходники уже имелись. Понятно, что это работает только для корректных чисто текстовых программ. Игры практически все так не адаптировать, их надо существенно модернизировать или эмулировать.

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

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

Посмотреть профиль

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

Карта памяти ИРИШИ для программистов Empty .

Сообщение  barsik в Сб Апр 27 2019, 09:29

5
Главная неприятность диспечера памяти ИРИШИ в том, что он управляется всего двумя битами (причём даже не D1,D0, а D3,D2), а два бита, естественно, дают всего 4 карты памяти (0...3) и возможность доступа к всего 128-ми килобайтам.

Недавно я (с трудом, наконец) догадался как это можно исправить без расширения РПЗУ карты вдвое или вчетверо (т.е без замены 155РЕ3 на 565РТ5). Можно дополнительным битом (битами) управлять не самой картой, а тем, что она переключает.

Идея в общем-то очевидная, хотя выгоднее иметь прокачку в одном маленьком окне по типу диспетчера памяти ZX-Spectrum или Z80CARD-II. Но именно в таком виде ценность как раз в том, что это можно сделать конфигом в EMU, т.е можно расширить ОЗУ в эмуляторе не переделывая сам эмулятор.

Хотя EMU в части ИРИШИ следует чуть-чуть переделать, т.к несмотря на мои просьбы ещё 2 года назад, клавиатуру автор так и не исправил. Она по-прежнему работает неправильно - а именно, она по флагу CAPS меняет регистр не только букв, но и цифр и значков (это верхний цифровой ряд, что под фнкциональными). Разве есть в мире хоть одна клавиатура, которая работала бы так? Регистр клавиш 1, 2, 3.....9, 0 ни на каких компьютерах не меняется в зависимости от включенного режима верхний/нижний регистр. Но увы, в эмуляторе ИРИШИ меняется. Потому в эмуляторе ИРИШИ надо всегда гасить светодиод CAPS LOCK, тогда цифры вводятся нормально.

Итак, идея расширения ОЗУ в следующем.

На плату расширения, которая в оригинале всего 64К приходит (пока не важно откуда) бит, который переключает два банка (ну допустим из двух РУ5, половинки РУ7, или из 4-х w24257). Тогда при этом бите равном 0 - в 4-х окнах доступа к доп.ОЗУ, что у нас в картах 1 и 3 (в адресах с $4000 и $C000) читается первая банка доп.ОЗУ, т.е всё как и ранее. Но если этот доп.бит управления расширенной памятью равен 1, то в этих в этих же окнах в картах 1 и 3 будет читаться уже другая банка расширенной памяти и общее число доступной памяти достигнет уже 64+128=192 кб. Если управляющих битов добавляется два, то в пустых дырках карт 1 и 3 этими битами коммутируется уже 256 кб дополнительной памяти.

Прелесть в том, что на базовых платах ИРИШИ почти не требуется делать никаких модификаций (придётся лишь припаять 2 куска проволоки). Теперь, где взять биты управления. Оказывается они уже есть.

Разработчики ИРИШИ, очевидно не были программистами и потому биты управления картой памяти выбрали D3,D2, тогда как D1,D0 тоже свободны. Эти биты D1,D0 не дают пользы самому компьютеру, а выведены на внешний разъём, как пользовательские однобитовые порты (только на вывод), в виде сигналов SO1 и SO2.

Любому очевидно, что надо было именно биты D1,D0 отдать на коммутацию памяти (во всех диспетчерах памяти в мире номер окна начинается с D0, потому, что это экономит программирование), а биты D3,D2 тоже не стоит отдавать пользователю, а зарезервировать для расширения памяти. Ну ладно в 1984 году от неопытности ошиблись, но в ИРИШЕ-Л в 1989 уже могли бы исправить ошибку. Из-за этой ошибки в карте памяти биты надо сдвигать, что приводит к потери времени, когда карта для обмена коммутируется для каждого байта памяти.

Соединяем кусками проволоки выходы ППА PC0 и PC1 с каким-нибудь свободным контактом разъёма системной магистрали, чтобы эти сигналы дошли до платы расширения ОЗУ. И это даёт нам помимо 64 кб на плате граф.адаптера ещё 256 кб дополнительного ОЗУ читаемого в стандартных дырках карт памяти 1 и 3. Т.е используется тот же диспетчер памяти, без изврата, который разработчики КНГМД применили в плате рэтро-дисковода с встроенным туда ОЗУ в 256/512К, так что даже не поймешь, как этой памятью управлять.

И в эмулятор EMU это вставить - всего минута редактирования конфига, чтобы ввести вместо 4-х карт памяти 16. Аппаратно пока в PC0,PC1 записаны нули - всё как и раньше, никаких изменений архитектуры, т.е есть совместимость со старым ПО на 64/128 кб, если оно у кого есть.

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

Используя наглядную медицинскую метафору можно сказать, что ИРИША в базовом варианте стрададает врожденной фатальной болезнью, сравнимой с "пороком сердца" у человека, что как и в случае больного этой болезнью человека не позволяет ей бегать, т.е прогонять программы с максимально возможным для данного процессора быстродействием.

А техническим языком можно говорить о том, что в иришиной плате граф.адаптера применён самый неудачный принцип синхронизации обращений к ОЗУ видеочасти и процессора, худший, чем аналогичный принцип синхронизации использованный в последующих моделях отечественных 8-ми разрядок. Тогда как синхронизатор ИРИШИ в видео режимах 2 и 3 приводит к потере скорости до 50%, в разработанных на несколько лет позднее " РК86", "Львове" и Векторе" инженерам удалось уменьшить потери на синхронизацию до 20%, а в "Океане", "Корвете" и "Специалисте" эти потери удалось довести аж до нуля. Кстати, насчёт "Львова" у меня есть обоснованное подозрение, что в нём в цвете также торможение вовсе не на 20%, а на ~35% (т.к там такт КР580 2.2 МГЦ, а ОЗУ всего одна банка).

Однако, при грамотном подходе недостатки ИРИШИ можно обратить в преимущества. Так несинхронная системная магистраль не требует синхронных клоков в видео- и процессорной платах. Что и позволяет заменив плату ЦП на более скоростную, работающую с быстрым статическим ОЗУ, использовать процессор Z80B на такте 8-9 МГЦ без WAIT и лишь обращения в экранный буфер (на плате граф.адаптера) будут немного тормозить.

Для того, чтобы почти полностью устранить эту иришину "врождённую болезнь", недостаточно лишь добавить на отдельной платке безтормозное ОЗУ. Надо ещё сделать так, чтобы оно полностью заменило всё медленное ОЗУ базовой ИРИШИ.

Каждому, кто в курсе устройства диспетчера памяти ИРИШИ ясно, что с имеющимися прошивками безтормозное ОЗУ можно включить в 4-х 16-ти килобайтовых окнах с адресов $4000 и $C000 в картах 1 и 3 (что не использованы в базовой ИРИШЕ). Таким образом, если добавляемое ОЗУ безтормозное или лишь слегка вэйтованное (слегка вэйтованное значит, что оно тормозит на 10 %, а не вдвое, как тормозит ОЗУ на плате граф.адаптера), то в картах 1 и 3 из 64 кб адресного пространства на 32-х килобайтах программа будет прогоняться со скоростью определяемой клоком процессора, а в 32-х килобайтах ОЗУ, что читается из граф.адаптера программа будет прогоняться вдвое медленнее.

Слегка печально, что и в карте 0, которую можно вызывать из карты 2 имея стек на $4000...$BFFF, а из карт 1 и 3 имея стек лишь на $4000...$7FFF стек оказывается в тормозном ОЗУ и без перепрошивки 155 РЕ3 или 556 РТ4 на плате граф.адаптера это не изменить. Т.е в карте 0 вообще нет безтормозной памяти. Это приводит к торможению вывода на экран, хотя сама программа вывода работает из ПЗУ без тормозов, но стек в ОЗУ тормозит.

Исправить обе эти ситуации позволяет перепрошивка 556 РТ4, стоящей в плате граф.адаптера.

Сейчас это РТ4 прошито так, что память в граф.адаптере "отзывается" при обращении по всем 64-м килобайтам в банке 2. Если же прошить РТ4 так, чтобы граф.адаптер занимал в карте 2 только 16 кб с $C000 (при этом, кстати, 565 РУ5 можно заменить на РУ6), лишь экранный буфер, чтобы остальные 48 кб читались из безтормозного ОЗУ на плате доп.ОЗУ, то почти все проблемы при программировании для ИРИШИ исчезнут.

Причём совместимость нисколько не пострадает, т.к программе всё-равно откуда в адресное пространство включена память. Такого же ускорения можно достичь и перепрошивкой карты памяти 155 РЕ3, но это хуже, т.к тогда утратится совместимость. Кстати, и остальные (т.е вне экранного буфера) 48 кб из 565 РУ5 на плате граф.адаптера можно использовать. Их можно включить в то окно диспетчера, которое используется лишь для целей эл.диска, где скорость доступа не играет особой роли.

Я не хотел делать прошиватель 556 РТ4 и 155 РЕ3, т.к нельзя заменить иришину карту памяти не потеряв совместимости с огромным количеством, когда-то существовавших (хотя возможно лишь в параллельном мире) классных игр уровня ZX-Spectrum для ИРИШИ. Но теперь понятно, что для полного избавления от тормознутости, разумно перепрошить 556 РТ4, т.е прошивку реализующую логику дешифратора на плате граф.адаптера.

Потому, увы, придётся делать прошиватель 556 РТ4. И снова, увы, - не для ИРИШИ. Т.к в ней её разработчики сдуру на плату ЦП напихали всякого ненужного хлама, а ППА пользователя не поставили, т.к изначально делали не любительский, а офисный компьютер.

Естественно, даже при наличии безтормозного ОЗУ для хранения программ, доступ в экранный буфер на плате граф.адаптера будет происходить с торможением тактами WAIT, как и ранее. Однако это уже вовсе не фатально. Во-первых, программа реального времени для чтения с МГ-ленты не работает из экранного ОЗУ. Во-вторых, обращения в экран происходят относительно редко. Даже в сами моменты вывода на экран программной петлёй в среднем лишь одна команда из ~десятка делает обращение собственно в экран, т.е примерно из 20-25 маш.тактов только один приходится на доступ к ОЗУ экрана. Т.о даже сам непосредственный процесс вывода на экран тормознётся всего лишь на ~5%, что нас не особо опечалит.

На плате граф.адаптера применены ОЗУ 565 РУ5 на такте 2 МГЦ. Но, как показывает практика, они без всяких проблем и даже без излишнего перегрева тянут такт /RAS-/CAS в 4 МГЦ (в клонах ZX работают на 3.5 МГЦ и никто даже не жаловался). Таким образом, теоретически, даже параметры применённых в оригинальной плате граф.адаптера ИРИШИ, антикварных деталей позволяют переконструировать графический адаптер ИРИШИ, сделав прозрачный доступ к ОЗУ в режиме 1 и торможение всего на 10...15% в режимах 2 и 3.

Естественно, в наше время уже не осталось настолько грамотных инженеров аппаратчиков, как разработчики ИРИШИ. Потому сейчас просто некому переработать плату граф.адаптера ИРИШИ. Хотя, если это сделать применив DIP-статику, то можно не только убрать торможение и резко сократить число деталей, но и добавить цвет в режим моно-640*200. У современных людей из-за отравленной экологии и ГМО, уровень IQ понизился настолько, что теперь никто даже не в состоянии понять, как работает схема граф.адаптера ИРИШИ, и всё, на что им хватает ума, - это запихать ту же схемотехнику в какой-нибудь мощный контроллер типа AVR или STM32, но это уже другое хобби.


Последний раз редактировалось: barsik (Пт Май 17 2019, 18:09), всего редактировалось 4 раз(а)

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

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

Посмотреть профиль

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

Карта памяти ИРИШИ для программистов Empty Re: Карта памяти ИРИШИ для программистов

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

6

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


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

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


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