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? Я, например, пока не могу расшифровать. :^)

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

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

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

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

и скачать среду разработки

По максимуму стараюсь не использовать любые IDE. Меня крокодил покусал.

описание системы команд микроконтроллера оттуда

Да, описание есть.

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

Мне просто для опыта. :^)

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

у мсп430 хорошая документация на сайте техаса и куча исходников. iar и т.д.

Не спорю, хотя инструменты явно делались под форточки, что крайне неприятно. А сами машинные команды и в обычной википедии написаны. Мне скорее помощь в этом разобраться.

Как я понимаю @e000 адрес куда записывается программа. Далее команда 0x23 = 0010_0011, что она делает, пока не получается разобраться.

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

MSP430

Не, ставь Code Composer и пиши на Си. А PDP-11 для уюта, тетриса и винтажа нужен.

форточки

У тексаса под прошлую Ubuntu LTS есть.

А, коды PDP-11 - можно поискать сканы журналов 80-х с листингами восьмеричных кодов для БК-0010. Иногда забавно было.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 3)

На MSP430 отличная документация у TI.

На PDP-11 он действительно чем-то похож. Есть масса отечественной литературы по системе команд и программированию 1801ВМ1, который являлся советским однокристальным микропроцессором с системой команд PDP-11. Был очень популярен в качестве embedded процессора во всяких промышленных контроллерах, использовался в массовых ДВК, БК0010 и MK85, так что русскоязычной литературы по нему море. Общее представление и принципы можно оттуда почерпнуть, но без документации TI на MSP430 всё равно никак не обойтись - процессоры и система команд всё-же разные, хоть и похожи, ну и периферия одеокристалок MSP430 разумеется не описана в книгах про 1801ВМ1/PDP-11.

Stanson ★★★★★
()

схожая система команд с PDP-11

Схожая идеологически, по факту вообще другая и не совместимая. Забудь про pdp-11, ищи мануалы конкретно для MSP430.

no-such-file ★★★★★
()

Похоже надо смотреть по 2 байта.

0x21 0x83 это 0010_0001_1000_0011.

Если верить Википедии, 0010_00 это jnz, а оставшиеся 01_1000_011 – смещение. Но как-то странно, смещение > 256, а программа 76 bytes total.

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

Отсюда:

@ADDR1
DATA01 DATA02 ........ DATA16
DATA17 DATA18 ........ DATA32
........
DATAm ........ DATAn
@ADDR2
DATA01 ........ DATAn
q

Where:

@ADDR is the start address of a section (hexadecimal).
DATAn represents a data byte (hexadecimal).
q is the termination of the file.

For example:

@F000
31 40 00 03 B2 40 80 5A 20 01 D2 D3 22 00 D2 E3
21 00 3F 40 E8 FD 1F 83 FE 23 F9 3F
@FFFE
00 F0
Q

Restrictions:
• The number of sections is unlimited.
• Each line can have a maximum of 16 data bytes, except the last line of a section.
• Data bytes are separated by a single space.
• The termination tag q indicates end-of-file is mandatory.
Jullyfish
() автор топика

Прелесть программирования PDP-11 (и MSP430) - в ортогональности её системы команд. Почти любую операцию можно выполнить почти с любыми операндами, используя единый набор способов адресации. Ну и всякие плюшки типа автоинкремента/автодекремента. Это не значит, что нужно составлять программу в виде текстового файла. Это значит, что удобно программировать на ассемблере.

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

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

Как я слышал, что прелесть PDP-11, что как раз удобно машинными командами программировать. А потом придумали RISC, ибо зачем делать «удобные и красивые» машинные команды, если есть мнемоники.

Возможно заблуждаюсь.

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

Возможно заблуждаюсь.

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

Beewek ★★★★
()

Машинные коды для PDP-11 нужно смотреть в восьмеричной форме. Там почти все по 3 бита кодируют. 8 регистров, 8 способов адресации.

vel ★★★★★
()

Привет! я много писал в машкодах на БК0010-01. Так вот, надо не 16ричный а восьмеричный подход использовать, тогда запоминается моментом.

12700 - mov r0, r0 12701 - mov r0, r1 00240 - nop

и тд

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

Если я правильно понял, надо брать по два байта и читать справа-налево.

Т.е. 0x83 0x21 это 1000_0011 0010_0001, а это 0203 0041.

Первый байт:1000_ это sub (как-то не вписывается в восмеричное, ну ладно), _0011 это R3.

Второй байт 0010_:

  • 0 - это регистр;
  • 0 - значит байт;
  • 10 - косвенная адресация без инкремента (тут гнетут сомнения).

_0001 и это всё идёт в R1.

Что-то вроде sub.b [r3] r1 получается?

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

Я относительно молодой, PDP-11 совсем не застал.

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

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

Если это действительно PDP-11, то вам надо поискать документацию к компбютеру отечественному, УКНЦ. Я не помню, на каком чипе он сделан. Довольно точная копия, даже адреса регистров совпадали (что позволяло использовать код написанный для PDP11).

В интернете видел ассемблер для УКНЦ.

И да, если это действительно PDP-11, то там нативно - восьмеричная система используется :). Опкоды удобнее читать, когда они восьмерично записаны - там, типа, номера регистров видно по дампу. Но я уже не вспомню цифр конкретных.

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

2 байта 0x8321 это 1 слово 101441 MOVB (r4),-(r1)

Очень странно. Это точно не начало прошивки.

@e000 - начало прошивки в @FFFE занесли 0xE022 - адрес старта?

В 94 году у меня был самописный эмулятор pdp-11 (без MMU) который работал даже на ХТ.

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

Очень странно. Это точно не начало прошивки.

(mspdebug) dis 0xfffe
0xfffe:
    0fffe: 22 e0                     XOR     @PC,    SR

@PC, как я понимаю значение Program Counter. А вот что такое SR, не знаю. Если вместо этого записать 0xff 0xff, ругается:

(mspdebug) run
fet: FET returned error code 17 (Could not run device (to breakpoint))
fet: failed to restart CPU
run: failed to start CPU

На форуме ti пишут, что по адресу 0xfffe CUSTOM_RESET.

@e000 - начало прошивки в @FFFE занесли 0xE022 - адрес старта?

Очень похоже.

В 94 году у меня был самописный эмулятор pdp-11 (без MMU) который работал даже на ХТ.

А я в то время ещё не родился. И что такое XT – не знаю.

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