LINUX.ORG.RU

MSP430. Вопрос к тем кто работал с PDP-11. Программирование машинными кодами. Поделитесь опытом.

 , ,


0

2

В руки попал микроконтроллер MSP430 с платой LaunchPad. Искал какие есть инструменты для программирования и прошивки. В составе MSPFlasher попался файл Firmware.txt следующего содержания:

@e000
21 83 B2 40 80 5A 20 01 F2 D3 22 00 F2 E3 21 00 
B1 40 10 27 00 00 91 83 00 00 81 93 00 00 FB 23 
F5 3F 31 40 00 04 B2 40 48 E0 00 02 B2 40 48 E0 
02 02 B0 12 40 E0 0C 43 B0 12 00 E0 B0 12 44 E0 
1C 43 30 41 03 43 FF 3F 30 41 
@fffe
22 E0 
q

С помощью другой программы mspdebug у меня получилось зашить этот Firmware.txt:

$ ./mspdebug rf2500
(mspdebug) erase
Erasing...
(mspdebug) load ../MSPFlasher_1.3.20/Firmware.txt 
Done, 76 bytes total
(mspdebug) exit

После этого светодиодики бодро заморгали на плате.

Мне захотелось тоже попробовать хоть что-нибудь написать таким образом, просто чтобы был такой опыт. Если верить википедии, у MSP430 схожая система команд с PDP-11. Я относительно молодой, PDP-11 совсем не застал.

Здесь на форуме от разных людей видел комментарии в духе «дайте мне в руки PDP-11 и я вспомню как это делается». В руки, увы, ни PDP-11, ни MSP430 не дам. Но если поделитесь опытом, буду очень рад!

Вот, что, к примеру, делает программа описанная в файле Firmware.txt? Я, например, пока не могу расшифровать. :^)

Ответ на: комментарий от Jullyfish

двоичный код не нюхал :)))))))

Вот и пытаюсь понюхать.)))))))

Это можно. Bit bangом на макетке через JTAG

vM ★★★
()
Ответ на: комментарий от Jullyfish

если чисто понюхать т.е для ощущение как hhl отображается на действия(т.е. смену состояний) проца то достаточно мнемокодо

а вот для занюхнуть - это играться с тополигией кодов(ну как коды Грея вроде где граф однобитных растояний) т.е. форсировать всякие изызски как прыжки по адресу в середину cisc команды с измышленным продуктивным поведением на выходе не очевидном при чтение мнемокодов

и прочие на грани фола игры разумки

qulinxao3 ★☆
()
Ответ на: комментарий от Jullyfish

с трудом!

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

весь вопрос в адекватности способа решения наличным ограничениям - уже давно .text-отладка маргинальная деятельность

qulinxao3 ★☆
()
  1. Возвратное-ориентированное программирование (ROP)В современном мире эта «топология» переросла в концепцию ROP (Return-Oriented Programming). Хакеры не пишут свой код (память защищена, её нельзя одновременно исполнять и писать), они ищут в уже существующем легальном коде (например, в системных библиотеках) «гаджеты» — обрывки инструкций, заканчивающиеся на RET (возврат). Прыгая в середину чужих функций, они собирают из этих кусочков совершенно новую, не предусмотренную авторами программу.
qulinxao3 ★☆
()
Ответ на: комментарий от qulinxao3

и вообще примечательно как шитый код (который не только форт - форт буквально изначально это словарь как в питоне и транслятор который читает словарное определение main-слова читая словарные определения составляющих слова слов - и в буквальной первой реализации этой сверх-гениальной-идеи Мур Чарльз делал это строках) в очередной раз «выглядывает»

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

qulinxao3 ★☆
()
Ответ на: комментарий от qulinxao3

запрет .text полезен

У меня на работе коллега и соседнего отдела недавно радостно бегал, обнаружив, что через механизм вставки *.ko можно у программ менять в ходе работы .text (что неудивительно):

– Это же какие возможности открываются, если мы сможем менять секцию .text прямо во время выполнения программы!!!

