DC-SWAT Forum

Полная версия: BIOS Disassembling
Вы просматриваете yпpощеннyю веpсию форума. Пеpейти к полной веpсии.
Страниц: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Я тоже хотел бы подключить винт, но нифига не разбираюсь в драйверах, программы писать не умею Sad . Паять могу, телевизор там починить или другую технику. Но в подключении винта врятли помогу.

LEUMAS
"Не в обибу но я заманался ноющим лантухам что либо на эту тему обьяснять, хай сами мозгуют.
Поставить ведь элементарно, сравниваем по даташитам распиновку чипов и паяем"

Могли бы и посказать ноющему лонтуху Smile какую именно можно микруху припаять, по даташитам долго искать придется мне . Вам то хорошо, вы себе наверно биосмод уже замутили
уже нашёл DCDBSysArc990907E осваиваю.

но в софт поддержке всё еще нуждаюсь))

неужто такая проблема читать/писать на шину?
Нет никаких проблем.
тогда подключение HDD и сдрома - вопрос времени и желания.

если я буду осваивать , это может затянуться... так как я в дриме неделю)))
Ну ничего страшного, здесь люди терпеливые, ты главное сделай.
work in progress
такой вопрос, новый биос может быть любого размера? механизм чек-сумм действует на опредделённый объём или можно сделать его маленьким?

так же как вариант, возможнали официальная загрузка обновлений биоса или оболочка, по типу FREE-MC-BOOT для пс2. не хочется биос мод делать, хотелось бы кинуть пару -тройку адресных линий и залить прогу через это окно...
Родной биос софтварно не прошивается, так что только биос мод.
Чек сумму биоса проверяет сам гдром, если она не совпала он блокируется и все накрывается медным тазом.
Если ты будешь заменять гдром аппаратно, то тебе это в принципе пофиг, биос можно делать любой.
"Чек сумму биоса проверяет сам гдром"

как это он её проверяет, он же SLAVE устройство, чёто непонятно...
во вторых у него нет достаточно ног. гдром же сидит как ата устройство (D0-D15) (A0-A2 + CS1, CS3) . эт я условно написал. или там ещё какоёто доступ. какойнить последователльный. тогда как он чип мод пропускает , обьсяни?

как тогда ты делаеш биос-мод, точнее при компиляции биоса есть коректировка по чексумме или запись её в какуюто ячейку..

чек сумму обычно делает встроеный код в проц. если таковое вообще предусмотрено... и то он делает для того чтобы понять кореектная микруха/программа сидит на шине... иначе выходит в некое исключение.. так по край мере на моей памяти с другими процами..

ещё чек суму может проверить код в самом биосе , при старт-апе.
естестно при перекомпиляции биоса этого куска кода нет и ничего и не проверяется)))
эта проверка в основном нужна чтобы не дать комунить подменить отдельные ячейки.
Чек сумму биоса проверяет CPU, но там не совсем проверка чек суммы идет(алгоритм проверки неизвестен), иначе даже при изменении 1 байта в биосе он бы проверку не проходил, а есть версии измененного биоса (в том числе с отключенной проверкой на регион) которые проходят проверку на подлинность.
Если биос не прошел проверку на подлинность, то блокируется GD-ROM дрима, а возможно и вся шина G1.
ну я ж и говорю что обычно страт-ап проца проверяет чек сум...

но, вопрос по биос моду, тогда как? там это предусмотрено при компиляции?

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

на счёт блокирования чего либо там, это не факт, достаточно просто не выходить на исполнение инсрукций...

и как вариант мот всё таки есть окно, как в пс1 взломщик кодов загружался или как в пс2 фри-мак-бут, у дрима есть чтонить подобное?
Цитата:как вариант мот всё таки есть окно, как в пс1 взломщик кодов загружался или как в пс2 фри-мак-бут, у дрима есть чтонить подобное?

В дриме нет ничего подобного, только с GD-rom дрим грузит.
Я не правильно выразился.

PHP код:
register unsigned long px;
*((
volatile unsigned long *)0xa05f74e4) = 0x1fffff;

for(
p=0p<0x200000/4p++)
     
= ((volatile unsigned long *)0xa0000000)[p]; 

Вот так происходит проверка биоса. Это не алгоритм проверки, а то как она запускается.
Т.е. есть некий секретный регистр: 0xa05f74e4, отправив которому размер биоса, необходимо прогнать его весь по рабочему регистру.
И регистр этот находится в интерфейсе для гдрома, если судить по адресам:

PHP код:
/* IDE interface registers */
    
uint8_t status;  /* A05F709C + A05F7018 Read-only */
    
uint8_t control/* A05F7018 Write-only 01110 */
    
uint8_t error;   /* A05F7084 Read-only  10001 */
    
uint8_t feature/* A05F7084 Write-only 10001 */
    
uint8_t count;   /* A05F7088 Read/Write 10010 */
    
uint8_t disc;    /* A05F708C Read-only 10011 */
    
uint8_t lba0;    /* A05F708C Write-only 10011 (NB: Presumed, TBV */
    
uint8_t lba1;    /* A05F7090 Read/Write 10100 */
    
uint8_t lba2;    /* A05F7094 Read/Write 10101 */
    
uint8_t device;  /* A05F7098 Read/Write 10110 */
    
uint8_t command/* A05F709C Write-only 10111 */ 

