Rev 610 | Blame | Compare with Previous | Last modification | View Log | Download
Определения, описанные в этом документе, объявлены в файле 'sys_h.asm',
который в свою очередь линкует файл 'sysdefs.asm'.
Данный документ подразумевает использование асм-компилятора sjasmplus из репозитория NedoOS.
sjasmplus поставляется в виде исполняемого файла sjasmplus.exe для OS Windows.
А также в виде исходного кода для самостоятельной сборки под вами используемую OS.
************************* Используемые выражения *************************
байт - минимальная единица хранения данных в ОЗУ ZX-Spectrum, равная 8 битам.
0x - приставка к константе, обозначающая число представленное в шестнадцатеричной системе измерения.
little-endian - представление числа в ОЗУ. Это представление использует процессор z80.
Сначала младший байт, затем старший. В этом документе, по умолчанию, все числа little-endian.
К примеру 16 битное число 0x1234 располагается в памяти как DEFB 0x34,0x12
string(строка) - нуль-терминированный массив байтов, обычно содержащий строку символов.
Пример: DEFB "Hello Work!",0
буфер - массив байтов, как правило располагается в ОЗУ.
страница ОЗУ(page) - 16 килобайт физического ОЗУ.
окно(окно памяти) - диапазон адресного пространства процессора z80.
В NedoOS используется четыре окна располагаемых в адресах
0x0000...0x3fff, 0x4000...0x7fff, 0x8000...0xbfff, 0xc000...0xffff
указатель - адрес, в адресном пространстве z80 либо файле, указывающий на ячейку памяти или на начало массива ячеек памяти
Палитра - палитра цветов видеовывода
фокус - доступность, процессу, вывода на экран и чтения клавиатуры.
В момент времени фокус может принадлежать только одному процессу, остальным процессам в этот момент фокус недоступен.
Фокус переключается при вызове OS_SETGFX, при закрытии процесса, а также хоткеем.
квант времени - время выделяемое процессу. Как правило процессорное время распределяется
в равных долях между всеми активными процессами. Переключение процессов происходит
по сигналу n_int процессора, либо если процесс отдал свой квант времени.
процесс - задача.
Процессу доступно адресное пространство 0x0080...0xffff.
Не допускается модифицирование данных, процессом, в адресном пространстве 0x0000...0x007f
Стек процесса может располагаться в диапазоне адресов 0x3b00...0xffff.
У каждого процесса свой квант времени и своя палитра.
При создании процесса ему выделяется четыре страницы ОЗУ, которые подключаются
в 4 окна адресного пространства. Адреса 0x0000...0x00ff заполняются служебной информацией.
Также устанавливается системная цветовая палитра.
При старте процесса управление передается на адрес PROGSTART,
в регистр SP помещается адрес 0x0000.
программа - типичная программа это исполняемый файл с расширением '.com', максимальный размер программы 0x10000-PROGSTART
При запуске программы она помещается в отдельный процесс начиная с адреса PROGSTART
командная строка вызова программы помещается(вызываемым процессом) начиная с адреса 0x0080, максимум PROGSTART-0x0080 символов.
Программы запускаются процессами следующим образом:
создаётся процесс, загружается тело программы в его страницы, запускается процесс.
Исходный код программы, как правило, начинается строками:
DEVICE ZXSPECTRUM128
include "../_sdk/sys_h.asm"
ORG PROGSTART
И заканчивается строкой
savebin "progname.com",PROGSTART,$-PROGSTART
Данный тип программ поддерживается, для запуска, программами 'cmd.com' и 'nv.com'
8.3 - формат имени файла либо директории, до 8 символов имя и до 3 символов расширение.
В случае присутствия расширения, используется символ '.' в качестве разделителя имени и расширения
FCB - файловая запись, совместимая с CP/M (FCB_sz байт). Лежит в памяти задачи.
В будущем планируется отказаться от FCB, как и от функций CP/M.
Вместо FCB рекомендуется использовать хэндлы и функции, работающие через хэндлы.
хэндл - уникальный номер открытого файла в системе.
Файловая запись, соответствующая этому файлу, лежит в памяти ядра.
Имеются разные диапазоны номеров для разных типов устройств (пока это не документируется, так как может поменяться).
***********************************************************
*********************** Определения ***********************
***********************************************************
При вызове функций ядра возможна порча всех регистров (за исключением SP).
*********************** PROGSTART **********************
Идентификатор, определяющий начало компиляции и стартовый адрес программы.
В текущей реализации равен 0x0100.
Пример использования, а также минимальный исходный код программы:
DEVICE ZXSPECTRUM128
include "../_sdk/sys_h.asm"
ORG PROGSTART
;исходный код программы
QUIT
savebin "progname.com",PROGSTART,$-PROGSTART