mirror of
https://github.com/Tolik-Trek/ZX-SP-ROMs.git
synced 2026-06-15 09:21:45 +03:00
1229 lines
19 KiB
Plaintext
1229 lines
19 KiB
Plaintext
File_Start DEFL $
|
||
DISPLAY "===================================================="
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
INIT_RMD:
|
||
DI
|
||
LD BC,BIOS.REINIT.FREE_NO_ZX_MEM ; [ ] free zx pages!
|
||
;!TEST 06/01/2024 á®åà 塞 á®áâ®ï¨¥ ¯à¥àë¢ ¨© § 祬-â®
|
||
CALL EXP_FNS
|
||
; [ ] 23/02/2024 £à®å ¥¬ ¯¥à¥å¢ â à¥á¥â
|
||
LD A,ACEX.RET_PORT
|
||
LD BC,BIOS.SET_PORTS
|
||
JP EXP_FNS
|
||
;
|
||
|
||
|
||
; DI
|
||
; LD C,PAGE3
|
||
; IN B,(C)
|
||
; LD A,SYS_PAGE
|
||
; OUT (C),A
|
||
; LD A,(0C000H)
|
||
; CPL
|
||
; LD (0C000H),A
|
||
; OUT (C),B
|
||
; EI
|
||
; CALL INIT_SYS_PAGE
|
||
; JP AUTO_03E1
|
||
|
||
;INIT_SYS_PAGE:
|
||
; LD C,97H
|
||
; CALL EXP_FNS
|
||
; EI
|
||
; RET
|
||
|
||
RAMD_FAT_PROG:
|
||
CALL AUTO_1D97 ; CLS
|
||
CALL OPEN_CH2
|
||
LD HL,SYS_PAGE.RAM_TABLE
|
||
RAMD_F_L1:
|
||
DI
|
||
IN A,(SLOT3)
|
||
LD C,A
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,C
|
||
LD C,(HL)
|
||
OUT (SLOT3),A
|
||
EI
|
||
PUSH HL
|
||
LD A,C
|
||
CALL PRINT_HEX_A
|
||
POP HL
|
||
INC L
|
||
JR NZ,RAMD_F_L1
|
||
CALL OPEN_CH0
|
||
JP AUTO_03E1
|
||
;***************************************************************************
|
||
;[x] ¨á¯à ¢«¥ ¡ £ á ¥à ¡®â î騬¨ ª®¬ ¤ ¬¨ TBON/TBOFF
|
||
TB_ONOFF:
|
||
DEC DE
|
||
DEC DE
|
||
LD A,(DE)
|
||
OR %0010'0000
|
||
CP 'f'
|
||
LD C,BIOS.FN_TURBO
|
||
LD A,BIOS.FN_TURBO.OFF
|
||
JR Z,.set
|
||
;
|
||
LD A,BIOS.FN_TURBO.ON
|
||
.set: JP EXP_FNS
|
||
|
||
; TB_ON_EXE:
|
||
; LD C,BIOS.FN_TURBO
|
||
; LD A,4
|
||
; JP EXP_FNS
|
||
; TB_OFF_EXE:
|
||
; LD C,BIOS.FN_TURBO
|
||
; LD A,3
|
||
; JP EXP_FNS
|
||
;
|
||
;***************************************************************************
|
||
;
|
||
; €«£®à¨â¬ ç⥨ï ä ©«
|
||
;
|
||
;***************************************************************************
|
||
; ‚室 - ¤ ë¥ ä ©« ¢ ¯¥à¥¬¥ëå TR-DOS - ¤«¨ ,áâ àâ®¢ë© ª« áâ¥à
|
||
; ¤à¥á § £à㧪¨, ç «ìë© ¡«®ª § £à㧪¨
|
||
; ¯à¥¤¢ à¨â¥«ì®¥ § 票¥ max2 - ¤«¨ ¡«®ª , ä« £ ¡«®ª®¢®©
|
||
; § £à㧪¨
|
||
;***************************************************************************
|
||
MSDOS_WRITE_FILE:
|
||
LD (ZX_VARS.CONT_BUF_ADR),HL ; ¤à¥á § £à㧪¨
|
||
LD (ZX_VARS.MED_START),A ; áâà ¨æ § £à㧪¨
|
||
LD A,TRDOS_ROM_CMD.WRITE
|
||
JR MSDOS_R_W_FILE
|
||
;
|
||
MSDOS_READ_FILE:
|
||
LD (ZX_VARS.CONT_BUF_ADR),HL ; ¤à¥á § £à㧪¨
|
||
LD (ZX_VARS.MED_START),A ; áâà ¨æ § £à㧪¨
|
||
LD A,TRDOS_ROM_CMD.READ
|
||
MSDOS_R_W_FILE:
|
||
LD (ZX_VARS.MED_LEN),A
|
||
; beg=start_claster. <20>®«ãç¨âì ç «ìë© ª« áâ¥à
|
||
LD IX,(ZX_VARS.START_CLUSTER) ; áâ àâ®¢ë© ª« áâ¥à
|
||
; next=beg
|
||
; max=file_len. ¤«¨ ¢ ª« áâ¥à å
|
||
CALL GET_FILE_CLASTERS_BC
|
||
; LD A,B
|
||
; CALL PRINT_HEX_A
|
||
; LD A,C
|
||
; CALL PRINT_HEX_A
|
||
msd_rf_cont2:
|
||
; max2=blk_len ; ¤«¨ ¡«®ª ¢ ª« áâ¥à å
|
||
|
||
; DI ; GET_BLK_CLASTERS_L
|
||
; IN A,(SLOT3)
|
||
; EX AF,AF'
|
||
; LD A,SYS_PAGE
|
||
; OUT (SLOT3),A
|
||
; LD A,(C_P_B)
|
||
; LD L,A
|
||
; EX AF,AF'
|
||
; OUT (SLOT3),A
|
||
; EI
|
||
|
||
LD L,128
|
||
|
||
msd_rf_cont1:
|
||
; num=0
|
||
PUSH IX
|
||
POP DE
|
||
LD A,0
|
||
;---------------------------------
|
||
msd_rf_cont:
|
||
; num=num+1
|
||
INC A
|
||
; if num=max then goto msd_rf_last_blk ; <20>஢¥à¨âì ç¨á«® ª« áâ¥à®¢,
|
||
CP C
|
||
JR NZ,msd_rf_l1
|
||
DEC B
|
||
INC B
|
||
JR Z,msd_rf_last_blk
|
||
msd_rf_l1:
|
||
; if num=max2 then goto msd_rf_blk ; <20>஢¥à¨âì ç¨á«® ª« áâ¥à®¢,
|
||
CP L
|
||
PUSH HL
|
||
PUSH BC
|
||
PUSH AF
|
||
|
||
JR Z,msd_rf_blk
|
||
; sec=next ; ç¨â ¥¬ëå § ®¤¨ à §
|
||
; next=FAT(sec) ; ‚ëç¨á«¨âì á«¥¤ãî騩 ª« áâ¥à
|
||
CALL FAT_DE_to_HL
|
||
; if next = end then goto msd_rf_last_blk ; ¯à®¢¥à¨âì ª®¥æ
|
||
JR C,msd_rf_last_blk2
|
||
EX DE,HL
|
||
AND A
|
||
INC HL
|
||
; if next-sec = 1 then goto msd_rf_cont ; <20>஢¥à¨âì next
|
||
SBC HL,DE
|
||
JR NZ,msd_rf_blk2
|
||
|
||
POP AF
|
||
POP BC
|
||
POP HL
|
||
JR msd_rf_cont
|
||
;---------------------------------
|
||
msd_rf_blk:
|
||
CALL FAT_DE_to_HL
|
||
JR C,msd_rf_last_blk2
|
||
EX DE,HL
|
||
msd_rf_blk2:
|
||
; beg=next
|
||
; EX DE,IX
|
||
PUSH IX
|
||
PUSH DE
|
||
POP IX
|
||
POP DE
|
||
|
||
POP AF
|
||
PUSH AF
|
||
call READ_num_clasters_from_beg ; ç¨â âì á ª« áâ¥à DE
|
||
POP AF
|
||
POP BC
|
||
POP HL
|
||
LD H,A
|
||
|
||
; max=max-num
|
||
LD A,C
|
||
SUB H
|
||
LD C,A
|
||
JR NC,msd_rf_l2
|
||
DEC B
|
||
msd_rf_l2:
|
||
|
||
; max2=max2-num ; ¡«®ª ®ª®ç¥ ?
|
||
LD A,L
|
||
SUB H
|
||
LD L,A
|
||
; if not max2=0 then goto msd_rf_cont1 ; ¥á«¨ ¤ ,á«¥¤ãî騩 ¡«®ª
|
||
JR NZ,msd_rf_cont1
|
||
; max2=blk_len ; ¤«¨ ¡«®ª ¢ ª« áâ¥à å ¤«ï ç⥨ï
|
||
JR msd_rf_cont2
|
||
;-------------------------------
|
||
msd_rf_last_blk2:
|
||
POP AF
|
||
POP BC
|
||
POP HL
|
||
msd_rf_last_blk:
|
||
; EX DE,IX
|
||
push de
|
||
push ix
|
||
pop de
|
||
pop ix
|
||
call READ_num_clasters_from_beg
|
||
RET
|
||
;=========================================
|
||
READ_num_clasters_from_beg:
|
||
PUSH IX
|
||
PUSH DE
|
||
|
||
CALL CLAST_TO_SEC
|
||
|
||
PUSH AF
|
||
LD A,(ZX_VARS.MED_LEN)
|
||
LD C,A
|
||
SUB TRDOS_ROM_CMD.READ
|
||
JR Z,CONT_XX1
|
||
DEC A
|
||
JR NZ,SKEEP_XX1
|
||
;TRDOS_ROM_CMD.WRITE
|
||
CONT_XX1:
|
||
POP AF
|
||
|
||
ADD A,A
|
||
INC A
|
||
LOOP_128:
|
||
PUSH AF
|
||
PUSH DE
|
||
PUSH IX
|
||
PUSH BC
|
||
|
||
LD HL,(ZX_VARS.CONT_BUF_ADR)
|
||
LD A,(ZX_VARS.MED_START)
|
||
|
||
CALL MSD_R_W_UT
|
||
|
||
LD (ZX_VARS.CONT_BUF_ADR),HL
|
||
LD (ZX_VARS.MED_START),A
|
||
|
||
POP BC
|
||
POP IX
|
||
POP DE
|
||
POP AF
|
||
|
||
LD H,0
|
||
LD L,B
|
||
AND A
|
||
ADC HL,DE
|
||
JR NC,NO_INC_IX
|
||
INC IX
|
||
NO_INC_IX:
|
||
EX DE,HL
|
||
|
||
LD B,128
|
||
DEC A
|
||
JR NZ,LOOP_128
|
||
|
||
POP DE
|
||
POP IX
|
||
RET
|
||
|
||
SKEEP_XX1:
|
||
POP AF
|
||
|
||
POP DE
|
||
POP IX
|
||
RET
|
||
;*****************************************
|
||
;!TODO ¯®á¬®âà¥âì
|
||
; MADE_next_blk:
|
||
; PUSH BC
|
||
; LD C,BIOS.GetMemPageNext
|
||
; CALL EXP_FNS
|
||
; POP BC
|
||
; INC L ; SET ZF, if END BLK !!!
|
||
; LD HL,#C000
|
||
; RET
|
||
;*****************************************
|
||
|
||
CLAST_TO_SEC:
|
||
PUSH AF
|
||
EX DE,HL
|
||
CALL CALC_CLAST
|
||
|
||
DI
|
||
IN A,(SLOT3)
|
||
LD B,A
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,(SYS_PAGE.MS_BPB+CLAST_SIZE)
|
||
LD C,A
|
||
LD A,B
|
||
OUT (SLOT3),A
|
||
EI
|
||
|
||
POP AF
|
||
|
||
PUSH HL
|
||
LD L,A
|
||
LD H,0
|
||
|
||
LD A,C
|
||
CLAST_TO_SEC_L:
|
||
RRA
|
||
JR C,CLAST_TO_SEC_L2
|
||
ADD HL,HL
|
||
JR CLAST_TO_SEC_L
|
||
|
||
CLAST_TO_SEC_L2:
|
||
LD B,L
|
||
LD A,H
|
||
POP HL
|
||
RET
|
||
|
||
|
||
FAT_DE_to_HL:
|
||
; LD H,D
|
||
; LD L,E
|
||
; INC HL
|
||
; AND A
|
||
; RET
|
||
|
||
PUSH AF
|
||
PUSH DE
|
||
PUSH BC
|
||
PUSH IX
|
||
DI
|
||
IN A,(SLOT3)
|
||
LD C,A
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,C
|
||
LD HL,(SYS_PAGE.FAT_FLAG)
|
||
LD BC,(SYS_PAGE.MS_BPB+SEC_SIZE) ; à §¬¥à ᥪâ®à
|
||
OUT (SLOT3),A
|
||
EI
|
||
|
||
PUSH HL
|
||
LD A,H
|
||
AND #80
|
||
LD C,A
|
||
LD H,D
|
||
LD L,E
|
||
|
||
ADD HL,DE
|
||
ADC A,C
|
||
JR NC,FAT_12_L1
|
||
ADD HL,DE
|
||
ADC A,C
|
||
FAT_12_L1:
|
||
ADD HL,DE
|
||
ADC A,C
|
||
|
||
RRA ; A,HL = FATx4..3/2
|
||
RR H
|
||
RR L
|
||
|
||
POP DE ; ¢®ááâ ®¢¨âì ä« £¨ FAT ¢ DE
|
||
PUSH AF ; § ¯®¬¨âì ä« £ ᬥ饨ï
|
||
; HL - ᬥ饨¥ ®â ç « FAT
|
||
|
||
; A,HL - ᬥ饨¥ ¢ FAT
|
||
PUSH HL
|
||
LD C,0
|
||
PUSH BC
|
||
|
||
FAT_DE_L1:
|
||
RR B
|
||
JR C,FAT_DE_L2
|
||
RRA
|
||
RR H
|
||
JR FAT_DE_L1
|
||
|
||
FAT_DE_L2:
|
||
|
||
LD A,H ; A - ᥪâ®à FAT
|
||
BIT 0,D
|
||
JR NZ,CALL_ALL
|
||
CP E ; ®¬¥à à ¥¥ áç¨â ®£® ᥪâ®à FAT
|
||
CALL_ALL:
|
||
CALL NZ,READ_FAT_SEC ; ç¨â âì FAT ᥪâ®à ®¬¥à A
|
||
POP BC ; ¢á¯®¬¨âì à §¬¥à ᥪâ®à
|
||
POP HL ; ¢á¯®¬¨âì ¤à¥á ¢ FAT
|
||
|
||
DEC BC
|
||
LD A,H
|
||
AND B
|
||
LD H,A
|
||
|
||
LD BC,SYS_PAGE.MS_FAT
|
||
ADD HL,BC
|
||
DI
|
||
IN A,(SLOT3)
|
||
LD C,A
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,C
|
||
LD (SYS_PAGE.FAT_FLAG),DE
|
||
LD C,(HL) ; áç¨â âì ª« áâ¥à
|
||
INC HL
|
||
LD B,(HL)
|
||
INC HL
|
||
OUT (SLOT3),A
|
||
; RET_PAGE3
|
||
EI
|
||
POP AF
|
||
JR NC,FAT_HALF
|
||
LD A,4
|
||
FAT_HALF_L:
|
||
RR B
|
||
RR C
|
||
DEC A
|
||
JR NZ,FAT_HALF_L
|
||
FAT_HALF:
|
||
BIT 7,D
|
||
LD A,#FF
|
||
JR NZ,FAT_16_L2
|
||
LD A,#0F
|
||
AND B
|
||
LD B,A
|
||
LD A,#0F
|
||
FAT_16_L2:
|
||
CP B
|
||
JR NZ,NO_END_CLAST
|
||
;FAT_ALL:
|
||
LD A,C
|
||
CP #F0
|
||
JR C,NO_END_CLAST
|
||
LD L,C
|
||
LD H,B
|
||
POP IX
|
||
POP BC
|
||
POP DE
|
||
POP AF
|
||
SCF
|
||
RET
|
||
;-----------------------------------------------------------------------
|
||
|
||
;-----------------------------------------------------------------------
|
||
|
||
;INCLUDE 'trdos/tr_msd_4.asz'
|
||
|
||
;-----------------------------------------------------------------------
|
||
_mInfoBLOCK #09FF-$, #FF
|
||
;த¨®®¢áª¨© ¢¥ªâ®à ¯à¥àë¢ ¨ï
|
||
DW #FFFF
|
||
;-----------------------------------------------------------------------
|
||
|
||
NO_END_CLAST:
|
||
; PUSH AF
|
||
; LD A,B
|
||
; CALL PRINT_HEX_A
|
||
; LD A,C
|
||
; CALL PRINT_HEX_A
|
||
; POP AF
|
||
LD H,B
|
||
LD L,C
|
||
POP IX
|
||
POP BC
|
||
POP DE
|
||
POP AF
|
||
AND A
|
||
RET
|
||
|
||
ERROR_MSG:
|
||
LD HL,MSG_3 ; ERROR msg
|
||
;LD HL,AUTO_29B2 ; ERROR msg
|
||
JP AUTO_03E4
|
||
|
||
;**********************************************
|
||
|
||
READ_FAT_SEC:
|
||
PUSH IX
|
||
PUSH HL
|
||
PUSH BC
|
||
LD E,A
|
||
RES 0,D
|
||
PUSH DE
|
||
LD D,0
|
||
|
||
DI
|
||
IN A,(SLOT3)
|
||
LD L,A
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,L
|
||
LD IX,(SYS_PAGE.MSD_FAT_SEC)
|
||
LD HL,(SYS_PAGE.MSD_FAT_SEC2)
|
||
OUT (SLOT3),A
|
||
EI
|
||
|
||
LD BC,0
|
||
ADD IX,DE
|
||
ADC HL,BC
|
||
|
||
PUSH IX
|
||
POP DE
|
||
PUSH HL
|
||
POP IX
|
||
|
||
LD HL,(ZX_VARS.CONT_BUF_ADR)
|
||
LD A,(ZX_VARS.MED_START)
|
||
PUSH AF
|
||
PUSH HL
|
||
|
||
LD HL,SYS_PAGE.MS_FAT
|
||
LD A,SYS_PAGE
|
||
LD BC,256*2 + TRDOS_ROM_CMD.READ
|
||
CALL MSD_R_W_UT
|
||
|
||
POP HL
|
||
POP AF
|
||
LD (ZX_VARS.CONT_BUF_ADR),HL
|
||
LD (ZX_VARS.MED_START),A
|
||
|
||
POP DE
|
||
POP BC
|
||
POP HL
|
||
POP IX
|
||
RET
|
||
;**********************************************
|
||
;
|
||
; ‘ç¨âë¢ ¨¥ FAT ¯® âਠᥪâ®à ???
|
||
;
|
||
;**********************************************
|
||
|
||
GET_FILE_CLASTERS_BC:
|
||
DI
|
||
IN A,(SLOT3)
|
||
LD L,A
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,L
|
||
LD HL,(SYS_PAGE.CLUSTER_LEN)
|
||
OUT (SLOT3),A
|
||
; RET_PAGE3
|
||
EI
|
||
LD BC,(ZX_VARS.FL_SIZE)
|
||
LD A,(ZX_VARS.FL_SIZE+2)
|
||
LD DE,0
|
||
SCF
|
||
GET_FL_CL_2: ; ¢ëç¨á«¥¨¥ ª®«¨ç¥á⢠ª« áâ¥à®¢ ¢ ä ©«¥
|
||
RR H ; HL/2
|
||
RR L
|
||
JR C,GET_FL_L2 ; ¥á«¨ ¯¥à¢ë© ¡¨â = 1 - ¢ë©â¨ ¨§ 横«
|
||
RRA ; file_len/2
|
||
RR B
|
||
RR C
|
||
JR NC,GET_FL_CL_2
|
||
LD E,1
|
||
JR GET_FL_CL_2
|
||
GET_FL_L2:
|
||
BIT 0,E
|
||
RET Z
|
||
INC BC
|
||
RET
|
||
|
||
;**********************************
|
||
; MS-DOS system
|
||
;**********************************
|
||
|
||
MSDOS_FIND_FILE:
|
||
PUSH DE ; ˆŒŸ ˆ‘ŠŽŒŽƒŽ ”€‰‹€
|
||
CALL MSDOS_1ST_FL
|
||
POP DE
|
||
RET C
|
||
FIND_LOOP_ALL:
|
||
CALL MSDOS_KOMP_FL
|
||
RET Z ; ‚އ‚<E280A1>€’ - ”€‰‹ <20>€‰„…<E2809E> !!
|
||
;MSDOS_FIND_NEXT:
|
||
CALL MSDOS_NEXT_FL
|
||
JR NC,FIND_LOOP_ALL
|
||
RET
|
||
|
||
;***********************************************
|
||
;
|
||
; CHECK_BPB:
|
||
; IN A,(SLOT3)
|
||
; LD E,A
|
||
; LD A,SYS_PAGE
|
||
; DI
|
||
; OUT (SLOT3),A
|
||
; ;
|
||
; LD A,(SYS_PAGE.BPB_PARSED)
|
||
; ADD A,1
|
||
; ;
|
||
; LD A,E
|
||
; OUT (SLOT3),A
|
||
; EI
|
||
; RET
|
||
;***********************************************
|
||
MSDOS_1ST_FL:
|
||
PUSH DE
|
||
; 15/07/2024
|
||
;CALL CHECK_BPB
|
||
CALL READ_BPB
|
||
;CALL C,READ_BPB
|
||
;
|
||
CALL READ_1ST_DIR
|
||
POP DE
|
||
MSDOS_TEST_FL:
|
||
PUSH DE
|
||
DI
|
||
IN A,(SLOT3)
|
||
LD E,A
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,E
|
||
; [x] 07/07/2024 ¯à®¯ã᪠LFN
|
||
PUSH HL
|
||
LD DE,#0B ; FAT_DIRECTORY_RECORD.ATTRIBUT
|
||
ADD HL,DE
|
||
LD D,(HL)
|
||
POP HL
|
||
;
|
||
LD E,(HL)
|
||
OUT (SLOT3),A
|
||
EI
|
||
; [x] 07/07/2024 ¯à®¯ã᪠LFN
|
||
LD A,D
|
||
CP #0F ; FAT_ATTR.LFS_Entry
|
||
JR NZ,.nxt
|
||
POP DE
|
||
JR MSDOS_NEXT_FL
|
||
;
|
||
.nxt: LD A,E
|
||
POP DE
|
||
AND A
|
||
SCF
|
||
RET Z ; ŠŽ<C5A0>…– Š€’€‹Žƒ€
|
||
CP #E5
|
||
JR Z,MSDOS_NEXT_FL
|
||
AND A
|
||
RET
|
||
|
||
;**********************
|
||
MSDOS_NEXT_FL:
|
||
PUSH DE
|
||
LD DE,32 ; FAT_DIRECTORY_RECORD size
|
||
ADD HL,DE
|
||
DI
|
||
IN A,(SLOT3)
|
||
LD D,A
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,(SYS_PAGE.COUNT_FL)
|
||
DEC A
|
||
LD (SYS_PAGE.COUNT_FL),A
|
||
LD E,A
|
||
LD A,D
|
||
OUT (SLOT3),A
|
||
; RET_PAGE3
|
||
EI
|
||
LD A,E
|
||
POP DE
|
||
AND A ; ‘<><E28098>Ž‘ CF !!
|
||
JR NZ,MSDOS_TEST_FL
|
||
PUSH DE
|
||
DI
|
||
IN A,(SLOT3)
|
||
LD D,A
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,(SYS_PAGE.COUNT_SEC)
|
||
DEC A
|
||
LD (SYS_PAGE.COUNT_SEC),A
|
||
LD E,A
|
||
LD A,D
|
||
OUT (SLOT3),A
|
||
; RET_PAGE3
|
||
EI
|
||
LD A,E
|
||
POP DE
|
||
AND A
|
||
SCF
|
||
RET Z
|
||
PUSH DE
|
||
CALL READ_NEXT_DIR
|
||
POP DE
|
||
LD HL,SYS_PAGE.MS_DIR
|
||
JR MSDOS_TEST_FL
|
||
|
||
;**********************************
|
||
MSDOS_CAT:
|
||
PUSH DE
|
||
CALL AUTO_1D97 ; CLS
|
||
CALL OPEN_CH2
|
||
LD A,"\r"
|
||
RST #10
|
||
POP DE ; ‘’<E28098>ŽŠ€ <20>Ž‘‹… CAT
|
||
.loop: LD A,(DE)
|
||
CP " "
|
||
;JR NZ,CAT_NO_SPACE
|
||
INC DE
|
||
JR Z,.loop
|
||
DEC DE
|
||
;CAT_NO_SPACE:
|
||
CP "\r"
|
||
JR NZ,CAT_ALL
|
||
LD DE,CAT_FILES
|
||
CAT_ALL:
|
||
; CALL MSDOS_FIND_FILE
|
||
CALL MSDOS_1ST_FL
|
||
JR C,CAT_END
|
||
CAT_LOOP:
|
||
JR Z,CAT_NO_PRINT
|
||
CALL MSDOS_KOMP_FL
|
||
JR NZ,CAT_NO_PRINT
|
||
PUSH HL
|
||
PUSH DE
|
||
CALL OPEN_CH2
|
||
POP DE
|
||
POP HL
|
||
; CALL COPY_NAME_MSD
|
||
CALL PRINT_MSD_NAME
|
||
CALL PRINT_MSD_DATS
|
||
; CALL MSDOS_FIND_NEXT
|
||
CAT_NO_PRINT:
|
||
CALL MSDOS_NEXT_FL
|
||
JR NC,CAT_LOOP
|
||
CAT_END:
|
||
CALL OPEN_CH0
|
||
JP AUTO_03E1
|
||
|
||
PRINT_MSD_NAME:
|
||
PUSH HL
|
||
PUSH DE
|
||
LD HL,ZX_VARS.FL_NAME
|
||
LD A,' '
|
||
RST #10
|
||
LD A,' '
|
||
RST #10
|
||
;
|
||
LD B,8
|
||
.L1: LD A,(HL)
|
||
;AND #7F ; ¡ £ á ¨¬¥¥¬, ¥á«¨ FAT ¨¬¥ á UTF8
|
||
RST #10
|
||
INC HL
|
||
DJNZ .L1
|
||
;
|
||
LD A,' '
|
||
RST #10
|
||
;
|
||
LD B,3
|
||
.L2: LD A,(HL)
|
||
;AND #7F ; ¡ £ á ¨¬¥¥¬, ¥á«¨ FAT ¨¬¥ á UTF8
|
||
RST #10
|
||
INC HL
|
||
DJNZ .L2
|
||
;
|
||
LD A,6
|
||
RST #10
|
||
POP DE
|
||
POP HL
|
||
RET
|
||
|
||
PRINT_MSD_DATS:
|
||
PUSH HL
|
||
PUSH DE
|
||
LD HL,ZX_VARS.FL_PLACE+1
|
||
LD A,(HL)
|
||
DEC HL
|
||
CALL PRINT_HEX_A
|
||
LD A,(HL)
|
||
DEC HL
|
||
CALL PRINT_HEX_A
|
||
LD A,(HL)
|
||
DEC HL
|
||
CALL PRINT_HEX_A
|
||
LD A,' '
|
||
RST 10H
|
||
LD A,(HL)
|
||
DEC HL
|
||
CALL PRINT_HEX_A
|
||
LD A,(HL)
|
||
DEC HL
|
||
CALL PRINT_HEX_A
|
||
LD A,13
|
||
RST 10H
|
||
POP DE
|
||
POP HL
|
||
RET
|
||
;**********************************************
|
||
CAT_FILES: DB '*.*',13
|
||
;**********************************************
|
||
COPY_NAME_MSD:
|
||
PUSH HL
|
||
PUSH DE
|
||
DI
|
||
IN A,(SLOT3)
|
||
LD C,A
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,C
|
||
LD DE,ZX_VARS.FL_NAME
|
||
LD BC,11
|
||
LDIR
|
||
|
||
LD BC,15
|
||
ADD HL,BC
|
||
LD BC,5
|
||
LDIR
|
||
|
||
LD L,(HL)
|
||
OUT (SLOT3),A
|
||
; RET_PAGE3
|
||
EI
|
||
LD A,L
|
||
POP DE
|
||
POP HL
|
||
AND A ; A = 0 „‹Ÿ ”€‰‹€ „‹ˆ<E280B9>މ < 16 Œ¡.
|
||
RET
|
||
;*********************************************
|
||
|
||
;******************************************************
|
||
CMD_MSDOS: ; MS-DOS ª®¬ ¤¥à !!
|
||
;******************************************************
|
||
CALL SINTAX_RET
|
||
LD HL,WORDS
|
||
LOOP_FIND2:
|
||
LD DE,(ZX_VARS.ADR_DOS_COM)
|
||
INC DE ; <20>யãáâ¨âì /
|
||
|
||
LD A,(HL)
|
||
AND A
|
||
JR Z,END_TAB
|
||
LD B,A
|
||
INC HL
|
||
LOOP_FIND:
|
||
LD A,(DE)
|
||
AND 223
|
||
CP (HL)
|
||
JR NZ,NEXT_WORD
|
||
INC DE
|
||
INC HL
|
||
DJNZ LOOP_FIND
|
||
LD A,(DE)
|
||
CP "\r"
|
||
JR Z,CMD_EXE1
|
||
CP ' '
|
||
JR Z,CMD_EXE
|
||
JR NEXT_WORD2
|
||
CMD_EXE:
|
||
INC DE
|
||
CMD_EXE1:
|
||
LD A,(HL)
|
||
INC HL
|
||
LD H,(HL)
|
||
LD L,A
|
||
CALL JP_HL
|
||
JP AUTO_03E1
|
||
JP_HL: JP (HL)
|
||
|
||
NEXT_WORD:
|
||
INC HL
|
||
DJNZ NEXT_WORD
|
||
NEXT_WORD2:
|
||
INC HL
|
||
INC HL
|
||
JR LOOP_FIND2
|
||
|
||
END_TAB:
|
||
INC DE
|
||
LD A,(DE)
|
||
CP ':'
|
||
DEC DE
|
||
JR NZ,END_TAB3
|
||
LD A,(DE)
|
||
AND 223
|
||
SUB 'A'
|
||
JR C,END_TAB3
|
||
CP 4
|
||
JR NC,END_TAB2
|
||
LD (ZX_VARS.OPER_DISK),A
|
||
LD (ZX_VARS.CONT_DISK),A
|
||
LD B,A
|
||
LD A,(ZX_VARS.PDOS_COPY)
|
||
AND #7C
|
||
OR B
|
||
LD (ZX_VARS.PDOS_COPY),A
|
||
OUT (FDC_93.DrvCTRL),A
|
||
; [ ] 19/07/2024 ª ¦¤ë© ¤¨áª âमá ᢮© à §¤¥« hdd ¬®¦® § ¬ ¯¨âì
|
||
LD C,BIOS.GET_DISK_REDIR
|
||
CALL EXP_FNS
|
||
CP #40
|
||
JR C,.exit
|
||
;
|
||
AND #0F
|
||
LD C,BIOS.HDD_PART
|
||
CALL EXP_FNS
|
||
;LD HL,MSG_3
|
||
;CALL C,AUTO_03C3
|
||
;
|
||
.exit: JP AUTO_03E1
|
||
|
||
END_TAB2:
|
||
SUB 4
|
||
CP SYS_PAGE.RAMD_KEYS.NUM
|
||
JR NC,END_TAB3
|
||
CALL RAMD_SET1
|
||
JP AUTO_03E1
|
||
|
||
END_TAB3:
|
||
LD A,0
|
||
JP LOAD_RMD_XX
|
||
|
||
MSD_ERR:
|
||
LD HL,MSDOS_MSG ; File not found...
|
||
JP AUTO_03E4
|
||
|
||
;************************************
|
||
|
||
LOAD_RMD:
|
||
CALL RAMD_SYM ; ¯®«ãç¨âì ®¬¥à RAM-Disk ¨§ (DE)
|
||
JP C,MSD_ERR
|
||
LOAD_RMD_XX:
|
||
LD (ZX_VARS.MED_START+1),A ; á®åà ¨âì
|
||
CALL MSDOS_FIND_FILE
|
||
JP C,MSD_ERR
|
||
|
||
CALL RMD_BLKS_FL ; B - ç¨á«® ¡«®ª®¢ , DE - ¡á®«îâë© á¥ªâ®à
|
||
LD A,(ZX_VARS.MED_START+1)
|
||
PUSH AF
|
||
CALL CLEAR_RMD_A ; ®á¢®¡®¤¨âì RAM-Disk A
|
||
POP AF
|
||
CALL GET_RMD_A ; ãáâ ®¢¨âì RAM-Disk A à §¬¥à®¬ B
|
||
|
||
LD HL,#C000
|
||
CALL MSDOS_READ_FILE
|
||
JP AUTO_03E1
|
||
|
||
SAVE_RMD:
|
||
CALL RAMD_SYM ; ¯®«ãç¨âì ®¬¥à RAM-Disk ¨§ (DE)
|
||
JP C,MSD_ERR
|
||
LD (ZX_VARS.MED_START+1),A
|
||
CALL MSDOS_FIND_FILE
|
||
JP C,MSD_ERR
|
||
|
||
CALL RMD_BLKS_FL
|
||
|
||
LD A,(ZX_VARS.MED_START+1)
|
||
CALL TEST_RAMD ; ¯à®¢¥à¨âì «¨ç¨¥ RAM-Disk A à §¬¥à®¬ B
|
||
JP C,MSD_ERR ; A - ®¬¥à ¯¥à¢®£® ¡«®ª
|
||
JP Z,MSD_ERR
|
||
|
||
LD HL,#C000
|
||
CALL MSDOS_WRITE_FILE
|
||
JP AUTO_03E1
|
||
|
||
RMD_BLKS_FL:
|
||
LD A,(ZX_VARS.FL_SIZE+2)
|
||
PUSH HL
|
||
LD HL,(ZX_VARS.FL_SIZE)
|
||
LD B,A
|
||
AND A
|
||
RL L
|
||
RL H
|
||
RL B
|
||
AND A
|
||
RL L
|
||
RL H
|
||
RL B
|
||
LD A,H
|
||
OR L
|
||
JR Z,RMD_BLKS_L2
|
||
INC B
|
||
RMD_BLKS_L2:
|
||
POP HL
|
||
RET ; B - —ˆ‘‹Ž <20>‹ŽŠŽ‚ RAM_DISK
|
||
|
||
;****************************************
|
||
; DE - ˆŒŸ ”€‰‹€ ‘Ž *,?
|
||
; HL - ˆŒŸ ‚ Š€’€‹Žƒ…
|
||
MSDOS_KOMP_FL:
|
||
CALL COPY_NAME_MSD ; <20>…<EFBFBD>…Œ…‘’ˆ’œ ˆŒŸ ‚ Ž<>‹€‘’œ TR-DOS
|
||
LD A,(ZX_VARS.FL_NAME)
|
||
AND A
|
||
JR NZ,KOMP_CONT1
|
||
LD A,2 ; ŠŽ<C5A0>…– Š€’€‹Žƒ€
|
||
AND A ; NZ - ˆŒŸ <20>… ‘Ž‚<C5BD>€„€…’
|
||
RET
|
||
|
||
KOMP_CONT1:
|
||
CP 0A5h
|
||
JR NZ,KOMP_CONT2
|
||
LD A,1 ; ‘’…<E28099>’›‰ ”€‰‹ - ˆŒŸ <20>… ‘Ž‚<C5BD>€„€…’
|
||
AND A
|
||
RET
|
||
|
||
KOMP_CONT2:
|
||
PUSH DE
|
||
PUSH HL
|
||
LD HL,ZX_VARS.FL_NAME
|
||
CALL MSDOS_KOMP_ALL
|
||
POP HL
|
||
POP DE
|
||
RET
|
||
|
||
MSDOS_KOMP_ALL:
|
||
LD A,(DE)
|
||
INC DE
|
||
CP " "
|
||
JR Z,MSDOS_KOMP_ALL
|
||
CP "\r"
|
||
JR Z,KOMP_ERROR_NAME ; <20>…‚…<E2809A><E280A6>Ž… ˆŒŸ
|
||
DEC DE
|
||
|
||
LD B,8
|
||
CALL KOMP_TX
|
||
RET NZ
|
||
|
||
LD A,(DE)
|
||
CP "."
|
||
JR Z,KOMP_POINT
|
||
CP "\r"
|
||
JR Z,KOMP_SPACING3
|
||
CP " "
|
||
JR Z,KOMP_SPACING3
|
||
KOMP_ERROR_NAME: ; <20>…‚…<E2809A><E280A6>Ž… ˆŒŸ
|
||
LD A,1
|
||
AND A
|
||
RET
|
||
|
||
KOMP_POINT:
|
||
INC DE
|
||
|
||
LD B,3
|
||
CALL KOMP_TX
|
||
RET NZ
|
||
LD A,(DE)
|
||
CP 13
|
||
RET Z
|
||
CP 20H
|
||
RET Z
|
||
JR KOMP_ERROR_NAME
|
||
|
||
;****************************************************
|
||
KOMP_TX:
|
||
LD A,(DE)
|
||
CP "\r"
|
||
JR Z,KOMP_SPACING
|
||
CP " "
|
||
JR Z,KOMP_SPACING
|
||
CP "."
|
||
JR Z,KOMP_SPACING
|
||
CP "?"
|
||
JR Z,KOMP_EX_OK
|
||
CP "*"
|
||
JR Z,KOMP_EX_OK2
|
||
CP "a"
|
||
JR C,KOMP_EXEC
|
||
CP "z"+1
|
||
JR NC,KOMP_EXEC
|
||
AND %1101'1111
|
||
KOMP_EXEC:
|
||
CP (HL)
|
||
RET NZ ; ¥â ᮢ¯ ¤¥¨ï
|
||
KOMP_EX_OK:
|
||
INC DE
|
||
KOMP_EX_OK2:
|
||
INC HL
|
||
DJNZ KOMP_TX
|
||
CP '*'
|
||
JR NZ,KOMP_NO_STAR1
|
||
INC DE
|
||
KOMP_NO_STAR1:
|
||
XOR A
|
||
RET
|
||
|
||
KOMP_SPACING3:
|
||
LD B,3
|
||
KOMP_SPACING:
|
||
LD A,20H
|
||
KOMP_L2:
|
||
CP (HL)
|
||
INC HL
|
||
RET NZ
|
||
DJNZ KOMP_L2
|
||
RET
|
||
|
||
;************************************************
|
||
|
||
CALC_CLAST: ; HL - áâ àâ®¢ë© ª« áâ¥à
|
||
PUSH BC
|
||
PUSH HL
|
||
DEC HL
|
||
DEC HL
|
||
DI
|
||
IN A,(SLOT3)
|
||
EX AF,AF'
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,(SYS_PAGE.MS_BPB+CLAST_SIZE)
|
||
|
||
EX DE,HL
|
||
LD BC,0
|
||
LD H,B
|
||
LD L,B
|
||
LD HX,B
|
||
LD LX,B
|
||
|
||
CALC_CL_LP:
|
||
ADD IX,DE
|
||
ADC HL,BC
|
||
|
||
DEC A
|
||
JR NZ,CALC_CL_LP
|
||
|
||
LD DE,(SYS_PAGE.MSD_DAT_SEC)
|
||
LD BC,(SYS_PAGE.MSD_DAT_SEC2)
|
||
|
||
ADD IX,DE
|
||
ADC HL,BC ; HL,IX - ‘Œ…™…<E284A2>ˆ… Š‹€‘’…<E28099>€ Ž’ <20>€—€‹€ „€<E2809E><E282AC>›•
|
||
|
||
EX AF,AF'
|
||
OUT (SLOT3),A
|
||
|
||
PUSH IX
|
||
EX (SP),HL
|
||
POP IX
|
||
EX DE,HL
|
||
|
||
EI
|
||
POP HL
|
||
POP BC
|
||
RET
|
||
|
||
|
||
HD_TX: DC ' - HDD error'
|
||
;HD_TX: DC 'HDD error #'
|
||
HD_TX2: DC 'HDD not found'
|
||
MSG_3: DC '*ERROR*'
|
||
MSDOS_MSG: DC 'File not found'
|
||
NO_MEMORY: DC 'Out of memory'
|
||
;NO_MEMORY: DC 'No RAM-Disk MEM'
|
||
|
||
WORDS:
|
||
DB 3,'CAT' ; ª â «®£ MS-DOS
|
||
DW MSDOS_CAT
|
||
DB 3,'DIR' ; ª â «®£ MS-DOS
|
||
DW MSDOS_CAT
|
||
DB 3,'HDD' ; ¯®¤ª«îç¨âì HDD
|
||
DW HDD_SET
|
||
DB 3,'FDD' ; ¯®¤ª«îç¨âì FDD
|
||
DW FDD_SET
|
||
DB 3,'RMD' ; ¯®¤ª«îç¨âì RMD
|
||
DW RAMD_SET
|
||
DB 3,'HDT' ; â¥áâ HDD
|
||
DW HDD_PROG
|
||
DB 2,'RD' ; â¥áâ RAM-Disk space
|
||
DW RAMD_FAT_PROG
|
||
DB 4,'SAVE' ; á®åà ¨âì RAM-Disk
|
||
DW SAVE_RMD
|
||
DB 4,'LOAD' ; § £à㧨âì RAM-Disk
|
||
DW LOAD_RMD
|
||
DB 4,'TBON' ; ¢ª«îç¨âì âãà¡®
|
||
DW TB_ONOFF
|
||
DB 5,'TBOFF' ; ¢ëª«îç¨âì âãà¡®
|
||
DW TB_ONOFF
|
||
DB 4,'INIT' ; २¨§¨ «¨§ æ¨ï
|
||
DW INIT_RMD
|
||
DB 5,'CLEAR' ; ®ç¨áâ¨âì RAM-Disk
|
||
DW CLEAR_RAMD_X
|
||
DB 8,"SPRINTER"
|
||
DW SPR_1
|
||
DB 2,"AY"
|
||
DW AY8910
|
||
DB 0
|
||
|
||
;SAVE_AUTOEXEC:
|
||
; LD C,0FEH
|
||
; CALL EXP_FNS
|
||
; RET
|
||
AY8910:
|
||
LD A,#EA
|
||
LD C,#F3 ;!HARDCODE BIOS.SPRINTER_ALL
|
||
CALL EXP_FNS
|
||
;!TEST 06/01/2024 á®åà 塞 á®áâ®ï¨¥ ¯à¥àë¢ ¨© § 祬-â®
|
||
;EI
|
||
;
|
||
CALL AUTO_1D97
|
||
AND A
|
||
RET
|
||
|
||
SPR_1: LD A,(DE)
|
||
INC DE
|
||
CP " "
|
||
JR Z,SPR_1
|
||
CP "1"
|
||
LD C,BIOS.RST_CONF.SP97_1
|
||
JR Z,SP_1
|
||
CP "2"
|
||
SCF
|
||
RET NZ
|
||
LD C,BIOS.RST_CONF.SP97_2
|
||
SP_1: LD A,(DE)
|
||
CP " "+1
|
||
CCF
|
||
RET C
|
||
CALL EXP_FNS
|
||
CALL AUTO_1D97
|
||
AND A
|
||
RET
|
||
|
||
|
||
;****************************************************
|
||
;*****************************************
|
||
; ERRORS
|
||
;*****************************************
|
||
; 0 - ƒ‹€‚<E282AC>€Ÿ <20><>Ž‚…<E2809A>Š€ <20><>Žƒ<C5BD>€ŒŒ›
|
||
; 1 - <20>…‚…<E2809A><E280A6>›‰ ”Ž<E2809D>Œ€’ ˆŒ…<C592>ˆ
|
||
; 2 - ŠŽ<C5A0>…– Š€’€‹Žƒ€
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
DISPLAY "TR_MSD_3.ASZ size: ",/A,$-File_Start
|
||
DISPLAY "===================================================="
|
||
|
||
|