mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-16 01:41:17 +03:00
256 lines
4.7 KiB
NASM
256 lines
4.7 KiB
NASM
;/////////////////////////////////////////////////////////////////////
|
||
; [ ] ®¢ ï ¯®¤äãªæ¨ï á ¡¨â®¬ 7 ¢ ॣ. €
|
||
; ‚®§¢à é ¥â ¨ä®à¬ æ¨î ®¡ ®¡é¥¬ ¨ ᢮¡®¤®¬ ¯à®áâà á⢥ ¤¨áª®¢®£®
|
||
; ãáâனá⢠.
|
||
;
|
||
; ¢å®¤: A - ®¬¥à ¤¨áª (0=A,1=B .. 25=Z. #FF-⥪ã騩)
|
||
; <09>ਠA bit7 = 1:
|
||
; A and #7F - ®¬¥à ¤¨áª
|
||
; HL - ¡ãä¥à (256 ¡ ©â®¢) ¤«ï à áè¨à¥ëå ¤ ëå:
|
||
; B != 0 - áç¨â âì ᢮¡®¤®¥ ¬¥áâ®
|
||
; ;
|
||
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
||
; ” ©«®¢ ï á¨á⥬
|
||
; ;
|
||
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
||
; ‘¥à¨©ë© ®¬¥à ¤¨áª
|
||
; ;
|
||
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
||
; Œ¥âª ¤¨áª
|
||
; ;
|
||
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
||
; 䨧¨ç¥áª¨© ®¬¥à ¤¨áª , ®¬¥à à §¤¥«
|
||
; ;
|
||
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
||
; § १¥à¢¨à®¢ ®
|
||
; ;
|
||
; ¢ë室: CF=0:
|
||
; A - à §¬¥à ª« áâ¥à ¢ ᥪâ®à å
|
||
; HL':HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
|
||
; DE':DE - ᢮¡®¤ëå ª« áâ¥à®¢
|
||
; BC - à §¬¥à ᥪâ®à ¢ ¡ ©â å
|
||
; CF=1:
|
||
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
; Œ¥âª ¤¨áª ¯à®¢¥àï¥âáï á ç « ¢ ª®à¥¢®¬ ª â «®£¥ ¨ ¥á«¨ â ¬ ;
|
||
; ¥â, â® ¡¥àñâáï ¬¥âª ¨§ BPB ;
|
||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
;/////////////////////////////////////////////////////////////////////
|
||
DISKINF: LD C,B
|
||
LD B,1
|
||
;
|
||
CP #80
|
||
JP C,.CustomDisk
|
||
CP #FF
|
||
JR Z,.CurrentDisk
|
||
; more info
|
||
LD B,C
|
||
AND %0111'1111
|
||
PUSH HL
|
||
PUSH AF
|
||
CALL .CustomDisk
|
||
POP IX
|
||
JR C,.error
|
||
;
|
||
EX (SP),HL
|
||
PUSH DE
|
||
PUSH AF
|
||
PUSH BC
|
||
;;;;
|
||
;
|
||
EX DE,HL
|
||
LD HL,FAT_STRING
|
||
LD C,5 ;!HARDCODE _sBOOT_SECTOR_PARAMS.ID_FAT.length
|
||
CALL .mCOPY_LOOP
|
||
; 12, 16 or 32
|
||
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||
CP FAT_TYPE.x16
|
||
JR C,.next_prm
|
||
;
|
||
PUSH DE
|
||
DEC DE
|
||
LD A,'6'
|
||
JR Z,.put_char
|
||
; fat 32
|
||
DEC DE
|
||
LD A,'3'
|
||
.put_char: LD (DE),A
|
||
POP DE
|
||
;
|
||
.next_prm: LD HL,CORE_BUFFERS.FatBuffer.BPB_SERIAL_NUMBER
|
||
LD C,4 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER
|
||
CALL .mCOPY_LOOP
|
||
;
|
||
; fat32
|
||
EXX
|
||
PUSH DE
|
||
PUSH HL
|
||
EXX
|
||
;LD HL,CORE_BUFFERS.FatBuffer.BPB_LABEL
|
||
CALL GET_LABEL
|
||
LD C,11 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_LABEL
|
||
CALL .mCOPY_LOOP
|
||
PUSH DE
|
||
LD A,XH
|
||
LD DE,Dss.DRV.GenIOCTL.Enter
|
||
LD BC,Dss.DRV.GenIOCTL.GetParams
|
||
RST ToDSS.DRV
|
||
POP DE
|
||
; fat32
|
||
EXX
|
||
POP HL
|
||
POP DE
|
||
EXX
|
||
JR C,.error_drv
|
||
LD A,2 ;!HARDCODE ¤«¨ ¯®«ï ü4 2 ¡ ©â : 䨧 ®¬¥à ¤¨áª , ®¬¥à à §¤¥« ¤¨áª
|
||
LD (DE),A
|
||
INC DE
|
||
EX AF,AF'
|
||
LD (DE),A ;䨧 ®¬¥à ¤¨áª
|
||
INC DE
|
||
LD A,C
|
||
LD (DE),A ;®¬¥à à §¤¥« ¤¨áª
|
||
INC DE
|
||
;
|
||
.error_drv: XOR A
|
||
LD (DE),A
|
||
;;;;
|
||
POP BC
|
||
POP AF
|
||
POP DE
|
||
.error: POP HL
|
||
RET
|
||
;
|
||
CP #FF ; !FIXIT WorkDirectory
|
||
;!TEST !Current Dir
|
||
;JR Z,CURRDS ;R06
|
||
.CurrentDisk: ; [ ] 10/06/24
|
||
IF OLD_DSS_FOR_OLD_EXE
|
||
LD A,(EXE_VERSION)
|
||
OR A
|
||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||
JR Z,.old_EXE
|
||
ENDIF
|
||
;
|
||
LD A,(CORE_BUFFERS.CurrentPath)
|
||
SUB 'A'
|
||
.old_EXE: LD HL,CORE_BUFFERS.FatBuffer.DRIVE
|
||
CP (HL)
|
||
JR Z,.CheckFreeSpace
|
||
;
|
||
.CustomDisk: PUSH BC
|
||
CALL CHNDISK ;R06
|
||
POP BC
|
||
RET C
|
||
;
|
||
.CheckFreeSpace:; ¥á«¨ GetFreeSpace ¥ ¢ë§ë¢ ¥âáï
|
||
XOR A
|
||
OR B
|
||
LD BC,(CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L)
|
||
EXX
|
||
LD BC,(CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H)
|
||
EXX
|
||
CALL NZ,GetFreeSpace
|
||
;
|
||
;.FRESP2:
|
||
; A = 0 if B != 0 before .GetFreeSpace
|
||
;
|
||
LD H,B
|
||
LD L,C
|
||
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),HL
|
||
EX DE,HL
|
||
EXX
|
||
LD H,B
|
||
LD L,C
|
||
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),HL
|
||
EX DE,HL
|
||
EXX
|
||
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow)
|
||
DEC HL
|
||
; fat 32
|
||
EXX
|
||
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterHigh)
|
||
JR NC,.skip_dec_hl
|
||
DEC HL
|
||
.skip_dec_hl: EXX
|
||
LD BC,(CORE_BUFFERS.FatBuffer.BytesPerSector)
|
||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||
AND A
|
||
RET
|
||
;
|
||
; [ ] 22/11/23 ¯®¤äãªæ¨ï á ¤®¯.¨ä®©
|
||
.mCOPY_LOOP: LD B,0
|
||
EX DE,HL
|
||
LD (HL),C
|
||
EX DE,HL
|
||
INC DE
|
||
LDIR
|
||
RET
|
||
;
|
||
;
|
||
GetFreeSpace: LD A,1
|
||
LD (CORE_BUFFERS.FatBuffer.UPD_FSINFO),A
|
||
LD HL,2 ; fat32 ®¬¥à ª« áâ¥à ®â ª®â®à®£® áç¨â âì
|
||
XOR A
|
||
; fat32
|
||
EXX
|
||
LD H,A
|
||
LD L,A
|
||
LD B,A
|
||
LD C,A
|
||
EXX
|
||
LD B,A
|
||
LD C,A
|
||
.loop_free_space:;!FIXIT
|
||
PUSH BC
|
||
EXX
|
||
PUSH BC
|
||
EXX
|
||
CALL READ_FROM_FAT
|
||
EXX
|
||
POP BC
|
||
EXX
|
||
POP BC
|
||
CP DSS_Error.sys.DISK_FULL
|
||
RET Z
|
||
; fat 32
|
||
EXX
|
||
LD A,E
|
||
OR D
|
||
EXX
|
||
OR E
|
||
OR D
|
||
JR NZ,.skip
|
||
;
|
||
INC BC
|
||
LD A,B
|
||
OR C
|
||
JR NZ,.skip
|
||
EXX
|
||
INC BC
|
||
EXX
|
||
;
|
||
.skip: INC HL
|
||
LD A,L
|
||
OR H
|
||
JR NZ,.loop_free_space
|
||
EXX
|
||
INC HL
|
||
EXX
|
||
JP .loop_free_space
|
||
;
|
||
FAT_STRING: DB 'FAT12'
|
||
;
|
||
; DE - ¡ãä¥à
|
||
GET_LABEL: PUSH DE
|
||
LD HL,.LABEL_MASK ; "\*.*" ¨¬ï ¬¥âª¨
|
||
LD A,FAT_ATTR.VOLUME_ID ; âਡãâ ¬¥âª¨ ⮬
|
||
LD BC,Dss.F_First.FATname ; f_first, ä®à¬ â 11
|
||
RST ToDSS
|
||
POP DE
|
||
LD HL,CORE_BUFFERS.FatBuffer.BPB_LABEL
|
||
RET C
|
||
LD HL,BUFFER_FIND.REC_Name
|
||
ADD HL,DE
|
||
RET
|
||
.LABEL_MASK: DB '\*.*',0 |