|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
Поставил себе очень мутную задачку - перекинуть Ивановского дума (вроде исходники есть, не ясно насколько рабочие) из режима трдос в нормальный режим, чтобы запускать можно было из под доса. Натскнулся, конечно же, на костыль в виде загрузки пользовательской конфы. Сижу штудирую инфу и нашёл несколько странных и не понятных моментов. Иван писал, что для запуска его дума была отдельная конфа, которая в операциях Акселя имела масштабирование (как говорил Иван - растягивание пикселя). Не понятно - это было дополнение к уже существующим операциям Акселя или это была их замена (полная или частичная)?
Второй момент - загрузка конфы пользователя. Дословно в доке сказано:
Что я сделал. Я взял какой-то экспериментальный образ Ивана где уже сидел код дума, но не было других данных. Т.е. там только boot и загрузчик flc.c. Так вот, через winhex вижу по смещению 5200h начало куска прошивки. Согласно доки, по смещению 100h метка, но до неё 128 байт FF, как и после неё. потом идёт некий кодовый блок. Если считать от 5200h и до конца файла, получается всего 16кб (т.е. включая метку и все начальные FF).
Далее: исходя из того, что оригинальный файл прошивки альтеры весит 59кб, то файл пользовательской прошивки весит всего 16кб и это, в том числе, исходит из выше процитированной доки - последняя страница кэша. т.е. всего 16.кб. Вопрос: почему оригинальная прошивка альтеры занимает 59кб, а пользовательская только 16кб? А куда тогда при перепрошивке альтеры деваются работы (схема) с клавой, мышкой, турбой, звуком. винтом и другими частями тела машины? или эти 16кб только частично перекраивают Альтеру (например, затрагивают некий функционал по графике и звуку, остальное не трогается, т.к. лежит за пределами этих 16кб)?
может кто разбирался или с Иваном общался на эту тему или доки какие то пояснительные есть? извините за многобукоф....
|
24 Dec 2014 03:07 |
|
|
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
Doom doomом, а вот конфиг для Альтеры было бы хорошо узнать как применять. Кто-нибудь разбирался с этой темой? как, блин, не из режима спектрума применять эти конфиги альтеры? заколупался я что-то с этой темой. так бы можно было бы Тюндера бомбануть, так ведь в эмуляторе он не пашет. зависает на обработке одного из портов, которых нет в эмуле. В биосе есть функция 0xF3, которая якобы для приминения конфига. Пробую согласно мануала - загружаю конфиг от дума в страницу ниже 127 (включая 0), делаю вызов, делаю как в исходнике дума изменения в dcp для порта масштабирования. фига - артефакты прут при попытке применить масштабы.т ощущение, что прошивка не загрузилась (не применилась).
|
24 Mar 2016 04:36 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
Согласно доке метка по смещению 0x80. До нее 128 штук 0xff. Помоему ты запутался в хексах и деках. И кладешь прошивку не с того адреса. Походу бинарь который ты выдрал, нада класть с адреса0x0000, а ты его кладеш с адреса 0x0080. Плюс нада номер конфы ещё, но там наверно он уже есть. Т.е. С 0x0000 идет128 штук фф, потом метка(с 0x0080), потом до 0x00ff хз чего, нули наверно или фф, потом с 0x0100 уже бинарь конфы 16к вполне достаточно чтоп забить флекс10к под завязку. 59кб это небось какой нить sof в котором не бинарь, а нечто типа интел-хекса.
|
29 Mar 2016 13:23 |
|
|
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
как это сделано в думе: | | | | Code: IN A,(PAGE3) LD C,0F3h CALL 3D13H ... IN A,(PAGE3) EX AF,AF' LD A,40H OUT (PAGE3),A LD A,0C7H
LD (0C400H),A ; открыть порт масштабирования LD (0C410H),A ; открыть порт масштабирования LD (0C480H),A ; открыть порт масштабирования LD (0C490H),A ; открыть порт масштабирования LD (0C500H),A ; открыть порт масштабирования LD (0C510H),A ; открыть порт масштабирования LD (0C580H),A ; открыть порт масштабирования LD (0C590H),A ; открыть порт масштабирования
EX AF,AF' OUT (PAGE3),A EXX LD BC,100H ; масштаб 1:1 LD D,0 OUT (C),D EXX
| | | | |
таким образом на момент образщения к биосу к функции 0xF3 в 0й странице (я проверил отладчиком demon) уже лежит прошивка. Как делаю я: | | | | Code: di ld a,0 ;страница куда погрузим прошивку out (cpu_w3),a push af ld hl,flex_cfg_file ld (rd_err.err_file+1),hl call open ld (flex_hndl),a ld hl,0xc000 ;куда ld de,16384 ;сколько = размер файла прошивки push af call read pop af call close
;Прошивка загружена. Пробуем её применить. pop af ld c,0f3h ;код операции "применить пользовательскую прошивку" rst 8 jp c,cfg_err ... ld a,40h out (cpu_w3),a ld a,0c7h ld (0c400h),a ; открыть порт масштабирования ld (0c410h),a ; открыть порт масштабирования ld (0c480h),a ; открыть порт масштабирования ld (0c490h),a ; открыть порт масштабирования ld (0c500h),a ; открыть порт масштабирования ld (0c510h),a ; открыть порт масштабирования ld (0c580h),a ; открыть порт масштабирования ld (0c590h),a ; открыть порт масштабирования ld bc,100h ; масштаб 1:1 ld d,0 out (c),d
| | | | |
но делаю это всё уже из под доса (т.е. в режиме спринтера). После этого в процессе кидания линий на экран выставляю наугад масштаб, к примеру: кидаю линию на экран, а получаю либо пустоту либо артефакты. При этом читать в аксель нужно с масштабом 1:1 (например читаем 128 байт), а кидать из акселя на экран уже в растянутом виде 1:2, т.е. 256 байт должно быть. Получаю артефакты в виде мусора или пустоту. Сделал эксперимент - вырубил загрузку прошивки, но оставил приминение в странице dcp для порта масштабирования. Результат тот же. Таким образом я понимаю, что прошивка нифига не применяется. Сделал другой эксперимент. Поскольку после загрузки любых данных в верхние страницы после ресета не затираются, я делал так - запустил режим спектрума, загрузил дум, сделал ресет, запустил ранее написанную програмулинку и выгрузил 0ю страницу целиком на диск. Потом пробовал эту прошивку грузить. Результат тот же. Соответственнл, прошивку кидаю на смещение 0, а не 0x80.
|
29 Mar 2016 22:50 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
Сразу предупреждаю, спринтер ни разы в глаза не видел. Вопрос: "out (cpu_w3),a" имеет какое нибудь отношение к КЕШ-памяти? или только к основному озу?
|
30 Mar 2016 01:34 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
ага, понял, биос сам в кеш перекидывает. тогда ещё вопросик. судя по доке при ресете конфа слетает, грузится заново из пзу или кеша. По этому дум, при загрузке своей конфы, просто обязан убрать прошивку из кеша, чтоп юзер мог ресетнутся в ДОС Как вариант и ради проверки, не надо щелкать пагами, а грузить в текущее адресное пространство. далее прочитать из порта текущую пагу и передать её в f3, также как делает doom. может в режиме спринтера залочена возможность напрямую щёлкать пагами, тока через биос
|
30 Mar 2016 01:51 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
хм, это получается разные чипы сиавили, FLEX10 или ACEX30K. т.е. есть вероятность что ты пихаешь конфу не от того чипа?! для ACEX30K конфа(если под завязку) явно больше 16килобайт
|
30 Mar 2016 02:14 |
|
|
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
Объяснительная т.е. это порты через которые подключаются страницы в разные окна проца. при ресете да, пользовательская конфа должна быть затёрта. Где, это вопрос. В озу она прекрасно сохраняется. Это показал эксперимент с демкой дума - после ресета в 0й странице сидит конфиг. Я выследил это путём запуска отладчика и вручную начал щёлкать страницами просматривая дамп. Щёлкнув 0 в последнее окно увидел знакомые надписи в виде FLEX_10K_LOADING. Значит, это и есть страница с пользовательской конфой для дума. Чисот физически, нет в исходнике (и в дизасме) дума кода, который бы помещал прошивку в кэш до выхова 0xf3. Более того, я просто включил режим спектрума. В трдосе накидал каманды: /hdd /load e doom.trd /rmd e load "boot" return в бейсике проверил что там грузится. А грузится там файло с винта (текстуры, спрайты и прочее), генерируется таблица масштабов и переход на 32768. А это есть org самого дума. а там почти сразу in a,(cpu_w3) : ld c,0xf3 : call 0x3d13. В данном случае, биос Спринтера из режима спектрума вызывается через 3d13. По сути это обычный rst 8 в досе (режим Спринтера). это врятли, т.к. в самом конфиге в качестве флага (типа, своеобразный magic) применяется фраза FLEX_10K_LOADING. Именно она и есть в думе. Для Спринтера 97 применялась другая фраза, как я помню это было ACEX чего-то там. Да и конфиги для 97го и 2000 как я знаю различаются. Я же выдернул конфиг именно для 2000 (дважды - через winhex и потом уже на реале через самописную программку, но после предварительного запуска дума и потом ресета, прям со страницы конфига). Есть подозрение, что протокол приминения конфига для режима спектрума и спринтера между собой различаются. Касательно кэша (а точнее fast ram) - общенародно в доступе есть только 16кб по методу пятногона, т.е. включить in a,(0xfb) и для выключить in a,(0x7b). Вставляются эти 16кб фаст рам в 0е окно, т.е. в адреса 0x0000 - 0x3fff. Как включить остальные страницы фаст рамы (а их там 256кб как бы) я не знаю. Это не документированно, хотя Иван говорил о том, что это можно сделать поменяв нужные байты в странице dcp (дешифратор). что за байты и по каким адресам надо пихать, я так же не знаю.
|
30 Mar 2016 02:30 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
хм. А ты пробывал после этого ресета сделать F3 с нулем в А? Еще: почему только одну страницу сохранил? Ведь судя по доке прошивка может занимать несколько страниц идущих подряд, в твоем случае 0,1,2,3....n
|
30 Mar 2016 02:52 |
|
|
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
если честно. не уверен. а в какой доке говорится про подряд идущие страницы?
|
30 Mar 2016 02:56 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
архив sprinter.zip там гдето архов bios.zip в нём файл TBIOS.HTM
|
30 Mar 2016 02:57 |
|
|
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
перепроверил размер прошивки взяв один из образцов демки дума (там есть 3 разных образа: sp_rulez.trd - там неуправляемая демка, doom.trd - управляемая демка - оба варианта без текстуры пола и неба, стены сделаны текстурами левыми, не думовскими. 3й образ - doomx.trd - самая полная демка - с думовскими текстурами, со спрайтами монстров, бочек, с текстурой неба. Проверил на образе doom.trd. Образ размером в 37кб. Закинул его в winhex, догнал до начала FLEX_10K_LOADING. адрес начала 0x5200 (это включая начало в 0x80 байт всякими ФФами). выдернул весь блок до конца образа. это получилось ровно 16384 байта. Таким образом конфиг дума занимает не больше 1 страницы.
|
30 Mar 2016 03:02 |
|
|
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
Хм. запутался однако. На Спринтере стоит альтера 1К30. Значит, для Спринтера 2000 актуален магик ACEX_30K_LOADING вместо FLEX_10K_LOADING. очень интересно. надо бы эксперимент провести - убрать из дума прошивку и попробовать запустить...чё будет интересно))) ... проверил - артефакты с зависанием))))
|
30 Mar 2016 03:10 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
16килобайт маловато для асекс30к если тока она там обрезанная вся
|
30 Mar 2016 03:37 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
я бы всё таки попробывал F3 после ресета дума если поможет, то сохранять штук 8 страниц и их потом заливать в качестве прошивки
|
30 Mar 2016 04:02 |
|
|
Who is online |
Users browsing this forum: No registered users and 3 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|