По поводу переключения биоса, мне кажется это реально сделать, нужно просто сделать какой нить регистр новый (т.е. повесить его на шину какую нибудь), с помощью которого можно будет переключать биос. Схема я думаю должна быть простой. Далее повесить break handler на запись по адресу 0xa05f74e4 регистра и переключать в тот момент, когда в него отправляют размер. Потом правда нужно как то обратно это сделать, иначе зависнет Smile
из доков на дрим (E_DC_HW_outline.pdf)
если судить по адресам к гдрому никаого отношения...

$005F7400 - $005F74FF область G1 Control Reg

0xa05f74e4 - регистр управления шиной г1. связанный вероятно именно с биосом, точнее с областью памяти 0x1f0000
он задаёт окно, широной в размер биоса, чтобы при копировании его в 0xa0000000 , он мог нормально прочитаться по 8 бит.

0xa0000000 - известно что за адрес, это память? когда в неё передаётся управление?

ещё, по какому адресу пристарте проца передаётся управлние какой первй адрес. у пс1 и пс2 процов мипс первй адрес

0xBFC0000 , но реально верно будет и по 0x1FC0000 0xАFC0000 , т.к последние разряды выбирают режим кэша,

- приведённый код должен храниться в коде нового биоса? в самом начале вызывается?
- биос компилиться под 0x1f0000 или 0xa0000000 ?
- бинарник биоса есть гденить?? можно скачать?
и неплохобы дисассемблер или прогу с визуальным интерфейсом..
Ну он же на этой шине сидит... Ты управляешь им с помощью этих контрол регистров. Там больше нечем управлять, сами по себе они бесполезны. Может проц отключает эти контрол регистры, а не привод.
Просто если совсем рубануть эту шину, то биос и флеш работать не будут, они тоже на G1 сидят.

0xa0000000 - это чип биоса с маппингом в адресное пространство CPU. С этого адреса дрим начинает свою работу.
Скачать bios
контрол регистры задают режим работы при обращении на шину. так как реги проца 32бита. а шина 8 или 16. сосответсвенно можно по разному интреспритировать обращене и генерирование адреса, так же время стробов чтения и записи.
физически эти ренги сидят в холли.

так же возможно это рег задаём маску адресов.

*((volatile unsigned long *)0xa05f74e4) = 0x1fffff;

а вот для чего вычиывать его не знаю.


повторю:
- приведённый код должен храниться в коде нового биоса? в самом начале вызывается?
- биос компилиться под 0x1f0000 или 0xa0000000 ?
- в чём разница обращения по адрксам 0x1f0000 или 0xa0000000 ?
Этот код может быть где угодно. Биос компилится под нулевой адрес.
0x1f0000 - это не адрес вообще!
0x1fffff - Это размер биоса, 2 мб. В регистр 0xa05f74e4 передается размер!
а, да точно. биос с нуля же.

вот задизасемблил, есть в этом коде смысл, или чёт нето. и что примерно на атрте происходит?

H'8c010000: H'e3ff .. mov H'ffffffff, R3
H'8c010002: H'4328 (C shll16 R3
H'8c010004: H'6439 9d swap.w R3, R4
H'8c010006: H'4318 .C shll8 R3
H'8c010008: H'4409 .D shlr2 R4
H'8c01000a: H'4409 .D shlr2 R4
H'8c01000c: H'5039 9P mov.l @(9, R3), R0
H'8c01000e: H'240a .$ xor R0, R4
H'8c010010: H'204e N mulu.w R4, R0
H'8c010012: H'001a .. sts MACL, R0
H'8c010014: H'2008 . tst R0, R0
H'8c010016: H'8b77 w. bf H'8c010108
H'8c010018: H'1304 .. mov.l R0, @(4, R3)
H'8c01001a: H'e109 .. mov H'09, R1
H'8c01001c: H'4118 .A shll8 R1
H'8c01001e: H'7129 )q add H'29, R1
H'8c010020: H'1317 .. mov.l R1, @(7, R3)
H'8c010022: H'4321 !C shar R3
H'8c010024: H'e001 .. mov H'01, R0
H'8c010026: H'8132 2. mov.w R0, @(2, R3)
H'8c010028: H'e0c3 .. mov H'ffffffc3, R0
H'8c01002a: H'4028 (@ shll16 R0
H'8c01002c: H'cbcd .. or H'cd, R0
H'8c01002e: H'4018 .@ shll8 R0
H'8c010030: H'cbb0 .. or H'b0, R0
H'8c010032: H'4001 .@ shlr R0
H'8c010034: H'1303 .. mov.l R0, @(3, R3)
H'8c010036: H'e501 .. mov H'01, R5
H'8c010038: H'4505 .E rotr R5
H'8c01003a: H'7560 `u add H'60, R5
H'8c01003c: H'6653 Sf mov R5, R6
H'8c01003e: H'7620 v add H'20, R6
H'8c010040: H'c800 .. tst H'00, R0
H'8c010042: H'0583 .. pref @R5
H'8c010044: H'462b +F jmp @R6
H'8c010046: H'0009 .. nop
(SWAT) ".. есть некий секретный регистр: 0xa05f74e4, отправив которому размер биоса, необходимо прогнать его весь по рабочему регистру." -

я всётки так и не понял?
ну допусти этот так, но новый биос (к примеру в том что в биос-моде используется) уже имеет не ту чек сумму. есть ли проверка на некую чексумму при компиляции или это предусмотрено той прогой которая собирает образ биоса.

и при сборке нового меняется только область кода в которй сидит ОС?

к примеру в пс1, старт идёт с нуля биоса (0хBFC0-0000), инициализируется железо, различние подсистемы обработки прерываний, а в конце ос переписывается в память и стратует уже с адресов памяти. (0х80030000)

?
Страниц: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
URL ссылки