PDA

Просмотр полной версии : Video RAM in the ZX Spectrum



Black_Cat
29.01.2011, 00:38
Video RAM in the ZX Spectrum.

Предистория вопроса такова: в доисторические времена видеорежимов было только два - стандартный и гигаскрин, и никто не задумывался о том, что в Спектруме есть две разных памяти – процессорная и видеопамять. Западные декаденты ещё слышали о том, что память бывает быстрая и медленная, хотя почему она медленная им в голову не приходило. Спустя двадцать лет, и после энного количества лет случайного замыкания ножек микросхем, AlСo наконец практически повторил 16 цветный видеорежим SamCoupe (да здравствует теория Дарвина! :) ). Так на Пентагоне появился видеорежим 16color, требующий под себя 64кб ОЗУ, т.е. половину от 128кб. Но даже после того как память 128го Пента была разделена пополам по A16’, никто и не задумался о существовании двух разных видов памяти. Но изобретательская мысля на месте не стояла, и появилась концепция линейного расширения видеорежимов, а с ними и линейного расширения видеопамяти. Т.е. видеопамять могла бы быть и полметра, и метр, и т.д...

К сожалению, создатели как firmware, так и software на Спектруме, до сих пор не учитывают тот момент, что память Спектрума – это не однородная память, а две разных памяти. На других компах никому не придёт в голову размещать базовый системный софт или постоянный рамдиск в ОЗУ видеокарты, такое было токо на Спектуме, и обуславливалось жутким дефицитом памяти в его древних моделях. В современных моделях такого дефицита уже нет, но о том, что память Спектрума неоднородная, по прежнему, никто не задумывается.

В этой связи предлагается:
1) учитывать на современных Спектрумах с большим ОЗУ разделение памяти по A16’ на видео ОЗУ(A16’=1) и процессорное ОЗУ(A16’=0). Поэтому, по крайней мере при создании firmware работающего с рамдиском, предлагается постоянный рамдиск размещать только по адресам с A16’=0.
2) кроме того при создании рамдиска в компьютерах с ОЗУ от 512k учитывать следующий порядок следования старших адресов ОЗУ:
- для архитектуры SKAY (Scorpion & KAY):
A17’=D7 #7FFD
A18’=D4 #1FFD
A19’=D7 #1FFD
A20’=D6 #7FFD
A21’=D5 #7FFD
- для архитектуры Pentagon:
A17’=D7 #7FFD
A18’=D6 #7FFD
A19’=D5 #7FFD
A20’=D4 #1FFD
A21’=D7 #1FFD
3) при написании программ для архитектуры SKAY (Scorpion & KAY) не использовать 16ю страницу ОЗУ (в Scorpion256 это была 8я страница).

Lethargeek
29.01.2011, 02:51
На других компах никому не придёт в голову размещать базовый системный софт или постоянный рамдиск в ОЗУ видеокарты
Омига :v2_tong2:

Black_Cat
29.01.2011, 04:04
Lethargeek, на РС тож с помощью хитрого драйвера можно видеопамять заюзать :) , но при этом все понимают, что видеопамять - это видеопамять, а системная память - это системная память. На других компах понимание разделения адресного пространства ОЗУ на видеопамять и процессорную(системную) память есть. На Спектруме такого понимания до сих пор нет.

Lethargeek
29.01.2011, 05:04
на РС тож с помощью хитрого драйвера можно видеопамять заюзать
Жжошь, БК :v2_laugh:
в базовой амиге как раз одна только тормозная видеопамять
а "нормальную" можно юзать только после апгрейда


На других компах понимание разделения адресного пространства ОЗУ на видеопамять и процессорную(системную) память есть
На атариках, получаеццо, тоже не было :v2_tong2:
Видеопроцессор мог тянуть откуда угодно

На комоде адреса фиксированы, но физически походу разницы нет
Проц придавлен намертво скребучими спрайтами

На песюк похожи разве что MSX с TI-99

Такшта ненада

---------- Post added at 05:04 ---------- Previous post was at 05:02 ----------

Кстати, почему рамдиск не следует пихать в тормозную память?
Ему там самое место

Atari
29.01.2011, 06:06
Lethargeek, на РС тож с помощью хитрого драйвера можно видеопамять заюзать :)

Стоит уточнить, что используется пемять VGA адаптера а комп работает только в текстовом режиме.

fyrex
29.01.2011, 07:11
Video RAM in the ZX Spectrum.

Предистория вопроса такова: в доисторические времена видеорежимов

Ты эта, здоров вообще ?
Для 16ц требуется 24кб вроде бы.
И в современных пентагонах давно ужэ используется 2х тактная технология, когда вывод экрана не мешает работе проца.
Чорт токо узнал, БК-0010 это блэк-кэт !? - ну тогда тем более неясно в чом сопсо вопрос ?

Mick
29.01.2011, 08:57
[B] AlСo наконец практически повторил 16 цветный видеорежим SamCoupe (да здравствует теория Дарвина! :) ).

Если я не ошибаюсь, то в спековском 16с режиме используются четыре плоскости по 6 кб для цветов поотдельности. А в Сам копе всего лишь одна линейная плоскость размером 24кб. Так что нефига тут нет аналогии. Не путай людей.

Black_Cat
29.01.2011, 18:31
Господа Lethargeek, Atari, Mick - прекращаем флуд не по теме, нас ничего не интересует кроме Спека, и дискутировать дальше о других компах не будем.
Кстати, почему рамдиск не следует пихать в тормозную память?
Ему там самое местопредставь себе программу, юзающую например полуметровый видеорежим по адресам с A16'=1.

---------- Post added at 18:31 ---------- Previous post was at 18:26 ----------

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

Lethargeek
29.01.2011, 19:43
представь себе программу, юзающую например полуметровый видеорежим по адресам с A16'=1.
Ты пьян, штоле? Предлагаешь ради гипотетического софта (которого нету и никогда не будет) намертво посадить рамдиск в быструю процессорную память? Не говоря уж о том, что новых спеков с медленной памятью тоже уже не будет, а старые скоро передохнут. Шум ниачом.

