. По FASM (1.73.30) вопрос, наверное детский: не смог создать "16 bit COFF" с главной функцией программы. Как я понял, в "COFF" нет "segment", есть "section", а ключевое слово "entry" требует записи стартового адреса в виде "segmentName:labelName". В Интернете и во встроенном руководстве (FASM.TXT, examples) не нашёл... Подскажите, может кто знает?
. Я пытаюсь придерживаться древнего способа: компилирование, связывание (линковка) из "obj" и "lib".
. Нерабочий код (entry lStart - illegal instruction):
Code: Select all
use16
format COFF
entry lStart
section "" code
org 0
vComHeader rb 256
lStart:
MOV AX, 0x4C00
INT 0x21
. В "Debian Linux 6.0.10" я настраивал пользовательскую программу на ввод-вывод в хранилище кадра (frame buffer). И рисовал без "monsters graphic server" в 16 бит цвете (R5G6B5) окна (для управления промышленной установкой достаточно), картинки, слова. Вся программа заняла где-то 200 киБ код и 2 МеБ картинки без сжатия. Даже написал прозрачность путём нахождения среднего цвета. Так что нормальный подход, а если на экране мусор - нужно останавливать все программы например по "Alt+Ctrl+Ins", вызывать "task manager" и завершать ненормальную задачу. ... Лёгкое, быстрое ПО никто не оценил - работает, да и ладно, на "QT" была б та же реакция...а затем отображается на виртуальный LFB_BASE = 0xFE000000 , который доступен для записи в том числе и
в ring3 - пользовательском режиме (лично мне такая беспечность непонятна : нормальный пользователь при "невменяемом" экране решить проблему может только кнопкой RESET)
. Ещё мне кажется, что видеоплаты даже вида "S3 trio" умеют аппаратно очищать память без копирования 0 в каждую ячейку, закрашивать замкнутые обрасти заданным цветом, размещать окно заданного размера по заданным координатам с изображением из другой области видеоОЗУ и тому подобное. В моём проекте всем этим занимался "CPU".