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. Получить начальный кластер 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 ; Проверить число кластеров, 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 ; Проверить число кластеров, 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 ; Проверить 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 ; ВОЗВРАТ - ФАЙЛ НАЙДЕН !! ;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 ; КОНЕЦ КАТАЛОГА 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 ; СБРОС 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 ; СТРОКА ПОСЛЕ 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 ДЛЯ ФАЙЛА ДЛИНОЙ < 16 Мб. RET ;********************************************* ;****************************************************** CMD_MSDOS: ; MS-DOS командер !! ;****************************************************** CALL SINTAX_RET LD HL,WORDS LOOP_FIND2: LD DE,(ZX_VARS.ADR_DOS_COM) INC DE ; Пропустить / 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 - ЧИСЛО БЛОКОВ RAM_DISK ;**************************************** ; DE - ИМЯ ФАЙЛА СО *,? ; HL - ИМЯ В КАТАЛОГЕ MSDOS_KOMP_FL: CALL COPY_NAME_MSD ; ПЕРЕМЕСТИТЬ ИМЯ В ОБЛАСТЬ TR-DOS LD A,(ZX_VARS.FL_NAME) AND A JR NZ,KOMP_CONT1 LD A,2 ; КОНЕЦ КАТАЛОГА AND A ; NZ - ИМЯ НЕ СОВПАДАЕТ RET KOMP_CONT1: CP 0A5h JR NZ,KOMP_CONT2 LD A,1 ; СТЕРТЫЙ ФАЙЛ - ИМЯ НЕ СОВПАДАЕТ 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 ; НЕВЕРНОЕ ИМЯ 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: ; НЕВЕРНОЕ ИМЯ 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 - СМЕЩЕНИЕ КЛАСТЕРА ОТ НАЧАЛА ДАННЫХ 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 - ГЛАВНАЯ ПРОВЕРКА ПРОГРАММЫ ; 1 - НЕВЕРНЫЙ ФОРМАТ ИМЕНИ ; 2 - КОНЕЦ КАТАЛОГА ;███████████████████████████████████████████████████████████████████████ DISPLAY "TR_MSD_3.ASZ size: ",/A,$-File_Start DISPLAY "===================================================="