Jullyfish ★★
() автор топика
Ответ на: комментарий от Jullyfish

Рассмотрены не все виды адресации.

Догенерите недостающие. Например, относительно PC для источника и приемника.

koko
()
Ответ на: комментарий от koko

Спасибо большое! Сам немного поленился. :^)

Какие еще нужны?

Пока не знаю, может это всё. Потом по datasheet изучу внимательно все варианты и отпишусь.

Jullyfish ★★
() автор топика

Symbolic addressing mode ломает мне голову. В datasheet на стр. 137 пример:

ADD.B EDE,TONI

С точки зрения ассемблера всё очень просто: берутся младшие байты из ячеек памяти EDE и TONI, складываются и помещаются в ячейку памяти TONI.

С точки зрения машкода, тут как-то очень запутанно. EDE ячейка с номером 0x579C, а TONI 0x0778.

Сама команда ADD.B это 0x50D0 (там в datasheet опечатка у этой команды в примере) и два операнда EDE и TONI, ещё два машслова. Если не копать, казалось бы должно быть:

0x50D0 0x579C 0x0778

Но нет, значения операндов зависит от того какое значение программное значение хранится в программно счётчике PC.

В примере из datasheet команда ADD.B хранится по адресу 0x1034 программы. Далее идёт два операнда: EDE 0x4766 и TONI 0xF740. Почему такие значения? Потому что операнд EDE хранится по адресу 0x1036 (PC+1) программы, а значит 0x4766+0x1036 = 0x579C. А операнд TONI хранится по адресу 0x1038 (PC+2): 0xF740 + 0x1038 = 0x10778.

Я, честно, как-то пока не представляю как это всё должно транслировать в объектный модуль. Получается что у операнды должны как-то хитро высчитываться на этапе трансляции, также должен стоять бит перемещаемости для редактора связей. При этом, т.к. EDE и TONI – тоже переменные, значит у них тоже будет стоять бит перемещаемости.

Jullyfish ★★
() автор топика
Ответ на: комментарий от Jullyfish

(дальнейшее по опыту PDP-11, лень лезть в доки по MSP, но сильно отличаться вроде не должно)

Это случай относительной адресации, которая в случае использования символических имён применяется по умолчанию (если имя указано без модификаторов).

Можно указать имена в виде @#EDE и @#TONI, тогда будет применяться абсолютная адресация, и в коде будут тупо лежать адреса переменных.

Относительная имеет свои преимущества для использования в перемещаемом коде или макросах (собственно, тот факт, что ПДП-шный ассемблер так и назывался MACRO, говорит о многом), но да, для писанины сразу в машкодах не очень удобна (ассемблеру-то чё, он железный, пересчитает смещения как надо).

anonymous
()
Ответ на: комментарий от anonymous

На pdp-11 абсолютный режим формально тоже относительно PC, только добавляется ещё один уровень косвенности?

а на MSP430 формально относительно SR, но вместо значения SR используется 0

anonymous
()
Ответ на: комментарий от anonymous

На pdp-11 абсолютный режим формально тоже относительно PC, только добавляется ещё один уровень косвенности?

ну, он «относительно PC» в том смысле, что в коде используется R7. MOV @#A, R0 =

013700
<адрес A>

что формально эквивалентно

MOV @(PC)+, R0
<адрес A>

но я лично всегда это воспринимал как просто идиому, не особенно вникая в то, что конкретно там происходит с PC.

anonymous
()
Ответ на: комментарий от anonymous

Относительная имеет свои преимущества для использования в перемещаемом коде

Интересно. А разве сам редактор связей не решает эту проблему? Или тогда ещё не было редактора связей? Или я не правильно понимаю что такое «перемещаемый код»?

(ассемблеру-то чё, он железный, пересчитает смещения как надо)

Пытаюсь своими ручками реализовать двухпроходный ассемблер, а я не железный. :^)

Jullyfish ★★
() автор топика
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария