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 HL,(FCLUSTR)
LD DE,#C000 LD DE,#C000
CALL FLOAD ; § £à㧪  CALL FLOAD ; § £à㧪 
DI DI
XOR A XOR A
OUT (SYS_PORT.OFF),A OUT (SYS_PORT.OFF),A
@ -434,6 +436,84 @@ SEARCH: LD C,17 ;HANDELS PER SECTOR 512/32 + 1
INC A INC A
RET 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 ; HL - CLUSTER
; DE - ADDRESS ; DE - ADDRESS
;!TODO ᤥ« âì âãâ ®¯à¥¤¥«¥­¨¥ à §¬¥à  SYSTEM.DOS ¨ ¢®§¬®¦­®áâì § £à㧨âì ¡®«ìè¥ 1 áâà ­¨æë ;!TODO ᤥ« âì âãâ ®¯à¥¤¥«¥­¨¥ à §¬¥à  SYSTEM.DOS ¨ ¢®§¬®¦­®áâì § £à㧨âì ¡®«ìè¥ 1 áâà ­¨æë
@ -442,7 +522,7 @@ FLOAD: LD (READMEM),DE
CALL NSECTOR ; Cluster to Sector CALL NSECTOR ; Cluster to Sector
LD DE,(READMEM) LD DE,(READMEM)
LD A,(BOOT.SectorsPerCluster) LD A,(BOOT.SectorsPerCluster)
CP #20 CP #20 + 1 ; !HARDCODE ª®«-¢® § £à㦠¥¬ëå ᥪâ®à®¢
LD C,BIOS.DRV_READ_LONG LD C,BIOS.DRV_READ_LONG
JR C,.SMALL_CLUSTER JR C,.SMALL_CLUSTER
LD A,(BANKDOS) LD A,(BANKDOS)
@ -474,7 +554,6 @@ FLOAD: LD (READMEM),DE
JR .set_drv JR .set_drv
; ;
.SMALL_CLUSTER: LD B,A .SMALL_CLUSTER: LD B,A
;LD C,BIOS.DRV_READ_LONG
LD A,(BANKDOS) LD A,(BANKDOS)
EX AF,AF' EX AF,AF'
LD A,(DRIVE) LD A,(DRIVE)
@ -509,6 +588,12 @@ FLOAD: LD (READMEM),DE
LD (BANKDOS),A LD (BANKDOS),A
LD HL,#C000 LD HL,#C000
LD (READMEM),HL LD (READMEM),HL
LD A,(BOOT.SectorsPerCluster)
SUB SUBLOAD_SIZE + 1
CCF
RET NC
LD A,SUBLOAD_SIZE
LD (BOOT.SectorsPerCluster),A
AND A AND A
RET RET

View File

@ -161,9 +161,15 @@ DISKINF: LD C,B
EXX EXX
LD B,A LD B,A
LD C,A LD C,A
.loop_free_space: .loop_free_space:;!FIXIT
PUSH BC PUSH BC
EXX
PUSH BC
EXX
CALL READ_FROM_FAT CALL READ_FROM_FAT
EXX
POP BC
EXX
POP BC POP BC
CP DSS_Error.sys.DISK_FULL CP DSS_Error.sys.DISK_FULL
RET Z RET Z

View File

@ -399,6 +399,10 @@ DIR_PATH_CHECK: LD A,(HL)
; ;
.checkDir: LD HL,CurrentDirectory+1 .checkDir: LD HL,CurrentDirectory+1
LD DE,WorkDirectory+1 LD DE,WorkDirectory+1
; áçñâ稪
LD A,B
LD B,C
EX AF,AF'
; ;
.loop: LD A,(DE) .loop: LD A,(DE)
AND A AND A
@ -406,8 +410,22 @@ DIR_PATH_CHECK: LD A,(HL)
CP (HL) CP (HL)
INC HL INC HL
INC DE INC DE
JR Z,.loop JR NZ,.gotoPath
JP .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) .end: CP (HL)
RET Z RET Z
@ -418,11 +436,6 @@ DIR_PATH_CHECK: LD A,(HL)
ADD 'A' ADD 'A'
CP (HL) CP (HL)
RET RET
.gotoPath: CALL FINDDIR.CHECK_SLASH
LD A,DSS_Error.sys.PATH_NOT_FOUND
RET C
LD HL,CurrentPath
JP GETWORD
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;

View File

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

View File

@ -1 +1 @@
957 959

View File

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

View File

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

View File

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