This commit is contained in:
Tolik Trek 2026-04-13 01:36:32 +10:00 committed by Tolik
parent 5bf7bd2b68
commit fa0375aad3
4 changed files with 389 additions and 61 deletions

View File

@ -50,7 +50,7 @@ FAT_TYPES: FAT_TYPES_LINE #0800, 32768, CONSTANTS.FAT32 ; > 32768
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
VARIABLES EQU $ VARIABLES EQU $
.FAT_TYPE BYTE CONSTANTS.FAT12 ; [x] .FAT_TYPE BYTE CONSTANTS.FAT12 ; [x]
.CurrentDrive DB 0 ; [x] .CurrentDrive DB #FF ; [x]
.VOLUME_SIZE_BYTES BLOCK 5,0 ; [ ] .VOLUME_SIZE_BYTES BLOCK 5,0 ; [ ]
;.FatFDD_ReservedSectors WORD 1 ;.FatFDD_ReservedSectors WORD 1
;.FatHDD_ReservedSectors WORD 8 ;.FatHDD_ReservedSectors WORD 8

View File

@ -1 +1 @@
9 31

View File

@ -83,7 +83,7 @@ reserved_sectors = ( ((.HIDDEN + min_last_sector) & #0F)>0 ) * #10) - .HIDDEN
INCLUDE 'shared_includes/constants/bios_equ.inc' INCLUDE 'shared_includes/constants/bios_equ.inc'
INCLUDE 'shared_includes/constants/dss_equ.inc' INCLUDE 'shared_includes/constants/dss_equ.inc'
INCLUDE 'shared_includes/structures/FileSystem.inc' INCLUDE 'shared_includes/structures/FileSystem.inc'
INCLUDE 'version.ini' INCLUDE 'version.inc'
; Standart EQU section ; Standart EQU section
;---------------------------------------------------------------------[] ;---------------------------------------------------------------------[]
@ -909,65 +909,56 @@ MAKE_LABEL_IN_DIR:
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
/*
PARSE_CMD: LD A,(HL) PARSE_CMD: LD A,(HL)
INC HL
INC HL INC HL
AND A AND A
JP Z,SHOW_VERSION JP Z,SHOW_VERSION
; ;
CALL .MAIN CALL .MAIN
JP C,STOP_ERROR RET NC
RET JP STOP_ERROR
; ;
.MAIN: PUSH HL .MAIN: PUSH HL
LD BC,Dss.EX_Path.GET_ALL LD BC,Dss.EX_Path.GET_ALL
RST ToDSS RST ToDSS
RET C JP C,STOP_ERROR
; ­ ¬ ­ã¦­  áâப  ¢ ª®â®à®© ¥áâì ¤à ©¢, ­® ­¥â ¯ã⨠; ­ ¬ ­ã¦­  áâப  ¢ ª®â®à®© ¥áâì ¤à ©¢, ­® ­¥â ¯ãâ¨
AND %0000'1100 AND %0000'1100
XOR %0000'1000 XOR %0000'1000
RET NZ
; ¤®áâ ñ¬ ¨¬ï ¤à ©¢  (®­® ¡¥§ ª«îç  "/")
POP HL
PUSH HL
LD DE,SECTOR_BUFFER
LD BC,Dss.EX_Path.GET_DRIVE
RST ToDSS
RET C
;
LD (VARIABLES.CurrentDrive),A
; ⮫쪮 ¤«ï ⮣®, ç⮡ ®¡­®¢¨âì ¯ à ¬¥âàë ¤à ©¢  (¢¤à㣠¤¨áª¥âã ᬥ­¨«¨?)
LD C,Dss.ChDisk
RST ToDSS
JR NC,.no_err_drv
;
CP DSS_Error.sys.MEDIA_CHANGED
JP NZ,STOP_ERROR JP NZ,STOP_ERROR
; ¯¥à¥¡¨à ¥¬ ª«îç¨ "/" ; ¯¥à¥¡¨à ¥¬ ª«îç¨ "/"
.no_err_drv: POP HL .loop: POP HL
.loop: LD A,(HL) LD DE,SECTOR_BUFFER
INC HL LD C,Dss.GSwitch
AND A RST ToDSS
RET Z PUSH HL
; ;
LD A,(SECTOR_BUFFER)
CP '/' ; CP '/' ;
JR Z,.SET_KEY JR Z,.SET_KEY
; ;
CP ' ' AND A
JR Z,.loop EX DE,HL
LD HL,(SECTOR_BUFFER + 1)
LD BC,-':'
ADC HL,BC
EX DE,HL
JR Z,.get_drv
JP STOP_ERROR JP STOP_ERROR
; ;
; ;
.SET_KEY: LD A,(HL) .SET_KEY: LD HL,SECTOR_BUFFER+1
LD A,(HL)
EX AF,AF' EX AF,AF'
INC HL INC HL
LD A,(HL) LD A,(HL)
INC HL INC HL
AND A AND A
JR Z,.cont_set JP NZ,STOP_ERROR ; ­¥¯à ¢¨«ì­ë© ª«îç
;
CP ' '
JR Z,.cont_set
JP STOP_ERROR ; ­¥¯à ¢¨«ì­ë© ª«îç
; ;
.cont_set: EX AF,AF' .cont_set: EX AF,AF'
LD IX,KEYS_PARAMETERS.TABLE LD IX,KEYS_PARAMETERS.TABLE
@ -994,6 +985,146 @@ PARSE_CMD: LD A,(HL)
.next: ADD IX,DE .next: ADD IX,DE
DJNZ .loop_key DJNZ .loop_key
JP STOP_ERROR ; ­¥¯à ¢¨«ì­ë© ª«îç JP STOP_ERROR ; ­¥¯à ¢¨«ì­ë© ª«îç
;
.get_drv: ; ¤®áâ ñ¬ ¨¬ï ¤à ©¢  (®­® ¡¥§ ª«îç  "/")
LD A,(VARIABLES.CurrentDrive)
INC A
JP NZ,STOP_ERROR ; ­¥¯à ¢¨«ì­ë© ª«îç
;
;PUSH HL
LD HL,SECTOR_BUFFER
LD DE,SECTOR_BUFFER + 3
LD BC,Dss.EX_Path.GET_DRIVE
RST ToDSS
JP C,STOP_ERROR ; ­¥¯à ¢¨«ì­ë© ¤à ©¢
;
LD (VARIABLES.CurrentDrive),A
; ⮫쪮 ¤«ï ⮣®, ç⮡ ®¡­®¢¨âì ¯ à ¬¥âàë ¤à ©¢  (¢¤à㣠¤¨áª¥âã ᬥ­¨«¨?)
LD C,Dss.ChDisk
RST ToDSS
JR NC,.loop
;
CP DSS_Error.drv.UNKNOWN_FORMAT
JR Z,.loop
JP STOP_ERROR ; ­¥¯à ¢¨«ì­ë© ¤à ©¢
; .no_err_drv: POP HL
; RET
*/
PARSE_CMD: LD A,(HL)
AND A
JP Z,SHOW_VERSION ; ¤«¨­  CMD áâப¨ ­ã«¥¢ ï
;
INC HL
INC HL
CALL .MAIN
RET NC
JP STOP_ERROR
;
.MAIN: PUSH HL
LD BC,Dss.EX_Path.GET_ALL
RST ToDSS
JP C,STOP_ERROR
; ­ ¬ ­ã¦­  áâப  ¢ ª®â®à®© ¥áâì ¤à ©¢, ­® ­¥â ¯ãâ¨
AND %0000'1100
XOR %0000'1000
JP NZ,STOP_ERROR
;
POP HL
LD A,(HL)
AND #1101'1111
SUB 'A'
JP C,STOP_ERROR
CALL .get_drv
;
; ¯¥à¥¡¨à ¥¬ ª«îç¨ "/"
.loop: CALL .skip_space
RET Z
;
CP '/' ;
JP NZ,STOP_ERROR
;
; AND A
; EX DE,HL
; LD HL,(SECTOR_BUFFER + 1)
; LD BC,-':'
; ADC HL,BC
; EX DE,HL
; JR Z,.get_drv
; JP STOP_ERROR
;
;
.SET_KEY: INC HL
LD A,(HL)
EX AF,AF'
INC HL
LD A,(HL)
AND A
JR Z,.cont_set
CP ' '
JP NZ,STOP_ERROR
;
.cont_set: EX AF,AF'
LD IX,KEYS_PARAMETERS.TABLE
LD B,KEYS_PARAMETERS.TABLE.Elements
LD DE,KEYS_PARAMETERS.KEYS_STR
;
.loop_key: CP (IX + KEYS_PARAMETERS.KEYS_STR.Key)
JR NZ,.next
;
;EX DE,HL
LD E,(IX + KEYS_PARAMETERS.KEYS_STR.Procedure)
LD D,(IX + KEYS_PARAMETERS.KEYS_STR.Procedure + 1)
LD A,E
OR D
CALL NZ,JP_HL
;EX DE,HL
LD A,KEYS_PARAMETERS.Status.On
JR NC,.set_stat
;
LD A,KEYS_PARAMETERS.Status.Ignored
.set_stat: LD (IX + KEYS_PARAMETERS.KEYS_STR.Status),A
JR .loop
;
.next: ADD IX,DE
DJNZ .loop_key
JP STOP_ERROR ; ­¥¯à ¢¨«ì­ë© ª«îç
;
.get_drv: ; ¤®áâ ñ¬ ¨¬ï ¤à ©¢  (®­® ¡¥§ ª«îç  "/")
;LD A,(VARIABLES.CurrentDrive)
;INC A
;JP NZ,STOP_ERROR ; ­¥¯à ¢¨«ì­ë© ª«îç
;
;PUSH HL
;LD HL,SECTOR_BUFFER
;LD DE,SECTOR_BUFFER + 3
;LD BC,Dss.EX_Path.GET_DRIVE
;RST ToDSS
;JP C,STOP_ERROR ; ­¥¯à ¢¨«ì­ë© ¤à ©¢
;
PUSH HL
LD (VARIABLES.CurrentDrive),A
;!TODO § ¯®¬¨­ âì ⥪ã騩 ¯ãâì ¨ ¢®ááâ ­ ¢«¨¢ âì ¯®á«¥ ¢ë室 
;
; ⮫쪮 ¤«ï ⮣®, ç⮡ ®¡­®¢¨âì ¯ à ¬¥âàë ¤à ©¢  (¢¤à㣠¤¨áª¥âã ᬥ­¨«¨?)
LD C,Dss.ChDisk
RST ToDSS
POP HL
INC HL
INC HL
RET NC
;
CP DSS_Error.drv.UNKNOWN_FORMAT
RET Z
JP STOP_ERROR ; ­¥¯à ¢¨«ì­ë© ¤à ©¢
;
.skip_space: LD A,(HL)
AND A
RET Z
INC HL
CP ' '
RET NZ
JR .skip_space
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
@ -1009,7 +1140,7 @@ SHOW_VERSION: LD SP,(STOP_ERROR.Save_SP)
LD C,Dss.PChars LD C,Dss.PChars
RST ToDSS RST ToDSS
; ;
LD BC, 256*DSS_Error.sys.INVALID_DRIVE + Dss.Exit LD BC,Dss.Exit ; + 256*DSS_Error.sys.INVALID_DRIVE
RST ToDSS RST ToDSS
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
@ -1031,8 +1162,207 @@ GET_KEY_FAT: DI
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
;!FIXIT ;!FIXIT
SET_LABEL: DI /*
HALT SET_LABEL: POP HL
EX (SP),HL
; LD DE,SECTOR_BUFFER
; LD C,Dss.GSwitch
; RST ToDSS
; EX (SP),HL
; PUSH HL
;
;LD HL,SECTOR_BUFFER
; LD A,(HL)
; INC HL
; OR A
; SCF
; RET C ; ª«îç ¡¥§ ¬¥âª¨
;
LD A,(HL)
INC HL
CP '"'
SCF
RET NZ ; ¬¥âª  ­ ç¨­ ¥âáï ­¥ á ª ¢ë窨
;
LD DE,SECTOR_BUFFER ; á®§¤ ñ¬ ¬¥âªã âãâ, ¥á«¨ ᨬ¢®«ë ¢ ¯®à浪¥
LD C,FAT_PARAMETERS.LABEL.Size
LD B,C
LD A,(HL)
CP ' '+1
RET C ; no_name
;
CALL .loop1
CALL C,.skip_label
EX (SP),HL
JP (HL)
;
.loop1: LD A,(HL)
AND A
SCF
RET Z
;
;
CP #80
JR NC,.sym_ok
;
CP #22
JR Z,.end_label
CP #7C
SCF
RET Z ; no_name
CP #2A
JR C,.check_3A
CP #30
JR NC,.check_3A
CP #2D
JR Z,.sym_ok
SCF
RET ; no_name
;
.check_3A: CP #3A
JR C,.check_5B
CP #40
JR NC,.check_5B
RET ; no_name
.check_5B: CP #5B
JR C,.sym_ok
CP #5E
RET C ; no_name
.sym_ok: LD (DE),A
INC HL
INC DE
DJNZ .loop1
LD A,(HL)
CP '"'
SCF
RET NZ
;
.end_label: LD A,B
CP C
SCF
RET Z ; áâ ­¤ àâ­ ï ¬¥âª 
;
INC B ; ç⮡ ­¥ âà â¨âì ¡ ©âë ­  ¯à®¢¥àªã ­  ­®«ì
EX DE,HL
.loop2: LD (HL)," "
INC HL
DJNZ .loop2
INC DE
PUSH DE
; B=0, C=FAT_PARAMETERS.LABEL.Size
LD HL,SECTOR_BUFFER
LD DE,FAT_PARAMETERS.LABEL
LDIR
POP HL
AND A
RET
;
.skip_label: LD A,(HL)
AND A
SCF
RET Z
;
CP '/'
SCF
RET Z
INC HL
JR .skip_label
*/
SET_LABEL: LD HL,SECTOR_BUFFER
EX DE,HL
;
LD A,(HL)
INC HL
CP ' '
JR NZ,.skip_label ; ­¥â ¯à®¡¥«  ¬¥¦¤ã ª«î箬 ¨ ¬¥âª®©
;
LD A,(HL)
INC HL
CP '"'
JR NZ,.skip_label ; ¬¥âª  ­ ç¨­ ¥âáï ­¥ á ª ¢ë窨
;
LD DE,SECTOR_BUFFER ; á®§¤ ñ¬ ¬¥âªã âãâ, ¥á«¨ ᨬ¢®«ë ¢ ¯®à浪¥
LD C,FAT_PARAMETERS.LABEL.Size
LD B,C
LD A,(HL)
CP ' '
JR Z,.skip_label ; no_name
;
CALL .loop1
RET NC
JR .skip_label
;
.loop1: LD A,(HL)
AND A
JR Z,.skip_label ; no_name
;
CP #80
JR NC,.sym_ok
;
CP #22
JR Z,.end_label
CP #7C
JR Z,.skip_label ; no_name
;
CP #2A
JR C,.check_3A
CP #30
JR NC,.check_3A
CP #2D
JR Z,.sym_ok
JR .skip_label ; no_name
;
.check_3A: CP #3A
JR C,.check_5B
CP #40
JR C,.skip_label ; no_name
;
.check_5B: CP #5B
JR C,.sym_ok
CP #5E
JR C,.skip_label ; no_name
;
.sym_ok: LD (DE),A
INC HL
INC DE
DJNZ .loop1
LD A,(HL)
CP '"'
SCF
RET NZ
;
.end_label: LD A,B
CP C
SCF
RET Z ; áâ ­¤ àâ­ ï ¬¥âª 
;
INC B ; ç⮡ ­¥ âà â¨âì ¡ ©âë ­  ¯à®¢¥àªã ­  ­®«ì
EX DE,HL
.loop2: LD (HL)," "
INC HL
DJNZ .loop2
INC DE
PUSH DE
; B=0, C=FAT_PARAMETERS.LABEL.Size
LD HL,SECTOR_BUFFER
LD DE,FAT_PARAMETERS.LABEL
LDIR
POP HL
AND A
RET
;
.skip_label: LD A,(HL)
AND A
SCF
RET Z
;
INC HL
CP '"'
SCF
RET Z
JR .skip_label
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
@ -1059,7 +1389,6 @@ STRING_TO_WORD: CALL STR_TO_WORD
; DE - addr next after string decimal ; DE - addr next after string decimal
;!FIXIT ¯à®¢¥àª  ­  ¯ãáâãî áâபã ;!FIXIT ¯à®¢¥àª  ­  ¯ãáâãî áâபã
STR_TO_WORD: LD HL,0 STR_TO_WORD: LD HL,0
.loop: LD B,H .loop: LD B,H
LD C,L LD C,L
; ;
@ -1103,28 +1432,27 @@ STR_TO_WORD: LD HL,0
;<3B>  ¢ë室: ;<3B>  ¢ë室:
; ¡ãä¥à á ⥪áâ.ç¨á«®¬ ; ¡ãä¥à á ⥪áâ.ç¨á«®¬
IFUSED PutHexNumb IFUSED PutHexNumb
PutHexNumb PutHexNumb: PUSH AF
PUSH AF RRCA
RRCA RRCA
RRCA RRCA
RRCA RRCA
RRCA AND #0F
AND #0F ADD A,#90
ADD A,#90 DAA
DAA ADC A,#40
ADC A,#40 DAA
DAA LD (HL),A
LD (HL),A INC L
INC L POP AF
POP AF AND #0F
AND #0F ADD A,#90
ADD A,#90 DAA
DAA ADC A,#40
ADC A,#40 DAA
DAA LD (HL),A
LD (HL),A INC L
INC L RET
RET
ENDIF ENDIF
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------