есть у кого-нибудь схема включения проф-ПЗУ?
а то непонятно, как страницы переключаются
есть у кого-нибудь схема включения проф-ПЗУ?
а то непонятно, как страницы переключаются
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Я так понимаю от этого напрямую зависит будет твой эмуль работать с винтом 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 это действительно только Скорпионовская примочка.
По иронии судьбы у меня есть прошивка большой ПрфПЗУ .
ирония в том что она у меня на скорповом винте а скорп приказал жить долго![]()
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)