Estex-DSS/DSS/API/Open.asm
2026-01-04 08:02:59 +10:00

148 lines
3.4 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.

////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #11. Žâªàë⨥ ä ©« .
;
; ¢å®¤: HL - 㪠§ â¥«ì ­  ¨¬ï ä ©« 
; A - ०¨¬ ¤®áâ㯠:
; A=0 ç⥭¨¥/§ ¯¨áì
; A=1 ç⥭¨¥
; A=2 § ¯¨áì
; ;!TODO A=3 § ¯¨áì ¡¥§ «¨è­¨å á®åà ­¥­¨© ªíè  FAT
; ;!TODO A=4 § ¯¨á âì ªíè FAT
; ¢ë室: CF=0, A - ¤¥áªà¨¯â®à ä ©« .
; CF=1, A - ª®¤ ®è¨¡ª¨.
////////////////////////////////////////////////////////////////////////
OPEN_FN: ; Current Dir 15/10/23
;AND #7F ; ACCESS_MODE bit7 - ¤«ï ¢­ãâ७­¥£® ¨á¯®«ì§®¢ ­¨ï))) ;!TODO
LD (.TMP),A
PUSH HL
CALL DIR_PATH_CHECK.forceCheck
POP HL
RET C
;!FIXIT ᤥ« âì ª ª ¢ mkdir ¨«¨ rmdir?
;R008 ;
;.start: ;
CALL SetPath_GetName
RET C
CALL MASK
RET C
.FILE: CALL SEARCH.File ; enter point from EXEC, CREATE
RET C
;
.FM: ; enter point from ATTRIB
;R002 ;!TEST 9/11/23 record index
PUSH DE ; á®å࠭塞 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS (¯®«ã祭 ¨§ SEARCH)
;
CALL GET_FM
;!TEST 9/11/23 record index 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS
POP DE
;
RET C
LD A,C ; ¤¥áªà¨¯â®à ä ©« 
EX AF,AF'
;!TEST 9/11/23 record index 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS
;POP DE
; EXX
LD (IY+_sFM.HANDLE),E
LD (IY+_sFM.HANDLE+1),D
; EXX
;
LD D,YH
LD E,YL
LD HL,CORE_BUFFERS.HANDBUF
LD BC,CORE_BUFFERS.HANDBUF.SIZE
LDIR
.TMP+1: LD A,0
LD (IY+_sFM.ACCESS_MODE),A
; ®¯â¨¬¨§­ã« âãâ
;LD A,(TASK)
;LD (IY+_sFM.TASK_NUM),A
;XOR A
;LD (IY+_sFM.OptimizedClusters),A
;LD (IY+_sFM.KnownCluster_L),A
;LD (IY+_sFM.KnownCluster_L+1),A
;LD (IY+_sFM.KnownOffset_L),A
;LD (IY+_sFM.KnownOffset_L+1),A
;; fat32
; LD (IY+_sFM.KnownCluster_H),A
; LD (IY+_sFM.KnownCluster_H+1),A
; LD (IY+_sFM.KnownOffset_H),A
; LD (IY+_sFM.KnownOffset_H+1),A
;;
;LD (IY+_sFM.F_POSITION),A
;LD (IY+_sFM.F_POSITION+1),A
;LD (IY+_sFM.F_POSITION+2),A
;LD (IY+_sFM.F_POSITION+3),A
;LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
;LD (IY+_sFM.DRIVE),A
;; fat32
;LD HL,CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H
;LD E,(HL)
;INC HL
;LD D,(HL)
;LD (IY+_sFM.DIR_CLUSTER_H),E
;LD (IY+_sFM.DIR_CLUSTER_H+1),D
;;
;LD HL,CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L ; work directory FM
;LD E,(HL)
;INC HL
;LD D,(HL)
;LD (IY+_sFM.DIR_CLUSTER_L),E
;LD (IY+_sFM.DIR_CLUSTER_L+1),D
;
PUSH IY
POP HL
LD DE,_sFM.F_POSITION
ADD HL,DE
XOR A
LD (HL),A ; _sFM.F_POSITION
INC HL
LD (HL),A ; _sFM.F_POSITION + 1
INC HL
LD (HL),A ; _sFM.F_POSITION + 2
INC HL
LD (HL),A ; _sFM.F_POSITION + 3
INC HL
;
EX DE,HL
LD HL,CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L
LDI ; _sFM.DIR_CLUSTER_L
LDI ; _sFM.DIR_CLUSTER_L + 1
LD HL,CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H
LDI ; _sFM.DIR_CLUSTER_H
LDI ; _sFM.DIR_CLUSTER_H + 1
EX DE,HL
;
INC HL
INC HL
LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
LD (HL),A ; _sFM.DRIVE
INC HL
INC HL
LD A,(TASK)
LD (HL),A ; _sFM.TASK_NUM
INC HL
;
XOR A
LD (HL),A ; _sFM.OptimizedClusters
INC HL
LD (HL),A ; _sFM.KnownCluster_L
INC HL
LD (HL),A ; _sFM.KnownCluster_L + 1
INC HL
LD (HL),A ; _sFM.KnownCluster_H
INC HL
LD (HL),A ; _sFM.KnownCluster_H + 1
INC HL
LD (HL),A ; _sFM.KnownOffset_L
INC HL
LD (HL),A ; _sFM.KnownOffset_L + 1
INC HL
LD (HL),A ; _sFM.KnownOffset_H
INC HL
LD (HL),A ; _sFM.KnownOffset_H + 1
; ;
EX AF,AF'
AND A
RET
;