Black_Cat
29.01.2011, 20:44
Предлагаешь ради гипотетического софта (которого нету и никогда не будет) намертво посадить рамдиск в быструю процессорную память?
Lethargeek, в отечественных компах, выпущенных в последние как минимум 15 лет медленной памяти вообще небыло. Так что шум про медленную память вааще ни а чОм.

Lethargeek
29.01.2011, 23:40
Lethargeek, в отечественных компах, выпущенных в последние как минимум 15 лет медленной памяти вообще небыло. Так что шум про медленную память вааще ни а чОм.
Было торможение проца на классическом пентагоне в 16c

А теперь "представь себе программу, юзающую например полуметровый видеорежим по адресам с A16'=1" (с)

Black_Cat
29.01.2011, 23:53
Было торможение проца на классическом пентагоне в 16cне торможение, а отключение. Lethargeek, заканчивай флудить, ты прекрасно знаешь, что то о чём ты говоришь вааще не в тему :)

Lethargeek
30.01.2011, 00:10
не торможение, а отключение
Отключение - частный случай торможения :v2_dizzy_botan:


Lethargeek, заканчивай флудить, ты прекрасно знаешь, что то о чём ты говоришь вааще не в тему :)
Я спросил, почему рамдиск не следует пихать в тормозную память
или с 512K-мегатруколором тормозить не будет? :D

Black_Cat
30.01.2011, 00:34
Отключение - частный случай торможениянет


Я спросил, почему рамдиск не следует пихать в тормозную памятьпотому, что это не "тормозная память", а видеопамять, и она одинаково тормозная с процессорной... по крайней мере на отечественных клонах :) , и ещё - по адресам этой памяти работает сканер.. ну или будет работать в будущих компах, или видеокартах :) . Понимаешь, по всем адресам A16'=1 - может работать сканер, а по A16=0 - не может, туда обращается токо CPU. Дык вот, если рамдиск помещать в видео ОЗУ, то при включении видеорежима с большой памятью этот рамдиск будет уничтожен.
Дык вот, чтоб такого не произошло, рамдиск в видео ОЗУ размещать не следует, слава богу места в памяти современных клонов хватает чтоб разместить рамдиск по A16'=0 :)

garlands
30.01.2011, 01:08
хм. я чего-то недопонимаю. прошу объяснить мне, в чем причина такого предложения, если видео и остальная память живут в разных временных плоскостях и не пересекаются? по-моему в наших клонах уже давно нет деления на "медленную" (видео) память и "быструю" (процессорную)...

---------- Post added at 00:08 ---------- Previous post was at 00:03 ----------


нет

потому, что это не "тормозная память", а видеопамять, и она одинаково тормозная с процессорной... по крайней мере на отечественных клонах :) , и ещё - по адресам этой памяти работает сканер.. ну или будет работать в будущих компах, или видеокартах :) . Понимаешь, по всем адресам A16'=1 - может работать сканер, а по A16=0 - не может, туда обращается токо CPU. Дык вот, если рамдиск помещать в видео ОЗУ, то при включении видеорежима с большой памятью этот рамдиск будет уничтожен.
Дык вот, чтоб такого не произошло, рамдиск в видео ОЗУ размещать не следует, слава богу места в памяти современных клонов хватает чтоб разместить рамдиск по A16'=0 :)

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

Lethargeek
30.01.2011, 01:43
нет
да


потому, что это не "тормозная память", а видеопамять, и она одинаково тормозная с процессорной... по крайней мере на отечественных клонах
Ога, ога... прокачай-ка мне 25мб в секунду "на отечественных клонах" :D


то при включении видеорежима с большой памятью этот рамдиск будет уничтожен
Ежели картинка жрет половину памяти, никакой рамдиск уже не поможет
Фтопку

garlands
30.01.2011, 01:47
Ежели картинка жрет половину памяти, никакой рамдиск уже не поможет

и нах этот рамдиск не нужен при таких объемах графики :-D

Black_Cat
30.01.2011, 01:48
Ежели картинка жрет половину памяти, никакой рамдиск уже не поможет
Фтопку

:) Lethargeek, ты устарел :) , современные клоны - это 2Мб, 4Мб, и даже 32Мб :) ..а в перспективе - и гигабайт :)
В будущем рамдиск нужен будет в основном для эмуляции убогого тырдоса при исполнении старых программ, т.е. что-то типа АТМного втрдоса. Для этого нужно как правило максимум 640кб, т.е. объём одной дискеты.

Lethargeek
30.01.2011, 01:52
современные клоны - это 2Мб, 4Мб, и даже 32Мб
А ты бредишь - как 512К "уничтожит" остальные 15.5Мб? :v2_wacko:

Black_Cat
30.01.2011, 02:15
как 512К "уничтожит" остальные 15.5Мб?Как располагается сейчас рамдиск в КАЕ ты знаешь? Вот если его не переделать по предложенным рекомендациям, то он будет уничтожен. Собсно этот топик в первую очередь предназначался Лас'у :)

Lethargeek
30.01.2011, 02:25
Как располагается сейчас рамдиск в КАЕ ты знаешь?
Да как бы ни располагался - убирать его непременно в другую половину памяти незачем

Black_Cat
30.01.2011, 02:44
Да как бы ни располагался - убирать его непременно в другую половину памяти незачем:) это единственный простой способ исключить проблемы на 100% на все времена :) . Раз - и навсегда! :)

Lethargeek
30.01.2011, 03:46
Гильотина - лучшее лечение от головной боли
Раз - и навсегда!

NovaStorm
31.01.2011, 12:21
Ты пьян, штоле?

современные клоны - это 2Мб, 4Мб, и даже 32Мб :) ..а в перспективе - и гигабайт :)
"Сатурну больше не наливать"!
Где есть 32 метра? И зачем нужно для Z80 больше 256 16кб банков?

Black_Cat
31.01.2011, 13:44
:) NovaStorm, ты наверно ошибся разделом. Для юниоров есть раздел "Для начинающих", такие вопросы уместнее задавать там :) . Токо если хочешь получить ответ, не задавай вопрос в форме:" Вы все идиоты, поэтому объясните мне что я не понимаю", уместнее задавать вопрос в форме:"Я убогий (бестолковый, глупый.. и т.д. на выбор), ничего не понимаю, поэтому объясните мне то-то и то-то". Удачи :)

