PDA

Просмотр полной версии : содержимое ПЗУ В ОЗУ



Руслан
03.04.2013, 11:46
Привет, я не могу понять следующего. Вот к примеру в Ленинграде и пр. 64кб озу, Я как бы думал что содержимое пзу копируется в первые 16кб оперативки, но как мне сказали что комп постоянно работает с пзухой. Тогда по идее нижние 16 кб свободны под пользование?
И еще, а можно ли как нибудь с пзухи при включении копировать содержимое в озу? Чтоб в дальнейшей работе комп не обращался больше к пзу.

vinxru
03.04.2013, 12:01
Тогда по идее нижние 16 кб свободны под пользование?

Аппаратно недоступны. Такая архитектура раньше была очень популярна во многих компах, инженеры память не жалели.

---------- Post added at 11:01 ---------- Previous post was at 11:01 ----------


И еще, а можно ли как нибудь с пзухи при включении копировать содержимое в озу? Чтоб в дальнейшей работе комп не обращался больше к пзу.

Есть и такие клоны (варианты Спектрума). То есть, схема должна это поддерживать. В обычном ZX Spectrum 48K или Ленинграде без паяльника такого не сделать.

И решать сейчас эту проблему бессмысленно, логичнее взять ZX 128К (как вариант Пентагон 128), там вся память доступна и её больше в 2 раза.

vlad
03.04.2013, 12:15
можно ли как нибудь с пзухи при включении копировать содержимое в озу? Чтоб в дальнейшей работе комп не обращался больше к пзу.
Теоретически можно, триггер (к примеру ТМ2) прицепленный к какому нить биту порта отключающий проецирование ROM в окно CPU0 (#0000-#3FFF) на него поданный Reset# и тумблер на усмотрение :) + логика разрешающая работу RAM на чтение(при выключенном бите - сост. лог. '1') / (запись при отключенном - сост. лог. '0').
Практически не нужно, разве что делать больше нечего...

Все это можно реализовать на ReVerSE, попробовать как будет работать, ну а после уже решить делать или не делать такую доработку на реальном Ленинграде :)

Prusak
03.04.2013, 12:17
Я делал такую доработку в Ленинграде, правда очень давно. Копировал содержимое ПЗУ в ОЗУ, работал. Только есть один косяк в работе ПЗУ Basic-48 - портятся первые ячейки ОЗУ где-то с адреса #0000 примерно.

vlad
03.04.2013, 12:49
Только есть один косяк в работе ПЗУ Basic-48 - портятся первые ячейки ОЗУ где-то с адреса #0000 примерно.
Косяк такой правится в подпрограмме "SKIP CONSTANTS" (Пропустить константы) расположенной по адресу #33F7, заменой по адресу #33FB указателя #0000 на #002B указывающий в неиспользуемое место в ПЗУ.
Делал такое еще на "Робик", там такая возможность уже была реализована через OUT 15, 0.

HardWareMan
03.04.2013, 12:51
А зачем вообще ПЗУ барсику писать в самого себя, хотя он знает, что он в ПЗУ?

psb
03.04.2013, 12:59
некоторые проги (особенно демы) тоже иногда пишут в пзу. и знают, что именно в пзу пишут! потому что так надо.

HardWareMan
03.04.2013, 13:20
Больные на голову программисты? Если во время написания этих дем 20 лет назад было и так ясно, что ПЗУ оттуда никуда не денется и писать туда бессмысленно, то зачем вообще это? Какой-то хитрый план украсть такты/определить родное (заведомо пропатченное, у автора демки) железо? Все равно не понимаю.

goodboy
03.04.2013, 13:36
ПЗУ оттуда никуда не денется и писать туда бессмысленно, то зачем вообще это?

сразу вспоминаются процедуры очистки экрана которые затирают область от конца аттрибутов до 0
или останавливаются когда считанный байт не равен записанному

HardWareMan
03.04.2013, 14:51
Видел и сам делал процедурку считавшую контрольную сумму (или четность) ROM48 и TR-DOS, для выбора нужного драйвера для корректной работы наворотов нового железа в программе.
Чтение != запись, мы же говорим про порчу секции ПЗУ, если ее переместить в ОЗУ. Просто я не понимаю, это само ПЗУ себя портит или какой-то сторонний софт? Нужно исправлять проблему, а не делать заплатку на симптомы.

