diff --git a/SP_TRDOS.ASM b/SP_TRDOS.ASM index a8903e1..e81b60c 100644 --- a/SP_TRDOS.ASM +++ b/SP_TRDOS.ASM @@ -12,74 +12,87 @@ INCLUDE 'inc/rom_routines.inc' INCLUDE 'Shared_Includes/constants/zx_char_codes.inc' INCLUDE 'Shared_Includes/constants/BIOS_equ.inc' -;*************************************** -;CNF_PORT EQU #74 -AUTO_4000 EQU 04000H -AUTO_4010 EQU 04010H -AUTO_4011 EQU 04011H -AUTO_4020 EQU 04020H -AUTO_4080 EQU 04080H -AUTO_40E1 EQU 040E1H -AUTO_40E3 EQU 040E3H -AUTO_40E4 EQU 040E4H -AUTO_40E5 EQU 040E5H -AUTO_40F0 EQU 040F0H -AUTO_40F1 EQU 040F1H -AUTO_40FF EQU 040FFH -AUTO_4100 EQU 04100H -AUTO_4101 EQU 04101H -AUTO_4102 EQU 04102H -AUTO_4103 EQU 04103H -AUTO_4110 EQU 04110H -AUTO_4111 EQU 04111H -AUTO_4118 EQU 04118H -AUTO_4119 EQU 04119H -AUTO_411B EQU 0411BH -AUTO_411D EQU 0411DH -AUTO_411E EQU 0411EH -AUTO_4130 EQU 04130H -AUTO_4140 EQU 04140H -AUTO_41FF EQU 041FFH -AUTO_5220 EQU 05220H -AUTO_58E8 EQU 058E8H -AUTO_5E34 EQU 05E34H -AUTO_5F00 EQU 05F00H -AUTO_5F10 EQU 05F10H -AUTO_5F12 EQU 05F12H -AUTO_6000 EQU 06000H -PORT_128 EQU 07FFDH -AUTO_A1DB EQU 0A1DBH -AUTO_B0ED EQU 0B0EDH -AUTO_B8ED EQU 0B8EDH -AUTO_C000 EQU 0C000H -AUTO_C130 EQU 0C130H -AUTO_C308 EQU 0C308H -AUTO_C916 EQU 0C916H -AUTO_FE15 EQU 0FE15H -AUTO_FF00 EQU 0FF00H -AUTO_FFFF EQU 0FFFFH +TRDOS_ROM_CMD: +.READ_BPB EQU BIOS.HDD_READ_BPB and #BF +.READ EQU BIOS.HDD_READ and #BF +.WRITE EQU BIOS.HDD_WRITE and #BF +;*************************************** + + +;CNF_PORT EQU #74 +AUTO_4000 EQU #4000 +AUTO_4010 EQU #4010 +AUTO_4011 EQU #4011 +AUTO_4020 EQU #4020 +AUTO_4080 EQU #4080 +AUTO_40E1 EQU #40E1 +AUTO_40E3 EQU #40E3 +AUTO_40E4 EQU #40E4 +AUTO_40E5 EQU #40E5 +AUTO_40F0 EQU #40F0 +AUTO_40F1 EQU #40F1 +AUTO_40FF EQU #40FF +AUTO_4100 EQU #4100 +AUTO_4101 EQU #4101 +AUTO_4102 EQU #4102 +AUTO_4103 EQU #4103 +AUTO_4110 EQU #4110 +AUTO_4111 EQU #4111 +AUTO_4118 EQU #4118 +AUTO_4119 EQU #4119 +AUTO_411B EQU #411B +AUTO_411D EQU #411D +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 +AUTO_FFFF EQU #FFFF ;**************************************** DISPLAY "Start." -START: - DI - LD DE,0FFFFh +START: DI + LD DE,#FFFF LD A,7 JR CONT_1 RST08: NOP CONT_1: - OUT (0FEH),A + OUT (#FE),A LD A,'?' JR CONT_2 - NOP + +//////////////////////////////////////////////////////////////////////// + BLOCK #10-$,0 RST10: JP PRINT_SYM +//////////////////////////////////////////////////////////////////////// + CONT_2: LD I,A JP CONT_3 + +//////////////////////////////////////////////////////////////////////// + BLOCK #18-$,0 PRINT_LN: JP PRINT_L CONT_3: @@ -88,32 +101,39 @@ CONT_3: NOP AUTO_001E: JR CONT_4 + +//////////////////////////////////////////////////////////////////////// + BLOCK #20-$,0 RST20: JP RST20_EXE RET +//////////////////////////////////////////////////////////////////////// + CONT_4: LD H,D LD L,E JR CONT_5 + +//////////////////////////////////////////////////////////////////////// + BLOCK #28-$,0 RST28: JP RST28_EXE +//////////////////////////////////////////////////////////////////////// + CONT_5: LD (HL),2 DEC HL CP H JR NZ,CONT_5 JR CONT_6 + +//////////////////////////////////////////////////////////////////////// REDIR_RST38: + BLOCK #38-$,#FF ; JP RST38X ; EI ; RET - RST 38H - RST 38H - RST 38H - RST 38H - RST 38H -R38: - EI +R38: EI RET CONT_6: OR A @@ -128,25 +148,33 @@ CONT_6: CONT_7: DEC HL LD (P_RAMTOP),HL - LD DE,3EAFh - LD BC,00A8h + LD DE,#3EAF + LD BC,#00A8 LD A,E EX DE,HL - LD SP,6000h + LD SP,#6000 LD (AUTO_5F00),HL LD HL,RET_1 PUSH HL - LD HL,3D2Fh + LD HL,#3D2F PUSH HL - LD HL,0B8EDh + LD HL,#B8ED + +//////////////////////////////////////////////////////////////////////// + BLOCK #64-$,0 AUTO_0064: JR CONT_8 +//////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////// + BLOCK #66-$,0 ;********** MAGIC *********** ; JP MAGIC_1 ;AUTO_2A56 RETN NOP -;********************************* +//////////////////////////////////////////////////////////////////////// + CONT_8: LD (AUTO_5F10),HL PUSH AF @@ -567,6 +595,7 @@ AUTO_03CD: LD A,(MSG_FLAG) OR A CALL Z,PRINT_L +;!FIXIT Ошибка!!! Перед печатью надо открыть поток 0 и очистить низ экрана. RET AUTO_03D9: LD HL,AUTO_2A28 @@ -597,9 +626,16 @@ RD_HEAD_DSK: LD A,(CODE_10H) CP 16 JR Z,AUTO_0415 - LD HL,DISK_ERROR_MSG - RST PRINT_LN - JR AUTO_03C0 + ;!TEST + ; Неправильно обрабатывалась ошибка. Программа не получала код + ; ошибки, а внизу экрана совершенно не к месту появлялся DISK ERROR. + ;LD HL,DISK_ERROR_MSG + ;RST PRINT_LN + ;JR AUTO_03C0 + LD HL,DISK_ERROR_MSG + JP RD_HEAD_DSK.FIXED + ; + AUTO_0415: CALL get_disk_type RES 0,(HL) @@ -659,8 +695,11 @@ AUTO_0479: PUSH AF CALL Z,AUTO_1D97 POP AF - CP 17 - JP NC,CMD_ERROR + ;!TEST + ;CP 17 + CP #10 + ; + JP NC,CMD_ERROR CALL AUTO_1D84 LD A,255 LD (DISK_1_FLG),A @@ -846,8 +885,10 @@ AUTO_05BD: AUTO_05CB: LD A,(FL_NAME) CP '*' - JP NZ,AUTO_03D9 - CALL BAS_2BF1 + ;JP NZ,AUTO_03D9 + JR Z,.next + RET +.next: CALL BAS_2BF1 EX DE,HL CALL SET_DRIVE LD A,(HL) @@ -876,7 +917,7 @@ AUTO_05F4: JR Z,AUTO_05F4 LD HL,FL_START LD DE,VAR_2 - LD BC,START+7 + LD BC,7 LDIR LD A,(DISK_2_FLG) CALL SET_DISK @@ -897,7 +938,7 @@ AUTO_063C: JP Z,AUTO_1C45 LD HL,VAR_2 LD DE,FL_START - LD BC,START+7 + LD BC,7 LDIR LD DE,(FL_SIZE) LD D,0 @@ -945,11 +986,15 @@ CMD_COPY: CALL AUTO_1CB0 LD A,(OPER_DISK) LD (DISK_1_FLG),A - JP NZ,AUTO_05CB + ;!TEST Ошибка!!! COPY "*","*" надо проверять всегда, иначе при + ; наличии на диске файла с именем "*" скопируется только этот файл + ;JP NZ,AUTO_05CB + CALL CMD_COPY.FIXED + ; CALL AUTO_165D LD HL,FL_START LD DE,VAR_2 - LD BC,START+7 + LD BC,7 LDIR CALL AUTO_1CB0 PUSH AF @@ -987,7 +1032,7 @@ AUTO_0716: CALL AUTO_165D LD HL,FL_START LD DE,VAR_2 - LD BC,START+7 + LD BC,7 LDIR LD A,(DISK_2_FLG) CALL SET_DISK @@ -1378,7 +1423,7 @@ AUTO_11B0: ; CMD_LIST: CALL TEST_CR - LD BC,START+2 + LD BC,2 LD (MED_LEN),BC JR Z,AUTO_1205 CP '#' @@ -1438,7 +1483,7 @@ AUTO_123E: CALL PRINT_SYM CALL PRINT_CR LD HL,(VAR_1) - LD BC,START+3 + LD BC,3 ADD HL,BC LD A,(HL) LD HL,(VAR_1) @@ -1450,7 +1495,7 @@ AUTO_123E: LD HL,AUTO_10AA RST PRINT_LN LD HL,(VAR_1) - LD BC,START+2 + LD BC,2 ADD HL,BC LD A,(HL) LD HL,AUTO_10CE @@ -1474,7 +1519,7 @@ AUTO_1292: LD HL,AUTO_111E RST PRINT_LN LD HL,(VAR_1) - LD BC,START+4 + LD BC,4 ADD HL,BC LD C,(HL) INC HL @@ -1551,7 +1596,7 @@ AUTO_1303: CALL PRINT_CR JP AUTO_123E AUTO_131B: - LD BC,START+5 + LD BC,5 ADD HL,BC LD B,(HL) INC HL @@ -1638,7 +1683,7 @@ AUTO_13B7: CALL AUTO_165D LD HL,FL_START LD DE,VAR_2 - LD BC,START+7 + LD BC,7 LDIR LD A,(VAR_2_0) LD (ERR_3D00),A @@ -1679,7 +1724,7 @@ AUTO_1403: JP Z,AUTO_2723 LD HL,VAR_2 LD DE,FL_START - LD BC,START+7 + LD BC,7 LDIR CALL AUTO_03FD LD A,(ERR_3D00) @@ -1839,7 +1884,7 @@ AUTO_1575: SBC HL,BC LD (FL_TYPE),HL LD (FL_N_2),HL - LD HL,START + LD HL,0 LD (FL_N_4),HL LD (FL_N_6),HL CALL AUTO_15B8 @@ -1890,7 +1935,7 @@ AUTO_15DB: POP BC JP NC,AUTO_1644 LD BC,(FL_TYPE) - LD HL,START + LD HL,0 LD (FL_TYPE),HL AUTO_15F8: PUSH BC @@ -1976,6 +2021,7 @@ AUTO_168F: LD B,A LD C,0 RET + ; LD (MED_START),HL LD (MED_LEN),HL LD DE,(FL_SIZE) @@ -2001,7 +2047,7 @@ CMD_MOVE: SUB 9 LD (L_5D23),A LD HL,(FL_N_4) - LD DE,START + LD DE,0 LD B,9 CALL READ_DISK LD HL,(FL_N_4) @@ -2085,7 +2131,7 @@ CMD_MOVE: ADD HL,DE LD (HL),0 LD HL,(FL_N_4) - LD DE,START + LD DE,0 LD B,9 CALL WRITE_DISK LD A,(L_5D23) @@ -2469,11 +2515,11 @@ AUTO_1A01: LD DE,(FL_START) PUSH DE PUSH HL - LD HL,START + LD HL,0 LD A,(DISK_2_FLG) CP 255 JR Z,AUTO_1A20 - LD HL,START+5 + LD HL,5 AUTO_1A20: ADD HL,DE LD (MED_LEN),HL @@ -2586,7 +2632,7 @@ AUTO_1AC4: ; CMD_SAVE: CALL AUTO_1852 - LD HL,START + LD HL,0 LD (AUTO_5CD1),HL CALL INPUT_TXT CALL AUTO_1D8C @@ -2734,7 +2780,7 @@ AUTO_1BDE: AUTO_1BFC: CALL AUTO_1C1B RET NC - LD HL,START + LD HL,0 LD (DOS_CH_ADR),HL LD A,(DISK_2_FLG) CP 255 @@ -3121,8 +3167,8 @@ AUTO_1E67: LD (CONT_SEC),DE JP R_W_REDIR - LD (HL),30 ; НЕ исп. !!! - + ;LD (HL),30 ; НЕ исп. !!! + BLOCK #1E70-$,0 AUTO_1E70: POP HL POP BC @@ -3182,7 +3228,7 @@ AUTO_1EBC: ; ; CMD_FORMAT: - LD HL,START + LD HL,0 LD (MED_START),HL LD (DOS_CH_ADR),HL LD (AUTO_5CD1),HL @@ -3711,7 +3757,7 @@ AUTO_229A: LD (DOS_CH_ADR),HL CALL AUTO_1AC4 CALL AUTO_1B59 - LD HL,START + LD HL,0 LD (FL_LEN),HL CALL AUTO_166B JP AUTO_1E43 @@ -4127,7 +4173,7 @@ AUTO_2504: RST RST28 LD B,(HL) XOR A - LD HL,START + LD HL,0 LD (MED_LEN),HL AUTO_2538: ADD HL,DE @@ -4455,8 +4501,8 @@ AUTO_276B: AUTO_2779: DB "BACKUP DISK",141 AUTO_2785: - DB "Insert Destination disk",13,"then " - DB "press Y",0 + DB "Insert Destination disk",13 + DB "then press Y",0 AUTO_27AA: DB "Insert Source disk then press Y",0 AUTO_27CA: @@ -4469,13 +4515,16 @@ AUTO_27ED: DB "Directory full",141 AUTO_27FC: DB "No disk",141 - DISPLAY "10k" + + DISPLAY "10k" + AUTO_2804: DB "Stream opened",141 AUTO_2812: DB "Not disk file",141 AUTO_2820: - DB "File exists",13,"Over write?(Y/N",169 + DB "File exists",13 + DC "Over write?(Y/N)" AUTO_283C: PUSH AF PUSH BC @@ -4489,7 +4538,7 @@ AUTO_283C: POP AF LD HL,AUTO_0201 LD (ADR_RET),HL - LD HL,START + LD HL,0 ADD HL,SP LD (DOS_SP),HL DEC HL @@ -4711,34 +4760,20 @@ CMD_80: LD A,#80 ; ; ; ;Адрес #29B2. Тексты сообщений TR-DOS. -AUTO_29B2: - DB 13,"*ERROR*",141 -AUTO_29BB: - DB 13,"No space",141 -AUTO_29C5: - DB 13,"File exists",141 -AUTO_29D2: - DB " Free",141 -READ_ONLY_MSG: - DB 13,"Read Onl",249 -DISK_ERROR_MSG: - DB 13,"Disc Erro",242 -AUTO_29ED: - DB 13,"Rec. O/",198 -AUTO_29F7: - DB "Title:",160 -AUTO_29FE: - DB 13,"Retry,Abort,Ignore?",0 -AUTO_2A13: - DB 13,"Trk",160 -AUTO_2A18: - DB " sec",160 -AUTO_2A1D: - DB " Del. File",141 -AUTO_2A28: - DB 13,"No" -AUTO_2A2B: - DB " File(s)",141,0 +AUTO_29B2: DB 13, "*ERROR*", 141 +AUTO_29BB: DB 13, "No space", 141 +AUTO_29C5: DB 13, "File exists", 141 +AUTO_29D2: DB " Free", 141 +READ_ONLY_MSG: DC 13, "Read Only" +DISK_ERROR_MSG: DC 13, "Disk Error" +AUTO_29ED: DC 13, "Rec. O/F" +AUTO_29F7: DC "Title: " +AUTO_29FE: DZ 13, "Retry,Abort,Ignore?" +AUTO_2A13: DC 13, "Trk " +AUTO_2A18: DC " sec " +AUTO_2A1D: DB " Del. File", 141 +AUTO_2A28: DB 13, "No" +AUTO_2A2B: DZ " File(s)", 141 AUTO_2A35: LD HL,AUTO_2A41 LD DE,AUTO_4080 @@ -4778,7 +4813,7 @@ AUTO_2A56: PUSH AF LD A,R PUSH AF - LD HL,START + LD HL,0 ADD HL,SP PUSH HL LD A,3Ch @@ -4872,13 +4907,13 @@ AUTO_2B09: INC HL LD (HL),D LD HL,AUTO_4000 - LD DE,START + LD DE,0 IN A,(WG_SEC) DEC A LD E,A LD B,1 CALL AUTO_2D73 - LD HL,START + LD HL,0 ADD HL,SP LD (AUTO_4140),HL LD SP,AUTO_41FF @@ -4955,7 +4990,7 @@ AUTO_2B95: INC A LD (AUTO_40E4),A LD HL,(AUTO_40E5) - LD DE,START+1 + LD DE,1 SBC HL,DE LD (AUTO_40E5),HL RET C @@ -6473,11 +6508,22 @@ EXP_FNS_PREPARE: RET EXP_FNS_PREPARE_EXIT: PUSH AF - XOR A + XOR A ; SYS_PORT.BIOS JP EXP_FNS_PREPARE_RET ;******************************* +RD_HEAD_DSK.FIXED: + LD A,7 + JP AUTO_1C4A +CMD_COPY.FIXED: + PUSH AF + CALL AUTO_05CB + POP AF + RET Z + INC SP + INC SP + JP AUTO_03D9 ;******************************* BLOCK #3CC0 - $,255 MAGIC_1: @@ -6521,9 +6567,11 @@ REDIR_3D13: JP NZ,EXP_FNS ;#3FF8 EXP BIT 6,C JP Z,AUTO_283C - RES 6,C - JP HD_CMD ;#3FF0 ROM. DI - + ;!TEST 06/01/2024 убираем лишние телодвижения + ;RES 6,C + ;JP HD_CMD ;#3FF0 ROM. DI + JP EXP_FNS + ; ;***************************** BLOCK #3CFA - $,255 AUTO_3CFA: @@ -6662,7 +6710,7 @@ AUTO_3DA5: RESET_WG: LD A,8 CALL WG93_EXE - LD DE,START + LD DE,0 IN A,(WG_COM) AND 2 LD B,A @@ -7031,25 +7079,25 @@ AUTO_3FEC: ;****************************************** -;!FIXIT Можно поправить номера функций при вызовах API и прыгать сразу в BIOS через #3FF8 +;[x]] поправлены номера функций при вызовах API и прыгает сразу в BIOS через #3FF8 ;-------[ From TR-DOS to API 4x ]------- BLOCK #3FF0-$, #FF HD_CMD: PUSH AF DI - LD A,D_ROM16ON + ;LD A,SYS_PORT.EXTENSION + LD A,1 OUT (SYS_PORT_ON),A POP AF RET ;--------------------------------------- ; -;----[ From API #80..#FF to TR-DOS ]----- +;----[ From TR-DOS to API #80..#FF]----- BLOCK #3FF8-$, #FF -EXP_FNS: - ;!TEST 06/01/2024 сохраняем состояние прерываний зачем-то +EXP_FNS:;!TEST 06/01/2024 сохраняем состояние прерываний зачем-то ;PUSH AF ;DI ;!TODO подумать, как сохранять состояние прерываний и ничего не сломать - ;XOR A ; D_ROM16OFF + ;XOR A ; SYS_PORT.BIOS JP EXP_FNS_PREPARE EXP_FNS_PREPARE_RET: ; diff --git a/SP__48.ASM b/SP__48.ASM index f576190..2762a51 100644 --- a/SP__48.ASM +++ b/SP__48.ASM @@ -19260,13 +19260,12 @@ L3C8F: DEFB $13, $00 ; Bright, off DEFB $31, $39 ; '1', '9' DEFB $13, $01 ; Bright, on DEFB $38, $36 ; '8', '6' - +L3C97: ; ------ ; UNUSED ; ------ -L3C97: - BLOCK #3CF0-$,0 ;15600 + BLOCK #3CF0-$,0 ;15600 ;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >; ; ╔═══════════════════════════╗ ; ║ дополнения для SP48 !! ║ diff --git a/Shared_Includes b/Shared_Includes index 24e0629..e7e58e7 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 24e062942e2c89a1bcd5817cc82316b52186f86c +Subproject commit e7e58e7b816a25137a0a253321164e863bbe782e diff --git a/TRDOS/TR_MSD_2.ASZ b/TRDOS/TR_MSD_2.ASZ index 141ddec..87dbeac 100644 --- a/TRDOS/TR_MSD_2.ASZ +++ b/TRDOS/TR_MSD_2.ASZ @@ -100,12 +100,12 @@ MSDOS_CAT: CALL AUTO_1D97 ; CLS CALL OPEN_CH2 LD A,13 - RST 10H + RST #10 POP DE ; СТРОКА ПОСЛЕ CAT CAT_SPACES: LD A,(DE) - CP 20H + CP #20 JR NZ,CAT_NO_SPACE INC DE JR CAT_SPACES @@ -523,44 +523,47 @@ CALC_CL_LP: POP BC RET -HD_TX: DB ' ERR_HD',0A0H -HD_TX2: DB 'HDD not found',0A0H -MSG_3: DB 'ERROR...',0A0H -MSDOS_MSG: DB 'File not found...',0A0H -NO_MEMORY: DB 'No RAM-Disk MEM',0A0H +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 +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 + ;[ ] 07/01/2024 + DB 6,'SETHDD' ; /SETHDD XYZ, где X - chanel, Y - master/slave, Z - 0..3 - номер раздела + DW CHOOSE_HDD + ; + DB 0 ;SAVE_AUTOEXEC: ; LD C,0FEH @@ -577,18 +580,17 @@ AY8910: AND A RET -SPR_1: - LD A,(DE) +SPR_1: LD A,(DE) INC DE - CP #20 + CP " " JR Z,SPR_1 CP "1" - LD C,#F0 ;!HARDCODE BIOS.RST_CONF.SP97_1 + LD C,BIOS.RST_CONF.SP97_1 JR Z,SP_1 CP "2" SCF RET NZ - LD C,#F1 ;!HARDCODE BIOS.RST_CONF.SP97_2 + LD C,BIOS.RST_CONF.SP97_2 SP_1: LD A,(DE) CP #21 CCF diff --git a/TRDOS/TR_MSD_3.ASZ b/TRDOS/TR_MSD_3.ASZ index c524135..d9ec5d5 100644 --- a/TRDOS/TR_MSD_3.ASZ +++ b/TRDOS/TR_MSD_3.ASZ @@ -1,6 +1,6 @@ INIT_RMD: - LD C,#9F ;!HARDCODE BIOS.FullInit + LD C,BIOS.FullInit ;!TEST 06/01/2024 сохраняем состояние прерываний зачем-то JP EXP_FNS ;CALL EXP_FNS @@ -30,8 +30,8 @@ INIT_RMD: RAMD_FAT_PROG: CALL AUTO_1D97 ; CLS - CALL OPEN_CH2 - LD HL,RAMD_FAT + CALL OPEN_CH2 + LD HL,RAMD_FAT RAMD_F_L1: DI IN A,(PAGE3) @@ -41,7 +41,6 @@ RAMD_F_L1: LD A,C LD C,(HL) OUT (PAGE3),A -; RET_PAGE3 EI PUSH HL LD A,C @@ -52,22 +51,28 @@ RAMD_F_L1: CALL OPEN_CH0 JP AUTO_03E1 ;*************************************************************************** +;[x] исправлен баг с неработающими командами TBON/TBOFF TB_ONOFF: - DEC DE - DEC DE - LD A,(DE) - CP 'F' - JR Z,TB_OFF_EXE - CP 'f' - JR Z,TB_OFF_EXE -TB_ON_EXE: - LD C,#8F ;!HARDCODE BIOS.FN_TURBO - LD A,4 - JP EXP_FNS -TB_OFF_EXE: - LD C,#8F ;!HARDCODE BIOS.FN_TURBO - LD A,3 - JP EXP_FNS + 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 ; ;*************************************************************************** ; @@ -82,19 +87,19 @@ TB_OFF_EXE: MSDOS_WRITE_FILE: LD (CONT_BUF_ADR),HL ; адрес загрузки LD (MED_START),A ; страница загрузки - LD A,6 + LD A,TRDOS_ROM_CMD.WRITE JR MSDOS_R_W_FILE ; MSDOS_READ_FILE: LD (CONT_BUF_ADR),HL ; адрес загрузки LD (MED_START),A ; страница загрузки - LD A,5 + LD A,TRDOS_ROM_CMD.READ MSDOS_R_W_FILE: LD (MED_LEN),A -; beg=start_claster ; Получить начальный кластер + ; beg=start_claster. Получить начальный кластер LD IX,(START_CLASTER) ; стартовый кластер -; next=beg -; max=file_len ; длина в кластерах + ; next=beg + ; max=file_len. длина в кластерах CALL GET_FILE_CLASTERS_BC ; LD A,B ; CALL PRINT_HEX_A @@ -215,10 +220,11 @@ READ_num_clasters_from_beg: PUSH AF LD A,(MED_LEN) LD C,A - SUB 5 + SUB TRDOS_ROM_CMD.READ JR Z,CONT_XX1 DEC A JR NZ,SKEEP_XX1 + ;TRDOS_ROM_CMD.WRITE CONT_XX1: POP AF @@ -497,8 +503,7 @@ READ_FAT_SEC: LD HL,MS_FAT LD A,SYS_PAGE - LD B,2 - LD C,5 + LD BC,256*2 + TRDOS_ROM_CMD.READ CALL MSD_R_W_UT POP HL @@ -550,8 +555,12 @@ GET_FL_L2: ;*************************************************************************** HDD_PROG: - LD C,BIOS.HDD_INIT and #BF - CALL HD_CMD + ;!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,HD_IDF_ADR+54 LD B,32 @@ -578,8 +587,12 @@ HDD_PROG_L: RST 10H POP BC DJNZ HDD_PROG_L - LD C,BIOS.HDD_RECAL and #BF - CALL HD_CMD + ;!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: diff --git a/TRDOS/TR_MSD_S.ASZ b/TRDOS/TR_MSD_S.ASZ index 2ee025a..e6fc1d0 100644 --- a/TRDOS/TR_MSD_S.ASZ +++ b/TRDOS/TR_MSD_S.ASZ @@ -5,7 +5,6 @@ ;******************************************** ; MS-DOS utilites ;******************************************** - MSD_R_W_UT: PUSH AF CALL DISK_REDIR @@ -20,7 +19,11 @@ MSD_R_W_UT: ;* 5. Страница ОЗУ - A * ;************************************************ .HDD: POP AF - CALL HD_CMD + ;!TEST 06/01/2024 убираем лишние телодвижения + ;CALL HD_CMD + SET 6,C + CALL EXP_FNS + ; RET NC JP HDD_ERROR ;************************************************ @@ -162,50 +165,50 @@ MSD_R_W_LOOP: POP AF CALL NZ,MSD_3F0A DI - IN A,(PAGE2) - LD C,A + IN A,(PAGE2) + LD C,A LD A,SYS_PAGE OUT (PAGE2),A - LD DE,(MS_BPB+SEC_SIZE-4000h) - LD A,C - OUT (PAGE2),A + LD DE,(MS_BPB+SEC_SIZE-#4000) + LD A,C + OUT (PAGE2),A EI POP HL ADD HL,DE - LD A,H - OR L - JR NZ,MSD_NO_PAGE + LD A,H + OR L + JR NZ,MSD_NO_PAGE DI - IN A,(PAGE2) - LD C,A - LD A,SYS_PAGE - OUT (PAGE2),A - LD A,(MED_START) - LD HL,RAMD_FAT-4000H - LD L,A - LD L,(HL) - LD A,C - OUT (PAGE2),A + IN A,(PAGE2) + LD C,A + LD A,SYS_PAGE + OUT (PAGE2),A + LD A,(MED_START) + LD HL,RAMD_FAT-#4000 + LD L,A + LD L,(HL) + LD A,C + OUT (PAGE2),A EI - LD A,L - LD HL,0C000H - LD (MED_START),A + LD A,L + LD HL,#C000 + LD (MED_START),A MSD_NO_PAGE: LD (CONT_BUF_ADR),HL PUSH HL DI - IN A,(PAGE2) - LD C,A + IN A,(PAGE2) + LD C,A LD A,SYS_PAGE OUT (PAGE2),A - LD A,(DS_1440-4000H) - RES 0,A - LD (DS_1440-4000H),A - LD A,(MSD_SECS-4000h) + LD A,(DS_1440-#4000) + AND %1111'1110 + LD (DS_1440-#4000),A + LD A,(MSD_SECS-#4000) LD L,A - LD A,C - OUT (PAGE2),A + LD A,C + OUT (PAGE2),A EI LD A,L LD HL,CONT_SEC @@ -434,16 +437,18 @@ READ_BPB: LD DE,63 ;!HARDCODE LD A,SYS_PAGE LD HL,MS_BPB - LD C,BIOS.HDD_READ and #BF - LD B,1 + ; + LD BC,256*1 + TRDOS_ROM_CMD.READ CALL MSD_R_W_UT CALL READ_BPB.PARAMS RET NC JP .ERROR_MSDOS .MAIN: LD A,SYS_PAGE LD HL,MS_BPB - LD C,BIOS.HDD_READ_BPB and #BF + LD C,TRDOS_ROM_CMD.READ_BPB CALL MSD_R_W_UT + + ;CALL BPB_PARAMS ;RET @@ -644,8 +649,7 @@ READ_NEXT2: EI LD HL,MS_DIR LD A,SYS_PAGE - LD B,1 - LD C,5 + LD BC,256*1 + TRDOS_ROM_CMD.READ CALL MSD_R_W_UT DI IN A,(PAGE3) diff --git a/TRDOS/TR_RMD_S.ASZ b/TRDOS/TR_RMD_S.ASZ index d34babd..1cf7929 100644 --- a/TRDOS/TR_RMD_S.ASZ +++ b/TRDOS/TR_RMD_S.ASZ @@ -288,7 +288,7 @@ PAGE_CALC2: LD B,A LD C,H POP HL - EI + ;EI RET NC JP ERROR_DISK @@ -399,7 +399,7 @@ CLEAR_RMD_A: PUSH HL PUSH DE PUSH BC - LD C,#93 ;!HARDCODE BIOS.FreeMemRMD + LD C,BIOS.FreeMemRMD CALL EXP_FNS ; вызвать функцию ;!TEST 06/01/2024 сохраняем состояние прерываний зачем-то ;EI @@ -410,9 +410,10 @@ CLEAR_RMD_A: RET ;********************************************************* +; B - ЧИСЛО ТРЕБУЕМЫХ БЛОКОВ, A - КЛЮЧ RAM-Disk GET_RMD_A: -GET_RAM_BLK: ; B - ЧИСЛО ТРЕБУЕМЫХ БЛОКОВ, A - КЛЮЧ RAM-Disk - LD C,#92 ;!HARDCODE BIOS.GetMemRMD +GET_RAM_BLK: + LD C,BIOS.GetMemRMD CALL EXP_FNS ; A,L - КЛЮЧ RAM-Disk - номер первого блока ;!TEST 06/01/2024 сохраняем состояние прерываний зачем-то ;EI @@ -438,15 +439,18 @@ FDD_SET: ;RET ; -HDD_SET: - LD C,BIOS.HDD_INIT and #BF - CALL HD_CMD +HDD_SET:;!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,(OPER_DISK) LD B,A - LD A,0 - LD C,#CD ;!HARDCODE BIOS.HDD_TO_DRV + XOR A + LD C,BIOS.HDD_TO_DRV ;!TEST 06/01/2024 сохраняем состояние прерываний зачем-то JP EXP_FNS ;CALL EXP_FNS @@ -498,3 +502,61 @@ RAMD_SYM_OK: RET +;[ ] 07/01/2024 +CHOOSE_HDD: + PUSH DE + LD A,(OPER_DISK) + LD C,BIOS.GET_DRV_ST + CALL EXP_FNS + POP DE + JR C,.error + AND #40 ;!HARDCODE HDD + JR Z,.error + ; +.loop: LD A,(DE) + INC DE + CP ' ' + JR Z,.loop + LD A,(DE) + CP #0D + JR Z,.error + ; номер раздела + INC DE + LD A,(DE) + CP "4" + JR NC,.error + CP "0" + JR C,.error + SUB "0" + 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 + DEC DE + LD A,(DE) + CP "2" + JR NC,.error + CP "0" + JR C,.error + SUB "0" + OR C + ; + LD C,BIOS.HDD_PART + CALL EXP_FNS + RET NC + ; +.error: LD HL,MSG_3 + JP ERR_EXIT + +;bit0: Primary/Secondary, bit1 - master/slave, bit2..3: использующийся раздел в MBR \ No newline at end of file