Vadim
31.01.2011, 13:55
Что-то БК не в духе... Фигню какую-то пишет, человек задал адекватный вопрос. Зачем ОЗУ более 4 метра? Где оно вообще юзается? Я знаю только, что софт на Профи в ОС CP/M юзает доп. память. Т.е. не только для эл. диска, а для нужд программ. На спектруме кроме как буфер для копирования никто память свыше 128К не юзает. Страна мифов только вроде 256К хотела и всё...

P.S. И это.... Завязывать тебе надо с алкоголем или когда выпил не садись за комп...

NovaStorm
31.01.2011, 14:34
P.S. И это.... Завязывать тебе надо с алкоголем
Хм, теперь источник вдохновения для "концепций" ясен...

А 256к вроде ещё использовала одна из технодем Дюны2.

Лас
31.01.2011, 15:54
Как располагается сейчас рамдиск в КАЕ ты знаешь? Вот если его не переделать по предложенным рекомендациям, то он будет уничтожен. Собсно этот топик в первую очередь предназначался Лас'у :)
Спасибо за заботу, но я так и не смог понять, что надо переделать.

Black_Cat
31.01.2011, 17:02
я так и не смог понять, что надо переделать. Изначальго вопрос к тебе стоял так:

Насколько мне известно, формат рам-диска кая 1024 никогда не менялся.

а насколько трудоёмко его поменять так, чтоб рамдиск размещался токо по A16'=0?
Хорошо, для сепарации неясностей буду объяснять по разделениям:
1) всё ОЗУ делится на банки по 64к
2) чётные банки - это память доступная токо CPU, нечётные банки - это память доступная CPU и видеосканеру
3) про нечётные банки мы сразу забываем, как будто их и нет вообще, нам они не потребуются
4) чётные банки используем для размещения рамдиска со следующими исключениями:
- банки 0, 2 - не используем, т.к. они предназначены для размещения тела программы в формате 256кб
- банк 4 - не используем, т.к. в его младшей странице размещаются системные переменные Проф ПЗУ
5) при создании рамдиска учитывать следующий порядок следования старших адресов ОЗУ:
- для архитектуры SKAY (Scorpion & KAY):
A17’=D7 #7FFD
A18’=D4 #1FFD
A19’=D7 #1FFD
A20’=D6 #7FFD
A21’=D5 #7FFD
- для архитектуры Pentagon:
A17’=D7 #7FFD
A18’=D6 #7FFD
A19’=D5 #7FFD
A20’=D4 #1FFD
A21’=D7 #1FFD

Задача: разложить в оставшиеся чётные банки рамдиск.

ZEK
31.01.2011, 17:29
БК-0010, У тебя талант объяснять простые вещи сверхсложно, так что бы даже после десятого прочтения не было ясно и половины проблеммы

Лас
01.02.2011, 22:03
Вобщем, я тут написал маленький скриптик, который сформировал текстовые файлы полной картой текущего рам-диска KAY.
Бит D3 7ffdh, о котором шла речь как об A16 в каком-то из постов, вообще не задействован же.


Double Side
80 phis.tracks
160 log.tracks