Titus
03.04.2013, 14:59
Чтение != запись, мы же говорим про порчу секции ПЗУ, если ее переместить в ОЗУ. Просто я не понимаю, это само ПЗУ себя портит или какой-то сторонний софт? Нужно исправлять проблему, а не делать заплатку на симптомы.

В некоторых случаях для простоты или удобства программисты могли использовать фиктивную запись в область ПЗУ. Исправить это невозможно, нужно принять, как данность. Либо же заниматься фигней, и проверять тысячи программ на запись в ПЗУ, патчить и выкладывать новый, ПРАВИЛЬНЫЙ релиз)

HardWareMan
03.04.2013, 15:48
Все с вами ясно.

psb
03.04.2013, 16:10
Все с вами ясно.
в каком таком смысле?

HardWareMan
03.04.2013, 17:58
В прямом, я узнал все, что хотел.

Eltaron
03.04.2013, 18:26
Кворум 128+
В Кворуме-64
OUT 0, 1 - отключает ПЗУ, после выполнения имеем ОЗУ во всех 64 килобайтах
OUT 0, 0 - включает ПЗУ обратно

Можно даже из бейсика

10 FOR n=0 TO 16383
20 POKE n, PEEK n
30 NEXT n
40 OUT 0, 1

Теперь у нас сплошное ОЗУ, но в нижних адресах копия ПЗУ, и бейсик продолжает работать.

В Кворуме-128 этот функционал тоже есть (без него не работает CP/M), но там, наверное, в нижние адреса подключается какая-то фиксированная страница ОЗУ.

HardWareMan
04.04.2013, 07:21
В некоторых случаях для простоты или удобства программисты могли использовать фиктивную запись в область ПЗУ. Исправить это невозможно, нужно принять, как данность. Либо же заниматься фигней, и проверять тысячи программ на запись в ПЗУ, патчить и выкладывать новый, ПРАВИЛЬНЫЙ релиз)

Ну не знаю. Имея на Специалисте гораздо более скромные возможности (по памяти и процессору) мы себе таких вольностей не позволяли. Тем не менее, во время расцвета кружка было написано немало качественного софта, некоторый по словам руководителя кружка признали как в магнитогорске, так и в новосибирске. Я не в курсе, правда, с кем он там контачил.

PS Пытаюсь все это спасти оцифровывая кассеты, переданные мне руководителем, пока из-за нехватки времени прогресс неутешителен, хотя на месте тоже не стоит.

Titus
04.04.2013, 11:37
PS Пытаюсь все это спасти оцифровывая кассеты, переданные мне руководителем, пока из-за нехватки времени прогресс неутешителен, хотя на месте тоже не стоит.
Что значит спасти? Надо оцифровать и распознать. Что не распознается, выкладывать на форум, может кто другой распознает.

Jukov
05.04.2013, 19:32
Во вложении фрагмент схемы Кворума-64, где выбирается в зависимости от того, с какими адресами работает процессор либо ОЗУ либо ПЗУ. Причем запись всегда происходит в ОЗУ. В Ленинграде, помнится, тоже имеется аналогичный участок схемы. Если в разрыв, например сигнала А15 включить переключатель выдающий при одном положении всё время 1, то процессор будет работать с ОЗУ во всем адресном пространстве. Про енто писалось, например, в "Периферия своими руками".

Alex Rider
06.04.2013, 17:16
А зачем вообще ПЗУ барсику писать в самого себя, хотя он знает, что он в ПЗУ?
Для экономии памяти в ущерб скорости.

---------- Post added at 17:14 ---------- Previous post was at 17:03 ----------

Кстати, скорость тут теряется для таких "быстрых" операторов и функций, как ATN (на которой построена половина тригонометрии), CIRCLE, DRAW. Еще слегка страдает перевод чисел из символьного в 5-байтное представление (и функция VAL) заодно. Ну и в качестве апофеоза, этот неэффективный код зовется при выполнении любого оператора, имеющего целый аргумент (для каждого аргумента).

---------- Post added at 17:16 ---------- Previous post was at 17:14 ----------


