суббота, 3 апреля 2010 г.

Нептун, иром, usb

Залез в потроха L2, пишу себе рамлоадер. Тело в бланке, иром 0200 и у него есть замечательнейшая бага

:


In [100]: dev.jump(0x3fd0000)
Out[100]: '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'


Вместо любых данных иром шлет нули. Мой рамлоадер тоже, а вот ramldr - нет.



Отправка данных делается простейшим образом, пробажить негде: запихнуть в хардварный буфер данные и дернуть полтора бита в регистрах. Тем не менее, тупейший баг там зарылся и растет из костылей: для совместимости со старыми нептунами, usb имеет две карты памяти с разыными адресами буферов ввода-вывода. Нужная карта памяти выбирается через нулевой бит регистра 0x24852014 и по дефолту там как раз старая. А иром пишет по адресу из новой.



Зачатки бута на гитхабе тыц

3 комментария:

  1. гпрс на ген2 давай сначало......
    да и новость тянет только на мотороловскую наркоманию без вскяких линухов...

    ОтветитьУдалить
  2. Съешь ещё этого мягкого говна да выпей чаю.

    ОтветитьУдалить