log|hx|hx|bin 7ffd|bin 1ffd|trk
trk|7f|1f|DDDDDDDD|DDDDDDDD|data
num|fd|fd|76543210|76543210|adr
T00 10 90 00010000 10010000 C000
T01 10 90 00010000 10010000 D000
T02 10 90 00010000 10010000 E000
T03 10 90 00010000 10010000 F000
T04 11 90 00010001 10010000 C000
T05 11 90 00010001 10010000 D000
T06 11 90 00010001 10010000 E000
T07 11 90 00010001 10010000 F000
T08 12 90 00010010 10010000 C000
T09 12 90 00010010 10010000 D000
T0A 12 90 00010010 10010000 E000
T0B 12 90 00010010 10010000 F000
T0C 13 90 00010011 10010000 C000
T0D 13 90 00010011 10010000 D000
T0E 13 90 00010011 10010000 E000
T0F 13 90 00010011 10010000 F000
T10 14 90 00010100 10010000 C000
T11 14 90 00010100 10010000 D000
T12 14 90 00010100 10010000 E000
T13 14 90 00010100 10010000 F000
T14 15 90 00010101 10010000 C000
T15 15 90 00010101 10010000 D000
T16 15 90 00010101 10010000 E000
T17 15 90 00010101 10010000 F000
T18 16 90 00010110 10010000 C000
T19 16 90 00010110 10010000 D000
T1A 16 90 00010110 10010000 E000
T1B 16 90 00010110 10010000 F000
T1C 17 90 00010111 10010000 C000
T1D 17 90 00010111 10010000 D000
T1E 17 90 00010111 10010000 E000
T1F 17 90 00010111 10010000 F000
T20 90 00 10010000 00000000 C000
T21 90 00 10010000 00000000 D000
T22 90 00 10010000 00000000 E000
T23 90 00 10010000 00000000 F000
T24 91 00 10010001 00000000 C000
T25 91 00 10010001 00000000 D000
T26 91 00 10010001 00000000 E000
T27 91 00 10010001 00000000 F000
T28 92 00 10010010 00000000 C000
T29 92 00 10010010 00000000 D000
T2A 92 00 10010010 00000000 E000
T2B 92 00 10010010 00000000 F000
T2C 93 00 10010011 00000000 C000
T2D 93 00 10010011 00000000 D000
T2E 93 00 10010011 00000000 E000
T2F 93 00 10010011 00000000 F000
T30 94 00 10010100 00000000 C000
T31 94 00 10010100 00000000 D000
T32 94 00 10010100 00000000 E000
T33 94 00 10010100 00000000 F000
T34 95 00 10010101 00000000 C000
T35 95 00 10010101 00000000 D000
T36 95 00 10010101 00000000 E000
T37 95 00 10010101 00000000 F000
T38 96 00 10010110 00000000 C000
T39 96 00 10010110 00000000 D000
T3A 96 00 10010110 00000000 E000
T3B 96 00 10010110 00000000 F000
T3C 97 00 10010111 00000000 C000
T3D 97 00 10010111 00000000 D000
T3E 97 00 10010111 00000000 E000
T3F 97 00 10010111 00000000 F000
T40 90 10 10010000 00010000 C000
T41 90 10 10010000 00010000 D000
T42 90 10 10010000 00010000 E000
T43 90 10 10010000 00010000 F000
T44 91 10 10010001 00010000 C000
T45 91 10 10010001 00010000 D000
T46 91 10 10010001 00010000 E000
T47 91 10 10010001 00010000 F000
T48 92 10 10010010 00010000 C000
T49 92 10 10010010 00010000 D000
T4A 92 10 10010010 00010000 E000
T4B 92 10 10010010 00010000 F000
T4C 93 10 10010011 00010000 C000
T4D 93 10 10010011 00010000 D000
T4E 93 10 10010011 00010000 E000
T4F 93 10 10010011 00010000 F000
T50 94 10 10010100 00010000 C000
T51 94 10 10010100 00010000 D000
T52 94 10 10010100 00010000 E000
T53 94 10 10010100 00010000 F000
T54 95 10 10010101 00010000 C000
T55 95 10 10010101 00010000 D000
T56 95 10 10010101 00010000 E000
T57 95 10 10010101 00010000 F000
T58 96 10 10010110 00010000 C000
T59 96 10 10010110 00010000 D000
T5A 96 10 10010110 00010000 E000
T5B 96 10 10010110 00010000 F000
T5C 97 10 10010111 00010000 C000
T5D 97 10 10010111 00010000 D000
T5E 97 10 10010111 00010000 E000
T5F 97 10 10010111 00010000 F000
T60 90 80 10010000 10000000 C000
T61 90 80 10010000 10000000 D000
T62 90 80 10010000 10000000 E000
T63 90 80 10010000 10000000 F000
T64 91 80 10010001 10000000 C000
T65 91 80 10010001 10000000 D000
T66 91 80 10010001 10000000 E000
T67 91 80 10010001 10000000 F000
T68 92 80 10010010 10000000 C000
T69 92 80 10010010 10000000 D000
T6A 92 80 10010010 10000000 E000
T6B 92 80 10010010 10000000 F000
T6C 93 80 10010011 10000000 C000
T6D 93 80 10010011 10000000 D000
T6E 93 80 10010011 10000000 E000
T6F 93 80 10010011 10000000 F000
T70 94 80 10010100 10000000 C000
T71 94 80 10010100 10000000 D000
T72 94 80 10010100 10000000 E000
T73 94 80 10010100 10000000 F000
T74 95 80 10010101 10000000 C000
T75 95 80 10010101 10000000 D000
T76 95 80 10010101 10000000 E000
T77 95 80 10010101 10000000 F000
T78 96 80 10010110 10000000 C000
T79 96 80 10010110 10000000 D000
T7A 96 80 10010110 10000000 E000
T7B 96 80 10010110 10000000 F000
T7C 97 80 10010111 10000000 C000
T7D 97 80 10010111 10000000 D000
T7E 97 80 10010111 10000000 E000
T7F 97 80 10010111 10000000 F000
T80 90 90 10010000 10010000 C000
T81 90 90 10010000 10010000 D000
T82 90 90 10010000 10010000 E000
T83 90 90 10010000 10010000 F000
T84 91 90 10010001 10010000 C000
T85 91 90 10010001 10010000 D000
T86 91 90 10010001 10010000 E000
T87 91 90 10010001 10010000 F000
T88 92 90 10010010 10010000 C000
T89 92 90 10010010 10010000 D000
T8A 92 90 10010010 10010000 E000
T8B 92 90 10010010 10010000 F000
T8C 93 90 10010011 10010000 C000
T8D 93 90 10010011 10010000 D000
T8E 93 90 10010011 10010000 E000
T8F 93 90 10010011 10010000 F000
T90 94 90 10010100 10010000 C000
T91 94 90 10010100 10010000 D000
T92 94 90 10010100 10010000 E000
T93 94 90 10010100 10010000 F000
T94 95 90 10010101 10010000 C000
T95 95 90 10010101 10010000 D000
T96 95 90 10010101 10010000 E000
T97 95 90 10010101 10010000 F000
T98 96 90 10010110 10010000 C000
T99 96 90 10010110 10010000 D000
T9A 96 90 10010110 10010000 E000
T9B 96 90 10010110 10010000 F000
T9C 97 90 10010111 10010000 C000
T9D 97 90 10010111 10010000 D000
T9E 97 90 10010111 10010000 E000
T9F 97 90 10010111 10010000 F000


Double Side
40 phis.tracks
80 log.tracks

