Определения, описанные в этом документе, объявлены в файле '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
