есть у кого-нибудь схема включения проф-ПЗУ?
а то непонятно, как страницы переключаются
Вид для печати
есть у кого-нибудь схема включения проф-ПЗУ?
а то непонятно, как страницы переключаются
Я так понимаю от этого напрямую зависит будет твой эмуль работать с винтом scorpa или нет?!
Если так то давай вместе искать ! Очень надо!
Схема включения тебе ни о чем не скажет, так как она основана на Альтере... Помнится, авторы эмулятора Z80stealth долго бились над раскрытием секрета переключения страниц внутри ПрофПЗУ. Сами не имея реального Скорпиона, они присылали мне короткие программки, которые я запускал на своем Скорпионе, а полученные логи работы этих программ отсылал обратно им. Обращались они и к разработчикам эмулятора RealSpeccy, который первым начал эмуляторвать ПрофПЗУ Скорпиона, однако авторы этого эмулятора не пожелали раскрывать секрета. Я уже не помню как, но секрет переключения страниц ПрофПЗУ всё же был раскрыт и, на сколько я помню, авторы Z80stealth даже поделились этим секретом с общественностью. Правда я уже успел забыть каким именно образом организовано это переключение :(
Если ты действительно тот самый SMT, который автор UnrealSpeccy и у тебя есть желание сделать эмуляцию ПрофПЗУ, то я могу постараться узнать всё, что необходимо для создания подобной эмуляции.
вот два мнения на проблему (одно из них мое):
= Реально на реальном! (2:5030/827.2) =========================== REAL.SPECCY =
Msg : 1012 of 1019
From : Vassili Klimov 2:5054/37.28 30 Jul 01 00:22:16
To : All 30 Jul 01 01:19:58
Subj : CRC и коммутация ПрофПЗУ в скорпе
================================================== =============================
у здравствуй, All !
Yahoo!!!!!!!! Убив несколько часов на изучение ПрофПЗУ довожу до вашего
сведения общий принцип управления. Итак, начнем с описания: ППЗУ 512кб состоит
из 2х половинок по 256кб никоим образом не связанных с друг другом и
переключающихся тумблером;). Соответственно в каждой из этих частей полностью
содержится система (по моим оценкам она занимает 70-80кб).
Далее, каждая часть побита на блоки по 64кб. Переключение внутри блоков банков
по 16кб стандартное: если в 1FFD бит D1=1, то включено ПЗУ монитора (при любом
значении бита D4 7FFD), иначе если D4=1 (7FFD), то басик48, если D4=0, то
басик128. Чтобы, включить пзу трдоса нужно при включенном басике48 сделать
JP #3DXX.
Теперь о переключении блоков. Сначала врубается область теневика (D1=1,
1FFD). Пусть номер блока (0-3) задан в А, тогда у МОА видим следущее:
ld hl,#0110:add a,l:ld l,a:jr nc,m1:inc h
m1 ld l,(hl):ld l,(hl):ret
в строке с m1 видим 2 ключевые команды ld l,(hl)! Первая просто читает значение
из таблицы (всего там их 4 штуки: #00,#04,#08,#0c), а вторая врубает блок.
Вроде все тривиально, однако непонятно зачем нужна таблица? Причем в каждом из
блоков таблицы разные: используются те же значения 0,4,8,c, но порядок их
расположения другой! Также отмечу, что ячейка #0101 используется для
идентификации текущего блока. Пример: запомнили число из #0101, включили
какой-нибудь блок, выполнили какие-либо операции, для восстановления
предыдущего блока использовали запомненное значение и т.п.
= Кул-кодеры на спектруме (500:812/1.507) =========================== CODE.ZX =
Msg : 195 of 195
From : Vlad Sotnikov 500:812/8.9 21 Mar 01 21:30:50
To : All 23 Mar 01 00:04:06
Subj : Переключение страниц ПрофПЗУ.
================================================== =============================
Привет, All!
Я подготовил сабж для автора эмулятора Z80Stealt.
Однако я подумал, что она будет небезинтересна и
реальщикам, поскольку до сих пор о данной проблеме
ходят лишь слухи и не существует мало-мальски
достоверной информации. Поэтому я надеюсь, что в
ходе обсуждения, проблема переключения страниц
ПрофПЗУ более-менее прояснится.
----------------- mail begin here --------------------
Извини, что отвечаю тебе так поздно - признаться, твоя
просьба заставила меня достаточно помучаться, чтобы выяснить,
как же все-таки переключаются страницы в ПрофПЗУ. Вначале я
начал копать эмулятор MOA SPM. И напоролся там на команду,
названную им SPM. Она имеет код #ED,#10 - и мне потребовалось
немного времени, чтобы понять, что этот способ не имеет ничего
общего с тем, как переключаются страницы на реальном спеке. А
на реальном Скорпионе все происходит так:
Известно, что для выполнения подпрограмм в дополнительных
страницах используется команда RST #30, которая вызывается при
включенном ПЗУ Монитора и 8-й странице. При этом она имеет
следующий формат:
RST #30
DW адрес подпрограммы
DB номер страницы (0...15)
...
После выполнения подпрограммы снова включается основная
страница монитора, и 8-я банка памяти. Hомера страниц имеют
следующие соответствия:
0 - 128 ПЗУ.
1 - 48 ПЗУ.
2 - Монитор (основная страница)
3 - TR-DOS.
...
С 4 по 15 - дополнительные страницы Монитора. Hо это все
внешний уровень. Чтобы узнать, что же происходит на самом деле,
я последовал за RST #30. Там управление передается в 8-ю
страницу, и помещается собственно подпрограмма переключения
страниц ПЗУ, причем очень запутанная. При желании можно ее
посмотреть, но вот тот конечный результат, который я получил из
анализа этого путанного кода MOA.
Вся память ПрофПЗУ делится на определенное количество
сегментов, в каждом из которых находится по 4 страницы. В
ПрофПЗУ 27010 таких сегментов 2, в 27020 - 4 и в Пзу 27040
вероятно тоже 4 сегмента, но основные страницы там
продублированы. Однако это ни что иное, как догадка.
Я копал ПЗУ 27020, и поэтому описываю имеющиеся в нем 4
сегмента. Как все происходит в других ПЗУ, я точно не знаю.
Внутри каждого сегмента страницы переключаются стандартным для
них способом - через порты #1FFD,#7FFD и обращением к адресу
#3D30 (sic у MOA!) для 3-й страницы сегмента. То есть,
допустим, 7-я страница ПЗУ, которой соответствует 3-я страница
1-го сегмента, включается помещением адреса подпрограммы на
стек и обращением к ней по адресу #3D30, где у нее стоит
команда RET. И, наконец, самое главное: каким образом
происходит переключение сегментов. Для этого необходимо считать
значение из определенного участка памяти при включенном ПЗУ
Монитора, т.е. при установленном 1-м бите порта #1FFD. Вот
адреса для этих сегментов:
0 - #0100
1 - #010C
2 - #0108
3 - #0104
Старшее значение - #01. Младшие значения адреса в памяти для
переключения сегментов находятся опять-таки в основной странице
Монитора по адресу #0110. Для получения младшего значения
адреса необходимо к числу #0110 прибавить номер сегмента. Этот
абзац я написал для того, чтоб ты мог посмотреть, какие адреса
соответствуют сегментам в других версиях ПрофПЗУ (27010 и
27040). Хочу заметить, что прошивка ПрофПЗУ 27040 (512К),
которая ходит по сети, скорее всего битая. Однако ты вроде бы
мне об этом уже писал.
Как это не пародоксально, но такое переключение страниц -
факт. Убедится в этом можно, написав такую подпрограммку:
DI
LD BC,#1FFD
LD A,#12
OUT (C),A
LD A,(#010C)
LD BC,#1FFD
XOR A
OUT (C),A
EI
RET
И компьютер уходит в ступор. Теперь что касается прошивки
ПЗУ: к сожалению, у меня ее нет. Hо для эмулятора я бы
порекомендовал использовать прошивку ПрофПЗУ 27010, поскольку
все эти дополнительные программы, сидящие в ROM памяти, страшно
допотопные и никому на фиг не нужны - никто из реальщиков
практически никогда их не запускает. В принципе прошивку можно
выдернуть программно с реального спека таким образом:
ORG #7000
DI
LD BC,#1FFD
LD A,#12
OUT (C),A
RST #30
DW COPY_PAGE
DB страница.
LD BC,#1FFD
XOR A
OUT (C),A
RET
COPY_PAGE LD HL,0
LD DE,#8000
LD BC,#4000
LDIR : RET
Подставляем номера страниц и снимаем их из ОЗУ. Hо здесь есть
маленькая проблема: каждая четвертая страница сегмента
(3,7,11,15). Дело в том, что для спека это страницы TR-DOS'а, и
в случае, если выполняемый код выходит за пределы ПЗУ, то
включается "ПЗУ 48" - 1-я страница сегмента. И если 3-ю страницу
взять очень легко (стандартный TR-DOS), то страницы 7,11 и 15
вызывают затруднение. Однако в случае эмулирования прошивки
27010 нам потребуется лишь 7-я страница.
Вот, собственно, и все. Если возникнут какие-либо вопросы,
пиши. Обязательно напиши, как - помогла тебе моя информация или
ты все это уже знал? И напиши, удалось ли тебе вытащить 7-ю
страницу. Если нет, то я что-нибудь придумаю.
Счастливо, Влад (Vega, ex Style Group).
--------------------- mail finished here ---------------------
С уважением, Vega.
--- Dos-Navigator_v1.50
* Origin: SPbZXNet'2001 (500:812/8.9)
тепер расскажу, что сам за сегодня накопал...
Z80S переключает банки по команде ld l,(hl) именно по адресу #E4B4. берет страницу из регистра L. то есть как-то подозрительно и слишком искуственно
ещё собираюсь дизассемблировать real spectrum, там нет такого маразма, как этот вшитый адрес (да и вообще он славится точностью эмуляции железа). если там подтвердится чтение из специальных адресов #1xx, буду значит так и делать
следующий вопрос - где взять большие прошивки, дайте ссылок. у меня есть только проф-ПЗУ на 128кб
2SMT: по другому и быть не может, поскольку профпзу вставляется в платку, на которой Альтера, а сама плата вставляется в панельку обычного ПЗУ. Т.е. сигналы выбора старших банок могут формироваться только из частично адресной шины (a0-a13), шины данных, выбора ПЗУ и сигналов переключения банок внутри 64к.
p.s. а нельзя ли сделать специальную модификацию (версию) Unreal'а для меня? (мне нужно изменений совсем чуть, но сам вряд ли скомпилю...)
посмотрим... чего изменить?
переключение окон выполняется при включенной системной странице
(независимо, включение через out[#1FFD],2 или jp #3Dxx+out[#7FFD],0)
дополнительно проверяется #7FFD bit 0 = 0
переключение срабатывает при чтении по адресам #0104,#0108,#010C
в таблице:
адрес чтения/старое значение окна => новое значение окна | считанный байт
0 1 2 3 0 1 2 3
#0100 - - - - 00 0C ?? ??
#0104 3 3 3 2 0C 00 ?? ??
#0108 2 2 0 1 08 08 ?? ??
#010C 1 0 1 0 04 04 ?? ??
прочерк означает, что переключения не происходит вообще,
вопросы - нет данных (у меня нет ПЗУ больше 128k)
странное поведение RS: если в ПЗУ 1 банк таблица выглядит так
0 1 2 3
#0100 - - - -
#0104 - - - -
#0108 - - 0 1
#010C 1 0 1 0
хотя
1. казалось бы, банки независимы и тумблер выбора старшего адреса не должен влиять на логику переключения.
2. логично для аппаратуры использовать только младший бит от номера страницы, а не городить такие проверки
это можно объяснить только тем, что у RAMSOFT не бывает ПЗУ 256k, только 128 или сразу 512 (как это соотносится с действительностью, были ли прошивки на 256кб?)
вопрос - что такое CMOS и NVRAM в SMUC (неохота всё из RS выдирать, совсем не факт, что там правильно)
и всё-таки, если есть схема SMUC, дайте ссылку. хотя бы буду знать, какие сигналы используются и что выходит на IDE (подключены ли INTRQ и CS1)
у кого есть настоящий SMUC? проверьте, действительно ли после
out (7FFD),1 окна ПРОФ-ПЗУ не переключаются
и кто такой GMX? это только скорпионовский зверь?
Да GMX это действительно только Скорпионовская примочка.
По иронии судьбы у меня есть прошивка большой ПрфПЗУ .
ирония в том что она у меня на скорповом винте а скорп приказал жить долго :confused:
объясните как это работает? имхо нонсенсЦитата:
Сообщение от SMT
не может этого бытьЦитата:
Сообщение от SMT
ну Cmos понятно, тот же Dallas/Ви1, только доступ и порты другие (надо у П.Кисляка спрашивать как RC с ним работает). NVRAM - ячейка энергонезависимой памяти (в ней хранятся признаки виртуальности драйвов)Цитата:
Сообщение от SMT
схему видел давно (у Siril/4D), она вроде как в комплекте поставлялась, но толку от нее нуль, т.к. там Альтера, а прошивка засекреченаЦитата:
Сообщение от SMT
можно подключить винт к пЦ и под эмулятором считать винт
очень просто. страница ПЗУ выбирается сигналами DOS и битом 4 #7FFD.Цитата:
объясните как это работает? имхо нонсенс
DOS включается при переходе на #3Dxx и при включенном бите 4 #7FFD.
но потом, уже внутри DOS можно сделать out(#7FFD),0. триггер DOS не сбросится, включится системная страница. этот трюк работает также на пентагоне и, я думаю, на многих других моделях, где есть системная страница
тем не менее, вскрытие RS показало (тьфу, дизассемблирование то есть ;), что при #7FFD bit 0 = 1 переключение не происходитЦитата:
дополнительно проверяется #7FFD bit 0 = 0
не может этого быть
схема нужна. не думаю, что на альтеру заходят вообще все адресные биты. и детали соединения с IDE тоже нужны
Во есть нашёл ! Прошивка ПрофПЗУ 512 kb
О схема есть у меня ! Завтра заберу у человека отсканирую и зашлю! :)
если SMUC ставится в панельку ПЗУ, то откуда оно берёт сигналы IORQ, M1 и WR, необходимые для организации портов?
Нет, SMUC подключается к системной шине, а вот ПрофПЗУ через панельку с Альтерой действительно ставится вместо стандартного ПЗУ.Цитата:
Сообщение от SMT
если в панельку ПЗУ ничего кроме альтеры с пзу не вставляется, то её не надо. интересно. то есть, получается, smuc состоит из двух частей, что-ли? может, фотография есть, чтобы чипы было видно?Цитата:
Сообщение от Neu Animal
поддержку пзу я сделал, но толку от этого никакого, потому что кроме пзу там ещё много железа (поиск винта только затягивает загрузку секунд на 5, и это в MAX SPEED)
Вот лови что есть :)Цитата:
Сообщение от SMT
На самом то деле их (ALTERA) 2штуки стоит одна на пзу другая на Smuc контроллере
Извиняй за задержку но человек распологает а.....Цитата:
Сообщение от Neu Animal
Короче жду со дня на день должны заслать! :(
2SMT:
Я когда делал поддержку CMOS часов, которые находятся на SMUC'е, искал по SMUC'у любую доку. Нашел описания ПрофПЗУ, NVRAM, GMX, SMUC. Все сложил в один архив, посмотри.
А вот и схема :)
ха! лежит тут уже месяц, а я не вижу....Цитата:
Сообщение от Neu Animal
зашёл-то в эту тему, чтобы сказать:
Цитата:
http://scorpion.ru/spectrum/hard/kontroller_SMUC.htm
большая микросхема - скорее всего, 8259 и она не является обязательной компонентой. пустая панелька - скорее всего под часы. между ней и ISA-разъёмом виднеется 1533ТМ9. NVRAM я не опознал. остаётся ещё 7 неизвестных корпусов мелкой логики и, возможно, элементы на обратной стороне платы (ряд отверстий
под isa-разъёмом и под панелькой cmos rtc подсказывают мне, что они есть). похоже, никаких плм, пзу и прочих труднорасшифровываемых компонент.
Ну вот блин а я старался :)Цитата:
Сообщение от SMT
если не ошибаюсь NVRAM с последовательным доступом (на схеме легко найти), а в параллельный переводит altera
да, smuc ide значит появиться не в следующей, а в послеследующей версии :)Цитата:
Сообщение от Neu Animal
Цитата:
Сообщение от SMT
И прошу всех запомнить эти слова!
;)
у тебя какие-то волшебные настройки в профиле! титульная страница, раздел "железо" не подсвечен знаком "Есть новые сообщения", однако "последнее сообщение" - твоё. кликаю железо - эта тема не выделяется жирным :(Цитата:
Сообщение от Neu Animal
Цитата:
Сообщение от SMT
Без комментариев :D
У меня есть дамп ПЗУ 27020 снятый программатором с моего Скорпиона (Scorpion ZS256 (который был самый первый вариант) турбированый), это ПЗУ не работает в эмуляторе Unreal Spectrum 0.28b, видимо из за того, что в диспетчере страниц поставлявшемся с этим ПЗУ используется другой алгоритм переключения страниц. Это было одно из первых ПРОФ-ПЗУ, когда платы SMUC еще не было, в свободной части ПЗУ располагался RAM-Disk с программами. ПЗУ было куплено в фирме Скорпион 29.07.95. Диспетчер ПЗУ выполнен на простейшей ПЛМ типа PAL22V10 (к сожалению маркировка стерта).
Если этот дамп представляет интерес, пишите, я его пришлю.
Сообщение адресуется в первую очередь автору эмулятора Unreal Spectrum.
интересно для истории. если опубликуешь здесь, может, общими силами раскроем алгоритм переключения страниц
Для распаковки нужен rar 2.90 и выше
В принципе алгоритм работы диспетчера можно определить чисто аппаратным методом:
Подать на линии адреса коды от 0000 до FFFF (16бит), и сигнал чтения, а на выходе диспетчера (колодка в которую втыкается ПРОФ-ПЗУ) фиксировать аномалии в адресах (когда при чтении с определенного входного адреса выходной адрес ему не соответствует). В результате получим небольшую таблицу, т.к. таких аномалий будет немного. Такое устройство можно сделать например на обычном LPT порте компа и простейшей альтере или нескольких регистрах типа 1533ИР35 или аналогичных. Альтера предпочтительней с точки зрения разработки (написал прогу на AHDL и все готово), но у нее минус (планарный корпус, паять не удобно).
Кстати никто не пытался дизасмить/отлаживать код монитора от скорпа? Я так бегло его посмотрел под UnrealSpectrum в дебагере, мне показалось, что он там весь зашифрован и динамически расшифровывается/распаковывается в 8й банк ОЗУ. Интересно бы было расшифровать этот монитор и продизасмить его в Ida.
Кстати, у меня почемуто в UnrealSpectrum 0.28b стал виснуть 128TR-DOS в эмуляции скорпа., в предыдущих версиях все было ok.
Еще в .ini файле Unreal нашел недокументированое значение для расширеной памяти PROFSCORP (через Gui выбрать было можно, а в коменте не было) пришлось искать в exe'шнике
Я пытался (но далеко это не зашло). вся лубуда, которая выскакивает на скорпионовском magic пользует 8-й банк для хранения данных и обращениям к TRDOS (там кстати где-то хранится 256 байт идентефикатора, если их попортить, magic даст глюк), но само по большей части работает из ПЗУ (кажись, out #1ffd,#02 включает сервис-ПЗУ).Цитата:
Сообщение от deathsoft
TRDOS в скорпах чуток не такой как в 128-м спеке (потому как тот же magic делает call102 в dos, а какой magic в скорпах мы знаем). Когда-то я там нашел и in a,(#ff):ret и in a,(c):ret, но потом оказалось что в других TRDOS-ах такого нет и все что я писал успешно вислоЦитата:
Сообщение от deathsoft
логика переключения страниц осталась прежней. причина в том, что проверяются какие-то аппаратные характеристики компьютера с использованием неизвестной команды #ED70 и прерываний. чтобы запустить ПЗУ, поставьте брейк на #0272 и запишите в DE #FC9D. какую именно характеристику проверяют, я не понял. если патчить, то необходимо отключить и проверку чексуммы ПЗУ.
кроме того, адрес порта состояния HDD - #F7BE вместо #FFBE, хотя на схеме smuc A11=1 - условие выборки контроллера. может, существовали другие схемы smuc?
D1 порта 1FFD раньше открывал порты tr-dos. на той невнятной схеме, что у меня есть в текстовом режиме (там потеряна часть сигналов), похоже, не открываются порты DOS, и я переделал эмуляцию. если есть другая схема скорпиона, или соображения по поводу блокировки портов DOS, выкладывайте
есть подозрение, что это связано с четнием порта #FF (не существующего)Цитата:
Сообщение от SMT
Вполне себе известная команда. В книжке "мпк Z80", неоднократно мною тут рекламируемой, эта команда называется INF (работает как любая IN reg,(C), но влияет только на флаги).Цитата:
Сообщение от SMT
А по поводу неизвестных команд в унреале - их есть. Вместо add a,reg пишутся неизвестые науке add reg, то же и с sbc a,reg. Мож надо исправить? =)
не удастся запустить ПЗУ без патча - ну и пусть. а что насчёт схемы скорпиона, отличной от той, что на VT?
мне унифицированный вариант больше нравитсяЦитата:
Сообщение от lvd