diff --git a/Shared_Includes b/Shared_Includes index 1826974..349ba28 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 18269745815d90e76686f5693e0cb45f8f31741c +Subproject commit 349ba286106d21a77cf3f8a25b6f7c952eccb046 diff --git a/src/bios/exp/EXTENDED/HDD_DRIVER_6.asm b/src/bios/exp/EXTENDED/HDD_DRIVER_6.asm index 80bf3ae..cda8e56 100644 --- a/src/bios/exp/EXTENDED/HDD_DRIVER_6.asm +++ b/src/bios/exp/EXTENDED/HDD_DRIVER_6.asm @@ -117,7 +117,6 @@ SELHH: EXX LD A,IDE.Chanel.Primary SELCHAN: OUT (IDE.Chanel.Set),A ;R02 - LD A,(IY+IDE.HDD_INIT_TABLE.DriveType) CP IDE.Device.HDD ;!FIXIT возможно, нахрен не нужно, потому-что если CD, то прилетит в драйвер CD LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) @@ -128,7 +127,7 @@ SELCHAN: EXX RET Z NODRIVE: - LD A,2 ;!HARDCODE + LD A,BIOS.Error.BadDrvNumber SCF RET @@ -239,13 +238,13 @@ HDD_5x.LONG_READ: ADD IX,BC LD B,C ADC HL,BC - EX AF,AF' + ;EX AF,AF' ;!TEST 21/11/23 JR RST8RDR RNOT256 ADD IX,BC LD C,B ADC HL,BC - EX AF,AF' + ;EX AF,AF' ;!TEST 21/11/23 JR RST8RDR HERRRD0 LD B,A @@ -265,14 +264,13 @@ HERRRD0 LD B,A LD C,A LD A,B LD B,C - SCF ;R03 - EX AF,AF' ;R03 -RST8RDR: - - RESTORE_PORTY - + ;R03 + SCF + ;EX AF,AF' ;!TEST 21/11/23 + ; +RST8RDR: RESTORE_PORTY POP IY - EX AF,AF' + ;EX AF,AF' ;!TEST 21/11/23 RET ;READ SECTOR(S) RDS000: CALL SELECTH @@ -401,13 +399,13 @@ HDD_5x.LONG_WRITE: ADD IX,BC LD B,C ADC HL,BC - EX AF,AF' + ;EX AF,AF' JR RST8WRR WNOT256 ADD IX,BC LD C,B ADC HL,BC - EX AF,AF' + ;EX AF,AF' JR RST8WRR HERRWR0 LD B,A @@ -427,14 +425,13 @@ HERRWR0 LD B,A LD C,A LD A,B LD B,C - SCF ;R03 - EX AF,AF' ;R03 ;!FIXIT намудрил он чёт в этом R03 -RST8WRR EXX - POP BC - OUT (C),B - EXX + ;R03 + SCF ;R03 + ;EX AF,AF' ;R03 ;!FIXIT намудрил он чёт в этом R03 + ; +RST8WRR: RESTORE_PORTY POP IY - EX AF,AF' + ;EX AF,AF' RET ;WRITE SECTOR(S) @@ -451,6 +448,7 @@ WRS000: PUSH AF PUSH DE + ;[x] CMOS Write Protect Disabled IF HDDwriteProtect PUSH BC LD D,#1D ;!HARDCODE CMOS Write Protect @@ -462,7 +460,7 @@ WRS000: POP AF EX AF,AF' LD XL,0 - LD A,8 ;WRITE PROTECT + LD A,BIOS.Error.WriteProtect SCF RET ENDIF @@ -483,13 +481,12 @@ WRS002: EXX EXX RET C - //DI + ;DI IN A,(SLOT3) EX AF,AF' LD A,XH OUT (SLOT3),A LD BC,IDE.Write.Data - ;LD D,#20 LD D,512/WRITE_OUTI_DUPs WRS003: @@ -542,18 +539,13 @@ WRS003: ;VERIFY SECTOR(S) HDD_5x.VERIFY: PUSH IY - - SAFE_PORTY_2 - + SAFE_PORTY_2 PUSH IX PUSH HL CALL VRS000 POP HL POP IX - EXX - POP BC - OUT (C),B - EXX + RESTORE_PORTY POP IY RET ;[]================================================================[#54] @@ -679,9 +671,7 @@ CHS005: INC A WAITPRT: LD BC,IDE.Read.Status LD HL,#0000 ; задержка ;!HARDCODE - .loop: PUSH HL - .loop2: IN A,(C) AND D CP E @@ -690,12 +680,12 @@ WAITPRT: LD A,L OR H JP NZ,.loop2 - + ; POP HL DEC L JR NZ,.loop - -.error: LD A,4 ;!HARDCODE error number + ; +.error: LD A,BIOS.Error.WaitPort SCF RET .ok: POP HL @@ -711,7 +701,7 @@ WAITPRT: HDD_5x.DETECT: CP #84 ;!HARDCODE max HDD drives (#80,#81,#82,#83) CCF - RET C + JR C,.error LD HL,IDE.INIT_TBL_IDE0.DriveType AND 3 @@ -736,5 +726,6 @@ HDD_5x.DETECT: CP IDE.Device.HDD RET Z SCF +.error: LD A,BIOS.Error.BadDrvNumber RET ;[]================================================================[#57] \ No newline at end of file diff --git a/src/bios/exp/FUNC_4x.ASM b/src/bios/exp/FUNC_4x.ASM index dd440eb..e4b7412 100644 --- a/src/bios/exp/FUNC_4x.ASM +++ b/src/bios/exp/FUNC_4x.ASM @@ -179,7 +179,6 @@ FN_HDD_READ_BPB: RET C CALL HD_BPB_PREP RET C - JR HD_RD_L1 @@ -249,14 +248,14 @@ HD_READ_CONT: .loop_read1: DUP 16 - INI ; всего 16 раз INI - оптимально. + INI ; всего 16 раз INI - оптимально. EDUP - JP NZ,.loop_read1 + JR NZ,.loop_read1 .loop_read2: DUP 16 - INI ; всего 16 раз INI - оптимально. + INI ; всего 16 раз INI - оптимально. EDUP - JP NZ,.loop_read2 + JR NZ,.loop_read2 LD A,H OR L @@ -303,14 +302,14 @@ HD_WR_L2: JP Z,HD_RET LD BC,IDE.Write.Data - LD D,32 + LD D,32 ;!HARDCODE зависит от счётчика DUP в HD_WR_LOOP HD_WR_LOOP: DUP 16 - OUTI ; всего 16 раз OUTI - оптимально. + OUTI ; всего 16 раз OUTI - оптимально. EDUP DEC D - JP NZ,HD_WR_LOOP + JR NZ,HD_WR_LOOP LD A,H OR L @@ -599,53 +598,51 @@ HD_CALC_SECS: BIT 6,A JR NZ,HDD_LBA POP BC ; снимаем значение для корректного ret - + ; LD A,XH AND A SCF RET NZ ; ошибка, слишком большой HDD - -; IX,DE - абсолютный номер сектора + ; IX,DE - абсолютный номер сектора PUSH IX POP HL - + ; IN A,(SLOT3) LD C,A LD A,SYS_PAGE OUT (SLOT3),A LD A,C LD (SYS_PAGE.COPY_SLOT3),A - -; HL,DE - номер сектора -; BC - число секторов на цилиндре + ; HL,DE - номер сектора + ; BC - число секторов на цилиндре LD BC,(SYS_PAGE.HD_IDF_ADR.sec_cyl) ; число секторов на цилиндре LD A,16 ; HL,DE разделить на BC SCF -DIV_LOOP: +.DIV_LOOP: EX DE,HL ADD HL,HL EX DE,HL ADC HL,HL - + ; SBC HL,BC ; сравнить HL и BC - JR NC,NO_ADD ; переноса не было - +1! + JR NC,.NO_ADD ; переноса не было - +1! ADD HL,BC DEC A - JR NZ,DIV_LOOP - JR DIV_END -NO_ADD: + JR NZ,.DIV_LOOP + JR .DIV_END +.NO_ADD: INC DE DEC A - JR NZ,DIV_LOOP -DIV_END: -; DE - результат, HL - остаток -; DE - цилиндр + JR NZ,.DIV_LOOP +.DIV_END: + ; DE - результат, HL - остаток + ; DE - цилиндр LD A,(SYS_PAGE.HD_IDF_ADR+12) ; !HARDCODE .sectors -; A - число секторов на дорожке -; HL - номер сектора в цилиндре + ; A - число секторов на дорожке + ; HL - номер сектора в цилиндре LD B,0 LD C,A -; LD BC,(MS_BPB+S_P_T) ; ЧИСЛО СЕКТОРОВ НА ДОРОЖКЕ + ;LD BC,(MS_BPB+S_P_T) ; ЧИСЛО СЕКТОРОВ НА ДОРОЖКЕ XOR A HD_CALC_LOOP2: SBC HL,BC diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index 88aac46..092ed03 100755 Binary files a/src/bios/shared/RECOVERY.IMG and b/src/bios/shared/RECOVERY.IMG differ