Estex-DSS/DSS/API/Close.asm
2025-11-17 19:30:36 +10:00

93 lines
1.9 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; [x] fat32 ;!TEST
////////////////////////////////////////////////////////////////////////
;‚室­ë¥ §­ ç¥­¨ï:
; C - #12
; A - ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
;‚ë室­ë¥ §­ ç¥­¨ï:
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
////////////////////////////////////////////////////////////////////////
;CLOSE:
CLOSE_FN: LD (.TMP),A
CALL SET_FM
RET C
LD A,(TASK)
CP (IY+_sFM.TASK_NUM)
LD A,DSS_Error.sys.ACCESS_DENIED
SCF
RET NZ
BIT 7,(IY+_sFM.ACCESS_MODE)
JR Z,.NOTMODF
;
; ä ©« ¨§¬¥­ñ­
LD E,(IY+_sFM.DIR_CLUSTER_L)
LD D,(IY+_sFM.DIR_CLUSTER_L+1)
PUSH DE
LD E,(IY+_sFM.DIR_CLUSTER_H)
LD D,(IY+_sFM.DIR_CLUSTER_H+1)
PUSH DE
;
; [x] 15/11/2023 -bug with bad clusters ;!TEST
LD A,(IY+_sFM.DRIVE)
CALL OPENDSK
JR C,.error
;
XOR A
CALL SET_FM
; [x] fat32
POP DE
LD (IY+_sFM.DIR_CLUSTER_H),E
LD (IY+_sFM.DIR_CLUSTER_H+1),D
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H),E
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1),D
;
POP DE
LD (IY+_sFM.DIR_CLUSTER_L),E
LD (IY+_sFM.DIR_CLUSTER_L+1),D
; [x] 15/11/2023 -bug with bad clusters ;!TEST
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L),E
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1),D
;
CALL LOADDIR
; [ ] big dir
;!TODO ®â¬®â âì ªíè ¤® ­ã¦­®£® record index?
;
.TMP+1: LD A,0
CALL SET_FM
;
SET_PAGE_X DIRPAGE
EX AF,AF'
; [ ] big dir
;!TEST 9/11/23 record index
LD HL,DIRPAGE.buffer
LD DE,FAT_DIRECTORY_RECORD
LD C,(IY+_sFM.HANDLE)
LD B,(IY+_sFM.HANDLE+1)
JR .CLOSE2
;
.CLOSE1: ADD HL,DE
DEC BC
.CLOSE2: LD A,B
OR C
JR NZ,.CLOSE1
;LD L,(IY+_sFM.HANDLE)
;LD H,(IY+_sFM.HANDLE+1)
;;;;;;;;;
LD D,YH
LD E,YL
EX DE,HL
;PUSH HL
;SET_PAGE_X DIRPAGE
;POP HL
LD BC,FAT_DIRECTORY_RECORD
LDIR
EX AF,AF'
OUT (SLOT3),A
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£®
CALL SAVEDIR
.NOTMODF: LD A,(.TMP)
JP RES_FM
;
.error: POP DE
POP DE
RET
;