Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
888 | savelij | 1 | |
2 | ;LAST UPDATE: 12.09.2019 savelij |
||
3 | |||
4 | ; генерация SCL образа |
||
5 | |||
6 | ; инициализация переменной для счетчика количествыа файлов |
||
7 | SCL_INIT_VAR MACRO |
||
8 | SCL_NUMBERS_FILES := 0 |
||
9 | ENDM |
||
10 | |||
11 | ; получение счетчика количества файлов в SCL образе |
||
12 | SCL_GET_NUMBERS MACRO NAME |
||
13 | NAME := SCL_NUMBERS_FILES |
||
14 | ENDM |
||
15 | |||
16 | ; добавление записи в SCL заголовок |
||
17 | ; INC переменная количества файлов в SCL файле |
||
18 | ; SECTORS количество секторов добавляемого файла, |
||
19 | ; если 0 то размер вычисляется из BYTES |
||
20 | ; TEXT имя файла как в TR-DOS |
||
21 | ; если "filenameB" адрес берется из ADRES |
||
22 | ; иначе "filenameEXT" и ADRES не вставляется |
||
23 | ; BYTES размер файла в байтах |
||
24 | ; ADRES адрес загрузки |
||
25 | SCL_RECORD MACRO INC,SECTORS,TEXT,BYTES,ADRES |
||
26 | IF MOMPASS > 1 |
||
27 | IF LOW (BYTES) |
||
28 | $$TMP := (BYTES>>8)+1 |
||
29 | ELSE |
||
30 | $$TMP := (BYTES>>8) |
||
31 | ENDIF |
||
32 | |||
33 | IF STRLEN(TEXT) = 9 |
||
34 | DB TEXT |
||
35 | DW ADRES |
||
36 | ELSE |
||
37 | DB TEXT |
||
38 | ENDIF |
||
39 | DW BYTES |
||
40 | IF SECTORS |
||
41 | DB SECTORS+$$TMP |
||
42 | ELSE |
||
43 | IF LOW(BYTES) |
||
44 | DB ((BYTES)>>8)+1 |
||
45 | ELSE |
||
46 | DB ((BYTES)>>8) |
||
47 | ENDIF |
||
48 | ENDIF |
||
49 | INC := INC+1 |
||
50 | ENDIF |
||
51 | ENDM |
||
52 | |||
53 | ; создание маркера SCL файла и количества файлов |
||
54 | SCL_HEADER MACRO NUMS |
||
55 | DB "SINCLAIR" |
||
56 | IF MOMPASS > 1 |
||
57 | DB NUMS |
||
58 | ELSE |
||
59 | DB 0 |
||
60 | ENDIF |
||
61 | ENDM |
||
62 | |||
63 | ; установка ORG для SCL файла |
||
64 | SCL_ORG MACRO ADDRS,NUMS |
||
65 | IF MOMPASS > 1 |
||
66 | ORG ADDRS-NUMS |
||
67 | ELSE |
||
68 | ORG ADDRS |
||
69 | ENDIF |
||
70 | ENDM |
||
71 | |||
72 | ; вычисление размера каталога SCL файла без маркера и количества файлов |
||
73 | SCL_HEADER_SIZE MACRO INNUMS,OUTNUMS |
||
74 | OUTNUMS := (9+INNUMS*14+0x100) |
||
75 | ENDM |
||
76 | |||
77 | ; вычисление количества секторов BASIC блока для SCL файла |
||
78 | SCL_BASIC_SIZE MACRO START,END,VARS |
||
79 | IF LOW(END-START) |
||
80 | VARS := ((END-START)>>8)+1 |
||
81 | ELSE |
||
82 | VARS := ((END-START)>>8) |
||
83 | ENDIF |
||
84 | ENDM |