Быстрый старт¶
Соберём простую программу, которая выводит «Hello, World!» в терминал, и запустим её в эмуляторе.
1. Написать исходник¶
Создай файл hello.asm:
.ORG 0x00060000
.TEXT
main:
sign: .dw 0xB007AB1E ; загрузочная сигнатура
stub: .dw 0x00000000 ; подпись диска
LDI.DW SP, 0x00080000 ; указатель стека
LDI.DW IX, msg ; адрес строки
CALL print_string
HALT
print_string:
LOD.B XL1, [IX] ; читаем байт
CMP.B XL1, 0 ; конец строки?
JMP.EQ ps_done
STR.B XL1, [0x00020018] ; TERM_OUT
INC IX
JMA print_string
ps_done:
RET
.DATA
msg: .db "Hello, World!", 0
2. Собрать¶
Простейший вариант - сразу в плоский бинарник:
На выходе появятся два файла:
hello.bin- сырой бинарник (загружается в эмулятор или Logisim).hello.hex- Logisim hex форматаv2.0 raw.
Ассемблер выведет что-то вроде:
68 bytes collected
======================
Labels
======================
MAIN : 0x60000
SIGN : 0x60000
STUB : 0x60002
PRINT_STRING : 0x60018
PS_DONE : 0x60035
MSG : 0x60036
Sections: Text = 54; Data = 14; BSS = 0
Output: hello.bin and hello.hex
3. Запустить в эмуляторе¶
Эмулятор находится в emulator\dist\emulator.exe (Сборках пока что только под Windows), запустите его, в вкладке FILE выбираем пункт Open Disk Image... и выбираем наш hello.bin.
В окне эмулятора должен появиться терминал с надписью:
4. Что произошло под капотом¶
- Программа загружена по адресу
0x00060000- это начало регионаUSER RAM. mainустановил указатель стека, загрузил адрес строки вIXи вызвалprint_string.print_stringв цикле читает байт из памяти, проверяет на ноль и пишет в регистрTERM_OUT(0x00020018).- Видеокарта по этому адресу выводит символ в терминал.
- Когда встречается
\0, программа завершается черезHALT.
5. Собрать по-взрослому (опционально)¶
Ту же программу можно собрать в объектный файл и слинковать:
Этот способ нужен, когда программа состоит из нескольких модулей и статических библиотек.
6. Выбор BIOS¶
BIOS-образы лежат в i80148\PC48\BIOS. В эмуляторе открой вкладку BIOS:
- файлы группируются по моделям процессоров (имя подпапки:
i80148,i8046,i148,i248, ...); - Rescan - перечитать папку после добавления файлов;
- Current CPU only - показать только образы текущего процессора;
- двойной клик по образу или кнопка Load selected BIOS - загрузить и запустить BIOS.
Поддерживаются только .bin-файлы. Структура папки описана в
i80148\PC48\BIOS\README.md.
7. Сохранение последней конфигурации¶
При выходе эмулятор записывает последнюю конфигурацию в emulator.cfg рядом
с emulator.exe:
- модель процессора;
- видеокарта;
- последний BIOS;
- объём RAM и VRAM;
- образы дисков для каждого привода;
- разрешение, масштаб и цветовая глубина;
- режим скорости CPU.
При следующем запуске всё это восстанавливается автоматически. Параметры
командной строки (--cpu, --vc, --bios, --ram, --vram) имеют приоритет
над сохранёнными значениями.