log|hx|hx|bin 7ffd|bin 1ffd|trk
trk|7f|1f|DDDDDDDD|DDDDDDDD|data
num|fd|fd|76543210|76543210|adr
T00 10 90 00010000 10010000 C000
T01 10 90 00010000 10010000 D000
T02 10 90 00010000 10010000 E000
T03 10 90 00010000 10010000 F000
T04 11 90 00010001 10010000 C000
T05 11 90 00010001 10010000 D000
T06 11 90 00010001 10010000 E000
T07 11 90 00010001 10010000 F000
T08 12 90 00010010 10010000 C000
T09 12 90 00010010 10010000 D000
T0A 12 90 00010010 10010000 E000
T0B 12 90 00010010 10010000 F000
T0C 13 90 00010011 10010000 C000
T0D 13 90 00010011 10010000 D000
T0E 13 90 00010011 10010000 E000
T0F 13 90 00010011 10010000 F000
T10 14 90 00010100 10010000 C000
T11 14 90 00010100 10010000 D000
T12 14 90 00010100 10010000 E000
T13 14 90 00010100 10010000 F000
T14 15 90 00010101 10010000 C000
T15 15 90 00010101 10010000 D000
T16 15 90 00010101 10010000 E000
T17 15 90 00010101 10010000 F000
T18 16 90 00010110 10010000 C000
T19 16 90 00010110 10010000 D000
T1A 16 90 00010110 10010000 E000
T1B 16 90 00010110 10010000 F000
T1C 17 90 00010111 10010000 C000
T1D 17 90 00010111 10010000 D000
T1E 17 90 00010111 10010000 E000
T1F 17 90 00010111 10010000 F000
T20 90 00 10010000 00000000 C000
T21 90 00 10010000 00000000 D000
T22 90 00 10010000 00000000 E000
T23 90 00 10010000 00000000 F000
T24 91 00 10010001 00000000 C000
T25 91 00 10010001 00000000 D000
T26 91 00 10010001 00000000 E000
T27 91 00 10010001 00000000 F000
T28 92 00 10010010 00000000 C000
T29 92 00 10010010 00000000 D000
T2A 92 00 10010010 00000000 E000
T2B 92 00 10010010 00000000 F000
T2C 93 00 10010011 00000000 C000
T2D 93 00 10010011 00000000 D000
T2E 93 00 10010011 00000000 E000
T2F 93 00 10010011 00000000 F000
T30 94 00 10010100 00000000 C000
T31 94 00 10010100 00000000 D000
T32 94 00 10010100 00000000 E000
T33 94 00 10010100 00000000 F000
T34 95 00 10010101 00000000 C000
T35 95 00 10010101 00000000 D000
T36 95 00 10010101 00000000 E000
T37 95 00 10010101 00000000 F000
T38 96 00 10010110 00000000 C000
T39 96 00 10010110 00000000 D000
T3A 96 00 10010110 00000000 E000
T3B 96 00 10010110 00000000 F000
T3C 97 00 10010111 00000000 C000
T3D 97 00 10010111 00000000 D000
T3E 97 00 10010111 00000000 E000
T3F 97 00 10010111 00000000 F000
T40 90 10 10010000 00010000 C000
T41 90 10 10010000 00010000 D000
T42 90 10 10010000 00010000 E000
T43 90 10 10010000 00010000 F000
T44 91 10 10010001 00010000 C000
T45 91 10 10010001 00010000 D000
T46 91 10 10010001 00010000 E000
T47 91 10 10010001 00010000 F000
T48 92 10 10010010 00010000 C000
T49 92 10 10010010 00010000 D000
T4A 92 10 10010010 00010000 E000
T4B 92 10 10010010 00010000 F000
T4C 93 10 10010011 00010000 C000
T4D 93 10 10010011 00010000 D000
T4E 93 10 10010011 00010000 E000
T4F 93 10 10010011 00010000 F000

Лас
01.02.2011, 22:04
Продолжение


Single Side
80 phis.tracks
80 log.tracks

log|hx|hx|bin 7ffd|bin 1ffd|trk
trk|7f|1f|DDDDDDDD|DDDDDDDD|data
num|fd|fd|76543210|76543210|adr
T00 10 90 00010000 10010000 C000
T01 10 90 00010000 10010000 D000
T02 11 90 00010001 10010000 E000
T03 11 90 00010001 10010000 F000
T04 12 90 00010010 10010000 C000
T05 12 90 00010010 10010000 D000
T06 13 90 00010011 10010000 E000
T07 13 90 00010011 10010000 F000
T08 14 90 00010100 10010000 C000
T09 14 90 00010100 10010000 D000
T0A 15 90 00010101 10010000 E000
T0B 15 90 00010101 10010000 F000
T0C 16 90 00010110 10010000 C000
T0D 16 90 00010110 10010000 D000
T0E 17 90 00010111 10010000 E000
T0F 17 90 00010111 10010000 F000
T10 90 00 10010000 00000000 C000
T11 90 00 10010000 00000000 D000
T12 91 00 10010001 00000000 E000
T13 91 00 10010001 00000000 F000
T14 92 00 10010010 00000000 C000
T15 92 00 10010010 00000000 D000
T16 93 00 10010011 00000000 E000
T17 93 00 10010011 00000000 F000
T18 94 00 10010100 00000000 C000
T19 94 00 10010100 00000000 D000
T1A 95 00 10010101 00000000 E000
T1B 95 00 10010101 00000000 F000
T1C 96 00 10010110 00000000 C000
T1D 96 00 10010110 00000000 D000
T1E 97 00 10010111 00000000 E000
T1F 97 00 10010111 00000000 F000
T20 90 10 10010000 00010000 C000
T21 90 10 10010000 00010000 D000
T22 91 10 10010001 00010000 E000
T23 91 10 10010001 00010000 F000
T24 92 10 10010010 00010000 C000
T25 92 10 10010010 00010000 D000
T26 93 10 10010011 00010000 E000
T27 93 10 10010011 00010000 F000
T28 94 10 10010100 00010000 C000
T29 94 10 10010100 00010000 D000
T2A 95 10 10010101 00010000 E000
T2B 95 10 10010101 00010000 F000
T2C 96 10 10010110 00010000 C000
T2D 96 10 10010110 00010000 D000
T2E 97 10 10010111 00010000 E000
T2F 97 10 10010111 00010000 F000
T30 90 80 10010000 10000000 C000
T31 90 80 10010000 10000000 D000
T32 91 80 10010001 10000000 E000
T33 91 80 10010001 10000000 F000
T34 92 80 10010010 10000000 C000
T35 92 80 10010010 10000000 D000
T36 93 80 10010011 10000000 E000
T37 93 80 10010011 10000000 F000
T38 94 80 10010100 10000000 C000
T39 94 80 10010100 10000000 D000
T3A 95 80 10010101 10000000 E000
T3B 95 80 10010101 10000000 F000
T3C 96 80 10010110 10000000 C000
T3D 96 80 10010110 10000000 D000
T3E 97 80 10010111 10000000 E000
T3F 97 80 10010111 10000000 F000
T40 90 90 10010000 10010000 C000
T41 90 90 10010000 10010000 D000
T42 91 90 10010001 10010000 E000
T43 91 90 10010001 10010000 F000
T44 92 90 10010010 10010000 C000
T45 92 90 10010010 10010000 D000
T46 93 90 10010011 10010000 E000
T47 93 90 10010011 10010000 F000
T48 94 90 10010100 10010000 C000
T49 94 90 10010100 10010000 D000
T4A 95 90 10010101 10010000 E000
T4B 95 90 10010101 10010000 F000
T4C 96 90 10010110 10010000 C000
T4D 96 90 10010110 10010000 D000
T4E 97 90 10010111 10010000 E000
T4F 97 90 10010111 10010000 F000



Single Side
40 phis.tracks
40 log.tracks

