ZX-SP-ROMs/TRDOS/TR_MSD_2.ASZ
Anatoliy Belyanskiy 31c19d6b26 ...
2024-07-21 01:35:28 +10:00

611 lines
8.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;
; for INCLUDE
; 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
;***********************************************
;
;***********************************************
MSDOS_1ST_FL:
PUSH DE
CALL 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
LD E,(HL)
OUT (SLOT3),A
EI
LD A,E
POP DE
AND A
SCF
RET Z ; ŠŽ<C5A0> Š€’€‹Žƒ€
CP 0E5H
SCF
CCF
; DEC A ; <E28099>‰ ”€‰‹
; AND A
RET
;**********************************
MSDOS_NEXT_FL:
PUSH DE
LD DE,20H
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,13
RST #10
POP DE ; <E28098>ŽŠ€ <20>Ž… CAT
CAT_SPACES:
LD A,(DE)
CP #20
JR NZ,CAT_NO_SPACE
INC DE
JR CAT_SPACES
CAT_NO_SPACE:
CP 13
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 10H
LD A,' '
RST 10H
LD B,8
PRINT_MSD_L1:
LD A,(HL)
RST 10H
INC HL
DJNZ PRINT_MSD_L1
LD A,' '
RST 10H
LD B,3
PRINT_MSD_L2:
LD A,(HL)
RST 10H
INC HL
DJNZ PRINT_MSD_L2
LD A,6
RST 10H
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 13
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 7CH
OR B
LD (ZX_VARS.PDOS_COPY),A
OUT (FDC_93.DrvCTRL),A
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
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,0C000H
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,0C000H
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
;****************************************
MSDOS_KOMP_FL: ; DE - ˆŒŸ ”€‰‹€ ‘Ž *,?
; HL - ˆŒŸ Š€’€‹Žƒ…
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 20H
JR Z,MSDOS_KOMP_ALL
CP 13
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 13
JR Z,KOMP_SPACING3
CP 20H
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 13
JR Z,KOMP_SPACING
CP 20H
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 223
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 HL,0
LD IX,0
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 ' ERR_HD '
HD_TX2: DC 'HDD not found '
MSG_3: DC 'ERROR... '
MSDOS_MSG: DC 'File not found... '
NO_MEMORY: DC 'No RAM-Disk MEM '
WORDS: DB 5,'CLEAR' ; ®ç¨áâ¨âì RAM-Disk
DW CLEAR_RAMD_X
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 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 #21
CCF
RET C
CALL EXP_FNS
;!TEST 06/01/2024 á®å࠭塞 á®áâ®ï­¨¥ ¯à¥à뢠­¨© § ç¥¬-â®
;EI
;
CALL AUTO_1D97
AND A
RET
;****************************************************
;*****************************************
; ERRORS
;*****************************************
; 0 - ƒ<E282AC>€Ÿ <20><>Ž<E2809A>Š€ <20><>Žƒ<C5BD>€ŒŒ
; 1 - <20><E2809A><E280A6>‰ ”Ž<E2809D>Œ€ ˆŒ…<C592>ˆ
; 2 - ŠŽ<C5A0> Š€’€‹Žƒ€
;