Subversion Repositories pentevo

Rev

Rev 841 | Rev 961 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ;LAST UPDATE: 21.03.2020 savelij
  3.  
  4. ;автоопределение кодировки работает неправильно
  5.  
  6.                 RELAXED ON
  7.                 CPU Z80UNDOC
  8.  
  9. BUILD_DEBUG     EQU 0
  10. REZIDENT        ;включение резидента в сборку
  11.  
  12. DZ              MACRO DEFZ
  13.                 DB DEFZ,0
  14.                 ENDM
  15.  
  16. DC              MACRO DEFC
  17.                 IF STRLEN(DEFC)>1
  18.                 DB SUBSTR(DEFC,0,STRLEN(DEFC)-1)
  19.                 ENDIF
  20.                 IF STRLEN(DEFC)>0
  21.                 DB CHARFROMSTR(DEFC,STRLEN(DEFC)-1)|80H
  22.                 ENDIF
  23.                 ENDM
  24.  
  25. SUM_HOB         MACRO STR,AA,BB,CC
  26.                 DB STR
  27.                 DW AA
  28.                 DW BB
  29.                 DB 0
  30.                 DB CC
  31. $$I := 0
  32. $$S := 0
  33.                 REPT 9
  34. $$N := CHARFROMSTR (STR,STRLEN(STR)+$$S-9)
  35. $$I := ($$I+$$S+$$N+($$N*256))&0XFFFF
  36. $$S := $$S+1
  37.                 ENDM
  38. $$I := ($$I+$$S+LOW (AA)+(LOW (AA)*0X100))&0XFFFF
  39. $$S := $$S+1
  40. $$I := ($$I+$$S+HIGH (AA)+(HIGH (AA)*0X100))&0XFFFF
  41. $$S := $$S+1
  42. $$I := ($$I+$$S+LOW (BB)+(LOW (BB)*0X100))&0XFFFF
  43. $$S := $$S+1
  44. $$I := ($$I+$$S+HIGH (BB)+(HIGH (BB)*0X100))&0XFFFF
  45. $$S := $$S+1
  46. $$I := ($$I+$$S+LOW (CC)+(LOW (CC)*0X100))&0XFFFF
  47. $$S := $$S+1
  48. $$I := ($$I+$$S+HIGH (CC)+(HIGH (CC)*0X100))&0XFFFF
  49. $$S := $$S+1
  50.                 DW $$I
  51.                 ENDM
  52.  
  53. DUPL            MACRO LEN,FILL
  54. DUPL:
  55. $$N             EQU (LEN) / 1024
  56. $$M             EQU (LEN) # 1024
  57.                 REPT $$N
  58.                 DB 1024 DUP(FILL)
  59.                 ENDM
  60.                 IF $$M <> 0
  61.                 IFB FILL
  62.                 DB $$M DUP(0)
  63.                 ELSE
  64.                 DB $$M DUP(FILL)
  65.                 ENDIF
  66.                 ENDIF
  67.                 ENDM
  68.  
  69. HIGH            FUNCTION X,((X >> 8) & 0XFF)
  70. LOW             FUNCTION X,(X & 0XFF)
  71.  
  72. ROMCALL         MACRO ADR,PAGE
  73.                 RST 0X30
  74.                 DW ADR
  75.                 DB PAGE
  76.                 ENDM
  77.  
  78. RAMCALL         MACRO ADR,PAGE
  79.                 RST 0X20
  80.                 DW ADR
  81.                 DB PAGE
  82.                 ENDM
  83.  
  84. ATMPORT         MACRO PORT,BYTE
  85.                 LD BC,PORT
  86.         IF BYTE = 0
  87.                 XOR A
  88.         ELSE
  89.                 LD A,BYTE
  90.         ENDIF
  91.                 OUT (C),A
  92.                 ENDM
  93.  
  94. EVOPORT         MACRO PORT,BYTE
  95.                 LD BC,PORT
  96.         IF BYTE = 0
  97.                 XOR A
  98.         ELSE
  99.                 LD A,BYTE
  100.         ENDIF
  101.                 OUT (C),A
  102.                 ENDM
  103.  
  104. PEC_ON          MACRO BYTE
  105.                 IN A,(PEVO_CONF)
  106.                 OR BYTE
  107.                 OUT (PEVO_CONF),A
  108.                 ENDM
  109.  
  110. PEC_OFF         MACRO BYTE
  111.                 IN A,(PEVO_CONF)
  112.                 AND BYTE!0XFF
  113.                 OUT (PEVO_CONF),A
  114.                 ENDM
  115.  
  116. READ_7FFD       MACRO
  117.                 LD A,HIGH (RD_7FFD)
  118.                 IN A,(LOW (RD_7FFD))
  119.                 ENDM
  120.  
  121. SIZEDATE        EQU STRLEN (DATE)
  122. SIZETIME        EQU STRLEN (TIME)
  123.  
  124.                 IF SIZEDATE=10
  125. MMOUNTH         EQU (CHARFROMSTR (DATE,0)-'0')*10+(CHARFROMSTR (DATE,1)-'0')
  126. DDATE           EQU (CHARFROMSTR (DATE,3)-'0')*10+(CHARFROMSTR (DATE,4)-'0')
  127. YYEAR           EQU (CHARFROMSTR (DATE,8)-'0')*10+(CHARFROMSTR (DATE,9)-'0')
  128.                 ELSEIF SIZEDATE=8
  129. MMOUNTH         EQU (CHARFROMSTR (DATE,0)-'0')
  130. DDATE           EQU (CHARFROMSTR (DATE,2)-'0')
  131. YYEAR           EQU (CHARFROMSTR (DATE,6)-'0')*10+(CHARFROMSTR (DATE,7)-'0')
  132.                 ELSEIF (CHARFROMSTR (DATE,1))=0X2F
  133. MMOUNTH         EQU (CHARFROMSTR (DATE,0)-'0')
  134. DDATE           EQU (CHARFROMSTR (DATE,2)-'0')*10+(CHARFROMSTR (DATE,3)-'0')
  135. YYEAR           EQU (CHARFROMSTR (DATE,7)-'0')*10+(CHARFROMSTR (DATE,8)-'0')
  136.                 ELSE
  137. MMOUNTH         EQU (CHARFROMSTR (DATE,0)-'0')*10+(CHARFROMSTR (DATE,1)-'0')
  138. DDATE           EQU (CHARFROMSTR (DATE,3)-'0')
  139. YYEAR           EQU (CHARFROMSTR (DATE,7)-'0')*10+(CHARFROMSTR (DATE,8)-'0')
  140.                 ENDIF
  141.  
  142.                 IF SIZETIME=7
  143. HHOUR           EQU (CHARFROMSTR (TIME,0)-'0')
  144. MMINUTE         EQU (CHARFROMSTR (TIME,2)-'0')*10+(CHARFROMSTR (TIME,3)-'0')
  145. SSECUND         EQU (CHARFROMSTR (TIME,5)-'0')*10+(CHARFROMSTR (TIME,6)-'0')
  146.                 ELSE
  147. HHOUR           EQU (CHARFROMSTR (TIME,0)-'0')*10+(CHARFROMSTR (TIME,1)-'0')
  148. MMINUTE         EQU (CHARFROMSTR (TIME,3)-'0')*10+(CHARFROMSTR (TIME,4)-'0')
  149. SSECUND         EQU (CHARFROMSTR (TIME,6)-'0')*10+(CHARFROMSTR (TIME,7)-'0')
  150.                 ENDIF
  151.  
  152. DATA_VERS       EQU DDATE+(MMOUNTH<<5)+(YYEAR<<9)+0X8000                        ;уже упаковано
  153.  
  154. FAT_DATE        EQU DDATE+(MMOUNTH<<5)+((2000+YYEAR-1980)&0x7F)<<9
  155. FAT_TIME        EQU SSECUND/2+(MMINUTE<<5)+(HHOUR<<11)
  156.  
  157. TEXTDATE        MACRO
  158. TDATE           DB ((DDATE/10)+'0'),(DDATE#10)+'0'
  159.                 DB "."
  160. TMOUNTH         DB MMOUNTH/10+'0',MMOUNTH#10+'0'
  161.                 DB ".",CHARFROMSTR (DATE,SIZEDATE-4),CHARFROMSTR (DATE,SIZEDATE-3)
  162.                 DB CHARFROMSTR (DATE,SIZEDATE-2),CHARFROMSTR (DATE,SIZEDATE-1)
  163.                 ENDM
  164.  
  165. RST8            MACRO N1,N2,N3
  166.                 RST 8
  167.                 DB N1
  168.                 IFNB N2
  169.                 DB N2
  170.                 ENDIF
  171.                 IFNB N3
  172.                 DB N3
  173.                 ENDIF
  174.                 ENDM
  175.  
  176. BYTE            EQU 1
  177. WORD            EQU 2
  178. JUMP            EQU 3
  179. DWORD           EQU 4
  180. QWORD           EQU 8
  181.  
  182. BITMASK         MACRO NAME,NUM
  183. B_NAME          EQU NUM
  184. M_NAME          EQU 1<<NUM
  185.                 ENDM
  186.  
  187. SETVAR          MACRO NAME,SIZE
  188. NAME            EQU INITVAR
  189.                 IFNB SIZE
  190. INITVAR := INITVAR+SIZE
  191. NAME_Size       EQU SIZE
  192.                 ELSE
  193. INITVAR := INITVAR+BYTE
  194. NAME_Size       EQU BYTE
  195.                 ENDIF
  196.                 ENDM
  197.  
  198. SUBVAR          MACRO SIZE
  199. INITVAR := INITVAR-SIZE
  200.                 ENDM
  201.  
  202. ADDVAR          MACRO SIZE
  203. INITVAR := INITVAR+SIZE
  204.                 ENDM
  205.  
  206. INIT_VAR        MACRO START
  207.                 IFNB START
  208. INITVAR := START
  209.                 ELSE
  210. INITVAR := 0
  211.                 ENDIF
  212.                 ENDM
  213.  
  214.  
  215. MALIGN          MACRO
  216.         IF LOW($) = 0
  217.                 DUPL (HIGH($) << 8) - $,0
  218.         ELSE
  219.                 DUPL ((HIGH($) + 1) << 8) - $,0
  220.         ENDIF
  221.                 ENDM
  222.  
  223. ; выравнивание до сектора с учетом адреса компиляции
  224. DALIGN          MACRO ADDRESS
  225.         IF LOW(ADDRESS)
  226.                 DB LOW (-$)+LOW(ADDRESS) DUP(0)
  227.         ELSE
  228.                 DB LOW (-$) DUP (0)
  229.         ENDIF
  230.                 ENDM
  231.  
  232. ; преобразование 16 битного числа в текст
  233. WORD2TXT        MACRO WORD
  234. $$DEC1 := (WORD)/10000
  235. $$TMP := WORD-$$DEC1*10000
  236. $$DEC2 := $$TMP/1000
  237. $$TMP := $$TMP-$$DEC2*1000
  238. $$DEC3 := $$TMP/100
  239. $$TMP := $$TMP-$$DEC3*100
  240. $$DEC4 := $$TMP/10
  241. $$TMP := $$TMP-$$DEC4*10
  242. $$DEC5 := $$TMP
  243.         DB $$DEC1+'0',$$DEC2+'0',$$DEC3+'0',$$DEC4+'0',$$DEC5+'0'
  244.                 ENDM
  245.