log|hx|hx|bin 7ffd|bin 1ffd|trk
trk|7f|1f|DDDDDDDD|DDDDDDDD|data
num|fd|fd|76543210|76543210|adr
T00 10 90 00010000 10010000 C000
T01 10 90 00010000 10010000 D000
T02 11 90 00010001 10010000 E000
T03 11 90 00010001 10010000 F000
T04 12 90 00010010 10010000 C000
T05 12 90 00010010 10010000 D000
T06 13 90 00010011 10010000 E000
T07 13 90 00010011 10010000 F000
T08 14 90 00010100 10010000 C000
T09 14 90 00010100 10010000 D000
T0A 15 90 00010101 10010000 E000
T0B 15 90 00010101 10010000 F000
T0C 16 90 00010110 10010000 C000
T0D 16 90 00010110 10010000 D000
T0E 17 90 00010111 10010000 E000
T0F 17 90 00010111 10010000 F000
T10 90 00 10010000 00000000 C000
T11 90 00 10010000 00000000 D000
T12 91 00 10010001 00000000 E000
T13 91 00 10010001 00000000 F000
T14 92 00 10010010 00000000 C000
T15 92 00 10010010 00000000 D000
T16 93 00 10010011 00000000 E000
T17 93 00 10010011 00000000 F000
T18 94 00 10010100 00000000 C000
T19 94 00 10010100 00000000 D000
T1A 95 00 10010101 00000000 E000
T1B 95 00 10010101 00000000 F000
T1C 96 00 10010110 00000000 C000
T1D 96 00 10010110 00000000 D000
T1E 97 00 10010111 00000000 E000
T1F 97 00 10010111 00000000 F000
T20 90 10 10010000 00010000 C000
T21 90 10 10010000 00010000 D000
T22 91 10 10010001 00010000 E000
T23 91 10 10010001 00010000 F000
T24 92 10 10010010 00010000 C000
T25 92 10 10010010 00010000 D000
T26 93 10 10010011 00010000 E000
T27 93 10 10010011 00010000 F000

Black_Cat
01.02.2011, 23:21
Лас, чем обусловлена такая хитрая чехарда расположения треков? Можно их располагать линейно - от 384к и до упора вверх? И чем чревато такое изменение расположения треков?
Бит D3 7ffdh, о котором шла речь как об A16 эт я под температурой был, и голова ниччё не соображала, поэтому в трёх битах заблудился :) D2 #7FFD

Лас
02.02.2011, 09:52
Лас, чем обусловлена такая хитрая чехарда расположения треков? Можно их располагать линейно - от 384к и до упора вверх? И чем чревато такое изменение расположения треков?
Я так понял, что вы сами не знаете, чего хотите. Иначе бы вы формулировали свои мысли достаточно четко.

хитрая чехарда

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

Black_Cat
02.02.2011, 13:19
обусловлено тем, что когда создавался каевский рам-диск, блэккэтом там и не пахлодругая какая-то смысловая нагрузка такого порядка расположения треков есть? Рамдиски на разных клонах организованы по разному, где-то от младших адресов к старшим, где-то наоборот. В данном случае на КАЕ в таком расположении треков есть какой-то глубинный смысл, или как получилось - так получилось?


вы сами не знаете, чего хотите. Иначе бы вы формулировали свои мысли достаточно четкохорошо, если непонятно так, то я постараюсь максимально детализировать :)

Лас
02.02.2011, 15:41
другая какая-то смысловая нагрузка такого порядка расположения треков есть? Рамдиски на разных клонах организованы по разному, где-то от младших адресов к старшим, где-то наоборот. В данном случае на КАЕ в таком расположении треков есть какой-то глубинный смысл, или как получилось - так получилось?
Какой глубинный смысл? Всё просто.
На стандартном диске 160 дорожек.
На одну страницу умещается 4 дорожки (16 секторов по 256 байт = 4096 байт 1 дорожка, 4*4096=16384). Для хранения целого диска необходимо160/4=40 страниц. В кае-1024 всего 64 страницы (0...63). Под рам-диск используются страницы с 24 по 63 включительно.
Вот как переключаются страницы:


;на входе - Акк=номер страницы

AND #3F ;номер страницы будет 0...63
LD C,A
RLCA
RLCA
AND #C0
LD B,A
LD A,C
OR B
LD B,A
EX AF,AF'
LD A,B
EX AF,AF'
AND #87 ;10000111 d7,d0..d2
OR #10 ;00001000 ;rom1
LD BC,#7FFD
OUT (C),A
EX AF,AF'
LD B,A
EX AF,AF'
LD A,B
RLCA
AND #90 ;10010000 d7,d4
LD B,#1F
OUT (C),A
RET


Чтобы было понятней:

Aкк=0...3fh

DDDDDDDD
76543210
xx|||||'- D0 7ffdh -\ -----\
||||'---D1 7ffdh > pages 0...7=128k \
|||'----D2 7ffdh -/ /pages 0...15=256k (KAY, Scorpion)
||'-----D4 1ffdh -----/
|'------D7 1ffdh
'-------D7 7ffdh

Black_Cat
03.02.2011, 04:22
Чтобы было понятней:
D2=0 7ffdh
Aкк=0...3fh

DDDDDDDD
76543210
xx|||||'- D0 7ffdh -\
||||'---D1 7ffdh -/ pages 0...3=64k
|||'----D7 7ffdh
||'-----D4 1ffdh
|'------D7 1ffdh
'-------D6 7ffdh (SKAY)

---------- Post added at 04:22 ---------- Previous post was at 04:05 ----------

судя по всему, в коде надо поменять маску:

AND #C3 ;11000011 d7,d6,d1,d0

Кроме этого, как понимаю, нужна процедура определения наличия ОЗУ по сташему адресу A20'=D6 #7FFD, которая вычисляет маску для #7FFD: либо #C3 если ОЗУ обнаружено, либо #83 - если нет. В последнем случае рамдиск будет токо 320кб

Лас
03.02.2011, 10:27
судя по всему, в коде надо поменять маску:

AND #C3 ;11000011 d7,d6,d1,d0

