; LAST UPDATE: 29.06.2025 savelij PAGE0 EQU 0x82 ;WIN 0x0000-0x3FFF PAGE1 EQU 0xA2 ;WIN 0x4000-0x7FFF PAGE2 EQU 0xC2 ;WIN 0x8000-0xBFFF PAGE3 EQU 0xE2 ;WIN 0xC000-0xFFFF ADRDIR EQU 0xC000 DIRPAGE EQU 0 DAY EQU 19 MONTH EQU 05 YEAR EQU 2002 NAM EQU 0 EXT EQU 8 ATR EQU 11 CLU3 EQU 20 CLU4 EQU 21 TIM1 EQU 22 TIM2 EQU 23 DAT1 EQU 24 DAT2 EQU 25 CLU1 EQU 26 CLU2 EQU 27 LEN1 EQU 28 LEN2 EQU 29 LEN3 EQU 30 LEN4 EQU 31 POS1 EQU 32 POS2 EQU 33 POS3 EQU 34 POS4 EQU 35 DIRCLU1 EQU 36 DIRCLU2 EQU 37 HND1 EQU 38 HND2 EQU 39 FDRV EQU 40 AMODE EQU 41 FTASK EQU 42 ;ACCESS MODE: ; 00 - READ/WRITE ; 01 - READ ; 02 - WRITE ;File Manipulator (FM) FM_BUF DB ". " ;+00 NAME DB " " ;+08 EXT DB 0x10 ;+11 ATTRIBUT DB 0,0,0,0,0,0,0,0,0,0 ;+12 RESERVED DW 0x0000 ;+22 TIME DW 0x0000 ;+24 DATE DW 0x0000 ;+26 START CLUSTER DW 0x0000,0x0000 ;+28 SIZE FILE DW 0x0000,0x0000 ;+32 FILE POSITION (FP) DW 0x0000 ;+36 DIRECTORY CLUSTER DW 0x0000 ;+38 HANDLE NUMBER DB 0x00 ;+40 DRIVE OR CURRENT DB 0x00 ;+41 ACCESS MODE DB 0x00 ;+42 TASK DB 0x00 ;+43 EMPTY END_FM ;End of FM ; DS 44*2 FM_SIZE EQU END_FM-FM_BUF SET_FM PUSH DE INC A LD IY,FM_BUF-FM_SIZE LD DE,FM_SIZE SET_FM1 ADD IY,DE DEC A JR NZ,SET_FM1 POP DE LD A,(IY+0) OR A LD A,0 RET NZ LD A,5 SCF RET ; HL:IX - OFFSET POINTER ; A - FILE MANIPULATOR MOVE_FP CALL SET_FM RET C INC B DEC B JP Z,MOVE_FA DEC B JP Z,MOVE_FB DEC B JP Z,MOVE_FC LD A,1 SCF RET ;from Start File MOVE_FA LD BC,0 LD DE,0 JR MOVE_F1 ;from End File MOVE_FC LD C,(IY+28) LD B,(IY+29) LD E,(IY+30) LD D,(IY+31) JR MOVE_F1 ;from Current Position MOVE_FB LD C,(IY+32) LD B,(IY+33) LD E,(IY+34) LD D,(IY+35) MOVE_F1 ADD IX,BC ADC HL,DE LD D,IXH LD E,IXL LD (IY+32),E LD (IY+33),D LD (IY+34),L LD (IY+35),H XOR A RET ;FP COMPARE ; CY - FILE POINTER > SIZE ; NC - FILE POINTER < SIZE MOVE_CP LD L,(IY+28) LD H,(IY+29) LD E,(IY+32) LD D,(IY+33) AND A SBC HL,DE LD L,(IY+30) LD H,(IY+31) LD E,(IY+34) LD D,(IY+35) SBC HL,DE RET CHANGEDISK: LD A,(CDDRIVE) ; LD C,BIOS.DRV_RESET ; RST ToBIOS SPBIOS BIOSF.DRV_RESET JR NC,.cont ; CP ERR_DRV.ATAPI_UnitAttention;BIOS.Error.ATAPI.UnitAttention JR Z,.drv_change ; CP ERR_DRV.ATAPI_NotReady;BIOS.Error.ATAPI.NotReady SCF RET NZ LD A,ERR_DSS.NOT_READY;DSS_Error.sys.NOT_READY RET ; .drv_change: LD A,(CDDRIVE) CALL SAVE_MEDIA_CHANGED ; .cont: CALL INITDISK RET C AND A RET ; NDISK11 CP BIOS.Error.ATAPI.NotReady ; SCF ; RET NZ ; ; ; LD A,DSS_Error.sys.NOT_READY ; RET INITDISK: LD A,DIRPAGE CALL BANK PUSH AF LD B,4 CD_I_LP PUSH BC LD DE,ADRDIR LD A,(CDDRIVE) LD HL,0x0000 LD IX,0x0010 ; LD BC,1*256 + BIOS.DRV_READ ; RST ToBIOS SPBIOS BIOSF.DRV_READ,1 POP BC JR NC,CD_I_OK DJNZ CD_I_LP UNKCD POP AF OUT (PAGE3),A LD A,ERR_DSS.UNKNOWN_FORMAT;DSS_Error.sys.UNKNOWN_FORMAT SCF RET CD_I_OK LD HL,ADRDIR LD A,(HL) INC HL CP 0x01 JR NZ,UNKCD LD A,(HL) INC HL CP "C" JR NZ,UNKCD LD A,(HL) INC HL CP "D" JR NZ,UNKCD LD HL,ADRDIR+0x009E LD DE,ROOTDIR LDI LDI LDI LDI LD HL,ADRDIR+0x00A6 LD DE,ROOTLEN LDI LDI LDI LDI POP AF OUT (PAGE3),A ; LD HL,0 ; LD (FATCASH),HL XOR A RET ;---------------------------------------------- OPEN LD (ACCESS),A CALL GETWORD RET C LD HL,TMPNAME LD DE,MASKARE CALL MASK RET C OPENEXE CALL SEARCH RET C LD A,1 ;; CALL SET_FM ;; CALL GET_FM RET C LD A,C EX AF,AF' EXX LD (IY+HND1),E LD (IY+HND2),D EXX LD D,IYH LD E,IYL LD HL,HANDBUF LD BC,0x0020 LDIR LD A,(ACCESS) LD (IY+AMODE),A ;; LD A,(TASK) XOR A ;; LD (IY+FTASK),A XOR A LD (IY+POS1),A LD (IY+POS2),A LD (IY+POS3),A LD (IY+POS4),A ;; LD A,(DRIVE) ; XOR A ;; ; LD (IY+FDRV),A LD HL,FM_BUF+CLU1 LD E,(HL) INC HL LD D,(HL) LD (IY+DIRCLU1),E LD (IY+DIRCLU2),D LD C,(IY+CLU1) LD B,(IY+CLU2) LD E,(IY+CLU3) LD D,(IY+CLU4) EX DE,HL PUSH BC POP IX LD C,(IY+LEN1) LD B,(IY+LEN2) LD E,(IY+LEN3) LD D,(IY+LEN4) EX AF,AF' AND A RET ;RET ; HL:IX - SECTOR ; DE:BC - SIZE IN BYTES ;PATH0 DEFW 0x0000 ACCESS DEFB 0x00 HANDBUF DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 WRT_HND LD A,DIRPAGE CALL BANK PUSH AF LD IX,ADRDIR EXX LD DE,0 EXX WRT_HN1 LD A,(IX+00) OR A JR Z,WRT_HN2 CP 0xE5 JR Z,WRT_HN2 LD BC,0x0020 ADD IX,BC JR NC,WRT_HN1 POP AF OUT (PAGE3),A LD A,9 SCF RET WRT_HN2 LD D,IXH LD E,IXL LD HL,HANDBUF LD BC,0x0020 LDIR POP AF OUT (PAGE3),A LD HL,ADRDIR LD BC,(DIRSIZE) DEC BC ADD HL,BC AND A SBC HL,DE RET NC LD HL,(DIRSIZE) LD BC,0x0020 ADD HL,BC LD (DIRSIZE),HL AND A RET GETNAME LD BC,0x08FF GETN1 LD A,(HL) CP " " JR NZ,GETN3 GETN2 INC HL DJNZ GETN2 JR GETN4 GETN3 LDI DJNZ GETN1 GETN4 LD A,(HL) CP " " LD A,"." JR NZ,GETN5 LD A,0x00 GETN5 LD (DE),A INC DE RET Z LD B,0x03 GETN6 LD A,(HL) CP " " RET Z LDI XOR A LD (DE),A DJNZ GETN6 RET DTABUF DEFW 0x0000 CURHND DEFW 0x0000 NO_NEXT DEFB 0x00 FNDMODE DEFB 0x00 F_FIRST LD (ACCESS),A LD (DTABUF),DE LD A,B LD (FNDMODE),A PUSH HL CALL LOADDIR POP HL CALL GETWORD RET C LD HL,TMPNAME LD DE,MASKARE CALL MASK RET C LD A,(ACCESS) CALL ASEARCH RET C LD HL,MASKARE LD DE,(DTABUF) LD BC,11 LDIR LD A,(ACCESS) LD (DE),A INC DE FIND_S LD BC,0x0020 ADD IX,BC LD (CURHND),IX LD HL,HANDBUF+12 LD BC,20 LDIR LD A,(HANDBUF+11) LD (DE),A INC DE LD HL,HANDBUF LD A,(FNDMODE) OR A JR NZ,FIND_M2 LD BC,11 LDIR LD A,0xFF LD (NO_NEXT),A XOR A RET FIND_M2 CALL GETNAME LD A,0xFF LD (NO_NEXT),A XOR A RET F_NEXT LD A,(NO_NEXT) OR A LD A,14 SCF RET Z LD (DTABUF),DE LD DE,MASKARE LD HL,(DTABUF) LD BC,11 LDIR LD A,(HL) PUSH HL CALL NSEARCH POP DE EX AF,AF' XOR A LD (NO_NEXT),A EX AF,AF' RET C INC DE JP FIND_S NSEARCH EX AF,AF' LD A,DIRPAGE CALL BANK PUSH AF EX AF,AF' CPL LD C,A LD IX,(CURHND) EXX LD DE,0 EXX JP SEARCH1 DSEARCH LD A,0x10 CALL ASEARCH RET NC LD A,4 RET SEARCH LD A,0x23 ASEARCH EX AF,AF' LD A,DIRPAGE CALL BANK PUSH AF EX AF,AF' CPL LD C,A LD IX,ADRDIR EXX LD DE,0 EXX SEARCH1 LD A,(IX+00) OR A JR Z,SEARCH4 CP 0xE5 JR Z,SEARCH3 LD A,(IX+11) AND C JR NZ,SEARCH3 LD HL,MASKARE LD D,IXH LD E,IXL LD B,11 EX DE,HL SEARCH2 LD A,(DE) CP "?" JR Z,SEARCH5 CP (HL) JR NZ,SEARCH3 SEARCH5 INC HL INC DE DJNZ SEARCH2 LD D,IXH LD E,IXL LD HL,HANDBUF EX DE,HL LD BC,0x0020 LDIR POP AF OUT (PAGE3),A AND A RET SEARCH3 EXX INC DE EXX LD DE,0x0020 ADD IX,DE JR NC,SEARCH1 SEARCH4 POP AF OUT (PAGE3),A LD A,3 SCF RET GETWORD LD DE,TMPNAME LD BC,0x0DFF GETWRD1 LD A,(HL) INC HL CP '\\' JR Z,DIRNAME CP ":" JR Z,DRVNAME LD (DE),A INC DE CP 0x21 CCF RET NC DJNZ GETWRD1 LD A,16 SCF RET DIRNAME LD A,0x00 LD (DE),A PUSH HL LD HL,TMPNAME CALL OPENDIR POP HL JP NC,GETWORD RET DRVNAME LD A,(TMPNAME) CP "a" JR C,DRVN2 CP "{" JR NC,DRVN2 SUB 0x20 DRVN2 SUB "A" PUSH HL ; CALL OPENDSK POP HL JP NC,GETWORD RET TMPNAME DB " ",0x00 OPENDIR XOR A CALL SET_FM LD A,(HL) OR A JP NZ,SUBDIR LD DE,(ROOTDIR+0) LD (IY+CLU1),E LD (IY+CLU2),D LD DE,(ROOTDIR+2) LD (IY+CLU3),E LD (IY+CLU4),D LD DE,(ROOTLEN+0) LD (IY+LEN1),E LD (IY+LEN2),D LD DE,(ROOTLEN+2) LD (IY+LEN3),E LD (IY+LEN4),D CALL LOADDIR LD HL,DIRSPEC LD (HL),'\\' INC HL LD (HL),0x00 AND A RET SUBDIR CP "." JR NZ,SUBDIR2 EXX LD HL,MASKARE LD DE,MASKARE+1 LD BC,10 LD (HL),0x20 LDIR EXX LD DE,MASKARE SUBDIR0 LDI LD A,(HL) OR A JR NZ,SUBDIR0 JR SUBDIR3 SUBDIR2 LD DE,MASKARE CALL MASK RET C SUBDIR3 CALL FINDDIR RET C LD (IY+CLU1),E LD (IY+CLU2),D LD (IY+CLU3),C LD (IY+CLU4),B EXX LD (IY+LEN1),E LD (IY+LEN2),D LD (IY+LEN3),C LD (IY+LEN4),B EXX CALL LOADDIR AND A RET FINDD03 LD BC,0x0020 ADD IX,BC JR NC,FINDD01 FINDD04 POP AF OUT (PAGE3),A LD A,4 SCF RET ; FIND "MASKAREA" IN DIRECTORY FINDDIR LD A,DIRPAGE CALL BANK PUSH AF LD IX,ADRDIR FINDD01 LD A,(IX+00) OR A JR Z,FINDD04 CP 0xE5 JR Z,FINDD03 LD A,(IX+11) AND 0x10 JR Z,FINDD03 LD HL,MASKARE LD D,IXH LD E,IXL EX DE,HL LD B,11 FINDD02 LD A,(DE) CP "?" JR Z,FINDD05 CP (HL) JR NZ,FINDD03 FINDD05 INC HL INC DE DJNZ FINDD02 LD A,(IX+0) CP "." JP NZ,ADDSPEC LD A,(IX+1) CP "." JP NZ,IT_DIR LD HL,DIRSPEC LD D,H LD E,L LD BC,0x100 XOR A CPIR LD BC,0x100 LD A,'\\' CPDR INC HL AND A EX DE,HL SBC HL,DE EX DE,HL JR NZ,ROTZ INC HL ROTZ LD (HL),0 IT_DIR LD E,(IX+CLU1) LD D,(IX+CLU2) LD C,(IX+CLU3) LD B,(IX+CLU4) EXX LD E,(IX+LEN1) LD D,(IX+LEN2) LD C,(IX+LEN3) LD B,(IX+LEN4) EXX POP AF OUT (PAGE3),A AND A RET ADDSPEC LD E,IXL LD D,IXH LD HL,DIRSPEC LD BC,0xFF XOR A CPIR DEC HL DEC HL LD A,'\\' CP (HL) INC HL JR Z,ADDSPE0 LD (HL),A INC HL ADDSPE0 LD BC,0x0820 MM1 LD A,(DE) INC DE CP C JR Z,MM2 LD (HL),A INC HL MM2 DJNZ MM1 LD A,(DE) INC DE CP C JR Z,MM3 LD (HL),"." INC HL LD (HL),A INC HL LD A,(DE) INC DE CP C JR Z,MM3 LD (HL),A INC HL LD A,(DE) CP C JR Z,MM3 LD (HL),A INC HL MM3 LD (HL),0 JP IT_DIR CURRDIR EX DE,HL LD HL,DIRSPEC CURDIR1 LD A,(HL) OR A LDI JP NZ,CURDIR1 RET LOADDIR XOR A LD HL,0 LD IX,0 LD B,0 CALL MOVE_FP LD A,DIRPAGE CALL BANK PUSH AF LD B,3 LOADFFF PUSH BC LD HL,0xC000 LD DE,0xC001 LD BC,0x3FFF LD (HL),L LDIR ; LD A,(DRIVE) ; LD (IY+FDRV),A ; LD C,(IY+LEN1) LD C,(IY+LEN2) LD B,(IY+LEN3) LD E,(IY+LEN4) LD D,0 SRL D RR E RR B RR C SRL D RR E RR B RR C SRL D RR E RR B RR C LD E,(IY+CLU1) LD D,(IY+CLU2) LD L,(IY+CLU3) LD H,(IY+CLU4) LD IXH,D LD IXL,E LD B,C LD A,B OR A JR Z,ERRLEND CP 0x08 JR C,NORLEND LD B,8 NORLEND LD A,(CDDRIVE) ; LD C,BIOS.DRV_READ LD DE,ADRDIR ; RST ToBIOS SPBIOS BIOSF.DRV_READ POP BC JR NC,LOADMMM DEC B JP NZ,LOADFFF POP AF OUT (PAGE3),A SCF LD A,20 RET ERRLEND POP BC POP AF OUT (PAGE3),A SCF LD A,20 RET LOADMMM POP AF OUT (PAGE3),A CALL CORRDIR AND A RET CORRDIR LD A,DIRPAGE CALL BANK PUSH AF LD HL,ADRDIR LD DE,ADRDIR CORRL1 PUSH DE LD C,(HL) LD B,0 LD DE,ENTRYBF LDIR POP DE PUSH HL LD HL,FCDFLEN LD C,(HL) LD B,0 ADD HL,BC INC HL LD (HL),0 SBC HL,BC PUSH DE CALL MASK POP HL LD BC,11 ADD HL,BC LD A,(FCDFLAG) BIT 1,A ;IS IT DIR? ; AND 2 LD C,0x01 ;ATTRIBUT FILE JR Z,CORRL0 LD C,0x10 ;ATTRIBUT DIRECTORY CORRL0 BIT 0,A ;IS IT HIDDEN JR Z,CORRL00 SET 1,C CORRL00 LD (HL),C INC HL XOR A LD B,8 FILLCDN LD (HL),A INC HL DJNZ FILLCDN LD A,(FCDSEC+2) LD (HL),A INC HL LD A,(FCDSEC+3) LD (HL),A INC HL ;MKDATE PUSH HL LD A,(FCDYEAR) LD IXL,A LD IXH,0 LD DE,1900 ADD IX,DE LD A,(FCDMOUN) LD E,A LD A,(FCDDAY) LD D,A LD A,(FCDHOUR) LD H,A LD A,(FCDMIN) LD L,A LD A,(FCDSECN) LD B,A CALL MK_TIME POP HL ; LD DE,0x0000 ;TIME LD (HL),E INC HL LD (HL),D INC HL ; LD DE,0x0000 ;DATE LD (HL),C INC HL LD (HL),B INC HL LD DE,(FCDSEC) LD (HL),E INC HL LD (HL),D INC HL EX DE,HL LD HL,FCDLEN LDI LDI LDI LDI POP HL BIT 7,H JR Z,CORRL2 LD A,(HL) OR A JP NZ,CORRL1 LD L,0 INC H JR Z,CORRL2 LD A,(HL) OR A JP NZ,CORRL1 CORRL2 XOR A LD (DE),A LD DE,(ROOTDIR+0) LD L,(IY+CLU1) LD H,(IY+CLU2) AND A SBC HL,DE JR NZ,CORRL6 LD DE,(ROOTDIR+2) LD L,(IY+CLU3) LD H,(IY+CLU4) AND A SBC HL,DE JR NZ,CORRL6 LD HL,ADRDIR LD A,(HL) CP " " JR NZ,CORRL4 LD (HL),0xE5 LD BC,0x0020 ADD HL,BC LD A,(HL) CP " " JR NZ,CORRL4 LD (HL),0xE5 JR CORRL4 CORRL6 LD HL,ADRDIR LD A,(HL) CP " " JR NZ,CORRL4 LD (HL),"." LD BC,0x0020 ADD HL,BC LD A,(HL) CP " " JR NZ,CORRL4 LD (HL),"." INC HL LD (HL),"." CORRL4 POP AF OUT (PAGE3),A AND A RET ;SYSTEM ATTRIBUTES READONLY_ATR EQU %00000001 HIDDEN_ATR EQU %00000010 SYSTEM_ATR EQU %00000100 ARCHIVE_ATR EQU %00100000 ENTRYBF DEFB 0x00 ;Entry lenght DEFB 0x00 ;XAR in LBN FCDSEC DEFW 0x00,0x00 ;Start sector (Intel) DEFW 0x00,0x00 ;Start sector (Motorola) FCDLEN DEFW 0x00,0x00 ;Lenght file (Intel) DEFW 0x00,0x00 ;Lenght file (Motorola) FCDYEAR DEFB 0x00 ;Year FCDMOUN DEFB 0x00 ;Mount FCDDAY DEFB 0x00 ;Day FCDHOUR DEFB 0x00 ;Hour FCDMIN DEFB 0x00 ;Minute FCDSECN DEFB 0x00 ;Second DEFB 0x00 ;Reserve FCDFLAG DEFB 0x00 ;Flag DEFB 0x00 ;Interlive size DEFB 0x00 ;Interlive skip factor DEFW 0x0000 ;Volume Set Sequence (Intel) DEFW 0x0000 ;Volume Set Sequence (Motorola) FCDFLEN DEFB 0x00 DEFSA EQU $-ENTRYBF FCDNAME DB 0x100-DEFSA DUP 0 ROOTDIR DEFW 0,0 ROOTLEN DEFW 0,0 DIRSIZE DEFW 0 BANK LD C,A LD B,0 LD HL,BANKTBL ADD HL,BC IN A,(PAGE3) LD C,PAGE3 OUTI RET BANKTBL DEFB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF DEFB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF ;HANDTA DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 MASKARE DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; HL - MASK "file*.t??" ; DE - 11 bytes filename ; RET: C=2 FILE WITHOUT EXTENTION ; C=1 FILE WITH EXTENTION MASK PUSH HL PUSH DE LD H,D LD L,E INC DE LD (HL),0x20 LD BC,10 LDIR POP DE POP HL LD A,(HL) CP 0x21 RET C LD BC,0x0902 MASK1 LD A,(HL) CP 0x21 CCF RET NC CP 0x22 JR Z,MASK7 CP "*" JR Z,MASK3 CP "+" JR Z,MASK7 CP "," JR Z,MASK7 CP "." JR Z,MASK5 CP "/" JR Z,MASK7 CP ":" JR Z,MASK7 CP ";" JR Z,MASK7 CP "<" JR Z,MASK7 CP "=" JR Z,MASK7 CP ">" JR Z,MASK7 CP "[" JR Z,MASK7 CP '\\' ; JR Z,MASK7 CP "]" JR Z,MASK7 CP "|" JR Z,MASK7 CP "a" JR C,MASK2 CP "{" JR NC,MASK2 SUB 0x20 MASK2 LD (DE),A INC HL INC DE DJNZ MASK1 MASK7 LD A,16 SCF RET MASK3 LD A,"?" INC HL DJNZ MASK6 LD A,16 SCF RET MASK6 LD (DE),A INC DE DJNZ MASK6 LD B,1 JR MASK1 MASK5 LD A," " INC HL DJNZ MASK4 LD B,4 DEC C JP NZ,MASK1 LD A,16 SCF RET MASK4 LD (DE),A INC DE DJNZ MASK4 LD B,4 DEC C JP NZ,MASK1 LD A,16 SCF RET SYSTIME LD DE,DAY*256+MONTH ;DAY/MONTH LD HL,0x0000 ;HOUR/MINUTE LD BC,0x0001 ;SECOND/WEEKDAY LD IX,YEAR ;YEAR AND A RET ;INPUT: D - DAY; E - MONTH ; H - HOUR; L - MINUTE ; B - SECOND (0...59) ; IX- YEAR (0...65535) ;OUTPUT: DE - hhhhhmmmmmmsssss h - hour, m - min, s - sec/2 ; BC - yyyyyyymmmmddddd y - year, m - month, d - day ; (1980-2108) MK_TIME LD A,L RLCA RLCA SLA A RL H SLA A RL H SLA A RL H SRL B OR B LD L,A LD BC,0xF844 ;(-1980) ADD IX,BC LD A,E RLCA RLCA RLCA RLCA AND 0xF0 LD B,IXL SLA A RL B OR D LD C,A EX DE,HL AND A RET ;INPUT: DE - hhhhhmmmmmmsssss h - hour, m - min, s - sec/2 ; BC - yyyyyyymmmmddddd y - year, m - month, d - day ; (1980-2108) ;OUTPUT: D - DAY; E - MONTH ; H - HOUR; L - MINUTE ; B - SECOND (0...59) ; IX- YEAR (0...65535) RMKTIME EX DE,HL LD A,C AND 0x1F LD D,A SRL B RR C LD A,C RRCA RRCA RRCA RRCA AND 0x0F LD E,A LD C,B LD B,0 LD IX,1980 ADD IX,BC LD A,L AND 0x1F ADD A,A LD B,A SRL H RR L SRL H RR L SRL H RR L SRL L SRL L AND A RET ; INPUT: HL - "C:\\DIR\\DIR\\DIR_NAME[\\]",0 CHDIR CALL GETWORD RET C LD HL,TMPNAME LD A,(HL) OR A CALL NZ,OPENDIR RET ;