nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 08:12



Reply to topic  [ 22 posts ]  Go to page 1, 2  Next
Ивановский doom в dss 
Author Message
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
Reply with quote
Поставил себе очень мутную задачку - перекинуть Ивановского дума (вроде исходники есть, не ясно насколько рабочие) из режима трдос в нормальный режим, чтобы запускать можно было из под доса. Натскнулся, конечно же, на костыль в виде загрузки пользовательской конфы. Сижу штудирую инфу и нашёл несколько странных и не понятных моментов. Иван писал, что для запуска его дума была отдельная конфа, которая в операциях Акселя имела масштабирование (как говорил Иван - растягивание пикселя). Не понятно - это было дополнение к уже существующим операциям Акселя или это была их замена (полная или частичная)?
Второй момент - загрузка конфы пользователя. Дословно в доке сказано:

Quote:
Для изменения схемы надо загрузить в последнюю страницу КЭШ-памяти
блок данных конфигурации со смещения #100 и выставить флаг, которым является
текстовая строка "FLEX_10K_LOADING", записанная по смещению #80 в этой же
странице КЭШ-а. По смещению #90 надо записать двухбайтовый
идентификационный номер прошивки. После этого надо произвести полный сброс,
который осуществляется программно записью в специальную страницу памяти
RESET_PAGE. Программа в ПЗУ, запускаемая по сбросу находит флаг
FLEX_10K_LOADING и начинает загрузку данных в ППЛМ... и т.д.

Что я сделал. Я взял какой-то экспериментальный образ Ивана где уже сидел код дума, но не было других данных. Т.е. там только boot и загрузчик flc.c. Так вот, через winhex вижу по смещению 5200h начало куска прошивки. Согласно доки, по смещению 100h метка, но до неё 128 байт FF, как и после неё. потом идёт некий кодовый блок. Если считать от 5200h и до конца файла, получается всего 16кб (т.е. включая метку и все начальные FF).
Далее: исходя из того, что оригинальный файл прошивки альтеры весит 59кб, то файл пользовательской прошивки весит всего 16кб и это, в том числе, исходит из выше процитированной доки - последняя страница кэша. т.е. всего 16.кб. Вопрос: почему оригинальная прошивка альтеры занимает 59кб, а пользовательская только 16кб? А куда тогда при перепрошивке альтеры деваются работы (схема) с клавой, мышкой, турбой, звуком. винтом и другими частями тела машины? или эти 16кб только частично перекраивают Альтеру (например, затрагивают некий функционал по графике и звуку, остальное не трогается, т.к. лежит за пределами этих 16кб)?
может кто разбирался или с Иваном общался на эту тему или доки какие то пояснительные есть? извините за многобукоф....


24 Dec 2014 03:07
Profile
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
Reply with quote
Doom doomом, а вот конфиг для Альтеры было бы хорошо узнать как применять. Кто-нибудь разбирался с этой темой? как, блин, не из режима спектрума применять эти конфиги альтеры? заколупался я что-то с этой темой. так бы можно было бы Тюндера бомбануть, так ведь в эмуляторе он не пашет. зависает на обработке одного из портов, которых нет в эмуле.
В биосе есть функция 0xF3, которая якобы для приминения конфига. Пробую согласно мануала - загружаю конфиг от дума в страницу ниже 127 (включая 0), делаю вызов, делаю как в исходнике дума изменения в dcp для порта масштабирования. фига - артефакты прут при попытке применить масштабы.т ощущение, что прошивка не загрузилась (не применилась).


24 Mar 2016 04:36
Profile
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
Sayman wrote:
. Согласно доки, по смещению 100h метка, но до неё 128 байт FF, .

Согласно доке метка по смещению 0x80. До нее 128 штук 0xff.
Помоему ты запутался в хексах и деках. И кладешь прошивку не с того адреса.

Походу бинарь который ты выдрал, нада класть с адреса0x0000, а ты его кладеш с адреса 0x0080.
Плюс нада номер конфы ещё, но там наверно он уже есть.

Т.е. С 0x0000 идет128 штук фф, потом метка(с 0x0080), потом до 0x00ff хз чего, нули наверно или фф, потом с 0x0100 уже бинарь конфы

Quote:
оригинальный файл прошивки альтеры весит 59кб, то файл пользовательской прошивки весит всего 16кб
16к вполне достаточно чтоп забить флекс10к под завязку. 59кб это небось какой нить sof в котором не бинарь, а нечто типа интел-хекса.


29 Mar 2016 13:23
Profile ICQ
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
Reply with quote
Quote:
Походу бинарь который ты выдрал, нада класть с адреса0x0000, а ты его кладеш с адреса 0x0080.

как это сделано в думе:
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

но делаю это всё уже из под доса (т.е. в режиме спринтера). После этого в процессе кидания линий на экран выставляю наугад масштаб, к примеру:
Code:
                ld bc,0x100
                ld d,2
                out (c),d

