ORG #C000 ;------- INTM EQU #FEFF PE0 EQU #21AF ;------- LD HL,I_N_T,(INTM+0),HL LD HL,#C9FB,(INTM+2),HL DI LD A,INTM[,I,A:IM 2 EI ;------- LD BC,PE0,A,%00001110:OUT A LD BC,#10AF,A,#0F:OUT A LD HL,VAGA,DE,CORE LD BC,VAGAE-VAGA:LDIR ;--------------------------------------- CALL DOS_SWP; DEPACK Driver CALL DEV_INI:JP NZ,ER0 CALL HDD:JP NZ,ER1 CALL SETROOT; SET ROOT DIR ;CALL VYGREB; Выгребаем каталог, чисто по приколу ;LD HL,FILENAM ; ищем файл ;CALL FENTRY:JP Z,ER2 ;LD HL,#1000,C,#02 ; читаем файл (1 блок, 512 байт) ;LD B,1:CALL LOAD512 DDR LD HL,DIR1 CALL FENTRY:JR NZ,DIIIR LD HL,DIR1+1:CALL MKDIR:JR Z,DDR JP ER3 DIIIR CALL SETDIR ; Set DIR found by FENTRY active ;Create File (flag,size,name,0): LD HL,FILE CALL MKFILE:JP NZ,ER4 ;Save data into new file: LD C,#00; Page LD HL,#0000;Offset LD B,8; Size (8blocks=4kb) CALL SAVE512 ;--------------------------------------- EXIT ;LD BC,#11AF,A,#05:OUT A LD BC,PE0,A,%00000001:OUT A LD BC,#10AF,A,0:OUT A ;LD BC,#12AF,A,#0F:OUT A RET ;--------------------------------------- VYGREB LD DE,#8000 VYG CALL NXTETY:RET Z LD A,D:CP #C0:RET NC JR VYG ;--------------------------------------- ER0 ;Device not found ; (SD Card NOT ready!) LD A,1:OUT (254) .10 HALT JP EXIT ;------- ER1 ;FAT32 NOT FOUND LD A,2:OUT (254) .10 HALT JP EXIT ;------- ER2 ;File NOT FOUND LD A,3:OUT (254) .10 HALT JP EXIT ;------- ER3 ;Dir Creation Failed LD A,4:OUT (254) .10 HALT JP EXIT ;------- ER4 ;File Creation Failed LD A,5:OUT (254) .10 HALT JP EXIT ;--------------------------------------- I_N_T EI RET ;--------------------------------------- FILENAM DB #00; #00 - file, #10 - DIR DB "WC_History.txt",0 FILE DB #00; flag DW #1000,#0000;length DB "Неебаццо длинное имя.txt",0 DIR1 DB #10 DB "DOWNLOAD",0 DIR2 DB #10 DB "ZIFI",0 ;--------------------------------------- CORE EQU #2002 DEV_INI EQU CORE+3 HDD EQU CORE+9 ;------- ;i: CHL - Addres ; B - lenght (512b blocks) ;o: CHL - New Value ; A - EndOfChain (#0F) LOAD512 EQU CORE+21 ;i: CHL - Addres ; B - lenght ;o: CHL - New Value ; A - EndOfChain (#0F) SAVE512 EQU CORE+24 DOS_SWP EQU CORE+27 ;i: HL - flag(1),ln(4),name(1-255),0 ; NZ - ERROR (NO ENOUGHT SPACE) ; A: 1 - ln not valid ; 2 - index fatality ; 3 - ln already exists ; 255 - unknown error ; Z - SUCCESS MKFILE EQU CORE+57 ;i: HL - DirName(1-255,0) ;o: NZ - ERROR ; A: 1 - ln not valid ; 2 - index fatality ; 3 - ln already exists ; 255 - unknown error ; Z - SUCCESS MKDIR EQU CORE+60 ;i: HL - flag(1),name(1-255),0 ;o: Z - NOT FOUND ; NZ - FILE DELETED DELFL EQU CORE+63 ;i: HL - flag(1),oldname(1-255),0 ; DE - newname(1-255),0 ;o: Z - NOT FOUND ; NZ - SUCCESS RENAM EQU CORE+66 ;Search for entry in current DIR ;i: HL - flag(1),name(1-255),0 ;o: Z - NOT FOUND ; NZ - [DE,HL] - file length ; SEEK0 is automatically called FENTRY EQU CORE+78 ;Seek/Skip N sectors ;i: B - Number of sectors to process LOADNON EQU CORE+84 ;GetNextEntryFromActiveDir ;i: DE - Addres ;o: DE - New Value ; Z - EndOfDir ; NZ - OK ; ;STRUCTURE: ;fclus(4),size(4),date(2),time(2), ;!flag(1),name(1-255),#00 NXTETY EQU CORE+87 ;Set DIR found by ENTRY active SETDIR EQU CORE+93 ;Set ROOT DIR active SETROOT EQU CORE+96 SEEK0 EQU CORE+99 ;------- VAGA INCB "WDFCVBI" VAGAE ;---------------------------------------