Як писати та збирати програми
Цей посібник пояснює, як писати, компілювати та збирати програми для rosco_m68k у bare-metal середовищі.
Ця сторінка передбачає, що у вас вже встановлено робочий інструментарій. Окремий посібник охоплює встановлення та налаштування інструментарію.
Передумови
Перш ніж почати, переконайтеся, що у вас є:
- Встановлений m68k інструментарій
- SD-карта, відформатована як FAT32
Посібник з налаштування інструментарію
Середовище виконання
Програми для rosco_m68k працюють у bare-metal середовищі. Це означає:
- Немає операційної системи за замовчуванням
- Прямий доступ до апаратного забезпечення
- Виконання програми починається з
kmain
Можна запустити операційну систему (наприклад, призначену для Motorola 68010), але цей посібник зосереджується лише на bare-metal розробці.
Підтримувані мови
rosco_m68k підтримує розробку на:
- Асемблер (vasm)
- C
Для програм на C проект надає адаптовану стандартну бібліотеку, придатну для bare-metal середовищ.
Приклади:
printf()виводить текст на послідовну консоль (UART)- ОС хоста не потрібна
Для асемблера також є адаптована бібліотека з подібними функціями.
Швидкий старт
Найпростіший спосіб почати — завантажити наш стартовий шаблон:
Завантажити стартовий шаблон: rosco_start.zip
Цей архів містить:
rosco_start/
├── starter_c/ # Шаблон C-проекту
│ ├── kmain.c # Приклад програми на C
│ ├── Makefile
│ └── libs/ # Стандартні бібліотеки (потребують збирання)
│
└── starter_asm/ # Шаблон проекту на асемблері
├── kmain.asm # Приклад програми на асемблері
├── Makefile
└── libs/ # Стандартні бібліотеки (потребують збирання)
Кроки для початку роботи:
- Завантажте та розпакуйте архів
- Спочатку зберіть стандартні бібліотеки:
cd rosco_start/starter_c/libs/ # або starter_asm/libs/
make install
cd ..
- Виберіть свою мову:
- Для C: перейдіть до
starter_c/ - Для асемблера: перейдіть до
starter_asm/
- Для C: перейдіть до
- Зберіть свою програму:
make clean all
- Розгорніть на SD-карту:
- Скопіюйте згенерований
.binфайл на вашу SD-карту, відформатовану як FAT32 - Перейменуйте його на
ROSCODE1.bin - Вставте SD-карту у ваш ROSCO M68K
- Увімкніть живлення та підключіться через UART, щоб побачити вивід
- Скопіюйте згенерований
Важливо: Ви повинні скомпілювати стандартні бібліотеки за допомогою make install перед збиранням вашої першої
скомпілювати стандартні бібліотеки за допомогою make install перед збиранням вашої першої
програми. Цей крок потрібно виконати лише один раз.
Структура проекту
Як C, так і асемблерні шаблони дотримуються однієї мінімальної структури:
project/
├── kmain.c # або kmain.asm (ваша основна програма)
├── Makefile # Конфігурація збирання
└── libs/ # стандартні бібліотеки rosco_m68k
Ключові файли:
kmain.c/kmain.asm— Точка входу вашої програми. Виконання починається тут.Makefile— Визначає, як компілювати та компонувати вашу програму.libs/— Містить стандартні бібліотеки для bare-metal розробки (спочатку потрібно скомпілювати).
Компіляція стандартних бібліотек
Перед збиранням вашої першої програми потрібно скомпілювати стандартні бібліотеки.
Перейдіть до каталогу libs/ та виконайте:
cd libs/
make install
cd ..
Це збере всі необхідні файли бібліотек, з якими будуть компонуватися ваші програми. Вам потрібно зробити це лише один раз після завантаження стартового шаблону.
Написання вашої програми
Розробка на C
Під час написання програм на C:
- Використовуйте
#include <stdio.h>для функцій, таких якprintf() - Функція
printf()виводить на UART (послідовну консоль) - Ваша програма починається з функції
kmain() - Повернення з
kmain()перезавантажить машину
Приклад структури:
#include <stdio.h>
void kmain() {
// Ваш код тут
printf("Привіт від ROSCO!\r\n");
// Повернення спричинить перезавантаження
}
Розробка на асемблері
Під час написання програм на асемблері:
- Використовуйте функції машинної бібліотеки, такі як
mcPrintln - Завжди очищуйте стек після викликів функцій
- Точка входу — мітка
kmain:: - Повернення з
kmainперезавантажить машину
Приклад структури:
section .text
kmain::
; Ваш код тут
lea.l MESSAGE,A0
move.l A0,-(A7)
jsr mcPrintln
addq.l #4,A7
rts
MESSAGE:
dc.b "Привіт від ROSCO!", 0
Збирання вашої програми
З каталогу вашого проекту (або starter_c/, або starter_asm/) виконайте:
make clean all
Це:
- Очистить попередні артефакти збирання
- Скомпілює вашу програму
- Скомпонує її зі стандартними бібліотеками
- Згенерує виконуваний файл (
.binфайл)
Розгортання на ROSCO M68K
Після збирання вашої програми потрібно скопіювати її на SD-карту:
- Відформатуйте вашу SD-карту як FAT32 (якщо ще не відформатована)
- Скопіюйте згенерований
.binфайл на SD-карту - Перейменуйте його на
ROSCODE1.bin— це ім'я файлу, яке шукає завантажувач - Вставте SD-карту у ваш ROSCO M68K
- Підключіться через UART, щоб побачити вивід (38400 бод)
- Увімкніть живлення плати
Приклад успішного завантаження
Коли все працює правильно, ви повинні побачити вивід, подібний до цього, через UART:
Огляд Makefile
Обидва шаблони використовують подібний Makefile:
ROSCO_M68K_DEFAULT_DIR=./
ifndef ROSCO_M68K_DIR
$(info NOTE: ROSCO_M68K_DIR not set, using libs: ./libs)
ROSCO_M68K_DIR=$(ROSCO_M68K_DEFAULT_DIR)
else
$(info NOTE: Using ROSCO_M68K_DIR libs in: $(ROSCO_M68K_DIR))
endif
-include $(ROSCO_M68K_DIR)/code/software/software.mk
EXTRA_CFLAGS=
EXTRA_LIBS=
Що він робить:
- Налаштовує шлях до бібліотеки (
ROSCO_M68K_DIR) - Включає правила збирання з
software.mk - Дозволяє налаштування через
EXTRA_CFLAGSтаEXTRA_LIBS
Примітки та поширені помилки
- Стандартні бібліотеки повинні бути зібрані спочатку — виконайте
make installу каталозіlibs/перед збиранням вашої програми - SD-карта повинна бути відформатована як FAT32 — інші файлові системи не працюватимуть
- Бінарний файл повинен називатися
ROSCODE1.bin— завантажувач шукає саме це ім'я файлу - Повернення з
kmainперезавантажує машину — якщо ви хочете, щоб ваша програма продовжувала працювати, використовуйте нескінченний цикл - В асемблері завжди очищуйте стек після викликів функцій (наприклад,
addq.l #4,A7) - Переконайтеся, що бібліотеки знаходяться в
libs/— стартовий шаблон включає їх - Неправильний шлях
ROSCO_M68K_DIRспричинить помилки збирання
Розширене: збирання бібліотек з вихідного коду
Якщо вам потрібно перезібрати стандартні бібліотеки або отримати останню версію:
Код бібліотек: Доступні на GitHub.
Завантажте вихідні коди, перейдіть до каталогу libs/ та виконайте:
make install
Це перезбере всі файли бібліотек.