;LAST UPDATE: 12.09.2019 savelij
; генерация SCL образа
; инициализация переменной для счетчика количествыа файлов
SCL_INIT_VAR MACRO
SCL_NUMBERS_FILES := 0
ENDM
; получение счетчика количества файлов в SCL образе
SCL_GET_NUMBERS MACRO NAME
NAME := SCL_NUMBERS_FILES
ENDM
; добавление записи в SCL заголовок
; INC переменная количества файлов в SCL файле
; SECTORS количество секторов добавляемого файла,
; если 0 то размер вычисляется из BYTES
; TEXT имя файла как в TR-DOS
; если "filenameB" адрес берется из ADRES
; иначе "filenameEXT" и ADRES не вставляется
; BYTES размер файла в байтах
; ADRES адрес загрузки
SCL_RECORD MACRO INC,SECTORS,TEXT,BYTES,ADRES
IF MOMPASS > 1
IF LOW (BYTES)
$$TMP := (BYTES>>8)+1
ELSE
$$TMP := (BYTES>>8)
ENDIF
IF STRLEN(TEXT) = 9
DB TEXT
DW ADRES
ELSE
DB TEXT
ENDIF
DW BYTES
IF SECTORS
DB SECTORS+$$TMP
ELSE
IF LOW(BYTES)
DB ((BYTES)>>8)+1
ELSE
DB ((BYTES)>>8)
ENDIF
ENDIF
INC := INC+1
ENDIF
ENDM
; создание маркера SCL файла и количества файлов
SCL_HEADER MACRO NUMS
DB "SINCLAIR"
IF MOMPASS > 1
DB NUMS
ELSE
DB 0
ENDIF
ENDM
; установка ORG для SCL файла
SCL_ORG MACRO ADDRS,NUMS
IF MOMPASS > 1
ORG ADDRS-NUMS
ELSE
ORG ADDRS
ENDIF
ENDM
; вычисление размера каталога SCL файла без маркера и количества файлов
SCL_HEADER_SIZE MACRO INNUMS,OUTNUMS
OUTNUMS := (9+INNUMS*14+0x100)
ENDM
; вычисление количества секторов BASIC блока для SCL файла
SCL_BASIC_SIZE MACRO START,END,VARS
IF LOW(END-START)
VARS := ((END-START)>>8)+1
ELSE
VARS := ((END-START)>>8)
ENDIF
ENDM