This commit is contained in:
Anatoliy Belyanskiy 2024-04-23 23:56:35 +10:00
parent 2f0db9fa98
commit 0af59044c8
9 changed files with 280 additions and 123 deletions

View File

@ -93,6 +93,8 @@ GOOD_DRIVE: LD DE,#8200 ;!HARDCODE
LD HL,(FCLUSTR)
LD DE,#C000
CALL FLOAD ; § £à㧪 
DI
XOR A
OUT (SYS_PORT.OFF),A
@ -434,6 +436,84 @@ SEARCH: LD C,17 ;HANDELS PER SECTOR 512/32 + 1
INC A
RET
; ; HL - CLUSTER
; ; DE - ADDRESS
; ;!TODO ᤥ« âì âãâ ®¯à¥¤¥«¥­¨¥ à §¬¥à  SYSTEM.DOS ¨ ¢®§¬®¦­®áâì § £à㧨âì ¡®«ìè¥ 1 áâà ­¨æë
; FLOAD: LD (READMEM),DE
; .LD_FILE: PUSH HL ; system.dos first cluster
; CALL NSECTOR ; Cluster to Sector
; LD DE,(READMEM)
; LD A,(BOOT.SectorsPerCluster)
; CP #20 + 1 ; !HARDCODE ª®«-¢® § £à㦠¥¬ëå ᥪâ®à®¢
; LD C,BIOS.DRV_READ_LONG
; JR C,.SMALL_CLUSTER
; LD A,(BANKDOS)
; EX AF,AF'
; ;LD BC,#20*256 + BIOS.DRV_READ_LONG
; LD B,#20 ; !HARDCODE ª®«-¢® § £à㦠¥¬ëå ᥪâ®à®¢
; .set_drv: LD A,(DRIVE)
; RST ToBIOS_18
; JP C,GOOD_DRIVE.NoShell
; POP HL
; ; [ ] § £à㧪  system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
; ;AND A
; ;RET
; LD A,(BIG_SHELL)
; OR A
; RET Z
; ;
; XOR A
; LD (BIG_SHELL),A
; PUSH HL
; CALL NSECTOR
; LD DE,#20 ; !HARDCODE ª®«-¢® ¯à®ç¨â ­­ëå ᥪâ®à®¢
; AND A
; ADD IX,DE
; JR NC,.no_inc_hl
; INC HL
; .no_inc_hl: LD BC,SUBLOAD_SIZE*256 + BIOS.DRV_READ ; !HARDCODE ª®«-¢® „ާ £à㦠¥¬ëå ᥪâ®à®¢
; LD DE,#4000
; JR .set_drv
; ;
; .SMALL_CLUSTER: LD B,A
; ;LD C,BIOS.DRV_READ_LONG
; LD A,(BANKDOS)
; EX AF,AF'
; LD A,(DRIVE)
; RST ToBIOS_18
; JP C,GOOD_DRIVE.NoShell
; ;
; LD HL,(READMEM)
; LD DE,(CLU_LEN)
; ADD HL,DE
; LD (READMEM),HL
; ; [ ] § £à㧪  system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
; ;POP HL
; ;RET C
; CALL C,.more_than_1
; POP HL
; RET C
; ;
; CALL R_F_FAT ; next cluster in chain
; RET C
; EX DE,HL
; JP .LD_FILE
; ; [ ] § £à㧪  system.dos ¡®«ìè¥ #4000 ¡ ©â®¢
; .more_than_1: LD A,(BIG_SHELL)
; OR A
; SCF
; RET Z
; IN A,(SLOT1)
; LD HL,BANKDOS
; CP (HL)
; CCF
; RET Z
; LD (BANKDOS),A
; LD HL,#C000
; LD (READMEM),HL
; AND A
; RET
; HL - CLUSTER
; DE - ADDRESS
;!TODO ᤥ« âì âãâ ®¯à¥¤¥«¥­¨¥ à §¬¥à  SYSTEM.DOS ¨ ¢®§¬®¦­®áâì § £à㧨âì ¡®«ìè¥ 1 áâà ­¨æë
@ -442,7 +522,7 @@ FLOAD: LD (READMEM),DE
CALL NSECTOR ; Cluster to Sector
LD DE,(READMEM)
LD A,(BOOT.SectorsPerCluster)
CP #20
CP #20 + 1 ; !HARDCODE ª®«-¢® § £à㦠¥¬ëå ᥪâ®à®¢
LD C,BIOS.DRV_READ_LONG
JR C,.SMALL_CLUSTER
LD A,(BANKDOS)
@ -474,7 +554,6 @@ FLOAD: LD (READMEM),DE
JR .set_drv
;
.SMALL_CLUSTER: LD B,A
;LD C,BIOS.DRV_READ_LONG
LD A,(BANKDOS)
EX AF,AF'
LD A,(DRIVE)
@ -509,6 +588,12 @@ FLOAD: LD (READMEM),DE
LD (BANKDOS),A
LD HL,#C000
LD (READMEM),HL
LD A,(BOOT.SectorsPerCluster)
SUB SUBLOAD_SIZE + 1
CCF
RET NC
LD A,SUBLOAD_SIZE
LD (BOOT.SectorsPerCluster),A
AND A
RET

