Top secrets sources NedoPC pentevo

Rev

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