этот неэффективный код зовется при выполнении любого оператора, имеющего целый аргумент
Поправка: если агрумент требует округления.

ASDT
06.04.2013, 20:16
1. Скорость работы ОЗУ не равна чтению из ПЗУ
( т.е. разное время исполнения кода )
2. Есть в этом смысл при замене обычной прошивки на загрузчик
( например с карточки ). В этом случае клон может считаться
эмулятором, т.е. быть чистым в плане "лицензии".
Насколько я это понимаю ...

psb
06.04.2013, 20:45
В прямом, я узнал все, что хотел.
ну прям К.О.
есть большие сомнения по этому поводу, ну да ладно.

HardWareMan
06.04.2013, 23:32
ну прям К.О.
есть большие сомнения по этому поводу, ну да ладно.
Согласен, мне далеко до суровости челябинцев. Но я и не претендую.

Barmaley_m
08.04.2013, 22:26
В клоне "Орель БК-08" имеется полностью доступные 64К ОЗУ, при этом дополнительные 16Кб подключаются по адресам ПЗУ командой OUT 127,2. Данное теневое ОЗУ использовалось для разных целей, в том числе теневые мониторы, вызываемые сигналом NMI; дополнительный буфер копирования при работе с IS-DOS. Запись по адресам ПЗУ приводила к записи в теневое ОЗУ независимо от того, было по нулевым адресам подключено ПЗУ или ОЗУ. Поэтому любые программы, осуществлявшие по каким-то причинам запись по этим адресам, портили содержимое теневого ОЗУ, в частности - теневой монитор, если он там находился. Причем со временем появлялось все больше таких программ, которые было невозможно взломать теневым монитором из-за этого.

Бейсик "Орели" был исправленным, там на самом деле существует два бага, из-за которых портится теневое ОЗУ. Один в калькуляторе, как уже упомянули, а другой - в подпрограмме "Scroll". Поэтому можно было скопировать орель-бейсик полностью в теневое ОЗУ и работать с ним оттуда. На этом были основаны турбо-загрузчики с кассеты: "родной" бейсик полностью копировался из ПЗУ в ОЗУ, после чего в подпрограммах загрузки и сохранения подправлялись константы, влияющие на скорость загрузки. Это позволяло загружать многие игры без их переделки, так как даже многие нестандартные загрузчики "без заголовка" обращались к подпрограммам из бейсика или копировали их оттуда с последующей модификацией.

Изменения бейсика "Орель" привели к несовместимости программ, поэтому еще одним вариантом использования теневого ОЗУ была загрузка туда стандартной прошивки Sinclair.

В принципе, несмотря не некоторые преимущества от использования патченного бейсика в теневом ОЗУ, эта идея имеет ограниченное применение, если запись по этим адресам не запрещена. В своей поздней схеме расширения до 256К я предусмотрел три страницы ОЗУ, которые замещали собой ПЗУ бейсика-48, 128 и TR-DOS, с блокировкой записи. Вот это действовало очень эффективно. Для основной работы в ПЗУ у меня были патченные под "Орель" прошивки, а если каким-то программам это не нравилось - я давал им эмуляцию ПЗУ с защитой записи и оригинальными прошивками. Тогда все работало.

---------- Post added at 21:26 ---------- Previous post was at 21:21 ----------

Что же касается мотивации разработчиков к установке 64К ОЗУ вместо 48К, при этом делая "лишние" 16К недоступными - это делалось из экономии. К моменту разработки отечественных клонов Spectrum цены на память изменились, так что две линейки микросхем памяти (16K - РУ6; 32К - РУ5Д1) стало ставить дороже, чем одну линейку РУ5В или РУ5Г. Место на плате тоже экономится. Это как сейчас решать, ставить ли "большую" микросхему на несколько метров памяти, не используя значительную ее часть, или искать старые РУшки, чтобы поставить столько памяти, сколько доступно. Второй вариант обойдется дороже во всех отношениях.

Djoni
10.04.2013, 20:23
Я делал доработку Ленинграда для подмены ПЗУ на ОЗУ в режиме 48,
можно было подменить ROM48 или TR-DOS переключалось всё тумблерами:)

http://savepic.org/3241643.jpg
http://savepic.org/3264170.jpg