View File

@ -161,9 +161,15 @@ DISKINF: LD C,B
EXX
LD B,A
LD C,A
.loop_free_space:
.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

View File

@ -399,6 +399,10 @@ DIR_PATH_CHECK: LD A,(HL)
;
.checkDir: LD HL,CurrentDirectory+1
LD DE,WorkDirectory+1
; áçñâ稪
LD A,B
LD B,C
EX AF,AF'
;
.loop: LD A,(DE)
AND A
@ -406,8 +410,22 @@ DIR_PATH_CHECK: LD A,(HL)
CP (HL)
INC HL
INC DE
JR Z,.loop
JP .gotoPath
JR NZ,.gotoPath
DJNZ .loop
EX AF,AF'
SUB 1
RET C
EX AF,AF'
DJNZ .loop
;
.gotoPath: LD C,B
EX AF,AF'
LD B,A
CALL FINDDIR.CHECK_SLASH
LD A,DSS_Error.sys.PATH_NOT_FOUND
RET C
LD HL,CurrentPath
JP GETWORD
;
.end: CP (HL)
RET Z
@ -417,12 +435,7 @@ DIR_PATH_CHECK: LD A,(HL)
LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
ADD 'A'
CP (HL)
RET
.gotoPath: CALL FINDDIR.CHECK_SLASH
LD A,DSS_Error.sys.PATH_NOT_FOUND
RET C
LD HL,CurrentPath
JP GETWORD
RET
;----------------------------------------------------------------------;

View File