Кроме этого, как понимаю, нужна процедура определения наличия ОЗУ по сташему адресу A20'=D6 #7FFD, которая вычисляет маску для #7FFD: либо #C3 если ОЗУ обнаружено, либо #83 - если нет. В последнем случае рамдиск будет токо 320кб
Меняйте, что хотите. Можете сделать рам-диск хоть 16 кб, это ваше дело.
Я такой ерундой, как корежение firmware для KAY ради невыпущенного гипотетического железа, заниматься не буду.

Black_Cat
04.02.2011, 16:28
корежение firmware для KAY ради невыпущенного гипотетического железа, заниматься не буду.:) ничего корёжить пока и не надо :) .

Подведём первые итоги: мы щас разобрались, что текущий код под нашу задачу модифицируется довольно легко изменением одного байта в прошивке, так же стало понятно почему треки рамдиска расположены в таком хитром порядке - так было проще построить алгоритм вычисления номера страницы рамдиска, и никакой другой смысловой нагрузки такое расположение не несёт. Срасибо Лас'у за помощь в прояснении этих вопросов :) .

Что касатется "невыпущенного гипотетического железа" :) , то тут беспокоиться не надо - такой режим работы можно реализовать на любом современном клоне, в т.ч. и КАЕ, добавлением максимум одной - двух микросхем :) , но смысл это делать появится токо когда Mick доделает видеокарту (а на клонах с FPGA это можно реализовать и без оной :) ). В КАЕ, при наличии спец редакции видеокарты, умеющей делать R/W VRAM и простой доработки на мамке, в коде прошивки остаётся токо поменять маску для #7FFD на #C3. При этом рамдиск остаётся как и раньше 640кб :) . Более того, с такой доработкой возможно сделать рамдиск и больше, вплоть до 832кб, правда при этом работать будут программы максимум в стандарте ZX128 (если на видеокарте увеличить ОЗУ с 64 до 128к, то будут работать программы и в стандарте ZX256).

Терь очередной вопрос к Лас'у: если считать, что сервис-ПЗУ находится в младшей странице ПЗУ, то по какому адресу находится байт маски #7FFD? И ещё, давно хотел узнать, почему сервис-ПЗУ называется Kramis, откуда появилось это название? :)

Лас
04.02.2011, 17:50
мы щас разобрались, что текущий код под нашу задачу модифицируется довольно легко изменением одного байта в прошивке
1. Мы? Это кто?
2. По поводу текущего кода: он требует изменений еще и в другом месте прошивки, в процедуре форматирования.



так же стало понятно почему треки рамдиска расположены в таком хитром порядке - так было проще построить алгоритм вычисления номера страницы рамдиска, и никакой другой смысловой нагрузки такое расположение не несёт.
Треки рам-диска расположены в простом порядке, линейно, один за другим, заполняя последовательно все страницы, одна за другой. Страницы с треками используются последовательно (24...63).
Порядок очень простой и отнюдь не хитрый.
Страница 24: трек 0,1,2,3
страница 25: трек 4,5,6,7
...
страница 63: трек 156,157,158,159



Терь очередной вопрос к Лас'у: если считать, что сервис-ПЗУ находится в младшей странице ПЗУ, то по какому адресу находится байт маски #7FFD?
Одним байтом вы не обойдетесь, если речь о моей версии прошивки, как уже писал выше. 367fh и 363dh. Изначально там должны быть байты 87h.



И ещё, давно хотел узнать, почему сервис-ПЗУ называется Kramis, откуда появилось это название? :)
От "Профи" пошло. СП "Крамис" - Joint Venture "Kramis" - JV Kramis.

Black_Cat
04.02.2011, 19:38
От "Профи" пошло. СП "Крамис"а как СП "Крамис" было связано с Nemo? Это специально под KAY делалось, или адаптация с "Профи"?

---------- Post added at 19:38 ---------- Previous post was at 18:44 ----------

Лас, я тут намалевал предположительную раскладку ОЗУ, но меня терзают смутные сомнения.. :) . Будь добр, прогони на своём скрипте распечатку рамдиска с масками #C3, хотелось глянуть что будет насамделе :)

Лас
05.02.2011, 01:21
а как СП "Крамис" было связано с Nemo? Это специально под KAY делалось, или адаптация с "Профи"?
Не связано. Адаптация с "профи". Кажется, я делал адаптацию под каевские порты памяти.


Одним байтом вы не обойдетесь, если речь о моей версии прошивки, как уже писал выше. 367fh и 363dh. Изначально там должны быть байты 87h.
Насчет 367fh я ошибся, там маску менять не нужно.


Лас, я тут намалевал предположительную раскладку ОЗУ, но меня терзают смутные сомнения.. :) . Будь добр, прогони на своём скрипте распечатку рамдиска с масками #C3, хотелось глянуть что будет насамделе :)
Лень. Даже без скрипта понятно, что получится фигня. Взять хотя бы бит d2 аккумулятора, который просто теряется.

Black_Cat
05.02.2011, 01:49
Взять хотя бы бит d2 аккумулятора, который просто теряется. Физически на его месте стоит D7 #7FFD:

D2=0 7ffdh
Aкк=0...3fh

DDDDDDDD
76543210
xx|||||'- D0 7ffdh -\
||||'---D1 7ffdh -/ pages 0...3=64k
|||'----D7 7ffdh
||'-----D4 1ffdh
|'------D7 1ffdh
'-------D6 7ffdh (SKAY)

Лас
05.02.2011, 02:02
Физически на его месте стоит D7 #7FFD:

Аккумулятор у нас принимает значения 24...63.
Если вы обьясните мне, как лишь при помощи замены маски %10000111 (87h) на маску %11000011 (c3h) бит d2 аккумулятора перекочевал в бит d7 7ffdh, буду очень признателен.

Black_Cat
05.02.2011, 02:14
D7 у тя и раньше использовался, а в маске вместо D2 добавился D6, т.е. общее количество значащих разрядов не изменилось.

Лас
05.02.2011, 02:30
D7 у тя и раньше использовался, а в маске вместо D2 добавился D6, т.е. общее количество значащих разрядов не изменилось.
Здравствуйте, приехали.
Как же не изменилось.
Стало вот так:


;С МАСКОЙ #C3
;Aкк=0...3fh

DDDDDDDD
76543210
xx|||||'- D0 7ffdh
||||'---D1 7ffdh
|||'----D2 7ffdh ВСЕГДА=0!
||'-----D4 1ffdh
|'------D7 1ffdh, А ТАКЖЕ этот бит дублируется в D6 7ffd!
'-------D7 7ffdh

