mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 09:21:47 +03:00
193 lines
2.9 KiB
NASM
193 lines
2.9 KiB
NASM
WRITE.ERR3:
|
||
POP HL
|
||
WRITE.ERR2:
|
||
POP HL
|
||
WRITE.ERR1:
|
||
POP BC
|
||
SCF
|
||
RET
|
||
WRITE.RD_ONLY:
|
||
POP DE
|
||
LD A,DSS_Error.sys.READONLY
|
||
SCF
|
||
RET
|
||
|
||
; HL - ADDRESS
|
||
; DE - SIZE
|
||
; A - FM
|
||
WRITE: ;!TEST ;!TODO 5/12/23 ; [ ] ¨§¡ëâ®çë¥ ¢ë§®¢ë WRITE_FAT_TABLE
|
||
CALL .Start
|
||
PUSH AF
|
||
LD A,(CORE_BUFFERS.FatBuffer.CacheUpdated)
|
||
OR A
|
||
CALL NZ,WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||
POP AF
|
||
RET
|
||
;
|
||
.Start: LD (.R_POINT),HL
|
||
LD (.S_POINT),HL
|
||
PUSH DE
|
||
CALL SET_FM
|
||
JR C,.ERR1
|
||
LD A,(IY+_sFM.ACCESS_MODE)
|
||
AND Dss.Open.R
|
||
JR NZ,.RD_ONLY
|
||
SET 7,(IY + _sFM.ACCESS_MODE)
|
||
SET 5,(IY + _sFM.FS_REC.ATTRIBUT)
|
||
LD A,(IY + _sFM.DRIVE)
|
||
CALL OPENDSK
|
||
JR C,.ERR1
|
||
CALL GET_OFFSET_IN_SECTORS
|
||
;
|
||
JP NZ,.WOV1
|
||
;
|
||
.WOV4: POP BC
|
||
PUSH BC
|
||
SRL B
|
||
JR Z,.WOV2
|
||
PUSH HL
|
||
PUSH DE
|
||
PUSH BC
|
||
.R_POINT+2: LD IX,0
|
||
CALL BLOK_WRITE
|
||
POP BC
|
||
JR C,.ERR3
|
||
LD C,B
|
||
LD HL,(.R_POINT)
|
||
LD DE,#0200 ;!HARDCODE
|
||
.WOV5: ADD HL,DE
|
||
DJNZ .WOV5
|
||
; B=0
|
||
LD (.R_POINT),HL
|
||
;LD B,0
|
||
POP HL
|
||
ADD HL,BC
|
||
EX DE,HL
|
||
POP HL
|
||
LD C,B
|
||
ADC HL,BC
|
||
.WOV2: POP BC
|
||
LD A,B
|
||
AND #01
|
||
LD B,A
|
||
OR C
|
||
JR Z,.WOV6
|
||
PUSH HL
|
||
PUSH DE
|
||
PUSH BC
|
||
LD IX,CORE_BUFFERS.BUFFER+#C000
|
||
LD B,1
|
||
IN A,(SLOT3)
|
||
PUSH AF
|
||
IN A,(SLOT0)
|
||
OUT (SLOT3),A
|
||
CALL BLOCK_READ
|
||
POP BC
|
||
LD C,SLOT3
|
||
OUT (C),B
|
||
LD DE,CORE_BUFFERS.BUFFER
|
||
LD HL,(.R_POINT)
|
||
POP BC
|
||
JP C,.ERR2
|
||
LDIR
|
||
LD (.R_POINT),HL
|
||
POP DE
|
||
POP HL
|
||
LD IX,CORE_BUFFERS.BUFFER+#C000
|
||
LD B,1
|
||
IN A,(SLOT3)
|
||
PUSH AF
|
||
IN A,(SLOT0)
|
||
OUT (SLOT3),A
|
||
CALL BLOK_WRITE
|
||
POP BC
|
||
LD C,SLOT3
|
||
OUT (C),B
|
||
RET C
|
||
.WOV6: LD HL,(.R_POINT)
|
||
.S_POINT+1: LD DE,0
|
||
; CF=0
|
||
;AND A
|
||
SBC HL,DE
|
||
PUSH HL
|
||
EX DE,HL
|
||
LD XH,D
|
||
LD XL,E
|
||
LD HL,0
|
||
CALL MOVE_FP.F_current
|
||
CALL MOVE_CP
|
||
POP DE
|
||
RET NC ; …᫨ à §¬¥à ä ©« ¤¨áª¥ <20>… áâ « ¡®«ìè¥, 祬 ¡ë«
|
||
; …᫨ à §¬¥à ä ©« ¤¨áª¥ áâ « ¡®«ìè¥, 祬 ¡ë«
|
||
LD L,(IY + _sFM.F_POSITION+0)
|
||
LD H,(IY + _sFM.F_POSITION+1)
|
||
LD C,(IY + _sFM.F_POSITION+2)
|
||
LD B,(IY + _sFM.F_POSITION+3)
|
||
LD (IY + _sFM.FS_REC.F_SIZE+0),L
|
||
LD (IY + _sFM.FS_REC.F_SIZE+1),H
|
||
LD (IY + _sFM.FS_REC.F_SIZE+2),C
|
||
LD (IY + _sFM.FS_REC.F_SIZE+3),B
|
||
AND A
|
||
RET
|
||
;
|
||
.WOV1: PUSH BC
|
||
PUSH HL
|
||
PUSH DE
|
||
LD IX,CORE_BUFFERS.BUFFER+#C000
|
||
LD B,1
|
||
IN A,(SLOT3)
|
||
PUSH AF
|
||
IN A,(SLOT0)
|
||
OUT (SLOT3),A
|
||
CALL BLOCK_READ
|
||
POP BC
|
||
LD C,SLOT3
|
||
OUT (C),B
|
||
POP DE
|
||
POP HL
|
||
EXX
|
||
POP DE
|
||
JP C,.ERR1
|
||
LD HL,512 ;!HARDCODE sector size!
|
||
AND A
|
||
SBC HL,DE
|
||
LD B,H
|
||
LD C,L
|
||
POP HL
|
||
AND A
|
||
SBC HL,BC
|
||
JR NC,.WOV3
|
||
ADD HL,BC
|
||
LD B,H
|
||
LD C,L
|
||
LD HL,0
|
||
.WOV3: PUSH HL
|
||
LD HL,CORE_BUFFERS.BUFFER
|
||
ADD HL,DE
|
||
LD DE,(.R_POINT)
|
||
EX DE,HL
|
||
LDIR
|
||
LD (.R_POINT),HL
|
||
EXX
|
||
PUSH HL
|
||
PUSH DE
|
||
LD IX,CORE_BUFFERS.BUFFER+#C000
|
||
LD B,1
|
||
IN A,(SLOT3)
|
||
PUSH AF
|
||
IN A,(SLOT0)
|
||
OUT (SLOT3),A
|
||
CALL BLOK_WRITE
|
||
POP BC
|
||
LD C,SLOT3
|
||
OUT (C),B
|
||
POP HL
|
||
JP C,.ERR2
|
||
LD BC,1
|
||
ADD HL,BC
|
||
EX DE,HL
|
||
POP HL
|
||
LD C,B
|
||
ADC HL,BC
|
||
JP .WOV4
|
||
; |