(root)/rom/macros.a80 – Rev 1120
Rev 1047 |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
| ?url?
; LAST UPDATE: 10.02.2024 savelij
; ¢â®®¯à¥¤¥«¥¨¥ ª®¤¨à®¢ª¨ à ¡®â ¥â ¥¯à ¢¨«ì®
RELAXED ON
CPU Z80UNDOC
BUILD_DEBUG EQU 0
IFDEF DOS_FE
;TESTEMUFDD ; ᡮઠ¤«ï â¥áâ¨à®¢ ¨ï í¬ã«ïâ®à
ENDIF
; ¢áâ ¢ª ⥪á⮢®© áâப¨ á ã«¥¬ ¢ ®ª®ç ¨¨
DZ MACRO DEFZ
DB DEFZ,0
ENDM
; ¢áâ ¢ª ⥪á⮢®© áâப¨ á ãáâ ®¢ª®© 7 ¡¨â ã ¯®á«¥¤¥£® ᨬ¢®«
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
; £¥¥à æ¨ï § £®«®¢ª Hobeta ä ©«
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
IFB FILL
DB $$M DUP(0)
ELSE
DB $$M DUP(FILL)
ENDIF
ENDIF
ENDM
; áâ à訩 ¡ ©â á«®¢
HIGH FUNCTION X,((X >> 8) & 0XFF)
; ¬« ¤è¨© ¡ ©â á«®¢
LOW FUNCTION X,(X & 0XFF)
; ¢ë§®¢ ¯®¤¯à®£à ¬¬ë ¢ ¤à㣮© áâà ¨æ¥ ROM
ROMCALL MACRO ADR,PAGE
RST 0X30
DW ADR
DB PAGE
ENDM
; ¢ë§®¢ ¯®¤¯à®£à ¬¬ë ¢ ¤à㣮© áâà ¨æ¥ RAM
RAMCALL MACRO ADR,PAGE
RST 0X20
DW ADR
DB PAGE
ENDM
; § ¯¨áì ¢ ¯®àâ ATM Turbo 2+
ATMPORT MACRO PORT,BYTE
LD BC,PORT
IF BYTE = 0
XOR A
ELSE
LD A,BYTE
ENDIF
OUT (C),A
ENDM
; § ¯¨áì ¢ ¯®àâ à áè¨à¥ëå ¯®à⮢ PentEvo
EVOPORT MACRO PORT,BYTE
LD BC,PORT
IF BYTE = 0
XOR A
ELSE
LD A,BYTE
ENDIF
OUT (C),A
ENDM
; ¢ª«î票¥ ¡¨â (¡¨â®¢) ¢ ¯®àâã 0xBF
PEC_ON MACRO BYTE
IN A,(PEVO_CONF)
OR BYTE
OUT (PEVO_CONF),A
ENDM
; á¡à®á ¡¨â (¡¨â®¢) ¢ ¯®àâã 0xBF
PEC_OFF MACRO BYTE
IN A,(PEVO_CONF)
AND BYTE!0XFF
OUT (PEVO_CONF),A
ENDM
; ç⥨¥ ¯®àâ 0x7FFD
READ_7FFD MACRO
LD A,HIGH (RD_7FFD)
IN A,(LOW (RD_7FFD))
ENDM
; £¥¥à æ¨ï ¤ âë
; LINUX DATE: "10/07/21"
; WIN32 DATE: "10/7/2021"
SIZEDATE EQU STRLEN (DATE)
__POS := 0
; ¨§¢«¥ç¥¨¥ ¬¥áïæ
MMOUNTH := (CHARFROMSTR (DATE,__POS) - '0')
__POS := __POS + 1
IF (CHARFROMSTR (DATE,__POS)) > '/'
MMOUNTH := MMOUNTH * 10 + (CHARFROMSTR (DATE,__POS)) -'0'
__POS := __POS + 1
ENDIF
__POS := __POS + 1
; ¨§¢«¥ç¥¨¥ ¤ âë
DDATE := (CHARFROMSTR (DATE,__POS) - '0')
__POS := __POS + 1
IF (CHARFROMSTR (DATE,__POS)) > '/'
DDATE := DDATE * 10 + (CHARFROMSTR (DATE,__POS)) - '0'
__POS := __POS + 1
ENDIF
__POS := __POS + 1
; ¨§¢«¥ç¥¨¥ £®¤
YYEAR := (CHARFROMSTR (DATE,__POS) - '0')
__POS := __POS + 1
WHILE (CHARFROMSTR (DATE,__POS)) > '/'
YYEAR := YYEAR * 10 + (CHARFROMSTR (DATE,__POS)) - '0'
__POS := __POS + 1
IF __POS > SIZEDATE
EXITM
ENDIF
ENDM
IF YYEAR > 99
YYEAR := YYEAR - 2000
ENDIF
; £¥¥à æ¨ï ¢à¥¬¥¨
; "9:28:8"
SIZETIME EQU STRLEN (TIME)
__POS := 0
; ¨§¢«¥ç¥¨¥ ç á
HHOUR := CHARFROMSTR (TIME, __POS) - '0'
__POS := __POS + 1
IF (CHARFROMSTR (TIME,__POS)) <= '9'
HHOUR := HHOUR * 10 + CHARFROMSTR (TIME, __POS) - '0'
__POS := __POS + 1
ENDIF
__POS := __POS + 1
; ¨§¢«¥ç¥¨¥ ¬¨ãâ
MMINUTE := CHARFROMSTR (TIME, __POS) - '0'
__POS := __POS + 1
IF (CHARFROMSTR (TIME,__POS)) <= '9'
MMINUTE := MMINUTE * 10 + CHARFROMSTR (TIME, __POS) - '0'
__POS := __POS + 1
ENDIF
__POS := __POS + 1
; ¨§¢«¥ç¥¨¥ ᥪã¤
SSECUND := CHARFROMSTR (TIME, __POS) - '0'
__POS := __POS + 1
IF __POS < SIZETIME
SSECUND := SSECUND * 10 + CHARFROMSTR (TIME, __POS) - '0'
ENDIF
DATA_VERS EQU DDATE + (MMOUNTH << 5) + (YYEAR<<9) + 0x8000 ;㦥 㯠ª®¢ ®
FAT_DATE EQU DDATE + (MMOUNTH << 5) + ((2000 + YYEAR - 1980) & 0x7F) << 9
FAT_TIME EQU SSECUND / 2 + (MMINUTE << 5) + (HHOUR << 11)
; £¥¥à æ¨ï ¤ âë ¨ ¢à¥¬¥¨ ¢ ⥪á⮢®¬ ¢¨¤¥
TEXTDATE MACRO
DB (DDATE / 10) + '0', (DDATE # 10) + '0', '.'
DB MMOUNTH / 10 + '0', MMOUNTH # 10 + '0', '.'
DB CHARFROMSTR (DATE, SIZEDATE - 4), CHARFROMSTR (DATE, SIZEDATE - 3)
DB CHARFROMSTR (DATE, SIZEDATE - 2), CHARFROMSTR (DATE, SIZEDATE - 1)
ENDM
TEXTTIME MACRO
DB HHOUR/10 + '0', HHOUR#10 + '0', '.'
DB MMINUTE/10 + '0', MMINUTE#10 + '0', '.'
DB SSECUND/10 + '0', SSECUND#10 + '0'
ENDM
; ¢ë§®¢ RST 8 á ¯ à ¬¥âà ¬¨
RST8 MACRO N1,N2,N3
RST 8
DB N1
IFNB N2
DB N2
ENDIF
IFNB N3
DB N3
ENDIF
ENDM
BYTE EQU 1
WORD EQU 2
JUMP EQU 3
DWORD EQU 4
QWORD EQU 8
BITMASK MACRO NAME,NUM
B_NAME EQU NUM
M_NAME EQU 1<<NUM
ENDM
; £¥¥à æ¨ï ¬¥âª¨ á १¥à¢¨à®¢ ¨¥¬ ¬¥áâ ¨ à §¬¥à ®¡« áâ¨
SETVAR MACRO NAME,SIZE
NAME EQU INITVAR ; ®¬¥à ¨¬¥¨
IFNB SIZE
INITVAR := INITVAR+SIZE
NAME_Size EQU SIZE ; à §¬¥à
ELSE
INITVAR := INITVAR+BYTE
NAME_Size EQU BYTE
ENDIF
NAME_CurAdr EQU $ ; ⥪ã騩 ¤à¥á
ENDM
; ¯¥à¥®á ¬¥âª¨ § ¤ 㪠§ ®¥ ç¨á«® ¡ ©â
SUBVAR MACRO SIZE
INITVAR := INITVAR-SIZE
ENDM
; ¯¥à¥®á ¬¥âª¨ ¢¯¥à¥¤ 㪠§ ®¥ ç¨á«® ¡ ©â
ADDVAR MACRO SIZE
INITVAR := INITVAR+SIZE
ENDM
; ¨¨æ¨ «¨§ æ¨ï ¯¥à¥¬¥®© ¤«ï १¥à¢¨à®¢ ¨ï 㪠§ ë¬ ç¨á«®¬
; ¨«¨ 0 ¯à¨ ®âáãá⢨¨ ¢â®à®£® ¯ à ¬¥âà
INIT_VAR MACRO START
IFNB START
INITVAR := START
ELSE
INITVAR := 0
ENDIF
ENDM
; ¢ëà ¢¨¢ ¨¥ ¤«ï £¥¥à 樨 ¬¥â®ª £à ¨æã 256 ¡ ©â
SETVAR_ALIGN MACRO
INITVAR := INITVAR + 0x100 - (INITVAR & 0xFF)
ENDM
; ¢ëà ¢¨¢ ¨¥ ⥪ã饣® ¤à¥á £à ¨æã 256 ¡ ©â
ALIGN MACRO BYTES,FILL
IFNB
DB BYTES - ($ & (BYTES - 1)) DUP (0)
ELSE
DB BYTES - ($ & (BYTES - 1)) DUP (FILL)
ENDIF
ENDM
MALIGN MACRO
IF LOW($) = 0
DUPL (HIGH($) << 8) - $,0
ELSE
DUPL ((HIGH($) + 1) << 8) - $,0
ENDIF
ENDM
; ¢ëà ¢¨¢ ¨¥ ¤® ᥪâ®à á ãç¥â®¬ ¤à¥á ª®¬¯¨«ï樨
DALIGN MACRO ADDRESS
IF LOW (ADDRESS)
DB LOW (LOW (-$)+LOW(ADDRESS)) DUP(0)
ELSE
DB LOW (-$) DUP (0)
ENDIF
ENDM
; ¯à¥®¡à §®¢ ¨¥ 16 ¡¨â®£® ç¨á« ¢ ⥪áâ
WORD2TXT MACRO WORD
$$DEC1 := (WORD)/10000
$$TMP := WORD-$$DEC1*10000
$$DEC2 := $$TMP/1000
$$TMP := $$TMP-$$DEC2*1000
$$DEC3 := $$TMP/100
$$TMP := $$TMP-$$DEC3*100
$$DEC4 := $$TMP/10
$$TMP := $$TMP-$$DEC4*10
$$DEC5 := $$TMP
DB $$DEC1+'0',$$DEC2+'0',$$DEC3+'0',$$DEC4+'0',$$DEC5+'0'
ENDM
WINHDR MACRO X,Y,V,H,CWIN,CCUR,FLAGS,NUMPKT,TEKPKT,NUMKOL, \
ADRTXT,ADRPRG,ADRMOUSE,ADRHOTKEY
DB X,Y,V,H,CWIN,CCUR,FLAGS,NUMPKT
DW TEKPKT,NUMKOL,ADRTXT,ADRPRG,ADRMOUSE,ADRHOTKEY
ENDM
; £¥¥à æ¨ï ¬¥âª¨ á १¥à¢¨à®¢ ¨¥¬ ¬¥áâ ¨ à §¬¥à ®¡« áâ¨
_SETVAR MACRO NAME, SIZE
NAME EQU .CURRVAR ; ®¬¥à ¨¬¥¨
IFNB SIZE
.CURRVAR := .CURRVAR + SIZE
.NAME_Size EQU SIZE ; à §¬¥à
ELSE
.CURRVAR := .CURRVAR + BYTE
.NAME_Size EQU BYTE
ENDIF
.NAME_CurAdr EQU $ ; ⥪ã騩 ¤à¥á
ENDM
; ¯¥à¥®á ¬¥âª¨ § ¤ 㪠§ ®¥ ç¨á«® ¡ ©â
_SUBVAR MACRO SIZE
.CURRVAR := .CURRVAR - SIZE
ENDM
; ¯¥à¥®á ¬¥âª¨ ¢¯¥à¥¤ 㪠§ ®¥ ç¨á«® ¡ ©â
_ADDVAR MACRO SIZE
.CURRVAR := .CURRVAR + SIZE
ENDM
; ¨¨æ¨ «¨§ æ¨ï ¯¥à¥¬¥®© ¤«ï १¥à¢¨à®¢ ¨ï 㪠§ ë¬ ç¨á«®¬
; ¨«¨ 0 ¯à¨ ®âáãá⢨¨ ¢â®à®£® ¯ à ¬¥âà
_INIT_VAR MACRO START
IFNB START
.CURRVAR := START
ELSE
.CURRVAR := 0
ENDIF
ENDM
; ¢ëà ¢¨¢ ¨¥ ¤«ï £¥¥à 樨 ¬¥â®ª £à ¨æã 256 ¡ ©â
_SETVAR_ALIGN MACRO
.CURRVAR := .CURRVAR + 0x100 - (.CURRVAR & 0xFF)
ENDM