Анатолий @longtolik
Пользователь
Information
- Rating
- 3,736-th
- Location
- Россия
- Registered
- Activity
Specialization
3d Modeler, Neurochip application
From 10,000 €
Assembler
C
Programming microcontrollers
Embedded system
Arm Architecture
RISC-V
Real-time operating system
Electronics Development
Development of printed circuit board
Привем всем.
Вчера видел эту книгу в магазине. Она была запечатана (новый формат продаж - "кот в мешке", цена тоже в 2 раза больше, "чем везде").
Решил поискать информацию. Наткнулся на эту статью.
Правильно пишут в комментариях - книга про ARM, а код в статье приводится от x86-64.
Смотрим содержимое - биты и байты, кодировка символов. Очень ценная информация, что код буквы "A" равен 0x41, с рисунком про это.
"Глава 2. Внутреннее устройство файлов ELF." - а что с ними не так, что надо целую главу про это писать? Программа парсинга ELF занимает пару десятков строк. Можно утилитой objcopy из ELF получить BIN.
В общем, каждый может "полистать" станицы книги, чтобы получить представление...
Пока похоже, что хайп сделали на словах "взлом" и "реверс-инжиниринг".
А от одного и того же самца сделают? Чтобы был только его детёныш.
Однообразная направленность у всех трёх ресурсов.
Кроме сайтов и ботов больше ничего не существует, видимо...
Конкретно - дело было во Владикавказе, а производили черепицу на заводе "Крон", который в советские времена входил в НПО "Полимер".
Владикавказ южнее Сочи и итальянского Милана,
Еще есть такой - Motorola DragonBall или MC68328.
Вот он уже - 32 разрядный. На них построены Palm IIIe, например. Прямо на самом Palm (лучше с подключенной складной клавиатурой) можно создавать программы на языках C и Assembler. А реализации BASIC для них тоже отличные. Где-то есть компилятор C с исходным кодом, на его основе можно свой разработать, если есть для этого время...
Аналогичный случай был на соседней ферме :)...
То есть, в одном южном городе знакомые организовали производство черепицы по такой технологии. Всё шло хорошо, но через пару лет эта черепица стала разрушаться под жарким солнцем. Пришлось отдавать всем покупателям деньги. За саму черепицу и за кровельные работы...
Ждём компьютер в умных часах :)
Вопрос вырос из того, что сертифицирвать U-boot не представляется возможным, поэтому делают свои загрузчики.
С сертификацией BIOS могут быть сложности. А с него начинается работа компьютера, и объёмы кода там большие. (Некоторые могут и в сеть выходить).
Хотел спросить, какой загрузчик используется, U-boot или собственный, но похоже, система с BIOS начинается. В требованиях к оборудованию написано 2 Гигабайта ОЗУ и 20 Гигабайт дисковой памяти, при этом процессор "желательно поновее", а вот какой он архитектуры, но сразу не понятно.
Подключал блок питания от ноутбука на 16 Вольт к аккумулятору через лампочку (насколько помню, от поворотника). Сначала она горела ярко (почти), по мере заряда напряжение аккумулятора росло, разность напряжения уменьшалась, и лампочка почти не светилась.. Она же и ток ограничивала, когда спираль горячая, сопротивление ее большое, когда холодная - маленькое.
Вот почему-то казалось слегка по-другому, например, как написано про Andriod NDK:
https://en.wikipedia.org/wiki/Android_NDK
И так далее...
На такой камере когда -то делал сканер Datamatrix.
https://youtu.be/MEAieQftYEo?si=2WOF2VgwtiiSWDMh
Изображение очень качественное, даже при 8 битах.
Спасибо за тест. Но в моем случае при размере 45000 выдает FAIL, при этом программа сообщает: Errors: 0
Точно, хотел про это написать, решил проверить, Вы опередили. В этих блоках питания применялись также быстродействующие предохранители, утверждалось, что серебряные..
Однако, ностальгический комментарий разрастается...
Некоторые варианты.
Программируемый калькулятор (в нем много машинных кодов, запуск программ с выводом на экранчик).
Или купить БК-0010М, или поискать эмулярор PDP-11 на PC.
КПК Palm IIIe со складной клавиатурой. На нем (прямо на нем) можно создавать, редактировать и выполнять программы на Assembler и C. Замечательная архитектура Motorola DragonBall (или MC68328).
Мне она нравится больше чем DEC PDP-11, к тому же, 32 бита, работа от двух мизинчиковых батарей.
Телефон на Android с Termux. Это - Linux в кармане, можно подключать мышь и клавиатуру по Bluetooth,
а также мониторы или телевизоры по кабелю USB Type C - HDMI. Можно создавать программы на любом языке, можно установить Far Manager, редакторы двоичных файлов, редактировать BIN файлы и запускать их.
Raspberry Pi Zero 2W (или другие). Можно работать как на Linux, так и на голом железе.
Arduino Vidor 4000 с Intel Cyclone на борту. Есть IP процессоров, можно и свой процессор создать и загрузить.
Есть выход HDMI. Сам я только проверил цепочку от схемы в Quartus в бит-файл для мигания светодиодом.
Эти устройства заменяют D1 и D2. То есть, два в одном.
Если говорить об устройстве D2, то его можно выполнить даже на Arduino Uno. К нему подключить связь с D1 и экран, например, OLED или LCD.
Для связи D1 и D2 подойдут, как проводные (UART), так и беспроводные интерфейсы: Bluetooth (на HC-05, 06), BLE (HM-11), Wi-Fi (ESP9266), IrDA.
Программировать в кодах немного сложновато. Исключение - DEC PDP-11, там только пересчет смещения ветвления вручную рутинный.
Поэтому можно сделать свой Assembler. Когда-то в журнале "Микропроцессорные средства и системы" приводились такие проекты - типа универсальный Assembler для любых мнемоник в любые коды.
А еще можно сделать генерацию кода с помощью LLM.
Как-то попробовал в Off-Line на Raspberry Pi 5 - подключил к LLM свое резюме. А потом спрашивал про себя на разных языках. Система послушно выдавала информацию.
Подобным образом можно подключить документ, который содержит машинные коды.
Потом вы говорите что-то вроде: переслать из регистра R2 в R3. Для этого у системы будет ответ типа: "10203", что соответствует "MOV R2,R3". Эти строки машинного кода можно преобразовать в двоичный вид, поместить в файл, и будет готовый бинарник для исполнения. А еще можно будет делать целые куски кода или подпрограммы, например, "вывести "Testing 123" на терминал".
Применение Code-T5(CodeT5 - модель для понимания, а также генерации кода).
Для анализа исходного текста программ:
https://youtu.be/MlW2GAPPV2w?si=D8PnUJsoNIYSjxeU
(озвучка ужасная, лучше не слушать, сейчас лучше справляюсь).
Задача была документировать тексты программ, генерациют кода не пробовал.
Пожалуйста, если будут полезные проекты, можно было бы поучаствовать. Не только на RPI, но и на других платах (на голом железе).
Кстати, посмотрел Вашу публикацию о Inkscape Plugin, интересная штука. А я делал Plugin для вывода графики на плоттер, то есть, в G-code для ЧПУ. Для плоттера на бутылках BottleBot, а потом подправил для Line-US. Ещё из этого делал координаты для текстов для 3D графики. (Сами надписи располагались на поверхности усеченного конуса, в циферблате для часов)
Еще там была проверка готовности через регистр состояния.
Коллега делал проверку бита готовности через TSTB и потом ветвление.
Позже я понял, что надо делать через BPL, так как бит готовности - он же старший в байте, поэтому соответствует знаку.
Потом, когда RT-11 (ФОДОС) появился, фокус ему показывал
MOV #123, R0
EMT O341 // .TTYOUT R0
EMT O350 // EXIT
Встраивание данных в код
Кусок программы от Peter Lemon на ассемблере
Инициализация Frame Buffer
...
FB_Init:
mov w0,FB_STRUCT + MAIL_TAGS
mov x1,MAIL_BASE
orr x1,x1,PERIPHERAL_BASE
str w0,[x1,MAIL_WRITE + MAIL_TAGS] ; Mail Box Write
ldr w0,[FB_POINTER] ; W0 = Frame Buffer Pointer
cbz w0,FB_Init ; IF (Frame Buffer Pointer == Zero) Re-Initialize Frame Buffer
...
Он транслируется в FASM, но выдает ошибки в GCC aarch64-linux-gnu
Поэтому сначала я вставлял машинные коды нетранслируемых команд как директивы .word ...
а после преобразовал текст программы.
...
FB_Init:
mov w0, FB_STRUCT+MAIL_TAGS
.word 0x5282a900 // альтеративно - такая команда
...
0000000000000094 :
94: 5282a900 mov w0, #0x1548 // #5448
98: 5282a900 .word 0x5282a900
9c: d2971001 mov x1, #0xb880 // #47232
a0: b2681421 orr x1, x1, #0x3f000000
a4: b9002820 str w0, [x1, #40]
a8: 1000a8a1 adr x1, 15bc
ac: b9400020 ldr w0, [x1]
b0: 34ffff20 cbz w0, 94
b4: 12007400 and w0, w0, #0x3fffffff
b8: 1000a821 adr x1, 15bc
bc: b9000020 str w0, [x1]
c0: b26a03ff mov sp, #0x400000 // #4194304
c4: 14001682 b 5acc
Таким образом, можно создать базу данных (на самом деле - кодов). Из этих "кирпичиков" построить программу, передать на нее управление, и она будет работать.
Можно применить генетические алгоритмы, то есть, "выживать" будут лучшие экземпляры.
Также не исключено добавление случайных кодов, в случае ошибки возникнет прерывание по неправильному коду операции, этот код может быть подправлен и т. д.
Тут нужно смотреть, чтобы изменения кода происходили, не мешая кешу команд и данных.
Самомодифицирующиеся программы существуют уже давно.
Про Raspberry Pi
Пробовал на 3+A и B, 2W - все с процессором A53. Четыре ядра работают - это позволяет на каждом выполнять свою задачу без переключений. С Raspberry Pi 5 на голом железе пока не пробовал - там чип ввода-вывода поставили.
Это здорово, когда мы чувствуем железо.
Последний раз использовал машинные коды, когда для Raspberry Pi 3 делал звук/видео буфер на голом железе. FASM интерпретировал мнемонику в машинный код, а GCC - нет. Пришлось в текст программы вставить кусок данных. Заработало.
А в общем, до сих пор помню многие коды из PDP-11.
Можно купить БК-0010 и пробовать..
Ещё делал дизассемблер на лету для IBM совместимых компьютеров . Надо было убрать кусок кода, который защиту на Com port проверял. Через T бит после каждой команды выполнялос прерывание, и дизассемблировалась команда. На 386SX работало с приемлемой скоростью.
Да, дерево - это здорово. Недавно сделал аудио колонки из бочонков и цилиндров (так они на сайте называются, но, скорее, стаканы). Из цельных кусков дерева.. А знакомый делает на продажу мыши и флешки деревянные...
Из цельного куска ...подразумевается, в хорошем случае, что берется параллелепипед и из него на станке с ЧПУ фрезеруется изделие. Так делают капоты у Rolls Royce, вроде. Другой вариант - когда делается отливка и доводится форма лёгкой фрезеровкой..