Subversion Repositories pentevo

Rev

Rev 782 | Rev 803 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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