@ -1,22 +1,22 @@
;
STRUCT _sStack ; 256 bytes
STRUCT _sStack ; 256 bytes
.buffer BLOCK 256,0
.SPoint BYTE 0
ENDS
;
;
STRUCT _sEXE_HEADER ; 512 bytes
.EXE_EXT TEXT 3,{"EX","E"}
.VERSION BYTE 0
.OFFCOD1 WORD 0
.OFFCOD2 WORD 0
.LOADER WORD 0
.RESERVED BLOCK 6,0
.LD_ADDR WORD 0
.PC_REG WORD 0
.SP_REG WORD 0
.RESERVED2 BLOCK 490,0
STRUCT _sEXE_HEADER ; 512 bytes
.EXE_EXT TEXT 3,{"EX","E"} ; 0-2 EXE ‘¨£­ âãà 
.VERSION BYTE 0 ; 3 Version of EXE file
.OFFCOD1 WORD 00 ; 4-5 ª ª®£® ᬥ饭¨ï ¢ ä ©«¥ ¡ã¤¥â £à㧨âìáï ª®¤ ¢
.OFFCOD2 WORD 00 ; 6-7 ¯ ¬ïâì ¯®  ¤à¥áã (Code_addr) Low addr, High addr.
.LOADER WORD 00 ; 8-9 <EFBFBD> §¬¥à ¯¥à¢¨ç­®£® § £àã§ç¨ª  ¨«¨ 0
.RESERVED BLOCK 6,0 ; 10-15 Reserved
.LD_ADDR WORD 00 ; 16-17 €¤à¥á à á¯®«®¦¥­¨ï ª®¤  ¢ ¯ ¬ï⨠(#4100-#FFFF)
.PC_REG WORD 00 ; 18-19 €¤à¥á ¢ ¯ ¬ïâ¨ á ª®â®à®£® § ¯ãáâ¨âáï ª®¤ (Reg. PC)
.SP_REG WORD 00 ; 20-21 €¤à¥á á⥪  (Reg. SP)
.RESERVED2 BLOCK 490,0 ; 22-512 Œ®¦­® ¨á¯®«ì§®¢ âì ¯®¤ ⥪áâ ¤«ï ¢ë¯¥­¤àñ¦  ¨«¨ ­¥ ¨á¯®«ì§®¢ âì
ENDS
;

View File

@ -1 +1 @@
957
959

View File

@ -155,5 +155,5 @@ MOUSE_BAUD:
;
;----------------------------------------------------;
; <EFBFBD>­ЈЌ ­ЈЅ, стЅЊ хр ­Јтся Ђ тЎЉ ІЅ стр ­ЈцЅ!
SUBLOAD_SIZE EQU 10 ; ª®«-¢® ᥪâ®à®¢ ª®â®à®¥ ­ ¤® ¯®¤£à㧨âì ¯®á«¥ § £à㧪¨ system.dos ¢ áâà ­¨æã
SUBLOAD_SIZE EQU 2 ; ª®«-¢® ᥪâ®à®¢ ª®â®à®¥ ­ ¤® ¯®¤£à㧨âì ¯®á«¥ § £à㧪¨ system.dos ¢ áâà ­¨æã
;----------------------------------------------------;

View File

@ -11,7 +11,7 @@ cmd_chdir:
xor a
ld hl,work_buffer1;
cp (hl)
jr nz,A877B
jr nz,.chdir
ld (hl),"." ; ".." த¨â. ¯ ¯ª 
inc hl
ld (hl),"."
@ -19,7 +19,7 @@ cmd_chdir:
ld (hl),0
dec hl
dec hl
A877B: ld c,Dss.ChDir ; ᬥ­¨âì ⥪. ª â «®£
.chdir: ld c,Dss.ChDir ; ᬥ­¨âì ⥪. ª â «®£
RST ToDSS
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
jp Get_Path ; á®åà. ⥪. ¤¨áª ¨ ¯ãâì

View File

@ -181,9 +181,10 @@ cmd_dir:
;ld hl,has_not_full_info
;JR Z,.skip_full_space
;
ld hl,(free_space) ; ¬«. à §àï¤
ld hl,(free_space_low) ; ¬«. à §àï¤
exx
ld hl,(free_space+2) ; áâ. à §àï¤
ld hl,(free_space_medium) ; áâ. à §àï¤
;!FIXIT ¨á¯®«ì§®¢ âì áâ à訩 à §àï¤! free_space_high
exx
CALL Size2Char
ld hl,T8B46 ; "0 000 000 000"
@ -495,11 +496,13 @@ A8B16: inc a
ret
;
D88DC: dw 0
D88DE: dw 0
D88E0: dw 0
dir_number: dw 0
free_space: dword 0
D88DC: WORD 0
D88DE: WORD 0
D88E0: WORD 0
dir_number: WORD 0
free_space_low: WORD 0
free_space_medium: WORD 0
free_space_high: BYTE 0
;
T8B2E: db "000000000"
@ -512,50 +515,76 @@ T8B46: db "0 000 000 000",0
; [x] ⥯¥àì ­¥ «¥§¥â ­ ¯àï¬ãî, ¤¥« ¥â ç¥à¥§ ­®¢ë© ¯ à ¬¥âà ä㭪樨 DskInfo
; ¨­ ï «®£¨ª  ¯®«ã祭¨ï ¬¥âª¨ ⮬  - á­ ç «  ¨é¥âáï ¢ ª®à­¥¢®© ¤¨à¥ªâ®à¨¨,
; ¥á«¨ â ¬ ­¥â, â® ¡¥àñâáï ¨§ BPB
read_disk_info:
OR #80
LD HL,work_buffer
.full+1: LD B,0
LD C,Dss.DskInfo
RST ToDSS
; ” ©«®¢ ï á¨á⥬ 
; ‘¥à¨©­ë© ­®¬¥à ¤¨áª 
; Œ¥âª  ¤¨áª  ¢ BPB
EX AF,AF'
LD A,(.full)
OR A
JR Z,.no_full_space_option
;
; (DE*A)*BC
;PUSH HL ; ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
;PUSH DE ; ᢮¡®¤­ëå ª« áâ¥à®¢
PUSH BC ; à §¬¥à ᥪâ®à  ¢ ¡ ©â å
EX AF,AF'
; !TEST fat 32
;LD C,A ; A - à §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
;CALL Mult16X8
; A:HL = DE*A
LD B,0
LD C,A
EXX
PUSH DE
EXX
POP HL
; HL:DE * BC ᢮¡®¤­ë¥_ª« áâ¥àë * à §¬¥à_ª« áâ¥à _¢_ᥪâ®à å
CALL Mult32
; HL:DE = ᢮¡®¤­ë¥_ᥪâ®àë
;
; EX DE,HL
; LD H,0
; LD L,A
POP BC
CALL Mult32
; HL:DE = ᢮¡®¤­®¥ ¬¥áâ® ;!FIXIT ®£à ­¨ç¥­® 4 £¨£ ¬¨
;
LD (free_space+2),HL
EX DE,HL
LD (free_space),HL
;
read_disk_info: OR #80
LD HL,work_buffer
.full+1: LD B,0
LD C,Dss.DskInfo
RST ToDSS
; ” ©«®¢ ï á¨á⥬ 
; ‘¥à¨©­ë© ­®¬¥à ¤¨áª 
; Œ¥âª  ¤¨áª  ¢ BPB
EX AF,AF'
LD A,(.full)
OR A
JR Z,.no_full_space_option
;
; max sector (LBA28) #0FFF'FFFF
; HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
; DE - ᢮¡®¤­ëå ª« áâ¥à®¢ low
; DE' - ᢮¡®¤­ëå ª« áâ¥à®¢ high
; A - à §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
; BC - à §¬¥à ᥪâ®à  ¢ ¡ ©â å
PUSH IX
;
PUSH BC ; à §¬¥à ᥪâ®à  ¢ ¡ ©â å
EX AF,AF'
; A - à §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
;
; free_clu_L * clu_size_in_sect
LD C,A
EX AF,AF'
CALL Mult16X8 ; DE*C = A:HL
; A:HL = DE*C
;
; free_clu_H * clu_size_in_sect
EXX
EX AF,AF'
LD C,A
PUSH BC
CALL Mult16X8 ; DE*C = A:HL
; max #0FFF'FFFF sectors for LBA28
EX AF,AF'
LD D,0
LD E,A
ADD HL,DE
EXX
; HL':HL - ᢮¡®¤­ëå ᥪâ®à®¢
;
EX DE,HL
POP BC ; à §¬¥à ᥪâ®à  ¢ ¡ ©â å
PUSH BC
CALL Mult_16x16 ; DE*BC = HL:DE.
EXX
POP BC
CALL Mult_16x16 ; DE*BC = HL:DE.
LD XH,D
LD XL,E
EXX
EX DE,HL
ADD IX,DE
EX DE,HL
EXX
JR NC,.no_inc_HL
INC L
; ¯®â®¬ã çâ® ­¥ ¤®«¦­® ¡ëâì ¡®«ìè¥ #001F'FFFF'FE00
; ¯à¨ ᥪâ®à¥ ¢ 512 ¡ ©â®¢
;
.no_inc_HL: LD A,L
LD (free_space_high),A
LD (free_space_medium),IX
EXX
LD (free_space_low),DE
POP IX
;
.no_full_space_option:
; parse
@ -647,8 +676,7 @@ read_disk_info:
.good_label:
POP HL
PUSH HL ; «¨è­¥¥
; ¥áâì ¬¥âª 
; ¥áâì ¬¥âª 
volume_label:
pop DE ; «¨è­¥¥
; %5
@ -663,7 +691,6 @@ volume_label:
call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
ret
;
; ¥á«¨ ­¥ 㤠«®áì ¯à®ç¨â âì á¥à¨©­ë© ­®¬¥à ¤¨áª  ¨«¨ ä®à¬ â ­¥¨§¢¥á⥭
unknown_serial:
; á¥à¨©­ë© ­®¬¥à ¤¨áª  - ­¥¨§¢¥á⥭ ;!HARDCODE ­¨¦¥
@ -787,51 +814,77 @@ Size2Char:
;<3B>à®æ¥¤ãà  ã¬­®¦¥­¨ï (16*8bit)
;<3B>  ¢å®¤: DE * C
;<3B>  ¢ë室:A:HL = १ã«ìâ â
Mult16X8:
SUB A
LD L,A
LD H,A
CP C
RET Z
OR D
OR E
RET Z
LD A,C
LD C,#00
LD B,#08
Mlt16x8:
ADD HL,HL
RLA
JR NC,1F
ADD HL,DE
ADC A,C
1: DJNZ Mlt16x8
RET
Mult16X8: SUB A
LD L,A
LD H,A
CP C
RET Z
OR D
OR E
RET Z
LD A,C
LD C,#00
LD B,#08
.loop: ADD HL,HL
RLA
JR NC,.next
ADD HL,DE
ADC A,C
.next: DJNZ .loop
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
;<3B>à®æ¥¤ãà  ã¬­®¦¥­¨ï (32bit)
;<3B>  ¢å®¤: HL:DE * BC
;<3B>  ¢ë室:HL:DE = १ã«ìâ â
Mult32:
PUSH IX
LD IX,#0000
LD A,#20
EX DE,HL
mul32b:
ADD IX,IX
ADC HL,HL
RL E
RL D
JR NC,noadd1
ADD IX,BC
JR NC,noadd1
INC HL
noadd1:
DEC A
JR NZ,mul32b
LD E,LX
LD D,HX
POP IX
RET
IFUSED Mult32
Mult32: PUSH IX
LD IX,#0000
LD A,#20
EX DE,HL
.loop: ADD IX,IX
ADC HL,HL
RL E
RL D
JR NC,.no_add
ADD IX,BC
JR NC,no_add
INC HL
.no_add: DEC A
JR NZ,.loop
LD E,LX
LD D,HX
POP IX
RET
ENDIF
;----------------------------------------------------------------------;
;INPUT : DE * BC
;OUTPUT: HL:DE
Mult_16x16: LD IX,0
LD HL,0
;
LD A,B
OR C
JR Z,.exit
;
.loop: SRL B
RR C
JP NC,.no_add
ADD IX,DE
JR NC,.no_add
INC HL
;
.no_add: LD A,B
OR C
JR Z,.exit
;
SLA E
RL D
RL L
RL H
JP .loop
;
.exit: LD D,XH
LD E,XL
RET
///////////////////////////////////////////////////////////////////////////////////////

View File

@ -1 +1 @@
316
320