diff --git a/Shared_Includes b/Shared_Includes index 63faf9f..a0e68ce 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 63faf9f0823649cfb52e9fcaad430170a05b31a7 +Subproject commit a0e68ce3a19bd47537585e49bfbf5e45fab197a1 diff --git a/src/ZX_ROMS/new/SP_TRDOS.bin b/src/ZX_ROMS/new/SP_TRDOS.bin index ed19383..df91986 100644 Binary files a/src/ZX_ROMS/new/SP_TRDOS.bin and b/src/ZX_ROMS/new/SP_TRDOS.bin differ diff --git a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM index 733c608..53a606c 100644 --- a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM @@ -19,6 +19,9 @@ RAM_ATAPI_PK EQU SYS_PAGE.SHARED_BUFFER_32b RAM_ATAPI_RW_CMD EQU SYS_PAGE.SHARED_BUFFER_32b+16 MAX_DATA_PACKET_FOR_REQUEST_SENSE EQU 254 + +_ZIP_WAITS_ EQU 128 + ASSERT ((PACKET_SIZE % 4) = 0), "PACKET_SIZE must be an even number" ;[]================================================================[#51] @@ -93,6 +96,7 @@ ATAPI_5x_GET_PAR: OUT (SLOT3),A ; ; [ ] sector size. media changed + RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media CALL ATAPI_CHECK_MEDIA_CHANGED EX AF,AF' POP AF @@ -123,6 +127,10 @@ ATAPI_5x_GET_PAR: SCF EX AF,AF' .get_data: LD A,(IY+IDE.HDD_INIT_TABLE.MediaParameters) + AND %000'0100 + CALL NZ,.RereadCapacity + ; + LD A,(IY+IDE.HDD_INIT_TABLE.MediaParameters) LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) ; [ ] sector size LD E,(IY+IDE.HDD_INIT_TABLE.SectorSize) @@ -139,7 +147,14 @@ ATAPI_5x_GET_PAR: OUT (SLOT3),A LD A,BIOS.Error.ATAPI.UnitAttention ; если CF, то номер ошибки EX AF,AF - RET + RET +.RereadCapacity: + EX AF,AF' + PUSH AF + CALL GET_ATAPI_CAPACITY + POP AF + EX AF,AF' + RET ;[]================================================================[#58] @@ -515,27 +530,7 @@ EXEC_PACKET_COMMAND: RET NZ LD A,BIOS.Error.Failure RET -; -; .error_ex: EX DE,HL -; .error: CP #FF -; .error_fail: SCF -; LD C,A -; LD A,BIOS.Error.Failure -; RET Z -; ; -; LD A,BIOS.Error.ATAPI.UnitAttention -; CP C -; SCF -; RET Z -; ; -; LD A,BIOS.Error.ATAPI.MediumError -; CP C -; SCF -; RET Z -; ; -; LD A,BIOS.Error.Busy -; RET -; + ; .error_TimeOut: CP #FF EX DE,HL JR Z,.error_fail @@ -543,10 +538,8 @@ EXEC_PACKET_COMMAND: SCF RET ; -; .start_sys_page: -; LD A,SYS_PAGE -; EX AF,AF' ; +; .start: XOR A ; признак того, что ошибка смены носителя должна обрабатываться в EXEC_PACKET_COMMAND .start_custom: EXX LD C,A ; признак того, что ошибка смены носителя должна обрабатываться в EXEC_PACKET_COMMAND @@ -636,7 +629,7 @@ EXEC_PACKET_COMMAND: EX DE,HL ; .AP_LOOP: ;CALL ATAPI_WAITPRT.wait_NZ - LD B,128 + LD B,_ZIP_WAITS_ DJNZ $ CALL ATAPI_CHECK_DRV JP C,.error;_APLOOP @@ -683,7 +676,7 @@ EXEC_PACKET_COMMAND: JR .return_rw ; ; .END_BUFFER: ;CALL ATAPI_WAITPRT.wait_NZ - LD B,128 + LD B,_ZIP_WAITS_ DJNZ $ CALL ATAPI_CHECK_DRV JP C,.error @@ -693,7 +686,7 @@ EXEC_PACKET_COMMAND: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ATAPI_IdlePasses: ;CALL ATAPI_WAITPRT.wait_NZ - LD B,128 + LD B,_ZIP_WAITS_ DJNZ $ CALL ATAPI_CHECK_DRV JP C,EXEC_PACKET_COMMAND.error @@ -1084,26 +1077,27 @@ ATAPI_MEDIA_ERROR: OR %0000'0011 LD (IY + IDE.HDD_INIT_TABLE.MediaParameters),A ; - ;LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA - LD DE,SYS_PAGE.TMP_BUFFER - ;CALL EXEC_PACKET_COMMAND.start_sys_page - CALL ATAPI_READ_CAPACITY_DATA - ; - LD HL,#FFFF - LD C,BIOS.Error.ATAPI.MediumError - JR C,.No_Media - ; - LD HL,(SYS_PAGE.TMP_BUFFER) ; media size high - LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh),H - LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh+1),L - LD HL,(SYS_PAGE.TMP_BUFFER + 2) ; media size low - LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow),H - LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow+1),L - LD HL,(SYS_PAGE.TMP_BUFFER + 6) ; sector size - ; - LD C,BIOS.Error.ATAPI.UnitAttention -.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H ;[ ] sector size - LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L + CALL GET_ATAPI_CAPACITY +; LD DE,SYS_PAGE.TMP_BUFFER +; CALL ATAPI_READ_CAPACITY_DATA +; ; +; LD HL,#FFFF +; LD C,BIOS.Error.ATAPI.MediumError +; JR C,.No_Media +; ; +; LD HL,(SYS_PAGE.TMP_BUFFER) ; media size high +; LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh),H +; LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh+1),L +; LD HL,(SYS_PAGE.TMP_BUFFER + 2) ; media size low +; LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow),H +; LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow+1),L +; LD HL,(SYS_PAGE.TMP_BUFFER + 6) ; sector size +; ; +; LD C,BIOS.Error.ATAPI.UnitAttention +; .No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H ;[ ] sector size +; LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L +; JR NC,.exit +; SET 2,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; .exit: POP AF POP HL @@ -1132,6 +1126,34 @@ ATAPI_MEDIA_ERROR: ; .unkn_error: LD C,BIOS.Error.ATAPI.MediumError JR .exit + + +;----------------------------------------------------------------------; +GET_ATAPI_CAPACITY: + ; + LD DE,SYS_PAGE.TMP_BUFFER + CALL ATAPI_READ_CAPACITY_DATA + ; + LD HL,#FFFF + LD C,BIOS.Error.ATAPI.MediumError + JR C,.No_Media + ; + LD HL,(SYS_PAGE.TMP_BUFFER) ; media size high + LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh),H + LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh+1),L + LD HL,(SYS_PAGE.TMP_BUFFER + 2) ; media size low + LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow),H + LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow+1),L + LD HL,(SYS_PAGE.TMP_BUFFER + 6) ; sector size + ; + LD C,BIOS.Error.ATAPI.UnitAttention +.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H ;[ ] sector size + LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L + RET NC + SET 2,(IY + IDE.HDD_INIT_TABLE.MediaParameters) + RET +;----------------------------------------------------------------------; + ;----------------------------------------------------------------------; ; !!! SELECT_DRIVE должен отработать заранее diff --git a/src/bios/rom/SETUP/AUTOIDE.asm b/src/bios/rom/SETUP/AUTOIDE.asm index 94bc057..ed6836b 100644 --- a/src/bios/rom/SETUP/AUTOIDE.asm +++ b/src/bios/rom/SETUP/AUTOIDE.asm @@ -459,7 +459,7 @@ PARSE_IdentifyDevice: LD (IY+IDE.HDD_INIT_TABLE.SectorsPerCylinderHigh),H .END: RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media ; [x] save hdd parameters to cmos for "setup" in settings - LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) ; for save to cmos in GETPARM +.END_2: LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags) ; for save to cmos in GETPARM ; EX AF,AF' OUT (SLOT3),A @@ -472,26 +472,40 @@ PARSE_IdentifyDevice: LD HL,ICHANEL OR (HL) LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A + ; + LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001 + LD B,200 ; счётчик попыток (1 попытка - 1 HALT) +.get_error_loop: + PUSH BC + ;LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY + ;CALL EXEC_PACKET_COMMAND.start + CALL EXEC_TEST_CMD + POP BC + JR NC,.s_size ; + CP BIOS.Error.ATAPI.UnitAttention + JR Z,PARSE_IdentifyDevice.END ;!TEST ;!FIXIT ZIP bug ; - ; на всякий случай - LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001 - LD B,200 ; счётчик попыток (1 попытка - 1 HALT) -.get_error_loop: PUSH BC - ;LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY - ;CALL EXEC_PACKET_COMMAND.start - CALL EXEC_TEST_CMD - POP BC - JR NC,.s_size - ; - CP BIOS.Error.ATAPI.UnitAttention - JR Z,PARSE_IdentifyDevice.END ;!TEST ;!FIXIT ZIP bug - ; - CP BIOS.Error.ATAPI.NotReady - HALT - JR Z,.get_error_loop - DJNZ .get_error_loop + HALT ; + PUSH AF + CALL SKIPKEY + JR NC,.noSkipKey + ; CF=1 + LD A,#FF + LD (SKIP),A + ; LD (IY+IDE.HDD_INIT_TABLE.SectorSize),A + ; LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),A + SET 2,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media + POP AF + SCF + JR .set_sector +.noSkipKey: POP AF + ; + CP BIOS.Error.ATAPI.NotReady + JR Z,.get_error_loop + DJNZ .get_error_loop + ; ; [ ] sector size ATAPI .s_size: LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; просто нужен был буфер CALL ATAPI_READ_CAPACITY_DATA @@ -675,26 +689,25 @@ SELECT_IDE: AND A ;%0000'0011 /////////////////////////////////////////////////////////////////////[v] -SKIPKEY: - EXX - CALL SCANKEY - EXX - SCF - CCF - RET Z - EXX - LD HL,#3E00 ;!HARDCODE - XOR A - SBC HL,DE - EXX - SCF - CCF - RET NZ - ;A=0 - LD (SKIP),A - INC A - SCF - RET ;ZF=0, CF=1 +SKIPKEY: EXX + CALL SCANKEY + EXX + ;SCF + ;CCF + RET Z + EXX + LD HL,#3E00 ;!HARDCODE + ;XOR A + SBC HL,DE + EXX + SCF + CCF + RET NZ + ;A=0 + LD (SKIP),A + INC A + SCF + RET ;ZF=0, CF=1 /////////////////////////////////////////////////////////////////////[^] diff --git a/src/bios/rom/SETUP/KEY.asm b/src/bios/rom/SETUP/KEY.asm index d4eaef0..40134bb 100644 --- a/src/bios/rom/SETUP/KEY.asm +++ b/src/bios/rom/SETUP/KEY.asm @@ -81,93 +81,89 @@ SF_BUFF EQU 0 ; D8 ; D7..D0 - ASCII code -WAITKEY: - LD HL,HOST - LD A,(HEAD) - CP (HL) - JR Z,WAITKEY - CALL GETSYM - LD A,E - AND A - RET +WAITKEY: LD HL,HOST + LD A,(HEAD) + CP (HL) + JR Z,WAITKEY + CALL GETSYM + LD A,E + ;AND A + RET -SCANKEY: - LD HL,HOST - LD A,(HEAD) - CP (HL) - RET Z - CALL GETSYM - LD A,E - RET +SCANKEY: LD HL,HOST + LD A,(HEAD) + CP (HL) + RET Z + CALL GETSYM + LD A,E + RET -CTRLKEY: - LD HL,HOST - LD A,(HEAD) - CP (HL) - LD BC,(KEYFLAG) - LD A,#00 - RET Z - DEC A - RET +CTRLKEY: LD HL,HOST + LD A,(HEAD) + CP (HL) + LD BC,(KEYFLAG) + LD A,#00 + RET Z + DEC A + RET -PUTSYM: LD HL,HEAD - LD A,(HOST) - SUB 4 - AND #3F - CP (HL) - JR Z,FULL_BF - LD A,(HL) - INC (HL) - INC (HL) - INC (HL) - INC (HL) - RES 6,(HL) - LD L,A - LD H,high SBUF - LD (HL),E - INC L - LD (HL),D - INC L - LD (HL),B - INC L - LD (HL),C - RET +PUTSYM: LD HL,HEAD + LD A,(HOST) + SUB 4 + AND #3F + CP (HL) + JR Z,FULL_BF + ; + CALL GetSymAddr + ; + LD (HL),E + INC L + LD (HL),D + INC L + LD (HL),B + INC L + LD (HL),C + RET -GETSYM: LD HL,HOST - LD A,(HEAD) - CP (HL) - RET Z - LD A,(HL) - INC (HL) - INC (HL) - INC (HL) - INC (HL) - RES 6,(HL) - LD L,A - LD H,high SBUF - LD E,(HL) - INC L - LD D,(HL) - INC L - LD B,(HL) - INC L - LD C,(HL) - RET +GetSymAddr: LD A,(HL) + INC (HL) + INC (HL) + INC (HL) + INC (HL) + RES 6,(HL) + LD L,A + LD H,high SBUF + RET -FULL_BF: - EX AF,AF' - BIT SF_BUFF,(IX+SOUND_K) - JR Z,.FBF - EXX - LD DE,230 - LD HL,50 - CALL BEEP - EXX -.FBF: EX AF,AF' - RET +GETSYM: LD HL,HOST + LD A,(HEAD) + CP (HL) + RET Z + AND A + ; + CALL GetSymAddr + ; + LD E,(HL) + INC L + LD D,(HL) + INC L + LD B,(HL) + INC L + LD C,(HL) + RET -KEYSCAN: - LD IX,KEYFLAG +FULL_BF: EX AF,AF' + BIT SF_BUFF,(IX+SOUND_K) + JR Z,.FBF + EXX + LD DE,230 + LD HL,50 + CALL BEEP + EXX +.FBF: EX AF,AF' + RET + +KEYSCAN: LD IX,KEYFLAG RESCANN: IN A,(Z84.SIO.Ch_A.Ctrl) AND 1 diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index 148ed49..efd11c3 100644 Binary files a/src/bios/shared/RECOVERY.IMG and b/src/bios/shared/RECOVERY.IMG differ