кидаю линию на экран, а получаю либо пустоту либо артефакты. При этом читать в аксель нужно с масштабом 1:1 (например читаем 128 байт), а кидать из акселя на экран уже в растянутом виде 1:2, т.е. 256 байт должно быть. Получаю артефакты в виде мусора или пустоту. Сделал эксперимент - вырубил загрузку прошивки, но оставил приминение в странице dcp для порта масштабирования. Результат тот же. Таким образом я понимаю, что прошивка нифига не применяется.
Сделал другой эксперимент. Поскольку после загрузки любых данных в верхние страницы после ресета не затираются, я делал так - запустил режим спектрума, загрузил дум, сделал ресет, запустил ранее написанную програмулинку и выгрузил 0ю страницу целиком на диск. Потом пробовал эту прошивку грузить. Результат тот же.
Соответственнл, прошивку кидаю на смещение 0, а не 0x80.


29 Mar 2016 22:50
Profile
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
Code:
      ld a,0         ;страница куда погрузим прошивку
      out (cpu_w3),a

Сразу предупреждаю, спринтер ни разы в глаза не видел.

Вопрос: "out (cpu_w3),a" имеет какое нибудь отношение к КЕШ-памяти? или только к основному озу?


30 Mar 2016 01:34
Profile ICQ
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
ага, понял, биос сам в кеш перекидывает.

тогда ещё вопросик.
Quote:
загрузил дум, сделал ресет
судя по доке при ресете конфа слетает, грузится заново из пзу или кеша.
По этому дум, при загрузке своей конфы, просто обязан убрать прошивку из кеша, чтоп юзер мог ресетнутся в ДОС


Как вариант и ради проверки, не надо щелкать пагами, а грузить в текущее адресное пространство.
далее прочитать из порта текущую пагу и передать её в f3, также как делает doom.
может в режиме спринтера залочена возможность напрямую щёлкать пагами, тока через биос


30 Mar 2016 01:51
Profile ICQ
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
Code:
Файл прошивки для ПЛМ FLEX10 (ACEX30K) помещается в страницу (страницы) ОЗУ, откуда и перегружается функцией BIOS в ПЛМ.
хм, это получается разные чипы сиавили, FLEX10 или ACEX30K. т.е. есть вероятность что ты пихаешь конфу не от того чипа?!
для ACEX30K конфа(если под завязку) явно больше 16килобайт


30 Mar 2016 02:14
Profile ICQ
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
Reply with quote
Quote:
Вопрос: "out (cpu_w3),a" имеет какое нибудь отношение к КЕШ-памяти? или только к основному озу?

Объяснительная :mrgreen:
Code:
cpu_w0      equ 82h      ;cpu window 0 = addr 0000h
cpu_w1      equ 0a2h   ;... 1 = 4000h
cpu_w2      equ 0c2h   ;... 2 = 8000h
cpu_w3      equ 0e2h   ;... 3 = 0c000h

т.е. это порты через которые подключаются страницы в разные окна проца.

Quote:
судя по доке при ресете конфа слетает, грузится заново из пзу или кеша.

при ресете да, пользовательская конфа должна быть затёрта. Где, это вопрос. В озу она прекрасно сохраняется. Это показал эксперимент с демкой дума - после ресета в 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 в досе (режим Спринтера).
Quote:
т.е. есть вероятность что ты пихаешь конфу не от того чипа?!

это врятли, т.к. в самом конфиге в качестве флага (типа, своеобразный 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
Profile
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
Quote:
В озу она прекрасно сохраняется. Это показал эксперимент с демкой дума - после ресета в 0й странице сидит конфиг.
хм. А ты пробывал после этого ресета сделать F3 с нулем в А?
Еще:
Quote:
загрузил дум, сделал ресет, запустил ранее написанную програмулинку и выгрузил 0ю страницу целиком на диск.
почему только одну страницу сохранил? Ведь судя по доке прошивка может занимать несколько страниц идущих подряд, в твоем случае 0,1,2,3....n


30 Mar 2016 02:52
Profile ICQ
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
Reply with quote
Quote:
Ведь судя по доке прошивка может занимать несколько страниц идущих подряд, в твоем случае 0,1,2,3....n

если честно. не уверен. а в какой доке говорится про подряд идущие страницы?


30 Mar 2016 02:56
Profile
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
Quote:
Файл прошивки для ПЛМ FLEX10 (ACEX30K) помещается в страницу (страницы) ОЗУ, откуда и перегружается функцией BIOS в ПЛМ
архив sprinter.zip там гдето архов bios.zip в нём файл TBIOS.HTM


30 Mar 2016 02:57
Profile ICQ
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
Reply with quote
перепроверил размер прошивки взяв один из образцов демки дума (там есть 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
Profile
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
Reply with quote
Хм. запутался однако. На Спринтере стоит альтера 1К30. Значит, для Спринтера 2000 актуален магик ACEX_30K_LOADING вместо FLEX_10K_LOADING.
Quote:
при попытке загрузки старой прошивки для FLEX10K, BIOS самостоятельно выбирает прошивку для ACEX30K, в соответствии с необходимой конфигурацией.

очень интересно. надо бы эксперимент провести - убрать из дума прошивку и попробовать запустить...чё будет интересно)))
...
проверил - артефакты с зависанием))))


30 Mar 2016 03:10
Profile
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
16килобайт маловато для асекс30к
если тока она там обрезанная вся


30 Mar 2016 03:37
Profile ICQ
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
я бы всё таки попробывал F3 после ресета дума
если поможет, то сохранять штук 8 страниц и их потом заливать в качестве прошивки


30 Mar 2016 04:02
Profile ICQ
Display posts from previous:  Sort by  
Reply to topic   [ 22 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: No registered users and 7 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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.