Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 14.10.2018 savelij
  3.  
  4. ;автоопределение кодировки работает неправильно
  5.  
  6.                 RELAXED ON
  7.                 CPU Z80UNDOC
  8.  
  9. BUILD_DEBUG     EQU 0
  10. ;TMP_FITCHA     EQU 1
  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. PCALL           MACRO ADR,PAGE
  73.                 RST 0X30
  74.                 DW ADR
  75.                 DB PAGE
  76.                 ENDM
  77.  
  78. ATMPORT         MACRO PORT,BYTE
  79.                 LD BC,PORT
  80.                 LD A,BYTE
  81.                 OUT (C),A
  82.                 ENDM
  83.  
  84. EVOPORT         MACRO PORT,BYTE
  85.                 LD BC,PORT
  86.                 LD A,BYTE
  87.                 OUT (C),A
  88.                 ENDM
  89.  
  90. PEC_ON          MACRO BYTE
  91.                 IN A,(PEVO_CONF)
  92.                 OR BYTE
  93.                 OUT (PEVO_CONF),A
  94.                 ENDM
  95.  
  96. PEC_OFF         MACRO BYTE
  97.                 IN A,(PEVO_CONF)
  98.                 AND BYTE!0XFF
  99.                 OUT (PEVO_CONF),A
  100.                 ENDM
  101.  
  102. READ_7FFD       MACRO
  103.                 LD A,HIGH (RD_7FFD)
  104.                 IN A,(LOW (RD_7FFD))
  105.                 ENDM
  106.  
  107. SIZEDATE        EQU STRLEN (DATE)
  108. SIZETIME        EQU STRLEN (TIME)
  109.  
  110.                 IF SIZEDATE=10
  111. MMOUNTH         EQU (CHARFROMSTR (DATE,0)-'0')*10+(CHARFROMSTR (DATE,1)-'0')
  112. DDATE           EQU (CHARFROMSTR (DATE,3)-'0')*10+(CHARFROMSTR (DATE,4)-'0')
  113. YYEAR           EQU (CHARFROMSTR (DATE,8)-'0')*10+(CHARFROMSTR (DATE,9)-'0')
  114.                 ELSEIF SIZEDATE=8
  115. MMOUNTH         EQU (CHARFROMSTR (DATE,0)-'0')
  116. DDATE           EQU (CHARFROMSTR (DATE,2)-'0')
  117. YYEAR           EQU (CHARFROMSTR (DATE,6)-'0')*10+(CHARFROMSTR (DATE,7)-'0')
  118.                 ELSEIF (CHARFROMSTR (DATE,1))=0X2F
  119. MMOUNTH         EQU (CHARFROMSTR (DATE,0)-'0')
  120. DDATE           EQU (CHARFROMSTR (DATE,2)-'0')*10+(CHARFROMSTR (DATE,3)-'0')
  121. YYEAR           EQU (CHARFROMSTR (DATE,7)-'0')*10+(CHARFROMSTR (DATE,8)-'0')
  122.                 ELSE
  123. MMOUNTH         EQU (CHARFROMSTR (DATE,0)-'0')*10+(CHARFROMSTR (DATE,1)-'0')
  124. DDATE           EQU (CHARFROMSTR (DATE,3)-'0')
  125. YYEAR           EQU (CHARFROMSTR (DATE,7)-'0')*10+(CHARFROMSTR (DATE,8)-'0')
  126.                 ENDIF
  127.  
  128.                 IF SIZETIME=7
  129. HHOUR           EQU (CHARFROMSTR (TIME,0)-'0')
  130. MMINUTE         EQU (CHARFROMSTR (TIME,2)-'0')*10+(CHARFROMSTR (TIME,3)-'0')
  131. SSECUND         EQU (CHARFROMSTR (TIME,5)-'0')*10+(CHARFROMSTR (TIME,6)-'0')
  132.                 ELSE
  133. HHOUR           EQU (CHARFROMSTR (TIME,0)-'0')*10+(CHARFROMSTR (TIME,1)-'0')
  134. MMINUTE         EQU (CHARFROMSTR (TIME,3)-'0')*10+(CHARFROMSTR (TIME,4)-'0')
  135. SSECUND         EQU (CHARFROMSTR (TIME,6)-'0')*10+(CHARFROMSTR (TIME,7)-'0')
  136.                 ENDIF
  137.  
  138. DATA_VERS       EQU DDATE+(MMOUNTH<<5)+(YYEAR<<9)+0X8000                        ;уже упаковано
  139.  
  140. FAT_DATE        EQU DDATE+(MMOUNTH<<5)+((2000+YYEAR-1980)&0x7F)<<9
  141. FAT_TIME        EQU SSECUND/2+(MMINUTE<<5)+(HHOUR<<11)
  142.  
  143. TEXTDATE        MACRO
  144. TDATE           DB ((DDATE/10)+'0'),(DDATE#10)+'0'
  145.                 DB "."
  146. TMOUNTH         DB MMOUNTH/10+'0',MMOUNTH#10+'0'
  147.                 DB ".",CHARFROMSTR (DATE,SIZEDATE-4),CHARFROMSTR (DATE,SIZEDATE-3)
  148.                 DB CHARFROMSTR (DATE,SIZEDATE-2),CHARFROMSTR (DATE,SIZEDATE-1)
  149.                 ENDM
  150.  
  151. RST8            MACRO N1,N2,N3
  152.                 RST 8
  153.                 DB N1
  154.                 IFNB N2
  155.                 DB N2
  156.                 ENDIF
  157.                 IFNB N3
  158.                 DB N3
  159.                 ENDIF
  160.                 ENDM
  161.  
  162. BYTE            EQU 1
  163. WORD            EQU 2
  164. JUMP            EQU 3
  165. DWORD           EQU 4
  166. QWORD           EQU 8
  167.  
  168. BITMASK         MACRO NAME,NUM
  169. B_NAME          EQU NUM
  170. M_NAME          EQU 1<<NUM
  171.                 ENDM
  172.  
  173. SETVAR          MACRO NAME,SIZE
  174. NAME            EQU INITVAR
  175.                 IFNB SIZE
  176. INITVAR := INITVAR+SIZE
  177. NAME_Size       EQU SIZE
  178.                 ELSE
  179. INITVAR := INITVAR+BYTE
  180. NAME_Size       EQU BYTE
  181.                 ENDIF
  182.                 ENDM
  183.  
  184. SUBVAR          MACRO SIZE
  185. INITVAR := INITVAR-SIZE
  186.                 ENDM
  187.  
  188. ADDVAR          MACRO SIZE
  189. INITVAR := INITVAR+SIZE
  190.                 ENDM
  191.  
  192. INIT_VAR        MACRO START
  193.                 IFNB START
  194. INITVAR := START
  195.                 ELSE
  196. INITVAR := 0
  197.                 ENDIF
  198.                 ENDM
  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. GETADR          MACRO NAME
  208. dIgIt1 := CHARFROMSTR("\{NAME_DIGIT >> 12}",0)
  209. dIgIt2 := CHARFROMSTR("\{NAME_DIGIT >> 8}",0)
  210. dIgIt3 := CHARFROMSTR("\{NAME_DIGIT >> 4}",0)
  211. dIgIt4 := CHARFROMSTR("\{NAME_DIGIT & 0X0F}",0)
  212. dIgIt0 := "\{dIgIt1}\{dIgIt2}\{dIgIt3}\{dIgIt4}"
  213. NAME_{dIgIt0}   EQU $-2
  214. NAME_DIGIT := NAME_DIGIT+1
  215.         IF NAME_DIGITMAX < NAME_DIGIT
  216. NAME_DIGITMAX := NAME_DIGITMAX + 1
  217.         ENDIF
  218.                 ENDM
  219.  
  220. PUTADR          MACRO NAME
  221. NAME_TMPDIGIT := 0
  222.                 REPT NAME_DIGITMAX
  223. dIgIt1 := CHARFROMSTR("\{NAME_TMPDIGIT >> 12}",0)
  224. dIgIt2 := CHARFROMSTR("\{NAME_TMPDIGIT >> 8}",0)
  225. dIgIt3 := CHARFROMSTR("\{NAME_TMPDIGIT >> 4}",0)
  226. dIgIt4 := CHARFROMSTR("\{NAME_TMPDIGIT & 0X0F}",0)
  227. dIgIt0 := "\{dIgIt1}\{dIgIt2}\{dIgIt3}\{dIgIt4}"
  228.                 DW NAME_{dIgIt0}
  229. NAME_TMPDIGIT := NAME_TMPDIGIT+1
  230.                 ENDM
  231.                 ENDM
  232.