From 685e3825823a84120325555438c76f7f3d81853e Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Thu, 18 Jul 2024 05:36:06 +1000 Subject: [PATCH] in progress: current dir for TR-DOS HDD --- SP_TRDOS.ASM | 171 ++++++------- SP__48.ASM | 4 +- Shared_Includes | 2 +- TRDOS/TR_HDD_4.ASZ | 255 ++++++++++++++++--- TRDOS/TR_MSD_2.ASZ | 35 ++- TRDOS/TR_MSD_3.ASZ | 95 +------ TRDOS/TR_MSD_S.ASZ | 84 +++--- TRDOS/TR_RMD_S.ASZ | 55 +--- TRDOS/boot_trd.asm | 618 +++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 1021 insertions(+), 298 deletions(-) create mode 100644 TRDOS/boot_trd.asm diff --git a/SP_TRDOS.ASM b/SP_TRDOS.ASM index 68810b3..a46e3f2 100644 --- a/SP_TRDOS.ASM +++ b/SP_TRDOS.ASM @@ -49,24 +49,16 @@ AUTO_411E EQU #411E AUTO_4130 EQU #4130 AUTO_4140 EQU #4140 AUTO_41FF EQU #41FF -AUTO_5220 EQU #5220 -AUTO_58E8 EQU #58E8 AUTO_5E34 EQU #5E34 AUTO_5F00 EQU #5F00 AUTO_5F10 EQU #5F10 AUTO_5F12 EQU #5F12 -AUTO_6000 EQU #6000 PORT_128 EQU #7FFD AUTO_A1DB EQU #A1DB AUTO_B0ED EQU #B0ED -AUTO_B8ED EQU #B8ED AUTO_C000 EQU #C000 AUTO_C130 EQU #C130 -AUTO_C308 EQU #C308 -AUTO_C916 EQU #C916 -AUTO_FE15 EQU #FE15 -AUTO_FF00 EQU #FF00 ;**************************************** START: DI @@ -526,7 +518,7 @@ AUTO_031A: AUTO_0320: INC C LD D,A - LD A,22 ; 21 !!! Add new comand !! + LD A,TRDOS_CMD.LIST.Size CP C JP C,AUTO_01D3 ; ЕСЛИ НЕ НАЙДЕНО-ВЫЙТИ LD A,D @@ -561,10 +553,15 @@ AUTO_0359: SET 7,(HL) POP HL JP (HL) -NAME_TRD: - DB 127," 1986 Technology Research. " - DB "version 5.05 by Makarchenco Ivan. " - DB " ",0,0 + +;----------------------------------------------------------------------- + _mInfoBLOCK #03AC-$,#FF +; NAME_TRD: +; DB 127," 1986 Technology Research. " +; DB "version 5.05 by Makarchenco Ivan. " +; DB " ",0,0 +;----------------------------------------------------------------------- + AUTO_03AC: CALL AUTO_03FD CALL PRINT_CR @@ -1153,9 +1150,9 @@ WG93_EXE_: INCLUDE 'trdos/tr_msd_3.asz' - _mInfoBLOCK #0B00-$,255 +; _mInfoBLOCK #0B00-$,255 ;!TODO russian charset -ZG_RUS: DB 3 ; идентификатор версии TR-DOS ??? +;ZG_RUS: DB 3 ; идентификатор версии TR-DOS ??? ;************************************** INCLUDE 'trdos/tr_msd_2.asz' @@ -1265,11 +1262,11 @@ AUTO_1059: POP DE POP BC POP HL - AND 223 + AND %1101'1111 EI RET AUTO_106E: - LD HL,AUTO_58E8 + LD HL,#58E8 ;адрес линии атрибутов LD B,10 AUTO_1073: LD (HL),7 @@ -1277,15 +1274,13 @@ AUTO_1073: DJNZ AUTO_1073 LD (HL),2 INC HL - LD (HL),22 + LD (HL),#16 INC HL - DB 54 -AUTO_107F: - INC (HL) + LD (HL),#34 INC HL - LD (HL),'%' + LD (HL),#25 INC HL - LD (HL),'(' + LD (HL),#28 INC HL LD (HL),7 LD HL,AUTO_40F1 @@ -1448,12 +1443,12 @@ AUTO_1205: PUSH AF CALL Z,AUTO_1D97 POP AF - CP 17 + CP 16 + 1 JP NC,CMD_ERROR CALL AUTO_1D84 - LD A,255 + LD A,#FF LD (ZX_VARS.DISK_1_FLG),A - CALL AUTO_1151 + CALL AUTO_1151 ; !FIXIT выделяет память, но не освобождает LD HL,ZX_VARS.CLEAR_SEC LD DE,(ZX_VARS.VAR_1) LD BC,RST20 @@ -4276,7 +4271,7 @@ AUTO_25EF: INC HL LD D,(HL) OR A - LD HL,AUTO_107F + LD HL,ROUTINE.ed_error ;48 basic routine SBC HL,DE JR NZ,AUTO_2626 LD SP,(ZX_VARS.ERR_SP) @@ -5588,66 +5583,64 @@ AUTO_2FDE: RET //////////////////////////////////////////// -TRDOS_CMD: - ; Таблица команд TR-DOS. -.LIST: DB ZX_Token.cat - DB '*' - DB ZX_Token.format - DB ZX_Token.move - ; - DB ZX_Token.new - DB ZX_Token.erase - DB ZX_Token.load - DB ZX_Token.save - ; - DB ZX_Token.return - DB ZX_Token.peek - DB ZX_Token.poke - DB ZX_Token.merge - ; - DB ZX_Token.run - DB ZX_Token.open_channel - DB ZX_Token.close_channel - DB ZX_Token.copy - ; - DB '4' - DB ZX_Token.go_to - DB '8' - DB ZX_Token.list - ; - DB ZX_Token.verify - DB '/' - ;; - ;; -.Size EQU $ - TRDOS_CMD.LIST - ; Таблица адресов подпрограмм, выполняющих команды TR-DOS. -.TABLE: DW CMD_CAT - DW CMD_STAR - DW CMD_FORMAT - DW CMD_MOVE - ; - DW CMD_NEW - DW CMD_ERASE - DW CMD_LOAD - DW CMD_SAVE - ; - DW CMD_RETURN - DW CMD_PEEK - DW CMD_POKE - DW CMD_MERGE - ; - DW CMD_RUN - DW CMD_OPEN - DW CMD_CLOSE - DW CMD_COPY - ; - DW CMD_40 - DW CMD_GOTO - DW CMD_80 - DW CMD_LIST - ; - DW CMD_VERIFY - DW CMD_MSDOS +TRDOS_CMD: ; Таблица команд TR-DOS. +.LIST: DB ZX_Token.cat + DB '*' + DB ZX_Token.format + DB ZX_Token.move + ; + DB ZX_Token.new + DB ZX_Token.erase + DB ZX_Token.load + DB ZX_Token.save + ; + DB ZX_Token.return + DB ZX_Token.peek + DB ZX_Token.poke + DB ZX_Token.merge + ; + DB ZX_Token.run + DB ZX_Token.open_channel + DB ZX_Token.close_channel + DB ZX_Token.copy + ; + DB '4' + DB ZX_Token.go_to + DB '8' + DB ZX_Token.list + ; + DB ZX_Token.verify + DB '/' + ; +.LIST.Size EQU $ - TRDOS_CMD.LIST + ; Таблица адресов подпрограмм, выполняющих команды TR-DOS. +.TABLE: DW CMD_CAT + DW CMD_STAR + DW CMD_FORMAT + DW CMD_MOVE + ; + DW CMD_NEW + DW CMD_ERASE + DW CMD_LOAD + DW CMD_SAVE + ; + DW CMD_RETURN + DW CMD_PEEK + DW CMD_POKE + DW CMD_MERGE + ; + DW CMD_RUN + DW CMD_OPEN + DW CMD_CLOSE + DW CMD_COPY + ; + DW CMD_40 + DW CMD_GOTO + DW CMD_80 + DW CMD_LIST + ; + DW CMD_VERIFY + DW CMD_MSDOS //////////////////////////////////////////// ; ; @@ -6434,8 +6427,8 @@ READR_X: ;***************************** NEW_NAME: - DB 22,1,3, "* Sprinter TR-DOS v.7.02 *" - DB 22,3,6, "(c) 2023 Sprinter Team" + DB 22,1,3, "* Sprinter TR-DOS v.7.03 *" + DB 22,3,6, "(c) 2024 Sprinter Team" DB 22,5,14, "*R.F.*" DB 22,7,9, "BETA 4Mb",0 diff --git a/SP__48.ASM b/SP__48.ASM index cda53cf..a983d9a 100644 --- a/SP__48.ASM +++ b/SP__48.ASM @@ -20358,6 +20358,4 @@ L3D00: DEFB %00000000 DEFB %01000010 DEFB %00111100 - END - - +; END \ No newline at end of file diff --git a/Shared_Includes b/Shared_Includes index 4f546cb..77a5168 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 4f546cb1d2cd8eeb1aec0de2c3e9902d1bb52fee +Subproject commit 77a51684d4d63ad2fdccf416793951df00276b17 diff --git a/TRDOS/TR_HDD_4.ASZ b/TRDOS/TR_HDD_4.ASZ index 2e0beec..8dc2742 100644 --- a/TRDOS/TR_HDD_4.ASZ +++ b/TRDOS/TR_HDD_4.ASZ @@ -1,16 +1,110 @@ +File_Start DEFL $ + DISPLAY "====================================================" +;███████████████████████████████████████████████████████████████████████ + +HDD_PROG: + ;!TEST 06/01/2024 убираем лишние телодвижения + ;LD C,BIOS.HDD_INIT and #BF + ;CALL HD_CMD + LD C,BIOS.HDD_INIT + CALL EXP_FNS + ; + JP C,HDD_PROG_E + LD HL,SYS_PAGE.HD_IDF_ADR.ModelNum + LD B,32 +HDD_PROG_L: + DI + IN A,(SLOT3) + LD D,A + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,L + XOR 1 + LD L,A + LD C,(HL) + LD A,L + XOR 1 + LD L,A + INC HL + LD A,D + OUT (SLOT3),A +; RET_PAGE3 + EI + LD A,C + PUSH BC + RST #10 + POP BC + DJNZ HDD_PROG_L + ;!TEST 06/01/2024 убираем лишние телодвижения + ;LD C,BIOS.HDD_RECAL and #BF + ;CALL HD_CMD + LD C,BIOS.HDD_RECAL + CALL EXP_FNS + ; + JP NC,AUTO_03E1 + +HDD_ERROR: + CALL PRINT_HEX_A + LD HL,HD_TX + JP AUTO_03E4 + +; JP AUTO_03E1 + +HDD_PROG_E: + LD HL,HD_TX2 + JP AUTO_03E4 + +; +HDD_SET:;!TEST +.loop: LD A,(DE) + INC DE + CP " " + JR Z,.loop + CP "\r" + JR Z,.init + ; + DEC DE + DEC DE + JP CHOOSE_HDD + ;CALL CHOOSE_HDD + ;CALL READ_BPB + ;RET + ; +; [x] new tr-hdd +.init: ;CALL CORRECT_CUR_DIR + DI + IN A,(SLOT3) + LD C,A + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD A,(SYS_PAGE.CURRENT_DIR_HDD) + CP #FF + JR Z,.skip + LD (SYS_PAGE.CURRENT_HDD),A + ; +.skip: ;LD A,(SYS_PAGE.CURRENT_HDD) + OR #40 + PUSH AF + LD A,C + OUT (SLOT3),A + ; + LD C,BIOS.HDD_INIT + CALL EXP_FNS + POP AF + JP C,HDD_PROG_E + ; + ; LD BC,(ZX_VARS.OPER_DISK - 1) + ; LD A,(ZX_VARS.OPER_DISK) + ; LD B,A + ; XOR A + LD E,A + LD C,BIOS.SET_DISK_REDIR + JP EXP_FNS ;[x] 29/01/2024 ;выход: A: bit1 - Primary/Secondary, bit0 - master/slave, bit2..3: использующийся раздел в MBR CHOOSE_HDD: - PUSH DE - LD A,(ZX_VARS.OPER_DISK) - LD C,BIOS.GET_DRV_ST - CALL EXP_FNS - POP DE - JR C,.error - AND #40 ;!HARDCODE HDD - CALL Z,.setUp_HDD - ; .loop: LD A,(DE) INC DE CP " " @@ -18,8 +112,7 @@ CHOOSE_HDD: LD A,(DE) CP "\r" JR Z,.error -.cont: ; номер раздела - ;INC DE + ; номер раздела LD A,(DE) CP "4" JR NC,.error @@ -29,17 +122,6 @@ CHOOSE_HDD: RLA RLA LD C,A - ; ; master/slave - ; DEC DE - ; LD A,(DE) - ; CP "2" - ; JR NC,.error - ; CP "0" - ; JR C,.error - ; SUB "0" - ; RLA - ; OR C - ; LD C,A ; Primary/Secondary, master/slave DEC DE LD A,(DE) @@ -50,20 +132,129 @@ CHOOSE_HDD: SUB "0" OR C ; + PUSH AF LD C,BIOS.HDD_PART CALL EXP_FNS - RET NC + POP BC + JR C,.error ; -.error: LD HL,MSG_3 + SCF + ;CALL CORRECT_CUR_DIR + CALL RESTORE_CURRENT_DIR + ; + XOR A + LD C,A ; обнулить C + LD A,B + ;OR #40 + LD B,A + ; + ; PUSH AF + ; LD A,(ZX_VARS.OPER_DISK) + ; LD C,BIOS.GET_DRV_ST + ; CALL EXP_FNS + ; POP BC + ; JR C,.error + ; ; + ; AND #40 ;!HARDCODE HDD + ; LD C,A ; обнулить C + ; LD A,B + ; RET NZ + ; + PUSH BC + LD BC,(ZX_VARS.OPER_DISK - 1) + ; LD B,A + ; XOR A + LD C,BIOS.HDD_TO_DRV + CALL EXP_FNS + POP AF + RET + ; +.error: ;AND %1101'1111 + ;CP "*" + ;JR Z,.set_from_sys_page + LD HL,MSG_3 JP ERR_EXIT ; -.setUp_HDD: - LD A,(ZX_VARS.OPER_DISK) - LD B,A - XOR A - LD C,BIOS.HDD_TO_DRV - PUSH DE +; .setUp_HDD: +; PUSH BC +; LD A,(ZX_VARS.OPER_DISK) +; LD B,A +; XOR A +; LD C,BIOS.HDD_TO_DRV +; CALL EXP_FNS +; POP BC +; RET + ; +;.set_from_sys_page: +; !!! + + +; CF=1: skip resest CURRENT_HDD +; CF=0: resest CURRENT_HDD + + +; [x] new tr-hdd +RESTORE_CURRENT_DIR: + PUSH AF + ; + LD C,BIOS.GET_DISK_REDIR CALL EXP_FNS - POP DE + CP #40 + JR C,.exit_Res_Dir + AND #0F + LD H,A + ; + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD A,(SYS_PAGE.CURRENT_DIR_HDD) + CP H + JR NZ,.exit_Res_Dir + + LD HL,(SYS_PAGE.CURRENT_DIR_SEC_L) + LD DE,(SYS_PAGE.CURRENT_DIR_SEC_H) + LD A,H + OR L + OR D + OR E + JR Z,.exit_Res_Dir + ; + LD (SYS_PAGE.MSD_CAT_SEC),HL + LD (SYS_PAGE.MSD_CAT_SEC2),DE +.exit_Res_Dir: + EX AF,AF' + OUT (SLOT3),A + POP AF RET -; \ No newline at end of file + ; + + +; [x] new tr-hdd +; TO INIT by SPECTRUM.EXE: +; .CURRENT_DIR_SEC_L EQU #C196 ; word +; .CURRENT_DIR_SEC_H EQU #C198 ; word +; .CURRENT_DIR_HDD EQU #C19A +; .CURRENT_HDD EQU #C12D + +; CORRECT_CUR_DIR: +; DI +; IN A,(SLOT3) +; LD C,A +; LD A,SYS_PAGE +; OUT (SLOT3),A +; LD A,#FF +; JR C,.skip +; LD (SYS_PAGE.CURRENT_HDD),A +; .skip: INC A +; LD H,A +; LD L,A +; LD (SYS_PAGE.CURRENT_DIR_SEC_L),HL +; LD (SYS_PAGE.CURRENT_DIR_SEC_H),HL +; LD A,C +; OUT (SLOT3),A +; RET +;███████████████████████████████████████████████████████████████████████ + DISPLAY "TR_HDD_4.ASZ size: ",/A,$-File_Start + DISPLAY "====================================================" \ No newline at end of file diff --git a/TRDOS/TR_MSD_2.ASZ b/TRDOS/TR_MSD_2.ASZ index ac3de9f..119dcea 100644 --- a/TRDOS/TR_MSD_2.ASZ +++ b/TRDOS/TR_MSD_2.ASZ @@ -1,7 +1,9 @@ -; -; for INCLUDE +File_Start DEFL $ + DISPLAY "====================================================" +;███████████████████████████████████████████████████████████████████████ + +;********************************** ; MS-DOS system -; ;********************************** MSDOS_FIND_FILE: @@ -19,10 +21,28 @@ MSDOS_FIND_NEXT: ;*********************************************** ; +; 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 - CALL READ_BPB + ; 15/07/2024 + ;CALL CHECK_BPB + CALL READ_BPB + ;CALL C,READ_BPB + ; CALL READ_1ST_DIR POP DE MSDOS_TEST_FL: @@ -341,7 +361,7 @@ LOAD_RMD_XX: POP AF CALL GET_RMD_A ; установить RAM-Disk A размером B - LD HL,0C000H + LD HL,#C000 CALL MSDOS_READ_FILE JP AUTO_03E1 @@ -570,7 +590,7 @@ WORDS: DB 5,'CLEAR' ; DW TB_ONOFF DB 5,'TBOFF' ; выключить турбо DW TB_ONOFF - DB 4,'INIT' ; инизиализация + DB 4,'INIT' ; реинизиализация DW INIT_RMD DB 8,"SPRINTER" DW SPR_1 @@ -625,3 +645,6 @@ SP_1: LD A,(DE) ; 1 - НЕВЕРНЫЙ ФОРМАТ ИМЕНИ ; 2 - КОНЕЦ КАТАЛОГА ; +;███████████████████████████████████████████████████████████████████████ + DISPLAY "TR_MSD_2.ASZ size: ",/A,$-File_Start + DISPLAY "====================================================" \ No newline at end of file diff --git a/TRDOS/TR_MSD_3.ASZ b/TRDOS/TR_MSD_3.ASZ index 3a73f6c..f4a9407 100644 --- a/TRDOS/TR_MSD_3.ASZ +++ b/TRDOS/TR_MSD_3.ASZ @@ -1,4 +1,6 @@ - +File_Start DEFL $ + DISPLAY "====================================================" +;███████████████████████████████████████████████████████████████████████ INIT_RMD: LD C,BIOS.FullInit ;!TEST 06/01/2024 сохраняем состояние прерываний зачем-то @@ -559,90 +561,7 @@ GET_FL_L2: RET Z INC BC RET -;*************************************************************************** - -HDD_PROG: - ;!TEST 06/01/2024 убираем лишние телодвижения - ;LD C,BIOS.HDD_INIT and #BF - ;CALL HD_CMD - LD C,BIOS.HDD_INIT - CALL EXP_FNS - ; - JP C,HDD_PROG_E - LD HL,SYS_PAGE.HD_IDF_ADR+54 - LD B,32 -HDD_PROG_L: - DI - IN A,(SLOT3) - LD D,A - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,L - XOR 1 - LD L,A - LD C,(HL) - LD A,L - XOR 1 - LD L,A - INC HL - LD A,D - OUT (SLOT3),A -; RET_PAGE3 - EI - LD A,C - PUSH BC - RST 10H - POP BC - DJNZ HDD_PROG_L - ;!TEST 06/01/2024 убираем лишние телодвижения - ;LD C,BIOS.HDD_RECAL and #BF - ;CALL HD_CMD - LD C,BIOS.HDD_RECAL - CALL EXP_FNS - ; - JP NC,AUTO_03E1 - -HDD_ERROR: - CALL PRINT_HEX_A - LD HL,HD_TX - JP AUTO_03E4 - -; JP AUTO_03E1 - -HDD_PROG_E: - LD HL,HD_TX2 - JP AUTO_03E4 - -; -HDD_SET:;!TEST -.loop: LD A,(DE) - INC DE - CP ' ' - JR Z,.loop - CP "\r" - JR Z,.init - ; - DEC DE - DEC DE - JP CHOOSE_HDD - ; - -.init: ;!TEST 06/01/2024 убираем лишние телодвижения - ;LD C,BIOS.HDD_INIT and #BF - ;CALL HD_CMD - LD C,BIOS.HDD_INIT - CALL EXP_FNS - ; - JP C,HDD_PROG_E - - LD A,(ZX_VARS.OPER_DISK) - LD B,A - XOR A - LD C,BIOS.HDD_TO_DRV - ;!TEST 06/01/2024 сохраняем состояние прерываний зачем-то - JP EXP_FNS - ;CALL EXP_FNS - ;EI - ;RET - ; -;*************************************************************************** \ No newline at end of file +;*********************************************************************** +;███████████████████████████████████████████████████████████████████████ + DISPLAY "TR_MSD_3.ASZ size: ",/A,$-File_Start + DISPLAY "====================================================" \ No newline at end of file diff --git a/TRDOS/TR_MSD_S.ASZ b/TRDOS/TR_MSD_S.ASZ index f2373b4..663be83 100644 --- a/TRDOS/TR_MSD_S.ASZ +++ b/TRDOS/TR_MSD_S.ASZ @@ -1,7 +1,9 @@ -; -; for INCLUDE +File_Start DEFL $ + DISPLAY "====================================================" +;███████████████████████████████████████████████████████████████████████ + +;******************************************** ; MS-DOS system -; ;******************************************** ; MS-DOS utilites ;******************************************** @@ -427,20 +429,23 @@ SET_1440: READ_BPB: CALL DISK_REDIR + ; LD C,BIOS.GET_DISK_REDIR + ; CALL EXP_FNS CP #40 - JR NC,.HDD_REDIR2 + JR NC,.HDD CP 4 JP NC,.ERROR_MSDOS - + ; CALL SET_DISK - + ; CALL .MAIN RET NC JP .ERROR_MSDOS -.HDD_REDIR2: - CALL .MAIN + ; +.HDD: CALL .MAIN + CALL NC,RESTORE_CURRENT_DIR ; [x] new tr-hdd RET NC -.SPACIAL: + ; old hdd LD IX,0 LD DE,63 ;!HARDCODE LD A,SYS_PAGE @@ -450,17 +455,18 @@ READ_BPB: CALL MSD_R_W_UT ; CALL .PARAMS + CALL NC,RESTORE_CURRENT_DIR ; [x] new tr-hdd RET NC JP .ERROR_MSDOS + ; .MAIN: LD A,SYS_PAGE LD HL,SYS_PAGE.MS_BPB LD C,TRDOS_ROM_CMD.READ_BPB CALL MSD_R_W_UT - ;CALL BPB_PARAMS ;RET - + ; ; LD C,18H ; LD A,(ZX_VARS.OPER_DISK) ; CALL HD_CMD @@ -493,8 +499,8 @@ READ_BPB: CP #F0 JP C,.ERROR_BPB - LD HL,SYS_PAGE.MS_BPB+FAT_ID - LD DE,.FAT1_MSG + LD DE,SYS_PAGE.MS_BPB+FAT_ID + LD HL,.FAT1_MSG LD B,4 .L1: LD A,(DE) CP ' ' @@ -507,7 +513,7 @@ READ_BPB: INC HL INC DE DJNZ .L1 - LD A,(HL) + LD A,(DE) CP '6' LD HL,#81FF ; FAT16 флаг JR Z,.FAT @@ -521,15 +527,16 @@ READ_BPB: LD A,(SYS_PAGE.MS_BPB+S_P_T) ; Количество секторов на трек LD (SYS_PAGE.MSD_SECS),A - BIT 7,H + ; BIT 7,H - LD IX,0 - LD HL,0 ; вычислить начальный сектор FAT + ; LD IX,0 + ; LD HL,0 ; вычислить начальный сектор FAT + ; JR Z,.NO_LD_SPECIAL - JR Z,.NO_LD_SPECIAL LD IX,(SYS_PAGE.MS_BPB+SPECIAL_SECS) LD HL,(SYS_PAGE.MS_BPB+SPECIAL_SECS+2) -.NO_LD_SPECIAL: + +;.NO_LD_SPECIAL: LD BC,0 LD DE,(SYS_PAGE.MS_BPB+RESERV_SECS) @@ -539,10 +546,10 @@ READ_BPB: LD (SYS_PAGE.MSD_FAT_SEC),IX ; начальный сектор FAT LD (SYS_PAGE.MSD_FAT_SEC2),HL ; начальный сектор FAT - LD DE,(SYS_PAGE.MS_BPB+S_P_F) ; число секторов в FAT - LD BC,0 + LD DE,(SYS_PAGE.MS_BPB+S_P_F) ; число секторов в FAT + ;LD BC,0 - LD A,(SYS_PAGE.MS_BPB+FATS_NUM) ; количество FATs + LD A,(SYS_PAGE.MS_BPB+FATS_NUM) ; количество FATs .NEXT_ADD: ADD IX,DE ADC HL,BC @@ -552,16 +559,18 @@ READ_BPB: LD (SYS_PAGE.MSD_CAT_SEC),IX ; начальный сектор DIR LD (SYS_PAGE.MSD_CAT_SEC2),HL ; начальный сектор DIR + ; A=0 + LD BC,(SYS_PAGE.MS_BPB+SEC_SIZE) ; Размер сектора + LD A,B RL C - RL B + RLA RL C - RL B + RLA RL C - RL B - LD C,B + RLA + LD C,A LD B,0 ; BC - число файловых записей в секторе - LD A,C LD (SYS_PAGE.FilesPerSector),A LD DE,(SYS_PAGE.MS_BPB+FLS_NUM) ; Число файловых записей @@ -577,8 +586,8 @@ READ_BPB: EX DE,HL LD E,A ; A - число секторов в DIR - LD D,0 LD BC,0 + LD D,B LD (SYS_PAGE.SectorsPerCluster),A ADD IX,DE ; Начало DATA area @@ -588,10 +597,12 @@ READ_BPB: LD (SYS_PAGE.MSD_DAT_SEC2),HL LD BC,(SYS_PAGE.MS_BPB+SEC_SIZE) ; Размер сектора - LD HL,0 + ; D = 0 + LD H,D + LD L,D LD A,(SYS_PAGE.MS_BPB+CLAST_SIZE) LD D,A - LD A,L + XOR A .NEXT_ADD3: ADD HL,BC ; Вычисление длины кластера ADC A,0 @@ -599,11 +610,14 @@ READ_BPB: JR NZ,.NEXT_ADD3 LD (SYS_PAGE.CLASTER_LEN),HL - LD B,0 + ; D = 0 + LD B,D LD C,A LD (SYS_PAGE.CLASTER_LEN2),BC - LD HL,0 + ; D = 0 + LD H,D + LD L,D LD BC,(SYS_PAGE.MS_BPB+S_P_T) LD A,(SYS_PAGE.MS_BPB+H_P_S) .BPB_L1:; ВЫЧИСЛИТЬ КОЛИЧЕСТВО СЕКТОРОВ НА ЦИЛИНДР @@ -627,6 +641,7 @@ READ_BPB: .ERROR_MSDOS: LD HL,MSG_3 JP AUTO_03E4 + ; .FAT1_MSG: DB 'FAT1' ;******************************************** @@ -759,7 +774,8 @@ NO_ADD: POP DE POP HL RET - ;******************************************* - +;███████████████████████████████████████████████████████████████████████ + DISPLAY "TR_MSD_S.ASZ size: ",/A,$-File_Start + DISPLAY "====================================================" diff --git a/TRDOS/TR_RMD_S.ASZ b/TRDOS/TR_RMD_S.ASZ index 356e45d..73ea1d2 100644 --- a/TRDOS/TR_RMD_S.ASZ +++ b/TRDOS/TR_RMD_S.ASZ @@ -1,19 +1,16 @@ -; +File_Start DEFL $ + DISPLAY "====================================================" +;███████████████████████████████████████████████████████████████████████ + DEFINE NEW_RAMDRV_READ 1 - DISK_REDIR: - PUSH HL + ;PUSH HL PUSH BC - LD A,(ZX_VARS.OPER_DISK) - AND 3 - LD C,BIOS.GET_DRV_ST + LD C,BIOS.GET_DISK_REDIR CALL EXP_FNS - ;!TEST 06/01/2024 сохраняем состояние прерываний зачем-то - ;EI - ; POP BC - POP HL + ;POP HL RET R_W_REDIR: @@ -550,41 +547,6 @@ READ_WRITE_RAMD: ; A = RAM Block ID EX AF,AF' ; - ;POP DE - ; POP BC - ; PUSH BC -; ; !TEST накручиваем счётчик r/w секторов -; LD HL,(ZX_VARS.CONT_SEC) -; LD D,H -; LD E,L -; ;!TODO переделать эту тупость на математику -; LD A,16 -; .loop: INC L -; CP L -; JR NZ,.skip -; INC H -; LD L,0 -; .skip: DJNZ .loop -; ; сохраняем накрученный счётчик -; LD (ZX_VARS.CONT_SEC),HL -; ; ФИЗИЧЕСКИЙ СЕКТОР -> ЛОГИЧЕСКИЙ -; LD A,D -; RRCA -; RRCA -; RRCA -; RRCA -; LD D,A -; AND #F0 -; OR E -; LD E,A -; LD A,D -; AND #0F -; LD D,A -; ; - ; POP BC - ; PUSH BC - - POP HL ; Get command r/w LD A,(ZX_VARS.RD_WR_COM) @@ -630,3 +592,6 @@ READ_WRITE_RAMD: ENDIF ;*********************************************************************** +;███████████████████████████████████████████████████████████████████████ + DISPLAY "TR_RMD_S.ASZ size: ",/A,$-File_Start + DISPLAY "====================================================" \ No newline at end of file diff --git a/TRDOS/boot_trd.asm b/TRDOS/boot_trd.asm new file mode 100644 index 0000000..c4b5a5d --- /dev/null +++ b/TRDOS/boot_trd.asm @@ -0,0 +1,618 @@ +/* +BOOTER +;выполнялка ком."8" +;вместо #29AE + LD BC,#F4FF + RST #20 + DW #1EAF ;CLEAR_RUN + ; + LD A,1 + RST #20 + DW #229B ;border и 23624 + ; + DI + LD HL,bootkus1 ;#E00 + LD DE,#F500 + LD BC,bootln1 ;#1F5 + PUSH DE + LDIR + LD HL,bootkus2 ;#344D + LD BC,bootln2+1 ;#334 + LDIR + SET 3,(IY+#01) + RET +*/ + + + + + org 0 + INCLUDE 'Shared_Includes/constants/ZX_VARS.inc' + INCLUDE 'Shared_Includes/constants/sp2000.inc' + INCLUDE 'inc/rom_routines.inc' + + +bootkus1: DISP #F500 + DI ;его и #344D копирует #3AE7 + PUSH AF + PUSH HL + PUSH DE + PUSH BC + EXX + PUSH HL + LD HL,(ZX_VARS.ERR_SP) + LD (.ERR_SP),HL + LD A,(ZX_VARS.CONT_DISK) + LD (ZX_VARS.OPER_DISK),A + ADD A,#3C + LD (ZX_VARS.PDOS_COPY),A + LD HL,#3C00 + LD DE,#8000 + PUSH DE + LD (ZX_VARS.ZG),DE + LD BC,#0400 + LDIR + LD (IY+#47),#00 + POP HL + LD BC,#0080 +.big_loop: PUSH BC + INC HL + INC HL + INC HL + LD B,#03 +.loop1: LD D,(HL) + LD A,D + RLA + OR D + LD (HL),A + INC HL + DJNZ .loop1 + POP BC + DEC BC + INC HL + INC HL + LD A,B + OR C + JR NZ,.big_loop + XOR A + OUT (BorderColor),A + LD A,#44 + LD (ZX_VARS.BORDER),A + DEC A + DEC A + LD (ZX_VARS.ATTR_P),A + CALL ROUTINE.cls +.loop2: DI + XOR A + LD (VAR_1),A +.var_3+1: LD HL,LL3761 + PUSH HL + LD (ZX_VARS.ERR_SP),SP + LD (IY+#00),#FF + LD A,(ZX_VARS.CONT_DISK) + LD C,#01 + CALL #3D13 + LD HL,#9000 + LD DE,#0000 + LD BC,#0805 + CALL #3D13 + LD A,(IY+#00) + CP #FF + JR NZ,.loop2 + LD HL,.loop2 + LD (.var_3),HL + EXX + LD DE,#A000 + EXX + LD HL,#9000 + LD DE,#0008 + LD A,(HL) + OR A + JP Z,LF887 +.loop3: LD DE,#0008 + ADD HL,DE + LD A,(HL) + CP #42 + CALL Z,LF836 + ADD HL,DE + LD A,(HL) + OR A + JR NZ,.loop3 + LD A,(VAR_1) + OR A + JP Z,LF887 + LD B,#3F + SBC A,B + JP NC,LF8A6 + LD A,(VAR_1) + DEC A + LD (#F86F),A + CALL #F9BB + LD (#F653),A + CALL #0D6B + DI + CALL #F870 + LD A,#02 + CALL #F8CB + LD A,#02 + CALL #1601 + LD (IY+#47),#00 + LD DE,#A000 + LD HL,#0008 +.loop4: LD A,#20 + RST #10 + LD A,#20 + RST #10 + LD BC,#0008 + PUSH DE + CALL #203C + POP DE + EXD + ADC HL,DE + EXD + LD A,(VAR_1) + DEC A + LD (VAR_1),A + JR Z,LL0f35 + LD A,#20 + RST #10 + LD A,#20 + RST #10 + LD BC,#0008 + PUSH DE + CALL #203C + POP DE + EXD + ADC HL,DE + EXD + LD A,(VAR_1) + DEC A + LD (VAR_1),A + JR Z,LL0f35 + LD A,#20 + RST #10 + LD A,#20 + RST #10 + LD BC,#0008 + PUSH DE + CALL #203C + POP DE + EXD + ADC HL,DE + EXD + LD A,(VAR_1) + DEC A + LD (VAR_1),A + JR Z,LL0f35 + LD A,#06 + RST #10 + JR .loop4 + ; +.ERR_SP: WORD 0 + NOP +LL0f35 LD HL,#5802 + CALL #F816 + LD DE,#000A + LD IX,#F634 + LD (IX+#00),#00 +LL0f46 EI + RES 5,(IY+#01) + HALT + PUSH HL + PUSH IX + CALL #F9BB + CP #40 + JP NZ,#F792 + CALL #F989 + POP IX + POP HL + BIT 5,(IY+#01) + JR Z,LL0f46 + LD A,(#5C08) + CP 8 + JP Z,#F6ED + CP "o" + JR Z,LL0fed + CP "6" + JR Z,LL0fed + CP 9 + JP Z,#F70C + CP "p" + JP Z,#F70C + CP "7" + JP Z,#F70C + CP 11 + JP Z,#F72E + CP "q" + JP Z,#F72E + CP "9" + JP Z,#F72E + CP 10 + JP Z,#F764 + CP "a" + JP Z,#F764 + CP "8" + JP Z,#F764 + CP "d" + JP Z,#FA1B + CP "1" + JR Z,LL0fd0 + CP "2" + JR Z,LL0fd0 + CP "3" + JR Z,LL0fd0 + CP "4" + JR Z,LL0fd0 + PUSH AF + LD A,#FE + IN A,(#FE) + RRA + JR NC,LL0f46 + POP AF + CP 13 + JP Z,#F79D + CP "0" + JP Z,#F79D + CP 32 + JP Z,#F79D + JP #F646 +LL0fd0 PUSH AF + CALL #0D6B + LD A,#03 + CALL #F8CB + POP AF + SUB #31 + LD C,#01 + LD (#5CF8),A + LD (#5CF9),A + LD (ZX_VARS.CONT_DISK),A + CALL #3D13 + JP #F556 +LL0fed CALL #F870 + CALL #F826 + DEC (IX) + +bootst2 +bootln1 = $-bootkus1 + + LD A,(IX+#00) + CP #FF + JR NZ,LL345b + LD A,(#F86F) + LD (IX+#00),A +LL345b CALL #F7FA + CALL #F816 + JP #F646 + CALL #F870 + CALL #F826 + INC (IX+#00) + LD A,(#F86F) + INC A + CP (IX+#00) + LD A,(IX+#00) + JR NZ,LL347d + XOR A + LD (IX+#00),A +LL347d CALL #F7FA + CALL #F816 + JP #F646 + CALL #F870 + CALL #F826 + DEC (IX+#00) + DEC (IX+#00) + DEC (IX+#00) + BIT 7,(IX+#00) + LD A,(IX+#00) + JR Z,LL34b3 +LL349e LD B,#03 + ADD A,B + LD B,A + PUSH BC + LD A,(#F86F) + SUB B + JR C,LL34ac + POP AF + JR LL349e +LL34ac POP AF + DEC A + DEC A + DEC A + LD (IX+#00),A +LL34b3 CALL #F7FA + CALL #F816 + JP #F646 + CALL #F870 + CALL #F826 + INC (IX+#00) + INC (IX+#00) + INC (IX+#00) + LD A,(#F86F) + SBC A,(IX+#00) + LD A,(IX+#00) + JR NC,LL34e1 + LD B,#03 +LL34d8 SUB B + JR NC,LL34d8 + INC A + INC A + INC A + LD (IX+#00),A +LL34e1 CALL #F7FA + CALL #F816 + JP #F646 + CALL #0D6B + LD A,#03 + CALL #F8CB + JP #F556 + LD BC,#FFFD + LD A,#07 + OUT (C),A + LD B,#BF + LD A,#FF + OUT (C),A ;глушит AY + CALL #F870 + LD A,#07 + LD (#5C48),A + LD (#5C8D),A + CPL + LD (#5D3B),A + LD HL,#3C00 + LD (#5C36),HL + LD L,(IX+#00) + LD H,#00 + ADD HL,HL + ADD HL,HL + ADD HL,HL + LD DE,#A000 + ADD HL,DE + LD DE,#F7F0 + LD BC,#0008 + LDIR + LD HL,(#F632) + LD (ZX_VARS.ERR_SP),HL + LD HL,#F7EC + LD (#5C5D),HL + CALL #0D6B + DI + POP HL + EXX + POP BC + POP DE + POP HL + POP AF + CALL #3D03 + JP PE,#F73A + LD (#6F62),HL + LD L,A + LD (HL),H + JR NZ,LL356e + JR NZ,LL3570 + LD (#D50D),HL + INC A + LD HL,#5802 + LD DE,#000A +LL355a DEC A + JR Z,LL356c + ADD HL,DE + DEC A + JR Z,LL356c + ADD HL,DE + DEC A + JR Z,LL356c + INC DE + INC DE + ADD HL,DE + DEC DE + DEC DE + JR LL355a +LL356c POP DE + RET +LL356e PUSH HL + EXX +LL3570 POP HL + LD A,#70 + PUSH HL + POP DE + INC DE + LD BC,#0007 + LD (HL),A + LDIR + EXX + RET + PUSH HL + EXX + POP HL + LD A,#42 + PUSH HL + POP DE + INC DE + LD BC,#0007 + LD (HL),A + LDIR + EXX + RET + ; +LF836: PUSH HL + PUSH DE + SBC HL,DE + LD A,(HL) + LD B,#20 + SBC A,B + JR C,LL35c3 + LD IX,#F981 + PUSH HL + LD BC,#0800 +LL35a0 LD A,(HL) + CP (IX+#00) + JR NZ,LL35a7 + INC C +LL35a7 INC HL + INC IX + DJNZ LL35a0 + LD A,C + CP #08 + JR NZ,LL35b4 + POP HL + JR LL35c3 +LL35b4 EXX + POP HL + LD BC,#0008 + LDIR + EXX + LD A,(VAR_1) + INC A + LD (VAR_1),A +LL35c3 POP DE + POP HL + RET + + +VAR_1: DB 0 +VAR_2: DB 0 + + + PUSH AF + PUSH BC + LD B,#D2 +LL35cc PUSH BC + XOR A + OUT (#FE),A + RR B +LL35d2 DJNZ LL35d2 + SET 4,A + OUT (#FE),A + POP BC + DEC B + DJNZ LL35cc + POP BC + POP AF + RET + ; +LF887: XOR A + CP (IY+#47) + JP NZ,#F556 + CALL #0D6E + LD A,#02 + CALL #1601 + XOR A + CALL #F8CB + LD A,#01 + CALL #1601 + LD (IY+#47),#FE + JP #F795 + ; +LF8A6: XOR A + CP (IY+#47) + JP NZ,#F556 + CALL #0D6E + LD A,#02 + CALL #1601 + LD A,#01 + CALL #F8CB + LD A,#3F + LD (VAR_1),A + LD BC,#FFFF +LL361a NOP + DJNZ LL361a + DEC C + JR NZ,LL361a + JP #F5B4 + LD DE,#F8D1 + JP #0C0A + + DB #80 + DB #16,#0A,#05 + DB "!!! NO PROGRAMS !!!" + DB (" "+#80) + + DB #16,#0A,#03,#10,#04 + DB "MORE THAN 63 BASIC FILES" ;than!!! + + DB (" "+#80) + + DB #11,#00,#10,#04,#13,#01 + DB " -=New ROM boot v1.06=-" + DB #06 + DB "Remix by CompoWellcome 05.02.99" + DB ("."+#80) + + DB #10,#02,#13,#01 + DB " INSERT NEW DISK" + DB #06 + DB " FOR READING CATALOGUE." ;catalogue! + + DB (" "+#80) + + DB "boot " + + LD HL,#5AE1 + PUSH HL + POP DE + DEC DE + LD BC,#001F + LDIR + LD HL,#5AFF + LD A,(#F9BA) + OR A + JR Z,LL3703 + LD A,(HL) + AND #07 + INC A + CP #08 + JR NZ,LL3710 + XOR A + LD (#F9BA),A + LD A,#07 +LL3703 LD A,(HL) + AND #07 + DEC A + OR A + JR NZ,LL3710 + CPL + LD (#F9BA),A + LD A,#01 +LL3710 LD (HL),A + RET +LL3712 NOP + LD A,#C3 + LD (#5CC2),A + LD HL,#F9E6 + LD (#5CC3),HL + LD IX,#2FC1 + CALL #FA20 + LD A,#08 + LD C,#1F + LD IX,#2A53 + CALL #FA20 + LD (#F9E7),SP + LD DE,#0000 + LD IX,#2740 + CALL #FA20 + LD SP,#0000 + LD IX,#1FF3 + CALL #FA20 + LD IX,#1FEB + CALL #FA20 + LD IX,#2FC1 + CALL #FA20 + LD A,#C9 + LD (#5CC2),A + LD A,(#5CCD) + AND #40 + RET +LL3761 LD A,#30 + INC A + CP #33 + LD (#FA0A),A + JP NZ,#F6D0 + LD A,#30 + LD (#FA0A),A + JR LL3761 + DI + LD IX,#0000 + PUSH IX + JP #3D2F + + BLOCK 3,#FF + + ENT