Black_Cat
05.02.2011, 03:06
хорошо, как их растрясти, чтобы каждому разряду аккумулятора достался разряд порта?

Лас
05.02.2011, 11:29
Проскроллировать d2 до d6, например.

---------- Post added at 11:29 ---------- Previous post was at 10:06 ----------



D2=0 7ffdh
Aкк=0...3fh

DDDDDDDD
76543210
xx|||||'- D0 7ffdh -\
||||'---D1 7ffdh -/ pages 0...3=64k
|||'----D7 7ffdh
||'-----D4 1ffdh
|'------D7 1ffdh
'-------D6 7ffdh (SKAY)


1. Хочу заметить, от того что вы на форуме в подобном сообщении приведёте вашу новую, измененную битовую раскладку аккумулятора, от этого она по портам сама не раскинется по-новому. Нужно менять код, который "распределяет" биты аккумулятора на нужные биты портов.
А то взяли, написали "D6 акк это у нас теперь d6 7ffd".
И что дальше? А как он туда попадет? С помощью маски #c3? Лол.

2. Также вам нужно будет изменить процедуру поиска текущей страницы ОЗУ (маркировка и перебор). Это то место, про которое я писал сначала, что маску там надо менять, потом - что не надо менять. На самом деле - надо менять процедуру перебора всей доступной памяти от 0 страницы до максимальной.

Black_Cat
06.02.2011, 22:13
На самом деле - надо менять процедуру перебора всей доступной памяти от 0 страницы до максимальнойкинь пож эту процедуру сюда


Проскроллировать d2 до d6, например.код получается длиннее твоего, если чо, там в Крамисе ещё свободное место есть?

Лас
06.02.2011, 23:09
кинь пож эту процедуру сюда
У меня нет исходников сейчас. Дизассемблируйте пож самостоятельно, мне лень. :v2_slee2:



код получается длиннее твоего, там в Крамисе ещё свободное место есть?
Не в крамисе, а в тр-досе. Место есть.

Ewgeny7
07.02.2011, 00:01
Где есть 32 метра?
u9_speccy.
А вообще тема зачётная, читаю с попкорном.

garlands
07.02.2011, 00:06
Ewgeny7, +1

тема из серии чистого теоретизирования.... неужели все так сразу пересядут?... ;)

Ewgeny7
07.02.2011, 00:09
тема из серии чистого теоретизирования.... неужели все так сразу пересядут?..
Конечно нет. Просто там, где есть Black cat (БК-0010) всегда много пыли, концепций, ругани, ........ Результат всего этого действа - не обязателен.

garlands
07.02.2011, 00:15
"но сам процесс"?.. ;)

Лас
07.02.2011, 00:41
код получается длиннее твоего, если чо, там в Крамисе ещё свободное место есть?
Код процедуры переключения страницы, который я приводил здесь (http://zx.pk.ru/showpost.php?p=355545&postcount=36),
не мой, а, кажется, Кости Вербова (автора первой версии рам-диска).
Именно только процедуру переключения страниц я поместил на то же место в пзу в первозданном виде в своей версии прошивки (в таком виде в каком она была в первой версии кая-1024) ради обеспечения совместимости (например, драйвер верхней памяти в ALASM использует этот код в пзу для переключения страниц Кая).
Процедуру можно оптимизировать и сократить. Например так:


;на входе - Акк=номер страницы

AND #3F ;номер страницы будет 0...63
LD C,A
RLCA
RLCA
AND #C0

OR C ;+ (плюс 1 байт)

; LD B,A ;-
; LD A,C ;-
; OR B ;- (минус 3 байта)

LD B,A
EX AF,AF'
LD A,B

; EX AF,AF' ;- (минус 1 байт)

AND #87 ;10000111 d7,d0..d2
OR #10 ;00001000 ;rom1
LD BC,#7FFD
OUT (C),A
EX AF,AF'

; LD B,A ;-
; EX AF,AF' ;-
; LD A,B ;- (минус 3 байта)

RLCA
AND #90 ;10010000 d7,d4
LD B,#1F
OUT (C),A
RET

Итого сократил процедуру на 6 байт.

---------- Post added at 00:41 ---------- Previous post was at 00:28 ----------

А, и в прошивках там не RET в конце, а JP (HL), но это мелочи.

Black_Cat
07.02.2011, 00:52
например, драйвер верхней памяти в ALASM использует этот код в пзу для переключения страниц Каят.е. эта подпрограмма юзается не токо при работе с рамдиском, но и как стандартная процедура управления памятью?


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

Лас
07.02.2011, 00:57
1. Ну драйвер в ALASM её юзает. Может еще какой специфичный софт для Кая эту процедуру юзает. Соображения, по которым я процедуру не менял, изложены выше.

2. Предсказывать неприятности не умею

3. Будет "железо" - будут выложены исходники.

Black_Cat
15.02.2011, 22:31
ReVerSe u9 SKAY Memory mapping в аттаче.
Дешифрация портов для CPU3:

#1FFD/8189 0001111111111101 00xxxxxxxxxxxx01 - CPU3 Pag SysLo
#7FFD/32765 0111111111111101 01xxxxxxxxxxxx01 - CPU3 Pag
#DEFD/57085 1101111011111101 1101x1x0xxxx1101 #DEFD CPU3 Pag TSH
1101x11xxxxx1101 #DEFD CPU3 Pag TSL
Для #DEFD:
TSH - разряды D3-D7
TSL - разряды D0-D2

Biland
19.05.2019, 20:11
OR #10 ;00001000 ;rom1

Подскажите, автор здесь указал #10, а это вроде бы D4 бит. OCT (октет) 10 - это D3 бит. Эмулятор вроде бы выводит число 16. Это ошибка или что-то ещё?

------------------------------

В общем, разобрался. Неправильно указано бинарное число в комментарии, %00010000 так правильно и OR #10 - правильно. И, вообще, на zxpress очень много опечаток, просто жуть, у них на KAY1024, D3 - текущее ПЗУ, D4 - активный экран. А на деле, наоборот. Да и разъём 96pin, а не 60, 62.