;LAST UPDATE: 10.03.2013 savelij
RELAXED ON
CPU Z80UNDOC
BUILD_DEBUG EQU 1
DZ MACRO DEFZ
DB DEFZ,0
ENDM
DC MACRO DEFC
IF STRLEN(DEFC)>1
DB SUBSTR(DEFC,0,STRLEN(DEFC)-1)
ENDIF
IF STRLEN(DEFC)>0
DB CHARFROMSTR(DEFC,STRLEN(DEFC)-1)|80H
ENDIF
ENDM
SUM_HOB MACRO STR,AA,BB,CC
DB STR
DW AA
DW BB
DB 0
DB CC
$$I := 0
$$S := 0
REPT 9
$$N := CHARFROMSTR (STR,STRLEN(STR)+$$S-9)
$$I := ($$I+$$S+$$N+($$N*256))&0XFFFF
$$S := $$S+1
ENDM
$$I := ($$I+$$S+LOW (AA)+(LOW (AA)*0X100))&0XFFFF
$$S := $$S+1
$$I := ($$I+$$S+HIGH (AA)+(HIGH (AA)*0X100))&0XFFFF
$$S := $$S+1
$$I := ($$I+$$S+LOW (BB)+(LOW (BB)*0X100))&0XFFFF
$$S := $$S+1
$$I := ($$I+$$S+HIGH (BB)+(HIGH (BB)*0X100))&0XFFFF
$$S := $$S+1
$$I := ($$I+$$S+LOW (CC)+(LOW (CC)*0X100))&0XFFFF
$$S := $$S+1
$$I := ($$I+$$S+HIGH (CC)+(HIGH (CC)*0X100))&0XFFFF
$$S := $$S+1
DW $$I
ENDM
DUPL MACRO LEN,FILL
DUPL:
$$N EQU (LEN) / 1024
$$M EQU (LEN) # 1024
REPT $$N
DB 1024 DUP(FILL)
ENDM
IF $$M <> 0
DB $$M DUP(FILL)
ENDIF
ENDM
HIGH FUNCTION X,((X >> 8) & 0XFF)
LOW FUNCTION X,(X & 0XFF)
PCALL MACRO ADR,PAGE
RST 0X30
DW ADR
DB PAGE
ENDM
EVOPORT MACRO PORT,BYTE
LD BC,PORT
LD A,BYTE
OUT (C),A
ENDM
PEC_ON MACRO BYTE
IN A,(PEVO_CONF)
OR BYTE
OUT (PEVO_CONF),A
ENDM
PEC_OFF MACRO BYTE
IN A,(PEVO_CONF)
AND BYTE!0XFF
OUT (PEVO_CONF),A
ENDM
SIZEDATE EQU STRLEN (DATE)
IF SIZEDATE=10
MMOUNTH EQU (CHARFROMSTR (DATE,0)-0X30)*10+(CHARFROMSTR (DATE,1)-0X30)
DDATE EQU (CHARFROMSTR (DATE,3)-0X30)*10+(CHARFROMSTR (DATE,4)-0X30)
YYEAR EQU (CHARFROMSTR (DATE,8)-0X30)*10+(CHARFROMSTR (DATE,9)-0X30)
ELSEIF SIZEDATE=8
MMOUNTH EQU (CHARFROMSTR (DATE,0)-0X30)
DDATE EQU (CHARFROMSTR (DATE,2)-0X30)
YYEAR EQU (CHARFROMSTR (DATE,6)-0X30)*10+(CHARFROMSTR (DATE,7)-0X30)
ELSEIF (CHARFROMSTR (DATE,1))=0X2F
MMOUNTH EQU (CHARFROMSTR (DATE,0)-0X30)
DDATE EQU (CHARFROMSTR (DATE,2)-0X30)*10+(CHARFROMSTR (DATE,3)-0X30)
YYEAR EQU (CHARFROMSTR (DATE,7)-0X30)*10+(CHARFROMSTR (DATE,8)-0X30)
ELSE
MMOUNTH EQU (CHARFROMSTR (DATE,0)-0X30)*10+(CHARFROMSTR (DATE,1)-0X30)
DDATE EQU (CHARFROMSTR (DATE,3)-0X30)
YYEAR EQU (CHARFROMSTR (DATE,7)-0X30)*10+(CHARFROMSTR (DATE,8)-0X30)
ENDIF
DATA_VERS EQU DDATE+(MMOUNTH<<5)+(YYEAR<<9)+0X8000 ;УЖЕ УПАКОВАНО
TEXTDATE MACRO
IF DDATE<10
TDATE DB DDATE+0X30
ELSE
TDATE DB ((DDATE/10)+0X30),(DDATE#10)+0X30
ENDIF
DB "."
IF MMOUNTH<10
TMOUNTH DB MMOUNTH+0X30
ELSE
TMOUNTH DB MMOUNTH/10+0X30,MMOUNTH#10+0X30
ENDIF
DB ".",CHARFROMSTR (DATE,SIZEDATE-4),CHARFROMSTR (DATE,SIZEDATE-3)
DB CHARFROMSTR (DATE,SIZEDATE-2),CHARFROMSTR (DATE,SIZEDATE-1)
ENDM