Rev 1047 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1047 | Rev 1120 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | 1 | ||
2 | ; LAST UPDATE: 26.12.2022 savelij |
2 | ; LAST UPDATE: 10.02.2024 savelij |
3 | 3 | ||
4 | ; автоопределение кодировки работает неправильно |
4 | ; автоопределение кодировки работает неправильно |
5 | 5 | ||
6 | RELAXED ON |
6 | RELAXED ON |
7 | CPU Z80UNDOC |
7 | CPU Z80UNDOC |
Line 140... | Line 140... | ||
140 | SIZEDATE EQU STRLEN (DATE) |
140 | SIZEDATE EQU STRLEN (DATE) |
141 | __POS := 0 |
141 | __POS := 0 |
142 | ; извлечение месяца |
142 | ; извлечение месяца |
143 | MMOUNTH := (CHARFROMSTR (DATE,__POS) - '0') |
143 | MMOUNTH := (CHARFROMSTR (DATE,__POS) - '0') |
144 | __POS := __POS + 1 |
144 | __POS := __POS + 1 |
145 | IF MOMPASS > 1 |
- | |
146 | IF (CHARFROMSTR (DATE,__POS)) <> '/' |
145 | IF (CHARFROMSTR (DATE,__POS)) > '/' |
147 | MMOUNTH := MMOUNTH * 10 + (CHARFROMSTR (DATE,__POS) - '0') |
146 | MMOUNTH := MMOUNTH * 10 + (CHARFROMSTR (DATE,__POS)) -'0' |
148 | __POS := __POS + 2 |
- | |
149 | ELSE |
- | |
150 | __POS := __POS + 1 |
147 | __POS := __POS + 1 |
151 | ENDIF |
148 | ENDIF |
152 | ENDIF |
149 | __POS := __POS + 1 |
153 | ; извлечение даты |
150 | ; извлечение даты |
154 | DDATE := (CHARFROMSTR (DATE,__POS) - '0') |
151 | DDATE := (CHARFROMSTR (DATE,__POS) - '0') |
155 | __POS := __POS + 1 |
152 | __POS := __POS + 1 |
156 | IF MOMPASS > 1 |
- | |
157 | IF (CHARFROMSTR (DATE,__POS) <> '/') |
153 | IF (CHARFROMSTR (DATE,__POS)) > '/' |
158 | DDATE := DDATE * 10 + (CHARFROMSTR (DATE,__POS) - '0') |
154 | DDATE := DDATE * 10 + (CHARFROMSTR (DATE,__POS)) - '0' |
159 | __POS := __POS + 2 |
- | |
160 | ELSE |
- | |
161 | __POS := __POS + 1 |
155 | __POS := __POS + 1 |
162 | ENDIF |
156 | ENDIF |
163 | ENDIF |
157 | __POS := __POS + 1 |
164 | ; извлечение года |
158 | ; извлечение года |
165 | YYEAR := (CHARFROMSTR (DATE,__POS) - '0') |
159 | YYEAR := (CHARFROMSTR (DATE,__POS) - '0') |
166 | __POS := __POS + 1 |
160 | __POS := __POS + 1 |
167 | IF MOMPASS > 1 |
- | |
168 | WHILE __POS < SIZEDATE |
- | |
169 | IF (CHARFROMSTR (DATE,__POS) <> '/') |
161 | WHILE (CHARFROMSTR (DATE,__POS)) > '/' |
170 | YYEAR := YYEAR * 10 + (CHARFROMSTR (DATE,__POS) - '0') |
162 | YYEAR := YYEAR * 10 + (CHARFROMSTR (DATE,__POS)) - '0' |
171 | __POS := __POS + 1 |
163 | __POS := __POS + 1 |
- | 164 | IF __POS > SIZEDATE |
|
- | 165 | EXITM |
|
172 | ENDIF |
166 | ENDIF |
173 | ENDM |
167 | ENDM |
174 | ENDIF |
- | |
175 | IF YYEAR > 99 |
168 | IF YYEAR > 99 |
176 | YYEAR := YYEAR - 2000 |
169 | YYEAR := YYEAR - 2000 |
177 | ENDIF |
170 | ENDIF |
178 | 171 | ||
179 | ; генерация времени |
172 | ; генерация времени |
Line 181... | Line 174... | ||
181 | SIZETIME EQU STRLEN (TIME) |
174 | SIZETIME EQU STRLEN (TIME) |
182 | __POS := 0 |
175 | __POS := 0 |
183 | ; извлечение часа |
176 | ; извлечение часа |
184 | HHOUR := CHARFROMSTR (TIME, __POS) - '0' |
177 | HHOUR := CHARFROMSTR (TIME, __POS) - '0' |
185 | __POS := __POS + 1 |
178 | __POS := __POS + 1 |
186 | IF MOMPASS > 1 |
- | |
187 | IF (CHARFROMSTR (TIME, __POS) <> ':') |
179 | IF (CHARFROMSTR (TIME,__POS)) <= '9' |
188 | HHOUR := HHOUR * 10 + CHARFROMSTR (TIME, __POS) - '0' |
180 | HHOUR := HHOUR * 10 + CHARFROMSTR (TIME, __POS) - '0' |
189 | __POS := __POS + 2 |
- | |
190 | ELSE |
- | |
191 | __POS := __POS + 1 |
181 | __POS := __POS + 1 |
192 | ENDIF |
182 | ENDIF |
193 | ENDIF |
183 | __POS := __POS + 1 |
194 | ; извлечение минут |
184 | ; извлечение минут |
195 | MMINUTE := CHARFROMSTR (TIME, __POS) - '0' |
185 | MMINUTE := CHARFROMSTR (TIME, __POS) - '0' |
196 | __POS := __POS + 1 |
186 | __POS := __POS + 1 |
197 | IF MOMPASS > 1 |
- | |
198 | IF (CHARFROMSTR (TIME, __POS) <> ':') |
187 | IF (CHARFROMSTR (TIME,__POS)) <= '9' |
199 | MMINUTE := MMINUTE * 10 + CHARFROMSTR (TIME, __POS) - '0' |
188 | MMINUTE := MMINUTE * 10 + CHARFROMSTR (TIME, __POS) - '0' |
200 | __POS := __POS + 2 |
- | |
201 | ELSE |
- | |
202 | __POS := __POS + 1 |
189 | __POS := __POS + 1 |
203 | ENDIF |
190 | ENDIF |
204 | ENDIF |
191 | __POS := __POS + 1 |
205 | ; извлечение секунд |
192 | ; извлечение секунд |
206 | SSECUND := CHARFROMSTR (TIME, __POS) - '0' |
193 | SSECUND := CHARFROMSTR (TIME, __POS) - '0' |
207 | __POS := __POS + 1 |
194 | __POS := __POS + 1 |
208 | IF MOMPASS > 1 |
- | |
209 | IF __POS < SIZETIME |
195 | IF __POS < SIZETIME |
210 | SSECUND := SSECUND * 10 + CHARFROMSTR (TIME, __POS) - '0' |
196 | SSECUND := SSECUND * 10 + CHARFROMSTR (TIME, __POS) - '0' |
211 | ENDIF |
197 | ENDIF |
212 | ENDIF |
- | |
213 | 198 | ||
214 | DATA_VERS EQU DDATE + (MMOUNTH << 5) + (YYEAR<<9) + 0x8000 ;уже упаковано |
199 | DATA_VERS EQU DDATE + (MMOUNTH << 5) + (YYEAR<<9) + 0x8000 ;уже упаковано |
215 | 200 | ||
216 | FAT_DATE EQU DDATE + (MMOUNTH << 5) + ((2000 + YYEAR - 1980) & 0x7F) << 9 |
201 | FAT_DATE EQU DDATE + (MMOUNTH << 5) + ((2000 + YYEAR - 1980) & 0x7F) << 9 |
217 | FAT_TIME EQU SSECUND / 2 + (MMINUTE << 5) + (HHOUR << 11) |
202 | FAT_TIME EQU SSECUND / 2 + (MMINUTE << 5) + (HHOUR << 11) |
Line 309... | Line 294... | ||
309 | ENDM |
294 | ENDM |
310 | 295 | ||
311 | ; выравнивание до сектора с учетом адреса компиляции |
296 | ; выравнивание до сектора с учетом адреса компиляции |
312 | DALIGN MACRO ADDRESS |
297 | DALIGN MACRO ADDRESS |
313 | IF LOW(ADDRESS) |
298 | IF LOW (ADDRESS) |
314 | DB LOW (-$)+LOW(ADDRESS) DUP(0) |
299 | DB LOW (LOW (-$)+LOW(ADDRESS)) DUP(0) |
315 | ELSE |
300 | ELSE |
316 | DB LOW (-$) DUP (0) |
301 | DB LOW (-$) DUP (0) |
317 | ENDIF |
302 | ENDIF |
318 | ENDM |
303 | ENDM |
319 | 304 | ||
Line 334... | Line 319... | ||
334 | WINHDR MACRO X,Y,V,H,CWIN,CCUR,FLAGS,NUMPKT,TEKPKT,NUMKOL, \ |
319 | WINHDR MACRO X,Y,V,H,CWIN,CCUR,FLAGS,NUMPKT,TEKPKT,NUMKOL, \ |
335 | ADRTXT,ADRPRG,ADRMOUSE,ADRHOTKEY |
320 | ADRTXT,ADRPRG,ADRMOUSE,ADRHOTKEY |
336 | DB X,Y,V,H,CWIN,CCUR,FLAGS,NUMPKT |
321 | DB X,Y,V,H,CWIN,CCUR,FLAGS,NUMPKT |
337 | DW TEKPKT,NUMKOL,ADRTXT,ADRPRG,ADRMOUSE,ADRHOTKEY |
322 | DW TEKPKT,NUMKOL,ADRTXT,ADRPRG,ADRMOUSE,ADRHOTKEY |
338 | ENDM |
323 | ENDM |
- | 324 | ||
- | 325 | ; генерация метки с резервированием места и размера области |
|
- | 326 | _SETVAR MACRO NAME, SIZE |
|
- | 327 | NAME EQU .CURRVAR ; номер имени |
|
- | 328 | IFNB SIZE |
|
- | 329 | .CURRVAR := .CURRVAR + SIZE |
|
- | 330 | .NAME_Size EQU SIZE ; размер |
|
- | 331 | ELSE |
|
- | 332 | .CURRVAR := .CURRVAR + BYTE |
|
- | 333 | .NAME_Size EQU BYTE |
|
- | 334 | ENDIF |
|
- | 335 | .NAME_CurAdr EQU $ ; текущий адрес |
|
- | 336 | ENDM |
|
- | 337 | ||
- | 338 | ; перенос метки назад на указанное число байт |
|
- | 339 | _SUBVAR MACRO SIZE |
|
- | 340 | .CURRVAR := .CURRVAR - SIZE |
|
- | 341 | ENDM |
|
- | 342 | ||
- | 343 | ; перенос метки вперед на указанное число байт |
|
- | 344 | _ADDVAR MACRO SIZE |
|
- | 345 | .CURRVAR := .CURRVAR + SIZE |
|
- | 346 | ENDM |
|
- | 347 | ||
- | 348 | ; инициализация переменной для резервирования указанным числом |
|
- | 349 | ; или 0 при отсуствии второго параметра |
|
- | 350 | _INIT_VAR MACRO START |
|
- | 351 | IFNB START |
|
- | 352 | .CURRVAR := START |
|
- | 353 | ELSE |
|
- | 354 | .CURRVAR := 0 |
|
- | 355 | ENDIF |
|
- | 356 | ENDM |
|
- | 357 | ||
- | 358 | ; выравнивание для генерации меток на границу 256 байт |
|
- | 359 | _SETVAR_ALIGN MACRO |
|
- | 360 | .CURRVAR := .CURRVAR + 0x100 - (.CURRVAR & 0xFF) |
|
- | 361 | ENDM |