mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
fixed BLOCK_READ, BLOCK_WR
This commit is contained in:
parent
f13fdf4eab
commit
87c74c1ee7
@ -50,11 +50,16 @@ OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
|
||||
LD A,(TASK)
|
||||
LD (IY+_sFM.TASK_NUM),A
|
||||
XOR A
|
||||
; [ ] fat32
|
||||
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
|
||||
LD (IY+_sFM.OptimizedClusters),A
|
||||
; [x] 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
|
||||
|
||||
@ -75,36 +75,46 @@ INC_FAT:
|
||||
|
||||
;-----------------------------------------------------------
|
||||
; <20>à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||
; ¢å®¤: hl = ®¬¥à ª« áâ¥à
|
||||
; de = ‘’€<E28099>˜…… á«®¢® ®¬¥à ª« áâ¥à (⮫쪮 ¤«ï FAT32)
|
||||
; ¢ë室: hl = ®¬¥à ª« áâ¥à
|
||||
; de = ®¬¥à á«¥¤. ª« áâ¥à (¥á«¨ 0, â® ª« áâ¥à hl ᢮¡®¤¥)
|
||||
; CF - ª®¥æ 楯®çª¨
|
||||
;!FIXIT ¤ «¥¥ § â®çª â®, çâ® ¢ DE ¢á¥£¤ 0 - à §¤¥« ¥ ¡®«ìè¥ 2Gb
|
||||
; ¢å®¤: hl - ®¬¥à ª« áâ¥à (¬« ¤è¥¥ á«®¢®)
|
||||
; hl' - ®¬¥à ª« áâ¥à (áâ à襥 á«®¢®. ⮫쪮 ¤«ï FAT32)
|
||||
; ¢ë室: hl - ®¬¥à ª« áâ¥à (¬« ¤è¥¥ á«®¢®)
|
||||
; hl' - ®¬¥à ª« áâ¥à (áâ à襥 á«®¢®)
|
||||
; de - ®¬¥à á«¥¤. ª« áâ¥à (¬« ¤è¥¥ á«®¢®. ¥á«¨ 0, â® ª« áâ¥à hl ᢮¡®¤¥)
|
||||
; de' - ®¬¥à á«¥¤. ª« áâ¥à (áâ à襥 á«®¢®. ¥á«¨ 0, â® ª« áâ¥à hl' ᢮¡®¤¥)
|
||||
; CF - ª®¥æ 楯®çª¨
|
||||
;!FIXIT ¤ «¥¥ § â®çª â®, çâ® ¢ DE ¢á¥£¤ 0 - ä ©« ¥ ¡®«ìè¥ 2Gb
|
||||
;-----------------------------------------------------------
|
||||
;[ ] fat32
|
||||
READ_FROM_FAT:
|
||||
;[x] fat32
|
||||
PUSH DE
|
||||
LD A,(FatBuffer.FAT_TYPE)
|
||||
XOR 32
|
||||
JR NZ,.low ; Z=0 ¯à®¢¥à塞 ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à
|
||||
LD HL,(FAT_Max_Cluster_H) ; ¯à®¢¥à塞 áâ à襥 á«®¢® ®¬¥à ª« áâ¥à
|
||||
JP .high
|
||||
; ¯à®¢¥à塞 áâ à襥 á«®¢® ®¬¥à ª« áâ¥à
|
||||
; !FIXIT fat32 ¯à®¢¥àïâì ®¡ á«®¢ FAT_Max_Cluster
|
||||
EXX
|
||||
EX DE,HL
|
||||
LD HL,(FAT_Max_Cluster_H)
|
||||
; CF = 0
|
||||
SBC HL,DE
|
||||
EX DE,HL
|
||||
EXX
|
||||
LD A,DSS_Error.sys.DISK_FULL
|
||||
RET C
|
||||
JP NZ,.correct_cluster ; ¥á«¨ FAT_Max_Cluster_H - IX != 0, â® ª« áâ¥à ª®à४âë©
|
||||
;
|
||||
; ¯à®¢¥à塞 ¬« ¤è¥ á«®¢® ®¬¥à ª« áâ¥à
|
||||
.low: EX DE,HL
|
||||
LD HL,(FAT_Max_Cluster_L)
|
||||
.high: ; CF = 0
|
||||
; CF = 0
|
||||
SBC HL,DE
|
||||
EX DE,HL
|
||||
LD A,DSS_Error.sys.DISK_FULL
|
||||
;[x] fat32
|
||||
POP DE
|
||||
;
|
||||
RET C
|
||||
|
||||
SET_PAGE_X FATPAGE
|
||||
|
||||
;
|
||||
.correct_cluster:
|
||||
SET_PAGE_X FATPAGE
|
||||
;
|
||||
PUSH HL
|
||||
PUSH AF
|
||||
LD A,(FatBuffer.FAT_TYPE)
|
||||
@ -116,13 +126,20 @@ READ_FROM_FAT:
|
||||
LD E,(HL) ; ¯à®ç¨â âì ®¬¥à ª« áâ¥à
|
||||
INC HL
|
||||
LD D,(HL)
|
||||
;
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
;!TODO #FFF7 - ª« áâ¥à á ª®áïç묨 ᥪâ®à ¬¨
|
||||
LD HL,#FFEF ;!HARDCODE
|
||||
XOR A ; DssErr.sys.NO_ERROR
|
||||
.exit: XOR A ; ®¡ã«ï¥¬ CF ¨ ãáâ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = DssErr.sys.NO_ERROR
|
||||
SBC HL,DE ; ¯à®¢¥àª á«ã¦. ª« áâ¥àë
|
||||
POP HL
|
||||
; [x] fat32
|
||||
EXX
|
||||
LD H,A
|
||||
LD L,A
|
||||
LD D,A
|
||||
LD E,A
|
||||
EXX
|
||||
RET
|
||||
;
|
||||
.FAT12: CALL GET_FAT12_CELL
|
||||
@ -147,10 +164,8 @@ READ_FROM_FAT:
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
LD HL,#0FEF
|
||||
XOR A ; ®¡ã«ï¥¬ CF ¨ ãáâ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = ã«î
|
||||
SBC HL,DE ; ¯à®¢¥àª á«ã¦. ª« áâ¥àë
|
||||
POP HL
|
||||
RET
|
||||
JR .exit
|
||||
;
|
||||
.FAT32: ; [ ] fat32
|
||||
CALL GET_FAT32_CELL
|
||||
DI
|
||||
@ -556,199 +571,165 @@ NSECTOR:;[ ] fat32
|
||||
RET
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
;[ ] fat32
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
MACRO _GetSavedCluster exit_to
|
||||
LD E,(IY+_sFM.KnownCluster_L)
|
||||
LD D,(IY+_sFM.KnownCluster_L+1)
|
||||
LD A,D
|
||||
INC B
|
||||
OR E
|
||||
JR Z,exit_to
|
||||
DEC B
|
||||
;
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
PUSH BC
|
||||
LD E,(IY+_sFM.KnownOffset_L)
|
||||
LD D,(IY+_sFM.KnownOffset_L+1)
|
||||
LD A,D
|
||||
OR E
|
||||
JR Z,.noOptimization_1
|
||||
;
|
||||
POP HL
|
||||
SBC HL,DE
|
||||
JR C,.noOptimization_2
|
||||
;
|
||||
LD C,L
|
||||
LD B,H
|
||||
POP DE
|
||||
POP HL
|
||||
;
|
||||
INC B
|
||||
JP exit_to
|
||||
.noOptimization_1:
|
||||
POP BC
|
||||
.noOptimization_2:
|
||||
POP HL
|
||||
POP DE
|
||||
INC B
|
||||
JP exit_to
|
||||
ENDM
|
||||
;
|
||||
;[ ] fat32
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
MACRO _SaveGetedCluster
|
||||
LD (IY+_sFM.KnownCluster_L),L
|
||||
LD (IY+_sFM.KnownCluster_L+1),H
|
||||
POP BC
|
||||
LD (IY+_sFM.KnownOffset_L),C
|
||||
LD (IY+_sFM.KnownOffset_L+1),B
|
||||
ENDM
|
||||
;;
|
||||
|
||||
BLOCK_READ.ECL2:
|
||||
;POP DE ; [ ] áâ à襥 á«®¢® ®¬¥à ª« áâ¥à (à ìè¥ ¨£®à¨à®¢ «®áì)
|
||||
POP BC ; [x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
POP BC
|
||||
POP DE
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
|
||||
; 225ÿ937ÿ408 / 512 = 0x6BBC4 / 4 = 0x1AEF1
|
||||
;
|
||||
;READ SECTORS OF FILE
|
||||
;HL:DE - FP (in sectors)
|
||||
; B - Amount sectors
|
||||
; IX - buffer in RAM
|
||||
; 225ÿ937ÿ408 / 512 = 0x6BBC4 / 4 = 0x1AEF1
|
||||
BLOCK_READ:
|
||||
PUSH BC
|
||||
LD (READ.PointerOnBuffer),IX
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ;SECTORS PER CLUSTER
|
||||
LD C,A
|
||||
LD B,0
|
||||
;HL:DE / BC => DE:IX HL-OSTATOK
|
||||
CALL DIV_for_SPC
|
||||
; [ ] fat32. ¤ «¥¥ § â®çª â®, çâ® ¢ DE ¢á¥£¤ 0 - ä ©« ¥ ¡®«ìè¥ 2Gb. ˆá¯®«ì§®¢ âì DE
|
||||
LD B,XH
|
||||
LD C,XL
|
||||
PUSH HL ; ®áâ ⮪ DIV_for_SPC
|
||||
|
||||
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ;START CLUSTER
|
||||
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||
LD A,L
|
||||
OR H
|
||||
;OR (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1)
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
;JR NZ,BLOKRD2
|
||||
PUSH BC
|
||||
;PUSH DE ; [ ] áâ à襥 á«®¢® ®¬¥à ª« áâ¥à (à ìè¥ ¨£®à¨à®¢ «®áì)
|
||||
JR Z,.ECL2
|
||||
;JP ECL2 ;RY01 JR BLOKRD0
|
||||
_GetSavedCluster .enter_loop1
|
||||
;
|
||||
.loop1: PUSH BC
|
||||
CALL READ_FROM_FAT
|
||||
POP BC
|
||||
JR C,.ECL2 ;RY01
|
||||
EX DE,HL
|
||||
; DEC BC
|
||||
.enter_loop1:
|
||||
; LD A,B ; ‚‘ - ᬥ饨¥ ¢ãâà¨ ä ©« ¢ ª« áâ¥à å
|
||||
; OR C
|
||||
; JR NZ,.loop1
|
||||
INC B
|
||||
DEC BC
|
||||
DJNZ .loop1
|
||||
;POP DE ; [ ] áâ à襥 á«®¢® ®¬¥à ª« áâ¥à (à ìè¥ ¨£®à¨à®¢ «®áì)
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
_SaveGetedCluster
|
||||
;
|
||||
POP DE ; ®áâ ⮪ DIV_for_SPC
|
||||
POP BC ; HL:DE - FP (in sectors)
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||
SUB E
|
||||
LD C,A ;\
|
||||
CP B ; \
|
||||
JR C,.skip1 ;SIZE > RESIDUE CLUSTER ; \
|
||||
LD C,B ;SIZE < CLUSTER ;->-|--> ; !TODO à §®¡à âìáï
|
||||
.skip1: LD A,B ; /
|
||||
SUB C ; /
|
||||
LD B,A ;/
|
||||
PUSH HL
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
CALL NSECTOR
|
||||
POP DE
|
||||
ADD IX,DE
|
||||
JR NC,.skip2
|
||||
INC HL
|
||||
.skip2: LD DE,(READ.PointerOnBuffer)
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD B,C
|
||||
LD C,Dss.DRV.Read
|
||||
RST ToDSS.DRV
|
||||
JR C,.Error
|
||||
POP BC
|
||||
LD HL,(READ.PointerOnBuffer)
|
||||
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||
;!TEST
|
||||
LD A,B
|
||||
LD B,C
|
||||
.loop2: ADD HL,DE
|
||||
;DEC C
|
||||
;JR NZ,.loop2
|
||||
DJNZ .loop2
|
||||
LD (READ.PointerOnBuffer),HL
|
||||
POP DE
|
||||
;LD A,B
|
||||
OR A
|
||||
RET Z
|
||||
LD B,A
|
||||
;
|
||||
.loop4: LD HL,CORE_BUFFERS.BootSector.SectorsPerCluster
|
||||
LD A,B
|
||||
SUB (HL)
|
||||
LD B,A
|
||||
LD C,(HL)
|
||||
JR NC,.BLOKRD7
|
||||
LD B,0
|
||||
ADD A,(HL) ;0 AND CF
|
||||
LD C,A
|
||||
OR A ;CLEAR CF
|
||||
RET Z
|
||||
.BLOKRD7:
|
||||
EX DE,HL
|
||||
PUSH BC
|
||||
CALL READ_FROM_FAT
|
||||
POP BC
|
||||
JR C,.ECL1 ;RY01
|
||||
EX DE,HL
|
||||
PUSH HL
|
||||
PUSH BC
|
||||
CALL NSECTOR
|
||||
LD DE,(READ.PointerOnBuffer)
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD B,C
|
||||
LD C,Dss.DRV.Read
|
||||
RST ToDSS.DRV
|
||||
JR C,.Error
|
||||
POP BC
|
||||
LD HL,(READ.PointerOnBuffer)
|
||||
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||
.loop3: ADD HL,DE
|
||||
DEC C
|
||||
JR NZ,.loop3
|
||||
LD (READ.PointerOnBuffer),HL
|
||||
POP DE
|
||||
JP .loop4
|
||||
;
|
||||
.Error: POP BC
|
||||
POP DE
|
||||
;SCF
|
||||
RET
|
||||
;
|
||||
.ECL1: AND A
|
||||
RET
|
||||
; [ ] fat32
|
||||
BLOCK_READ: PUSH BC
|
||||
LD (READ.PointerOnBuffer),IX
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ;SECTORS PER CLUSTER
|
||||
; HL:DE / A => DE:BC, H=0, L - ®áâ ⮪
|
||||
CALL DIV_for_SPC
|
||||
PUSH HL ; ®áâ ⮪ DIV_for_SPC
|
||||
; [x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
PUSH BC ; ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à
|
||||
PUSH DE ; [x] fat32 áâ à襥 á«®¢® ®¬¥à ª« áâ¥à
|
||||
;
|
||||
EXX
|
||||
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_H) ; START CLUSTER High
|
||||
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_H+1)
|
||||
LD A,L
|
||||
OR H
|
||||
EXX
|
||||
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ; START CLUSTER Low
|
||||
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||
OR L
|
||||
OR H
|
||||
JR Z,.fast_exit_4
|
||||
CALL GetSavedCluster
|
||||
;HL': HL - ¨§¢¥áâë© ª« áâ¥à ä ©« ¤«ï ®âáçñâ
|
||||
;DE : BC - ®á⠢襥áï ᬥ饨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (D=D+1, B=B+1)
|
||||
;
|
||||
PUSH DE ; [x] ®á⠢襥áï ᬥ饨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (áâ à襥 á«®¢®)
|
||||
JP .enter_loop1
|
||||
;
|
||||
.fast_exit_5: POP DE
|
||||
.fast_exit_4: ; [x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
POP DE ; [x] fat32 áâ à襥 á«®¢® ®¬¥à ª« áâ¥à
|
||||
POP BC
|
||||
;
|
||||
POP BC
|
||||
POP DE
|
||||
AND A
|
||||
RET
|
||||
; [x] fat32
|
||||
.loop1_big: PUSH BC
|
||||
LD BC,0
|
||||
.loop1_small: PUSH BC
|
||||
CALL READ_FROM_FAT
|
||||
POP BC
|
||||
JR C,.fast_exit_5 ;RY01
|
||||
EX DE,HL
|
||||
EXX
|
||||
EX DE,HL
|
||||
EXX
|
||||
.enter_loop1: INC B
|
||||
DEC BC ; ‚‘ - ᬥ饨¥ ¢ãâà¨ ä ©« ¢ ª« áâ¥à å (¬« ¤è¥¥ á«®¢®)
|
||||
DJNZ .loop1_small
|
||||
POP BC ; [x] ®á⠢襥áï ᬥ饨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (áâ à襥 á«®¢®)
|
||||
INC B
|
||||
DEC BC
|
||||
DJNZ .loop1_big
|
||||
;;;;
|
||||
;
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
POP DE
|
||||
POP BC
|
||||
CALL SaveGotCluster
|
||||
;
|
||||
POP DE ; ®áâ ⮪ DIV_for_SPC
|
||||
POP BC ; HL:DE - FP (in sectors)
|
||||
; (SP) = (RET)
|
||||
;
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||
SUB E
|
||||
LD C,A ;\
|
||||
CP B ; \
|
||||
JR C,.skip1 ;SIZE > RESIDUE CLUSTER ; \
|
||||
LD C,B ;SIZE < CLUSTER ;->-|--> ; !TODO à §®¡à âìáï
|
||||
.skip1: LD A,B ; /
|
||||
SUB C ; /
|
||||
LD B,A ;/
|
||||
PUSH HL
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
CALL NSECTOR
|
||||
POP DE
|
||||
ADD IX,DE
|
||||
JR NC,.skip2
|
||||
INC HL
|
||||
.skip2: LD DE,(READ.PointerOnBuffer)
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD B,C
|
||||
LD C,Dss.DRV.Read
|
||||
RST ToDSS.DRV
|
||||
JR C,.Error
|
||||
POP BC
|
||||
LD HL,(READ.PointerOnBuffer)
|
||||
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||
;!TEST
|
||||
LD A,B
|
||||
LD B,C
|
||||
.loop2: ADD HL,DE
|
||||
;DEC C
|
||||
;JR NZ,.loop2
|
||||
DJNZ .loop2
|
||||
LD (READ.PointerOnBuffer),HL
|
||||
POP DE
|
||||
;LD A,B
|
||||
OR A
|
||||
RET Z
|
||||
LD B,A
|
||||
;
|
||||
.loop4: LD HL,CORE_BUFFERS.BootSector.SectorsPerCluster
|
||||
LD A,B
|
||||
SUB (HL)
|
||||
LD B,A
|
||||
LD C,(HL)
|
||||
JR NC,.BLOKRD7
|
||||
LD B,0
|
||||
ADD A,(HL) ;0 AND CF
|
||||
LD C,A
|
||||
OR A ;CLEAR CF
|
||||
RET Z
|
||||
;
|
||||
.BLOKRD7: EX DE,HL
|
||||
PUSH BC
|
||||
CALL READ_FROM_FAT
|
||||
POP BC
|
||||
JR C,.ECL1 ;RY01
|
||||
EX DE,HL
|
||||
PUSH HL
|
||||
PUSH BC
|
||||
CALL NSECTOR
|
||||
LD DE,(READ.PointerOnBuffer)
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD B,C
|
||||
LD C,Dss.DRV.Read
|
||||
RST ToDSS.DRV
|
||||
JR C,.Error
|
||||
POP BC
|
||||
LD HL,(READ.PointerOnBuffer)
|
||||
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||
.loop3: ADD HL,DE
|
||||
DEC C
|
||||
JR NZ,.loop3
|
||||
LD (READ.PointerOnBuffer),HL
|
||||
POP DE
|
||||
JP .loop4
|
||||
;
|
||||
.Error: POP BC
|
||||
POP DE
|
||||
;SCF
|
||||
RET
|
||||
;
|
||||
.ECL1: AND A
|
||||
RET
|
||||
|
||||
;-----------------------------------------------------------------------
|
||||
; BLOK_WR.Error:
|
||||
@ -763,170 +744,351 @@ BLOCK_READ:
|
||||
; SCF
|
||||
; RET
|
||||
;
|
||||
|
||||
|
||||
;WRITE SECTORS OF FILE
|
||||
;HL:DE - FP (in sectors), IX - data in RAM
|
||||
; B - Amount sectors
|
||||
BLOK_WR:
|
||||
PUSH BC
|
||||
LD (READ.PointerOnBuffer),IX
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ;SECTORS PER CLUSTER
|
||||
LD C,A
|
||||
LD B,0
|
||||
;HL:DE / BC => DE:IX HL-OSTATOK
|
||||
CALL DIV_for_SPC
|
||||
; [ ] fat32. ¤ «¥¥ § â®çª â®, çâ® ¢ DE ¢á¥£¤ 0 - ä ©« ¥ ¡®«ìè¥ 2Gb
|
||||
LD B,XH
|
||||
LD C,XL
|
||||
PUSH HL ;RESIDUE
|
||||
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ;START CLUSTER
|
||||
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||
LD A,H
|
||||
OR L
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
;JR NZ,BLOKWR2
|
||||
PUSH BC
|
||||
JR NZ,.GetSavedCluster
|
||||
;
|
||||
PUSH BC
|
||||
CALL G_CLUST
|
||||
JP C,.Error
|
||||
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L),L
|
||||
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1),H
|
||||
LD DE,(FatBuffer.ENDCLUS_LOW)
|
||||
CALL WRITE_TO_FAT
|
||||
PUSH HL
|
||||
;!TEST ;!TODO 2/12/23 [ ] ¡ £ á ¨§¡ëâ®ç®© § ¯¨áìî WRITE_FAT_TABLE?
|
||||
;CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
;
|
||||
POP HL
|
||||
POP BC
|
||||
INC B
|
||||
JP .WR2
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
.GetSavedCluster:
|
||||
_GetSavedCluster .WR2
|
||||
;
|
||||
.loop: PUSH BC
|
||||
CALL READ_FROM_FAT
|
||||
JR NC,.WRB
|
||||
PUSH HL
|
||||
CALL INC_FAT
|
||||
POP HL
|
||||
JP C,.Error
|
||||
CALL READ_FROM_FAT
|
||||
.WRB: POP BC
|
||||
EX DE,HL
|
||||
; DEC BC
|
||||
.WR2:
|
||||
; LD A,B
|
||||
; OR C
|
||||
; JR NZ,.loop
|
||||
INC B
|
||||
DEC BC
|
||||
DJNZ .loop
|
||||
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
_SaveGetedCluster
|
||||
;
|
||||
POP DE
|
||||
POP BC
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||
SUB E
|
||||
LD C,A
|
||||
CP B
|
||||
JR C,.WR3 ;SIZE > RESIDUE CLUSTER
|
||||
LD C,B ;SIZE < CLUSTER
|
||||
.WR3: LD A,B
|
||||
SUB C
|
||||
LD B,A
|
||||
PUSH HL
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
CALL NSECTOR
|
||||
POP DE
|
||||
ADD IX,DE
|
||||
JR NC,.WR4
|
||||
INC HL
|
||||
; DOUBLE 1
|
||||
.WR4: LD DE,(READ.PointerOnBuffer)
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD B,C
|
||||
LD C,Dss.DRV.Write
|
||||
RST ToDSS.DRV
|
||||
JR C,.ErrorWrite
|
||||
POP BC
|
||||
LD HL,(READ.PointerOnBuffer)
|
||||
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||
;
|
||||
.loop2: ADD HL,DE
|
||||
DEC C
|
||||
JR NZ,.loop2
|
||||
;
|
||||
LD (READ.PointerOnBuffer),HL
|
||||
POP DE
|
||||
;
|
||||
LD A,B
|
||||
OR A
|
||||
RET Z
|
||||
;
|
||||
.big_loop:
|
||||
LD HL,CORE_BUFFERS.BootSector.SectorsPerCluster
|
||||
LD A,B
|
||||
SUB (HL)
|
||||
LD B,A
|
||||
LD C,(HL)
|
||||
JR NC,.WR7
|
||||
LD B,0
|
||||
ADD A,(HL) ;0 AND CF
|
||||
LD C,A
|
||||
OR A ;CLEAR CF
|
||||
RET Z
|
||||
.WR7: EX DE,HL
|
||||
PUSH BC
|
||||
CALL READ_FROM_FAT
|
||||
JR NC,.WR9
|
||||
PUSH HL
|
||||
CALL INC_FAT
|
||||
POP HL
|
||||
; [ ] fat32
|
||||
BLOK_WR: PUSH BC
|
||||
LD (READ.PointerOnBuffer),IX
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ;SECTORS PER CLUSTER
|
||||
; HL:DE / A => DE:BC, H=0, L - ®áâ ⮪
|
||||
CALL DIV_for_SPC
|
||||
PUSH HL ; ®áâ ⮪ DIV_for_SPC
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
PUSH BC ; ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à
|
||||
PUSH DE ; [x] fat32 áâ à襥 á«®¢® ®¬¥à ª« áâ¥à
|
||||
;
|
||||
EXX
|
||||
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_H) ; START CLUSTER High
|
||||
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_H+1)
|
||||
LD A,L
|
||||
OR H
|
||||
EXX
|
||||
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ; START CLUSTER
|
||||
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||
OR L
|
||||
OR H
|
||||
JR NZ,.FindCluster
|
||||
;
|
||||
PUSH BC ; ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à
|
||||
PUSH DE ; [x] fat32 áâ à襥 á«®¢® ®¬¥à ª« áâ¥à
|
||||
; [ ] fat32
|
||||
CALL G_CLUST
|
||||
JP C,.Error_6
|
||||
;
|
||||
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L),L
|
||||
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1),H
|
||||
; [ ] fat32
|
||||
EXX
|
||||
LD HL,0 ;!FIXIT
|
||||
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H),L ; START CLUSTER High
|
||||
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1),H
|
||||
EXX
|
||||
;
|
||||
LD DE,(FatBuffer.ENDCLUS_LOW)
|
||||
CALL WRITE_TO_FAT
|
||||
;!TEST ;!TODO 2/12/23 ; [ ] ¡ £ á ¨§¡ëâ®ç®© § ¯¨áìî WRITE_FAT_TABLE?
|
||||
;PUSH HL
|
||||
;CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
;POP HL
|
||||
;
|
||||
POP DE ; ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à
|
||||
POP BC ; [x] fat32 áâ à襥 á«®¢® ®¬¥à ª« áâ¥à
|
||||
;
|
||||
INC B
|
||||
INC D ; [x] fat32
|
||||
PUSH DE
|
||||
JP .enter_loop
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
.FindCluster: CALL GetSavedCluster
|
||||
;HL': HL - ¨§¢¥áâë© ª« áâ¥à ä ©« ¤«ï ®âáçñâ
|
||||
;DE : BC - ®á⠢襥áï ᬥ饨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (D=D+1, B=B+1)
|
||||
;
|
||||
PUSH DE ; [x] ®á⠢襥áï ᬥ饨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (áâ à襥 á«®¢®)
|
||||
JP .enter_loop
|
||||
;
|
||||
; [x] fat32
|
||||
.loop_big: PUSH BC
|
||||
LD BC,0
|
||||
.loop: PUSH BC
|
||||
CALL READ_FROM_FAT
|
||||
JR NC,.next
|
||||
; end of chain - get new cluster
|
||||
; [ ] fat32
|
||||
PUSH HL
|
||||
EXX
|
||||
PUSH HL
|
||||
EXX
|
||||
CALL INC_FAT
|
||||
EXX
|
||||
POP HL
|
||||
EXX
|
||||
POP HL
|
||||
JP C,.Error_6
|
||||
;
|
||||
CALL READ_FROM_FAT
|
||||
.next: POP BC
|
||||
EX DE,HL
|
||||
EXX
|
||||
EX DE,HL
|
||||
EXX
|
||||
.enter_loop: INC B
|
||||
DEC BC
|
||||
DJNZ .loop
|
||||
POP BC ; [x] ®á⠢襥áï ᬥ饨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (áâ à襥 á«®¢®)
|
||||
INC B
|
||||
DEC BC
|
||||
DJNZ .loop_big
|
||||
;;;;
|
||||
;
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
POP DE
|
||||
POP BC
|
||||
CALL SaveGotCluster
|
||||
;
|
||||
POP DE
|
||||
POP BC
|
||||
; (SP) = (RET)
|
||||
;
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||
SUB E
|
||||
LD C,A
|
||||
CP B
|
||||
JR C,.WR3 ;SIZE > RESIDUE CLUSTER
|
||||
LD C,B ;SIZE < CLUSTER
|
||||
.WR3: LD A,B
|
||||
SUB C
|
||||
LD B,A
|
||||
PUSH HL
|
||||
PUSH BC
|
||||
PUSH DE
|
||||
CALL NSECTOR
|
||||
POP DE
|
||||
ADD IX,DE
|
||||
JR NC,.WR4
|
||||
INC HL
|
||||
; DOUBLE 1
|
||||
.WR4: LD DE,(READ.PointerOnBuffer)
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD B,C
|
||||
LD C,Dss.DRV.Write
|
||||
RST ToDSS.DRV
|
||||
JR C,.ErrorWrite
|
||||
POP BC
|
||||
LD HL,(READ.PointerOnBuffer)
|
||||
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||
;
|
||||
.loop2: ADD HL,DE
|
||||
DEC C
|
||||
JR NZ,.loop2
|
||||
;
|
||||
LD (READ.PointerOnBuffer),HL
|
||||
POP DE
|
||||
;
|
||||
LD A,B
|
||||
OR A
|
||||
RET Z
|
||||
;
|
||||
.big_loop: LD HL,CORE_BUFFERS.BootSector.SectorsPerCluster
|
||||
LD A,B
|
||||
SUB (HL)
|
||||
LD B,A
|
||||
LD C,(HL)
|
||||
JR NC,.WR7
|
||||
LD B,0
|
||||
ADD A,(HL) ;0 AND CF
|
||||
LD C,A
|
||||
OR A ;CLEAR CF
|
||||
RET Z
|
||||
.WR7: EX DE,HL
|
||||
PUSH BC
|
||||
CALL READ_FROM_FAT
|
||||
JR NC,.WR9
|
||||
PUSH HL
|
||||
CALL INC_FAT
|
||||
POP HL
|
||||
JR C,.ErrorFull
|
||||
CALL READ_FROM_FAT
|
||||
.WR9: POP BC
|
||||
EX DE,HL
|
||||
PUSH HL
|
||||
PUSH BC
|
||||
CALL NSECTOR
|
||||
; DOUBLE 1
|
||||
LD DE,(READ.PointerOnBuffer)
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD B,C
|
||||
LD C,Dss.DRV.Write
|
||||
RST ToDSS.DRV
|
||||
CALL READ_FROM_FAT
|
||||
.WR9: POP BC
|
||||
EX DE,HL
|
||||
PUSH HL
|
||||
PUSH BC
|
||||
CALL NSECTOR
|
||||
; DOUBLE 1
|
||||
LD DE,(READ.PointerOnBuffer)
|
||||
LD A,(FatBuffer.DRIVE)
|
||||
LD B,C
|
||||
LD C,Dss.DRV.Write
|
||||
RST ToDSS.DRV
|
||||
JR C,.ErrorWrite
|
||||
POP BC
|
||||
LD HL,(READ.PointerOnBuffer)
|
||||
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||
.loop3: ADD HL,DE
|
||||
DEC C
|
||||
JR NZ,.loop3
|
||||
LD (READ.PointerOnBuffer),HL
|
||||
POP DE
|
||||
;
|
||||
JP .big_loop
|
||||
;
|
||||
.Error: POP BC
|
||||
POP BC ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
.ErrorWrite:
|
||||
POP BC
|
||||
POP DE
|
||||
LD A,DSS_Error.sys.WRITE_ERROR
|
||||
;SCF
|
||||
RET
|
||||
;
|
||||
.ErrorFull:
|
||||
POP BC
|
||||
LD A,DSS_Error.sys.DISK_FULL
|
||||
;SCF
|
||||
RET
|
||||
POP BC
|
||||
LD HL,(READ.PointerOnBuffer)
|
||||
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||
.loop3: ADD HL,DE
|
||||
DEC C
|
||||
JR NZ,.loop3
|
||||
LD (READ.PointerOnBuffer),HL
|
||||
POP DE
|
||||
;
|
||||
JP .big_loop
|
||||
;
|
||||
.Error_6: POP BC
|
||||
POP BC
|
||||
.Error_4: POP BC
|
||||
POP BC ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
.ErrorWrite: POP BC
|
||||
POP DE
|
||||
LD A,DSS_Error.sys.WRITE_ERROR
|
||||
;SCF
|
||||
RET
|
||||
;
|
||||
.ErrorFull: POP BC
|
||||
LD A,DSS_Error.sys.DISK_FULL
|
||||
;SCF
|
||||
RET
|
||||
|
||||
/*
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
; ‚室: HL - ¯¥à¢ë© ª« áâ¥à ä ©« (¬« ¤è¥¥ á«®¢®)
|
||||
; BC - ᬥ饨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (¬« ¤è¥¥ á«®¢®)
|
||||
; ‚ë室: HL - ¨§¢¥áâë© ª« áâ¥à ä ©« ¤«ï ®âáçñâ (¬« ¤è¥¥ á«®¢®)
|
||||
; BC - ®á⠢襥áï ᬥ饨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (¬« ¤è¥¥ á«®¢®)
|
||||
GetSavedCluster:
|
||||
INC B
|
||||
;PUSH DE ; ¯¥à¢ë© ª« áâ¥à ä ©« (áâ à襥 á«®¢®)
|
||||
LD E,(IY+_sFM.KnownCluster_L)
|
||||
LD D,(IY+_sFM.KnownCluster_L+1)
|
||||
LD A,E
|
||||
OR D
|
||||
RET Z
|
||||
;
|
||||
DEC B
|
||||
PUSH DE ; KnownCluster_H
|
||||
PUSH HL ; ¯¥à¢ë© ª« áâ¥à ä ©« (¬« ¤è¥¥ á«®¢®)
|
||||
PUSH BC ; ᬥ饨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å
|
||||
LD E,(IY+_sFM.KnownOffset_L)
|
||||
LD D,(IY+_sFM.KnownOffset_L+1)
|
||||
LD A,D
|
||||
OR E
|
||||
JR Z,.noOptimization_3
|
||||
;
|
||||
POP HL ; ᬥ饨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å
|
||||
SBC HL,DE
|
||||
JR C,.noOptimization_2
|
||||
LD C,L
|
||||
LD B,H
|
||||
POP DE ; ¡ « á á⥪
|
||||
POP HL
|
||||
; ®¯â¨¬¨§ æ¨ï: HL - ¥ ¯¥à¢ë© ª« áâ¥à ä ©« , KnownCluster
|
||||
; BC - à ááâ®ï¨¥ ¤® âॡ㥬®£® á¬¥é¥¨ï ®â KnownCluster
|
||||
;
|
||||
INC B
|
||||
RET
|
||||
;
|
||||
.noOptimization_3:
|
||||
POP BC
|
||||
.noOptimization_2:
|
||||
POP HL
|
||||
.noOptimization_1:
|
||||
POP DE
|
||||
INC B
|
||||
RET
|
||||
*/
|
||||
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
; ‚室: DE - ᬥ饨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (áâ à襥 á«®¢®)
|
||||
; BC - ᬥ饨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (¬« ¤è¥¥ á«®¢®)
|
||||
; HL - ¯¥à¢ë© ª« áâ¥à ä ©« (¬« ¤è¥¥ á«®¢®)
|
||||
; HL' - ¯¥à¢ë© ª« áâ¥à ä ©« (áâ à襥 á«®¢®)
|
||||
; ‚ë室: HL - ¨§¢¥áâë© ª« áâ¥à ä ©« ¤«ï ®âáçñâ (¬« ¤è¥¥ á«®¢®)
|
||||
; HL' - ¨§¢¥áâë© ª« áâ¥à ä ©« ¤«ï ®âáçñâ (áâ à襥 á«®¢®)
|
||||
; DE - ®á⠢襥áï ᬥ饨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (áâ à襥 á«®¢®, D=D+1)
|
||||
; BC - ®á⠢襥áï ᬥ饨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (¬« ¤è¥¥ á«®¢®, B=B+1)
|
||||
; ¥ ¯®àâ¨â HL, HL' ¨ DE:BC ¥á«¨ ®¯â¨¬¨§ æ¨ï ¥ áà ¡®â «
|
||||
GetSavedCluster:
|
||||
XOR A
|
||||
CP (IY+_sFM.OptimizedClusters)
|
||||
JR Z,.noOptimization_0
|
||||
;
|
||||
PUSH DE
|
||||
PUSH HL ; ¯¥à¢ë© ª« áâ¥à ä ©« (¬« ¤è¥¥ á«®¢®)
|
||||
; ᬥ饨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å
|
||||
EX DE,HL
|
||||
LD E,(IY+_sFM.KnownOffset_H)
|
||||
LD D,(IY+_sFM.KnownOffset_H+1)
|
||||
; ¯à®¢¥àª áâ à襣® á«®¢
|
||||
AND A
|
||||
SBC HL,DE
|
||||
JR C,.noOptimization_2
|
||||
;
|
||||
PUSH BC
|
||||
EX DE,HL
|
||||
LD H,B
|
||||
LD L,C
|
||||
LD C,(IY+_sFM.KnownOffset_L)
|
||||
LD B,(IY+_sFM.KnownOffset_L+1)
|
||||
; ¯à®¢¥àª ¬« ¤è¥£® á«®¢
|
||||
SBC HL,BC
|
||||
LD BC,0
|
||||
EX DE,HL
|
||||
SBC HL,BC
|
||||
JR C,.noOptimization_3
|
||||
EX DE,HL
|
||||
LD B,H
|
||||
LD C,L
|
||||
; DE:BC ®¢®¥ ᬥ饨¥ ®â ¨§¢¥á⮣® ª« áâ¥à ä ©« (¢ ª« áâ¥à å)
|
||||
;
|
||||
LD L,(IY+_sFM.KnownCluster_L)
|
||||
LD H,(IY+_sFM.KnownCluster_L+1)
|
||||
EXX
|
||||
LD L,(IY+_sFM.KnownCluster_H)
|
||||
LD H,(IY+_sFM.KnownCluster_H+1)
|
||||
EXX
|
||||
; ¡ « á á⥪
|
||||
POP AF
|
||||
POP AF
|
||||
POP AF
|
||||
; ¤«ï 横« DJNZ
|
||||
INC B
|
||||
INC D
|
||||
RET
|
||||
;
|
||||
.noOptimization_3:
|
||||
POP BC
|
||||
.noOptimization_2:
|
||||
POP HL
|
||||
.noOptimization_1:
|
||||
POP DE
|
||||
.noOptimization_0:
|
||||
INC B
|
||||
INC D
|
||||
RET
|
||||
|
||||
;[x] fat32
|
||||
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
|
||||
SaveGotCluster: LD A,C
|
||||
OR B
|
||||
OR E
|
||||
OR D
|
||||
RET Z
|
||||
;
|
||||
LD (IY+_sFM.KnownOffset_L),C
|
||||
LD (IY+_sFM.KnownOffset_L+1),B
|
||||
LD (IY+_sFM.KnownOffset_H),E
|
||||
LD (IY+_sFM.KnownOffset_H+1),D
|
||||
;
|
||||
LD (IY+_sFM.KnownCluster_L),L
|
||||
LD (IY+_sFM.KnownCluster_L+1),H
|
||||
EXX
|
||||
LD (IY+_sFM.KnownCluster_H),L
|
||||
LD (IY+_sFM.KnownCluster_H+1),H
|
||||
EXX
|
||||
;
|
||||
LD A,1
|
||||
LD (IY+_sFM.OptimizedClusters),A
|
||||
RET
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
@ -320,148 +320,29 @@ BC_Div_DE:
|
||||
;----------------------------------------------------------------------;
|
||||
;
|
||||
|
||||
|
||||
; HL:DE / C => DE:IX HL-OSTATOK (DE:BC.HL). ‹¥£ª® ¯¥à¥¤¥« âì ¯®¤ HL:DE / A => HL:DE.A
|
||||
;----------------------------------------------------------------------;
|
||||
; HL:DE / A => DE:BC, H=0, L - ®áâ ⮪
|
||||
DIV_for_SPC:
|
||||
LD A,C
|
||||
LD C,A
|
||||
DEC A
|
||||
JR Z,.exit
|
||||
;
|
||||
;
|
||||
AND E
|
||||
LD B,A ; ®áâ ⮪
|
||||
LD A,C
|
||||
RRCA
|
||||
;
|
||||
.loop: SRL H : RR L
|
||||
RR D : RR E
|
||||
;
|
||||
.loop: SRL H
|
||||
RR L
|
||||
RR D
|
||||
RR E
|
||||
RRCA
|
||||
JP NC,.loop
|
||||
LD A,B
|
||||
;
|
||||
.exit: LD XH,D
|
||||
LD XL,E
|
||||
.exit: LD B,D
|
||||
LD C,E
|
||||
EX DE,HL
|
||||
LD H,0
|
||||
LD L,A
|
||||
RET
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
; DIV32: LD A,#FF
|
||||
; LD B,E
|
||||
; .loop: SRL C
|
||||
; JR C,.exitLoop
|
||||
; SRL H : RR L : RR D : RR E : SLA A
|
||||
; JP .loop
|
||||
; .exitLoop:
|
||||
; CPL
|
||||
; AND B
|
||||
; LD XH,D
|
||||
; LD XL,E
|
||||
; EX DE,HL
|
||||
; LD H,0
|
||||
; LD L,A
|
||||
; RET
|
||||
|
||||
; DEFINE NEW_DIV 1
|
||||
|
||||
; DIV32: LD XH,D
|
||||
; LD XL,E
|
||||
|
||||
; IFN NEW_DIV
|
||||
; EX DE,HL
|
||||
; LD HL,0
|
||||
; LD A,#20
|
||||
; DIV001: ADD IX,IX
|
||||
; EX DE,HL
|
||||
; ADC HL,HL
|
||||
; EX DE,HL
|
||||
; ADC HL,HL
|
||||
; SBC HL,BC
|
||||
; JR NC,DIV002
|
||||
; ADD HL,BC
|
||||
; DEC A
|
||||
; JR NZ,DIV001
|
||||
; RET
|
||||
; DIV002: INC IX
|
||||
; DEC A
|
||||
; JR NZ,DIV001
|
||||
; RET
|
||||
; ELSE
|
||||
|
||||
|
||||
; div32_16:
|
||||
; ;HLIX/BC -> HLIX remainder DE
|
||||
; ;174+4*div32_16_sub8
|
||||
; ;min: 2186cc
|
||||
; ;max: 2794cc
|
||||
; ;avg: 2466cc
|
||||
; ;61 bytes
|
||||
; ex de,hl ; 4
|
||||
|
||||
; ; Negate BC to allow add instead of sbc
|
||||
; xor a ; 4
|
||||
; ; Need to set HL to 0 anyways, so save 2cc and a byte
|
||||
; ld h,a ; 4
|
||||
; ld l,a ; 4
|
||||
; sub c ; 4
|
||||
; ld c,a ; 4
|
||||
; sbc a,a ; 4
|
||||
; sub b ; 4
|
||||
; ld b,a ; 4
|
||||
|
||||
|
||||
; ld a,d ; 4
|
||||
; call div32_16_sub8 ; 17
|
||||
; rla ; 4
|
||||
; ld d,a ; 4
|
||||
|
||||
; ld a,e ; 4
|
||||
; call div32_16_sub8 ; 17
|
||||
; rla ; 4
|
||||
; ld e,a ; 4
|
||||
|
||||
; ld a,ixh ; 8
|
||||
; call div32_16_sub8 ; 17
|
||||
; rla ; 4
|
||||
; ld ixh,a ; 8
|
||||
|
||||
; ld a,ixl ; 8
|
||||
; call div32_16_sub8 ; 17
|
||||
; rla ; 4
|
||||
; ld ixl,a ; 8
|
||||
|
||||
; ;ex de,hl ; 4
|
||||
; ret ; 10
|
||||
|
||||
; div32_16_sub8:
|
||||
; ;119+8*div32_16_sub
|
||||
; ;min: 503cc
|
||||
; ;max: 655cc
|
||||
; ;avg: 573cc
|
||||
; call 1F
|
||||
; 1:
|
||||
; ;17+2(17+2(div32_16_sub)))
|
||||
; call 1F
|
||||
; 1:
|
||||
; ;17+2(div32_16_sub)
|
||||
; call div32_16_sub
|
||||
; div32_16_sub:
|
||||
; ;48+{8,0+{0,19}}
|
||||
; ;min: 48cc
|
||||
; ;max: 67cc
|
||||
; ;avg: 56.75cc
|
||||
; rla ; 4
|
||||
; adc hl,hl ; 15
|
||||
; jr c,1F ;12/7
|
||||
; add hl,bc ; 11
|
||||
; ret c ;11/5
|
||||
; sbc hl,bc ; 15
|
||||
; ret ; 10
|
||||
; 1:
|
||||
; add hl,bc ; 11
|
||||
; scf ; 4
|
||||
; ret ; 10
|
||||
|
||||
; ENDIF
|
||||
;
|
||||
@ -45,11 +45,11 @@
|
||||
.DRIVE: BYTE #00 ;+ #28 +40 DRIVE OR CURRENT
|
||||
.ACCESS_MODE: BYTE #00 ;+ #29 +41 ACCESS MODE ¯à¨§ ª ¨§¬¥¥¨ï ä ©«
|
||||
.TASK_NUM: BYTE #00 ;+ #2A +42 TASK
|
||||
;.EMPTY: BYTE #00 ;+ #2B +43 EMPTY
|
||||
.KnownCluster_L: WORD #0000 ;+ #2B +43 Œ« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à ¤«ï ª®â®à®£® ¨§¢¥áâ® ®â®á¨â¥«ì®¥ ᬥ饨¥ ¢ãâà¨ ä ©«
|
||||
.KnownCluster_H: WORD #0000 ;+ #2C +44 ‘â à襥 á«®¢® ®¬¥à ª« áâ¥à ¤«ï ª®â®à®£® ¨§¢¥áâ® ®â®á¨â¥«ì®¥ ᬥ饨¥ ¢ãâà¨ ä ©«
|
||||
.KnownOffset_L: WORD #0000 ;+ #2D +45 Œ« ¤è¥¥ á«®¢® ᬥ饨ï (¢ ª« áâ¥à å) ®â®á¨â¥«ì® ç « ä ©« ¤«ï á®åà ¥®£® ®¬¥à ª« áâ¥à .
|
||||
.KnownOffset_H: WORD #0000 ;+ #2E +46 ‘â à襥 á«®¢® ᬥ饨ï (¢ ª« áâ¥à å) ®â®á¨â¥«ì® ç « ä ©« ¤«ï á®åà ¥®£® ®¬¥à ª« áâ¥à .
|
||||
.OptimizedClusters BYTE #00 ;+ #2B +43
|
||||
.KnownCluster_L: WORD #0000 ;+ #2C +44 Œ« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à ¤«ï ª®â®à®£® ¨§¢¥áâ® ®â®á¨â¥«ì®¥ ᬥ饨¥ ¢ãâà¨ ä ©«
|
||||
.KnownCluster_H: WORD #0000 ;+ #2E +46 ‘â à襥 á«®¢® ®¬¥à ª« áâ¥à ¤«ï ª®â®à®£® ¨§¢¥áâ® ®â®á¨â¥«ì®¥ ᬥ饨¥ ¢ãâà¨ ä ©«
|
||||
.KnownOffset_L: WORD #0000 ;+ #30 +48 Œ« ¤è¥¥ á«®¢® ᬥ饨ï (¢ ª« áâ¥à å) ®â®á¨â¥«ì® ç « ä ©« ¤«ï á®åà ¥®£® ®¬¥à ª« áâ¥à .
|
||||
.KnownOffset_H: WORD #0000 ;+ #32 +50 ‘â à襥 á«®¢® ᬥ饨ï (¢ ª« áâ¥à å) ®â®á¨â¥«ì® ç « ä ©« ¤«ï á®åà ¥®£® ®¬¥à ª« áâ¥à .
|
||||
ENDS
|
||||
;
|
||||
|
||||
|
||||
@ -1 +1 @@
|
||||
Subproject commit 42dfec072030351eb386205ead32983bbc1c4909
|
||||
Subproject commit 68681fbc50da463f1debae860e6db64603886d39
|
||||
Loading…
Reference in New Issue
Block a user